summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/TetherSettings.java
diff options
context:
space:
mode:
authorPauloftheWest <paulofthewest@google.com>2014-09-26 16:05:44 -0700
committerPauloftheWest <paulofthewest@google.com>2014-09-29 14:58:27 -0700
commit29aab7a2ad3cabdc1681fdc93a0f00b20072d385 (patch)
tree9943b86edd4f87847f2092043165883f2d5b7ec4 /src/com/android/settings/TetherSettings.java
parent5c664d8e20e2b093f7602f8114e26a4c97f45ebd (diff)
downloadpackages_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.java30
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);