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