Loading packages/SystemUI/res-keyguard/values/styles.xml +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ </style> <style name="TextAppearance.Keyguard.BottomArea"> <item name="android:textSize">16sp</item> <item name="android:textSize">14sp</item> <item name="android:maxLines">1</item> <item name="android:textColor">?attr/wallpaperTextColor</item> <item name="android:shadowColor">@color/keyguard_shadow_color</item> Loading packages/SystemUI/res/layout/keyguard_bottom_area.xml +11 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,17 @@ android:textAppearance="@style/TextAppearance.Keyguard.BottomArea" android:accessibilityLiveRegion="polite"/> <com.android.systemui.statusbar.phone.KeyguardIndicationTextView android:id="@+id/keyguard_indication_enterprise_disclosure" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingStart="@dimen/keyguard_indication_text_padding" android:paddingEnd="@dimen/keyguard_indication_text_padding" android:textAppearance="@style/TextAppearance.Keyguard.BottomArea" android:alpha=".54" android:visibility="gone"/> </LinearLayout> <FrameLayout Loading packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +53 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,15 @@ package com.android.systemui.statusbar; import static com.android.systemui.DejankUtils.whitelistIpcs; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.ColorStateList; import android.graphics.Color; import android.hardware.biometrics.BiometricSourceType; Loading @@ -43,6 +49,7 @@ import com.android.settingslib.Utils; import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; Loading Loading @@ -78,15 +85,19 @@ public class KeyguardIndicationController implements StateListener, private static final float BOUNCE_ANIMATION_FINAL_Y = 0f; private final Context mContext; private final BroadcastDispatcher mBroadcastDispatcher; private final KeyguardStateController mKeyguardStateController; private final StatusBarStateController mStatusBarStateController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private ViewGroup mIndicationArea; private KeyguardIndicationTextView mTextView; private KeyguardIndicationTextView mDisclosure; private final IBatteryStats mBatteryInfo; private final SettableWakeLock mWakeLock; private final DockManager mDockManager; private final DevicePolicyManager mDevicePolicyManager; private BroadcastReceiver mBroadcastReceiver; private LockscreenLockIconController mLockIconController; private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; Loading @@ -105,6 +116,7 @@ public class KeyguardIndicationController implements StateListener, private int mChargingWattage; private int mBatteryLevel; private long mChargingTimeRemaining; private float mDisclosureMaxAlpha; private String mMessageToShowOnScreenOn; private KeyguardUpdateMonitorCallback mUpdateMonitorCallback; Loading @@ -128,8 +140,12 @@ public class KeyguardIndicationController implements StateListener, StatusBarStateController statusBarStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager, BroadcastDispatcher broadcastDispatcher, DevicePolicyManager devicePolicyManager, IBatteryStats iBatteryStats) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; mDevicePolicyManager = devicePolicyManager; mKeyguardStateController = keyguardStateController; mStatusBarStateController = statusBarStateController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; Loading @@ -151,7 +167,22 @@ public class KeyguardIndicationController implements StateListener, mTextView = indicationArea.findViewById(R.id.keyguard_indication_text); mInitialTextColorState = mTextView != null ? mTextView.getTextColors() : ColorStateList.valueOf(Color.WHITE); mDisclosure = indicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure); mDisclosureMaxAlpha = mDisclosure.getAlpha(); updateIndication(false /* animate */); updateDisclosure(); if (mBroadcastReceiver == null) { // Update the disclosure proactively to avoid IPC on the critical path. mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { updateDisclosure(); } }; mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, new IntentFilter( DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED)); } } public void setLockIconController(LockscreenLockIconController lockIconController) { Loading Loading @@ -190,6 +221,23 @@ public class KeyguardIndicationController implements StateListener, return mUpdateMonitorCallback; } private void updateDisclosure() { // NOTE: Because this uses IPC, avoid calling updateDisclosure() on a critical path. if (whitelistIpcs(mDevicePolicyManager::isDeviceManaged)) { final CharSequence organizationName = mDevicePolicyManager.getDeviceOwnerOrganizationName(); if (organizationName != null) { mDisclosure.switchIndication(mContext.getResources().getString( R.string.do_disclosure_with_name, organizationName)); } else { mDisclosure.switchIndication(R.string.do_disclosure_generic); } mDisclosure.setVisibility(View.VISIBLE); } else { mDisclosure.setVisibility(View.GONE); } } public void setVisible(boolean visible) { mVisible = visible; mIndicationArea.setVisibility(visible ? View.VISIBLE : View.GONE); Loading Loading @@ -573,6 +621,11 @@ public class KeyguardIndicationController implements StateListener, setDozing(isDozing); } @Override public void onDozeAmountChanged(float linear, float eased) { mDisclosure.setAlpha((1 - linear) * mDisclosureMaxAlpha); } @Override public void onUnlockedChanged() { updateIndication(!mDozing); Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +6 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private KeyguardAffordanceView mRightAffordanceView; private KeyguardAffordanceView mLeftAffordanceView; private ViewGroup mIndicationArea; private TextView mEnterpriseDisclosure; private TextView mIndicationText; private ViewGroup mPreviewContainer; private ViewGroup mOverlayContainer; Loading Loading @@ -238,6 +239,8 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL mRightAffordanceView = findViewById(R.id.camera_button); mLeftAffordanceView = findViewById(R.id.left_button); mIndicationArea = findViewById(R.id.keyguard_indication_area); mEnterpriseDisclosure = findViewById( R.id.keyguard_indication_enterprise_disclosure); mIndicationText = findViewById(R.id.keyguard_indication_text); mIndicationBottomMargin = getResources().getDimensionPixelSize( R.dimen.keyguard_indication_margin_bottom); Loading Loading @@ -315,6 +318,9 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } // Respect font size setting. mEnterpriseDisclosure.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize( com.android.internal.R.dimen.text_size_small_material)); mIndicationText.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize( com.android.internal.R.dimen.text_size_small_material)); Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +126 −1 Original line number Diff line number Diff line Loading @@ -25,17 +25,21 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.app.Instrumentation; import android.app.admin.DevicePolicyManager; import android.app.trust.TrustManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.hardware.biometrics.BiometricSourceType; import android.hardware.face.FaceManager; Loading @@ -44,6 +48,7 @@ import android.os.BatteryManager; import android.os.Looper; import android.os.RemoteException; import android.os.UserManager; import android.view.View; import android.view.ViewGroup; import androidx.test.InstrumentationRegistry; Loading @@ -52,13 +57,16 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.app.IBatteryStats; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.settingslib.Utils; import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.wakelock.WakeLockFake; Loading @@ -75,6 +83,10 @@ import org.mockito.MockitoAnnotations; @RunWith(AndroidJUnit4.class) public class KeyguardIndicationControllerTest extends SysuiTestCase { private static final String ORGANIZATION_NAME = "organization"; private String mDisclosureWithOrganization; @Mock private DevicePolicyManager mDevicePolicyManager; @Mock Loading @@ -82,6 +94,12 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private KeyguardStateController mKeyguardStateController; @Mock private KeyguardIndicationTextView mDisclosure; @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private LockIcon mLockIcon; @Mock private StatusBarStateController mStatusBarStateController; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; Loading Loading @@ -112,11 +130,17 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mContext.addMockSystemService(UserManager.class, mUserManager); mContext.addMockSystemService(Context.TRUST_SERVICE, mock(TrustManager.class)); mContext.addMockSystemService(Context.FINGERPRINT_SERVICE, mock(FingerprintManager.class)); mDisclosureWithOrganization = mContext.getString(R.string.do_disclosure_with_name, ORGANIZATION_NAME); when(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(true); when(mKeyguardUpdateMonitor.isScreenOn()).thenReturn(true); when(mKeyguardUpdateMonitor.isUserUnlocked(anyInt())).thenReturn(true); when(mIndicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure)) .thenReturn(mDisclosure); when(mIndicationArea.findViewById(R.id.keyguard_indication_text)).thenReturn(mTextView); when(mDisclosure.getAlpha()).thenReturn(1f); mWakeLock = new WakeLockFake(); mWakeLockBuilder = new WakeLockFake.Builder(mContext); Loading @@ -130,10 +154,11 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mController = new KeyguardIndicationController(mContext, mWakeLockBuilder, mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor, mDockManager, mIBatteryStats); mDockManager, mBroadcastDispatcher, mDevicePolicyManager, mIBatteryStats); mController.setIndicationArea(mIndicationArea); mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager); clearInvocations(mIBatteryStats); verify(mDisclosure).getAlpha(); } @Test Loading Loading @@ -214,6 +239,106 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mContext.getColor(R.color.misalignment_text_color)); } @Test public void disclosure_unmanaged() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); createController(); verify(mDisclosure).setVisibility(View.GONE); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_managedNoOwnerName() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); createController(); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_hiddenWhenDozing() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); createController(); mController.setVisible(true); mController.onDozeAmountChanged(1, 1); mController.setDozing(true); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).setAlpha(0f); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_visibleWhenDozing() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); createController(); mController.setVisible(true); mController.onDozeAmountChanged(0, 0); mController.setDozing(false); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).setAlpha(1f); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_managedOwnerName() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(ORGANIZATION_NAME); createController(); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(mDisclosureWithOrganization); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_updateOnTheFly() { ArgumentCaptor<BroadcastReceiver> receiver = ArgumentCaptor.forClass( BroadcastReceiver.class); doNothing().when(mBroadcastDispatcher).registerReceiver(receiver.capture(), any()); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); createController(); final KeyguardUpdateMonitorCallback monitor = mController.getKeyguardCallback(); reset(mDisclosure); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); receiver.getValue().onReceive(mContext, new Intent()); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); reset(mDisclosure); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(ORGANIZATION_NAME); receiver.getValue().onReceive(mContext, new Intent()); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(mDisclosureWithOrganization); verifyNoMoreInteractions(mDisclosure); reset(mDisclosure); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); receiver.getValue().onReceive(mContext, new Intent()); verify(mDisclosure).setVisibility(View.GONE); verifyNoMoreInteractions(mDisclosure); } @Test public void transientIndication_holdsWakeLock_whenDozing() { createController(); Loading Loading
packages/SystemUI/res-keyguard/values/styles.xml +1 −1 Original line number Diff line number Diff line Loading @@ -129,7 +129,7 @@ </style> <style name="TextAppearance.Keyguard.BottomArea"> <item name="android:textSize">16sp</item> <item name="android:textSize">14sp</item> <item name="android:maxLines">1</item> <item name="android:textColor">?attr/wallpaperTextColor</item> <item name="android:shadowColor">@color/keyguard_shadow_color</item> Loading
packages/SystemUI/res/layout/keyguard_bottom_area.xml +11 −0 Original line number Diff line number Diff line Loading @@ -42,6 +42,17 @@ android:textAppearance="@style/TextAppearance.Keyguard.BottomArea" android:accessibilityLiveRegion="polite"/> <com.android.systemui.statusbar.phone.KeyguardIndicationTextView android:id="@+id/keyguard_indication_enterprise_disclosure" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:paddingStart="@dimen/keyguard_indication_text_padding" android:paddingEnd="@dimen/keyguard_indication_text_padding" android:textAppearance="@style/TextAppearance.Keyguard.BottomArea" android:alpha=".54" android:visibility="gone"/> </LinearLayout> <FrameLayout Loading
packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +53 −0 Original line number Diff line number Diff line Loading @@ -16,9 +16,15 @@ package com.android.systemui.statusbar; import static com.android.systemui.DejankUtils.whitelistIpcs; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.ColorStateList; import android.graphics.Color; import android.hardware.biometrics.BiometricSourceType; Loading @@ -43,6 +49,7 @@ import com.android.settingslib.Utils; import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.systemui.Interpolators; import com.android.systemui.R; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.plugins.statusbar.StatusBarStateController.StateListener; Loading Loading @@ -78,15 +85,19 @@ public class KeyguardIndicationController implements StateListener, private static final float BOUNCE_ANIMATION_FINAL_Y = 0f; private final Context mContext; private final BroadcastDispatcher mBroadcastDispatcher; private final KeyguardStateController mKeyguardStateController; private final StatusBarStateController mStatusBarStateController; private final KeyguardUpdateMonitor mKeyguardUpdateMonitor; private ViewGroup mIndicationArea; private KeyguardIndicationTextView mTextView; private KeyguardIndicationTextView mDisclosure; private final IBatteryStats mBatteryInfo; private final SettableWakeLock mWakeLock; private final DockManager mDockManager; private final DevicePolicyManager mDevicePolicyManager; private BroadcastReceiver mBroadcastReceiver; private LockscreenLockIconController mLockIconController; private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; Loading @@ -105,6 +116,7 @@ public class KeyguardIndicationController implements StateListener, private int mChargingWattage; private int mBatteryLevel; private long mChargingTimeRemaining; private float mDisclosureMaxAlpha; private String mMessageToShowOnScreenOn; private KeyguardUpdateMonitorCallback mUpdateMonitorCallback; Loading @@ -128,8 +140,12 @@ public class KeyguardIndicationController implements StateListener, StatusBarStateController statusBarStateController, KeyguardUpdateMonitor keyguardUpdateMonitor, DockManager dockManager, BroadcastDispatcher broadcastDispatcher, DevicePolicyManager devicePolicyManager, IBatteryStats iBatteryStats) { mContext = context; mBroadcastDispatcher = broadcastDispatcher; mDevicePolicyManager = devicePolicyManager; mKeyguardStateController = keyguardStateController; mStatusBarStateController = statusBarStateController; mKeyguardUpdateMonitor = keyguardUpdateMonitor; Loading @@ -151,7 +167,22 @@ public class KeyguardIndicationController implements StateListener, mTextView = indicationArea.findViewById(R.id.keyguard_indication_text); mInitialTextColorState = mTextView != null ? mTextView.getTextColors() : ColorStateList.valueOf(Color.WHITE); mDisclosure = indicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure); mDisclosureMaxAlpha = mDisclosure.getAlpha(); updateIndication(false /* animate */); updateDisclosure(); if (mBroadcastReceiver == null) { // Update the disclosure proactively to avoid IPC on the critical path. mBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { updateDisclosure(); } }; mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, new IntentFilter( DevicePolicyManager.ACTION_DEVICE_POLICY_MANAGER_STATE_CHANGED)); } } public void setLockIconController(LockscreenLockIconController lockIconController) { Loading Loading @@ -190,6 +221,23 @@ public class KeyguardIndicationController implements StateListener, return mUpdateMonitorCallback; } private void updateDisclosure() { // NOTE: Because this uses IPC, avoid calling updateDisclosure() on a critical path. if (whitelistIpcs(mDevicePolicyManager::isDeviceManaged)) { final CharSequence organizationName = mDevicePolicyManager.getDeviceOwnerOrganizationName(); if (organizationName != null) { mDisclosure.switchIndication(mContext.getResources().getString( R.string.do_disclosure_with_name, organizationName)); } else { mDisclosure.switchIndication(R.string.do_disclosure_generic); } mDisclosure.setVisibility(View.VISIBLE); } else { mDisclosure.setVisibility(View.GONE); } } public void setVisible(boolean visible) { mVisible = visible; mIndicationArea.setVisibility(visible ? View.VISIBLE : View.GONE); Loading Loading @@ -573,6 +621,11 @@ public class KeyguardIndicationController implements StateListener, setDozing(isDozing); } @Override public void onDozeAmountChanged(float linear, float eased) { mDisclosure.setAlpha((1 - linear) * mDisclosureMaxAlpha); } @Override public void onUnlockedChanged() { updateIndication(!mDozing); Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +6 −0 Original line number Diff line number Diff line Loading @@ -125,6 +125,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private KeyguardAffordanceView mRightAffordanceView; private KeyguardAffordanceView mLeftAffordanceView; private ViewGroup mIndicationArea; private TextView mEnterpriseDisclosure; private TextView mIndicationText; private ViewGroup mPreviewContainer; private ViewGroup mOverlayContainer; Loading Loading @@ -238,6 +239,8 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL mRightAffordanceView = findViewById(R.id.camera_button); mLeftAffordanceView = findViewById(R.id.left_button); mIndicationArea = findViewById(R.id.keyguard_indication_area); mEnterpriseDisclosure = findViewById( R.id.keyguard_indication_enterprise_disclosure); mIndicationText = findViewById(R.id.keyguard_indication_text); mIndicationBottomMargin = getResources().getDimensionPixelSize( R.dimen.keyguard_indication_margin_bottom); Loading Loading @@ -315,6 +318,9 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } // Respect font size setting. mEnterpriseDisclosure.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize( com.android.internal.R.dimen.text_size_small_material)); mIndicationText.setTextSize(TypedValue.COMPLEX_UNIT_PX, getResources().getDimensionPixelSize( com.android.internal.R.dimen.text_size_small_material)); Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +126 −1 Original line number Diff line number Diff line Loading @@ -25,17 +25,21 @@ import static org.mockito.ArgumentMatchers.anyBoolean; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doNothing; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.reset; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.verifyNoMoreInteractions; import static org.mockito.Mockito.when; import android.app.Instrumentation; import android.app.admin.DevicePolicyManager; import android.app.trust.TrustManager; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.graphics.Color; import android.hardware.biometrics.BiometricSourceType; import android.hardware.face.FaceManager; Loading @@ -44,6 +48,7 @@ import android.os.BatteryManager; import android.os.Looper; import android.os.RemoteException; import android.os.UserManager; import android.view.View; import android.view.ViewGroup; import androidx.test.InstrumentationRegistry; Loading @@ -52,13 +57,16 @@ import androidx.test.runner.AndroidJUnit4; import com.android.internal.app.IBatteryStats; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.keyguard.KeyguardUpdateMonitorCallback; import com.android.settingslib.Utils; import com.android.settingslib.fuelgauge.BatteryStatus; import com.android.systemui.R; import com.android.systemui.SysuiTestCase; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dock.DockManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.KeyguardStateController; import com.android.systemui.util.wakelock.WakeLockFake; Loading @@ -75,6 +83,10 @@ import org.mockito.MockitoAnnotations; @RunWith(AndroidJUnit4.class) public class KeyguardIndicationControllerTest extends SysuiTestCase { private static final String ORGANIZATION_NAME = "organization"; private String mDisclosureWithOrganization; @Mock private DevicePolicyManager mDevicePolicyManager; @Mock Loading @@ -82,6 +94,12 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private KeyguardStateController mKeyguardStateController; @Mock private KeyguardIndicationTextView mDisclosure; @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private LockIcon mLockIcon; @Mock private StatusBarStateController mStatusBarStateController; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; Loading Loading @@ -112,11 +130,17 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mContext.addMockSystemService(UserManager.class, mUserManager); mContext.addMockSystemService(Context.TRUST_SERVICE, mock(TrustManager.class)); mContext.addMockSystemService(Context.FINGERPRINT_SERVICE, mock(FingerprintManager.class)); mDisclosureWithOrganization = mContext.getString(R.string.do_disclosure_with_name, ORGANIZATION_NAME); when(mKeyguardUpdateMonitor.isUnlockingWithBiometricAllowed(anyBoolean())).thenReturn(true); when(mKeyguardUpdateMonitor.isScreenOn()).thenReturn(true); when(mKeyguardUpdateMonitor.isUserUnlocked(anyInt())).thenReturn(true); when(mIndicationArea.findViewById(R.id.keyguard_indication_enterprise_disclosure)) .thenReturn(mDisclosure); when(mIndicationArea.findViewById(R.id.keyguard_indication_text)).thenReturn(mTextView); when(mDisclosure.getAlpha()).thenReturn(1f); mWakeLock = new WakeLockFake(); mWakeLockBuilder = new WakeLockFake.Builder(mContext); Loading @@ -130,10 +154,11 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mController = new KeyguardIndicationController(mContext, mWakeLockBuilder, mKeyguardStateController, mStatusBarStateController, mKeyguardUpdateMonitor, mDockManager, mIBatteryStats); mDockManager, mBroadcastDispatcher, mDevicePolicyManager, mIBatteryStats); mController.setIndicationArea(mIndicationArea); mController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager); clearInvocations(mIBatteryStats); verify(mDisclosure).getAlpha(); } @Test Loading Loading @@ -214,6 +239,106 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { mContext.getColor(R.color.misalignment_text_color)); } @Test public void disclosure_unmanaged() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); createController(); verify(mDisclosure).setVisibility(View.GONE); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_managedNoOwnerName() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); createController(); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_hiddenWhenDozing() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); createController(); mController.setVisible(true); mController.onDozeAmountChanged(1, 1); mController.setDozing(true); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).setAlpha(0f); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_visibleWhenDozing() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); createController(); mController.setVisible(true); mController.onDozeAmountChanged(0, 0); mController.setDozing(false); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).setAlpha(1f); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_managedOwnerName() { when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(ORGANIZATION_NAME); createController(); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(mDisclosureWithOrganization); verifyNoMoreInteractions(mDisclosure); } @Test public void disclosure_updateOnTheFly() { ArgumentCaptor<BroadcastReceiver> receiver = ArgumentCaptor.forClass( BroadcastReceiver.class); doNothing().when(mBroadcastDispatcher).registerReceiver(receiver.capture(), any()); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); createController(); final KeyguardUpdateMonitorCallback monitor = mController.getKeyguardCallback(); reset(mDisclosure); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(null); receiver.getValue().onReceive(mContext, new Intent()); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(R.string.do_disclosure_generic); verifyNoMoreInteractions(mDisclosure); reset(mDisclosure); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(true); when(mDevicePolicyManager.getDeviceOwnerOrganizationName()).thenReturn(ORGANIZATION_NAME); receiver.getValue().onReceive(mContext, new Intent()); verify(mDisclosure).setVisibility(View.VISIBLE); verify(mDisclosure).switchIndication(mDisclosureWithOrganization); verifyNoMoreInteractions(mDisclosure); reset(mDisclosure); when(mDevicePolicyManager.isDeviceManaged()).thenReturn(false); receiver.getValue().onReceive(mContext, new Intent()); verify(mDisclosure).setVisibility(View.GONE); verifyNoMoreInteractions(mDisclosure); } @Test public void transientIndication_holdsWakeLock_whenDozing() { createController(); Loading