diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java index 45d8dee6cdc..c6117724880 100644 --- a/src/com/android/settings/TetherSettings.java +++ b/src/com/android/settings/TetherSettings.java @@ -30,6 +30,7 @@ import android.content.Context; import android.content.DialogInterface; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; import android.content.res.AssetManager; import android.hardware.usb.UsbManager; import android.net.ConnectivityManager; @@ -471,16 +472,37 @@ public class TetherSettings extends SettingsPreferenceFragment return false; } - boolean isProvisioningNeeded() { - if (SystemProperties.getBoolean("net.tethering.noprovisioning", false)) { + public static boolean isProvisioningNeededButUnavailable(Context context) { + String[] provisionApp = context.getResources().getStringArray( + com.android.internal.R.array.config_mobile_hotspot_provision_app); + return (isProvisioningNeeded(provisionApp) + && !isIntentAvailable(context, provisionApp)); + } + + private static boolean isIntentAvailable(Context context, String[] provisionApp) { + if (provisionApp.length < 2) { + throw new IllegalArgumentException("provisionApp length should at least be 2"); + } + final PackageManager packageManager = context.getPackageManager(); + Intent intent = new Intent(Intent.ACTION_MAIN); + intent.setClassName(provisionApp[0], provisionApp[1]); + + return (packageManager.queryIntentActivities(intent, + PackageManager.MATCH_DEFAULT_ONLY).size() > 0); + } + + + private static boolean isProvisioningNeeded(String[] provisionApp) { + if (SystemProperties.getBoolean("net.tethering.noprovisioning", false) + || provisionApp == null) { return false; } - return mProvisionApp.length == 2; + return (provisionApp.length == 2); } private void startProvisioningIfNecessary(int choice) { mTetherChoice = choice; - if (isProvisioningNeeded()) { + if (isProvisioningNeeded(mProvisionApp)) { Intent intent = new Intent(Intent.ACTION_MAIN); intent.setClassName(mProvisionApp[0], mProvisionApp[1]); intent.putExtra(TETHER_CHOICE, mTetherChoice); diff --git a/src/com/android/settings/WirelessSettings.java b/src/com/android/settings/WirelessSettings.java index ab7e28b743b..9cb3d72f80a 100644 --- a/src/com/android/settings/WirelessSettings.java +++ b/src/com/android/settings/WirelessSettings.java @@ -367,6 +367,10 @@ public class WirelessSettings extends SettingsPreferenceFragment } else { Preference p = findPreference(KEY_TETHER_SETTINGS); p.setTitle(Utils.getTetheringLabel(cm)); + + // Grey out if provisioning is not available. + p.setEnabled(!TetherSettings + .isProvisioningNeededButUnavailable(getActivity())); } // Enable link to CMAS app settings depending on the value in config.xml.