Update display logic for no shared data.

When there is no shared data, instead of showing an empty list view,
the developer option's summary is updated.

Additionally, for the two shared data screens, added the back button to
the action bar so that it matches the other screens in the Settings app.

Also, implemented PreferenceControllerMixin for the
SharedDataPreferenceController so that the dev option shows up in
settings search.

Bug: 153079829
Test: make RunSettingsRoboTests ROBOTEST_FILTER=SharedDataPreferenceControllerTest
Test: manual (visual)
Change-Id: I6ec5c35fc262dc27a383af8e2593be5b349ee85f
This commit is contained in:
Varun Shah
2020-04-03 17:53:21 -07:00
parent 7efe9315ba
commit 2aeedcde21
5 changed files with 82 additions and 52 deletions

View File

@@ -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<BlobInfo> blobs) {
clear();
if (blobs.isEmpty()) {
getListView().setEmptyView(getEmptyView());
finish();
} else {
addAll(blobs);
}

View File

@@ -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() {

View File

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