Merge "Update all persistent kg messages when kg is shown"

This commit is contained in:
Beverly Tai
2022-01-18 21:43:56 +00:00
committed by Android (Google) Code Review
3 changed files with 56 additions and 74 deletions

View File

@@ -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);

View File

@@ -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());
}
}
};

View File

@@ -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());
}