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

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