DelegateViewHelper.java revision 354619c1cc1b4668c81c5368b2256335cc9e8538
1e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller/* 2e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * Copyright (C) 2010 The Android Open Source Project 3e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * 4e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 5e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * you may not use this file except in compliance with the License. 6e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * You may obtain a copy of the License at 7e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * 8e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * http://www.apache.org/licenses/LICENSE-2.0 9e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * 10e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * Unless required by applicable law or agreed to in writing, software 11e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * distributed under the License is distributed on an "AS IS" BASIS, 12e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * See the License for the specific language governing permissions and 14e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller * limitations under the License. 15e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller */ 16e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 17e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Millerpackage com.android.systemui.statusbar; 18e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 19354619c1cc1b4668c81c5368b2256335cc9e8538Jim Millerimport android.util.Slog; 20e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Millerimport android.view.MotionEvent; 21e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Millerimport android.view.Surface; 22e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Millerimport android.view.View; 23e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 24354619c1cc1b4668c81c5368b2256335cc9e8538Jim Millerimport com.android.systemui.R; 25354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller 26e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Millerpublic class DelegateViewHelper { 27e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller private View mDelegateView; 28e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller private View mSourceView; 29e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller private BaseStatusBar mBar; 30e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller private int[] mTempPoint = new int[2]; 31354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller private float[] mDownPoint = new float[2]; 32e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller private int mOrientation; 33354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller private float mTriggerThreshhold; 34e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 35e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller public DelegateViewHelper(View sourceView) { 36e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mSourceView = sourceView; 37354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller if (mSourceView != null) { 38354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller mTriggerThreshhold = mSourceView.getContext().getResources() 39354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller .getDimension(R.dimen.navbar_search_up_threshhold); 40354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller } 41e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 42e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 43e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller public void setDelegateView(View view) { 44e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mDelegateView = view; 45e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 46e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 47e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller public void setBar(BaseStatusBar phoneStatusBar) { 48e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mBar = phoneStatusBar; 49e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 50e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 51e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller public void setOrientation(int orientation) { 52e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mOrientation = orientation; 53e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 54e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 55e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller public boolean onInterceptTouchEvent(MotionEvent event) { 56e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller switch (event.getAction()) { 57e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller case MotionEvent.ACTION_DOWN: 58354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller mDownPoint[0] = event.getX(); 59354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller mDownPoint[1] = event.getY(); 60e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller break; 61e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 62354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller if (mDelegateView != null) { 63354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller if (mDelegateView.getVisibility() != View.VISIBLE && event.getAction() != MotionEvent.ACTION_CANCEL) { 64e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller final boolean isVertical = (mOrientation == Surface.ROTATION_90 65e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller || mOrientation == Surface.ROTATION_270); 66354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller final int historySize = event.getHistorySize(); 67354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller for (int k = 0; k < historySize + 1; k++) { 68354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller float x = k < historySize ? event.getHistoricalX(k) : event.getX(); 69354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller float y = k < historySize ? event.getHistoricalY(k) : event.getY(); 70354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller final float distance = isVertical ? (mDownPoint[0] - x) : (mDownPoint[1] - y); 71354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller if (distance > mTriggerThreshhold) { 72e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mBar.showSearchPanel(); 73354619c1cc1b4668c81c5368b2256335cc9e8538Jim Miller break; 74e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 75e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 76e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 77e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mSourceView.getLocationOnScreen(mTempPoint); 78e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller float deltaX = mTempPoint[0]; 79e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller float deltaY = mTempPoint[1]; 80e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 81e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mDelegateView.getLocationOnScreen(mTempPoint); 82e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller deltaX -= mTempPoint[0]; 83e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller deltaY -= mTempPoint[1]; 84e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller 85e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller event.offsetLocation(deltaX, deltaY); 86e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller mDelegateView.dispatchTouchEvent(event); 87e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller event.offsetLocation(-deltaX, -deltaY); 88e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 89e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller return false; 90e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller } 91e898ac59db04d8ab0762180ca8ec7cea1347aa09Jim Miller}