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
This commit is contained in:
@@ -43,6 +43,8 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
private static final String TAG = "DashboardFeatureImpl";
|
private static final String TAG = "DashboardFeatureImpl";
|
||||||
|
|
||||||
private static final String DASHBOARD_TILE_PREF_KEY_PREFIX = "dashboard_tile_pref_";
|
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;
|
protected final Context mContext;
|
||||||
|
|
||||||
@@ -133,13 +135,18 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
|
|||||||
}
|
}
|
||||||
final Bundle metadata = tile.metaData;
|
final Bundle metadata = tile.metaData;
|
||||||
String clsName = null;
|
String clsName = null;
|
||||||
|
String action = null;
|
||||||
if (metadata != null) {
|
if (metadata != null) {
|
||||||
clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
|
clsName = metadata.getString(SettingsActivity.META_DATA_KEY_FRAGMENT_CLASS);
|
||||||
|
action = metadata.getString(META_DATA_KEY_INTENT_ACTION);
|
||||||
}
|
}
|
||||||
if (!TextUtils.isEmpty(clsName)) {
|
if (!TextUtils.isEmpty(clsName)) {
|
||||||
pref.setFragment(clsName);
|
pref.setFragment(clsName);
|
||||||
} else if (tile.intent != null) {
|
} else if (tile.intent != null) {
|
||||||
final Intent intent = new Intent(tile.intent);
|
final Intent intent = new Intent(tile.intent);
|
||||||
|
if (action != null) {
|
||||||
|
intent.setAction(action);
|
||||||
|
}
|
||||||
pref.setOnPreferenceClickListener(preference -> {
|
pref.setOnPreferenceClickListener(preference -> {
|
||||||
ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
|
ProfileSelectDialog.updateUserHandlesIfNeeded(mContext, tile);
|
||||||
if (tile.userHandle == null) {
|
if (tile.userHandle == null) {
|
||||||
|
@@ -41,7 +41,9 @@ import org.junit.runner.RunWith;
|
|||||||
import org.mockito.Answers;
|
import org.mockito.Answers;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.Robolectric;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
|
import org.robolectric.shadows.ShadowActivity;
|
||||||
import org.robolectric.shadows.ShadowApplication;
|
import org.robolectric.shadows.ShadowApplication;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
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.spy;
|
||||||
import static org.mockito.Mockito.verify;
|
import static org.mockito.Mockito.verify;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.when;
|
||||||
|
import static org.robolectric.Shadows.shadowOf;
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
||||||
@@ -171,6 +174,26 @@ public class DashboardFeatureProviderImplTest {
|
|||||||
assertThat(preference.getOrder()).isEqualTo(-tile.priority + baseOrder);
|
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
|
@Test
|
||||||
public void getPreferences_notEnabled_shouldReturnNull() {
|
public void getPreferences_notEnabled_shouldReturnNull() {
|
||||||
final DashboardFeatureProviderImpl mSpy = spy(mImpl);
|
final DashboardFeatureProviderImpl mSpy = spy(mImpl);
|
||||||
|
Reference in New Issue
Block a user