Merge "Don't animate clock when turning screen off." into qt-dev
This commit is contained in:
@@ -540,6 +540,9 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
@Override
|
||||
public Animator onAppear(ViewGroup sceneRoot, View view, TransitionValues startValues,
|
||||
TransitionValues endValues) {
|
||||
if (!sceneRoot.isShown()) {
|
||||
return null;
|
||||
}
|
||||
final float cutoff = mCutoff;
|
||||
final int startVisibility = View.INVISIBLE;
|
||||
final int endVisibility = (int) endValues.values.get(PROPNAME_VISIBILITY);
|
||||
@@ -552,6 +555,9 @@ public class KeyguardClockSwitch extends RelativeLayout {
|
||||
@Override
|
||||
public Animator onDisappear(ViewGroup sceneRoot, View view, TransitionValues startValues,
|
||||
TransitionValues endValues) {
|
||||
if (!sceneRoot.isShown()) {
|
||||
return null;
|
||||
}
|
||||
final float cutoff = 1f - mCutoff;
|
||||
final int startVisibility = View.VISIBLE;
|
||||
final int endVisibility = (int) endValues.values.get(PROPNAME_VISIBILITY);
|
||||
|
||||
@@ -89,6 +89,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
|
||||
private final HashMap<View, PendingIntent> mClickActions;
|
||||
private final ActivityStarter mActivityStarter;
|
||||
private final ConfigurationController mConfigurationController;
|
||||
private final LayoutTransition mLayoutTransition;
|
||||
private Uri mKeyguardSliceUri;
|
||||
@VisibleForTesting
|
||||
TextView mTitle;
|
||||
@@ -126,16 +127,16 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
|
||||
mActivityStarter = activityStarter;
|
||||
mConfigurationController = configurationController;
|
||||
|
||||
LayoutTransition transition = new LayoutTransition();
|
||||
transition.setStagger(LayoutTransition.CHANGE_APPEARING, DEFAULT_ANIM_DURATION / 2);
|
||||
transition.setDuration(LayoutTransition.APPEARING, DEFAULT_ANIM_DURATION);
|
||||
transition.setDuration(LayoutTransition.DISAPPEARING, DEFAULT_ANIM_DURATION / 2);
|
||||
transition.disableTransitionType(LayoutTransition.CHANGE_APPEARING);
|
||||
transition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
|
||||
transition.setInterpolator(LayoutTransition.APPEARING, Interpolators.FAST_OUT_SLOW_IN);
|
||||
transition.setInterpolator(LayoutTransition.DISAPPEARING, Interpolators.ALPHA_OUT);
|
||||
transition.setAnimateParentHierarchy(false);
|
||||
setLayoutTransition(transition);
|
||||
mLayoutTransition = new LayoutTransition();
|
||||
mLayoutTransition.setStagger(LayoutTransition.CHANGE_APPEARING, DEFAULT_ANIM_DURATION / 2);
|
||||
mLayoutTransition.setDuration(LayoutTransition.APPEARING, DEFAULT_ANIM_DURATION);
|
||||
mLayoutTransition.setDuration(LayoutTransition.DISAPPEARING, DEFAULT_ANIM_DURATION / 2);
|
||||
mLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_APPEARING);
|
||||
mLayoutTransition.disableTransitionType(LayoutTransition.CHANGE_DISAPPEARING);
|
||||
mLayoutTransition.setInterpolator(LayoutTransition.APPEARING,
|
||||
Interpolators.FAST_OUT_SLOW_IN);
|
||||
mLayoutTransition.setInterpolator(LayoutTransition.DISAPPEARING, Interpolators.ALPHA_OUT);
|
||||
mLayoutTransition.setAnimateParentHierarchy(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -174,6 +175,12 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
|
||||
mConfigurationController.removeCallback(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVisibilityAggregated(boolean isVisible) {
|
||||
super.onVisibilityAggregated(isVisible);
|
||||
setLayoutTransition(isVisible ? mLayoutTransition : null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns whether the current visible slice has a title/header.
|
||||
*/
|
||||
@@ -419,6 +426,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
|
||||
* their desired positions.
|
||||
*/
|
||||
private final Animation.AnimationListener mKeepAwakeListener;
|
||||
private LayoutTransition mLayoutTransition;
|
||||
private float mDarkAmount;
|
||||
|
||||
public Row(Context context) {
|
||||
@@ -440,33 +448,41 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
|
||||
|
||||
@Override
|
||||
protected void onFinishInflate() {
|
||||
LayoutTransition transition = new LayoutTransition();
|
||||
transition.setDuration(DEFAULT_ANIM_DURATION);
|
||||
mLayoutTransition = new LayoutTransition();
|
||||
mLayoutTransition.setDuration(DEFAULT_ANIM_DURATION);
|
||||
|
||||
PropertyValuesHolder left = PropertyValuesHolder.ofInt("left", 0, 1);
|
||||
PropertyValuesHolder right = PropertyValuesHolder.ofInt("right", 0, 1);
|
||||
ObjectAnimator changeAnimator = ObjectAnimator.ofPropertyValuesHolder((Object) null,
|
||||
left, right);
|
||||
transition.setAnimator(LayoutTransition.CHANGE_APPEARING, changeAnimator);
|
||||
transition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, changeAnimator);
|
||||
transition.setInterpolator(LayoutTransition.CHANGE_APPEARING,
|
||||
mLayoutTransition.setAnimator(LayoutTransition.CHANGE_APPEARING, changeAnimator);
|
||||
mLayoutTransition.setAnimator(LayoutTransition.CHANGE_DISAPPEARING, changeAnimator);
|
||||
mLayoutTransition.setInterpolator(LayoutTransition.CHANGE_APPEARING,
|
||||
Interpolators.ACCELERATE_DECELERATE);
|
||||
transition.setInterpolator(LayoutTransition.CHANGE_DISAPPEARING,
|
||||
mLayoutTransition.setInterpolator(LayoutTransition.CHANGE_DISAPPEARING,
|
||||
Interpolators.ACCELERATE_DECELERATE);
|
||||
transition.setStartDelay(LayoutTransition.CHANGE_APPEARING, DEFAULT_ANIM_DURATION);
|
||||
transition.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, DEFAULT_ANIM_DURATION);
|
||||
mLayoutTransition.setStartDelay(LayoutTransition.CHANGE_APPEARING,
|
||||
DEFAULT_ANIM_DURATION);
|
||||
mLayoutTransition.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING,
|
||||
DEFAULT_ANIM_DURATION);
|
||||
|
||||
ObjectAnimator appearAnimator = ObjectAnimator.ofFloat(null, "alpha", 0f, 1f);
|
||||
transition.setAnimator(LayoutTransition.APPEARING, appearAnimator);
|
||||
transition.setInterpolator(LayoutTransition.APPEARING, Interpolators.ALPHA_IN);
|
||||
mLayoutTransition.setAnimator(LayoutTransition.APPEARING, appearAnimator);
|
||||
mLayoutTransition.setInterpolator(LayoutTransition.APPEARING, Interpolators.ALPHA_IN);
|
||||
|
||||
ObjectAnimator disappearAnimator = ObjectAnimator.ofFloat(null, "alpha", 1f, 0f);
|
||||
transition.setInterpolator(LayoutTransition.DISAPPEARING, Interpolators.ALPHA_OUT);
|
||||
transition.setDuration(LayoutTransition.DISAPPEARING, DEFAULT_ANIM_DURATION / 4);
|
||||
transition.setAnimator(LayoutTransition.DISAPPEARING, disappearAnimator);
|
||||
mLayoutTransition.setInterpolator(LayoutTransition.DISAPPEARING,
|
||||
Interpolators.ALPHA_OUT);
|
||||
mLayoutTransition.setDuration(LayoutTransition.DISAPPEARING, DEFAULT_ANIM_DURATION / 4);
|
||||
mLayoutTransition.setAnimator(LayoutTransition.DISAPPEARING, disappearAnimator);
|
||||
|
||||
transition.setAnimateParentHierarchy(false);
|
||||
setLayoutTransition(transition);
|
||||
mLayoutTransition.setAnimateParentHierarchy(false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onVisibilityAggregated(boolean isVisible) {
|
||||
super.onVisibilityAggregated(isVisible);
|
||||
setLayoutTransition(isVisible ? mLayoutTransition : null);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -52,6 +52,7 @@ import com.android.keyguard.KeyguardUpdateMonitorCallback;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.policy.NextAlarmController;
|
||||
import com.android.systemui.statusbar.policy.NextAlarmControllerImpl;
|
||||
import com.android.systemui.statusbar.policy.ZenModeController;
|
||||
@@ -125,6 +126,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||
private CharSequence mMediaTitle;
|
||||
private CharSequence mMediaArtist;
|
||||
protected boolean mDozing;
|
||||
private int mStatusBarState;
|
||||
private boolean mMediaIsVisible;
|
||||
|
||||
/**
|
||||
@@ -227,7 +229,10 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||
}
|
||||
|
||||
protected boolean needsMediaLocked() {
|
||||
return !TextUtils.isEmpty(mMediaTitle) && mMediaIsVisible && mDozing;
|
||||
// Show header if music is playing and the status bar is in the shade state. This way, an
|
||||
// animation isn't necessary when pressing power and transitioning to AOD.
|
||||
boolean keepWhenShade = mStatusBarState == StatusBarState.SHADE && mMediaIsVisible;
|
||||
return !TextUtils.isEmpty(mMediaTitle) && mMediaIsVisible && (mDozing || keepWhenShade);
|
||||
}
|
||||
|
||||
protected void addMediaLocked(ListBuilder listBuilder) {
|
||||
@@ -454,7 +459,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||
synchronized (this) {
|
||||
boolean nextVisible = !mMediaInvisibleStates.contains(state);
|
||||
mHandler.removeCallbacksAndMessages(mMediaToken);
|
||||
if (mMediaIsVisible && !nextVisible) {
|
||||
if (mMediaIsVisible && !nextVisible && mStatusBarState != StatusBarState.SHADE) {
|
||||
// We need to delay this event for a few millis when stopping to avoid jank in the
|
||||
// animation. The media app might not send its update when buffering, and the slice
|
||||
// would end up without a header for 0.5 second.
|
||||
@@ -511,5 +516,14 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||
|
||||
@Override
|
||||
public void onStateChanged(int newState) {
|
||||
final boolean notify;
|
||||
synchronized (this) {
|
||||
boolean needsMedia = needsMediaLocked();
|
||||
mStatusBarState = newState;
|
||||
notify = needsMedia != needsMediaLocked();
|
||||
}
|
||||
if (notify) {
|
||||
notifyChange();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -48,6 +48,7 @@ import com.android.keyguard.KeyguardUpdateMonitor;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.plugins.statusbar.StatusBarStateController;
|
||||
import com.android.systemui.statusbar.NotificationMediaManager;
|
||||
import com.android.systemui.statusbar.StatusBarState;
|
||||
import com.android.systemui.statusbar.policy.ZenModeController;
|
||||
import com.android.systemui.util.wakelock.SettableWakeLock;
|
||||
|
||||
@@ -177,6 +178,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void onMetadataChanged_updatesSlice() {
|
||||
mProvider.onStateChanged(StatusBarState.KEYGUARD);
|
||||
mProvider.onDozingChanged(true);
|
||||
reset(mContentResolver);
|
||||
mProvider.onMetadataOrStateChanged(mock(MediaMetadata.class), PlaybackState.STATE_PLAYING);
|
||||
@@ -190,6 +192,7 @@ public class KeyguardSliceProviderTest extends SysuiTestCase {
|
||||
|
||||
@Test
|
||||
public void onDozingChanged_updatesSliceIfMedia() {
|
||||
mProvider.onStateChanged(StatusBarState.KEYGUARD);
|
||||
mProvider.onMetadataOrStateChanged(mock(MediaMetadata.class), PlaybackState.STATE_PLAYING);
|
||||
reset(mContentResolver);
|
||||
// Show media when dozing
|
||||
|
||||
Reference in New Issue
Block a user