Loading core/java/android/app/AppOpsManager.java +22 −9 Original line number Diff line number Diff line Loading @@ -16,26 +16,26 @@ package android.app; import android.Manifest; import android.annotation.SystemApi; import android.app.usage.UsageStatsManager; import android.content.Context; import android.media.AudioAttributes.AttributeUsage; import android.os.Binder; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; import android.os.UserManager; import android.util.ArrayMap; import com.android.internal.app.IAppOpsService; import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsService; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; /** * API for interacting with "application operation" tracking. * Loading Loading @@ -203,8 +203,10 @@ public class AppOpsManager { public static final int OP_TOAST_WINDOW = 45; /** @hide Capture the device's display contents and/or audio */ public static final int OP_PROJECT_MEDIA = 46; /** @hide Activate a VPN connection without user intervention. */ public static final int OP_ACTIVATE_VPN = 47; /** @hide */ public static final int _NUM_OP = 47; public static final int _NUM_OP = 48; /** Access to coarse location information. */ public static final String OPSTR_COARSE_LOCATION = Loading @@ -218,6 +220,9 @@ public class AppOpsManager { /** Continually monitoring location data with a relatively high power request. */ public static final String OPSTR_MONITOR_HIGH_POWER_LOCATION = "android:monitor_location_high_power"; /** Activate a VPN connection without user intervention. @hide */ @SystemApi public static final String OPSTR_ACTIVATE_VPN = "android:activate_vpn"; /** * This maps each operation to the operation that serves as the Loading Loading @@ -275,6 +280,7 @@ public class AppOpsManager { OP_MUTE_MICROPHONE, OP_TOAST_WINDOW, OP_PROJECT_MEDIA, OP_ACTIVATE_VPN, }; /** Loading Loading @@ -329,6 +335,7 @@ public class AppOpsManager { null, null, null, OPSTR_ACTIVATE_VPN, }; /** Loading Loading @@ -383,6 +390,7 @@ public class AppOpsManager { "MUTE_MICROPHONE", "TOAST_WINDOW", "PROJECT_MEDIA", "ACTIVATE_VPN", }; /** Loading Loading @@ -437,6 +445,7 @@ public class AppOpsManager { null, // no permission for muting/unmuting microphone null, // no permission for displaying toasts null, // no permission for projecting media null, // no permission for activating vpn }; /** Loading Loading @@ -492,6 +501,7 @@ public class AppOpsManager { UserManager.DISALLOW_UNMUTE_MICROPHONE, // MUTE_MICROPHONE UserManager.DISALLOW_CREATE_WINDOWS, // TOAST_WINDOW null, //PROJECT_MEDIA UserManager.DISALLOW_CONFIG_VPN, // ACTIVATE_VPN }; /** Loading Loading @@ -546,6 +556,7 @@ public class AppOpsManager { false, //MUTE_MICROPHONE true, //TOAST_WINDOW false, //PROJECT_MEDIA false, //ACTIVATE_VPN }; /** Loading Loading @@ -599,6 +610,7 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, AppOpsManager.MODE_ALLOWED, AppOpsManager.MODE_IGNORED, // OP_PROJECT_MEDIA AppOpsManager.MODE_IGNORED, // OP_ACTIVATE_VPN }; /** Loading Loading @@ -656,6 +668,7 @@ public class AppOpsManager { false, false, false, false, }; private static HashMap<String, Integer> sOpStrToOp = new HashMap<String, Integer>(); Loading core/java/android/net/IConnectivityManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,8 @@ interface IConnectivityManager boolean prepareVpn(String oldPackage, String newPackage); void setVpnPackageAuthorization(boolean authorized); ParcelFileDescriptor establishVpn(in VpnConfig config); VpnConfig getVpnConfig(); Loading core/java/com/android/internal/net/LegacyVpnInfo.java +0 −3 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ public class LegacyVpnInfo implements Parcelable { public String key; public int state = -1; public PendingIntent intent; @Override public int describeContents() { Loading @@ -51,7 +50,6 @@ public class LegacyVpnInfo implements Parcelable { public void writeToParcel(Parcel out, int flags) { out.writeString(key); out.writeInt(state); out.writeParcelable(intent, flags); } public static final Parcelable.Creator<LegacyVpnInfo> CREATOR = Loading @@ -61,7 +59,6 @@ public class LegacyVpnInfo implements Parcelable { LegacyVpnInfo info = new LegacyVpnInfo(); info.key = in.readString(); info.state = in.readInt(); info.intent = in.readParcelable(null); return info; } Loading core/java/com/android/internal/net/VpnConfig.java +19 −10 Original line number Diff line number Diff line Loading @@ -20,17 +20,19 @@ import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.net.LinkAddress; import android.net.RouteInfo; import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; import android.net.RouteInfo; import android.net.LinkAddress; import java.net.Inet4Address; import java.net.InetAddress; import java.util.List; import java.util.ArrayList; import java.util.List; /** * A simple container used to carry information in VpnBuilder, VpnDialogs, Loading @@ -55,12 +57,19 @@ public class VpnConfig implements Parcelable { return intent; } public static PendingIntent getIntentForStatusPanel(Context context) { Intent intent = new Intent(); intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); return PendingIntent.getActivityAsUser(context, 0, intent, 0, null, UserHandle.CURRENT); public static CharSequence getVpnLabel(Context context, String packageName) throws NameNotFoundException { PackageManager pm = context.getPackageManager(); Intent intent = new Intent(SERVICE_INTERFACE); intent.setPackage(packageName); List<ResolveInfo> services = pm.queryIntentServices(intent, 0 /* flags */); if (services != null && services.size() == 1) { // This app contains exactly one VPN service. Call loadLabel, which will attempt to // load the service's label, and fall back to the app label if none is present. return services.get(0).loadLabel(pm); } else { return pm.getApplicationInfo(packageName, 0).loadLabel(pm); } } public String user; Loading packages/SystemUI/res/values/strings.xml +2 −2 Original line number Diff line number Diff line Loading @@ -834,8 +834,8 @@ <!-- Monitoring dialog title for normal devices [CHAR LIMIT=35]--> <string name="monitoring_title">Network monitoring</string> <!-- Monitoring dialog open app button [CHAR LIMIT=30] --> <string name="open_app">Open app</string> <!-- Monitoring dialog disable vpn button [CHAR LIMIT=30] --> <string name="disable_vpn">Disable VPN</string> <!-- Monitoring dialog disconnect vpn button [CHAR LIMIT=30] --> <string name="disconnect_vpn">Disconnect VPN</string> Loading Loading
core/java/android/app/AppOpsManager.java +22 −9 Original line number Diff line number Diff line Loading @@ -16,26 +16,26 @@ package android.app; import android.Manifest; import android.annotation.SystemApi; import android.app.usage.UsageStatsManager; import android.content.Context; import android.media.AudioAttributes.AttributeUsage; import android.os.Binder; import android.os.IBinder; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; import android.os.UserManager; import android.util.ArrayMap; import com.android.internal.app.IAppOpsService; import com.android.internal.app.IAppOpsCallback; import com.android.internal.app.IAppOpsService; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import android.content.Context; import android.os.Parcel; import android.os.Parcelable; import android.os.Process; import android.os.RemoteException; /** * API for interacting with "application operation" tracking. * Loading Loading @@ -203,8 +203,10 @@ public class AppOpsManager { public static final int OP_TOAST_WINDOW = 45; /** @hide Capture the device's display contents and/or audio */ public static final int OP_PROJECT_MEDIA = 46; /** @hide Activate a VPN connection without user intervention. */ public static final int OP_ACTIVATE_VPN = 47; /** @hide */ public static final int _NUM_OP = 47; public static final int _NUM_OP = 48; /** Access to coarse location information. */ public static final String OPSTR_COARSE_LOCATION = Loading @@ -218,6 +220,9 @@ public class AppOpsManager { /** Continually monitoring location data with a relatively high power request. */ public static final String OPSTR_MONITOR_HIGH_POWER_LOCATION = "android:monitor_location_high_power"; /** Activate a VPN connection without user intervention. @hide */ @SystemApi public static final String OPSTR_ACTIVATE_VPN = "android:activate_vpn"; /** * This maps each operation to the operation that serves as the Loading Loading @@ -275,6 +280,7 @@ public class AppOpsManager { OP_MUTE_MICROPHONE, OP_TOAST_WINDOW, OP_PROJECT_MEDIA, OP_ACTIVATE_VPN, }; /** Loading Loading @@ -329,6 +335,7 @@ public class AppOpsManager { null, null, null, OPSTR_ACTIVATE_VPN, }; /** Loading Loading @@ -383,6 +390,7 @@ public class AppOpsManager { "MUTE_MICROPHONE", "TOAST_WINDOW", "PROJECT_MEDIA", "ACTIVATE_VPN", }; /** Loading Loading @@ -437,6 +445,7 @@ public class AppOpsManager { null, // no permission for muting/unmuting microphone null, // no permission for displaying toasts null, // no permission for projecting media null, // no permission for activating vpn }; /** Loading Loading @@ -492,6 +501,7 @@ public class AppOpsManager { UserManager.DISALLOW_UNMUTE_MICROPHONE, // MUTE_MICROPHONE UserManager.DISALLOW_CREATE_WINDOWS, // TOAST_WINDOW null, //PROJECT_MEDIA UserManager.DISALLOW_CONFIG_VPN, // ACTIVATE_VPN }; /** Loading Loading @@ -546,6 +556,7 @@ public class AppOpsManager { false, //MUTE_MICROPHONE true, //TOAST_WINDOW false, //PROJECT_MEDIA false, //ACTIVATE_VPN }; /** Loading Loading @@ -599,6 +610,7 @@ public class AppOpsManager { AppOpsManager.MODE_ALLOWED, AppOpsManager.MODE_ALLOWED, AppOpsManager.MODE_IGNORED, // OP_PROJECT_MEDIA AppOpsManager.MODE_IGNORED, // OP_ACTIVATE_VPN }; /** Loading Loading @@ -656,6 +668,7 @@ public class AppOpsManager { false, false, false, false, }; private static HashMap<String, Integer> sOpStrToOp = new HashMap<String, Integer>(); Loading
core/java/android/net/IConnectivityManager.aidl +2 −0 Original line number Diff line number Diff line Loading @@ -108,6 +108,8 @@ interface IConnectivityManager boolean prepareVpn(String oldPackage, String newPackage); void setVpnPackageAuthorization(boolean authorized); ParcelFileDescriptor establishVpn(in VpnConfig config); VpnConfig getVpnConfig(); Loading
core/java/com/android/internal/net/LegacyVpnInfo.java +0 −3 Original line number Diff line number Diff line Loading @@ -40,7 +40,6 @@ public class LegacyVpnInfo implements Parcelable { public String key; public int state = -1; public PendingIntent intent; @Override public int describeContents() { Loading @@ -51,7 +50,6 @@ public class LegacyVpnInfo implements Parcelable { public void writeToParcel(Parcel out, int flags) { out.writeString(key); out.writeInt(state); out.writeParcelable(intent, flags); } public static final Parcelable.Creator<LegacyVpnInfo> CREATOR = Loading @@ -61,7 +59,6 @@ public class LegacyVpnInfo implements Parcelable { LegacyVpnInfo info = new LegacyVpnInfo(); info.key = in.readString(); info.state = in.readInt(); info.intent = in.readParcelable(null); return info; } Loading
core/java/com/android/internal/net/VpnConfig.java +19 −10 Original line number Diff line number Diff line Loading @@ -20,17 +20,19 @@ import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.ResolveInfo; import android.content.res.Resources; import android.net.LinkAddress; import android.net.RouteInfo; import android.os.Parcel; import android.os.Parcelable; import android.os.UserHandle; import android.net.RouteInfo; import android.net.LinkAddress; import java.net.Inet4Address; import java.net.InetAddress; import java.util.List; import java.util.ArrayList; import java.util.List; /** * A simple container used to carry information in VpnBuilder, VpnDialogs, Loading @@ -55,12 +57,19 @@ public class VpnConfig implements Parcelable { return intent; } public static PendingIntent getIntentForStatusPanel(Context context) { Intent intent = new Intent(); intent.setClassName(DIALOGS_PACKAGE, DIALOGS_PACKAGE + ".ManageDialog"); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS); return PendingIntent.getActivityAsUser(context, 0, intent, 0, null, UserHandle.CURRENT); public static CharSequence getVpnLabel(Context context, String packageName) throws NameNotFoundException { PackageManager pm = context.getPackageManager(); Intent intent = new Intent(SERVICE_INTERFACE); intent.setPackage(packageName); List<ResolveInfo> services = pm.queryIntentServices(intent, 0 /* flags */); if (services != null && services.size() == 1) { // This app contains exactly one VPN service. Call loadLabel, which will attempt to // load the service's label, and fall back to the app label if none is present. return services.get(0).loadLabel(pm); } else { return pm.getApplicationInfo(packageName, 0).loadLabel(pm); } } public String user; Loading
packages/SystemUI/res/values/strings.xml +2 −2 Original line number Diff line number Diff line Loading @@ -834,8 +834,8 @@ <!-- Monitoring dialog title for normal devices [CHAR LIMIT=35]--> <string name="monitoring_title">Network monitoring</string> <!-- Monitoring dialog open app button [CHAR LIMIT=30] --> <string name="open_app">Open app</string> <!-- Monitoring dialog disable vpn button [CHAR LIMIT=30] --> <string name="disable_vpn">Disable VPN</string> <!-- Monitoring dialog disconnect vpn button [CHAR LIMIT=30] --> <string name="disconnect_vpn">Disconnect VPN</string> Loading