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
This commit is contained in:
@@ -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"
|
||||
|
||||
@@ -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"
|
||||
|
||||
/>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user