diff options
Diffstat (limited to 'packages/SystemUI')
5 files changed, 97 insertions, 57 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 31c94f7..54f91da 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -16,18 +16,13 @@ package com.android.systemui.statusbar; -import com.android.internal.app.IBatteryStats; -import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.keyguard.KeyguardUpdateMonitorCallback; -import com.android.systemui.R; -import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; - import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.content.res.Resources; import android.graphics.Color; +import android.hardware.fingerprint.FingerprintManager; import android.os.BatteryManager; import android.os.BatteryStats; import android.os.Handler; @@ -40,8 +35,16 @@ import android.text.format.Formatter; import android.util.Log; import android.view.View; +import com.android.internal.app.IBatteryStats; +import com.android.keyguard.KeyguardUpdateMonitor; +import com.android.keyguard.KeyguardUpdateMonitorCallback; +import com.android.systemui.R; +import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; +import com.android.systemui.statusbar.phone.LockIcon; +import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; + /** - * Controls the little text indicator on the keyguard. + * Controls the indications and error messages shown on the Keyguard */ public class KeyguardIndicationController { @@ -49,6 +52,8 @@ public class KeyguardIndicationController { private static final boolean DEBUG_CHARGING_CURRENT = false; private static final int MSG_HIDE_TRANSIENT = 1; + private static final int MSG_CLEAR_FP_MSG = 2; + private static final long TRANSIENT_FP_ERROR_TIMEOUT = 1300; private final Context mContext; private final KeyguardIndicationTextView mTextView; @@ -56,6 +61,8 @@ public class KeyguardIndicationController { private final int mSlowThreshold; private final int mFastThreshold; + private final LockIcon mLockIcon; + private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager; private String mRestingIndication; private String mTransientIndication; @@ -66,10 +73,13 @@ public class KeyguardIndicationController { private boolean mPowerCharged; private int mChargingSpeed; private int mChargingCurrent; + private String mMessageToShowOnScreenOn; - public KeyguardIndicationController(Context context, KeyguardIndicationTextView textView) { + public KeyguardIndicationController(Context context, KeyguardIndicationTextView textView, + LockIcon lockIcon) { mContext = context; mTextView = textView; + mLockIcon = lockIcon; Resources res = context.getResources(); mSlowThreshold = res.getInteger(R.integer.config_chargingSlowlyThreshold); @@ -216,6 +226,64 @@ public class KeyguardIndicationController { mChargingSpeed = status.getChargingSpeed(mSlowThreshold, mFastThreshold); updateIndication(); } + + @Override + public void onFingerprintHelp(int msgId, String helpString) { + KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext); + if (!updateMonitor.isUnlockingWithFingerprintAllowed()) { + return; + } + int errorColor = mContext.getResources().getColor(R.color.system_warning_color, null); + if (mStatusBarKeyguardViewManager.isBouncerShowing()) { + mStatusBarKeyguardViewManager.showBouncerMessage(helpString, errorColor); + } else if (updateMonitor.isDeviceInteractive()) { + mLockIcon.setTransientFpError(true); + showTransientIndication(helpString, errorColor); + mHandler.removeMessages(MSG_CLEAR_FP_MSG); + mHandler.sendMessageDelayed(mHandler.obtainMessage(MSG_CLEAR_FP_MSG), + TRANSIENT_FP_ERROR_TIMEOUT); + } + } + + @Override + public void onFingerprintError(int msgId, String errString) { + KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext); + if (!updateMonitor.isUnlockingWithFingerprintAllowed() + || msgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) { + return; + } + int errorColor = mContext.getResources().getColor(R.color.system_warning_color, null); + if (mStatusBarKeyguardViewManager.isBouncerShowing()) { + mStatusBarKeyguardViewManager.showBouncerMessage(errString, errorColor); + } else if (updateMonitor.isDeviceInteractive()) { + showTransientIndication(errString, errorColor); + // We want to keep this message around in case the screen was off + mHandler.removeMessages(MSG_HIDE_TRANSIENT); + hideTransientIndicationDelayed(5000); + } else { + mMessageToShowOnScreenOn = errString; + } + } + + @Override + public void onScreenTurnedOn() { + if (mMessageToShowOnScreenOn != null) { + int errorColor = mContext.getResources().getColor(R.color.system_warning_color, + null); + showTransientIndication(mMessageToShowOnScreenOn, errorColor); + // We want to keep this message around in case the screen was off + mHandler.removeMessages(MSG_HIDE_TRANSIENT); + hideTransientIndicationDelayed(5000); + mMessageToShowOnScreenOn = null; + } + } + + @Override + public void onFingerprintRunningStateChanged(boolean running) { + if (running) { + mMessageToShowOnScreenOn = null; + } + } }; BroadcastReceiver mReceiver = new BroadcastReceiver() { @@ -233,7 +301,15 @@ public class KeyguardIndicationController { if (msg.what == MSG_HIDE_TRANSIENT && mTransientIndication != null) { mTransientIndication = null; updateIndication(); + } else if (msg.what == MSG_CLEAR_FP_MSG) { + mLockIcon.setTransientFpError(false); + hideTransientIndication(); } } }; + + public void setStatusBarKeyguardViewManager( + StatusBarKeyguardViewManager statusBarKeyguardViewManager) { + mStatusBarKeyguardViewManager = statusBarKeyguardViewManager; + } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java index 7b67c6c..4878cd9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java @@ -29,7 +29,6 @@ import android.content.pm.ActivityInfo; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.content.res.Configuration; -import android.hardware.fingerprint.FingerprintManager; import android.os.AsyncTask; import android.os.Bundle; import android.os.IBinder; @@ -86,7 +85,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL private static final Intent PHONE_INTENT = new Intent(Intent.ACTION_DIAL); private static final int DOZE_ANIMATION_STAGGER_DELAY = 48; private static final int DOZE_ANIMATION_ELEMENT_DURATION = 250; - private static final long TRANSIENT_FP_ERROR_TIMEOUT = 1300; private KeyguardAffordanceView mCameraImageView; private KeyguardAffordanceView mLeftAffordanceView; @@ -528,7 +526,7 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL return mCameraPreview; } - public KeyguardAffordanceView getLockIcon() { + public LockIcon getLockIcon() { return mLockIcon; } @@ -613,21 +611,6 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } }; - private final Runnable mTransientFpErrorClearRunnable = new Runnable() { - @Override - public void run() { - mLockIcon.setTransientFpError(false); - mIndicationController.hideTransientIndication(); - } - }; - - private final Runnable mHideTransientIndicationRunnable = new Runnable() { - @Override - public void run() { - mIndicationController.hideTransientIndication(); - } - }; - private final KeyguardUpdateMonitorCallback mUpdateMonitorCallback = new KeyguardUpdateMonitorCallback() { @Override @@ -661,38 +644,9 @@ public class KeyguardBottomAreaView extends FrameLayout implements View.OnClickL } @Override - public void onFingerprintAuthenticated(int userId, boolean wakeAndUnlocking) { - } - - @Override public void onFingerprintRunningStateChanged(boolean running) { mLockIcon.update(); } - - @Override - public void onFingerprintHelp(int msgId, String helpString) { - if (!KeyguardUpdateMonitor.getInstance(mContext).isUnlockingWithFingerprintAllowed()) { - return; - } - mLockIcon.setTransientFpError(true); - mIndicationController.showTransientIndication(helpString, - getResources().getColor(R.color.system_warning_color, null)); - removeCallbacks(mTransientFpErrorClearRunnable); - postDelayed(mTransientFpErrorClearRunnable, TRANSIENT_FP_ERROR_TIMEOUT); - } - - @Override - public void onFingerprintError(int msgId, String errString) { - if (!KeyguardUpdateMonitor.getInstance(mContext).isUnlockingWithFingerprintAllowed() - || msgId == FingerprintManager.FINGERPRINT_ERROR_CANCELED) { - return; - } - // TODO: Go to bouncer if this is "too many attempts" (lockout) error. - mIndicationController.showTransientIndication(errString, - getResources().getColor(R.color.system_warning_color, null)); - removeCallbacks(mHideTransientIndicationRunnable); - postDelayed(mHideTransientIndicationRunnable, 5000); - } }; public void setKeyguardIndicationController( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java index e9b2c61..37f563e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBouncer.java @@ -17,7 +17,6 @@ package com.android.systemui.statusbar.phone; import android.content.Context; -import android.view.Choreographer; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; @@ -103,6 +102,10 @@ public class KeyguardBouncer { mKeyguardView.showPromptReason(reason); } + public void showMessage(String message, int color) { + mKeyguardView.showMessage(message, color); + } + private void cancelShowRunnable() { DejankUtils.removeCallbacks(mShowRunnable); mShowingSoon = false; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index efd72a7..1da6293 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -780,7 +780,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, mKeyguardBottomArea.setAssistManager(mAssistManager); mKeyguardIndicationController = new KeyguardIndicationController(mContext, (KeyguardIndicationTextView) mStatusBarWindow.findViewById( - R.id.keyguard_indication_text)); + R.id.keyguard_indication_text), + mKeyguardBottomArea.getLockIcon()); mKeyguardBottomArea.setKeyguardIndicationController(mKeyguardIndicationController); // set the inital view visibility @@ -1011,6 +1012,8 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode, KeyguardViewMediator keyguardViewMediator = getComponent(KeyguardViewMediator.class); mStatusBarKeyguardViewManager = keyguardViewMediator.registerStatusBar(this, mStatusBarWindow, mStatusBarWindowManager, mScrimController); + mKeyguardIndicationController.setStatusBarKeyguardViewManager( + mStatusBarKeyguardViewManager); mKeyguardViewMediatorCallback = keyguardViewMediator.getViewMediatorCallback(); } 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 44aa780..1bdcf03 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java @@ -491,4 +491,8 @@ public class StatusBarKeyguardViewManager { mPhoneStatusBar.getNavigationBarView().setWakeAndUnlocking(true); } } + + public void showBouncerMessage(String message, int color) { + mBouncer.showMessage(message, color); + } } |