HandleView.java revision 678862186af4ea70d9b4012c9bc127e7fea5e607
131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project/*
231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * you may not use this file except in compliance with the License.
631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * You may obtain a copy of the License at
731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project *
1031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * Unless required by applicable law or agreed to in writing, software
1131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
1231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * See the License for the specific language governing permissions and
1431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project * limitations under the License.
1531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project */
1631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
1731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
18a5902524d4403885eb4c50360bf3465c6be796efJoe Onoratopackage com.android.launcher2;
1931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.widget.ImageView;
2131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.Context;
2231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.content.res.TypedArray;
2331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.util.AttributeSet;
2431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.view.View;
2531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectimport android.view.KeyEvent;
2631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
2731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Projectpublic class HandleView extends ImageView {
2831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private static final int ORIENTATION_HORIZONTAL = 1;
2931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private Launcher mLauncher;
3131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private int mOrientation = ORIENTATION_HORIZONTAL;
3231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public HandleView(Context context) {
3431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        super(context);
3531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
3631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
3731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public HandleView(Context context, AttributeSet attrs) {
3831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        this(context, attrs, 0);
3931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
4031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public HandleView(Context context, AttributeSet attrs, int defStyle) {
4231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        super(context, attrs, defStyle);
4331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.HandleView, defStyle, 0);
4531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        mOrientation = a.getInt(R.styleable.HandleView_direction, ORIENTATION_HORIZONTAL);
4631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        a.recycle();
4731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
4831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
4931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
5031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public View focusSearch(int direction) {
5131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        View newFocus = super.focusSearch(direction);
52678862186af4ea70d9b4012c9bc127e7fea5e607Joe Onorato        if (newFocus == null && !mLauncher.isAllAppsVisible()) {
5331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            final Workspace workspace = mLauncher.getWorkspace();
5431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            workspace.dispatchUnhandledMove(null, direction);
5531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            return (mOrientation == ORIENTATION_HORIZONTAL && direction == FOCUS_DOWN) ?
5631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                    this : workspace;
5731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        }
5831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return newFocus;
5931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
6031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
6131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
6231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public boolean onKeyDown(int keyCode, KeyEvent event) {
6331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        final boolean handled = super.onKeyDown(keyCode, event);
6431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
657404ee4a16e03dba9f026ac8c78d7cea3886260fJoe Onorato        /* TODO
6631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        if (!handled && !mLauncher.isDrawerDown() && !isDirectionKey(keyCode)) {
6731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            return mLauncher.getApplicationsGrid().onKeyDown(keyCode, event);
6831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        }
697404ee4a16e03dba9f026ac8c78d7cea3886260fJoe Onorato        */
7031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
7131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return handled;
7231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
7331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
7431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    @Override
7531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    public boolean onKeyUp(int keyCode, KeyEvent event) {
7631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        final boolean handled = super.onKeyUp(keyCode, event);
7731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
787404ee4a16e03dba9f026ac8c78d7cea3886260fJoe Onorato        /* TODO
7931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        if (!handled && !mLauncher.isDrawerDown() && !isDirectionKey(keyCode)) {
8031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project            return mLauncher.getApplicationsGrid().onKeyUp(keyCode, event);
8131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        }
827404ee4a16e03dba9f026ac8c78d7cea3886260fJoe Onorato        */
8331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
8431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return handled;
8531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
8631dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
8731dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    private static boolean isDirectionKey(int keyCode) {
8831dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        return keyCode == KeyEvent.KEYCODE_DPAD_DOWN || keyCode == KeyEvent.KEYCODE_DPAD_LEFT ||
8931dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project                keyCode == KeyEvent.KEYCODE_DPAD_RIGHT || keyCode == KeyEvent.KEYCODE_DPAD_UP;
9031dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
9131dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project
9231dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    void setLauncher(Launcher launcher) {
9331dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project        mLauncher = launcher;
9431dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project    }
9531dd503c6aa69018e694d91724d46db49ea09327The Android Open Source Project}
96