Update all persistent kg messages when kg is shown
We only want to remove all transient messages from being shown the next time the keyguard shows. Cleanup so unused code. Fixes: 214551067 Test: atest KeyguardIndicationControllerTest KeyguardIndicationRotateTextViewControllerTest Change-Id: I0a7c1dfafa49f6f3967d62e1d233a5cedf7f2497
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
@@ -230,6 +229,7 @@ public class KeyguardIndicationRotateTextViewController extends
|
||||
public void clearMessages() {
|
||||
mCurrIndicationType = INDICATION_TYPE_NONE;
|
||||
mIndicationQueue.clear();
|
||||
mIndicationMessages.clear();
|
||||
mView.clearMessages();
|
||||
}
|
||||
|
||||
@@ -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));
|
||||
}
|
||||
}
|
||||
};
|
||||
@@ -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);
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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();
|
||||
@@ -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);
|
||||
@@ -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(
|
||||
@@ -335,8 +337,6 @@ public class KeyguardIndicationController {
|
||||
} else {
|
||||
mRotateTextViewController.hideIndication(INDICATION_TYPE_DISCLOSURE);
|
||||
}
|
||||
|
||||
updateResting();
|
||||
}
|
||||
|
||||
private CharSequence getDisclosureText(@Nullable CharSequence organizationName) {
|
||||
@@ -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) {
|
||||
@@ -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());
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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;
|
||||
@@ -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());
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user