diff --git a/res/layout/shared_data_empty_list_view.xml b/res/layout/shared_data_empty_list_view.xml deleted file mode 100644 index 1bb338bdaf8..00000000000 --- a/res/layout/shared_data_empty_list_view.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - diff --git a/src/com/android/settings/development/storage/BlobInfoListView.java b/src/com/android/settings/development/storage/BlobInfoListView.java index 427e37fbc10..8e312a25579 100644 --- a/src/com/android/settings/development/storage/BlobInfoListView.java +++ b/src/com/android/settings/development/storage/BlobInfoListView.java @@ -16,6 +16,7 @@ package com.android.settings.development.storage; +import android.app.ActionBar; import android.app.ListActivity; import android.app.blob.BlobInfo; import android.app.blob.BlobStoreManager; @@ -30,7 +31,6 @@ import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; import android.widget.ListView; -import android.widget.TextView; import android.widget.Toast; import androidx.appcompat.app.AlertDialog; @@ -41,7 +41,6 @@ import com.android.settings.R; import java.io.IOException; import java.util.List; -// TODO: have this class extend DashboardFragment for consistency public class BlobInfoListView extends ListActivity { private static final String TAG = "BlobInfoListView"; @@ -60,6 +59,17 @@ public class BlobInfoListView extends ListActivity { mAdapter = new BlobListAdapter(this); setListAdapter(mAdapter); + + final ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onNavigateUp() { + finish(); + return true; } @Override @@ -91,14 +101,6 @@ public class BlobInfoListView extends ListActivity { } } - private View getEmptyView() { - final View emptyView = mInflater.inflate(R.layout.shared_data_empty_list_view, - (ViewGroup) getListView().getRootView()); - final TextView emptyText = emptyView.findViewById(R.id.empty_view_text); - emptyText.setText(R.string.shared_data_no_blobs_text); - return emptyView; - } - private void showDeleteBlobDialog(BlobInfo blob) { final AlertDialog dialog = new AlertDialog.Builder(mContext) .setMessage(R.string.shared_data_no_accessors_dialog_text) @@ -139,7 +141,7 @@ public class BlobInfoListView extends ListActivity { void updateList(List blobs) { clear(); if (blobs.isEmpty()) { - getListView().setEmptyView(getEmptyView()); + finish(); } else { addAll(blobs); } diff --git a/src/com/android/settings/development/storage/LeaseInfoListView.java b/src/com/android/settings/development/storage/LeaseInfoListView.java index b9a30427397..ef9e5b813f2 100644 --- a/src/com/android/settings/development/storage/LeaseInfoListView.java +++ b/src/com/android/settings/development/storage/LeaseInfoListView.java @@ -16,6 +16,7 @@ package com.android.settings.development.storage; +import android.app.ActionBar; import android.app.ListActivity; import android.app.blob.BlobInfo; import android.app.blob.BlobStoreManager; @@ -44,7 +45,6 @@ import com.android.settings.R; import java.io.IOException; import java.util.List; -// TODO: have this class extend DashboardFragment for consistency public class LeaseInfoListView extends ListActivity { private static final String TAG = "LeaseInfoListView"; @@ -74,6 +74,17 @@ public class LeaseInfoListView extends ListActivity { getListView().addHeaderView(getHeaderView()); getListView().addFooterView(getFooterView()); getListView().setClickable(false); + + final ActionBar actionBar = getActionBar(); + if (actionBar != null) { + actionBar.setDisplayHomeAsUpEnabled(true); + } + } + + @Override + public boolean onNavigateUp() { + finish(); + return true; } private LinearLayout getHeaderView() { diff --git a/src/com/android/settings/development/storage/SharedDataPreferenceController.java b/src/com/android/settings/development/storage/SharedDataPreferenceController.java index 1d5c3e40168..5d94dc81ee8 100644 --- a/src/com/android/settings/development/storage/SharedDataPreferenceController.java +++ b/src/com/android/settings/development/storage/SharedDataPreferenceController.java @@ -18,13 +18,20 @@ package com.android.settings.development.storage; import android.app.blob.BlobStoreManager; import android.content.Context; +import android.os.UserHandle; +import android.util.Log; import androidx.preference.Preference; +import com.android.settings.R; +import com.android.settings.core.PreferenceControllerMixin; import com.android.settingslib.development.DeveloperOptionsPreferenceController; -public class SharedDataPreferenceController extends DeveloperOptionsPreferenceController { +import java.io.IOException; +public class SharedDataPreferenceController extends DeveloperOptionsPreferenceController + implements PreferenceControllerMixin { + private static final String TAG = "SharedDataPrefCtrl"; private static final String SHARED_DATA = "shared_data"; private BlobStoreManager mBlobStoreManager; @@ -39,14 +46,18 @@ public class SharedDataPreferenceController extends DeveloperOptionsPreferenceCo return SHARED_DATA; } - @Override - public boolean isAvailable() { - return mBlobStoreManager != null; - } - @Override public void updateState(Preference preference) { - preference.setEnabled(mBlobStoreManager != null); - // TODO: update summary to indicate why this preference isn't available + try { + final boolean showPref = mBlobStoreManager != null + && !mBlobStoreManager.queryBlobsForUser(UserHandle.CURRENT).isEmpty(); + preference.setEnabled(showPref); + preference.setSummary(showPref ? R.string.shared_data_summary + : R.string.shared_data_no_blobs_text); + } catch (IOException e) { + Log.e(TAG, "Unable to fetch blobs for current user: " + e.getMessage()); + preference.setEnabled(false); + preference.setSummary(R.string.shared_data_no_blobs_text); + } } } diff --git a/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java index 86bb4a70883..f11fb399689 100644 --- a/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/development/storage/SharedDataPreferenceControllerTest.java @@ -22,8 +22,11 @@ import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import android.app.blob.BlobInfo; import android.app.blob.BlobStoreManager; +import android.app.blob.LeaseInfo; import android.content.Context; +import android.os.UserHandle; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; @@ -38,6 +41,10 @@ import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.util.ReflectionHelpers; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + // TODO: add more detailed tests for the shared data screens @RunWith(RobolectricTestRunner.class) public class SharedDataPreferenceControllerTest { @@ -63,8 +70,11 @@ public class SharedDataPreferenceControllerTest { } @Test - public void updateState_BlobManagerIsNotNull_preferenceIsEnabled() { + public void updateState_BlobManagerIsNotNullAndBlobsExist_preferenceIsEnabled() + throws IOException { ReflectionHelpers.setField(mController, "mBlobStoreManager", mBlobStoreManager); + when(mBlobStoreManager.queryBlobsForUser(UserHandle.CURRENT)) + .thenReturn(generateBlobList()); mController.updateState(mPreference); verify(mPreference).setEnabled(true); @@ -72,11 +82,38 @@ public class SharedDataPreferenceControllerTest { .isEqualTo(mContext.getString(R.string.shared_data_summary)); } + @Test + public void updateState_BlobManagerIsNotNullButNoBlobsExist_preferenceIsDisabled() { + ReflectionHelpers.setField(mController, "mBlobStoreManager", mBlobStoreManager); + mController.updateState(mPreference); + + verify(mPreference).setEnabled(false); + assertThat(mPreference.getSummary()) + .isEqualTo(mContext.getString(R.string.shared_data_no_blobs_text)); + } + @Test public void updateState_BlobManagerIsNull_preferenceIsDisabled() { ReflectionHelpers.setField(mController, "mBlobStoreManager", null); mController.updateState(mPreference); verify(mPreference).setEnabled(false); + assertThat(mPreference.getSummary()) + .isEqualTo(mContext.getString(R.string.shared_data_no_blobs_text)); + } + + private List generateBlobList() { + LeaseInfo one = new LeaseInfo("com.google.android.photos", + System.currentTimeMillis(), -1, "test description"); + LeaseInfo two = new LeaseInfo("com.google.android.drive", + System.currentTimeMillis(), -1, "test description 2"); + + List accessors = new ArrayList<>(); + accessors.add(one); + accessors.add(two); + + final List tmp = new ArrayList<>(); + tmp.add(new BlobInfo(10, System.currentTimeMillis(), "testing blob 1", accessors)); + return tmp; } }