diff --git a/src/com/android/settings/slices/CustomSliceManager.java b/src/com/android/settings/slices/CustomSliceManager.java index f3df3c19d55..8230a6fa0ca 100644 --- a/src/com/android/settings/slices/CustomSliceManager.java +++ b/src/com/android/settings/slices/CustomSliceManager.java @@ -20,6 +20,8 @@ import android.content.Context; import android.net.Uri; import android.util.ArrayMap; +import com.android.settings.wifi.WifiSlice; + import java.util.Map; /** @@ -36,7 +38,7 @@ public class CustomSliceManager { private final Context mContext; public CustomSliceManager(Context context) { - mContext = context; + mContext = context.getApplicationContext(); mUriMap = new ArrayMap<>(); addSlices(); } @@ -84,5 +86,6 @@ public class CustomSliceManager { } private void addSlices() { + mUriMap.put(WifiSlice.WIFI_URI, WifiSlice.class); } } \ No newline at end of file diff --git a/src/com/android/settings/slices/CustomSliceable.java b/src/com/android/settings/slices/CustomSliceable.java index afe7170c508..52bed23935e 100644 --- a/src/com/android/settings/slices/CustomSliceable.java +++ b/src/com/android/settings/slices/CustomSliceable.java @@ -16,6 +16,7 @@ package com.android.settings.slices; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; @@ -56,33 +57,53 @@ public interface CustomSliceable { /** * @return an complete instance of the {@link Slice}. */ - Slice getSlice(Context context); + Slice getSlice(); /** * @return a {@link android.content.ContentResolver#SCHEME_CONTENT content} {@link Uri} which - * backs the {@link Slice} returned by {@link #getSlice(Context)}. + * backs the {@link Slice} returned by {@link #getSlice()}. */ Uri getUri(); /** * Handles the actions sent by the {@link Intent intents} bound to the {@link Slice} returned by - * {@link #getSlice(Context)}. + * {@link #getSlice()}. * * @param intent which has the action taken on a {@link Slice}. */ void onNotifyChange(Intent intent); + /** + * @return an {@link Intent} to the source of the Slice data. + */ + Intent getIntent(); + /** * Settings Slices which can represent components that are updatable by the framework should * listen to changes matched to the {@link IntentFilter} returned here. * * @return an {@link IntentFilter} for updates related to the {@link Slice} returned by - * {@link #getSlice(Context)}. + * {@link #getSlice()}. */ default IntentFilter getIntentFilter() { return null; } + /** + * Standardize the intents returned to indicate actions by the Slice. + *
+ * The {@link PendingIntent} is linked to {@link SliceBroadcastReceiver} where the Intent
+ * Action is found by {@code getUri().toString()}.
+ *
+ * @return a {@link PendingIntent} linked to {@link SliceBroadcastReceiver}.
+ */
+ default PendingIntent getBroadcastIntent(Context context) {
+ final Intent intent = new Intent(getUri().toString());
+ intent.setClass(context, SliceBroadcastReceiver.class);
+ return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
+ PendingIntent.FLAG_CANCEL_CURRENT);
+ }
+
/**
* Build an instance of a {@link CustomSliceable} which has a {@link Context}-only constructor.
*/
diff --git a/src/com/android/settings/slices/SettingsSliceProvider.java b/src/com/android/settings/slices/SettingsSliceProvider.java
index f7cbf83c9ac..10cc5b45252 100644
--- a/src/com/android/settings/slices/SettingsSliceProvider.java
+++ b/src/com/android/settings/slices/SettingsSliceProvider.java
@@ -39,7 +39,8 @@ import com.android.settings.location.LocationSliceBuilder;
import com.android.settings.mobilenetwork.Enhanced4gLteSliceHelper;
import com.android.settings.notification.ZenModeSliceBuilder;
import com.android.settings.overlay.FeatureFactory;
-import com.android.settings.wifi.WifiSliceBuilder;
+import com.android.settings.core.BasePreferenceController;
+import com.android.settings.wifi.WifiSlice;
import com.android.settings.wifi.calling.WifiCallingSliceHelper;
import com.android.settingslib.SliceBroadcastRelay;
import com.android.settingslib.utils.ThreadUtils;
@@ -166,11 +167,7 @@ public class SettingsSliceProvider extends SliceProvider {
return;
}
- if (WifiSliceBuilder.WIFI_URI.equals(sliceUri)) {
- registerIntentToUri(WifiSliceBuilder.INTENT_FILTER, sliceUri);
- mRegisteredUris.add(sliceUri);
- return;
- } else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(sliceUri)) {
+ if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(sliceUri)) {
registerIntentToUri(ZenModeSliceBuilder.INTENT_FILTER, sliceUri);
return;
} else if (BluetoothSliceBuilder.BLUETOOTH_URI.equals(sliceUri)) {
@@ -217,7 +214,7 @@ public class SettingsSliceProvider extends SliceProvider {
if (mCustomSliceManager.isValidUri(sliceUri)) {
final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri(
sliceUri);
- return sliceable.getSlice(getContext());
+ return sliceable.getSlice();
}
if (WifiCallingSliceHelper.WIFI_CALLING_URI.equals(sliceUri)) {
@@ -225,8 +222,6 @@ public class SettingsSliceProvider extends SliceProvider {
.getSlicesFeatureProvider()
.getNewWifiCallingSliceHelper(getContext())
.createWifiCallingSlice(sliceUri);
- } else if (WifiSliceBuilder.WIFI_URI.equals(sliceUri)) {
- return WifiSliceBuilder.getSlice(getContext());
} else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(sliceUri)) {
return ZenModeSliceBuilder.getSlice(getContext());
} else if (BluetoothSliceBuilder.BLUETOOTH_URI.equals(sliceUri)) {
@@ -402,7 +397,7 @@ public class SettingsSliceProvider extends SliceProvider {
private List
- * Note that you should register a listener for {@link #INTENT_FILTER} to get changes for Wifi.
*/
- public static Slice getSlice(Context context) {
- final boolean isWifiEnabled = isWifiEnabled(context);
- final IconCompat icon = IconCompat.createWithResource(context,
+ @Override
+ public Slice getSlice() {
+ final boolean isWifiEnabled = isWifiEnabled();
+ final IconCompat icon = IconCompat.createWithResource(mContext,
R.drawable.ic_settings_wireless);
- final String title = context.getString(R.string.wifi_settings);
- final CharSequence summary = getSummary(context);
- @ColorInt final int color = Utils.getColorAccentDefaultColor(context);
- final PendingIntent toggleAction = getBroadcastIntent(context);
- final PendingIntent primaryAction = getPrimaryAction(context);
+ final String title = mContext.getString(R.string.wifi_settings);
+ final CharSequence summary = getSummary();
+ @ColorInt final int color = Utils.getColorAccentDefaultColor(mContext);
+ final PendingIntent toggleAction = getBroadcastIntent(mContext);
+ final PendingIntent primaryAction = getPrimaryAction();
final SliceAction primarySliceAction = new SliceAction(primaryAction, icon, title);
final SliceAction toggleSliceAction = new SliceAction(toggleAction, null /* actionTitle */,
isWifiEnabled);
- return new ListBuilder(context, WIFI_URI, ListBuilder.INFINITY)
+ return new ListBuilder(mContext, WIFI_URI, ListBuilder.INFINITY)
.setAccentColor(color)
.addRow(new RowBuilder()
.setTitle(title)
@@ -108,8 +111,9 @@ public class WifiSliceBuilder {
* Update the current wifi status to the boolean value keyed by
* {@link android.app.slice.Slice#EXTRA_TOGGLE_STATE} on {@param intent}.
*/
- public static void handleUriChange(Context context, Intent intent) {
- final WifiManager wifiManager = context.getSystemService(WifiManager.class);
+ @Override
+ public void onNotifyChange(Intent intent) {
+ final WifiManager wifiManager = mContext.getSystemService(WifiManager.class);
final boolean newState = intent.getBooleanExtra(EXTRA_TOGGLE_STATE,
wifiManager.isWifiEnabled());
wifiManager.setWifiEnabled(newState);
@@ -118,20 +122,21 @@ public class WifiSliceBuilder {
// handle it.
}
- public static Intent getIntent(Context context) {
- final String screenTitle = context.getText(R.string.wifi_settings).toString();
+ @Override
+ public Intent getIntent() {
+ final String screenTitle = mContext.getText(R.string.wifi_settings).toString();
final Uri contentUri = new Uri.Builder().appendPath(KEY_WIFI).build();
- final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(context,
+ final Intent intent = SliceBuilderUtils.buildSearchResultPageIntent(mContext,
WifiSettings.class.getName(), KEY_WIFI, screenTitle,
MetricsEvent.DIALOG_WIFI_AP_EDIT)
- .setClassName(context.getPackageName(), SubSettings.class.getName())
+ .setClassName(mContext.getPackageName(), SubSettings.class.getName())
.setData(contentUri);
return intent;
}
- private static boolean isWifiEnabled(Context context) {
- final WifiManager wifiManager = context.getSystemService(WifiManager.class);
+ private boolean isWifiEnabled() {
+ final WifiManager wifiManager = mContext.getSystemService(WifiManager.class);
switch (wifiManager.getWifiState()) {
case WifiManager.WIFI_STATE_ENABLED:
@@ -145,38 +150,31 @@ public class WifiSliceBuilder {
}
}
- private static CharSequence getSummary(Context context) {
- final WifiManager wifiManager = context.getSystemService(WifiManager.class);
+ private CharSequence getSummary() {
+ final WifiManager wifiManager = mContext.getSystemService(WifiManager.class);
switch (wifiManager.getWifiState()) {
case WifiManager.WIFI_STATE_ENABLED:
final String ssid = WifiInfo.removeDoubleQuotes(wifiManager.getConnectionInfo()
.getSSID());
if (TextUtils.equals(ssid, WifiSsid.NONE)) {
- return context.getText(R.string.disconnected);
+ return mContext.getText(R.string.disconnected);
}
return ssid;
case WifiManager.WIFI_STATE_ENABLING:
- return context.getText(R.string.disconnected);
+ return mContext.getText(R.string.disconnected);
case WifiManager.WIFI_STATE_DISABLED:
case WifiManager.WIFI_STATE_DISABLING:
- return context.getText(R.string.switch_off_text);
+ return mContext.getText(R.string.switch_off_text);
case WifiManager.WIFI_STATE_UNKNOWN:
default:
return "";
}
}
- private static PendingIntent getPrimaryAction(Context context) {
- final Intent intent = getIntent(context);
- return PendingIntent.getActivity(context, 0 /* requestCode */,
+ private PendingIntent getPrimaryAction() {
+ final Intent intent = getIntent();
+ return PendingIntent.getActivity(mContext, 0 /* requestCode */,
intent, 0 /* flags */);
}
-
- private static PendingIntent getBroadcastIntent(Context context) {
- final Intent intent = new Intent(ACTION_WIFI_SLICE_CHANGED);
- intent.setClass(context, SliceBroadcastReceiver.class);
- return PendingIntent.getBroadcast(context, 0 /* requestCode */, intent,
- PendingIntent.FLAG_CANCEL_CURRENT);
- }
}
diff --git a/tests/robotests/src/com/android/settings/mobilenetwork/Enhanced4gLteSliceHelperTest.java b/tests/robotests/src/com/android/settings/mobilenetwork/Enhanced4gLteSliceHelperTest.java
index 434a89ddf90..908e009b1eb 100644
--- a/tests/robotests/src/com/android/settings/mobilenetwork/Enhanced4gLteSliceHelperTest.java
+++ b/tests/robotests/src/com/android/settings/mobilenetwork/Enhanced4gLteSliceHelperTest.java
@@ -84,8 +84,9 @@ public class Enhanced4gLteSliceHelperTest {
mFeatureFactory = FakeFeatureFactory.setupForTest();
mSlicesFeatureProvider = mFeatureFactory.getSlicesFeatureProvider();
+ CustomSliceManager manager = new CustomSliceManager(mContext);
when(mSlicesFeatureProvider.getCustomSliceManager(any(Context.class)))
- .thenReturn(new CustomSliceManager(mContext));
+ .thenReturn(manager);
//setup for SettingsSliceProvider tests
mProvider = spy(new SettingsSliceProvider());
diff --git a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
index 3cb502eee69..b850e86ff52 100644
--- a/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
+++ b/tests/robotests/src/com/android/settings/slices/SettingsSliceProviderTest.java
@@ -45,7 +45,7 @@ import com.android.settings.testutils.DatabaseTestUtils;
import com.android.settings.testutils.FakeToggleController;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.shadow.ShadowThreadUtils;
-import com.android.settings.wifi.WifiSliceBuilder;
+import com.android.settings.wifi.WifiSlice;
import org.junit.After;
import org.junit.Before;
@@ -94,7 +94,7 @@ public class SettingsSliceProviderTest {
private SliceManager mManager;
private static final List