diff options
author | PauloftheWest <paulofthewest@google.com> | 2014-09-26 16:05:44 -0700 |
---|---|---|
committer | PauloftheWest <paulofthewest@google.com> | 2014-09-29 14:58:27 -0700 |
commit | 29aab7a2ad3cabdc1681fdc93a0f00b20072d385 (patch) | |
tree | 9943b86edd4f87847f2092043165883f2d5b7ec4 /src/com/android/settings/TetherSettings.java | |
parent | 5c664d8e20e2b093f7602f8114e26a4c97f45ebd (diff) | |
download | packages_apps_Settings-29aab7a2ad3cabdc1681fdc93a0f00b20072d385.zip packages_apps_Settings-29aab7a2ad3cabdc1681fdc93a0f00b20072d385.tar.gz packages_apps_Settings-29aab7a2ad3cabdc1681fdc93a0f00b20072d385.tar.bz2 |
Fixed a Settings crash.
+ When in Settings->More... we will no longer provide a tethering option
if tethering requires provisioning, but the provisioning app is invalid.
Bug: 17671381
Change-Id: I48a8178865a7ffddec714c1f6ee6f18d34801b60
Diffstat (limited to 'src/com/android/settings/TetherSettings.java')
-rw-r--r-- | src/com/android/settings/TetherSettings.java | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/com/android/settings/TetherSettings.java b/src/com/android/settings/TetherSettings.java index 45d8dee..c611772 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); |