summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/applications
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/com/android/settings/applications
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/com/android/settings/applications')
-rw-r--r--src/com/android/settings/applications/AppOpsDetails.java54
1 files changed, 52 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();