From cae6639b96dddce18c6821c386f17c0b6eb35e89 Mon Sep 17 00:00:00 2001 From: Doris Ling Date: Tue, 13 Jun 2017 16:50:46 -0700 Subject: [PATCH] Add Account.name to the tile's intent. For dynamic tiles that are displayed in specific account type, add the account name to the tile's intent so that when we launch the preference, it can associate with the correct account. Change-Id: I25f76c1b5710f525634983d00832c9a68cdeeebb Fix: 62365341 Test: make RunSettingsRoboTests --- .../AccountDetailDashboardFragment.java | 7 ++- .../AccountDetailDashboardFragmentTest.java | 55 ++++++++++++++++++- 2 files changed, 60 insertions(+), 2 deletions(-) diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java index dd34a0f5cda..a895e4070ca 100644 --- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java @@ -39,6 +39,7 @@ public class AccountDetailDashboardFragment extends DashboardFragment { private static final String TAG = "AccountDetailDashboard"; private static final String METADATA_IA_ACCOUNT = "com.android.settings.ia.account"; + private static final String EXTRA_ACCOUNT_NAME = "extra.accountName"; public static final String KEY_ACCOUNT = "account"; public static final String KEY_ACCOUNT_TYPE = "account_type"; @@ -127,7 +128,11 @@ public class AccountDetailDashboardFragment extends DashboardFragment { if (metadata == null) { return false; } - return mAccountType.equals(metadata.getString(METADATA_IA_ACCOUNT)); + final boolean display = mAccountType.equals(metadata.getString(METADATA_IA_ACCOUNT)); + if (display && tile.intent != null) { + tile.intent.putExtra(EXTRA_ACCOUNT_NAME, mAccount.name); + } + return display; } @VisibleForTesting diff --git a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java index fb069175a7b..15a3746aa94 100644 --- a/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AccountDetailDashboardFragmentTest.java @@ -17,14 +17,21 @@ package com.android.settings.accounts; import android.accounts.Account; import android.accounts.AccountManager; +import android.app.Activity; import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.os.Bundle; import android.os.UserHandle; import android.support.v7.preference.Preference; import android.support.v7.preference.PreferenceScreen; -import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.internal.logging.nano.MetricsProto; import com.android.settings.TestConfig; +import com.android.settings.dashboard.DashboardFeatureProviderImpl; +import com.android.settings.testutils.FakeFeatureFactory; +import com.android.settings.testutils.SettingsRobolectricTestRunner; import com.android.settingslib.drawer.CategoryKey; import com.android.settingslib.drawer.Tile; @@ -33,12 +40,20 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.MockitoAnnotations; +import org.robolectric.Robolectric; +import org.robolectric.RuntimeEnvironment; import org.robolectric.annotation.Config; import org.robolectric.shadows.ShadowApplication; +import org.robolectric.util.ReflectionHelpers; import static com.google.common.truth.Truth.assertThat; import static org.mockito.Answers.RETURNS_DEEP_STUBS; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; +import static org.robolectric.Shadows.shadowOf; @RunWith(SettingsRobolectricTestRunner.class) @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION) @@ -48,6 +63,8 @@ public class AccountDetailDashboardFragmentTest { private static final String METADATA_ACCOUNT_TYPE = "com.android.settings.ia.account"; private static final String METADATA_USER_HANDLE = "user_handle"; + @Mock(answer = RETURNS_DEEP_STUBS) + private Activity mActivity; @Mock(answer = RETURNS_DEEP_STUBS) private AccountManager mAccountManager; @Mock @@ -110,4 +127,40 @@ public class AccountDetailDashboardFragmentTest { assertThat(mFragment.displayTile(tile)).isFalse(); } + + @Test + public void refreshDashboardTiles_HasAccountType_shouldAddAccountNameToIntent() { + FakeFeatureFactory.setupForTest(mActivity); + final FakeFeatureFactory featureFactory = + (FakeFeatureFactory) FakeFeatureFactory.getFactory(mActivity); + final DashboardFeatureProviderImpl dashboardFeatureProvider = + new DashboardFeatureProviderImpl(mActivity); + final PackageManager packageManager = mock(PackageManager.class); + ReflectionHelpers.setField(dashboardFeatureProvider, "mPackageManager", packageManager); + when(packageManager.resolveActivity(any(Intent.class), anyInt())) + .thenReturn(mock(ResolveInfo.class)); + + final Tile tile = new Tile(); + tile.key = "key"; + tile.metaData = new Bundle(); + tile.metaData.putString(METADATA_CATEGORY, CategoryKey.CATEGORY_ACCOUNT); + tile.metaData.putString(METADATA_ACCOUNT_TYPE, "com.abc"); + tile.metaData.putString("com.android.settings.intent.action", Intent.ACTION_ASSIST); + tile.intent = new Intent(); + tile.userHandle = null; + mFragment.displayTile(tile); + + final Activity activity = Robolectric.buildActivity(Activity.class).get(); + final Preference preference = new Preference(mContext); + dashboardFeatureProvider.bindPreferenceToTile(activity, + MetricsProto.MetricsEvent.DASHBOARD_SUMMARY, preference, tile, "key", + Preference.DEFAULT_ORDER); + + preference.performClick(); + + final Intent intent = shadowOf(activity).getNextStartedActivityForResult().intent; + + assertThat(intent.getStringExtra("extra.accountName")) + .isEqualTo("name1@abc.com"); + } }