1bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/*
2bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Copyright (C) 2010 The Android Open Source Project
3bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
4bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Licensed under the Apache License, Version 2.0 (the "License");
5bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * you may not use this file except in compliance with the License.
6bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * You may obtain a copy of the License at
7bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
8bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *      http://www.apache.org/licenses/LICENSE-2.0
9bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell *
10bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Unless required by applicable law or agreed to in writing, software
11bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * distributed under the License is distributed on an "AS IS" BASIS,
12bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * See the License for the specific language governing permissions and
14bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * limitations under the License.
15bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */
16bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
17d8222dedaacae30fa03bee346ebf42ee75b39928Chris Banespackage android.support.v7.view;
18bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
1930837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.Menu;
2030837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.MenuInflater;
2130837f1095c803f332f4a1c3f0917c8afdd50156Adam Powellimport android.view.MenuItem;
22bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellimport android.view.View;
23bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
24bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell/**
25bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * Represents a contextual mode of the user interface. Action modes can be used to provide
2620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * alternative interaction modes and replace parts of the normal UI until finished. Examples of good
2720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * action modes include text selection and contextual actions.
2820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns *
299dcd2e58138ca4eb4b18f80b50e8979329e859d6Scott Main * <p class="note"><strong>Note:</strong> This class is included in the <a
309dcd2e58138ca4eb4b18f80b50e8979329e859d6Scott Main * href="{@docRoot}tools/extras/support-library.html">support library</a> for compatibility
319dcd2e58138ca4eb4b18f80b50e8979329e859d6Scott Main * with API level 7 and higher. If you're developing your app for API level 11 and higher
329dcd2e58138ca4eb4b18f80b50e8979329e859d6Scott Main * <em>only</em>, you should instead use the framework {@link android.view.ActionMode} class.</p>
339dcd2e58138ca4eb4b18f80b50e8979329e859d6Scott Main *
34bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * <div class="special reference">
3520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns *
36bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * <h3>Developer Guides</h3>
3720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns *
3820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * <p>For information about how to provide contextual actions with {@code
3920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns * ActionMode}, read the <a href="{@docRoot}guide/topics/ui/menus.html#context-menu">Menus</a>
40bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * developer guide.</p>
4120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns *
42bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell * </div>
43bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell */
44bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powellpublic abstract class ActionMode {
45bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
4620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private Object mTag;
4720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    private boolean mTitleOptionalHint;
48bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
4920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
5020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Set a tag object associated with this ActionMode.
5120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
5220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <p>Like the tag available to views, this allows applications to associate arbitrary data with
5320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * an ActionMode for later reference.
5420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
5520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @param tag Tag to associate with this ActionMode
5620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #getTag()
5720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
5820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setTag(Object tag) {
5920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mTag = tag;
6020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
61bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
6220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
6320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Retrieve the tag object associated with this ActionMode.
6420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
6520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <p>Like the tag available to views, this allows applications to associate arbitrary data with
6620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * an ActionMode for later reference.
6720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
6820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return Tag associated with this ActionMode
6920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setTag(Object)
7020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
7120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public Object getTag() {
7220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mTag;
7320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
74bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
7520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
7620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Set the title of the action mode. This method will have no visible effect if a custom view
7720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * has been set.
7820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
7920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @param title Title string to set
8020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setTitle(int)
8120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setCustomView(View)
8220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
8320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract void setTitle(CharSequence title);
84bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
8520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
8620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Set the title of the action mode. This method will have no visible effect if a custom view
8720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * has been set.
8820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
8920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @param resId Resource ID of a string to set as the title
9020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setTitle(CharSequence)
9120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setCustomView(View)
9220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
9320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract void setTitle(int resId);
94bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
9520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
9620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Set the subtitle of the action mode. This method will have no visible effect if a custom view
9720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * has been set.
9820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
9920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @param subtitle Subtitle string to set
10020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setSubtitle(int)
10120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setCustomView(View)
10220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
10320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract void setSubtitle(CharSequence subtitle);
104bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
10520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
10620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Set the subtitle of the action mode. This method will have no visible effect if a custom view
10720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * has been set.
10820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
10920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @param resId Resource ID of a string to set as the subtitle
11020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setSubtitle(CharSequence)
11120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setCustomView(View)
11220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
11320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract void setSubtitle(int resId);
114bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
11520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
11620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Set whether or not the title/subtitle display for this action mode is optional.
11720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
11820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <p>In many cases the supplied title for an action mode is merely meant to add context and is
11920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * not strictly required for the action mode to be useful. If the title is optional, the system
12020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * may choose to hide the title entirely rather than truncate it due to a lack of available
12120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * space.</p>
12220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
12320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <p>Note that this is merely a hint; the underlying implementation may choose to ignore this
12420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * setting under some circumstances.</p>
12520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
12620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @param titleOptional true if the title only presents optional information.
12720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
12820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public void setTitleOptionalHint(boolean titleOptional) {
12920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        mTitleOptionalHint = titleOptional;
13020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
131bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
13220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
13320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return true if this action mode has been given a hint to consider the title/subtitle display
13420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *         to be optional.
13520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setTitleOptionalHint(boolean)
13620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #isTitleOptional()
13720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
13820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean getTitleOptionalHint() {
13920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return mTitleOptionalHint;
14020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
141bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
14220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
14320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return true if this action mode considers the title and subtitle fields as optional.
14420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *         Optional titles may not be displayed to the user.
14520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
14620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isTitleOptional() {
14720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return false;
14820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
149bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
15020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
15120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Set a custom view for this action mode. The custom view will take the place of the title and
15220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * subtitle. Useful for things like search boxes.
15320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
15420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @param view Custom view to use in place of the title/subtitle.
15520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setTitle(CharSequence)
15620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @see #setSubtitle(CharSequence)
15720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
15820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract void setCustomView(View view);
159bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
16020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
16120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Invalidate the action mode and refresh menu content. The mode's {@link ActionMode.Callback}
16220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * will have its {@link Callback#onPrepareActionMode(ActionMode, Menu)} method called. If it
16320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * returns true the menu will be scanned for updated content and any relevant changes will be
16420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * reflected to the user.
16520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
16620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract void invalidate();
167bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
16820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
16920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Finish and close this action mode. The action mode's {@link ActionMode.Callback} will have
17020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * its {@link Callback#onDestroyActionMode(ActionMode)} method called.
17120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
17220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract void finish();
173bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
17420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
17520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Returns the menu of actions that this action mode presents.
17620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
17720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return The action mode's menu.
17820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
17920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract Menu getMenu();
180bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
18120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
18220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Returns the current title of this action mode.
18320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
18420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return Title text
18520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
18620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract CharSequence getTitle();
187bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
188bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    /**
18920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Returns the current subtitle of this action mode.
190bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     *
19120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return Subtitle text
192bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     */
19320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract CharSequence getSubtitle();
194bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
195bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    /**
19620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Returns the current custom view for this action mode.
197bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     *
19820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return The current custom view
199bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     */
20020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract View getCustomView();
201bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
202bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    /**
20320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Returns a {@link MenuInflater} with the ActionMode's context.
20420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     */
20520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public abstract MenuInflater getMenuInflater();
20620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
20720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    /**
20820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Returns whether the UI presenting this action mode can take focus or not. This is used by
20920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * internal components within the framework that would otherwise present an action mode UI that
21020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * requires focus, such as an EditText as a custom view.
211bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     *
21220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @return true if the UI used to show this action mode can take focus
21320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * @hide Internal use only
214bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     */
21520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public boolean isUiFocusable() {
21620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        return true;
21720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
218bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell
219bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell    /**
22030837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell     * Callback interface for action modes. Supplied to
22130837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell     * {@link android.support.v7.app.ActionBarActivity#startSupportActionMode(Callback)}
22230837f1095c803f332f4a1c3f0917c8afdd50156Adam Powell     * a Callback configures and handles events raised by a user's interaction with an action mode.
22320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
22420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <p>An action mode's lifecycle is as follows:
225bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     *
22620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <ul><li>{@link Callback#onCreateActionMode(ActionMode,
22720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Menu)} once on initial creation</li>
22820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
22920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <li>{@link Callback#onPrepareActionMode(ActionMode, Menu)}
23020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * after creation and any time the {@link ActionMode} is invalidated</li>
23120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
23220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <li>{@link
23320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * Callback#onActionItemClicked(ActionMode, MenuItem)} any time a contextual action button is
23420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * clicked</li>
23520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     *
23620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * <li>{@link Callback#onDestroyActionMode(ActionMode)} when the action mode is
23720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns     * closed</li></ul>
238bbbb8f39d1b1d1b317c5f9237f20fe6b1d9eb17fAdam Powell     */
23920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    public interface Callback {
24020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
24120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        /**
24220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * Called when action mode is first created. The menu supplied will be used to generate
24320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * action buttons for the action mode.
24420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         *
24520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @param mode ActionMode being created
24620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @param menu Menu used to populate action buttons
24720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @return true if the action mode should be created, false if entering this mode should be
24820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         *         aborted.
24920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         */
25020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        public boolean onCreateActionMode(ActionMode mode, Menu menu);
25120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
25220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        /**
25320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * Called to refresh an action mode's action menu whenever it is invalidated.
25420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         *
25520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @param mode ActionMode being prepared
25620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @param menu Menu used to populate action buttons
25720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @return true if the menu or action mode was updated, false otherwise.
25820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         */
25920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        public boolean onPrepareActionMode(ActionMode mode, Menu menu);
26020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
26120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        /**
26220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * Called to report a user click on an action button.
26320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         *
26420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @param mode The current ActionMode
26520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @param item The item that was clicked
26620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @return true if this callback handled the event, false if the standard MenuItem
26720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         *         invocation should continue.
26820ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         */
26920ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        public boolean onActionItemClicked(ActionMode mode, MenuItem item);
27020ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns
27120ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        /**
27220ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * Called when an action mode is about to be exited and destroyed.
27320ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         *
27420ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         * @param mode The current ActionMode being destroyed
27520ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns         */
27620ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns        public void onDestroyActionMode(ActionMode mode);
27720ac724a3a836bfd362c911f7dc55a61c02b4d44Trevor Johns    }
278ced50ab7536cd3d3573f03310fc899f10c414d37Anirudh Dewani}
279