From a155197d656f9f4256b13aebe73538a02354adae Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Mon, 5 Dec 2016 15:12:09 -0800 Subject: [PATCH] Add handling for tiles with intent-action metadata. If intent action is provided in the metadata for the dynamic tiles, it will be added to the launching intent when user selects the tile. Fixes: 31801423 Test: make RunSettingsRoboTests Change-Id: Ic3e583a578660f4d9c40feff1418e5e354ab8f60 --- .../dashboard/DashboardFeatureProviderImpl.java | 7 +++++++ .../DashboardFeatureProviderImplTest.java | 23 ++++++++++++++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 4dbf5cf9c0..22454870cb 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -43,6 +43,8 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { private static final String TAG = "DashboardFeatureImpl"; private static final String DASHBOARD_TILE_PREF_KEY_PREFIX = "dashboard_tile_pref_"; + private static final String META_DATA_KEY_INTENT_ACTION = "com.android.settings.intent.action"; + protected final Context mContext; @@ -133,13 +135,18 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } final Bundle metadata = tile.metaData; String clsName = null; + String action = null; if (metadata != null) { clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS); + action = metadata.getString(META_DATA_KEY_INTENT_ACTION); } if (!TextUtils.isEmpty(clsName)) { pref.setFragment(clsName); } else if (tile.intent != null) { final Intent intent = new Intent(tile.intent); + if (action != null) { + intent.setAction(action); + } pref.setOnPreferenceClickListener(preference -> { ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile); if (tile.userHandle == null) { diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 5226a934fc..6aa22b2c6f 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -41,7 +41,9 @@ import org.junit.runner.RunWith; import org.mockito.Answers; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; import org.robolectric.annotation.Config; +import org.robolectric.shadows.ShadowActivity; import org.robolectric.shadows.ShadowApplication; import java.util.ArrayList; @@ -51,6 +53,7 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.robolectric.Shadows.shadowOf; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -172,6 +175,26 @@ public class DashboardFeatureProviderImplTest { } @Test + public void bindPreference_withIntentActionMetatdata_shouldSetLaunchAction() { + Activity activity = Robolectric.buildActivity(Activity.class).get(); + final ShadowApplication application = ShadowApplication.getInstance(); + final Preference preference = new Preference(application.getApplicationContext()); + final Tile tile = new Tile(); + tile.key = "key"; + tile.intent = new Intent(); + tile.intent.setComponent(new ComponentName("pkg", "class")); + tile.metaData = new Bundle(); + tile.metaData.putString("com.android.settings.intent.action", "TestAction"); + tile.userHandle = null; + mImpl.bindPreferenceToTile(activity, preference, tile, "123", Preference.DEFAULT_ORDER); + preference.performClick(); + ShadowActivity shadowActivity = shadowOf(activity); + + assertThat(shadowActivity.getNextStartedActivityForResult().intent.getAction()) + .isEqualTo("TestAction"); + } + + @Test public void getPreferences_notEnabled_shouldReturnNull() { final DashboardFeatureProviderImpl mSpy = spy(mImpl); when(mSpy.isEnabled()).thenReturn(false); -- 2.11.0