summaryrefslogtreecommitdiff
path: root/phone/com/android/internal/policy/impl/LockPatternKeyguardView.java
diff options
context:
space:
mode:
authorJim Miller <jaggies@google.com>2010-01-15 16:39:16 -0800
committerJim Miller <jaggies@google.com>2010-01-15 16:39:16 -0800
commit607d068f82823c6acdf01c5be9628effa4fc7488 (patch)
treea196af40c4e93be5c2969a5d6dc64d5e71530858 /phone/com/android/internal/policy/impl/LockPatternKeyguardView.java
parent27517b2158a7fcdae13ff02d4cbefa79afbdb838 (diff)
downloadbase-607d068f82823c6acdf01c5be9628effa4fc7488.tar.gz
Fix for 2292713: Remove workaround that hides SlidingTab widget while internal state is inconsistent.
The previous workaround for this race condition prevented glitches by postponing drawing the SlidingTab until the internal state was consistent. Unfortunately, the InCallScreen seems to trigger this most of the time if the keyboard is open or the last application was in landscape mode. Instead, we'll handle this separately in lockscreen.
Diffstat (limited to 'phone/com/android/internal/policy/impl/LockPatternKeyguardView.java')
-rw-r--r--phone/com/android/internal/policy/impl/LockPatternKeyguardView.java38
1 files changed, 36 insertions, 2 deletions
diff --git a/phone/com/android/internal/policy/impl/LockPatternKeyguardView.java b/phone/com/android/internal/policy/impl/LockPatternKeyguardView.java
index 00dc929..85918fb 100644
--- a/phone/com/android/internal/policy/impl/LockPatternKeyguardView.java
+++ b/phone/com/android/internal/policy/impl/LockPatternKeyguardView.java
@@ -29,6 +29,7 @@ import android.accounts.OperationCanceledException;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Configuration;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.ColorFilter;
@@ -40,6 +41,7 @@ import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
+import android.view.ViewGroup;
import android.view.WindowManager;
import java.io.IOException;
@@ -139,6 +141,8 @@ public class LockPatternKeyguardView extends KeyguardViewBase
*/
private final LockPatternUtils mLockPatternUtils;
+ private boolean mIsPortrait;
+
/**
* @return Whether we are stuck on the lock screen because the sim is
* missing.
@@ -266,7 +270,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase
public void reportFailedPatternAttempt() {
mUpdateMonitor.reportFailedAttempt();
final int failedAttempts = mUpdateMonitor.getFailedAttempts();
- if (DEBUG) Log.d(TAG,
+ if (DEBUG) Log.d(TAG,
"reportFailedPatternAttempt: #" + failedAttempts +
" (enableFallback=" + mEnableFallback + ")");
if (mEnableFallback && failedAttempts ==
@@ -307,7 +311,7 @@ public class LockPatternKeyguardView extends KeyguardViewBase
mLockScreen = createLockScreen();
addView(mLockScreen);
final UnlockMode unlockMode = getUnlockMode();
- if (DEBUG) Log.d(TAG,
+ if (DEBUG) Log.d(TAG,
"LockPatternKeyguardView ctor: about to createUnlockScreenFor; mEnableFallback="
+ mEnableFallback);
mUnlockScreen = createUnlockScreenFor(unlockMode);
@@ -334,6 +338,33 @@ public class LockPatternKeyguardView extends KeyguardViewBase
}
+ // TODO:
+ // This overloaded method was added to workaround a race condition in the framework between
+ // notification for orientation changed, layout() and switching resources. This code attempts
+ // to avoid drawing the incorrect layout while things are in transition. The method can just
+ // be removed once the race condition is fixed. See bugs 2262578 and 2292713.
+ @Override
+ protected void dispatchDraw(Canvas canvas) {
+ final int orientation = getResources().getConfiguration().orientation;
+ if (mIsPortrait && Configuration.ORIENTATION_PORTRAIT != orientation
+ || getResources().getBoolean(R.bool.lockscreen_isPortrait) != mIsPortrait) {
+ // Make sure we redraw once things settle down.
+ // Log.v(TAG, "dispatchDraw(): not drawing because state is inconsistent");
+ postInvalidate();
+
+ // In order to minimize flashing, draw the first child's background for now.
+ ViewGroup view = (ViewGroup) (mMode == Mode.LockScreen ? mLockScreen : mUnlockScreen);
+ if (view != null && view.getChildAt(0) != null) {
+ Drawable background = view.getChildAt(0).getBackground();
+ if (background != null) {
+ background.draw(canvas);
+ }
+ }
+ return;
+ }
+ super.dispatchDraw(canvas);
+ }
+
@Override
public void reset() {
mIsVerifyUnlockOnly = false;
@@ -482,6 +513,9 @@ public class LockPatternKeyguardView extends KeyguardViewBase
}
View createUnlockScreenFor(UnlockMode unlockMode) {
+ // Capture the orientation this layout was created in.
+ mIsPortrait = getResources().getBoolean(R.bool.lockscreen_isPortrait);
+
if (unlockMode == UnlockMode.Pattern) {
UnlockScreen view = new UnlockScreen(
mContext,