From 031f79560f65499281bbb500c36e57724d7b514a Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Thu, 1 Sep 2016 16:39:26 -0700 Subject: Only do slow unlock transition if real home is not running Test: Tested the first unlock on both FDE and non-FDE device. Change-Id: Ibfbb9d67fb83456acd7b12bbe2d03a961a998ba9 Fixes: 31203310 --- .../src/com/android/keyguard/KeyguardPINView.java | 11 ++++------ .../com/android/keyguard/KeyguardPatternView.java | 13 +++++------ .../android/keyguard/KeyguardUpdateMonitor.java | 25 ++++++++++++++++++---- .../systemui/statusbar/phone/ScrimController.java | 10 ++++----- .../phone/StatusBarKeyguardViewManager.java | 2 +- 5 files changed, 38 insertions(+), 23 deletions(-) diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java index 4f5152aca6f3..779289429e2f 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java @@ -16,12 +16,8 @@ package com.android.keyguard; -import android.animation.Animator; -import android.animation.ObjectAnimator; import android.content.Context; import android.util.AttributeSet; -import android.view.RenderNode; -import android.view.RenderNodeAnimator; import android.view.View; import android.view.ViewGroup; import android.view.animation.AnimationUtils; @@ -144,9 +140,10 @@ public class KeyguardPINView extends KeyguardPinBasedInputView { setTranslationY(0); AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 280 /* duration */, mDisappearYTranslation, mDisappearAnimationUtils.getInterpolator()); - DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor.isUserUnlocked() - ? mDisappearAnimationUtils - : mDisappearAnimationUtilsLocked; + DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor + .needsSlowUnlockTransition() + ? mDisappearAnimationUtils + : mDisappearAnimationUtilsLocked; disappearAnimationUtils.startAnimation2d(mViews, new Runnable() { @Override diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java index 84b90c44c1a6..506f77d443c6 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java @@ -408,9 +408,9 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit @Override public boolean startDisappearAnimation(final Runnable finishRunnable) { - float durationMultiplier = mKeyguardUpdateMonitor.isUserUnlocked() - ? 1f - : DISAPPEAR_MULTIPLIER_LOCKED; + float durationMultiplier = mKeyguardUpdateMonitor.needsSlowUnlockTransition() + ? DISAPPEAR_MULTIPLIER_LOCKED + : 1f; mLockPatternView.clearPattern(); enableClipping(false); setTranslationY(0); @@ -419,9 +419,10 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit -mDisappearAnimationUtils.getStartTranslation(), mDisappearAnimationUtils.getInterpolator()); - DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor.isUserUnlocked() - ? mDisappearAnimationUtils - : mDisappearAnimationUtilsLocked; + DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor + .needsSlowUnlockTransition() + ? mDisappearAnimationUtilsLocked + : mDisappearAnimationUtils; disappearAnimationUtils.startAnimation2d(mLockPatternView.getCellStates(), () -> { enableClipping(true); diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java index 56f37414a0e6..e169c0d072db 100644 --- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -34,9 +34,12 @@ import android.app.PendingIntent; import android.app.admin.DevicePolicyManager; import android.app.trust.TrustManager; import android.content.BroadcastReceiver; +import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; +import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.database.ContentObserver; import android.graphics.Bitmap; import android.hardware.fingerprint.FingerprintManager; @@ -159,6 +162,9 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private static final int DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT = 5000000; + private static final ComponentName FALLBACK_HOME_COMPONENT = new ComponentName( + "com.android.settings", "com.android.settings.FallbackHome"); + private static KeyguardUpdateMonitor sInstance; private final Context mContext; @@ -177,7 +183,7 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private boolean mGoingToSleep; private boolean mBouncer; private boolean mBootCompleted; - private boolean mUserUnlocked; + private boolean mNeedsSlowUnlockTransition; private boolean mHasLockscreenWallpaper; // Device provisioning state @@ -572,8 +578,8 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { && !hasFingerprintUnlockTimedOut(sCurrentUser); } - public boolean isUserUnlocked() { - return mUserUnlocked; + public boolean needsSlowUnlockTransition() { + return mNeedsSlowUnlockTransition; } public StrongAuthTracker getStrongAuthTracker() { @@ -1444,7 +1450,18 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private void handleKeyguardReset() { if (DEBUG) Log.d(TAG, "handleKeyguardReset"); updateFingerprintListeningState(); - mUserUnlocked = mUserManager.isUserUnlocked(getCurrentUser()); + mNeedsSlowUnlockTransition = resolveNeedsSlowUnlockTransition(); + } + + private boolean resolveNeedsSlowUnlockTransition() { + if (mUserManager.isUserUnlocked(getCurrentUser())) { + return false; + } + Intent homeIntent = new Intent(Intent.ACTION_MAIN) + .addCategory(Intent.CATEGORY_HOME); + ResolveInfo resolveInfo = mContext.getPackageManager().resolveActivity(homeIntent, + 0 /* flags */); + return FALLBACK_HOME_COMPONENT.equals(resolveInfo.getComponentInfo().getComponentName()); } /** diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java index 73a95c201bce..35e084db9cd7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java @@ -176,7 +176,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, mSkipFirstFrame = skipFirstFrame; mOnAnimationFinished = onAnimationFinished; - if (mKeyguardUpdateMonitor.isUserUnlocked()) { + if (!mKeyguardUpdateMonitor.needsSlowUnlockTransition()) { scheduleUpdate(); // No need to wait for the next frame to be drawn for this case - onPreDraw will execute @@ -241,9 +241,9 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } private float getScrimInFrontAlpha() { - return mKeyguardUpdateMonitor.isUserUnlocked() - ? SCRIM_IN_FRONT_ALPHA - : SCRIM_IN_FRONT_ALPHA_LOCKED; + return mKeyguardUpdateMonitor.needsSlowUnlockTransition() + ? SCRIM_IN_FRONT_ALPHA_LOCKED + : SCRIM_IN_FRONT_ALPHA; } private void scheduleUpdate() { if (mUpdatePending) return; @@ -405,7 +405,7 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, } private Interpolator getInterpolator() { - if (mAnimateKeyguardFadingOut && !mKeyguardUpdateMonitor.isUserUnlocked()) { + if (mAnimateKeyguardFadingOut && mKeyguardUpdateMonitor.needsSlowUnlockTransition()) { return KEYGUARD_FADE_OUT_INTERPOLATOR_LOCKED; } else if (mAnimateKeyguardFadingOut) { return KEYGUARD_FADE_OUT_INTERPOLATOR; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java index def4bc3c5790..664e1030d8a1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -291,7 +291,7 @@ public class StatusBarKeyguardViewManager implements RemoteInputController.Callb public void hide(long startTime, long fadeoutDuration) { mShowing = false; - if (!KeyguardUpdateMonitor.getInstance(mContext).isUserUnlocked()) { + if (KeyguardUpdateMonitor.getInstance(mContext).needsSlowUnlockTransition()) { fadeoutDuration = KEYGUARD_DISMISS_DURATION_LOCKED; } long uptimeMillis = SystemClock.uptimeMillis(); -- cgit v1.2.3-59-g8ed1b From 2578beccbeacd605728e018cf390c10cef72b48b Mon Sep 17 00:00:00 2001 From: Jorim Jaggi Date: Thu, 1 Sep 2016 18:38:53 -0700 Subject: Only show optimizing storage dialog if dex opt dialog was shown This doesn't take long, so there is little reason to show it if we didn't show the dex opt dialog. Bug: 29643498 Change-Id: I955f9dfa233166a8a150deb2d115a591e6d82394 --- .../java/com/android/server/pm/PackageManagerService.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index baed6091f405..419e4ad19e71 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -538,6 +538,9 @@ public class PackageManagerService extends IPackageManager.Stub { final boolean mIsPreNUpgrade; final boolean mIsPreNMR1Upgrade; + @GuardedBy("mPackages") + private boolean mDexOptDialogShown; + /** The location for ASEC container files on internal storage. */ final String mAsecInternalPath; @@ -7150,7 +7153,11 @@ public class PackageManagerService extends IPackageManager.Stub { } } if (doTrim) { - if (!isFirstBoot()) { + final boolean dexOptDialogShown; + synchronized (mPackages) { + dexOptDialogShown = mDexOptDialogShown; + } + if (!isFirstBoot() && dexOptDialogShown) { try { ActivityManagerNative.getDefault().showBootMessage( mContext.getResources().getString( @@ -7244,6 +7251,9 @@ public class PackageManagerService extends IPackageManager.Stub { numberOfPackagesVisited, numberOfPackagesToDexopt), true); } catch (RemoteException e) { } + synchronized (mPackages) { + mDexOptDialogShown = true; + } } // If the OTA updates a system app which was previously preopted to a non-preopted state -- cgit v1.2.3-59-g8ed1b