Merge "Add Intentfilter BasePreferenceController"
This commit is contained in:
committed by
Android (Google) Code Review
commit
cf0e76b4cf
@@ -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;
|
||||||
|
|
||||||
@@ -225,6 +226,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.
|
||||||
*
|
*
|
||||||
|
@@ -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 androidx.preference.Preference;
|
import androidx.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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -30,6 +30,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;
|
||||||
@@ -142,7 +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/78138654) Register IntentFilters for database entries.
|
|
||||||
mRegisteredUris.add(sliceUri);
|
mRegisteredUris.add(sliceUri);
|
||||||
return;
|
return;
|
||||||
} else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(sliceUri)) {
|
} else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(sliceUri)) {
|
||||||
@@ -158,6 +158,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);
|
||||||
}
|
}
|
||||||
@@ -279,7 +280,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);
|
||||||
@@ -332,6 +341,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);
|
||||||
}
|
}
|
||||||
|
@@ -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);
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user