Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 64664898 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Refactor WifiSlice to CustomSliceManager"

parents 6fdf8c22 7f0a3022
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -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
+25 −4
Original line number Diff line number Diff line
@@ -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.
     */
+5 −10
Original line number Diff line number Diff line
@@ -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
        );
+0 −5
Original line number Diff line number Diff line
@@ -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()
+16 −9
Original line number Diff line number Diff line
@@ -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);
                }

Loading