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;
}
}