From 9e787374832dd97627ee703e25af6dfc39f607e4 Mon Sep 17 00:00:00 2001 From: hughchen Date: Fri, 15 Mar 2019 15:14:16 +0800 Subject: [PATCH] Remove parameter from uri when get slice Slice may added parameter in their uri. When get slice through uri, removed parameter from uri to get correct slice. Bug: 128651940 Test: make -j42 RunSettingsRoboTests Change-Id: Id3cb7b91026384ce4e22c157a2908a5e18bc7993 --- .../settings/slices/CustomSliceRegistry.java | 2 +- .../slices/SpecialCaseSliceManagerTest.java | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/com/android/settings/slices/CustomSliceRegistry.java b/src/com/android/settings/slices/CustomSliceRegistry.java index 12e7b48ffb2..ebdcdbf8662 100644 --- a/src/com/android/settings/slices/CustomSliceRegistry.java +++ b/src/com/android/settings/slices/CustomSliceRegistry.java @@ -322,7 +322,7 @@ public class CustomSliceRegistry { } public static Class getSliceClassByUri(Uri uri) { - return sUriToSlice.get(uri); + return sUriToSlice.get(removeParameterFromUri(uri)); } public static Uri removeParameterFromUri(Uri uri) { diff --git a/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java b/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java index b5638684e63..d483f9e7842 100644 --- a/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java +++ b/tests/robotests/src/com/android/settings/slices/SpecialCaseSliceManagerTest.java @@ -37,6 +37,9 @@ import org.robolectric.RuntimeEnvironment; @RunWith(RobolectricTestRunner.class) public class SpecialCaseSliceManagerTest { + private final String FAKE_PARAMETER_KEY = "fake_parameter_key"; + private final String FAKE_PARAMETER_VALUE = "fake_value"; + private Context mContext; @Before @@ -54,6 +57,20 @@ public class SpecialCaseSliceManagerTest { assertThat(sliceable).isInstanceOf(FakeSliceable.class); } + @Test + public void getSliceableFromUriWithParameter_returnsCorrectObject() { + final Uri parameterUri = FakeSliceable.URI + .buildUpon() + .clearQuery() + .appendQueryParameter(FAKE_PARAMETER_KEY, FAKE_PARAMETER_VALUE) + .build(); + + final CustomSliceable sliceable = CustomSliceable.createInstance( + mContext, CustomSliceRegistry.getSliceClassByUri(parameterUri)); + + assertThat(sliceable).isInstanceOf(FakeSliceable.class); + } + @Test public void isValidUri_validUri_returnsTrue() { final boolean isValidUri = CustomSliceRegistry.isValidUri(FakeSliceable.URI);