Add Intentfilter BasePreferenceController

For settings which can change in the framework, outside of
the settings app and a slice, a Slice needs to be able to
register a listener for these changes.

Adding a getter for an IntentFilter in BasePreferenceControllers
allows us to use the SliceBroadcastRelay in SysUi to listen for
these changes.

Test: robotests
Fixes: 78138654

Change-Id: I579375069ca98fd21b60cd3a69c1a122cabf96e2
Merged-In: Ifa05b651aaa3458c54866f71469964b1a070e458
This commit is contained in:
Matthew Fritze
2018-05-11 08:35:42 -07:00
parent 6dc6462a54
commit 4a6f058552
5 changed files with 60 additions and 9 deletions

View File

@@ -22,7 +22,6 @@ import android.app.slice.SliceManager;
import android.content.ContentResolver;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.Context;
import android.net.Uri;
import android.provider.SettingsSlicesContract;
import android.support.annotation.VisibleForTesting;
@@ -33,6 +32,7 @@ import android.util.Log;
import android.util.Pair;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.core.BasePreferenceController;
import com.android.settings.wifi.WifiSliceBuilder;
import com.android.settings.wifi.calling.WifiCallingSliceHelper;
import com.android.settings.notification.ZenModeSliceBuilder;
@@ -143,8 +143,6 @@ public class SettingsSliceProvider extends SliceProvider {
public void onSlicePinned(Uri sliceUri) {
if (WifiSliceBuilder.WIFI_URI.equals(sliceUri)) {
registerIntentToUri(WifiSliceBuilder.INTENT_FILTER , sliceUri);
// TODO (b/) Register IntentFilters for database entries.
mRegisteredUris.add(sliceUri);
return;
} else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(sliceUri)) {
registerIntentToUri(ZenModeSliceBuilder.INTENT_FILTER, sliceUri);
@@ -159,6 +157,7 @@ public class SettingsSliceProvider extends SliceProvider {
@Override
public void onSliceUnpinned(Uri sliceUri) {
if (mRegisteredUris.contains(sliceUri)) {
Log.d(TAG, "Unregistering uri broadcast relay: " + sliceUri);
SliceBroadcastRelay.unregisterReceivers(getContext(), sliceUri);
mRegisteredUris.remove(sliceUri);
}
@@ -280,7 +279,15 @@ public class SettingsSliceProvider extends SliceProvider {
long startBuildTime = System.currentTimeMillis();
final SliceData sliceData = mSlicesDatabaseAccessor.getSliceDataFromUri(uri);
List<Uri> pinnedSlices = getContext().getSystemService(
final BasePreferenceController controller = SliceBuilderUtils.getPreferenceController(
getContext(), sliceData);
final IntentFilter filter = controller.getIntentFilter();
if (filter != null) {
registerIntentToUri(filter, uri);
}
final List<Uri> pinnedSlices = getContext().getSystemService(
SliceManager.class).getPinnedSlices();
if (pinnedSlices.contains(uri)) {
mSliceDataCache.put(uri, sliceData);
@@ -333,6 +340,8 @@ public class SettingsSliceProvider extends SliceProvider {
* {@param intentFilter} happen.
*/
void registerIntentToUri(IntentFilter intentFilter, Uri sliceUri) {
Log.d(TAG, "Registering Uri for broadcast relay: " + sliceUri);
mRegisteredUris.add(sliceUri);
SliceBroadcastRelay.registerReceiver(getContext(), sliceUri, SliceBroadcastReceiver.class,
intentFilter);
}