diff options
author | Jim Miller <jaggies@google.com> | 2012-09-10 18:13:57 -0700 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-09-10 18:13:57 -0700 |
commit | eeabf942263d55eb9b1ac0b9a525bd917cfc1f30 (patch) | |
tree | 24167a1313e499ee8faba37efff378d6cf3c4187 /policy | |
parent | 5bf7800de6d14a55d0c6ee006425fa79c3f8d21e (diff) | |
parent | 5737534abab477cf32b4dd0aa7a72f70ede0502c (diff) | |
download | frameworks_base-eeabf942263d55eb9b1ac0b9a525bd917cfc1f30.zip frameworks_base-eeabf942263d55eb9b1ac0b9a525bd917cfc1f30.tar.gz frameworks_base-eeabf942263d55eb9b1ac0b9a525bd917cfc1f30.tar.bz2 |
Merge "Allow pattern to start from outside pattern view" into jb-mr1-dev
Diffstat (limited to 'policy')
4 files changed, 86 insertions, 9 deletions
diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java index e170ec1..863f4f8 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java @@ -32,17 +32,17 @@ import android.content.SharedPreferences; import android.content.pm.UserInfo; import android.content.res.Resources; import android.graphics.Canvas; +import android.graphics.Rect; import android.os.UserManager; -import android.telephony.TelephonyManager; import android.util.AttributeSet; import android.util.Log; import android.util.Slog; import android.view.KeyEvent; import android.view.LayoutInflater; +import android.view.MotionEvent; import android.view.View; import android.view.WindowManager; import android.view.animation.AnimationUtils; -import android.widget.Button; import android.widget.RemoteViews.OnClickHandler; import android.widget.ViewFlipper; @@ -51,7 +51,6 @@ import com.android.internal.policy.impl.keyguard.KeyguardSecurityModel.SecurityM import com.android.internal.widget.LockPatternUtils; import java.io.File; -import java.util.ArrayList; import java.util.List; public class KeyguardHostView extends KeyguardViewBase { @@ -77,6 +76,8 @@ public class KeyguardHostView extends KeyguardViewBase { private KeyguardSecurityModel mSecurityModel; + private Rect mTempRect = new Rect(); + public KeyguardHostView(Context context) { this(context, null); } @@ -94,6 +95,17 @@ public class KeyguardHostView extends KeyguardViewBase { } @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + boolean result = super.dispatchTouchEvent(ev); + mTempRect.set(0, 0, 0, 0); + offsetRectIntoDescendantCoords(mSecurityViewContainer, mTempRect); + ev.offsetLocation(mTempRect.left, mTempRect.top); + result = mSecurityViewContainer.dispatchTouchEvent(ev) || result; + ev.offsetLocation(-mTempRect.left, -mTempRect.top); + return result; + } + + @Override protected void dispatchDraw(Canvas canvas) { super.dispatchDraw(canvas); mViewMediatorCallback.keyguardDoneDrawing(); diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPatternView.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPatternView.java index 3a32b5b..6de40e4 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPatternView.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardPatternView.java @@ -22,6 +22,7 @@ import android.accounts.AccountManagerFuture; import android.accounts.AuthenticatorException; import android.accounts.OperationCanceledException; import android.content.Context; +import android.graphics.Rect; import android.os.Bundle; import android.os.CountDownTimer; import android.os.SystemClock; @@ -31,7 +32,7 @@ import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.Button; -import android.widget.LinearLayout; +import android.widget.GridLayout; import com.android.internal.widget.LockPatternUtils; import com.android.internal.widget.LockPatternView; @@ -40,7 +41,7 @@ import com.android.internal.R; import java.io.IOException; import java.util.List; -public class KeyguardPatternView extends LinearLayout implements KeyguardSecurityView { +public class KeyguardPatternView extends GridLayout implements KeyguardSecurityView { private static final String TAG = "SecurityPatternView"; private static final boolean DEBUG = false; @@ -83,6 +84,7 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit mLockPatternView.clearPattern(); } }; + private Rect mTempRect = new Rect(); enum FooterMode { Normal, @@ -156,13 +158,18 @@ public class KeyguardPatternView extends LinearLayout implements KeyguardSecurit @Override public boolean dispatchTouchEvent(MotionEvent ev) { - final boolean result = super.dispatchTouchEvent(ev); + boolean result = super.dispatchTouchEvent(ev); // as long as the user is entering a pattern (i.e sending a touch event that was handled // by this screen), keep poking the wake lock so that the screen will stay on. final long elapsed = SystemClock.elapsedRealtime() - mLastPokeTime; if (result && (elapsed > (UNLOCK_PATTERN_WAKE_INTERVAL_MS - 100))) { mLastPokeTime = SystemClock.elapsedRealtime(); } + mTempRect.set(0, 0, 0, 0); + offsetRectIntoDescendantCoords(mLockPatternView, mTempRect); + ev.offsetLocation(mTempRect.left, mTempRect.top); + result = mLockPatternView.dispatchTouchEvent(ev) || result; + ev.offsetLocation(-mTempRect.left, -mTempRect.top); return result; } diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityViewFlipper.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityViewFlipper.java new file mode 100644 index 0000000..911cfe0 --- /dev/null +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardSecurityViewFlipper.java @@ -0,0 +1,58 @@ +/* + * Copyright (C) 2012 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. + */ + +package com.android.internal.policy.impl.keyguard; + +import android.content.Context; +import android.graphics.Rect; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.ViewFlipper; + +/** + * Subclass of the current view flipper that allows us to overload dispatchTouchEvent() so + * we can emulate {@link WindowManager.LayoutParams#FLAG_SLIPPERY} within a view hierarchy. + * + */ +public class KeyguardSecurityViewFlipper extends ViewFlipper { + private Rect mTempRect = new Rect(); + + public KeyguardSecurityViewFlipper(Context context) { + this(context, null); + } + + public KeyguardSecurityViewFlipper(Context context, AttributeSet attr) { + super(context, attr); + } + + @Override + public boolean dispatchTouchEvent(MotionEvent ev) { + boolean result = super.dispatchTouchEvent(ev); + mTempRect.set(0, 0, 0, 0); + for (int i = 0; i < getChildCount(); i++) { + View child = getChildAt(i); + if (child.getVisibility() == View.VISIBLE) { + offsetRectIntoDescendantCoords(child, mTempRect); + ev.offsetLocation(mTempRect.left, mTempRect.top); + result = child.dispatchTouchEvent(ev) || result; + ev.offsetLocation(-mTempRect.left, -mTempRect.top); + } + } + return result; + } + +} diff --git a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java index 66c7c10..c48e2d7 100644 --- a/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java +++ b/policy/src/com/android/internal/policy/impl/keyguard/KeyguardUpdateMonitor.java @@ -73,9 +73,9 @@ public class KeyguardUpdateMonitor { private static final int MSG_PHONE_STATE_CHANGED = 306; private static final int MSG_CLOCK_VISIBILITY_CHANGED = 307; private static final int MSG_DEVICE_PROVISIONED = 308; - protected static final int MSG_DPM_STATE_CHANGED = 309; - protected static final int MSG_USER_SWITCHED = 310; - protected static final int MSG_USER_REMOVED = 311; + private static final int MSG_DPM_STATE_CHANGED = 309; + private static final int MSG_USER_SWITCHED = 310; + private static final int MSG_USER_REMOVED = 311; private static KeyguardUpdateMonitor sInstance; |