diff options
| author | Jae Yong Sung <jysung@google.com> | 2010-08-05 10:44:27 -0700 |
|---|---|---|
| committer | Jae Yong Sung <jysung@google.com> | 2010-08-13 15:08:05 -0700 |
| commit | 8171b5182f5f07d33c9dfdf2dd8f0f6ae9588039 (patch) | |
| tree | 8c6c4b9de2a045809ce420a89edd76e6bf837f25 /policy/src | |
| parent | aece2d0ca012144007870db9bb2cf0e360cbb973 (diff) | |
| download | frameworks_base-8171b5182f5f07d33c9dfdf2dd8f0f6ae9588039.zip frameworks_base-8171b5182f5f07d33c9dfdf2dd8f0f6ae9588039.tar.gz frameworks_base-8171b5182f5f07d33c9dfdf2dd8f0f6ae9588039.tar.bz2 | |
lock screen for xlarge
Change-Id: Iab9f53609bf24be774752a9960aaaa654d7a614f
Diffstat (limited to 'policy/src')
6 files changed, 368 insertions, 213 deletions
diff --git a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java index ba1d7f5..70a4b20 100644 --- a/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java +++ b/policy/src/com/android/internal/policy/impl/KeyguardViewManager.java @@ -113,7 +113,15 @@ public class KeyguardViewManager implements KeyguardWindowController { flags, PixelFormat.TRANSLUCENT); lp.softInputMode = WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN; lp.windowAnimations = com.android.internal.R.style.Animation_LockScreen; - lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; + + if (mContext.getResources().getBoolean(R.bool.config_enableLockScreenRotation)) { + Log.d(TAG, "Rotation sensor for lock screen On!"); + lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_SENSOR; + } else { + Log.d(TAG, "Rotation sensor for lock screen Off!"); + lp.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR; + } + lp.setTitle("Keyguard"); mWindowLayoutParams = lp; diff --git a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java index 8693294..822be46 100644 --- a/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java +++ b/policy/src/com/android/internal/policy/impl/LockPatternKeyguardView.java @@ -645,7 +645,9 @@ public class LockPatternKeyguardView extends KeyguardViewBase { // Show LockScreen first for any screen other than Pattern unlock. final boolean usingLockPattern = mLockPatternUtils.getKeyguardStoredPasswordQuality() == DevicePolicyManager.PASSWORD_QUALITY_SOMETHING; - if (isSecure() && usingLockPattern) { + + boolean showSlidingTab = getResources().getBoolean(R.bool.config_enableSlidingTabFirst); + if (isSecure() && (usingLockPattern || !showSlidingTab)) { return Mode.UnlockScreen; } else { return Mode.LockScreen; @@ -688,7 +690,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase { private void showTimeoutDialog() { int timeoutInSeconds = (int) LockPatternUtils.FAILED_ATTEMPT_TIMEOUT_MS / 1000; - int messageId = R.string.lockscreen_too_many_failed_attempts_dialog_message;; + int messageId = R.string.lockscreen_too_many_failed_attempts_dialog_message; if(getUnlockMode() == UnlockMode.Password) { if(mLockPatternUtils.getKeyguardStoredPasswordQuality() == DevicePolicyManager.PASSWORD_QUALITY_NUMERIC) { diff --git a/policy/src/com/android/internal/policy/impl/LockScreen.java b/policy/src/com/android/internal/policy/impl/LockScreen.java index b3707b0..f8c0aba 100644 --- a/policy/src/com/android/internal/policy/impl/LockScreen.java +++ b/policy/src/com/android/internal/policy/impl/LockScreen.java @@ -59,12 +59,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM private final KeyguardUpdateMonitor mUpdateMonitor; private final KeyguardScreenCallback mCallback; - private TextView mCarrier; private SlidingTab mSelector; - private TextView mTime; - private TextView mDate; - private TextView mStatus1; - private TextView mStatus2; private TextView mScreenLocked; private TextView mEmergencyCallText; private Button mEmergencyCallButton; @@ -93,6 +88,8 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM private java.text.DateFormat mTimeFormat; private boolean mEnableMenuKeyInLockScreen; + private StatusView mStatusView; + /** * The status of this lock screen. */ @@ -195,14 +192,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM inflater.inflate(R.layout.keyguard_screen_tab_unlock_land, this, true); } - mCarrier = (TextView) findViewById(R.id.carrier); - // Required for Marquee to work - mCarrier.setSelected(true); - mCarrier.setTextColor(0xffffffff); - - mDate = (TextView) findViewById(R.id.date); - mStatus1 = (TextView) findViewById(R.id.status1); - mStatus2 = (TextView) findViewById(R.id.status2); + mStatusView = new StatusView(this, mUpdateMonitor, mLockPatternUtils); mScreenLocked = (TextView) findViewById(R.id.screenLocked); mSelector = (SlidingTab) findViewById(R.id.tab_selector); @@ -427,38 +417,11 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM } private void refreshTimeAndDateDisplay() { - mDate.setText(DateFormat.format(mDateFormatString, new Date())); + mStatusView.refreshTimeAndDateDisplay(); } private void updateStatusLines() { - if (!mStatus.showStatusLines() - || (mCharging == null && mNextAlarm == null)) { - mStatus1.setVisibility(View.INVISIBLE); - mStatus2.setVisibility(View.INVISIBLE); - } else if (mCharging != null && mNextAlarm == null) { - // charging only - mStatus1.setVisibility(View.VISIBLE); - mStatus2.setVisibility(View.INVISIBLE); - - mStatus1.setText(mCharging); - mStatus1.setCompoundDrawablesWithIntrinsicBounds(mChargingIcon, null, null, null); - } else if (mNextAlarm != null && mCharging == null) { - // next alarm only - mStatus1.setVisibility(View.VISIBLE); - mStatus2.setVisibility(View.INVISIBLE); - - mStatus1.setText(mNextAlarm); - mStatus1.setCompoundDrawablesWithIntrinsicBounds(mAlarmIcon, null, null, null); - } else if (mCharging != null && mNextAlarm != null) { - // both charging and next alarm - mStatus1.setVisibility(View.VISIBLE); - mStatus2.setVisibility(View.VISIBLE); - - mStatus1.setText(mCharging); - mStatus1.setCompoundDrawablesWithIntrinsicBounds(mChargingIcon, null, null, null); - mStatus2.setText(mNextAlarm); - mStatus2.setCompoundDrawablesWithIntrinsicBounds(mAlarmIcon, null, null, null); - } + mStatusView.updateStatusLines(mStatus.showStatusLines(), mCharging, mChargingIcon, mAlarmIcon); } /** {@inheritDoc} */ @@ -508,7 +471,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM switch (status) { case Normal: // text - mCarrier.setText( + mStatusView.setCarrierText( getCarrierString( mUpdateMonitor.getTelephonyPlmn(), mUpdateMonitor.getTelephonySpn())); @@ -524,7 +487,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM case NetworkLocked: // The carrier string shows both sim card status (i.e. No Sim Card) and // carrier's name and/or "Emergency Calls Only" status - mCarrier.setText( + mStatusView.setCarrierText( getCarrierString( mUpdateMonitor.getTelephonyPlmn(), getContext().getText(R.string.lockscreen_network_locked_message))); @@ -537,7 +500,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM break; case SimMissing: // text - mCarrier.setText(R.string.lockscreen_missing_sim_message_short); + mStatusView.setCarrierText(R.string.lockscreen_missing_sim_message_short); mScreenLocked.setText(R.string.lockscreen_missing_sim_instructions); // layout @@ -548,7 +511,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM break; case SimMissingLocked: // text - mCarrier.setText( + mStatusView.setCarrierText( getCarrierString( mUpdateMonitor.getTelephonyPlmn(), getContext().getText(R.string.lockscreen_missing_sim_message_short))); @@ -562,7 +525,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM break; case SimLocked: // text - mCarrier.setText( + mStatusView.setCarrierText( getCarrierString( mUpdateMonitor.getTelephonyPlmn(), getContext().getText(R.string.lockscreen_sim_locked_message))); @@ -574,7 +537,7 @@ class LockScreen extends LinearLayout implements KeyguardScreen, KeyguardUpdateM break; case SimPukLocked: // text - mCarrier.setText( + mStatusView.setCarrierText( getCarrierString( mUpdateMonitor.getTelephonyPlmn(), getContext().getText(R.string.lockscreen_sim_puk_locked_message))); diff --git a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java index 60cd56c..9db86aa 100644 --- a/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java +++ b/policy/src/com/android/internal/policy/impl/PasswordUnlockScreen.java @@ -30,6 +30,7 @@ import android.os.SystemClock; import android.telephony.TelephonyManager; import android.text.method.DigitsKeyListener; import android.text.method.TextKeyListener; +import android.util.Log; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.View; @@ -50,6 +51,7 @@ import com.android.internal.widget.PasswordEntryKeyboardHelper; public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen, View.OnClickListener, KeyguardUpdateMonitor.InfoCallback, OnEditorActionListener { + private static final String TAG = "PasswordUnlockScreen"; private final KeyguardUpdateMonitor mUpdateMonitor; private final KeyguardScreenCallback mCallback; @@ -59,12 +61,15 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen private Button mEmergencyCallButton; private LockPatternUtils mLockPatternUtils; private PasswordEntryKeyboardView mKeyboardView; + private PasswordEntryKeyboardView mKeyboardViewAlpha; private PasswordEntryKeyboardHelper mKeyboardHelper; + private PasswordEntryKeyboardHelper mKeyboardHelperAlpha; private int mCreationOrientation; private int mCreationHardKeyboardHidden; private CountDownTimer mCountdownTimer; - private TextView mTitle; + + private StatusView mStatusView; // To avoid accidental lockout due to events while the device in in the pocket, ignore // any passwords with length less than or equal to this length. @@ -88,25 +93,43 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen layoutInflater.inflate(R.layout.keyguard_screen_password_landscape, this, true); } + mStatusView = new StatusView(this, mUpdateMonitor, mLockPatternUtils); + final int quality = lockPatternUtils.getKeyguardStoredPasswordQuality(); mIsAlpha = DevicePolicyManager.PASSWORD_QUALITY_ALPHABETIC == quality || DevicePolicyManager.PASSWORD_QUALITY_ALPHANUMERIC == quality || DevicePolicyManager.PASSWORD_QUALITY_COMPLEX == quality; mKeyboardView = (PasswordEntryKeyboardView) findViewById(R.id.keyboard); + mKeyboardViewAlpha = (PasswordEntryKeyboardView) findViewById(R.id.keyboardAlpha); mPasswordEntry = (EditText) findViewById(R.id.passwordEntry); mPasswordEntry.setOnEditorActionListener(this); mEmergencyCallButton = (Button) findViewById(R.id.emergencyCall); mEmergencyCallButton.setOnClickListener(this); mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton); - mTitle = (TextView) findViewById(R.id.enter_password_label); - mKeyboardHelper = new PasswordEntryKeyboardHelper(context, mKeyboardView, this); - mKeyboardHelper.setKeyboardMode(mIsAlpha ? PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA - : PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC); + mKeyboardHelper = new PasswordEntryKeyboardHelper(context, mKeyboardView, this, false); + if (mKeyboardViewAlpha == null || !mIsAlpha) { + mKeyboardHelper.setKeyboardMode(mIsAlpha ? + PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA + : PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC); + mKeyboardView.setVisibility( + mCreationHardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO + ? View.INVISIBLE : View.VISIBLE); + } else { + mKeyboardHelperAlpha = new PasswordEntryKeyboardHelper(context, mKeyboardViewAlpha, + this, false); + mKeyboardHelper.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_NUMERIC); + mKeyboardHelperAlpha.setKeyboardMode(PasswordEntryKeyboardHelper.KEYBOARD_MODE_ALPHA); + mKeyboardView.setVisibility(View.GONE); + mKeyboardViewAlpha.setVisibility( + mCreationHardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO + ? View.INVISIBLE : View.VISIBLE); + mPasswordEntry.setWidth(mKeyboardViewAlpha.getLayoutParams().width); + } - mKeyboardView.setVisibility(mCreationHardKeyboardHidden == Configuration.HARDKEYBOARDHIDDEN_NO - ? View.INVISIBLE : View.VISIBLE); + mPasswordEntry.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0, + 0, 0); mPasswordEntry.requestFocus(); // This allows keyboards with overlapping qwerty/numeric keys to choose just the @@ -115,11 +138,20 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen mPasswordEntry.setKeyListener(TextKeyListener.getInstance()); } else { mPasswordEntry.setKeyListener(DigitsKeyListener.getInstance()); - mTitle.setText(R.string.keyguard_password_enter_pin_password_code); + mStatusView.setInstructionText(R.string.keyguard_password_enter_pin_password_code); } mKeyboardHelper.setVibratePattern(mLockPatternUtils.isTactileFeedbackEnabled() ? com.android.internal.R.array.config_virtualKeyVibePattern : 0); + if (mKeyboardHelperAlpha != null) { + mKeyboardHelperAlpha.setVibratePattern(mLockPatternUtils.isTactileFeedbackEnabled() ? + com.android.internal.R.array.config_virtualKeyVibePattern : 0); + } + + // until we get an update... + mStatusView.setCarrierText(LockScreen.getCarrierString( + mUpdateMonitor.getTelephonyPlmn(), + mUpdateMonitor.getTelephonySpn())); } @Override @@ -140,6 +172,9 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen /** {@inheritDoc} */ public void onResume() { + // reset status + mStatusView.resetStatusInfo(mUpdateMonitor, mLockPatternUtils); + // start fresh mPasswordEntry.setText(""); resetStatusInfo(); @@ -179,9 +214,9 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen long deadline = mLockPatternUtils.setLockoutAttemptDeadline(); handleAttemptLockout(deadline); } - mTitle.setText(R.string.lockscreen_password_wrong); + mStatusView.setInstructionText(R.string.lockscreen_password_wrong); } else if (entry.length() > 0) { - mTitle.setText(R.string.lockscreen_password_wrong); + mStatusView.setInstructionText(R.string.lockscreen_password_wrong); } mPasswordEntry.setText(""); } @@ -199,7 +234,7 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen String instructions = getContext().getString( R.string.lockscreen_too_many_failed_attempts_countdown, secondsRemaining); - mTitle.setText(instructions); + mStatusView.setInstructionText(instructions); } @Override @@ -252,31 +287,40 @@ public class PasswordUnlockScreen extends LinearLayout implements KeyguardScreen return false; } - public void onPhoneStateChanged(String newState) { - mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton); - } + // ---------- InfoCallback + /** {@inheritDoc} */ public void onRefreshBatteryInfo(boolean showBatteryInfo, boolean pluggedIn, int batteryLevel) { + mStatusView.onRefreshBatteryInfo(showBatteryInfo, pluggedIn, batteryLevel); + } + /** {@inheritDoc} */ + public void onTimeChanged() { + mStatusView.onTimeChanged(); } + /** {@inheritDoc} */ public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { - + mStatusView.onRefreshCarrierInfo(plmn, spn); } + /** {@inheritDoc} */ public void onRingerModeChanged(int state) { - + // not currently used } - public void onTimeChanged() { + // ---------- SimStateCallback + /** {@inheritDoc} */ + public void onPhoneStateChanged(String newState) { + mLockPatternUtils.updateEmergencyCallButtonState(mEmergencyCallButton); } private void resetStatusInfo() { if(mIsAlpha) { - mTitle.setText(R.string.keyguard_password_enter_password_code); + mStatusView.setInstructionText(R.string.keyguard_password_enter_password_code); } else { - mTitle.setText(R.string.keyguard_password_enter_pin_password_code); + mStatusView.setInstructionText(R.string.keyguard_password_enter_pin_password_code); } } diff --git a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java index 418e243..35fa3e5 100644 --- a/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java +++ b/policy/src/com/android/internal/policy/impl/PatternUnlockScreen.java @@ -25,9 +25,6 @@ import android.view.View; import android.view.ViewGroup; import android.view.MotionEvent; import android.widget.Button; -import android.widget.TextView; -import android.text.format.DateFormat; -import android.text.TextUtils; import android.util.Log; import com.android.internal.R; import com.android.internal.telephony.IccCard; @@ -37,7 +34,6 @@ import com.android.internal.widget.LockPatternView; import com.android.internal.widget.LockPatternView.Cell; import java.util.List; -import java.util.Date; /** * This is the screen that shows the 9 circle unlock widget and instructs @@ -75,27 +71,7 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient */ private boolean mEnableFallback; - private String mDateFormatString; - - private TextView mCarrier; - private TextView mDate; - - // are we showing battery information? - private boolean mShowingBatteryInfo = false; - - // last known plugged in state - private boolean mPluggedIn = false; - - // last known battery level - private int mBatteryLevel = 100; - - private String mNextAlarm = null; - - private String mInstructions = null; - private TextView mStatus1; - private TextView mStatusSep; - private TextView mStatus2; - + private StatusView mStatusView; private LockPatternView mLockPatternView; @@ -133,15 +109,18 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient private void updateFooter(FooterMode mode) { switch (mode) { case Normal: + Log.d(TAG, "mode normal"); mFooterNormal.setVisibility(View.VISIBLE); mFooterForgotPattern.setVisibility(View.GONE); break; case ForgotLockPattern: + Log.d(TAG, "mode ForgotLockPattern"); mFooterNormal.setVisibility(View.GONE); mFooterForgotPattern.setVisibility(View.VISIBLE); mForgotPatternButton.setVisibility(View.VISIBLE); break; case VerifyUnlocked: + Log.d(TAG, "mode VerifyUnlocked"); mFooterNormal.setVisibility(View.GONE); mFooterForgotPattern.setVisibility(View.GONE); } @@ -180,24 +159,16 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient mCreationOrientation = configuration.orientation; LayoutInflater inflater = LayoutInflater.from(context); + if (mCreationOrientation != Configuration.ORIENTATION_LANDSCAPE) { + Log.d(TAG, "portrait mode"); inflater.inflate(R.layout.keyguard_screen_unlock_portrait, this, true); } else { + Log.d(TAG, "landscape mode"); inflater.inflate(R.layout.keyguard_screen_unlock_landscape, this, true); } - mCarrier = (TextView) findViewById(R.id.carrier); - mDate = (TextView) findViewById(R.id.date); - - mDateFormatString = getContext().getString(R.string.full_wday_month_day_no_year); - refreshTimeAndDateDisplay(); - - mStatus1 = (TextView) findViewById(R.id.status1); - mStatusSep = (TextView) findViewById(R.id.statusSep); - mStatus2 = (TextView) findViewById(R.id.status2); - - resetStatusInfo(); - + mStatusView = new StatusView(this, mUpdateMonitor, mLockPatternUtils); mLockPatternView = (LockPatternView) findViewById(R.id.lockPattern); @@ -249,15 +220,11 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient updateMonitor.registerSimStateCallback(this); setFocusableInTouchMode(true); - // Required to get Marquee to work. - mCarrier.setSelected(true); - mCarrier.setTextColor(0xffffffff); - // until we get an update... - mCarrier.setText( - LockScreen.getCarrierString( + mStatusView.setCarrierText(LockScreen.getCarrierString( mUpdateMonitor.getTelephonyPlmn(), mUpdateMonitor.getTelephonySpn())); + } private void refreshEmergencyButtonText() { @@ -270,88 +237,6 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient mEnableFallback = state; } - private void resetStatusInfo() { - mInstructions = null; - mShowingBatteryInfo = mUpdateMonitor.shouldShowBatteryInfo(); - mPluggedIn = mUpdateMonitor.isDevicePluggedIn(); - mBatteryLevel = mUpdateMonitor.getBatteryLevel(); - mNextAlarm = mLockPatternUtils.getNextAlarm(); - updateStatusLines(); - } - - private void updateStatusLines() { - if (mInstructions != null) { - // instructions only - mStatus1.setText(mInstructions); - if (TextUtils.isEmpty(mInstructions)) { - mStatus1.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); - } else { - mStatus1.setCompoundDrawablesWithIntrinsicBounds( - R.drawable.ic_lock_idle_lock, 0, 0, 0); - } - - mStatus1.setVisibility(View.VISIBLE); - mStatusSep.setVisibility(View.GONE); - mStatus2.setVisibility(View.GONE); - } else if (mShowingBatteryInfo && mNextAlarm == null) { - // battery only - if (mPluggedIn) { - if (mBatteryLevel >= 100) { - mStatus1.setText(getContext().getString(R.string.lockscreen_charged)); - } else { - mStatus1.setText(getContext().getString(R.string.lockscreen_plugged_in, mBatteryLevel)); - } - } else { - mStatus1.setText(getContext().getString(R.string.lockscreen_low_battery)); - } - mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_charging, 0, 0, 0); - - mStatus1.setVisibility(View.VISIBLE); - mStatusSep.setVisibility(View.GONE); - mStatus2.setVisibility(View.GONE); - - } else if (mNextAlarm != null && !mShowingBatteryInfo) { - // alarm only - mStatus1.setText(mNextAlarm); - mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_alarm, 0, 0, 0); - - mStatus1.setVisibility(View.VISIBLE); - mStatusSep.setVisibility(View.GONE); - mStatus2.setVisibility(View.GONE); - } else if (mNextAlarm != null && mShowingBatteryInfo) { - // both battery and next alarm - mStatus1.setText(mNextAlarm); - mStatusSep.setText("|"); - mStatus2.setText(getContext().getString( - R.string.lockscreen_battery_short, - Math.min(100, mBatteryLevel))); - mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_alarm, 0, 0, 0); - if (mPluggedIn) { - mStatus2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_charging, 0, 0, 0); - } else { - mStatus2.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); - } - - mStatus1.setVisibility(View.VISIBLE); - mStatusSep.setVisibility(View.VISIBLE); - mStatus2.setVisibility(View.VISIBLE); - } else { - // nothing specific to show; show general instructions - mStatus1.setText(R.string.lockscreen_pattern_instructions); - mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0, 0, 0); - - mStatus1.setVisibility(View.VISIBLE); - mStatusSep.setVisibility(View.GONE); - mStatus2.setVisibility(View.GONE); - } - } - - - private void refreshTimeAndDateDisplay() { - mDate.setText(DateFormat.format(mDateFormatString, new Date())); - } - - @Override public boolean dispatchTouchEvent(MotionEvent ev) { // as long as the user is entering a pattern (i.e sending a touch @@ -366,25 +251,21 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient return result; } - // ---------- InfoCallback /** {@inheritDoc} */ public void onRefreshBatteryInfo(boolean showBatteryInfo, boolean pluggedIn, int batteryLevel) { - mShowingBatteryInfo = showBatteryInfo; - mPluggedIn = pluggedIn; - mBatteryLevel = batteryLevel; - updateStatusLines(); + mStatusView.onRefreshBatteryInfo(showBatteryInfo, pluggedIn, batteryLevel); } /** {@inheritDoc} */ public void onTimeChanged() { - refreshTimeAndDateDisplay(); + mStatusView.onTimeChanged(); } /** {@inheritDoc} */ public void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { - mCarrier.setText(LockScreen.getCarrierString(plmn, spn)); + mStatusView.onRefreshCarrierInfo(plmn, spn); } /** {@inheritDoc} */ @@ -444,8 +325,8 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient /** {@inheritDoc} */ public void onResume() { - // reset header - resetStatusInfo(); + // reset status + mStatusView.resetStatusInfo(mUpdateMonitor, mLockPatternUtils); // reset lock pattern mLockPatternView.enableInput(); @@ -514,8 +395,8 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient if (mLockPatternUtils.checkPattern(pattern)) { mLockPatternView .setDisplayMode(LockPatternView.DisplayMode.Correct); - mInstructions = ""; - updateStatusLines(); + mStatusView.setInstructions(""); + mStatusView.updateStatusLines(); mCallback.keyguardDone(true); mCallback.reportSuccessfulUnlockAttempt(); } else { @@ -533,8 +414,9 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient handleAttemptLockout(deadline); } else { // TODO mUnlockIcon.setVisibility(View.VISIBLE); - mInstructions = getContext().getString(R.string.lockscreen_pattern_wrong); - updateStatusLines(); + mStatusView.setInstructions( + getContext().getString(R.string.lockscreen_pattern_wrong)); + mStatusView.updateStatusLines(); mLockPatternView.postDelayed( mCancelPatternRunnable, PATTERN_CLEAR_TIMEOUT_MS); @@ -552,17 +434,18 @@ class PatternUnlockScreen extends LinearLayoutWithDefaultTouchRecepient @Override public void onTick(long millisUntilFinished) { int secondsRemaining = (int) (millisUntilFinished / 1000); - mInstructions = getContext().getString( + mStatusView.setInstructions(getContext().getString( R.string.lockscreen_too_many_failed_attempts_countdown, - secondsRemaining); - updateStatusLines(); + secondsRemaining)); + mStatusView.updateStatusLines(); } @Override public void onFinish() { mLockPatternView.setEnabled(true); - mInstructions = getContext().getString(R.string.lockscreen_pattern_instructions); - updateStatusLines(); + mStatusView.setInstructions(getContext().getString( + R.string.lockscreen_pattern_instructions)); + mStatusView.updateStatusLines(); // TODO mUnlockIcon.setVisibility(View.VISIBLE); mFailedPatternAttemptsSinceLastTimeout = 0; if (mEnableFallback) { diff --git a/policy/src/com/android/internal/policy/impl/StatusView.java b/policy/src/com/android/internal/policy/impl/StatusView.java new file mode 100644 index 0000000..3f08cfd --- /dev/null +++ b/policy/src/com/android/internal/policy/impl/StatusView.java @@ -0,0 +1,255 @@ +// Copyright 2010 Google Inc. All Rights Reserved. + +package com.android.internal.policy.impl; + +import com.android.internal.R; +import com.android.internal.widget.LockPatternUtils; + +import java.util.Date; + +import android.content.Context; +import android.graphics.drawable.Drawable; +import android.text.TextUtils; +import android.text.format.DateFormat; +import android.util.Log; +import android.view.View; +import android.widget.TextView; + +class StatusView { + private String mDateFormatString; + + private TextView mCarrier; + private TextView mDate; + + // are we showing battery information? + private boolean mShowingBatteryInfo = false; + + // last known plugged in state + private boolean mPluggedIn = false; + + // last known battery level + private int mBatteryLevel = 100; + + private String mNextAlarm = null; + + private String mInstructions = null; + private TextView mStatus1; + private TextView mStatus2; + private TextView mPropertyOf; + + private boolean mHasStatus2; + private boolean mHasCarrier; + private boolean mHasDate; + private boolean mHasProperty; + + private View mView; + + private View findViewById(int id) { + return mView.findViewById(id); + } + + private Context getContext() { + return mView.getContext(); + } + + void setInstructions(String instructions) { + mInstructions = instructions; + } + + void setCarrierText(CharSequence carrierText) { + if (mCarrier != null) { + mCarrier.setText(carrierText); + } + } + + void onRefreshBatteryInfo(boolean showBatteryInfo, boolean pluggedIn, int batteryLevel) { + mShowingBatteryInfo = showBatteryInfo; + mPluggedIn = pluggedIn; + mBatteryLevel = batteryLevel; + updateStatusLines(); + } + + void onTimeChanged() { + refreshTimeAndDateDisplay(); + } + + public void onRingerModeChanged(int state) { + } + + void onRefreshCarrierInfo(CharSequence plmn, CharSequence spn) { + setCarrierText(LockScreen.getCarrierString(plmn, spn)); + } + + public StatusView(View view, KeyguardUpdateMonitor updateMonitor, + LockPatternUtils lockPatternUtils) { + mView = view; + mCarrier = (TextView) findViewById(R.id.carrier); + mHasCarrier = (mCarrier != null); + mDate = (TextView) findViewById(R.id.date); + mHasDate = (mDate != null); + mDateFormatString = getContext().getString(R.string.full_wday_month_day_no_year); + + refreshTimeAndDateDisplay(); + + mStatus1 = (TextView) findViewById(R.id.status1); + mStatus2 = (TextView) findViewById(R.id.status2); + mHasStatus2 = (mStatus2 != null); + mPropertyOf = (TextView) findViewById(R.id.propertyOf); + mHasProperty = (mPropertyOf != null); + + resetStatusInfo(updateMonitor, lockPatternUtils); + + // Required to get Marquee to work. + if (mHasCarrier) { + mCarrier.setSelected(true); + mCarrier.setTextColor(0xffffffff); + } + + } + + void resetStatusInfo(KeyguardUpdateMonitor updateMonitor, LockPatternUtils lockPatternUtils) { + mInstructions = null; + mShowingBatteryInfo = updateMonitor.shouldShowBatteryInfo(); + mPluggedIn = updateMonitor.isDevicePluggedIn(); + mBatteryLevel = updateMonitor.getBatteryLevel(); + mNextAlarm = lockPatternUtils.getNextAlarm(); + updateStatusLines(); + } + + void setInstructionText(int stringId) { + mStatus1.setText(stringId); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0, 0, 0); + mStatus1.setVisibility(View.VISIBLE); + } + + void setInstructionText(String string) { + mStatus1.setText(string); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0, 0, 0); + mStatus1.setVisibility(View.VISIBLE); + } + + void setCarrierText(int stringId) { + mCarrier.setText(stringId); + } + void setCarrierText(String string) { + mCarrier.setText(string); + } + + /** Originated from PatternUnlockScreen **/ + void updateStatusLines() { + if (mHasProperty) { + // TODO Get actual name & email + String name = "John Smith"; + String email = "jsmith@gmail.com"; + mPropertyOf.setText("Property of:\n" + name + "\n" + email); + mPropertyOf.setVisibility(View.VISIBLE); + } + + if (!mHasStatus2) return; + + if (mInstructions != null) { + // instructions only + mStatus1.setText(mInstructions); + if (TextUtils.isEmpty(mInstructions)) { + mStatus1.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); + } else { + mStatus1.setCompoundDrawablesWithIntrinsicBounds( + R.drawable.ic_lock_idle_lock, 0, 0, 0); + } + + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.INVISIBLE); + } else if (mShowingBatteryInfo && mNextAlarm == null) { + // battery only + if (mPluggedIn) { + if (mBatteryLevel >= 100) { + mStatus1.setText(getContext().getString(R.string.lockscreen_charged)); + } else { + mStatus1.setText(getContext().getString(R.string.lockscreen_plugged_in, + mBatteryLevel)); + } + } else { + mStatus1.setText(getContext().getString(R.string.lockscreen_low_battery)); + } + mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_charging, 0, + 0, 0); + + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.INVISIBLE); + + } else if (mNextAlarm != null && !mShowingBatteryInfo) { + // alarm only + mStatus1.setText(mNextAlarm); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_alarm, 0, + 0, 0); + + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.INVISIBLE); + } else if (mNextAlarm != null && mShowingBatteryInfo) { + // both battery and next alarm + mStatus1.setText(mNextAlarm); + mStatus2.setText(getContext().getString( + R.string.lockscreen_battery_short, + Math.min(100, mBatteryLevel))); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_alarm, 0, + 0, 0); + if (mPluggedIn) { + mStatus2.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_charging, + 0, 0, 0); + } else { + mStatus2.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0); + } + + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.VISIBLE); + } else { + // nothing specific to show; show general instructions + mStatus1.setText(R.string.lockscreen_pattern_instructions); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(R.drawable.ic_lock_idle_lock, 0, + 0, 0); + + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.INVISIBLE); + } + } + + /** Originated from LockScreen **/ + // TODO Merge with function above + void updateStatusLines(boolean showStatusLines, String charging, Drawable chargingIcon, + Drawable alarmIcon) { + if (!showStatusLines || (charging == null && mNextAlarm == null)) { + mStatus1.setVisibility(View.INVISIBLE); + mStatus2.setVisibility(View.INVISIBLE); + } else if (charging != null && mNextAlarm == null) { + // charging only + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.INVISIBLE); + + mStatus1.setText(charging); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(chargingIcon, null, null, null); + } else if (mNextAlarm != null && charging == null) { + // next alarm only + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.INVISIBLE); + + mStatus1.setText(mNextAlarm); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(alarmIcon, null, null, null); + } else if (charging != null && mNextAlarm != null) { + // both charging and next alarm + mStatus1.setVisibility(View.VISIBLE); + mStatus2.setVisibility(View.VISIBLE); + + mStatus1.setText(charging); + mStatus1.setCompoundDrawablesWithIntrinsicBounds(chargingIcon, null, null, null); + mStatus2.setText(mNextAlarm); + mStatus2.setCompoundDrawablesWithIntrinsicBounds(alarmIcon, null, null, null); + } + } + + void refreshTimeAndDateDisplay() { + if (mHasDate) { + mDate.setText(DateFormat.format(mDateFormatString, new Date())); + } + } + +} |
