summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/applications
diff options
context:
space:
mode:
authorChristopher Tate <ctate@google.com>2015-10-09 23:57:48 +0000
committerAndroid Git Automerger <android-git-automerger@android.com>2015-10-09 23:57:48 +0000
commit78f7fa0fc8ed3ede373cdb42e2af2046c87ac470 (patch)
tree41465293c3cb8ccc9852f176898119809bc8e832 /src/com/android/settings/applications
parent32f4b4690ee39986595ad0803070f112e06203ef (diff)
parent90de3bebf432d0897607adaca281fe248cd6575f (diff)
downloadpackages_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.java126
-rw-r--r--src/com/android/settings/applications/ClearDefaultsPreference.java12
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