am 7bcacc9c: Merge "Animations/success state for external confirm device credentials (1/2)" into mnc-dev

* commit '7bcacc9c6af19e429bc3681b1559844e5b8fa1ba':
  Animations/success state for external confirm device credentials (1/2)
This commit is contained in:
Jorim Jaggi
2015-06-11 01:32:22 +00:00
committed by Android Git Automerger
7 changed files with 78 additions and 24 deletions

View File

@@ -22,6 +22,9 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.settingslib.animation.DisappearAnimationUtils;
/** /**
* Displays a PIN pad for unlocking. * Displays a PIN pad for unlocking.
*/ */
@@ -115,7 +118,7 @@ public class KeyguardPINView extends KeyguardPinBasedInputView {
.setDuration(500) .setDuration(500)
.setInterpolator(mAppearAnimationUtils.getInterpolator()) .setInterpolator(mAppearAnimationUtils.getInterpolator())
.translationY(0); .translationY(0);
mAppearAnimationUtils.startAnimation(mViews, mAppearAnimationUtils.startAnimation2d(mViews,
new Runnable() { new Runnable() {
@Override @Override
public void run() { public void run() {
@@ -132,7 +135,7 @@ public class KeyguardPINView extends KeyguardPinBasedInputView {
.setDuration(280) .setDuration(280)
.setInterpolator(mDisappearAnimationUtils.getInterpolator()) .setInterpolator(mDisappearAnimationUtils.getInterpolator())
.translationY(mDisappearYTranslation); .translationY(mDisappearYTranslation);
mDisappearAnimationUtils.startAnimation(mViews, mDisappearAnimationUtils.startAnimation2d(mViews,
new Runnable() { new Runnable() {
@Override @Override
public void run() { public void run() {

View File

@@ -36,6 +36,9 @@ import android.widget.LinearLayout;
import com.android.internal.widget.LockPatternChecker; import com.android.internal.widget.LockPatternChecker;
import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternUtils;
import com.android.internal.widget.LockPatternView; import com.android.internal.widget.LockPatternView;
import com.android.settingslib.animation.AppearAnimationCreator;
import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.settingslib.animation.DisappearAnimationUtils;
import java.util.List; import java.util.List;
@@ -325,7 +328,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit
.setDuration(500) .setDuration(500)
.setInterpolator(mAppearAnimationUtils.getInterpolator()) .setInterpolator(mAppearAnimationUtils.getInterpolator())
.translationY(0); .translationY(0);
mAppearAnimationUtils.startAnimation( mAppearAnimationUtils.startAnimation2d(
mLockPatternView.getCellStates(), mLockPatternView.getCellStates(),
new Runnable() { new Runnable() {
@Override @Override
@@ -353,7 +356,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit
.setDuration(300) .setDuration(300)
.setInterpolator(mDisappearAnimationUtils.getInterpolator()) .setInterpolator(mDisappearAnimationUtils.getInterpolator())
.translationY(-mDisappearAnimationUtils.getStartTranslation()); .translationY(-mDisappearAnimationUtils.getStartTranslation());
mDisappearAnimationUtils.startAnimation(mLockPatternView.getCellStates(), mDisappearAnimationUtils.startAnimation2d(mLockPatternView.getCellStates(),
new Runnable() { new Runnable() {
@Override @Override
public void run() { public void run() {

View File

@@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2015 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<resources>
<!-- The y translation to apply at the start in appear animations. -->
<dimen name="appear_y_translation_start">32dp</dimen>
<!-- The translation for disappearing security views after having solved them. -->
<dimen name="disappear_y_translation">-32dp</dimen>
</resources>

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2014 The Android Open Source Project * Copyright (C) 2015 The Android Open Source Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -14,13 +14,13 @@
* limitations under the License * limitations under the License
*/ */
package com.android.keyguard; package com.android.settingslib.animation;
import android.view.animation.Interpolator; import android.view.animation.Interpolator;
/** /**
* An interface which can create animations when starting an appear animation with * An interface which can create animations when starting an appear animation with
* {@link com.android.keyguard.AppearAnimationUtils} * {@link AppearAnimationUtils}
*/ */
public interface AppearAnimationCreator<T> { public interface AppearAnimationCreator<T> {
void createAnimation(T animatedObject, long delay, long duration, void createAnimation(T animatedObject, long delay, long duration,

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2014 The Android Open Source Project * Copyright (C) 2015 The Android Open Source Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -14,13 +14,15 @@
* limitations under the License * limitations under the License
*/ */
package com.android.keyguard; package com.android.settingslib.animation;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.view.animation.Interpolator; import android.view.animation.Interpolator;
import com.android.settingslib.R;
/** /**
* A class to make nice appear transitions for views in a tabular layout. * A class to make nice appear transitions for views in a tabular layout.
*/ */
@@ -33,7 +35,7 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> {
private final AppearAnimationProperties mProperties = new AppearAnimationProperties(); private final AppearAnimationProperties mProperties = new AppearAnimationProperties();
protected final float mDelayScale; protected final float mDelayScale;
private final long mDuration; private final long mDuration;
protected boolean mScaleTranslationWithRow; protected RowTranslationScaler mRowTranslationScaler;
protected boolean mAppearing; protected boolean mAppearing;
public AppearAnimationUtils(Context ctx) { public AppearAnimationUtils(Context ctx) {
@@ -49,19 +51,18 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> {
R.dimen.appear_y_translation_start) * translationScaleFactor; R.dimen.appear_y_translation_start) * translationScaleFactor;
mDelayScale = delayScaleFactor; mDelayScale = delayScaleFactor;
mDuration = duration; mDuration = duration;
mScaleTranslationWithRow = false;
mAppearing = true; mAppearing = true;
} }
public void startAnimation(View[][] objects, final Runnable finishListener) { public void startAnimation2d(View[][] objects, final Runnable finishListener) {
startAnimation(objects, finishListener, this); startAnimation2d(objects, finishListener, this);
} }
public void startAnimation(View[] objects, final Runnable finishListener) { public void startAnimation(View[] objects, final Runnable finishListener) {
startAnimation(objects, finishListener, this); startAnimation(objects, finishListener, this);
} }
public <T> void startAnimation(T[][] objects, final Runnable finishListener, public <T> void startAnimation2d(T[][] objects, final Runnable finishListener,
AppearAnimationCreator<T> creator) { AppearAnimationCreator<T> creator) {
AppearAnimationProperties properties = getDelays(objects); AppearAnimationProperties properties = getDelays(objects);
startAnimations(properties, objects, finishListener, creator); startAnimations(properties, objects, finishListener, creator);
@@ -86,8 +87,13 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> {
if (properties.maxDelayRowIndex == row && properties.maxDelayColIndex == 0) { if (properties.maxDelayRowIndex == row && properties.maxDelayColIndex == 0) {
endRunnable = finishListener; endRunnable = finishListener;
} }
float translationScale = mRowTranslationScaler != null
? mRowTranslationScaler.getRowTranslationScale(row, properties.delays.length)
: 1f;
float translation = translationScale * mStartTranslation;
creator.createAnimation(objects[row], delay, mDuration, creator.createAnimation(objects[row], delay, mDuration,
mStartTranslation, true /* appearing */, mInterpolator, endRunnable); mAppearing ? translation : -translation,
mAppearing, mInterpolator, endRunnable);
} }
} }
@@ -99,10 +105,10 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> {
} }
for (int row = 0; row < properties.delays.length; row++) { for (int row = 0; row < properties.delays.length; row++) {
long[] columns = properties.delays[row]; long[] columns = properties.delays[row];
float translation = mScaleTranslationWithRow float translationScale = mRowTranslationScaler != null
? (float) (Math.pow((properties.delays.length - row), 2) ? mRowTranslationScaler.getRowTranslationScale(row, properties.delays.length)
/ properties.delays.length * mStartTranslation) : 1f;
: mStartTranslation; float translation = translationScale * mStartTranslation;
for (int col = 0; col < columns.length; col++) { for (int col = 0; col < columns.length; col++) {
long delay = columns[col]; long delay = columns[col];
Runnable endRunnable = null; Runnable endRunnable = null;
@@ -193,4 +199,8 @@ public class AppearAnimationUtils implements AppearAnimationCreator<View> {
public int maxDelayRowIndex; public int maxDelayRowIndex;
public int maxDelayColIndex; public int maxDelayColIndex;
} }
public interface RowTranslationScaler {
float getRowTranslationScale(int row, int numRows);
}
} }

View File

@@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2014 The Android Open Source Project * Copyright (C) 2015 The Android Open Source Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); * Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License. * you may not use this file except in compliance with the License.
@@ -14,7 +14,7 @@
* limitations under the License * limitations under the License
*/ */
package com.android.keyguard; package com.android.settingslib.animation;
import android.content.Context; import android.content.Context;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
@@ -28,17 +28,31 @@ public class DisappearAnimationUtils extends AppearAnimationUtils {
public DisappearAnimationUtils(Context ctx) { public DisappearAnimationUtils(Context ctx) {
this(ctx, DEFAULT_APPEAR_DURATION, this(ctx, DEFAULT_APPEAR_DURATION,
1.0f, 1.0f, 1.0f, 1.0f,
AnimationUtils.loadInterpolator(ctx, android.R.interpolator.linear_out_slow_in)); AnimationUtils.loadInterpolator(ctx, android.R.interpolator.fast_out_linear_in));
} }
public DisappearAnimationUtils(Context ctx, long duration, float translationScaleFactor, public DisappearAnimationUtils(Context ctx, long duration, float translationScaleFactor,
float delayScaleFactor, Interpolator interpolator) { float delayScaleFactor, Interpolator interpolator) {
this(ctx, duration, translationScaleFactor, delayScaleFactor, interpolator,
ROW_TRANSLATION_SCALER);
}
public DisappearAnimationUtils(Context ctx, long duration, float translationScaleFactor,
float delayScaleFactor, Interpolator interpolator, RowTranslationScaler rowScaler) {
super(ctx, duration, translationScaleFactor, delayScaleFactor, interpolator); super(ctx, duration, translationScaleFactor, delayScaleFactor, interpolator);
mScaleTranslationWithRow = true; mRowTranslationScaler = rowScaler;
mAppearing = false; mAppearing = false;
} }
protected long calculateDelay(int row, int col) { protected long calculateDelay(int row, int col) {
return (long) ((row * 60 + col * (Math.pow(row, 0.4) + 0.4) * 10) * mDelayScale); return (long) ((row * 60 + col * (Math.pow(row, 0.4) + 0.4) * 10) * mDelayScale);
} }
private static final RowTranslationScaler ROW_TRANSLATION_SCALER = new RowTranslationScaler() {
@Override
public float getRowTranslationScale(int row, int numRows) {
return (float) (Math.pow((numRows - row), 2) / numRows);
}
};
} }

View File

@@ -30,7 +30,7 @@ import android.view.ViewStub;
import android.view.animation.AnimationUtils; import android.view.animation.AnimationUtils;
import android.widget.FrameLayout; import android.widget.FrameLayout;
import com.android.keyguard.AppearAnimationUtils; import com.android.settingslib.animation.AppearAnimationUtils;
import com.android.systemui.R; import com.android.systemui.R;
import com.android.systemui.qs.tiles.UserDetailItemView; import com.android.systemui.qs.tiles.UserDetailItemView;
import com.android.systemui.statusbar.phone.KeyguardStatusBarView; import com.android.systemui.statusbar.phone.KeyguardStatusBarView;