diff --git a/res/values/config.xml b/res/values/config.xml index 8efa6b2ab49..1a504ddff3b 100755 --- a/res/values/config.xml +++ b/res/values/config.xml @@ -174,4 +174,7 @@ 1800000 + + + diff --git a/src/com/android/settings/accounts/AccountFeatureProvider.java b/src/com/android/settings/accounts/AccountFeatureProvider.java index fd650959ffd..ef14fa0adf0 100644 --- a/src/com/android/settings/accounts/AccountFeatureProvider.java +++ b/src/com/android/settings/accounts/AccountFeatureProvider.java @@ -23,5 +23,4 @@ import android.content.Intent; public interface AccountFeatureProvider { String getAccountType(); Account[] getAccounts(Context context); - Intent getAccountSettingsDeeplinkIntent(); } diff --git a/src/com/android/settings/accounts/AccountFeatureProviderImpl.java b/src/com/android/settings/accounts/AccountFeatureProviderImpl.java index 2e0f432e02d..90b581ba80e 100644 --- a/src/com/android/settings/accounts/AccountFeatureProviderImpl.java +++ b/src/com/android/settings/accounts/AccountFeatureProviderImpl.java @@ -2,7 +2,6 @@ package com.android.settings.accounts; import android.accounts.Account; import android.content.Context; -import android.content.Intent; public class AccountFeatureProviderImpl implements AccountFeatureProvider { @Override @@ -14,9 +13,4 @@ public class AccountFeatureProviderImpl implements AccountFeatureProvider { public Account[] getAccounts(Context context) { return new Account[0]; } - - @Override - public Intent getAccountSettingsDeeplinkIntent() { - return null; - } } diff --git a/src/com/android/settings/accounts/AvatarViewMixin.java b/src/com/android/settings/accounts/AvatarViewMixin.java index 35a3cbfa29c..43531b3de39 100644 --- a/src/com/android/settings/accounts/AvatarViewMixin.java +++ b/src/com/android/settings/accounts/AvatarViewMixin.java @@ -40,6 +40,7 @@ import com.android.settings.homepage.SettingsHomepageActivity; import com.android.settings.overlay.FeatureFactory; import com.android.settingslib.utils.ThreadUtils; +import java.net.URISyntaxException; import java.util.List; /** @@ -57,7 +58,6 @@ public class AvatarViewMixin implements LifecycleObserver { private static final String KEY_AVATAR_BITMAP = "account_avatar"; private static final String KEY_ACCOUNT_NAME = "account_name"; private static final String EXTRA_ACCOUNT_NAME = "extra.accountName"; - private static final int REQUEST_CODE = 1013; private final Context mContext; private final ImageView mAvatarView; @@ -69,23 +69,32 @@ public class AvatarViewMixin implements LifecycleObserver { mContext = activity.getApplicationContext(); mAvatarView = avatarView; mAvatarView.setOnClickListener(v -> { - final Intent intent = FeatureFactory.getFactory(mContext) - .getAccountFeatureProvider() - .getAccountSettingsDeeplinkIntent(); - - if (intent == null) { + Intent intent; + try { + final String uri = mContext.getResources().getString( + R.string.config_account_intent_uri); + intent = Intent.parseUri(uri, Intent.URI_INTENT_SCHEME); + } catch (URISyntaxException e) { + Log.w(TAG, "Error parsing avatar mixin intent, skipping", e); return; } if (!TextUtils.isEmpty(mAccountName)) { - //TODO(b/117509285) launch the new page of the MeCard intent.putExtra(EXTRA_ACCOUNT_NAME, mAccountName); } + final List matchedIntents = + mContext.getPackageManager().queryIntentActivities(intent, + PackageManager.MATCH_SYSTEM_ONLY); + if (matchedIntents.isEmpty()) { + Log.w(TAG, "Cannot find any matching action VIEW_ACCOUNT intent."); + return; + } + // Here may have two different UI while start the activity. // It will display adding account UI when device has no any account. // It will display account information page when intent added the specified account. - activity.startActivityForResult(intent, REQUEST_CODE); + activity.startActivity(intent); }); mAvatarImage = new MutableLiveData<>(); diff --git a/tests/robotests/src/com/android/settings/accounts/AvatarViewMixinTest.java b/tests/robotests/src/com/android/settings/accounts/AvatarViewMixinTest.java index 7b4fb6f0c6d..6a2348c6717 100644 --- a/tests/robotests/src/com/android/settings/accounts/AvatarViewMixinTest.java +++ b/tests/robotests/src/com/android/settings/accounts/AvatarViewMixinTest.java @@ -30,6 +30,7 @@ import android.accounts.Account; import android.content.ContentProvider; import android.content.ContentResolver; import android.content.Context; +import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.ProviderInfo; @@ -167,12 +168,22 @@ public class AvatarViewMixinTest { assertThat(bundle.getString("account_name")).isEqualTo(DUMMY_ACCOUNT); } + @Test + public void onClickAvatar_withEmptyUri_startActivityShouldNotBeExecuted() { + final SettingsHomepageActivity activity = spy((SettingsHomepageActivity) mController.get()); + final AvatarViewMixin avatarViewMixin = new AvatarViewMixin(activity, mImageView); + + mImageView.performClick(); + + verify(activity, never()).startActivity(any(Intent.class)); + } + @Implements(value = AccountFeatureProviderImpl.class) public static class ShadowAccountFeatureProviderImpl { @Implementation protected Account[] getAccounts(Context context) { - return new Account[] {new Account(DUMMY_ACCOUNT, DUMMY_DOMAIN)}; + return new Account[]{new Account(DUMMY_ACCOUNT, DUMMY_DOMAIN)}; } } }