Source code
package android.support.v7.internal.view;
import android.content.Context;
import android.support.v7.internal.view.menu.MenuBuilder;
import android.support.v7.internal.view.menu.MenuBuilder.Callback;
import android.support.v7.internal.view.menu.MenuPopupHelper;
import android.support.v7.internal.view.menu.SubMenuBuilder;
import android.support.v7.internal.widget.ActionBarContextView;
import android.support.v7.view.ActionMode;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import java.lang.ref.WeakReference;
public class StandaloneActionMode extends ActionMode implements Callback {
private ActionMode.Callback mCallback;
private Context mContext;
private ActionBarContextView mContextView;
private WeakReference<View> mCustomView;
private boolean mFinished;
private boolean mFocusable;
private MenuBuilder mMenu;
public StandaloneActionMode(Context context, ActionBarContextView view, ActionMode.Callback callback, boolean isFocusable) {
this.mContext = context;
this.mContextView = view;
this.mCallback = callback;
this.mMenu = new MenuBuilder(view.getContext()).setDefaultShowAsAction(1);
this.mMenu.setCallback(this);
this.mFocusable = isFocusable;
}
public void setTitle(CharSequence title) {
this.mContextView.setTitle(title);
}
public void setSubtitle(CharSequence subtitle) {
this.mContextView.setSubtitle(subtitle);
}
public void setTitle(int resId) {
setTitle(this.mContext.getString(resId));
}
public void setSubtitle(int resId) {
setSubtitle(this.mContext.getString(resId));
}
public void setTitleOptionalHint(boolean titleOptional) {
super.setTitleOptionalHint(titleOptional);
this.mContextView.setTitleOptional(titleOptional);
}
public boolean isTitleOptional() {
return this.mContextView.isTitleOptional();
}
public void setCustomView(View view) {
this.mContextView.setCustomView(view);
this.mCustomView = view != null ? new WeakReference(view) : null;
}
public void invalidate() {
this.mCallback.onPrepareActionMode(this, this.mMenu);
}
public void finish() {
if (!this.mFinished) {
this.mFinished = true;
this.mContextView.sendAccessibilityEvent(32);
this.mCallback.onDestroyActionMode(this);
}
}
public Menu getMenu() {
return this.mMenu;
}
public CharSequence getTitle() {
return this.mContextView.getTitle();
}
public CharSequence getSubtitle() {
return this.mContextView.getSubtitle();
}
public View getCustomView() {
return this.mCustomView != null ? (View) this.mCustomView.get() : null;
}
public MenuInflater getMenuInflater() {
return new MenuInflater(this.mContextView.getContext());
}
public boolean onMenuItemSelected(MenuBuilder menu, MenuItem item) {
return this.mCallback.onActionItemClicked(this, item);
}
public void onCloseMenu(MenuBuilder menu, boolean allMenusAreClosing) {
}
public boolean onSubMenuSelected(SubMenuBuilder subMenu) {
if (subMenu.hasVisibleItems()) {
new MenuPopupHelper(this.mContextView.getContext(), subMenu).show();
}
return true;
}
public void onCloseSubMenu(SubMenuBuilder menu) {
}
public void onMenuModeChange(MenuBuilder menu) {
invalidate();
this.mContextView.showOverflowMenu();
}
public boolean isUiFocusable() {
return this.mFocusable;
}
}