Merge "Add Intentfilter BasePreferenceController" into pi-dev

This commit is contained in:
TreeHugger Robot
2018-05-18 18:41:53 +00:00
committed by Android (Google) Code Review
5 changed files with 60 additions and 9 deletions

View File

@@ -15,6 +15,7 @@ package com.android.settings.core;
import android.annotation.IntDef; import android.annotation.IntDef;
import android.content.Context; import android.content.Context;
import android.content.IntentFilter;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
@@ -220,6 +221,14 @@ public abstract class BasePreferenceController extends AbstractPreferenceControl
return SliceData.SliceType.INTENT; return SliceData.SliceType.INTENT;
} }
/**
* @return an {@link IntentFilter} that includes all broadcasts which can affect the state of
* this Setting.
*/
public IntentFilter getIntentFilter() {
return null;
}
/** /**
* Updates non-indexable keys for search provider. * Updates non-indexable keys for search provider.
* *

View File

@@ -17,6 +17,8 @@
package com.android.settings.notification; package com.android.settings.notification;
import android.content.Context; import android.content.Context;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.support.v7.preference.Preference; import android.support.v7.preference.Preference;
@@ -57,4 +59,12 @@ public abstract class AdjustVolumeRestrictedPreferenceController extends
UserManager.DISALLOW_ADJUST_VOLUME, UserHandle.myUserId()); UserManager.DISALLOW_ADJUST_VOLUME, UserHandle.myUserId());
} }
@Override
public IntentFilter getIntentFilter() {
final IntentFilter filter = new IntentFilter();
filter.addAction(AudioManager.VOLUME_CHANGED_ACTION);
filter.addAction(AudioManager.STREAM_MUTE_CHANGED_ACTION);
filter.addAction(AudioManager.MASTER_MUTE_CHANGED_ACTION);
return filter;
}
} }

View File

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

View File

@@ -18,10 +18,13 @@
package com.android.settings.slices; package com.android.settings.slices;
import static android.content.ContentResolver.SCHEME_CONTENT; import static android.content.ContentResolver.SCHEME_CONTENT;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.mock; import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy; import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.app.slice.SliceManager; import android.app.slice.SliceManager;
@@ -107,7 +110,7 @@ public class SettingsSliceProviderTest {
@Test @Test
public void testInitialSliceReturned_emptySlice() { public void testInitialSliceReturned_emptySlice() {
insertSpecialCase(KEY); insertSpecialCase(KEY);
Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false); final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
Slice slice = mProvider.onBindSlice(uri); Slice slice = mProvider.onBindSlice(uri);
assertThat(slice.getUri()).isEqualTo(uri); assertThat(slice.getUri()).isEqualTo(uri);
@@ -117,7 +120,7 @@ public class SettingsSliceProviderTest {
@Test @Test
public void testLoadSlice_returnsSliceFromAccessor() { public void testLoadSlice_returnsSliceFromAccessor() {
insertSpecialCase(KEY); insertSpecialCase(KEY);
Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false); final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
mProvider.loadSlice(uri); mProvider.loadSlice(uri);
SliceData data = mProvider.mSliceWeakDataCache.get(uri); SliceData data = mProvider.mSliceWeakDataCache.get(uri);
@@ -126,10 +129,20 @@ public class SettingsSliceProviderTest {
assertThat(data.getTitle()).isEqualTo(TITLE); assertThat(data.getTitle()).isEqualTo(TITLE);
} }
@Test
public void loadSlice_registersIntentFilter() {
insertSpecialCase(KEY);
final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
mProvider.loadSlice(uri);
verify(mProvider).registerIntentToUri(eq(FakeToggleController.INTENT_FILTER), eq(uri));
}
@Test @Test
public void testLoadSlice_doesNotCacheWithoutPin() { public void testLoadSlice_doesNotCacheWithoutPin() {
insertSpecialCase(KEY); insertSpecialCase(KEY);
Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false); final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
mProvider.loadSlice(uri); mProvider.loadSlice(uri);
SliceData data = mProvider.mSliceDataCache.get(uri); SliceData data = mProvider.mSliceDataCache.get(uri);
@@ -140,7 +153,7 @@ public class SettingsSliceProviderTest {
@Test @Test
public void testLoadSlice_cachesWithPin() { public void testLoadSlice_cachesWithPin() {
insertSpecialCase(KEY); insertSpecialCase(KEY);
Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false); final Uri uri = SliceBuilderUtils.getUri(INTENT_PATH, false);
when(mManager.getPinnedSlices()).thenReturn(Arrays.asList(uri)); when(mManager.getPinnedSlices()).thenReturn(Arrays.asList(uri));
mProvider.loadSlice(uri); mProvider.loadSlice(uri);
@@ -398,7 +411,7 @@ public class SettingsSliceProviderTest {
values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, "s"); values.put(SlicesDatabaseHelper.IndexColumns.SCREENTITLE, "s");
values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, 1234); values.put(SlicesDatabaseHelper.IndexColumns.ICON_RESOURCE, 1234);
values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, "test"); values.put(SlicesDatabaseHelper.IndexColumns.FRAGMENT, "test");
values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, "test"); values.put(SlicesDatabaseHelper.IndexColumns.CONTROLLER, PREF_CONTROLLER);
values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice); values.put(SlicesDatabaseHelper.IndexColumns.PLATFORM_SLICE, isPlatformSlice);
values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT); values.put(SlicesDatabaseHelper.IndexColumns.SLICE_TYPE, SliceData.SliceType.INTENT);

View File

@@ -18,6 +18,8 @@
package com.android.settings.testutils; package com.android.settings.testutils;
import android.content.Context; import android.content.Context;
import android.content.IntentFilter;
import android.net.wifi.WifiManager;
import android.provider.Settings; import android.provider.Settings;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
@@ -28,6 +30,9 @@ public class FakeToggleController extends TogglePreferenceController {
public static final String AVAILABILITY_KEY = "fake_toggle_availability_key"; public static final String AVAILABILITY_KEY = "fake_toggle_availability_key";
public static final IntentFilter INTENT_FILTER = new IntentFilter(
WifiManager.WIFI_AP_STATE_CHANGED_ACTION);
private final int ON = 1; private final int ON = 1;
private final int OFF = 0; private final int OFF = 0;
@@ -52,4 +57,9 @@ public class FakeToggleController extends TogglePreferenceController {
return Settings.Global.getInt(mContext.getContentResolver(), return Settings.Global.getInt(mContext.getContentResolver(),
AVAILABILITY_KEY, AVAILABLE); AVAILABILITY_KEY, AVAILABLE);
} }
@Override
public IntentFilter getIntentFilter() {
return INTENT_FILTER;
}
} }