Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a961fe57 authored by Jason Parks's avatar Jason Parks
Browse files

Parental controls icon fixes.

* Add icon to the start of the quick settings footer message
* Fix size of the icon in the footer dialog.

Test: atest SystemUITests:QSSecurityFooterTest && manual
Bug: 161861348
Change-Id: I256afbb3d66e1b6f968e91a3ee15b27189c3bf91
parent 324710c1
Loading
Loading
Loading
Loading
+9 −1
Original line number Diff line number Diff line
@@ -26,11 +26,19 @@
    android:layout_gravity="center_vertical|center_horizontal"
    android:background="@android:color/transparent">

    <ImageView
        android:id="@+id/primary_footer_icon"
        android:layout_width="@dimen/qs_footer_icon_size"
        android:layout_height="@dimen/qs_footer_icon_size"
        android:gravity="start"
        android:layout_marginEnd="8dp"
        android:contentDescription="@null"
        android:tint="?android:attr/textColorPrimary" />

    <com.android.systemui.util.AutoMarqueeTextView
        android:id="@+id/footer_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:gravity="start"
        android:layout_weight="1"
        android:singleLine="true"
        android:ellipsize="marquee"
+2 −2
Original line number Diff line number Diff line
@@ -29,8 +29,8 @@
        android:orientation="vertical">
        <ImageView
            android:id="@+id/parental_controls_icon"
            android:layout_width="36dip"
            android:layout_height="36dip"
            android:layout_width="24dip"
            android:layout_height="24dip"
            android:layout_gravity="center_horizontal"

        />
+24 −0
Original line number Diff line number Diff line
@@ -68,6 +68,7 @@ class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListen
    private final View mRootView;
    private final TextView mFooterText;
    private final ImageView mFooterIcon;
    private final ImageView mPrimaryFooterIcon;
    private final Context mContext;
    private final Callback mCallback = new Callback();
    private final SecurityController mSecurityController;
@@ -83,6 +84,7 @@ class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListen
    private CharSequence mFooterTextContent = null;
    private int mFooterTextId;
    private int mFooterIconId;
    private Drawable mPrimaryFooterIconDrawable;

    @Inject
    QSSecurityFooter(@Named(QS_SECURITY_FOOTER_VIEW) View rootView, Context context,
@@ -92,6 +94,7 @@ class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListen
        mRootView.setOnClickListener(this);
        mFooterText = mRootView.findViewById(R.id.footer_text);
        mFooterIcon = mRootView.findViewById(R.id.footer_icon);
        mPrimaryFooterIcon = mRootView.findViewById(R.id.primary_footer_icon);
        mFooterIconId = R.drawable.ic_info_outline;
        mContext = context;
        mMainHandler = mainHandler;
@@ -188,6 +191,18 @@ class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListen
            mFooterIconId = footerIconId;
            mMainHandler.post(mUpdateIcon);
        }

        // Update the primary icon
        if (isParentalControlsEnabled) {
            if (mPrimaryFooterIconDrawable == null) {
                DeviceAdminInfo info = mSecurityController.getDeviceAdminInfo();
                mPrimaryFooterIconDrawable = mSecurityController.getIcon(info);
            }
        } else {
            mPrimaryFooterIconDrawable = null;
        }
        mMainHandler.post(mUpdatePrimaryIcon);

        mMainHandler.post(mUpdateDisplayState);
    }

