summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJason Monk <jmonk@google.com>2015-06-18 20:03:28 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-06-18 20:03:33 +0000
commitb38ef3467bfb1caae80b4699d000b7fd17a94ae0 (patch)
tree44cfe3f87b1f9b57fd18de5ded5ecfe170078c4d /src
parent7636a42bacc32c7f8df3ae1e686ae0c5857a25ba (diff)
parent6dc9e5007de25dd9dd8fd6ebc42d9322069a9a38 (diff)
downloadandroid_packages_apps_PackageInstaller-b38ef3467bfb1caae80b4699d000b7fd17a94ae0.tar.gz
android_packages_apps_PackageInstaller-b38ef3467bfb1caae80b4699d000b7fd17a94ae0.tar.bz2
android_packages_apps_PackageInstaller-b38ef3467bfb1caae80b4699d000b7fd17a94ae0.zip
Merge "Link from location permission to settings for loc providers" into mnc-dev
Diffstat (limited to 'src')
-rw-r--r--src/com/android/packageinstaller/permission/model/AppPermissionGroup.java4
-rw-r--r--src/com/android/packageinstaller/permission/model/PermissionApps.java4
-rw-r--r--src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java5
-rw-r--r--src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java7
-rw-r--r--src/com/android/packageinstaller/permission/utils/LocationUtils.java87
5 files changed, 106 insertions, 1 deletions
diff --git a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
index 231a7c4b..7b2de19a 100644
--- a/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
+++ b/src/com/android/packageinstaller/permission/model/AppPermissionGroup.java
@@ -29,6 +29,7 @@ import android.os.UserHandle;
import android.util.ArrayMap;
import com.android.packageinstaller.R;
+import com.android.packageinstaller.permission.utils.LocationUtils;
import java.util.ArrayList;
import java.util.List;
@@ -250,6 +251,9 @@ public final class AppPermissionGroup implements Comparable<AppPermissionGroup>
}
public boolean areRuntimePermissionsGranted() {
+ if (LocationUtils.isLocked(mName, mPackageInfo.packageName)) {
+ return LocationUtils.isLocationEnabled(mContext);
+ }
final int permissionCount = mPermissions.size();
for (int i = 0; i < permissionCount; i++) {
Permission permission = mPermissions.valueAt(i);
diff --git a/src/com/android/packageinstaller/permission/model/PermissionApps.java b/src/com/android/packageinstaller/permission/model/PermissionApps.java
index dfb8c8cc..4a71010a 100644
--- a/src/com/android/packageinstaller/permission/model/PermissionApps.java
+++ b/src/com/android/packageinstaller/permission/model/PermissionApps.java
@@ -70,6 +70,10 @@ public class PermissionApps {
loadGroupInfo();
}
+ public String getGroupName() {
+ return mGroupName;
+ }
+
public void loadNowWithoutUi() {
mSkipUi = true;
createMap(loadPermissionApps());
diff --git a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
index e83641f1..b08e8f98 100644
--- a/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/AppPermissionsFragment.java
@@ -51,6 +51,7 @@ import android.widget.Toast;
import com.android.packageinstaller.R;
import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.AppPermissions;
+import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
import com.android.packageinstaller.permission.utils.Utils;
@@ -278,6 +279,10 @@ public final class AppPermissionsFragment extends SettingsWithHeader
addToggledGroup(group);
+ if (LocationUtils.isLocked(group.getName(), group.getApp().packageName)) {
+ LocationUtils.showLocationDialog(getContext(), group.getLabel());
+ return false;
+ }
if (newValue == Boolean.TRUE) {
group.grantRuntimePermissions(false);
} else {
diff --git a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
index f4c271fc..7aacdc94 100644
--- a/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
+++ b/src/com/android/packageinstaller/permission/ui/PermissionAppsFragment.java
@@ -46,6 +46,7 @@ import com.android.packageinstaller.permission.model.AppPermissionGroup;
import com.android.packageinstaller.permission.model.PermissionApps;
import com.android.packageinstaller.permission.model.PermissionApps.Callback;
import com.android.packageinstaller.permission.model.PermissionApps.PermissionApp;
+import com.android.packageinstaller.permission.utils.LocationUtils;
import com.android.packageinstaller.permission.utils.SafetyNetLogger;
import com.android.packageinstaller.permission.utils.Utils;
@@ -218,9 +219,13 @@ public final class PermissionAppsFragment extends PreferenceFragment implements
String pkg = preference.getKey();
final PermissionApp app = mPermissionApps.getApp(pkg);
+ if (app == null) {
+ return false;
+ }
addToggledGroup(app.getPackageName(), app.getPermissionGroup());
- if (app == null) {
+ if (LocationUtils.isLocked(mPermissionApps.getGroupName(), app.getPackageName())) {
+ LocationUtils.showLocationDialog(getContext(), app.getLabel());
return false;
}
if (newValue == Boolean.TRUE) {
diff --git a/src/com/android/packageinstaller/permission/utils/LocationUtils.java b/src/com/android/packageinstaller/permission/utils/LocationUtils.java
new file mode 100644
index 00000000..4c4ea6e3
--- /dev/null
+++ b/src/com/android/packageinstaller/permission/utils/LocationUtils.java
@@ -0,0 +1,87 @@
+/*
+ * Copyright (C) 2015 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package com.android.packageinstaller.permission.utils;
+
+import android.Manifest;
+import android.app.AlertDialog;
+import android.content.Context;
+import android.content.DialogInterface;
+import android.content.DialogInterface.OnClickListener;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.location.ILocationManager;
+import android.location.LocationManager;
+import android.os.RemoteException;
+import android.os.ServiceManager;
+import android.provider.Settings;
+
+import com.android.packageinstaller.R;
+
+import java.util.ArrayList;
+
+public class LocationUtils {
+
+ public static final String LOCATION_PERMISSION = Manifest.permission_group.LOCATION;
+
+ public static ArrayList<String> getLocationProviders() {
+ ArrayList<String> providers = new ArrayList<>();
+ Resources res = Resources.getSystem();
+ providers.add(res.getString(
+ com.android.internal.R.string.config_networkLocationProviderPackageName));
+
+ for (String provider :
+ res.getStringArray(com.android.internal.R.array.config_locationProviderPackageNames)) {
+ providers.add(provider);
+ }
+
+ return providers;
+ }
+
+ public static void showLocationDialog(final Context context, CharSequence label) {
+ new AlertDialog.Builder(context)
+ .setIcon(com.android.internal.R.drawable.ic_dialog_alert_material)
+ .setTitle(android.R.string.dialog_alert_title)
+ .setMessage(context.getString(R.string.location_warning, label))
+ .setNegativeButton(R.string.ok, null)
+ .setPositiveButton(R.string.location_settings, new OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int which) {
+ context.startActivity(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS));
+ }
+ })
+ .show();
+ }
+
+ public static boolean isLocationEnabled(Context context) {
+ return Settings.Secure.getInt(context.getContentResolver(), Settings.Secure.LOCATION_MODE,
+ Settings.Secure.LOCATION_MODE_OFF) != Settings.Secure.LOCATION_MODE_OFF;
+ }
+
+ public static boolean isLocked(String groupName, String packageName) {
+ return LOCATION_PERMISSION.equals(groupName) && isNetworkLocationProvider(packageName);
+ }
+
+ private static boolean isNetworkLocationProvider(String packageName) {
+ ILocationManager locationService = ILocationManager.Stub.asInterface(
+ ServiceManager.getService(Context.LOCATION_SERVICE));
+ try {
+ return packageName.equals(locationService.getNetworkProviderPackage());
+ } catch (RemoteException e) {
+ return false;
+ }
+ }
+
+}