diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 4dbf5cf9c03..22454870cb7 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 5226a934fcc..6aa22b2c6f2 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) @@ -171,6 +174,26 @@ public class DashboardFeatureProviderImplTest { assertThat(preference.getOrder()).isEqualTo(-tile.priority + baseOrder); } + @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);