blob: 0fb0eb52cedc606df34ef935d6b0e9606b05859b [file] [log] [blame]
// Copyright 2010-2015, Google Inc.
// All rights reserved.
//
// Redistribution and use in source and binary forms, with or without
// modification, are permitted provided that the following conditions are
// met:
//
// * Redistributions of source code must retain the above copyright
// notice, this list of conditions and the following disclaimer.
// * Redistributions in binary form must reproduce the above
// copyright notice, this list of conditions and the following disclaimer
// in the documentation and/or other materials provided with the
// distribution.
// * Neither the name of Google Inc. nor the names of its
// contributors may be used to endorse or promote products derived from
// this software without specific prior written permission.
//
// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
package org.mozc.android.inputmethod.japanese;
import org.mozc.android.inputmethod.japanese.KeycodeConverter.KeyEventInterface;
import org.mozc.android.inputmethod.japanese.emoji.EmojiProviderType;
import org.mozc.android.inputmethod.japanese.hardwarekeyboard.HardwareKeyboard.CompositionSwitchMode;
import org.mozc.android.inputmethod.japanese.keyboard.Keyboard.KeyboardSpecification;
import org.mozc.android.inputmethod.japanese.keyboard.KeyboardActionListener;
import org.mozc.android.inputmethod.japanese.model.JapaneseSoftwareKeyboardModel;
import org.mozc.android.inputmethod.japanese.preference.ClientSidePreference.HardwareKeyMap;
import org.mozc.android.inputmethod.japanese.preference.ClientSidePreference.InputStyle;
import org.mozc.android.inputmethod.japanese.preference.ClientSidePreference.KeyboardLayout;
import org.mozc.android.inputmethod.japanese.protobuf.ProtoCommands.Command;
import org.mozc.android.inputmethod.japanese.view.Skin;
import com.google.common.annotations.VisibleForTesting;
import android.content.Context;
import android.content.res.Configuration;
import android.inputmethodservice.InputMethodService;
import android.view.KeyEvent;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.inputmethod.CursorAnchorInfo;
import android.view.inputmethod.EditorInfo;
/**
* Interface for ViewManager which manages Input, Candidate and Extracted views.
*
*/
public interface ViewManagerInterface extends MemoryManageable {
/**
* Keyboard layout position.
*/
public enum LayoutAdjustment {
FILL,
RIGHT,
LEFT,
}
/**
* Creates new input view.
*
* "Input view" is a software keyboard in almost all cases.
*
* Previously created input view is not accessed any more after calling this method.
*
* @param context
* @return newly created view.
*/
public View createMozcView(Context context);
/**
* Renders views which this instance own based on Command.Output.
*
* Note that showing/hiding views is Service's responsibility.
*/
public void render(Command outCommand);
/**
* @return true if {@code event} should be consumed by Mozc client side and should be processed
* asynchronously.
*/
public boolean isKeyConsumedOnViewAsynchronously(KeyEvent event);
/**
* Consumes and handles the given key event.
*
* @throws IllegalArgumentException If {@code KeyEvent} is not the key to consume.
*/
public void consumeKeyOnViewSynchronously(KeyEvent event);
public void onHardwareKeyEvent(KeyEvent keyEvent);
/**
* @return whether the view should consume the generic motion event or not.
*/
public boolean isGenericMotionToConsume(MotionEvent event);
/**
* Consumes and handles the given generic motion event.
*
* @throws IllegalArgumentException If {@code MotionEvent} is not the key to consume.
*/
public boolean consumeGenericMotion(MotionEvent event);
/**
* @return the current keyboard specification.
*/
public KeyboardSpecification getKeyboardSpecification();
/**
* Set {@code EditorInfo} instance to the current view.
*/
public void setEditorInfo(EditorInfo attribute);
/**
* Set text for IME action button label.
*/
public void setTextForActionButton(CharSequence text);
public boolean hideSubInputView();
/**
* Set this keyboard layout to the specified one.
*
* @param keyboardLayout New keyboard layout.
* @throws NullPointerException If {@code keyboardLayout} is {@code null}.
*/
public void setKeyboardLayout(KeyboardLayout keyboardLayout);
/**
* Set the input style.
*
* @param inputStyle new input style.
* @throws NullPointerException If {@code inputStyle} is {@code null}.
* TODO(hidehiko): Refactor out following keyboard switching logic into another class.
*/
public void setInputStyle(InputStyle inputStyle);
public void setQwertyLayoutForAlphabet(boolean qwertyLayoutForAlphabet);
public void setFullscreenMode(boolean fullscreenMode);
public boolean isFullscreenMode();
public void setFlickSensitivity(int flickSensitivity);
public void setEmojiProviderType(EmojiProviderType emojiProviderType);
/**
* @param isNarrowMode Whether mozc view shows in narrow mode or normal.
*/
public void setNarrowMode(boolean isNarrowMode);
public void maybeTransitToNarrowMode(Command command, KeyEventInterface keyEvent);
public boolean isNarrowMode();
public boolean isFloatingCandidateMode();
public void setPopupEnabled(boolean popupEnabled);
public void switchHardwareKeyboardCompositionMode(CompositionSwitchMode mode);
public void setHardwareKeyMap(HardwareKeyMap hardwareKeyMap);
public void setSkin(Skin skin);
public void setMicrophoneButtonEnabledByPreference(boolean microphoneButtonEnabled);
public void setLayoutAdjustment(LayoutAdjustment layoutAdjustment);
public void setKeyboardHeightRatio(int keyboardHeightRatio);
public void onConfigurationChanged(Configuration newConfig);
public void setCursorAnchorInfo(CursorAnchorInfo info);
public void setCursorAnchorInfoEnabled(boolean enabled);
/**
* Reset the status of the current input view.
*/
public void reset();
public void computeInsets(
Context context, InputMethodService.Insets outInsets, Window window);
public void onShowSymbolInputView();
public void onCloseSymbolInputView();
@VisibleForTesting
public ViewEventListener getEventListener();
@VisibleForTesting
public JapaneseSoftwareKeyboardModel getActiveSoftwareKeyboardModel();
@VisibleForTesting
public boolean isPopupEnabled();
@VisibleForTesting
public int getFlickSensitivity();
@VisibleForTesting
public EmojiProviderType getEmojiProviderType();
@VisibleForTesting
public Skin getSkin();
@VisibleForTesting
public boolean isMicrophoneButtonEnabledByPreference();
@VisibleForTesting
public LayoutAdjustment getLayoutAdjustment();
@VisibleForTesting
public int getKeyboardHeightRatio();
@VisibleForTesting
public HardwareKeyMap getHardwareKeyMap();
/**
* Used for testing to inject key events.
*/
@VisibleForTesting
public KeyboardActionListener getKeyboardActionListener();
void updateGlobeButtonEnabled();
void updateMicrophoneButtonEnabled();
}