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
This commit is contained in:
Doris Ling
2017-06-13 16:50:46 -07:00
parent b806580e87
commit cae6639b96
2 changed files with 60 additions and 2 deletions

View File

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