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:
@@ -39,6 +39,7 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
|
|||||||
|
|
||||||
private static final String TAG = "AccountDetailDashboard";
|
private static final String TAG = "AccountDetailDashboard";
|
||||||
private static final String METADATA_IA_ACCOUNT = "com.android.settings.ia.account";
|
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 = "account";
|
||||||
public static final String KEY_ACCOUNT_TYPE = "account_type";
|
public static final String KEY_ACCOUNT_TYPE = "account_type";
|
||||||
@@ -127,7 +128,11 @@ public class AccountDetailDashboardFragment extends DashboardFragment {
|
|||||||
if (metadata == null) {
|
if (metadata == null) {
|
||||||
return false;
|
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
|
@VisibleForTesting
|
||||||
|
@@ -17,14 +17,21 @@ package com.android.settings.accounts;
|
|||||||
|
|
||||||
import android.accounts.Account;
|
import android.accounts.Account;
|
||||||
import android.accounts.AccountManager;
|
import android.accounts.AccountManager;
|
||||||
|
import android.app.Activity;
|
||||||
import android.content.Context;
|
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.Bundle;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.support.v7.preference.Preference;
|
import android.support.v7.preference.Preference;
|
||||||
import android.support.v7.preference.PreferenceScreen;
|
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.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.CategoryKey;
|
||||||
import com.android.settingslib.drawer.Tile;
|
import com.android.settingslib.drawer.Tile;
|
||||||
|
|
||||||
@@ -33,12 +40,20 @@ import org.junit.Test;
|
|||||||
import org.junit.runner.RunWith;
|
import org.junit.runner.RunWith;
|
||||||
import org.mockito.Mock;
|
import org.mockito.Mock;
|
||||||
import org.mockito.MockitoAnnotations;
|
import org.mockito.MockitoAnnotations;
|
||||||
|
import org.robolectric.Robolectric;
|
||||||
|
import org.robolectric.RuntimeEnvironment;
|
||||||
import org.robolectric.annotation.Config;
|
import org.robolectric.annotation.Config;
|
||||||
import org.robolectric.shadows.ShadowApplication;
|
import org.robolectric.shadows.ShadowApplication;
|
||||||
|
import org.robolectric.util.ReflectionHelpers;
|
||||||
|
|
||||||
import static com.google.common.truth.Truth.assertThat;
|
import static com.google.common.truth.Truth.assertThat;
|
||||||
import static org.mockito.Answers.RETURNS_DEEP_STUBS;
|
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.spy;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
import static org.robolectric.Shadows.shadowOf;
|
||||||
|
|
||||||
@RunWith(SettingsRobolectricTestRunner.class)
|
@RunWith(SettingsRobolectricTestRunner.class)
|
||||||
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
|
@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_ACCOUNT_TYPE = "com.android.settings.ia.account";
|
||||||
private static final String METADATA_USER_HANDLE = "user_handle";
|
private static final String METADATA_USER_HANDLE = "user_handle";
|
||||||
|
|
||||||
|
@Mock(answer = RETURNS_DEEP_STUBS)
|
||||||
|
private Activity mActivity;
|
||||||
@Mock(answer = RETURNS_DEEP_STUBS)
|
@Mock(answer = RETURNS_DEEP_STUBS)
|
||||||
private AccountManager mAccountManager;
|
private AccountManager mAccountManager;
|
||||||
@Mock
|
@Mock
|
||||||
@@ -110,4 +127,40 @@ public class AccountDetailDashboardFragmentTest {
|
|||||||
|
|
||||||
assertThat(mFragment.displayTile(tile)).isFalse();
|
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