summaryrefslogtreecommitdiff
path: root/core/java/android/inputmethodservice/ExtractEditLayout.java
diff options
context:
space:
mode:
authorAndrei Stingaceanu <stg@google.com>2015-06-11 14:34:50 +0000
committerAndrei Stingaceanu <stg@google.com>2015-06-11 14:34:50 +0000
commit1036c74784d8f8ca7232aaa26b1b0c3796c29d1d (patch)
tree21214e903464e614126ab1556138c07b9cb0d0ca /core/java/android/inputmethodservice/ExtractEditLayout.java
parent00245473dbdf5469ad40d1ca6d2f53a87462efcb (diff)
Revert "Completely remove ExtractActionMode - master cherrypick"
This reverts commit 00245473dbdf5469ad40d1ca6d2f53a87462efcb. Change-Id: If078c09fbdfd00d005ff58d543f03601b96eef0a
Diffstat (limited to 'core/java/android/inputmethodservice/ExtractEditLayout.java')
-rw-r--r--core/java/android/inputmethodservice/ExtractEditLayout.java172
1 files changed, 170 insertions, 2 deletions
diff --git a/core/java/android/inputmethodservice/ExtractEditLayout.java b/core/java/android/inputmethodservice/ExtractEditLayout.java
index 37ca4b44a1a1..e902443b16f4 100644
--- a/core/java/android/inputmethodservice/ExtractEditLayout.java
+++ b/core/java/android/inputmethodservice/ExtractEditLayout.java
@@ -16,19 +16,30 @@
package android.inputmethodservice;
+import com.android.internal.view.menu.MenuBuilder;
+import com.android.internal.view.menu.MenuPopupHelper;
+
import android.content.Context;
import android.util.AttributeSet;
+import android.view.ActionMode;
+import android.view.Menu;
+import android.view.MenuInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.accessibility.AccessibilityEvent;
import android.widget.Button;
import android.widget.LinearLayout;
/**
- * ExtractEditLayout provides an ActionMode presentation for the limited screen real estate in
- * extract mode.
+ * ExtractEditLayout provides an ActionMode presentation for the
+ * limited screen real estate in extract mode.
*
* @hide
*/
public class ExtractEditLayout extends LinearLayout {
+ ExtractActionMode mActionMode;
Button mExtractActionButton;
+ Button mEditButton;
public ExtractEditLayout(Context context) {
super(context);
@@ -39,8 +50,165 @@ public class ExtractEditLayout extends LinearLayout {
}
@Override
+ public ActionMode startActionModeForChild(View sourceView, ActionMode.Callback cb) {
+ final ExtractActionMode mode = new ExtractActionMode(cb);
+ if (mode.dispatchOnCreate()) {
+ mode.invalidate();
+ mExtractActionButton.setVisibility(INVISIBLE);
+ mEditButton.setVisibility(VISIBLE);
+ mActionMode = mode;
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+ return mode;
+ }
+ return null;
+ }
+
+ /**
+ * @return true if an action mode is currently active.
+ */
+ public boolean isActionModeStarted() {
+ return mActionMode != null;
+ }
+
+ /**
+ * Finishes a possibly started action mode.
+ */
+ public void finishActionMode() {
+ if (mActionMode != null) {
+ mActionMode.finish();
+ }
+ }
+
+ @Override
public void onFinishInflate() {
super.onFinishInflate();
mExtractActionButton = (Button) findViewById(com.android.internal.R.id.inputExtractAction);
+ mEditButton = (Button) findViewById(com.android.internal.R.id.inputExtractEditButton);
+ mEditButton.setOnClickListener(new OnClickListener() {
+ public void onClick(View clicked) {
+ if (mActionMode != null) {
+ new MenuPopupHelper(getContext(), mActionMode.mMenu, clicked).show();
+ }
+ }
+ });
+ }
+
+ private class ExtractActionMode extends ActionMode implements MenuBuilder.Callback {
+ private ActionMode.Callback mCallback;
+ MenuBuilder mMenu;
+
+ public ExtractActionMode(Callback cb) {
+ mMenu = new MenuBuilder(getContext());
+ mMenu.setCallback(this);
+ mCallback = cb;
+ }
+
+ @Override
+ public void setTitle(CharSequence title) {
+ // Title will not be shown.
+ }
+
+ @Override
+ public void setTitle(int resId) {
+ // Title will not be shown.
+ }
+
+ @Override
+ public void setSubtitle(CharSequence subtitle) {
+ // Subtitle will not be shown.
+ }
+
+ @Override
+ public void setSubtitle(int resId) {
+ // Subtitle will not be shown.
+ }
+
+ @Override
+ public boolean isTitleOptional() {
+ // Not only is it optional, it will *never* be shown.
+ return true;
+ }
+
+ @Override
+ public void setCustomView(View view) {
+ // Custom view is not supported here.
+ }
+
+ @Override
+ public void invalidate() {
+ mMenu.stopDispatchingItemsChanged();
+ try {
+ mCallback.onPrepareActionMode(this, mMenu);
+ } finally {
+ mMenu.startDispatchingItemsChanged();
+ }
+ }
+
+ public boolean dispatchOnCreate() {
+ mMenu.stopDispatchingItemsChanged();
+ try {
+ return mCallback.onCreateActionMode(this, mMenu);
+ } finally {
+ mMenu.startDispatchingItemsChanged();
+ }
+ }
+
+ @Override
+ public void finish() {
+ if (mActionMode != this) {
+ // Not the active action mode - no-op
+ return;
+ }
+
+ mCallback.onDestroyActionMode(this);
+ mCallback = null;
+
+ mMenu.close();
+
+ mExtractActionButton.setVisibility(VISIBLE);
+ mEditButton.setVisibility(INVISIBLE);
+
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+
+ mActionMode = null;
+ }
+
+ @Override
+ public Menu getMenu() {
+ return mMenu;
+ }
+
+ @Override
+ public CharSequence getTitle() {
+ return null;
+ }
+
+ @Override
+ public CharSequence getSubtitle() {
+ return null;
+ }
+
+ @Override
+ public View getCustomView() {
+ return null;
+ }
+
+ @Override
+ public MenuInflater getMenuInflater() {
+ return new MenuInflater(getContext());
+ }
+
+ @Override
+ public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
+ if (mCallback != null) {
+ return mCallback.onActionItemClicked(this, item);
+ }
+ return false;
+ }
+
+ @Override
+ public void onMenuModeChange(MenuBuilder menu) {
+ }
+
}
}