From ad29500d1d44f68aef671a76ba1350c5cf0834ae Mon Sep 17 00:00:00 2001 From: Fan Zhang Date: Wed, 13 Mar 2019 15:58:18 -0700 Subject: [PATCH] Use CustomSliceRegistry directly when possible. This is one step closer to (un)make CustomSliceManager an singleton. Bug: 123937830 Test: manual Change-Id: I844d0fb798c73e2af1945ecb667ba73fac9edf72 --- .../settings/slices/CustomSliceManager.java | 11 ----------- .../settings/slices/CustomSliceable.java | 12 ++++++------ .../settings/slices/SliceBroadcastReceiver.java | 5 ++--- .../slices/SliceDeepLinkSpringBoard.java | 6 ++---- .../slices/SliceBroadcastReceiverTest.java | 5 ----- .../slices/SpecialCaseSliceManagerTest.java | 17 ++--------------- 6 files changed, 12 insertions(+), 44 deletions(-) diff --git a/src/com/android/settings/slices/CustomSliceManager.java b/src/com/android/settings/slices/CustomSliceManager.java index 91f55ae9832..d0a65ba6eb0 100644 --- a/src/com/android/settings/slices/CustomSliceManager.java +++ b/src/com/android/settings/slices/CustomSliceManager.java @@ -57,15 +57,4 @@ public class CustomSliceManager { mSliceableCache.put(newUri, sliceable); return sliceable; } - - - /** - * Return a {@link CustomSliceable} associated to the Action. - *

- * Do not change this method signature to accommodate for a special-case sliceable - a context - * is the only thing that should be needed to create the object. - */ - public CustomSliceable getSliceableFromIntentAction(String action) { - return getSliceableFromUri(Uri.parse(action)); - } } diff --git a/src/com/android/settings/slices/CustomSliceable.java b/src/com/android/settings/slices/CustomSliceable.java index 0b97bedc54f..8393d4ca6f8 100644 --- a/src/com/android/settings/slices/CustomSliceable.java +++ b/src/com/android/settings/slices/CustomSliceable.java @@ -19,7 +19,6 @@ package com.android.settings.slices; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; -import android.content.IntentFilter; import android.net.Uri; import androidx.slice.Slice; @@ -106,16 +105,17 @@ public interface CustomSliceable extends Sliceable { /** * Build an instance of a {@link CustomSliceable} which has a {@link Context}-only constructor. */ - static CustomSliceable createInstance(Context context, Class sliceableClass) { + static CustomSliceable createInstance(Context context, + Class sliceable) { try { - final Constructor sliceable = - sliceableClass.getConstructor(Context.class); + final Constructor constructor = + sliceable.getConstructor(Context.class); final Object[] params = new Object[]{context}; - return sliceable.newInstance(params); + return constructor.newInstance(params); } catch (NoSuchMethodException | InstantiationException | IllegalArgumentException | InvocationTargetException | IllegalAccessException e) { throw new IllegalStateException( - "Invalid sliceable class: " + sliceableClass, e); + "Invalid sliceable class: " + sliceable, e); } } } \ No newline at end of file diff --git a/src/com/android/settings/slices/SliceBroadcastReceiver.java b/src/com/android/settings/slices/SliceBroadcastReceiver.java index 8b6fc9801be..9926a5237a4 100644 --- a/src/com/android/settings/slices/SliceBroadcastReceiver.java +++ b/src/com/android/settings/slices/SliceBroadcastReceiver.java @@ -61,11 +61,10 @@ public class SliceBroadcastReceiver extends BroadcastReceiver { final boolean isPlatformSlice = intent.getBooleanExtra(EXTRA_SLICE_PLATFORM_DEFINED, false /* default */); - final CustomSliceManager mCustomSliceManager = FeatureFactory.getFactory( - context).getSlicesFeatureProvider().getCustomSliceManager(context); if (CustomSliceRegistry.isValidAction(action)) { final CustomSliceable sliceable = - mCustomSliceManager.getSliceableFromIntentAction(action); + CustomSliceable.createInstance(context, + CustomSliceRegistry.getSliceClassByUri(Uri.parse(action))); sliceable.onNotifyChange(intent); return; } diff --git a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java index d2179d20ebc..2ff071eebc0 100644 --- a/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java +++ b/src/com/android/settings/slices/SliceDeepLinkSpringBoard.java @@ -23,7 +23,6 @@ import android.util.Log; import com.android.settings.bluetooth.BluetoothSliceBuilder; import com.android.settings.notification.ZenModeSliceBuilder; -import com.android.settings.overlay.FeatureFactory; public class SliceDeepLinkSpringBoard extends Activity { @@ -45,11 +44,10 @@ public class SliceDeepLinkSpringBoard extends Activity { Intent launchIntent; // TODO (b/80263568) Avoid duplicating this list of Slice Uris. - final CustomSliceManager customSliceManager = FeatureFactory.getFactory(this) - .getSlicesFeatureProvider().getCustomSliceManager(this); if (CustomSliceRegistry.isValidUri(sliceUri)) { final CustomSliceable sliceable = - customSliceManager.getSliceableFromUri(sliceUri); + CustomSliceable.createInstance(getApplicationContext(), + CustomSliceRegistry.getSliceClassByUri(sliceUri)); launchIntent = sliceable.getIntent(); } else if (CustomSliceRegistry.ZEN_MODE_SLICE_URI.equals(sliceUri)) { launchIntent = ZenModeSliceBuilder.getIntent(this /* context */); diff --git a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java index 74f4ac2536a..1ea324d1fc9 100644 --- a/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java +++ b/tests/robotests/src/com/android/settings/slices/SliceBroadcastReceiverTest.java @@ -19,14 +19,12 @@ package com.android.settings.slices; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; import android.app.settings.SettingsEnums; import android.app.slice.Slice; @@ -82,9 +80,6 @@ public class SliceBroadcastReceiverTest { mSearchFeatureProvider = new SearchFeatureProviderImpl(); mFakeFeatureFactory = FakeFeatureFactory.setupForTest(); mFakeFeatureFactory.searchFeatureProvider = mSearchFeatureProvider; - CustomSliceManager manager = new CustomSliceManager(mContext); - when(mFakeFeatureFactory.slicesFeatureProvider.getCustomSliceManager(any())) - .thenReturn(manager); } @After diff --git a/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java b/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java index 53922844a0c..b5638684e63 100644 --- a/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java +++ b/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java @@ -19,8 +19,6 @@ package com.android.settings.slices; import static com.google.common.truth.Truth.assertThat; -import static org.mockito.Mockito.spy; - import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -41,28 +39,17 @@ public class SpecialCaseSliceManagerTest { private Context mContext; - private CustomSliceManager mCustomSliceManager; - @Before public void setUp() { mContext = RuntimeEnvironment.application; - mCustomSliceManager = spy(new CustomSliceManager(mContext)); CustomSliceRegistry.sUriToSlice.clear(); CustomSliceRegistry.sUriToSlice.put(FakeSliceable.URI, FakeSliceable.class); } @Test public void getSliceableFromUri_returnsCorrectObject() { - final CustomSliceable sliceable = mCustomSliceManager.getSliceableFromUri( - FakeSliceable.URI); - - assertThat(sliceable).isInstanceOf(FakeSliceable.class); - } - - @Test - public void getSliceableFromIntentAction_returnsCorrectObject() { - final CustomSliceable sliceable = - mCustomSliceManager.getSliceableFromIntentAction(FakeSliceable.URI.toString()); + final CustomSliceable sliceable = CustomSliceable.createInstance( + mContext, CustomSliceRegistry.getSliceClassByUri(FakeSliceable.URI)); assertThat(sliceable).isInstanceOf(FakeSliceable.class); }