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:
@@ -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");
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user