@@ -532,6 +547,15 @@ class QSSecurityFooter implements OnClickListener, DialogInterface.OnClickListen
        }
    };

    private final Runnable mUpdatePrimaryIcon = new Runnable() {
        @Override
        public void run() {
            mPrimaryFooterIcon.setVisibility(mPrimaryFooterIconDrawable != null
                    ? View.VISIBLE : View.GONE);
            mPrimaryFooterIcon.setImageDrawable(mPrimaryFooterIconDrawable);
        }
    };

    private final Runnable mUpdateDisplayState = new Runnable() {
        @Override
        public void run() {
+26 −0
Original line number Diff line number Diff line
@@ -15,6 +15,7 @@
package com.android.systemui.qs;

import static junit.framework.Assert.assertEquals;
import static junit.framework.Assert.assertNotNull;

import static org.junit.Assert.assertFalse;
import static org.mockito.Matchers.any;
@@ -24,6 +25,8 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.content.pm.UserInfo;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.VectorDrawable;
import android.os.Handler;
import android.os.Looper;
import android.provider.Settings;
@@ -75,6 +78,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
    private ViewGroup mRootView;
    private TextView mFooterText;
    private TestableImageView mFooterIcon;
    private TestableImageView mPrimaryFooterIcon;
    private QSSecurityFooter mFooter;
    @Mock
    private SecurityController mSecurityController;
@@ -95,6 +99,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
                mActivityStarter, mSecurityController, looper);
        mFooterText = mRootView.findViewById(R.id.footer_text);
        mFooterIcon = mRootView.findViewById(R.id.footer_icon);
        mPrimaryFooterIcon = mRootView.findViewById(R.id.primary_footer_icon);
        mFooter.setHostEnvironment(null);
    }

@@ -119,6 +124,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
                     mFooterText.getText());
        assertEquals(View.VISIBLE, mRootView.getVisibility());
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(View.GONE, mPrimaryFooterIcon.getVisibility());
        // -1 == never set.
        assertEquals(-1, mFooterIcon.getLastImageResource());
    }
@@ -136,6 +142,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
                mFooterText.getText());
        assertEquals(View.VISIBLE, mRootView.getVisibility());
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(View.GONE, mPrimaryFooterIcon.getVisibility());
        // -1 == never set.
        assertEquals(-1, mFooterIcon.getLastImageResource());
    }
@@ -165,6 +172,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_monitoring),
                mFooterText.getText());
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(View.GONE, mPrimaryFooterIcon.getVisibility());
        // -1 == never set.
        assertEquals(-1, mFooterIcon.getLastImageResource());

@@ -203,6 +211,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
                                        VPN_PACKAGE),
                     mFooterText.getText());
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(View.GONE, mPrimaryFooterIcon.getVisibility());
        assertEquals(R.drawable.stat_sys_vpn_ic, mFooterIcon.getLastImageResource());

        // Same situation, but with organization name set
@@ -229,6 +238,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {
        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_vpns),
                     mFooterText.getText());
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(View.GONE, mPrimaryFooterIcon.getVisibility());
        assertEquals(R.drawable.stat_sys_vpn_ic, mFooterIcon.getLastImageResource());

        // Same situation, but with organization name set
@@ -252,6 +262,7 @@ public class QSSecurityFooterTest extends SysuiTestCase {

        TestableLooper.get(this).processAllMessages();
        assertEquals(View.VISIBLE, mFooterIcon.getVisibility());
        assertEquals(View.GONE, mPrimaryFooterIcon.getVisibility());
        assertEquals(R.drawable.stat_sys_vpn_ic, mFooterIcon.getLastImageResource());
        assertEquals(mContext.getString(R.string.quick_settings_disclosure_management_monitoring),
                mFooterText.getText());
@@ -534,12 +545,27 @@ public class QSSecurityFooterTest extends SysuiTestCase {
    @Test
    public void testParentalControls() {
        when(mSecurityController.isParentalControlsEnabled()).thenReturn(true);

        Drawable testDrawable = new VectorDrawable();
        when(mSecurityController.getIcon(any())).thenReturn(testDrawable);
        assertNotNull(mSecurityController.getIcon(null));

        mFooter.refreshState();

        TestableLooper.get(this).processAllMessages();

        assertEquals(mContext.getString(R.string.quick_settings_disclosure_parental_controls),
                mFooterText.getText());
        assertEquals(View.VISIBLE, mPrimaryFooterIcon.getVisibility());

        assertEquals(testDrawable, mPrimaryFooterIcon.getDrawable());

        // Ensure the primary icon is set to gone when parental controls is disabled.
        when(mSecurityController.isParentalControlsEnabled()).thenReturn(false);
        mFooter.refreshState();
        TestableLooper.get(this).processAllMessages();

        assertEquals(View.GONE, mPrimaryFooterIcon.getVisibility());
    }

    @Test