1ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka/* 2ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * Copyright (C) 2011 The Android Open Source Project 3ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * 4ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * Licensed under the Apache License, Version 2.0 (the "License"); 5ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * you may not use this file except in compliance with the License. 6ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * You may obtain a copy of the License at 7ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * 8ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * http://www.apache.org/licenses/LICENSE-2.0 9ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * 10ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * Unless required by applicable law or agreed to in writing, software 11ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * distributed under the License is distributed on an "AS IS" BASIS, 12ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * See the License for the specific language governing permissions and 14ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka * limitations under the License. 15ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka */ 16ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka 17ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaokapackage com.android.inputmethod.keyboard; 18ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka 19f44a01b40852dde2363a061cdc7df2ef4cb59aadTadashi G. Takaokaimport android.view.View; 207f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaokaimport android.view.ViewGroup; 21ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka 2235580bad6f3da3b204653825bbb6871563e70728Tom Ouyangpublic interface MoreKeysPanel { 23f44a01b40852dde2363a061cdc7df2ef4cb59aadTadashi G. Takaoka public interface Controller { 24fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang /** 25fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * Add the {@link MoreKeysPanel} to the target view. 260e08d70fe52737582b6c83dbf48aaf4d83063566Tadashi G. Takaoka * @param panel the panel to be shown. 27fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang */ 28fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang public void onShowMoreKeysPanel(final MoreKeysPanel panel); 29fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang 30fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang /** 3135580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * Remove the current {@link MoreKeysPanel} from the target view. 32fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang */ 331f215a58c99f0eb2f536e9cccd51371f2883e201Tadashi G. Takaoka public void onDismissMoreKeysPanel(); 34ac69ab400d1ea4f90b4ca24486d62212decf1069Tom Ouyang 35ac69ab400d1ea4f90b4ca24486d62212decf1069Tom Ouyang /** 36ac69ab400d1ea4f90b4ca24486d62212decf1069Tom Ouyang * Instructs the parent to cancel the panel (e.g., when entering a different input mode). 37ac69ab400d1ea4f90b4ca24486d62212decf1069Tom Ouyang */ 381f215a58c99f0eb2f536e9cccd51371f2883e201Tadashi G. Takaoka public void onCancelMoreKeysPanel(); 39f44a01b40852dde2363a061cdc7df2ef4cb59aadTadashi G. Takaoka } 40f44a01b40852dde2363a061cdc7df2ef4cb59aadTadashi G. Takaoka 4109e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka public static final Controller EMPTY_CONTROLLER = new Controller() { 4209e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka @Override 4309e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka public void onShowMoreKeysPanel(final MoreKeysPanel panel) {} 4409e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka @Override 451f215a58c99f0eb2f536e9cccd51371f2883e201Tadashi G. Takaoka public void onDismissMoreKeysPanel() {} 4609e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka @Override 471f215a58c99f0eb2f536e9cccd51371f2883e201Tadashi G. Takaoka public void onCancelMoreKeysPanel() {} 4809e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka }; 4909e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka 50ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka /** 51fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * Initializes the layout and event handling of this {@link MoreKeysPanel} and calls the 52fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * controller's onShowMoreKeysPanel to add the panel's container view. 539d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * 54fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * @param parentView the parent view of this {@link MoreKeysPanel} 55fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * @param controller the controller that can dismiss this {@link MoreKeysPanel} 56fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * @param pointX x coordinate of this {@link MoreKeysPanel} 57fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * @param pointY y coordinate of this {@link MoreKeysPanel} 58fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * @param listener the listener that will receive keyboard action from this 59fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * {@link MoreKeysPanel}. 60fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang */ 61fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang // TODO: Currently the MoreKeysPanel is inside a container view that is added to the parent. 62fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang // Consider the simpler approach of placing the MoreKeysPanel itself into the parent view. 63fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang public void showMoreKeysPanel(View parentView, Controller controller, int pointX, 64fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang int pointY, KeyboardActionListener listener); 65fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang 66fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang /** 67fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * Dismisses the more keys panel and calls the controller's onDismissMoreKeysPanel to remove 68fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * the panel's container view. 69ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka */ 7009e4530ca75d4664eb72708face83b466839c522Tadashi G. Takaoka public void dismissMoreKeysPanel(); 71ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka 72ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka /** 7335580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * Process a move event on the more keys panel. 7435580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * 7535580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param x translated x coordinate of the touch point 7635580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param y translated y coordinate of the touch point 7735580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param pointerId pointer id touch point 7835580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param eventTime timestamp of touch point 7935580bad6f3da3b204653825bbb6871563e70728Tom Ouyang */ 8035580bad6f3da3b204653825bbb6871563e70728Tom Ouyang public void onMoveEvent(final int x, final int y, final int pointerId, final long eventTime); 8135580bad6f3da3b204653825bbb6871563e70728Tom Ouyang 8235580bad6f3da3b204653825bbb6871563e70728Tom Ouyang /** 8335580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * Process a down event on the more keys panel. 8435580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * 8535580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param x translated x coordinate of the touch point 8635580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param y translated y coordinate of the touch point 8735580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param pointerId pointer id touch point 8835580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param eventTime timestamp of touch point 8935580bad6f3da3b204653825bbb6871563e70728Tom Ouyang */ 9035580bad6f3da3b204653825bbb6871563e70728Tom Ouyang public void onDownEvent(final int x, final int y, final int pointerId, final long eventTime); 9135580bad6f3da3b204653825bbb6871563e70728Tom Ouyang 9235580bad6f3da3b204653825bbb6871563e70728Tom Ouyang /** 9335580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * Process an up event on the more keys panel. 9435580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * 9535580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param x translated x coordinate of the touch point 9635580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param y translated y coordinate of the touch point 9735580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param pointerId pointer id touch point 9835580bad6f3da3b204653825bbb6871563e70728Tom Ouyang * @param eventTime timestamp of touch point 9935580bad6f3da3b204653825bbb6871563e70728Tom Ouyang */ 10035580bad6f3da3b204653825bbb6871563e70728Tom Ouyang public void onUpEvent(final int x, final int y, final int pointerId, final long eventTime); 10135580bad6f3da3b204653825bbb6871563e70728Tom Ouyang 10235580bad6f3da3b204653825bbb6871563e70728Tom Ouyang /** 1039d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * Translate X-coordinate of touch event to the local X-coordinate of this 1049d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * {@link MoreKeysPanel}. 1059d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * 10663c233ab9f50d844be6e52e382c6664475606760Tadashi G. Takaoka * @param x the global X-coordinate 1079d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * @return the local X-coordinate to this {@link MoreKeysPanel} 108ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka */ 10963c233ab9f50d844be6e52e382c6664475606760Tadashi G. Takaoka public int translateX(int x); 110ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka 111ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka /** 1129d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * Translate Y-coordinate of touch event to the local Y-coordinate of this 1139d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * {@link MoreKeysPanel}. 1149d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * 11563c233ab9f50d844be6e52e382c6664475606760Tadashi G. Takaoka * @param y the global Y-coordinate 1169d5601e9013c5ec9a7ac75db16f4a0a8218b02bfTadashi G. Takaoka * @return the local Y-coordinate to this {@link MoreKeysPanel} 117ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka */ 11863c233ab9f50d844be6e52e382c6664475606760Tadashi G. Takaoka public int translateY(int y); 119fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang 120fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang /** 1217f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka * Show this {@link MoreKeysPanel} in the parent view. 1227f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka * 1237f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka * @param parentView the {@link ViewGroup} that hosts this {@link MoreKeysPanel}. 1247f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka */ 1257f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka public void showInParent(ViewGroup parentView); 1267f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka 1277f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka /** 1287f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka * Remove this {@link MoreKeysPanel} from the parent view. 129fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang */ 1307f8345d59a82a9b1d458b8e55ffd12c2a0d466a7Tadashi G. Takaoka public void removeFromParent(); 131fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang 132fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang /** 133fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang * Return whether the panel is currently being shown. 134fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang */ 135fa2d543785c52f639ad3157c57420f58a199c550Tom Ouyang public boolean isShowingInParent(); 136ff082d081f3ea18ff0b9b22126ee4a86504cf83cTadashi G. Takaoka} 137