KeyguardViewStateManager.java revision d6f8960b68c14e7946ff8f8286c484c28296ae39
1b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller/* 2b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * Copyright (C) 2012 The Android Open Source Project 3b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * 4b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 5b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * you may not use this file except in compliance with the License. 6b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * You may obtain a copy of the License at 7b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * 8b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * http://www.apache.org/licenses/LICENSE-2.0 9b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * 10b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * Unless required by applicable law or agreed to in writing, software 11b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * distributed under the License is distributed on an "AS IS" BASIS, 12b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * See the License for the specific language governing permissions and 14b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller * limitations under the License. 15b5f3b707a7010e8d867da9342ea87cf0a1679692Jim Miller */ 16d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Millerpackage com.android.internal.policy.impl.keyguard; 17d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 186fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohenimport android.os.Handler; 196fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohenimport android.os.Looper; 20d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Millerimport android.view.View; 21d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 22d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Millerpublic class KeyguardViewStateManager implements SlidingChallengeLayout.OnChallengeScrolledListener { 23d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 247f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen private KeyguardWidgetPager mKeyguardWidgetPager; 2519a5267003e7dc70100a4bd4f1f449523b2ff38bJim Miller private ChallengeLayout mChallengeLayout; 26d6f8960b68c14e7946ff8f8286c484c28296ae39Adam Cohen private KeyguardHostView mKeyguardHostView; 27d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller private int[] mTmpPoint = new int[2]; 288a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen private int[] mTmpLoc = new int[2]; 298a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen 308a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen private KeyguardSecurityView mKeyguardSecurityContainer; 316fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen private static final int SCREEN_ON_HINT_DURATION = 1000; 3247c6cfaa3799951f999a4d2000cb628080708551Adam Cohen private static final int SCREEN_ON_RING_HINT_DELAY = 300; 336fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen Handler mMainQueue = new Handler(Looper.myLooper()); 34d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 35e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller // transport control states 36e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller static final int TRANSPORT_GONE = 0; 37e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller static final int TRANSPORT_INVISIBLE = 1; 38e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller static final int TRANSPORT_VISIBLE = 2; 39e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller 40e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller private int mTransportState = TRANSPORT_GONE; 41e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller 42e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen int mLastScrollState = SlidingChallengeLayout.SCROLL_STATE_IDLE; 43e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen 44e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // Paged view state 45e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen private int mPageListeningToSlider = -1; 46e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen private int mCurrentPage = -1; 478caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen private int mPageIndexOnPageBeginMoving = -1; 48e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen 49d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller int mChallengeTop = 0; 50d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 51d6f8960b68c14e7946ff8f8286c484c28296ae39Adam Cohen public KeyguardViewStateManager(KeyguardHostView hostView) { 52d6f8960b68c14e7946ff8f8286c484c28296ae39Adam Cohen mKeyguardHostView = hostView; 53d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 54d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 55d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller public void setPagedView(KeyguardWidgetPager pagedView) { 567f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen mKeyguardWidgetPager = pagedView; 577f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen updateEdgeSwiping(); 58d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 59d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 6019a5267003e7dc70100a4bd4f1f449523b2ff38bJim Miller public void setChallengeLayout(ChallengeLayout layout) { 6119a5267003e7dc70100a4bd4f1f449523b2ff38bJim Miller mChallengeLayout = layout; 627f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen updateEdgeSwiping(); 637f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen } 647f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen 657f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen private void updateEdgeSwiping() { 667f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (mChallengeLayout != null && mKeyguardWidgetPager != null) { 677f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (mChallengeLayout.isChallengeOverlapping()) { 687f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen mKeyguardWidgetPager.setOnlyAllowEdgeSwipes(true); 697f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen } else { 707f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen mKeyguardWidgetPager.setOnlyAllowEdgeSwipes(false); 717f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen } 727f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen } 73d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 74d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 759dc9923085c4407268e8b6aa32c06fe30e3a7f7fWinson Chung public boolean isChallengeShowing() { 769dc9923085c4407268e8b6aa32c06fe30e3a7f7fWinson Chung if (mChallengeLayout != null) { 779dc9923085c4407268e8b6aa32c06fe30e3a7f7fWinson Chung return mChallengeLayout.isChallengeShowing(); 789dc9923085c4407268e8b6aa32c06fe30e3a7f7fWinson Chung } 799dc9923085c4407268e8b6aa32c06fe30e3a7f7fWinson Chung return false; 809dc9923085c4407268e8b6aa32c06fe30e3a7f7fWinson Chung } 819dc9923085c4407268e8b6aa32c06fe30e3a7f7fWinson Chung 8270aa528b73fc54fe7896ac1ae349569d83caba59Winson Chung public boolean isChallengeOverlapping() { 8370aa528b73fc54fe7896ac1ae349569d83caba59Winson Chung if (mChallengeLayout != null) { 8470aa528b73fc54fe7896ac1ae349569d83caba59Winson Chung return mChallengeLayout.isChallengeOverlapping(); 8570aa528b73fc54fe7896ac1ae349569d83caba59Winson Chung } 8670aa528b73fc54fe7896ac1ae349569d83caba59Winson Chung return false; 8770aa528b73fc54fe7896ac1ae349569d83caba59Winson Chung } 8870aa528b73fc54fe7896ac1ae349569d83caba59Winson Chung 896fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen public void setSecurityViewContainer(KeyguardSecurityView container) { 906fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen mKeyguardSecurityContainer = container; 916fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen } 926fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen 938caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen public void showBouncer(boolean show) { 948caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen mChallengeLayout.showBouncer(); 958caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen } 968caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen 97c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren public boolean isBouncing() { 98c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren return mChallengeLayout.isBouncing(); 99c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren } 100c0ae9e67ebe6f1298800feaed1b43e867139a904Chris Wren 1018caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen public void fadeOutSecurity(int duration) { 1028caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen ((View) mKeyguardSecurityContainer).animate().alpha(0).setDuration(duration); 1038caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen } 1048caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen 1058caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen public void fadeInSecurity(int duration) { 1068caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen ((View) mKeyguardSecurityContainer).animate().alpha(1f).setDuration(duration); 1078caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen } 1088caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen 109d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller public void onPageBeginMoving() { 1108caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen if (mChallengeLayout.isChallengeOverlapping() && 111db1c5d596e91713132131601536aaad32e693325Adam Cohen mChallengeLayout instanceof SlidingChallengeLayout) { 112db1c5d596e91713132131601536aaad32e693325Adam Cohen SlidingChallengeLayout scl = (SlidingChallengeLayout) mChallengeLayout; 1138caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen scl.fadeOutChallenge(); 1148caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen mPageIndexOnPageBeginMoving = mKeyguardWidgetPager.getCurrentPage(); 115d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 1166fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen if (mHideHintsRunnable != null) { 1176fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen mMainQueue.removeCallbacks(mHideHintsRunnable); 1186fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen mHideHintsRunnable = null; 1196fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen } 120d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 121d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 122d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller public void onPageEndMoving() { 1238caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen mPageIndexOnPageBeginMoving = -1; 12470009e426a39cc2940d264c4fb87a4402c60b0ffAdam Cohen } 12570009e426a39cc2940d264c4fb87a4402c60b0ffAdam Cohen 126bb5c941149b66c0192736468bb60f47984dd5e1fJohn Spurlock public void onPageSwitching(View newPage, int newPageIndex) { 1277f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (mKeyguardWidgetPager != null && mChallengeLayout instanceof SlidingChallengeLayout) { 128bb5c941149b66c0192736468bb60f47984dd5e1fJohn Spurlock boolean isCameraPage = newPage instanceof CameraWidgetFrame; 129bb5c941149b66c0192736468bb60f47984dd5e1fJohn Spurlock ((SlidingChallengeLayout) mChallengeLayout).setChallengeInteractive(!isCameraPage); 130bb5c941149b66c0192736468bb60f47984dd5e1fJohn Spurlock } 1318caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen 1328caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen // If the page we're settling to is the same as we started on, and the action of 1338caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen // moving the page hid the security, we restore it immediately. 1348caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen if (mPageIndexOnPageBeginMoving == mKeyguardWidgetPager.getNextPage() && 1358caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen mChallengeLayout instanceof SlidingChallengeLayout) { 1368caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen SlidingChallengeLayout scl = (SlidingChallengeLayout) mChallengeLayout; 1378caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen scl.fadeInChallenge(); 1388caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen mKeyguardWidgetPager.setWidgetToResetOnPageFadeOut(-1); 1398caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen } 1408caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen mPageIndexOnPageBeginMoving = -1; 141bb5c941149b66c0192736468bb60f47984dd5e1fJohn Spurlock } 142bb5c941149b66c0192736468bb60f47984dd5e1fJohn Spurlock 143bb5c941149b66c0192736468bb60f47984dd5e1fJohn Spurlock public void onPageSwitched(View newPage, int newPageIndex) { 144e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // Reset the previous page size and ensure the current page is sized appropriately. 145e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // We only modify the page state if it is not currently under control by the slider. 146e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // This prevents conflicts. 1474ddcd573dd06a96c32285e34469cae6e7f03109bAdam Cohen 148d6f8960b68c14e7946ff8f8286c484c28296ae39Adam Cohen if (mKeyguardHostView != null) { 149d6f8960b68c14e7946ff8f8286c484c28296ae39Adam Cohen mKeyguardHostView.updateStickyWidget(newPageIndex); 150d6f8960b68c14e7946ff8f8286c484c28296ae39Adam Cohen } 151d6f8960b68c14e7946ff8f8286c484c28296ae39Adam Cohen 1524ddcd573dd06a96c32285e34469cae6e7f03109bAdam Cohen // If the page hasn't switched, don't bother with any of this 15325228801ba76e3419d598d9820007f4af761b3cdAdam Cohen if (mCurrentPage == newPageIndex) return; 1544ddcd573dd06a96c32285e34469cae6e7f03109bAdam Cohen 1557f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (mKeyguardWidgetPager != null && mChallengeLayout != null) { 1567f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen KeyguardWidgetFrame prevPage = mKeyguardWidgetPager.getWidgetPageAt(mCurrentPage); 1578caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen if (prevPage != null && mCurrentPage != mPageListeningToSlider && mCurrentPage 1588caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen != mKeyguardWidgetPager.getWidgetToResetOnPageFadeOut()) { 159e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen prevPage.resetSize(); 160d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 161d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 1627f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen KeyguardWidgetFrame newCurPage = mKeyguardWidgetPager.getWidgetPageAt(newPageIndex); 163e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen boolean challengeOverlapping = mChallengeLayout.isChallengeOverlapping(); 164e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen if (challengeOverlapping && !newCurPage.isSmall() 165e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen && mPageListeningToSlider != newPageIndex) { 1668a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen newCurPage.shrinkWidget(); 167d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 168d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 1698caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen 170e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen mCurrentPage = newPageIndex; 171d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 172d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 173e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen private int getChallengeTopRelativeToFrame(KeyguardWidgetFrame frame, int top) { 174d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller mTmpPoint[0] = 0; 175e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen mTmpPoint[1] = top; 17619a5267003e7dc70100a4bd4f1f449523b2ff38bJim Miller mapPoint((View) mChallengeLayout, frame, mTmpPoint); 177e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen return mTmpPoint[1]; 178e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen } 179e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen 180d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller /** 181d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller * Simple method to map a point from one view's coordinates to another's. Note: this method 182d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller * doesn't account for transforms, so if the views will be transformed, this should not be used. 183d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller * 184d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller * @param fromView The view to which the point is relative 185d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller * @param toView The view into which the point should be mapped 186d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller * @param pt The point 187d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller */ 1888a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen private void mapPoint(View fromView, View toView, int pt[]) { 1898a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen fromView.getLocationInWindow(mTmpLoc); 1908a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen 1918a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen int x = mTmpLoc[0]; 1928a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen int y = mTmpLoc[1]; 193d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 1948a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen toView.getLocationInWindow(mTmpLoc); 1958a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen int vX = mTmpLoc[0]; 1968a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen int vY = mTmpLoc[1]; 197d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 198d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller pt[0] += x - vX; 199d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller pt[1] += y - vY; 200d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 201d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 202d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller @Override 203d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller public void onScrollStateChanged(int scrollState) { 2047f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (mKeyguardWidgetPager == null || mChallengeLayout == null) return; 205e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen boolean challengeOverlapping = mChallengeLayout.isChallengeOverlapping(); 206e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen 207d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller if (scrollState == SlidingChallengeLayout.SCROLL_STATE_IDLE) { 2087f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen KeyguardWidgetFrame frame = mKeyguardWidgetPager.getWidgetPageAt(mPageListeningToSlider); 209e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen if (frame == null) return; 210d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 211e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen if (!challengeOverlapping) { 2127f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (!mKeyguardWidgetPager.isPageMoving()) { 213db1c5d596e91713132131601536aaad32e693325Adam Cohen frame.resetSize(); 214db1c5d596e91713132131601536aaad32e693325Adam Cohen } else { 2158caabadd02c7bef701c44dc1718a9a493cbd1261Adam Cohen mKeyguardWidgetPager.setWidgetToResetOnPageFadeOut(mPageListeningToSlider); 216db1c5d596e91713132131601536aaad32e693325Adam Cohen } 217d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 218e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen frame.hideFrame(this); 2197f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen updateEdgeSwiping(); 220d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 221bbba68a14ab578ab00400d4cf2ed5d1dcf60dbdfJim Miller if (mChallengeLayout.isChallengeShowing()) { 222bbba68a14ab578ab00400d4cf2ed5d1dcf60dbdfJim Miller mKeyguardSecurityContainer.onResume(); 223bbba68a14ab578ab00400d4cf2ed5d1dcf60dbdfJim Miller } else { 224bbba68a14ab578ab00400d4cf2ed5d1dcf60dbdfJim Miller mKeyguardSecurityContainer.onPause(); 225bbba68a14ab578ab00400d4cf2ed5d1dcf60dbdfJim Miller } 226e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen mPageListeningToSlider = -1; 227e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen } else if (mLastScrollState == SlidingChallengeLayout.SCROLL_STATE_IDLE) { 228e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // Whether dragging or settling, if the last state was idle, we use this signal 229e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // to update the current page who will receive events from the sliding challenge. 230e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // We resize the frame as appropriate. 2317f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen mPageListeningToSlider = mKeyguardWidgetPager.getNextPage(); 2327f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen KeyguardWidgetFrame frame = mKeyguardWidgetPager.getWidgetPageAt(mPageListeningToSlider); 233e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen if (frame == null) return; 234e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen 235e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen frame.showFrame(this); 236e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen 237e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // As soon as the security begins sliding, the widget becomes small (if it wasn't 238e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // small to begin with). 239e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen if (!frame.isSmall()) { 240e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen // We need to fetch the final page, in case the pages are in motion. 2417f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen mPageListeningToSlider = mKeyguardWidgetPager.getNextPage(); 2428a7785c7aa2df74203276299e10b0d9056cd0560Adam Cohen frame.shrinkWidget(); 243e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen } 244bbba68a14ab578ab00400d4cf2ed5d1dcf60dbdfJim Miller // View is on the move. Pause the security view until it completes. 245bbba68a14ab578ab00400d4cf2ed5d1dcf60dbdfJim Miller mKeyguardSecurityContainer.onPause(); 246d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 247e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen mLastScrollState = scrollState; 248e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen } 249e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen 250e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen @Override 251e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen public void onScrollPositionChanged(float scrollPosition, int challengeTop) { 252e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen mChallengeTop = challengeTop; 2537f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen KeyguardWidgetFrame frame = mKeyguardWidgetPager.getWidgetPageAt(mPageListeningToSlider); 2547f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (frame != null && !mKeyguardWidgetPager.isPageMoving()) { 255e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen frame.adjustFrame(getChallengeTopRelativeToFrame(frame, mChallengeTop)); 256e3643138c89d49a01ba6a622ffaf71c9a95d5cdcAdam Cohen } 257d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller } 258d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller 259196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen private Runnable mHideHintsRunnable = new Runnable() { 260196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen @Override 261196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen public void run() { 2627f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen if (mKeyguardWidgetPager != null) { 2637f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen mKeyguardWidgetPager.hideOutlinesAndSidePages(); 264196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen } 265196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen } 266196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen }; 267196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen 2686fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen public void showUsabilityHints() { 26947c6cfaa3799951f999a4d2000cb628080708551Adam Cohen mMainQueue.postDelayed( new Runnable() { 27047c6cfaa3799951f999a4d2000cb628080708551Adam Cohen @Override 27147c6cfaa3799951f999a4d2000cb628080708551Adam Cohen public void run() { 27247c6cfaa3799951f999a4d2000cb628080708551Adam Cohen mKeyguardSecurityContainer.showUsabilityHint(); 27347c6cfaa3799951f999a4d2000cb628080708551Adam Cohen } 27447c6cfaa3799951f999a4d2000cb628080708551Adam Cohen } , SCREEN_ON_RING_HINT_DELAY); 2757f6bb6e460ad7f76742348144b8b1d0dfb3074b3Adam Cohen mKeyguardWidgetPager.showInitialPageHints(); 276196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen if (mHideHintsRunnable != null) { 277196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen mMainQueue.postDelayed(mHideHintsRunnable, SCREEN_ON_HINT_DURATION); 278196cde973fd1635f0ac3150caab40287aacb9846Adam Cohen } 2796fb841fa219eaae3e87f2fdc05e105d7a1813c42Adam Cohen } 280e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller 281e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller public void setTransportState(int state) { 282e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller mTransportState = state; 283e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller } 284e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller 285e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller public int getTransportState() { 286e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller return mTransportState; 287e0566da2dab8c3b9ddca43131f21ef58b79049c8Jim Miller } 288d6523da1ad7bae805a3dbea8d7b398d86cd3c181Jim Miller} 289