Merge "Add current user handle to tile intent in account detail page."

This commit is contained in:
TreeHugger Robot
2019-02-01 02:31:10 +00:00
committed by Android (Google) Code Review
4 changed files with 81 additions and 5 deletions

View File

@@ -15,11 +15,14 @@
*/ */
package com.android.settings.accounts; package com.android.settings.accounts;
import static android.content.Intent.EXTRA_USER;
import android.accounts.Account; import android.accounts.Account;
import android.accounts.AccountManager; import android.accounts.AccountManager;
import android.app.Activity; import android.app.Activity;
import android.app.settings.SettingsEnums; import android.app.settings.SettingsEnums;
import android.content.Context; import android.content.Context;
import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
@@ -56,6 +59,8 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
String mAccountType; String mAccountType;
private AccountSyncPreferenceController mAccountSynController; private AccountSyncPreferenceController mAccountSynController;
private RemoveAccountPreferenceController mRemoveAccountController; private RemoveAccountPreferenceController mRemoveAccountController;
@VisibleForTesting
UserHandle mUserHandle;
@Override @Override
public void onCreate(Bundle icicle) { public void onCreate(Bundle icicle) {
@@ -63,7 +68,7 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
getPreferenceManager().setPreferenceComparisonCallback(null); getPreferenceManager().setPreferenceComparisonCallback(null);
Bundle args = getArguments(); Bundle args = getArguments();
final Activity activity = getActivity(); final Activity activity = getActivity();
UserHandle userHandle = Utils.getSecureTargetUser(activity.getActivityToken(), mUserHandle = Utils.getSecureTargetUser(activity.getActivityToken(),
(UserManager) getSystemService(Context.USER_SERVICE), args, (UserManager) getSystemService(Context.USER_SERVICE), args,
activity.getIntent().getExtras()); activity.getIntent().getExtras());
if (args != null) { if (args != null) {
@@ -77,8 +82,8 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
mAccountType = args.getString(KEY_ACCOUNT_TYPE); mAccountType = args.getString(KEY_ACCOUNT_TYPE);
} }
} }
mAccountSynController.init(mAccount, userHandle); mAccountSynController.init(mAccount, mUserHandle);
mRemoveAccountController.init(mAccount, userHandle); mRemoveAccountController.init(mAccount, mUserHandle);
} }
@Override @Override
@@ -154,7 +159,9 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
} }
final boolean display = mAccountType.equals(metadata.getString(METADATA_IA_ACCOUNT)); final boolean display = mAccountType.equals(metadata.getString(METADATA_IA_ACCOUNT));
if (display) { if (display) {
tile.getIntent().putExtra(EXTRA_ACCOUNT_NAME, mAccount.name); final Intent intent = tile.getIntent();
intent.putExtra(EXTRA_ACCOUNT_NAME, mAccount.name);
intent.putExtra(EXTRA_USER, mUserHandle);
} }
return display; return display;
} }

View File

@@ -16,6 +16,8 @@
package com.android.settings.dashboard; package com.android.settings.dashboard;
import static android.content.Intent.EXTRA_USER;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI;
@@ -29,6 +31,7 @@ import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.graphics.drawable.Icon; import android.graphics.drawable.Icon;
import android.os.Bundle; import android.os.Bundle;
import android.os.UserHandle;
import android.provider.Settings; import android.provider.Settings;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.ArrayMap; import android.util.ArrayMap;
@@ -239,7 +242,14 @@ public class DashboardFeatureProviderImpl implements DashboardFeatureProvider {
mMetricsFeatureProvider.logDashboardStartIntent(mContext, intent, sourceMetricCategory); mMetricsFeatureProvider.logDashboardStartIntent(mContext, intent, sourceMetricCategory);
activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0)); activity.startActivityForResultAsUser(intent, 0, tile.userHandle.get(0));
} else { } else {
ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile); final UserHandle userHandle = intent.getParcelableExtra(EXTRA_USER);
if (userHandle != null && tile.userHandle.contains(userHandle)) {
mMetricsFeatureProvider.logDashboardStartIntent(
mContext, intent, sourceMetricCategory);
activity.startActivityForResultAsUser(intent, 0, userHandle);
} else {
ProfileSelectDialog.show(activity.getSupportFragmentManager(), tile);
}
} }
} }

