Loading policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java +84 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Handler; import android.os.SystemClock; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; Loading @@ -32,10 +33,11 @@ import android.widget.ImageView.ScaleType; import com.android.internal.policy.impl.keyguard.KeyguardActivityLauncher.CameraWidgetInfo; public class CameraWidgetFrame extends KeyguardWidgetFrame { public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnClickListener { private static final String TAG = CameraWidgetFrame.class.getSimpleName(); private static final boolean DEBUG = KeyguardHostView.DEBUG; private static final int WIDGET_ANIMATION_DURATION = 250; private static final int WIDGET_WAIT_DURATION = 650; interface Callbacks { void onLaunchingCamera(); Loading @@ -49,6 +51,10 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { private View mWidgetView; private long mLaunchCameraStart; private boolean mRendered; private boolean mActive; private boolean mChallengeActive; private boolean mTransitioning; private boolean mDown; private final Runnable mLaunchCameraRunnable = new Runnable() { @Override Loading @@ -63,6 +69,12 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { render(); }}; private final Runnable mTransitionToCameraRunnable = new Runnable() { @Override public void run() { transitionToCamera(); }}; private CameraWidgetFrame(Context context, Callbacks callbacks, KeyguardActivityLauncher activityLauncher) { super(context); Loading Loading @@ -93,10 +105,12 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { CameraWidgetFrame cameraWidgetFrame = new CameraWidgetFrame(context, callbacks, launcher); cameraWidgetFrame.addView(preview); cameraWidgetFrame.mWidgetView = widgetView; preview.setOnClickListener(cameraWidgetFrame); return cameraWidgetFrame; } private static View inflateWidgetView(Context context, CameraWidgetInfo widgetInfo) { if (DEBUG) Log.d(TAG, "inflateWidgetView: " + widgetInfo.contextPackage); View widgetView = null; Exception exception = null; try { Loading @@ -118,6 +132,7 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { } private static View inflateGenericWidgetView(Context context) { if (DEBUG) Log.d(TAG, "inflateGenericWidgetView"); ImageView iv = new ImageView(context); iv.setImageResource(com.android.internal.R.drawable.ic_lockscreen_camera); iv.setScaleType(ScaleType.CENTER); Loading Loading @@ -154,6 +169,9 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { } private void transitionToCamera() { if (mTransitioning || mChallengeActive || mDown) return; if (DEBUG) Log.d(TAG, "Transitioning to camera..."); mTransitioning = true; int startWidth = getChildAt(0).getWidth(); int startHeight = getChildAt(0).getHeight(); Loading @@ -173,11 +191,22 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { mCallbacks.onLaunchingCamera(); } @Override public void onClick(View v) { if (DEBUG) Log.d(TAG, "clicked"); if (mTransitioning) return; if (mActive && !mChallengeActive) { cancelTransitionToCamera(); transitionToCamera(); } } @Override public void onWindowFocusChanged(boolean hasWindowFocus) { super.onWindowFocusChanged(hasWindowFocus); if (DEBUG) Log.d(TAG, "onWindowFocusChanged: " + hasWindowFocus); if (!hasWindowFocus) { mTransitioning = false; if (mLaunchCameraStart > 0) { long launchTime = SystemClock.uptimeMillis() - mLaunchCameraStart; if (DEBUG) Log.d(TAG, String.format("Camera took %sms to launch", launchTime)); Loading @@ -189,23 +218,69 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { @Override public void onActive(boolean isActive) { if (isActive) { mHandler.post(new Runnable(){ @Override public void run() { transitionToCamera(); }}); mActive = isActive; if (mActive) { rescheduleTransitionToCamera(); } else { reset(); } } @Override public boolean onUserInteraction(int action) { if (mTransitioning) return true; if (DEBUG) Log.d(TAG, "onUserInteraction " + action); mDown = action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE; if (mActive && !mChallengeActive) { rescheduleTransitionToCamera(); } return false; } @Override protected void onFocusLost() { Log.d(TAG, "onFocusLost"); cancelTransitionToCamera(); super.onFocusLost(); } @Override public void onChallengeActive(boolean challengeActive) { if (DEBUG) Log.d(TAG, "onChallengeActive: " + challengeActive); mChallengeActive = challengeActive; if (mTransitioning) return; if (mActive) { if (mChallengeActive) { cancelTransitionToCamera(); } else { rescheduleTransitionToCamera(); } } } private void rescheduleTransitionToCamera() { if (DEBUG) Log.d(TAG, "rescheduleTransitionToCamera at " + SystemClock.uptimeMillis()); mHandler.removeCallbacks(mTransitionToCameraRunnable); mHandler.postDelayed(mTransitionToCameraRunnable, WIDGET_WAIT_DURATION); } private void cancelTransitionToCamera() { if (DEBUG) Log.d(TAG, "cancelTransitionToCamera at " + SystemClock.uptimeMillis()); mHandler.removeCallbacks(mTransitionToCameraRunnable); } private void onCameraLaunched() { reset(); mCallbacks.onCameraLaunched(); reset(); } private void reset() { if (DEBUG) Log.d(TAG, "reset"); mLaunchCameraStart = 0; mTransitioning = false; mChallengeActive = false; mDown = false; cancelTransitionToCamera(); animate().cancel(); setScaleX(1); setScaleY(1); Loading policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +3 −3 Original line number Diff line number Diff line Loading @@ -835,14 +835,14 @@ public class KeyguardHostView extends KeyguardViewBase { @Override public void onCameraLaunched() { if (isCameraPage(mAppWidgetContainer.getCurrentPage())) { mAppWidgetContainer.scrollLeft(); } SlidingChallengeLayout slider = locateSlider(); if (slider != null) { slider.showHandle(true); slider.showChallenge(true); } if (isCameraPage(mAppWidgetContainer.getCurrentPage())) { mAppWidgetContainer.scrollLeft(); } } private SlidingChallengeLayout locateSlider() { Loading policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,7 @@ public class KeyguardViewStateManager implements SlidingChallengeLayout.OnChalle if (!challengeOverlapping) { frame.resetSize(); } frame.onChallengeActive(mChallengeLayout.isChallengeShowing()); frame.hideFrame(this); if (challengeOverlapping) { Loading Loading @@ -174,6 +175,8 @@ public class KeyguardViewStateManager implements SlidingChallengeLayout.OnChalle } // View is on the move. Pause the security view until it completes. mKeyguardSecurityContainer.onPause(); frame.onChallengeActive(true); } mLastScrollState = scrollState; } Loading policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java +9 −0 Original line number Diff line number Diff line Loading @@ -366,4 +366,13 @@ public class KeyguardWidgetFrame extends FrameLayout { public void onActive(boolean isActive) { // hook for subclasses } public boolean onUserInteraction(int action) { // hook for subclasses return false; } public void onChallengeActive(boolean challengeActive) { // hook for subclasses } } policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java +9 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,15 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } } @Override public boolean onTouchEvent(MotionEvent ev) { KeyguardWidgetFrame currentWidgetPage = getWidgetPageAt(getCurrentPage()); if (currentWidgetPage != null && currentWidgetPage.onUserInteraction(ev.getAction())) { return true; } return super.onTouchEvent(ev); } public void showPagingFeedback() { // Nothing yet. } Loading Loading
policy/src/com/android/internal/policy/impl/keyguard/CameraWidgetFrame.java +84 −9 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ import android.os.Handler; import android.os.SystemClock; import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; Loading @@ -32,10 +33,11 @@ import android.widget.ImageView.ScaleType; import com.android.internal.policy.impl.keyguard.KeyguardActivityLauncher.CameraWidgetInfo; public class CameraWidgetFrame extends KeyguardWidgetFrame { public class CameraWidgetFrame extends KeyguardWidgetFrame implements View.OnClickListener { private static final String TAG = CameraWidgetFrame.class.getSimpleName(); private static final boolean DEBUG = KeyguardHostView.DEBUG; private static final int WIDGET_ANIMATION_DURATION = 250; private static final int WIDGET_WAIT_DURATION = 650; interface Callbacks { void onLaunchingCamera(); Loading @@ -49,6 +51,10 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { private View mWidgetView; private long mLaunchCameraStart; private boolean mRendered; private boolean mActive; private boolean mChallengeActive; private boolean mTransitioning; private boolean mDown; private final Runnable mLaunchCameraRunnable = new Runnable() { @Override Loading @@ -63,6 +69,12 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { render(); }}; private final Runnable mTransitionToCameraRunnable = new Runnable() { @Override public void run() { transitionToCamera(); }}; private CameraWidgetFrame(Context context, Callbacks callbacks, KeyguardActivityLauncher activityLauncher) { super(context); Loading Loading @@ -93,10 +105,12 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { CameraWidgetFrame cameraWidgetFrame = new CameraWidgetFrame(context, callbacks, launcher); cameraWidgetFrame.addView(preview); cameraWidgetFrame.mWidgetView = widgetView; preview.setOnClickListener(cameraWidgetFrame); return cameraWidgetFrame; } private static View inflateWidgetView(Context context, CameraWidgetInfo widgetInfo) { if (DEBUG) Log.d(TAG, "inflateWidgetView: " + widgetInfo.contextPackage); View widgetView = null; Exception exception = null; try { Loading @@ -118,6 +132,7 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { } private static View inflateGenericWidgetView(Context context) { if (DEBUG) Log.d(TAG, "inflateGenericWidgetView"); ImageView iv = new ImageView(context); iv.setImageResource(com.android.internal.R.drawable.ic_lockscreen_camera); iv.setScaleType(ScaleType.CENTER); Loading Loading @@ -154,6 +169,9 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { } private void transitionToCamera() { if (mTransitioning || mChallengeActive || mDown) return; if (DEBUG) Log.d(TAG, "Transitioning to camera..."); mTransitioning = true; int startWidth = getChildAt(0).getWidth(); int startHeight = getChildAt(0).getHeight(); Loading @@ -173,11 +191,22 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { mCallbacks.onLaunchingCamera(); } @Override public void onClick(View v) { if (DEBUG) Log.d(TAG, "clicked"); if (mTransitioning) return; if (mActive && !mChallengeActive) { cancelTransitionToCamera(); transitionToCamera(); } } @Override public void onWindowFocusChanged(boolean hasWindowFocus) { super.onWindowFocusChanged(hasWindowFocus); if (DEBUG) Log.d(TAG, "onWindowFocusChanged: " + hasWindowFocus); if (!hasWindowFocus) { mTransitioning = false; if (mLaunchCameraStart > 0) { long launchTime = SystemClock.uptimeMillis() - mLaunchCameraStart; if (DEBUG) Log.d(TAG, String.format("Camera took %sms to launch", launchTime)); Loading @@ -189,23 +218,69 @@ public class CameraWidgetFrame extends KeyguardWidgetFrame { @Override public void onActive(boolean isActive) { if (isActive) { mHandler.post(new Runnable(){ @Override public void run() { transitionToCamera(); }}); mActive = isActive; if (mActive) { rescheduleTransitionToCamera(); } else { reset(); } } @Override public boolean onUserInteraction(int action) { if (mTransitioning) return true; if (DEBUG) Log.d(TAG, "onUserInteraction " + action); mDown = action == MotionEvent.ACTION_DOWN || action == MotionEvent.ACTION_MOVE; if (mActive && !mChallengeActive) { rescheduleTransitionToCamera(); } return false; } @Override protected void onFocusLost() { Log.d(TAG, "onFocusLost"); cancelTransitionToCamera(); super.onFocusLost(); } @Override public void onChallengeActive(boolean challengeActive) { if (DEBUG) Log.d(TAG, "onChallengeActive: " + challengeActive); mChallengeActive = challengeActive; if (mTransitioning) return; if (mActive) { if (mChallengeActive) { cancelTransitionToCamera(); } else { rescheduleTransitionToCamera(); } } } private void rescheduleTransitionToCamera() { if (DEBUG) Log.d(TAG, "rescheduleTransitionToCamera at " + SystemClock.uptimeMillis()); mHandler.removeCallbacks(mTransitionToCameraRunnable); mHandler.postDelayed(mTransitionToCameraRunnable, WIDGET_WAIT_DURATION); } private void cancelTransitionToCamera() { if (DEBUG) Log.d(TAG, "cancelTransitionToCamera at " + SystemClock.uptimeMillis()); mHandler.removeCallbacks(mTransitionToCameraRunnable); } private void onCameraLaunched() { reset(); mCallbacks.onCameraLaunched(); reset(); } private void reset() { if (DEBUG) Log.d(TAG, "reset"); mLaunchCameraStart = 0; mTransitioning = false; mChallengeActive = false; mDown = false; cancelTransitionToCamera(); animate().cancel(); setScaleX(1); setScaleY(1); Loading
policy/src/com/android/internal/policy/impl/keyguard/KeyguardHostView.java +3 −3 Original line number Diff line number Diff line Loading @@ -835,14 +835,14 @@ public class KeyguardHostView extends KeyguardViewBase { @Override public void onCameraLaunched() { if (isCameraPage(mAppWidgetContainer.getCurrentPage())) { mAppWidgetContainer.scrollLeft(); } SlidingChallengeLayout slider = locateSlider(); if (slider != null) { slider.showHandle(true); slider.showChallenge(true); } if (isCameraPage(mAppWidgetContainer.getCurrentPage())) { mAppWidgetContainer.scrollLeft(); } } private SlidingChallengeLayout locateSlider() { Loading
policy/src/com/android/internal/policy/impl/keyguard/KeyguardViewStateManager.java +3 −0 Original line number Diff line number Diff line Loading @@ -140,6 +140,7 @@ public class KeyguardViewStateManager implements SlidingChallengeLayout.OnChalle if (!challengeOverlapping) { frame.resetSize(); } frame.onChallengeActive(mChallengeLayout.isChallengeShowing()); frame.hideFrame(this); if (challengeOverlapping) { Loading Loading @@ -174,6 +175,8 @@ public class KeyguardViewStateManager implements SlidingChallengeLayout.OnChalle } // View is on the move. Pause the security view until it completes. mKeyguardSecurityContainer.onPause(); frame.onChallengeActive(true); } mLastScrollState = scrollState; } Loading
policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetFrame.java +9 −0 Original line number Diff line number Diff line Loading @@ -366,4 +366,13 @@ public class KeyguardWidgetFrame extends FrameLayout { public void onActive(boolean isActive) { // hook for subclasses } public boolean onUserInteraction(int action) { // hook for subclasses return false; } public void onChallengeActive(boolean challengeActive) { // hook for subclasses } }
policy/src/com/android/internal/policy/impl/keyguard/KeyguardWidgetPager.java +9 −0 Original line number Diff line number Diff line Loading @@ -131,6 +131,15 @@ public class KeyguardWidgetPager extends PagedView implements PagedView.PageSwit } } @Override public boolean onTouchEvent(MotionEvent ev) { KeyguardWidgetFrame currentWidgetPage = getWidgetPageAt(getCurrentPage()); if (currentWidgetPage != null && currentWidgetPage.onUserInteraction(ev.getAction())) { return true; } return super.onTouchEvent(ev); } public void showPagingFeedback() { // Nothing yet. } Loading