Refactor WifiSlice to CustomSliceManager

Modify the WifiSliceCode to follow the pattern for
Slices that do not match existing UI components.

Test: robotests
Bug: 80263568
Change-Id: Id69e019608777282f4b64ff945e8c30c97aaf577
This commit is contained in:
Matthew Fritze
2018-07-20 09:41:40 -07:00
committed by Matt Fritze
parent 3df19f92b0
commit 7f0a30226a
13 changed files with 125 additions and 90 deletions

View File

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

View File

@@ -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.
* <p>
* 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.
*/

View File

@@ -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<Uri> getSpecialCasePlatformUris() {
return Arrays.asList(
WifiSliceBuilder.WIFI_URI,
WifiSlice.WIFI_URI,
BluetoothSliceBuilder.BLUETOOTH_URI,
LocationSliceBuilder.LOCATION_URI
);

View File

@@ -26,7 +26,6 @@ import static com.android.settings.slices.SettingsSliceProvider.ACTION_SLIDER_CH
import static com.android.settings.slices.SettingsSliceProvider.ACTION_TOGGLE_CHANGED;
import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_KEY;
import static com.android.settings.slices.SettingsSliceProvider.EXTRA_SLICE_PLATFORM_DEFINED;
import static com.android.settings.wifi.WifiSliceBuilder.ACTION_WIFI_SLICE_CHANGED;
import static com.android.settings.wifi.calling.WifiCallingSliceHelper.ACTION_WIFI_CALLING_CHANGED;
import static com.android.settings.wifi.calling.WifiCallingSliceHelper
.ACTION_WIFI_CALLING_PREFERENCE_CELLULAR_PREFERRED;
@@ -54,7 +53,6 @@ import com.android.settings.core.TogglePreferenceController;
import com.android.settings.flashlight.FlashlightSliceBuilder;
import com.android.settings.notification.ZenModeSliceBuilder;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.WifiSliceBuilder;
/**
* Responds to actions performed on slices and notifies slices of updates in state changes.
@@ -91,9 +89,6 @@ public class SliceBroadcastReceiver extends BroadcastReceiver {
case ACTION_BLUETOOTH_SLICE_CHANGED:
BluetoothSliceBuilder.handleUriChange(context, intent);
break;
case ACTION_WIFI_SLICE_CHANGED:
WifiSliceBuilder.handleUriChange(context, intent);
break;
case ACTION_WIFI_CALLING_CHANGED:
FeatureFactory.getFactory(context)
.getSlicesFeatureProvider()

View File

@@ -16,6 +16,7 @@ package com.android.settings.slices;
import android.app.Activity;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.Uri;
import android.os.Bundle;
import android.provider.Settings;
@@ -24,7 +25,8 @@ import android.util.Log;
import com.android.settings.bluetooth.BluetoothSliceBuilder;
import com.android.settings.location.LocationSliceBuilder;
import com.android.settings.notification.ZenModeSliceBuilder;
import com.android.settings.wifi.WifiSliceBuilder;
import com.android.settings.overlay.FeatureFactory;
import com.android.settings.wifi.WifiSlice;
import java.net.URISyntaxException;
@@ -50,23 +52,28 @@ public class SliceDeepLinkSpringBoard extends Activity {
if (ACTION_VIEW_SLICE.equals(intent.getAction())) {
// This shouldn't matter since the slice is shown instead of the device
// index caring about the launch uri.
final Uri slice = Uri.parse(intent.getStringExtra(EXTRA_SLICE));
final Intent launchIntent;
final Uri sliceUri = Uri.parse(intent.getStringExtra(EXTRA_SLICE));
Intent launchIntent;
// TODO (b/80263568) Avoid duplicating this list of Slice Uris.
if (WifiSliceBuilder.WIFI_URI.equals(slice)) {
launchIntent = WifiSliceBuilder.getIntent(this /* context */);
} else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(slice)) {
final CustomSliceManager customSliceManager = FeatureFactory.getFactory(this)
.getSlicesFeatureProvider().getCustomSliceManager(this);
if (customSliceManager.isValidUri(sliceUri)) {
final CustomSliceable sliceable =
customSliceManager.getSliceableFromUri(sliceUri);
launchIntent = sliceable.getIntent();
} else if (ZenModeSliceBuilder.ZEN_MODE_URI.equals(sliceUri)) {
launchIntent = ZenModeSliceBuilder.getIntent(this /* context */);
} else if (BluetoothSliceBuilder.BLUETOOTH_URI.equals(slice)) {
} else if (BluetoothSliceBuilder.BLUETOOTH_URI.equals(sliceUri)) {
launchIntent = BluetoothSliceBuilder.getIntent(this /* context */);
} else if (LocationSliceBuilder.LOCATION_URI.equals(slice)) {
} else if (LocationSliceBuilder.LOCATION_URI.equals(sliceUri)) {
launchIntent = LocationSliceBuilder.getIntent(this /* context */);
} else {
final SlicesDatabaseAccessor slicesDatabaseAccessor =
new SlicesDatabaseAccessor(this /* context */);
// Sadly have to block here because we don't know where to go.
final SliceData sliceData = slicesDatabaseAccessor.getSliceDataFromUri(slice);
final SliceData sliceData =
slicesDatabaseAccessor.getSliceDataFromUri(sliceUri);
launchIntent = SliceBuilderUtils.getContentIntent(this, sliceData);
}