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