Loading packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java +6 −6 Original line number Diff line number Diff line Loading @@ -119,14 +119,13 @@ public class KeyguardIndicationRotateTextViewController extends return; } long minShowDuration = getMinVisibilityMillis(mIndicationMessages.get(mCurrIndicationType)); final boolean hasPreviousIndication = mIndicationMessages.get(type) != null && !TextUtils.isEmpty(mIndicationMessages.get(type).getMessage()); final boolean hasNewIndication = newIndication != null; final boolean hasNewIndication = newIndication != null && !TextUtils.isEmpty(newIndication.getMessage()); if (!hasNewIndication) { mIndicationMessages.remove(type); mIndicationQueue.removeIf(x -> x == type); } else { if (!hasPreviousIndication) { if (!mIndicationQueue.contains(type)) { mIndicationQueue.add(type); } Loading Loading @@ -230,6 +229,7 @@ public class KeyguardIndicationRotateTextViewController extends public void clearMessages() { mCurrIndicationType = INDICATION_TYPE_NONE; mIndicationQueue.clear(); mIndicationMessages.clear(); mView.clearMessages(); } Loading Loading @@ -310,7 +310,7 @@ public class KeyguardIndicationRotateTextViewController extends if (mIsDozing) { showIndication(INDICATION_TYPE_NONE); } else if (mIndicationQueue.size() > 0) { showIndication(mIndicationQueue.remove(0)); showIndication(mIndicationQueue.get(0)); } } }; Loading @@ -327,7 +327,7 @@ public class KeyguardIndicationRotateTextViewController extends ShowNextIndication(long delay) { mShowIndicationRunnable = () -> { int type = mIndicationQueue.size() == 0 ? INDICATION_TYPE_NONE : mIndicationQueue.remove(0); ? INDICATION_TYPE_NONE : mIndicationQueue.get(0); showIndication(type); }; mCancelDelayedRunnable = mExecutor.executeDelayed(mShowIndicationRunnable, delay); Loading packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +14 −65 Original line number Diff line number Diff line Loading @@ -34,8 +34,6 @@ import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewCont import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_ON; import static com.android.systemui.plugins.FalsingManager.LOW_PENALTY; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.IActivityManager; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; Loading Loading @@ -72,7 +70,6 @@ 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.animation.Interpolators; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; Loading Loading @@ -149,6 +146,7 @@ public class KeyguardIndicationController { private CharSequence mBiometricMessage; protected ColorStateList mInitialTextColorState; private boolean mVisible; private boolean mOrganizationOwnedDevice; private boolean mPowerPluggedIn; private boolean mPowerPluggedInWired; Loading Loading @@ -256,13 +254,13 @@ public class KeyguardIndicationController { mExecutor, mStatusBarStateController); updateIndication(false /* animate */); updateDisclosure(); updateOrganizedOwnedDevice(); 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(); updateOrganizedOwnedDevice(); } }; IntentFilter intentFilter = new IntentFilter(); Loading Loading @@ -305,12 +303,11 @@ public class KeyguardIndicationController { } /** * Doesn't include disclosure (also a persistent indication) which gets triggered separately. * * This method also doesn't update transient messages like biometrics since those messages * are also updated separately. */ private void updatePersistentIndications(boolean animate, int userId) { updateDisclosure(); updateOwnerInfo(); updateBattery(animate); updateUserLocked(userId); Loading @@ -320,9 +317,14 @@ public class KeyguardIndicationController { updateResting(); } private void updateDisclosure() { private void updateOrganizedOwnedDevice() { // avoid calling this method since it has an IPC if (whitelistIpcs(this::isOrganizationOwnedDevice)) { mOrganizationOwnedDevice = whitelistIpcs(this::isOrganizationOwnedDevice); updatePersistentIndications(false, KeyguardUpdateMonitor.getCurrentUser()); } private void updateDisclosure() { if (mOrganizationOwnedDevice) { final CharSequence organizationName = getOrganizationOwnedDeviceOrganizationName(); final CharSequence disclosure = getDisclosureText(organizationName); mRotateTextViewController.updateIndication( Loading @@ -335,8 +337,6 @@ public class KeyguardIndicationController { } else { mRotateTextViewController.hideIndication(INDICATION_TYPE_DISCLOSURE); } updateResting(); } private CharSequence getDisclosureText(@Nullable CharSequence organizationName) { Loading Loading @@ -753,60 +753,6 @@ public class KeyguardIndicationController { updatePersistentIndications(animate, KeyguardUpdateMonitor.getCurrentUser()); } // animates textView - textView moves up and bounces down private void animateText(KeyguardIndicationTextView textView, String indication) { int yTranslation = mContext.getResources().getInteger( R.integer.wired_charging_keyguard_text_animation_distance); int animateUpDuration = mContext.getResources().getInteger( R.integer.wired_charging_keyguard_text_animation_duration_up); int animateDownDuration = mContext.getResources().getInteger( R.integer.wired_charging_keyguard_text_animation_duration_down); textView.animate().cancel(); ViewClippingUtil.setClippingDeactivated(textView, true, mClippingParams); textView.animate() .translationYBy(yTranslation) .setInterpolator(Interpolators.LINEAR) .setDuration(animateUpDuration) .setListener(new AnimatorListenerAdapter() { private boolean mCancelled; @Override public void onAnimationStart(Animator animation) { textView.switchIndication(indication, null); } @Override public void onAnimationCancel(Animator animation) { textView.setTranslationY(BOUNCE_ANIMATION_FINAL_Y); mCancelled = true; } @Override public void onAnimationEnd(Animator animation) { if (mCancelled) { ViewClippingUtil.setClippingDeactivated(textView, false, mClippingParams); return; } textView.animate() .setDuration(animateDownDuration) .setInterpolator(Interpolators.BOUNCE) .translationY(BOUNCE_ANIMATION_FINAL_Y) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { textView.setTranslationY(BOUNCE_ANIMATION_FINAL_Y); ViewClippingUtil.setClippingDeactivated(textView, false, mClippingParams); // Unset the listener, otherwise this may persist for // another view property animation textView.animate().setListener(null); } }); } }); } protected String computePowerIndication() { int chargingId; if (mBatteryOverheated) { Loading Loading @@ -1182,9 +1128,12 @@ public class KeyguardIndicationController { @Override public void onKeyguardShowingChanged() { // All transient messages are gone the next time keyguard is shown if (!mKeyguardStateController.isShowing()) { mTopIndicationView.clearMessages(); mRotateTextViewController.clearMessages(); } else { updatePersistentIndications(false, KeyguardUpdateMonitor.getCurrentUser()); } } }; Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +36 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewCont import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BIOMETRIC_MESSAGE; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_DISCLOSURE; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_LOGOUT; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_OWNER_INFO; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_RESTING; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_TRANSIENT; Loading Loading @@ -86,7 +87,6 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.KeyguardBypassController; 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.concurrency.FakeExecutor; Loading Loading @@ -132,8 +132,6 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private LockIcon mLockIcon; @Mock private StatusBarStateController mStatusBarStateController; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; Loading Loading @@ -738,6 +736,41 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { verifyHideIndication(INDICATION_TYPE_OWNER_INFO); } @Test public void testOnKeyguardShowingChanged_notShowing_resetsMessages() { createController(); // GIVEN keyguard isn't showing when(mKeyguardStateController.isShowing()).thenReturn(false); // WHEN keyguard showing changed called mKeyguardStateControllerCallback.onKeyguardShowingChanged(); // THEN messages are reset verify(mRotateTextViewController).clearMessages(); assertThat(mTextView.getText()).isEqualTo(""); } @Test public void testOnKeyguardShowingChanged_showing_updatesPersistentMessages() { createController(); // GIVEN keyguard is showing when(mKeyguardStateController.isShowing()).thenReturn(true); // WHEN keyguard showing changed called mKeyguardStateControllerCallback.onKeyguardShowingChanged(); // THEN persistent messages are updated (in this case, most messages are hidden since // no info is provided) - verify that this happens verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_DISCLOSURE); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_OWNER_INFO); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_BATTERY); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_TRUST); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_ALIGNMENT); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_LOGOUT); } private void sendUpdateDisclosureBroadcast() { mBroadcastReceiver.onReceive(mContext, new Intent()); } Loading Loading
packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java +6 −6 Original line number Diff line number Diff line Loading @@ -119,14 +119,13 @@ public class KeyguardIndicationRotateTextViewController extends return; } long minShowDuration = getMinVisibilityMillis(mIndicationMessages.get(mCurrIndicationType)); final boolean hasPreviousIndication = mIndicationMessages.get(type) != null && !TextUtils.isEmpty(mIndicationMessages.get(type).getMessage()); final boolean hasNewIndication = newIndication != null; final boolean hasNewIndication = newIndication != null && !TextUtils.isEmpty(newIndication.getMessage()); if (!hasNewIndication) { mIndicationMessages.remove(type); mIndicationQueue.removeIf(x -> x == type); } else { if (!hasPreviousIndication) { if (!mIndicationQueue.contains(type)) { mIndicationQueue.add(type); } Loading Loading @@ -230,6 +229,7 @@ public class KeyguardIndicationRotateTextViewController extends public void clearMessages() { mCurrIndicationType = INDICATION_TYPE_NONE; mIndicationQueue.clear(); mIndicationMessages.clear(); mView.clearMessages(); } Loading Loading @@ -310,7 +310,7 @@ public class KeyguardIndicationRotateTextViewController extends if (mIsDozing) { showIndication(INDICATION_TYPE_NONE); } else if (mIndicationQueue.size() > 0) { showIndication(mIndicationQueue.remove(0)); showIndication(mIndicationQueue.get(0)); } } }; Loading @@ -327,7 +327,7 @@ public class KeyguardIndicationRotateTextViewController extends ShowNextIndication(long delay) { mShowIndicationRunnable = () -> { int type = mIndicationQueue.size() == 0 ? INDICATION_TYPE_NONE : mIndicationQueue.remove(0); ? INDICATION_TYPE_NONE : mIndicationQueue.get(0); showIndication(type); }; mCancelDelayedRunnable = mExecutor.executeDelayed(mShowIndicationRunnable, delay); Loading
packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +14 −65 Original line number Diff line number Diff line Loading @@ -34,8 +34,6 @@ import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewCont import static com.android.systemui.keyguard.ScreenLifecycle.SCREEN_ON; import static com.android.systemui.plugins.FalsingManager.LOW_PENALTY; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.app.IActivityManager; import android.app.admin.DevicePolicyManager; import android.content.BroadcastReceiver; Loading Loading @@ -72,7 +70,6 @@ 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.animation.Interpolators; import com.android.systemui.broadcast.BroadcastDispatcher; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dagger.qualifiers.Main; Loading Loading @@ -149,6 +146,7 @@ public class KeyguardIndicationController { private CharSequence mBiometricMessage; protected ColorStateList mInitialTextColorState; private boolean mVisible; private boolean mOrganizationOwnedDevice; private boolean mPowerPluggedIn; private boolean mPowerPluggedInWired; Loading Loading @@ -256,13 +254,13 @@ public class KeyguardIndicationController { mExecutor, mStatusBarStateController); updateIndication(false /* animate */); updateDisclosure(); updateOrganizedOwnedDevice(); 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(); updateOrganizedOwnedDevice(); } }; IntentFilter intentFilter = new IntentFilter(); Loading Loading @@ -305,12 +303,11 @@ public class KeyguardIndicationController { } /** * Doesn't include disclosure (also a persistent indication) which gets triggered separately. * * This method also doesn't update transient messages like biometrics since those messages * are also updated separately. */ private void updatePersistentIndications(boolean animate, int userId) { updateDisclosure(); updateOwnerInfo(); updateBattery(animate); updateUserLocked(userId); Loading @@ -320,9 +317,14 @@ public class KeyguardIndicationController { updateResting(); } private void updateDisclosure() { private void updateOrganizedOwnedDevice() { // avoid calling this method since it has an IPC if (whitelistIpcs(this::isOrganizationOwnedDevice)) { mOrganizationOwnedDevice = whitelistIpcs(this::isOrganizationOwnedDevice); updatePersistentIndications(false, KeyguardUpdateMonitor.getCurrentUser()); } private void updateDisclosure() { if (mOrganizationOwnedDevice) { final CharSequence organizationName = getOrganizationOwnedDeviceOrganizationName(); final CharSequence disclosure = getDisclosureText(organizationName); mRotateTextViewController.updateIndication( Loading @@ -335,8 +337,6 @@ public class KeyguardIndicationController { } else { mRotateTextViewController.hideIndication(INDICATION_TYPE_DISCLOSURE); } updateResting(); } private CharSequence getDisclosureText(@Nullable CharSequence organizationName) { Loading Loading @@ -753,60 +753,6 @@ public class KeyguardIndicationController { updatePersistentIndications(animate, KeyguardUpdateMonitor.getCurrentUser()); } // animates textView - textView moves up and bounces down private void animateText(KeyguardIndicationTextView textView, String indication) { int yTranslation = mContext.getResources().getInteger( R.integer.wired_charging_keyguard_text_animation_distance); int animateUpDuration = mContext.getResources().getInteger( R.integer.wired_charging_keyguard_text_animation_duration_up); int animateDownDuration = mContext.getResources().getInteger( R.integer.wired_charging_keyguard_text_animation_duration_down); textView.animate().cancel(); ViewClippingUtil.setClippingDeactivated(textView, true, mClippingParams); textView.animate() .translationYBy(yTranslation) .setInterpolator(Interpolators.LINEAR) .setDuration(animateUpDuration) .setListener(new AnimatorListenerAdapter() { private boolean mCancelled; @Override public void onAnimationStart(Animator animation) { textView.switchIndication(indication, null); } @Override public void onAnimationCancel(Animator animation) { textView.setTranslationY(BOUNCE_ANIMATION_FINAL_Y); mCancelled = true; } @Override public void onAnimationEnd(Animator animation) { if (mCancelled) { ViewClippingUtil.setClippingDeactivated(textView, false, mClippingParams); return; } textView.animate() .setDuration(animateDownDuration) .setInterpolator(Interpolators.BOUNCE) .translationY(BOUNCE_ANIMATION_FINAL_Y) .setListener(new AnimatorListenerAdapter() { @Override public void onAnimationEnd(Animator animation) { textView.setTranslationY(BOUNCE_ANIMATION_FINAL_Y); ViewClippingUtil.setClippingDeactivated(textView, false, mClippingParams); // Unset the listener, otherwise this may persist for // another view property animation textView.animate().setListener(null); } }); } }); } protected String computePowerIndication() { int chargingId; if (mBatteryOverheated) { Loading Loading @@ -1182,9 +1128,12 @@ public class KeyguardIndicationController { @Override public void onKeyguardShowingChanged() { // All transient messages are gone the next time keyguard is shown if (!mKeyguardStateController.isShowing()) { mTopIndicationView.clearMessages(); mRotateTextViewController.clearMessages(); } else { updatePersistentIndications(false, KeyguardUpdateMonitor.getCurrentUser()); } } }; Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/KeyguardIndicationControllerTest.java +36 −3 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewCont import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BATTERY; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_BIOMETRIC_MESSAGE; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_DISCLOSURE; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_LOGOUT; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_OWNER_INFO; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_RESTING; import static com.android.systemui.keyguard.KeyguardIndicationRotateTextViewController.INDICATION_TYPE_TRANSIENT; Loading Loading @@ -86,7 +87,6 @@ import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.statusbar.StatusBarStateController; import com.android.systemui.statusbar.phone.KeyguardBypassController; 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.concurrency.FakeExecutor; Loading Loading @@ -132,8 +132,6 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { @Mock private BroadcastDispatcher mBroadcastDispatcher; @Mock private LockIcon mLockIcon; @Mock private StatusBarStateController mStatusBarStateController; @Mock private KeyguardUpdateMonitor mKeyguardUpdateMonitor; Loading Loading @@ -738,6 +736,41 @@ public class KeyguardIndicationControllerTest extends SysuiTestCase { verifyHideIndication(INDICATION_TYPE_OWNER_INFO); } @Test public void testOnKeyguardShowingChanged_notShowing_resetsMessages() { createController(); // GIVEN keyguard isn't showing when(mKeyguardStateController.isShowing()).thenReturn(false); // WHEN keyguard showing changed called mKeyguardStateControllerCallback.onKeyguardShowingChanged(); // THEN messages are reset verify(mRotateTextViewController).clearMessages(); assertThat(mTextView.getText()).isEqualTo(""); } @Test public void testOnKeyguardShowingChanged_showing_updatesPersistentMessages() { createController(); // GIVEN keyguard is showing when(mKeyguardStateController.isShowing()).thenReturn(true); // WHEN keyguard showing changed called mKeyguardStateControllerCallback.onKeyguardShowingChanged(); // THEN persistent messages are updated (in this case, most messages are hidden since // no info is provided) - verify that this happens verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_DISCLOSURE); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_OWNER_INFO); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_BATTERY); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_TRUST); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_ALIGNMENT); verify(mRotateTextViewController).hideIndication(INDICATION_TYPE_LOGOUT); } private void sendUpdateDisclosureBroadcast() { mBroadcastReceiver.onReceive(mContext, new Intent()); } Loading