diff --git a/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java b/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java index d8c190fb730..2c76f056a7c 100644 --- a/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java +++ b/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceController.java @@ -19,29 +19,29 @@ package com.android.settings.applications.appinfo; import android.content.Context; import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; -import android.content.pm.PackageManager; -import android.hardware.usb.IUsbManager; -import android.os.ServiceManager; +import android.content.pm.verify.domain.DomainVerificationManager; +import android.content.pm.verify.domain.DomainVerificationUserState; import android.os.UserHandle; +import androidx.annotation.VisibleForTesting; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; import com.android.settings.SettingsPreferenceFragment; import com.android.settings.applications.intentpicker.AppLaunchSettings; +import com.android.settings.applications.intentpicker.IntentPickerUtils; +import com.android.settingslib.R; import com.android.settingslib.applications.AppUtils; import com.android.settingslib.applications.ApplicationsState; public class AppOpenByDefaultPreferenceController extends AppInfoPreferenceControllerBase { - private IUsbManager mUsbManager; - private PackageManager mPackageManager; + private final DomainVerificationManager mDomainVerificationManager; private String mPackageName; public AppOpenByDefaultPreferenceController(Context context, String key) { super(context, key); - mUsbManager = IUsbManager.Stub.asInterface(ServiceManager.getService(Context.USB_SERVICE)); - mPackageManager = context.getPackageManager(); + mDomainVerificationManager = context.getSystemService(DomainVerificationManager.class); } /** Set a package name for this controller. */ @@ -69,8 +69,7 @@ public class AppOpenByDefaultPreferenceController extends AppInfoPreferenceContr && !AppUtils.isBrowserApp(mContext, packageInfo.packageName, UserHandle.myUserId())) { preference.setVisible(true); - preference.setSummary(AppUtils.getLaunchByDefaultSummary(mParent.getAppEntry(), - mUsbManager, mPackageManager, mContext)); + preference.setSummary(getSubtext()); } else { preference.setVisible(false); } @@ -80,4 +79,18 @@ public class AppOpenByDefaultPreferenceController extends AppInfoPreferenceContr protected Class getDetailFragmentClass() { return AppLaunchSettings.class; } + + @VisibleForTesting + CharSequence getSubtext() { + return mContext.getText(isLinkHandlingAllowed() + ? R.string.app_link_open_always : R.string.app_link_open_never); + } + + @VisibleForTesting + boolean isLinkHandlingAllowed() { + final DomainVerificationUserState userState = + IntentPickerUtils.getDomainVerificationUserState(mDomainVerificationManager, + mPackageName); + return userState == null ? false : userState.isLinkHandlingAllowed(); + } } diff --git a/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java index 10732566b58..e329dcc8b7b 100644 --- a/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java +++ b/tests/robotests/src/com/android/settings/applications/appinfo/AppOpenByDefaultPreferenceControllerTest.java @@ -20,6 +20,7 @@ import static com.google.common.truth.Truth.assertThat; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.spy; @@ -33,6 +34,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.content.pm.verify.domain.DomainVerificationManager; import androidx.preference.Preference; import androidx.preference.PreferenceScreen; @@ -66,6 +68,8 @@ public class AppOpenByDefaultPreferenceControllerTest { private Preference mPreference; @Mock private PackageManager mPackageManager; + @Mock + private DomainVerificationManager mDomainVerificationManager; private Context mContext; private AppOpenByDefaultPreferenceController mController; @@ -78,6 +82,8 @@ public class AppOpenByDefaultPreferenceControllerTest { mController.setParentFragment(mFragment); when(mScreen.findPreference(mController.getPreferenceKey())).thenReturn(mPreference); when(mContext.getPackageManager()).thenReturn(mPackageManager); + when(mContext.getSystemService(DomainVerificationManager.class)).thenReturn( + mDomainVerificationManager); } @Test @@ -194,10 +200,27 @@ public class AppOpenByDefaultPreferenceControllerTest { final AppEntry appEntry = mock(AppEntry.class); appEntry.info = new ApplicationInfo(); when(mFragment.getAppEntry()).thenReturn(appEntry); + doReturn(true).when(mController).isLinkHandlingAllowed(); mController.updateState(mPreference); verify(mPreference).setVisible(true); verify(mPreference).setSummary(any()); } + + @Test + public void getSubtext_allowedLinkHandling_returnAllowedString() { + final String allowdedString = "Allow app to open supported links"; + doReturn(true).when(mController).isLinkHandlingAllowed(); + + assertThat(mController.getSubtext()).isEqualTo(allowdedString); + } + + @Test + public void getSubtext_notAllowedLinkHandling_returnNotAllowedString() { + final String notAllowdedString = "Don’t allow app to open links"; + doReturn(false).when(mController).isLinkHandlingAllowed(); + + assertThat(mController.getSubtext()).isEqualTo(notAllowdedString); + } }