188f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung/*
288f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * Copyright (C) 2012 The Android Open Source Project
388f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung *
488f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * Licensed under the Apache License, Version 2.0 (the "License");
588f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * you may not use this file except in compliance with the License.
688f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * You may obtain a copy of the License at
788f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung *
888f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung *      http://www.apache.org/licenses/LICENSE-2.0
988f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung *
1088f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * Unless required by applicable law or agreed to in writing, software
1188f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * distributed under the License is distributed on an "AS IS" BASIS,
1288f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1388f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * See the License for the specific language governing permissions and
1488f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung * limitations under the License.
1588f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung */
1688f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
1788f334571fe41df620ba903ced9b2c69b0170d5cWinson Chungpackage com.android.launcher2;
1888f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
1988f334571fe41df620ba903ced9b2c69b0170d5cWinson Chungimport android.view.View;
2088f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
2188f334571fe41df620ba903ced9b2c69b0170d5cWinson Chungpublic class CheckLongPressHelper {
2288f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    private View mView;
2388f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    private boolean mHasPerformedLongPress;
2488f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    private CheckForLongPress mPendingCheckForLongPress;
2588f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
2688f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    class CheckForLongPress implements Runnable {
2788f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        public void run() {
2888f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung            if ((mView.getParent() != null) && mView.hasWindowFocus()
2988f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung                    && !mHasPerformedLongPress) {
3088f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung                if (mView.performLongClick()) {
31401d3a57b9fce6703d5a8f332506af1c0027362fWinson Chung                    mView.setPressed(false);
3288f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung                    mHasPerformedLongPress = true;
3388f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung                }
3488f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung            }
3588f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        }
3688f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    }
3788f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
3888f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    public CheckLongPressHelper(View v) {
3988f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        mView = v;
4088f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    }
4188f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
4288f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    public void postCheckForLongPress() {
4388f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        mHasPerformedLongPress = false;
4488f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
4588f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        if (mPendingCheckForLongPress == null) {
4688f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung            mPendingCheckForLongPress = new CheckForLongPress();
4788f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        }
4888f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        mView.postDelayed(mPendingCheckForLongPress, LauncherApplication.getLongPressTimeout());
4988f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    }
5088f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
5188f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    public void cancelLongPress() {
5288f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        mHasPerformedLongPress = false;
5388f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        if (mPendingCheckForLongPress != null) {
5488f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung            mView.removeCallbacks(mPendingCheckForLongPress);
5588f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung            mPendingCheckForLongPress = null;
5688f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        }
5788f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    }
5888f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung
5988f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    public boolean hasPerformedLongPress() {
6088f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung        return mHasPerformedLongPress;
6188f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung    }
6288f334571fe41df620ba903ced9b2c69b0170d5cWinson Chung}
63