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

Commit 6f9999ca authored by Jason Parks's avatar Jason Parks Committed by Android (Google) Code Review
Browse files

Merge "Parental controls icon fixes."

parents 56d8a74a a961fe57
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