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