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"); + } }