diff options
author | Christopher Tate <ctate@google.com> | 2015-10-09 23:57:48 +0000 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2015-10-09 23:57:48 +0000 |
commit | 78f7fa0fc8ed3ede373cdb42e2af2046c87ac470 (patch) | |
tree | 41465293c3cb8ccc9852f176898119809bc8e832 /src/com/android/settings/applications | |
parent | 32f4b4690ee39986595ad0803070f112e06203ef (diff) | |
parent | 90de3bebf432d0897607adaca281fe248cd6575f (diff) | |
download | packages_apps_Settings-78f7fa0fc8ed3ede373cdb42e2af2046c87ac470.zip packages_apps_Settings-78f7fa0fc8ed3ede373cdb42e2af2046c87ac470.tar.gz packages_apps_Settings-78f7fa0fc8ed3ede373cdb42e2af2046c87ac470.tar.bz2 |
am 90de3beb: Disable app-link preferences for browser apps
* commit '90de3bebf432d0897607adaca281fe248cd6575f':
Disable app-link preferences for browser apps
Diffstat (limited to 'src/com/android/settings/applications')
-rw-r--r-- | src/com/android/settings/applications/AppLaunchSettings.java | 126 | ||||
-rw-r--r-- | src/com/android/settings/applications/ClearDefaultsPreference.java | 12 |
2 files changed, 94 insertions, 44 deletions
diff --git a/src/com/android/settings/applications/AppLaunchSettings.java b/src/com/android/settings/applications/AppLaunchSettings.java index c885b02..6c2f241 100644 --- a/src/com/android/settings/applications/AppLaunchSettings.java +++ b/src/com/android/settings/applications/AppLaunchSettings.java @@ -17,14 +17,16 @@ package com.android.settings.applications; import android.app.AlertDialog; +import android.content.Intent; import android.content.IntentFilter; import android.content.pm.ApplicationInfo; import android.content.pm.IntentFilterVerificationInfo; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; +import android.net.Uri; import android.os.Bundle; import android.os.UserHandle; import android.preference.Preference; -import android.preference.SwitchPreference; import android.util.ArraySet; import android.util.Log; import android.view.View; @@ -52,8 +54,17 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe private static final String KEY_SUPPORTED_DOMAIN_URLS = "app_launch_supported_domain_urls"; private static final String KEY_CLEAR_DEFAULTS = "app_launch_clear_defaults"; + private static final Intent sBrowserIntent; + static { + sBrowserIntent = new Intent() + .setAction(Intent.ACTION_VIEW) + .addCategory(Intent.CATEGORY_BROWSABLE) + .setData(Uri.parse("http:")); + } + private PackageManager mPm; + private boolean mIsBrowser; private boolean mHasDomainUrls; private DropDownPreference mAppLinkState; private AppDomainsPreference mAppDomainUrls; @@ -64,62 +75,91 @@ public class AppLaunchSettings extends AppInfoWithHeader implements OnClickListe super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.installed_app_launch_settings); + mAppDomainUrls = (AppDomainsPreference) findPreference(KEY_SUPPORTED_DOMAIN_URLS); + mClearDefaultsPreference = (ClearDefaultsPreference) findPreference(KEY_CLEAR_DEFAULTS); + mAppLinkState = (DropDownPreference) findPreference(KEY_APP_LINK_STATE); mPm = getActivity().getPackageManager(); + mIsBrowser = isBrowserApp(mPackageName); mHasDomainUrls = (mAppEntry.info.privateFlags & ApplicationInfo.PRIVATE_FLAG_HAS_DOMAIN_URLS) != 0; - List<IntentFilterVerificationInfo> iviList = mPm.getIntentFilterVerifications(mPackageName); - - List<IntentFilter> filters = mPm.getAllIntentFilters(mPackageName); - - mAppDomainUrls = (AppDomainsPreference) findPreference(KEY_SUPPORTED_DOMAIN_URLS); - CharSequence[] entries = getEntries(mPackageName, iviList, filters); - mAppDomainUrls.setTitles(entries); - mAppDomainUrls.setValues(new int[entries.length]); - - mClearDefaultsPreference = (ClearDefaultsPreference) findPreference(KEY_CLEAR_DEFAULTS); + if (!mIsBrowser) { + List<IntentFilterVerificationInfo> iviList = mPm.getIntentFilterVerifications(mPackageName); + List<IntentFilter> filters = mPm.getAllIntentFilters(mPackageName); + CharSequence[] entries = getEntries(mPackageName, iviList, filters); + mAppDomainUrls.setTitles(entries); + mAppDomainUrls.setValues(new int[entries.length]); + } buildStateDropDown(); } - private void buildStateDropDown() { - mAppLinkState = (DropDownPreference) findPreference(KEY_APP_LINK_STATE); + // An app is a "browser" if it has an activity resolution that wound up + // marked with the 'handleAllWebDataURI' flag. + private boolean isBrowserApp(String packageName) { + sBrowserIntent.setPackage(packageName); + List<ResolveInfo> list = mPm.queryIntentActivitiesAsUser(sBrowserIntent, + PackageManager.MATCH_ALL, UserHandle.myUserId()); + final int count = list.size(); + for (int i = 0; i < count; i++) { + ResolveInfo info = list.get(i); + if (info.activityInfo != null && info.handleAllWebDataURI) { + return true; + } + } + return false; + } - // Designed order of states in the dropdown: - // - // * always - // * ask - // * never - mAppLinkState.addItem(R.string.app_link_open_always, - INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS); - mAppLinkState.addItem(R.string.app_link_open_ask, - INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK); - mAppLinkState.addItem(R.string.app_link_open_never, - INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER); - - mAppLinkState.setEnabled(mHasDomainUrls); - if (mHasDomainUrls) { - // Present 'undefined' as 'ask' because the OS treats them identically for - // purposes of the UI (and does the right thing around pending domain - // verifications that might arrive after the user chooses 'ask' in this UI). - final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId()); - mAppLinkState.setSelectedValue( - (state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) - ? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK - : state); - - // Set the callback only after setting the initial selected item - mAppLinkState.setCallback(new Callback() { - @Override - public boolean onItemSelected(int pos, Object value) { - return updateAppLinkState((Integer) value); - } - }); + private void buildStateDropDown() { + if (mIsBrowser) { + // Browsers don't show the app-link prefs + mAppLinkState.setShouldDisableView(true); + mAppLinkState.setEnabled(false); + mAppDomainUrls.setShouldDisableView(true); + mAppDomainUrls.setEnabled(false); + } else { + // Designed order of states in the dropdown: + // + // * always + // * ask + // * never + mAppLinkState.addItem(R.string.app_link_open_always, + INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS); + mAppLinkState.addItem(R.string.app_link_open_ask, + INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK); + mAppLinkState.addItem(R.string.app_link_open_never, + INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_NEVER); + + mAppLinkState.setEnabled(mHasDomainUrls); + if (mHasDomainUrls) { + // Present 'undefined' as 'ask' because the OS treats them identically for + // purposes of the UI (and does the right thing around pending domain + // verifications that might arrive after the user chooses 'ask' in this UI). + final int state = mPm.getIntentVerificationStatus(mPackageName, UserHandle.myUserId()); + mAppLinkState.setSelectedValue( + (state == INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_UNDEFINED) + ? INTENT_FILTER_DOMAIN_VERIFICATION_STATUS_ALWAYS_ASK + : state); + + // Set the callback only after setting the initial selected item + mAppLinkState.setCallback(new Callback() { + @Override + public boolean onItemSelected(int pos, Object value) { + return updateAppLinkState((Integer) value); + } + }); + } } } private boolean updateAppLinkState(final int newState) { + if (mIsBrowser) { + // We shouldn't get into this state, but if we do make sure + // not to cause any permanent mayhem. + return false; + } + final int userId = UserHandle.myUserId(); final int priorState = mPm.getIntentVerificationStatus(mPackageName, userId); diff --git a/src/com/android/settings/applications/ClearDefaultsPreference.java b/src/com/android/settings/applications/ClearDefaultsPreference.java index 8be4be0..bcb6a8a 100644 --- a/src/com/android/settings/applications/ClearDefaultsPreference.java +++ b/src/com/android/settings/applications/ClearDefaultsPreference.java @@ -93,9 +93,13 @@ public class ClearDefaultsPreference extends Preference { @Override public void onClick(View v) { if (mUsbManager != null) { + final int userId = UserHandle.myUserId(); mPm.clearPackagePreferredActivities(mPackageName); + if (isDefaultBrowser(mPackageName)) { + mPm.setDefaultBrowserPackageName(null, userId); + } try { - mUsbManager.clearDefaults(mPackageName, UserHandle.myUserId()); + mUsbManager.clearDefaults(mPackageName, userId); } catch (RemoteException e) { Log.e(TAG, "mUsbManager.clearDefaults", e); } @@ -122,6 +126,7 @@ public class ClearDefaultsPreference extends Preference { TextView autoLaunchView = (TextView) mRootView.findViewById(R.id.auto_launch); boolean autoLaunchEnabled = Utils.hasPreferredActivities(mPm, mPackageName) + || isDefaultBrowser(mPackageName) || Utils.hasUsbDefaults(mUsbManager, mPackageName); if (!autoLaunchEnabled && !hasBindAppWidgetPermission) { resetLaunchDefaultsUi(autoLaunchView); @@ -165,6 +170,11 @@ public class ClearDefaultsPreference extends Preference { return true; } + private boolean isDefaultBrowser(String packageName) { + final String defaultBrowser = mPm.getDefaultBrowserPackageName(UserHandle.myUserId()); + return packageName.equals(defaultBrowser); + } + private void resetLaunchDefaultsUi(TextView autoLaunchView) { autoLaunchView.setText(R.string.auto_launch_disable_text); // Disable clear activities button |