From 256a65c46760c0ec30ea4910d9c01906e13d8eef Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Mon, 6 Sep 2021 16:53:24 +0800 Subject: [PATCH] Fix the summary format problem of the installed apps - The summary of each installed apps in Opening links page is differnt with the summary of the Open by default in App info page. - Let the format of the installed apps' summary is same as the Open by default. Fixes: 193455965 Test: make RunSettingsRoboTests -j ROBOTEST_FILTER=com.android.settings.applications.managedomainurls Change-Id: Ifef4b27795300dc81c83ac1cc5063e8e22f54497 --- .../managedomainurls/DomainAppPreference.java | 37 +++++++------------ .../DomainAppPreferenceControllerTest.java | 29 ++++++++++++++- 2 files changed, 41 insertions(+), 25 deletions(-) diff --git a/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java b/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java index be53fabb538..559c2abf598 100644 --- a/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java +++ b/src/com/android/settings/applications/managedomainurls/DomainAppPreference.java @@ -17,27 +17,26 @@ package com.android.settings.applications.managedomainurls; import android.content.Context; -import android.content.pm.PackageManager; -import android.os.UserHandle; -import android.util.ArraySet; +import android.content.pm.verify.domain.DomainVerificationManager; +import android.content.pm.verify.domain.DomainVerificationUserState; import android.util.IconDrawableFactory; import com.android.settings.R; -import com.android.settings.Utils; +import com.android.settings.applications.intentpicker.IntentPickerUtils; import com.android.settingslib.applications.ApplicationsState.AppEntry; import com.android.settingslib.widget.AppPreference; public class DomainAppPreference extends AppPreference { private final AppEntry mEntry; - private final PackageManager mPm; + private final DomainVerificationManager mDomainVerificationManager; private final IconDrawableFactory mIconDrawableFactory; public DomainAppPreference(final Context context, IconDrawableFactory iconFactory, AppEntry entry) { super(context); mIconDrawableFactory = iconFactory; - mPm = context.getPackageManager(); + mDomainVerificationManager = context.getSystemService(DomainVerificationManager.class); mEntry = entry; mEntry.ensureLabel(getContext()); @@ -60,22 +59,14 @@ public class DomainAppPreference extends AppPreference { } private CharSequence getDomainsSummary(String packageName) { - // If the user has explicitly said "no" for this package, that's the - // string we should show. - int domainStatus = - mPm.getIntentVerificationStatusAsUser(packageName, UserHandle.myUserId()); - if (domainStatus == PackageManager.INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER) { - return getContext().getText(R.string.domain_urls_summary_none); - } - // Otherwise, ask package manager for the domains for this package, - // and show the first one (or none if there aren't any). - final ArraySet result = Utils.getHandledDomains(mPm, packageName); - if (result.isEmpty()) { - return getContext().getText(R.string.domain_urls_summary_none); - } else if (result.size() == 1) { - return getContext().getString(R.string.domain_urls_summary_one, result.valueAt(0)); - } else { - return getContext().getString(R.string.domain_urls_summary_some, result.valueAt(0)); - } + return getContext().getText(isLinkHandlingAllowed(packageName) + ? R.string.app_link_open_always : R.string.app_link_open_never); + } + + private boolean isLinkHandlingAllowed(String packageName) { + final DomainVerificationUserState userState = + IntentPickerUtils.getDomainVerificationUserState(mDomainVerificationManager, + packageName); + return userState == null ? false : userState.isLinkHandlingAllowed(); } } diff --git a/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java index 5e5239d6a88..9db75a2ec68 100644 --- a/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/managedomainurls/DomainAppPreferenceControllerTest.java @@ -18,8 +18,17 @@ package com.android.settings.applications.managedomainurls; import static com.google.common.truth.Truth.assertThat; +import static org.mockito.ArgumentMatchers.anyString; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + import android.content.Context; import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.verify.domain.DomainVerificationManager; +import android.content.pm.verify.domain.DomainVerificationUserState; import android.util.IconDrawableFactory; import com.android.settings.R; @@ -28,6 +37,8 @@ import com.android.settingslib.applications.ApplicationsState; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; import org.robolectric.RobolectricTestRunner; import org.robolectric.RuntimeEnvironment; @@ -40,16 +51,30 @@ public class DomainAppPreferenceControllerTest { private Context mContext; private IconDrawableFactory mIconDrawableFactory; + @Mock + private DomainVerificationManager mDomainVerificationManager; + @Mock + private DomainVerificationUserState mDomainVerificationUserState; + @Before public void setUp() { - mContext = RuntimeEnvironment.application; + MockitoAnnotations.initMocks(this); + mContext = spy(RuntimeEnvironment.application); mIconDrawableFactory = IconDrawableFactory.newInstance(mContext); mAppEntry = new ApplicationsState.AppEntry( mContext, createApplicationInfo(mContext.getPackageName()), 0); + when(mContext.getSystemService(DomainVerificationManager.class)).thenReturn( + mDomainVerificationManager); } @Test - public void getLayoutResource_shouldUseAppPreferenceLayout() { + public void getLayoutResource_shouldUseAppPreferenceLayout() + throws PackageManager.NameNotFoundException { + final DomainVerificationUserState domainVerificationUserState = mock( + DomainVerificationUserState.class); + doReturn(domainVerificationUserState).when( + mDomainVerificationManager).getDomainVerificationUserState(anyString()); + doReturn(true).when(domainVerificationUserState).isLinkHandlingAllowed(); final DomainAppPreference pref = new DomainAppPreference( mContext, mIconDrawableFactory, mAppEntry);