View File

@@ -15,6 +15,8 @@
*/ */
package com.android.settings.accounts; package com.android.settings.accounts;
import static android.content.Intent.EXTRA_USER;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE;
@@ -160,6 +162,20 @@ public class AccountDetailDashboardFragmentTest {
assertThat(intent.getStringExtra("extra.accountName")).isEqualTo("name1@abc.com"); assertThat(intent.getStringExtra("extra.accountName")).isEqualTo("name1@abc.com");
} }
@Test
public void displayTile_shouldAddUserHandleToTileIntent() {
mFragment.mUserHandle = new UserHandle(1);
final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_ACCOUNT_DETAIL);
mActivityInfo.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT);
mActivityInfo.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc");
mFragment.displayTile(tile);
final UserHandle userHandle = tile.getIntent().getParcelableExtra(EXTRA_USER);
assertThat(userHandle.getIdentifier()).isEqualTo(1);
}
@Test @Test
public void onResume_accountMissing_shouldFinish() { public void onResume_accountMissing_shouldFinish() {
ShadowUserManager userManager = ShadowUserManager userManager =

View File

@@ -16,6 +16,8 @@
package com.android.settings.dashboard; package com.android.settings.dashboard;
import static android.content.Intent.EXTRA_USER;
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER;
import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE;
import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT;
@@ -67,6 +69,7 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Answers; import org.mockito.Answers;
import org.mockito.ArgumentCaptor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.robolectric.Robolectric; import org.robolectric.Robolectric;
@@ -412,4 +415,44 @@ public class DashboardFeatureProviderImplTest {
.startActivityForResult(any(Intent.class), eq(0)); .startActivityForResult(any(Intent.class), eq(0));
verify(mActivity, never()).getSupportFragmentManager(); verify(mActivity, never()).getSupportFragmentManager();
} }
@Test
public void openTileIntent_profileSelectionDialog_validUserHandleShouldNotShow() {
final int userId = 10;
ShadowUserManager.getShadow().addUser(userId, "Someone", 0);
final UserHandle userHandle = new UserHandle(userId);
final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
tile.getIntent().putExtra(EXTRA_USER, userHandle);
final ArrayList<UserHandle> handles = new ArrayList<>();
handles.add(new UserHandle(0));
handles.add(userHandle);
tile.userHandle = handles;
mImpl.openTileIntent(mActivity, tile);
final ArgumentCaptor<UserHandle> argument = ArgumentCaptor.forClass(UserHandle.class);
verify(mActivity)
.startActivityForResultAsUser(any(Intent.class), anyInt(), argument.capture());
assertThat(argument.getValue().getIdentifier()).isEqualTo(userId);
verify(mActivity, never()).getSupportFragmentManager();
}
@Test
public void openTileIntent_profileSelectionDialog_invalidUserHandleShouldShow() {
ShadowUserManager.getShadow().addUser(10, "Someone", 0);
final Tile tile = new Tile(mActivityInfo, CategoryKey.CATEGORY_HOMEPAGE);
tile.getIntent().putExtra(EXTRA_USER, new UserHandle(30));
final ArrayList<UserHandle> handles = new ArrayList<>();
handles.add(new UserHandle(0));
handles.add(new UserHandle(10));
tile.userHandle = handles;
mImpl.openTileIntent(mActivity, tile);
verify(mActivity, never())
.startActivityForResultAsUser(any(Intent.class), anyInt(), any(UserHandle.class));
verify(mActivity).getSupportFragmentManager();
}
} }