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