diff --git a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java index 2e8c7ad62ef..c42ecb3a501 100644 --- a/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java +++ b/src/com/android/settings/dashboard/DashboardFeatureProviderImpl.java @@ -27,6 +27,7 @@ import android.text.TextUtils; import com.android.settings.SettingsActivity; import com.android.settingslib.drawer.CategoryManager; import com.android.settingslib.drawer.DashboardCategory; +import com.android.settingslib.drawer.ProfileSelectDialog; import com.android.settingslib.drawer.Tile; import java.util.List; @@ -97,6 +98,12 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider { } if (!TextUtils.isEmpty(clsName)) { pref.setFragment(clsName); + } else if (tile.userHandle != null && tile.userHandle.size() > 1) { + pref.setOnPreferenceClickListener(preference -> { + ProfileSelectDialog.updateUserHandlesIfNeeded(activity, tile); + ProfileSelectDialog.show(activity.getFragmentManager(), tile); + return true; + }); } else if (tile.intent != null) { final Intent intent = new Intent(tile.intent); pref.setOnPreferenceClickListener(preference -> { diff --git a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java index 66f2289122f..0ab76755db0 100644 --- a/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java +++ b/tests/robotests/src/com/android/settings/dashboard/DashboardFeatureProviderImplTest.java @@ -18,10 +18,13 @@ package com.android.settings.dashboard; import android.app.Activity; import android.content.ComponentName; +import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.graphics.drawable.Icon; import android.os.Bundle; +import android.os.UserHandle; +import android.os.UserManager; import android.support.v7.preference.Preference; import com.android.settings.SettingsActivity; @@ -38,7 +41,12 @@ import org.mockito.MockitoAnnotations; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; +import java.util.ArrayList; + import static com.google.common.truth.Truth.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -47,6 +55,9 @@ public class DashboardFeatureProviderImplTest { @Mock(answer = Answers.RETURNS_DEEP_STUBS) private Activity mActivity; + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private UserManager mUserManager; + private DashboardFeatureProviderImpl mImpl; @Before @@ -91,6 +102,24 @@ public class DashboardFeatureProviderImplTest { assertThat(preference.getOrder()).isEqualTo(-tile.priority); } + @Test + public void bindPreference_noFragmentMetadata_shouldBindToProfileSelector() { + final Preference preference = new Preference( + ShadowApplication.getInstance().getApplicationContext()); + final Tile tile = new Tile(); + tile.metaData = new Bundle(); + tile.userHandle = new ArrayList<>(); + tile.userHandle.add(mock(UserHandle.class)); + tile.userHandle.add(mock(UserHandle.class)); + tile.intent = new Intent(); + when(mActivity.getSystemService(Context.USER_SERVICE)).thenReturn(mUserManager); + + mImpl.bindPreferenceToTile(mActivity, preference, tile, "123"); + preference.getOnPreferenceClickListener().onPreferenceClick(null); + + verify(mActivity).getFragmentManager(); + } + @Test public void bindPreference_withNullKeyNullPriority_shouldGenerateKeyAndPriority() { final Preference preference = new Preference(