diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index ce10bad7a2078..39f415e6ad8f0 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -6939,11 +6939,13 @@ public class DevicePolicyManager {
/**
* Return whether network logging is enabled by a device owner.
*
- * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
+ * @param admin Which {@link DeviceAdminReceiver} this request is associated with. Can only
+ * be {@code null} if the caller has MANAGE_USERS permission.
* @return {@code true} if network logging is enabled by device owner, {@code false} otherwise.
- * @throws {@link SecurityException} if {@code admin} is not a device owner.
+ * @throws {@link SecurityException} if {@code admin} is not a device owner and caller has
+ * no MANAGE_USERS permission
*/
- public boolean isNetworkLoggingEnabled(@NonNull ComponentName admin) {
+ public boolean isNetworkLoggingEnabled(@Nullable ComponentName admin) {
throwIfParentInstance("isNetworkLoggingEnabled");
try {
return mService.isNetworkLoggingEnabled(admin);
diff --git a/packages/SystemUI/res/drawable/ic_qs_network_logging.xml b/packages/SystemUI/res/drawable/ic_qs_network_logging.xml
new file mode 100644
index 0000000000000..1340ae1617293
--- /dev/null
+++ b/packages/SystemUI/res/drawable/ic_qs_network_logging.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
diff --git a/packages/SystemUI/res/layout/quick_settings_footer.xml b/packages/SystemUI/res/layout/quick_settings_footer.xml
index 53baf74ffee9c..8667a5a8f5cde 100644
--- a/packages/SystemUI/res/layout/quick_settings_footer.xml
+++ b/packages/SystemUI/res/layout/quick_settings_footer.xml
@@ -39,4 +39,16 @@
android:src="@drawable/ic_qs_vpn"
android:visibility="invisible" />
-
\ No newline at end of file
+
+
+
+
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
index 43308def0f4ad..f3da47b1ba82d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
@@ -51,6 +51,7 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene
private final View mRootView;
private final TextView mFooterText;
private final ImageView mFooterIcon;
+ private final ImageView mFooterIcon2;
private final Context mContext;
private final Callback mCallback = new Callback();
@@ -62,8 +63,11 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene
private boolean mIsVisible;
private boolean mIsIconVisible;
+ private boolean mIsIcon2Visible;
private CharSequence mFooterTextContent = null;
+ private int mFooterTextId;
private int mFooterIconId;
+ private int mFooterIcon2Id;
public QSFooter(QSPanel qsPanel, Context context) {
mRootView = LayoutInflater.from(context)
@@ -71,7 +75,9 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene
mRootView.setOnClickListener(this);
mFooterText = (TextView) mRootView.findViewById(R.id.footer_text);
mFooterIcon = (ImageView) mRootView.findViewById(R.id.footer_icon);
+ mFooterIcon2 = (ImageView) mRootView.findViewById(R.id.footer_icon2);
mFooterIconId = R.drawable.ic_qs_vpn;
+ mFooterIcon2Id = R.drawable.ic_qs_network_logging;
mContext = context;
mMainHandler = new Handler(Looper.getMainLooper());
}
@@ -119,7 +125,10 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene
}
private void handleRefreshState() {
- mIsIconVisible = mSecurityController.isVpnEnabled();
+ boolean isVpnEnabled = mSecurityController.isVpnEnabled();
+ boolean isNetworkLoggingEnabled = mSecurityController.isNetworkLoggingEnabled();
+ mIsIconVisible = isVpnEnabled || isNetworkLoggingEnabled;
+ mIsIcon2Visible = isVpnEnabled && isNetworkLoggingEnabled;
if (mSecurityController.isDeviceManaged()) {
final CharSequence organizationName =
mSecurityController.getDeviceOwnerOrganizationName();
@@ -131,12 +140,21 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene
mContext.getResources().getString(R.string.do_disclosure_generic);
}
mIsVisible = true;
+ int footerIconId = isVpnEnabled
+ ? R.drawable.ic_qs_vpn
+ : R.drawable.ic_qs_network_logging;
+ if (mFooterIconId != footerIconId) {
+ mFooterIconId = footerIconId;
+ mMainHandler.post(mUpdateIcon);
+ }
} else {
boolean isBranded = mSecurityController.isVpnBranded();
mFooterTextContent = mContext.getResources().getText(
isBranded ? R.string.branded_vpn_footer : R.string.vpn_footer);
// Update the VPN footer icon, if needed.
- int footerIconId = isBranded ? R.drawable.ic_qs_branded_vpn : R.drawable.ic_qs_vpn;
+ int footerIconId = isVpnEnabled
+ ? (isBranded ? R.drawable.ic_qs_branded_vpn : R.drawable.ic_qs_vpn)
+ : R.drawable.ic_qs_network_logging;
if (mFooterIconId != footerIconId) {
mFooterIconId = footerIconId;
mMainHandler.post(mUpdateIcon);
@@ -258,6 +276,7 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene
@Override
public void run() {
mFooterIcon.setImageResource(mFooterIconId);
+ mFooterIcon2.setImageResource(mFooterIcon2Id);
}
};
@@ -269,6 +288,7 @@ public class QSFooter implements OnClickListener, DialogInterface.OnClickListene
}
mRootView.setVisibility(mIsVisible ? View.VISIBLE : View.GONE);
mFooterIcon.setVisibility(mIsIconVisible ? View.VISIBLE : View.INVISIBLE);
+ mFooterIcon2.setVisibility(mIsIcon2Visible ? View.VISIBLE : View.INVISIBLE);
}
};
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java
index 69281b52142cd..3142228551b68 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/SecurityController.java
@@ -24,6 +24,7 @@ public interface SecurityController extends CallbackController