From 9aaa8cfc919db3b0fcb9ca3254ce1408981bcf48 Mon Sep 17 00:00:00 2001 From: Winston Man Date: Tue, 15 Aug 2017 13:15:24 +0100 Subject: [PATCH] Hide subtitle for dialog from QS when applicable - Always show device management subtitle - Hide subtitle for others (vpn/network monitor/ca) if there is only 1 message - Show subtitles if there are multiple messages screen shots of a few combinations of conditions device management + vpn https://hsv.googleplex.com/5171127252942848 device management https://hsv.googleplex.com/5156831890505728 vpn https://hsv.googleplex.com/4788656657137664 ca + vpn https://hsv.googleplex.com/6238262343499776 ca https://hsv.googleplex.com/5725008114483200 ca + network log https://hsv.googleplex.com/5145599846383616 network log https://hsv.googleplex.com/5124533736439808 Bug: 64555046 Test: hard coded valued for each condition Test: runtest --path frameworks/base/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java Change-Id: Id9fcd8f0727eb2d40338c8c0d6530ab576f7b310 --- .../android/systemui/qs/QSSecurityFooter.java | 36 +++++++++++++ .../systemui/qs/QSSecurityFooterTest.java | 52 +++++++++++++++++++ 2 files changed, 88 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java index e574c01dd077c..a48bcbd1f840f 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java +++ b/packages/SystemUI/src/com/android/systemui/qs/QSSecurityFooter.java @@ -310,11 +310,47 @@ public class QSSecurityFooter implements OnClickListener, DialogInterface.OnClic vpnWarning.setMovementMethod(new LinkMovementMethod()); } + // Note: if a new section is added, should update configSubtitleVisibility to include + // the handling of the subtitle + configSubtitleVisibility(managementMessage != null, + caCertsMessage != null, + networkLoggingMessage != null, + vpnMessage != null, + dialogView); + mDialog.show(); mDialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); } + protected void configSubtitleVisibility(boolean showDeviceManagement, boolean showCaCerts, + boolean showNetworkLogging, boolean showVpn, View dialogView) { + // Device Management title should always been shown + // When there is a Device Management message, all subtitles should be shown + if (showDeviceManagement) { + return; + } + // Hide the subtitle if there is only 1 message shown + int mSectionCountExcludingDeviceMgt = 0; + if (showCaCerts) { mSectionCountExcludingDeviceMgt++; } + if (showNetworkLogging) { mSectionCountExcludingDeviceMgt++; } + if (showVpn) { mSectionCountExcludingDeviceMgt++; } + + // No work needed if there is no sections or more than 1 section + if (mSectionCountExcludingDeviceMgt != 1) { + return; + } + if (showCaCerts) { + dialogView.findViewById(R.id.ca_certs_subtitle).setVisibility(View.GONE); + } + if (showNetworkLogging) { + dialogView.findViewById(R.id.network_logging_subtitle).setVisibility(View.GONE); + } + if (showVpn) { + dialogView.findViewById(R.id.vpn_subtitle).setVisibility(View.GONE); + } + } + private String getSettingsButton() { return mContext.getString(R.string.monitoring_button_view_policies); } diff --git a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java index a8487b3eff4ee..4f98836eeec75 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/qs/QSSecurityFooterTest.java @@ -29,6 +29,7 @@ import android.provider.Settings; import android.support.test.runner.AndroidJUnit4; import android.test.suitebuilder.annotation.SmallTest; import android.text.SpannableStringBuilder; +import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; @@ -395,6 +396,57 @@ public class QSSecurityFooterTest extends SysuiTestCase { mFooter.getVpnMessage(false, true, VPN_PACKAGE, null)); } + @Test + public void testConfigSubtitleVisibility() { + View view = LayoutInflater.from(mContext) + .inflate(R.layout.quick_settings_footer_dialog, null); + + // Device Management subtitle should be shown when there is Device Management section only + // Other sections visibility will be set somewhere else so it will not be tested here + mFooter.configSubtitleVisibility(true, false, false, false, view); + assertEquals(View.VISIBLE, + view.findViewById(R.id.device_management_subtitle).getVisibility()); + + // If there are multiple sections, all subtitles should be shown + mFooter.configSubtitleVisibility(true, true, false, false, view); + assertEquals(View.VISIBLE, + view.findViewById(R.id.device_management_subtitle).getVisibility()); + assertEquals(View.VISIBLE, + view.findViewById(R.id.ca_certs_subtitle).getVisibility()); + + // If there are multiple sections, all subtitles should be shown + mFooter.configSubtitleVisibility(true, true, true, true, view); + assertEquals(View.VISIBLE, + view.findViewById(R.id.device_management_subtitle).getVisibility()); + assertEquals(View.VISIBLE, + view.findViewById(R.id.ca_certs_subtitle).getVisibility()); + assertEquals(View.VISIBLE, + view.findViewById(R.id.network_logging_subtitle).getVisibility()); + assertEquals(View.VISIBLE, + view.findViewById(R.id.vpn_subtitle).getVisibility()); + + // If there are multiple sections, all subtitles should be shown, event if there is no + // Device Management section + mFooter.configSubtitleVisibility(false, true, true, true, view); + assertEquals(View.VISIBLE, + view.findViewById(R.id.ca_certs_subtitle).getVisibility()); + assertEquals(View.VISIBLE, + view.findViewById(R.id.network_logging_subtitle).getVisibility()); + assertEquals(View.VISIBLE, + view.findViewById(R.id.vpn_subtitle).getVisibility()); + + // If there is only 1 section, the title should be hidden + mFooter.configSubtitleVisibility(false, true, false, false, view); + assertEquals(View.GONE, + view.findViewById(R.id.ca_certs_subtitle).getVisibility()); + mFooter.configSubtitleVisibility(false, false, true, false, view); + assertEquals(View.GONE, + view.findViewById(R.id.network_logging_subtitle).getVisibility()); + mFooter.configSubtitleVisibility(false, false, false, true, view); + assertEquals(View.GONE, + view.findViewById(R.id.vpn_subtitle).getVisibility()); + } + private CharSequence addLink(CharSequence description) { final SpannableStringBuilder message = new SpannableStringBuilder(); message.append(description);