summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDanesh M <daneshm90@gmail.com>2016-03-07 15:17:59 -0800
committerDanesh M <daneshm90@gmail.com>2016-03-21 11:44:50 -0700
commita3549a2715e47ce07297315586ea9c5798da2997 (patch)
tree895cfd77ae3684f4e3d1c44410d33826246875a0 /src
parentf5dea70443a1c0643be50cf8058ddbfff477712f (diff)
downloadpackages_apps_Settings-a3549a2715e47ce07297315586ea9c5798da2997.zip
packages_apps_Settings-a3549a2715e47ce07297315586ea9c5798da2997.tar.gz
packages_apps_Settings-a3549a2715e47ce07297315586ea9c5798da2997.tar.bz2
Settings : Add per app internet/data control
CYAN-3976 CRACKLING-834 Change-Id: I13192df837c057b5cadde8f31532e12daaf3c1b0
Diffstat (limited to 'src')
-rw-r--r--src/com/android/settings/applications/AppOpsDetails.java54
-rw-r--r--src/com/android/settings/privacyguard/AppInfoLoader.java3
-rw-r--r--src/com/android/settings/privacyguard/PrivacyGuardManager.java20
3 files changed, 75 insertions, 2 deletions
diff --git a/src/com/android/settings/applications/AppOpsDetails.java b/src/com/android/settings/applications/AppOpsDetails.java
index 12da8b8..af80367 100644
--- a/src/com/android/settings/applications/AppOpsDetails.java
+++ b/src/com/android/settings/applications/AppOpsDetails.java
@@ -16,6 +16,7 @@
package com.android.settings.applications;
+import android.Manifest;
import android.app.Activity;
import android.app.AppOpsManager;
import android.app.Fragment;
@@ -28,6 +29,7 @@ import android.content.pm.PermissionGroupInfo;
import android.content.pm.PermissionInfo;
import android.content.res.Resources;
import android.graphics.drawable.Drawable;
+import android.net.NetworkPolicyManager;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
@@ -49,6 +51,9 @@ import com.android.settings.Utils;
import java.util.List;
+import static android.net.NetworkPolicyManager.POLICY_REJECT_ON_DATA;
+import static android.net.NetworkPolicyManager.POLICY_REJECT_ON_WLAN;
+
public class AppOpsDetails extends InstrumentedFragment {
static final String TAG = "AppOpsDetails";
@@ -61,6 +66,7 @@ public class AppOpsDetails extends InstrumentedFragment {
private LayoutInflater mInflater;
private View mRootView;
private LinearLayout mOperationsSection;
+ private NetworkPolicyManager mPolicyManager;
private final int MODE_ALLOWED = 0;
private final int MODE_IGNORED = 1;
@@ -178,9 +184,9 @@ public class AppOpsDetails extends InstrumentedFragment {
entry.getTimeText(res, true));
Spinner sp = (Spinner) view.findViewById(R.id.spinnerWidget);
- sp.setVisibility(View.INVISIBLE);
+ sp.setVisibility(View.GONE);
Switch sw = (Switch) view.findViewById(R.id.switchWidget);
- sw.setVisibility(View.INVISIBLE);
+ sw.setVisibility(View.GONE);
final int switchOp = AppOpsManager.opToSwitch(firstOp.getOp());
int mode = mAppOps.checkOp(switchOp, entry.getPackageOps().getUid(),
@@ -226,9 +232,52 @@ public class AppOpsDetails extends InstrumentedFragment {
}
}
+ if (mPm.checkPermission(Manifest.permission.INTERNET, mPackageInfo.packageName)
+ == PackageManager.PERMISSION_GRANTED) {
+ TextView internetCategory = (TextView) mInflater.inflate(
+ R.layout.preference_category_material, null);
+ internetCategory.setText(R.string.privacy_guard_internet_category);
+ mOperationsSection.addView(internetCategory);
+
+ addInternetSwitch(POLICY_REJECT_ON_WLAN);
+ addInternetSwitch(POLICY_REJECT_ON_DATA);
+ }
+
return true;
}
+ private void addInternetSwitch(final int policy) {
+ // Add internet category permissions
+ final View view = mInflater.inflate(R.layout.app_ops_details_item,
+ mOperationsSection, false);
+ mOperationsSection.addView(view);
+
+ ((TextView)view.findViewById(R.id.op_name)).setText(
+ policy == POLICY_REJECT_ON_DATA ? R.string.restrict_app_cellular_title :
+ R.string.restrict_app_wlan_title);
+ view.findViewById(R.id.op_counts).setVisibility(View.INVISIBLE);
+ view.findViewById(R.id.op_time).setVisibility(View.INVISIBLE);
+ view.findViewById(R.id.spinnerWidget).setVisibility(View.GONE);
+
+ Switch sw = (Switch) view.findViewById(R.id.switchWidget);
+ sw.setChecked((mPolicyManager.getUidPolicy(
+ mPackageInfo.applicationInfo.uid) & policy) != 0);
+ sw.setTag(policy);
+ sw.setVisibility(View.VISIBLE);
+ sw.setOnCheckedChangeListener(new Switch.OnCheckedChangeListener() {
+ public void onCheckedChanged(CompoundButton buttonView,
+ boolean isChecked) {
+ if (isChecked) {
+ mPolicyManager.addUidPolicy(mPackageInfo.applicationInfo.uid,
+ policy);
+ } else {
+ mPolicyManager.removeUidPolicy(mPackageInfo.applicationInfo.uid,
+ policy);
+ }
+ }
+ });
+ }
+
private void setIntentAndFinish(boolean finish, boolean appChanged) {
Intent intent = new Intent();
intent.putExtra(ManageApplications.APP_CHG, appChanged);
@@ -245,6 +294,7 @@ public class AppOpsDetails extends InstrumentedFragment {
mPm = getActivity().getPackageManager();
mInflater = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
mAppOps = (AppOpsManager)getActivity().getSystemService(Context.APP_OPS_SERVICE);
+ mPolicyManager = NetworkPolicyManager.from(getActivity());
retrieveAppEntry();
diff --git a/src/com/android/settings/privacyguard/AppInfoLoader.java b/src/com/android/settings/privacyguard/AppInfoLoader.java
index 6efd7a5..520bd20 100644
--- a/src/com/android/settings/privacyguard/AppInfoLoader.java
+++ b/src/com/android/settings/privacyguard/AppInfoLoader.java
@@ -15,6 +15,7 @@
*/
package com.android.settings.privacyguard;
+import android.Manifest;
import android.app.AppOpsManager;
import android.content.AsyncTaskLoader;
import android.content.Context;
@@ -104,6 +105,8 @@ import java.util.List;
app.uid = info.applicationInfo.uid;
app.privacyGuardEnabled = mAppOps.getPrivacyGuardSettingForPackage(
app.uid, app.packageName);
+ app.hasInternetPermission = mPm.checkPermission(Manifest.permission.INTERNET,
+ app.packageName) == PackageManager.PERMISSION_GRANTED;
apps.add(app);
}
diff --git a/src/com/android/settings/privacyguard/PrivacyGuardManager.java b/src/com/android/settings/privacyguard/PrivacyGuardManager.java
index adbe8cc..4cc8214 100644
--- a/src/com/android/settings/privacyguard/PrivacyGuardManager.java
+++ b/src/com/android/settings/privacyguard/PrivacyGuardManager.java
@@ -16,7 +16,10 @@
package com.android.settings.privacyguard;
+import android.Manifest;
import android.app.FragmentTransaction;
+import android.content.pm.PackageManager;
+import android.net.NetworkPolicyManager;
import android.view.animation.AnimationUtils;
import android.app.Activity;
import android.app.AlertDialog;
@@ -87,6 +90,7 @@ public class PrivacyGuardManager extends Fragment
// Privacy Guard Fragment
private final static String PRIVACY_GUARD_FRAGMENT_TAG = "privacy_guard_fragment";
+ private NetworkPolicyManager mPolicyManager;
// holder for package data passed into the adapter
public static final class AppInfo {
@@ -95,6 +99,13 @@ public class PrivacyGuardManager extends Fragment
boolean enabled;
boolean privacyGuardEnabled;
int uid;
+ boolean hasInternetPermission;
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ mPolicyManager = NetworkPolicyManager.from(getActivity());
}
@Override
@@ -280,6 +291,15 @@ public class PrivacyGuardManager extends Fragment
app.privacyGuardEnabled = !app.privacyGuardEnabled;
mAppOps.setPrivacyGuardSettingForPackage(app.uid, app.packageName, app.privacyGuardEnabled);
+ if (app.hasInternetPermission) {
+ if (app.privacyGuardEnabled) {
+ mPolicyManager.addUidPolicy(app.uid, NetworkPolicyManager.POLICY_REJECT_ON_DATA);
+ mPolicyManager.addUidPolicy(app.uid, NetworkPolicyManager.POLICY_REJECT_ON_WLAN);
+ } else {
+ mPolicyManager.removeUidPolicy(app.uid, NetworkPolicyManager.POLICY_REJECT_ON_DATA);
+ mPolicyManager.removeUidPolicy(app.uid, NetworkPolicyManager.POLICY_REJECT_ON_WLAN);
+ }
+ }
mAdapter.notifyDataSetChanged();
}