Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(7)

Side by Side Diff: content/public/android/java/src/org/chromium/content/browser/SelectActionModeCallback.java

Issue 23672055: [Android] Inflate Select Action Bar from XML. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « content/public/android/java/resource_map/org/chromium/content/R.java ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 package org.chromium.content.browser; 5 package org.chromium.content.browser;
6 6
7 import android.app.Activity; 7 import android.app.Activity;
8 import android.app.SearchManager; 8 import android.app.SearchManager;
9 import android.content.ClipboardManager; 9 import android.content.ClipboardManager;
10 import android.content.Context; 10 import android.content.Context;
11 import android.content.Intent; 11 import android.content.Intent;
12 import android.content.pm.PackageManager; 12 import android.content.pm.PackageManager;
13 import android.content.res.TypedArray;
14 import android.provider.Browser; 13 import android.provider.Browser;
15 import android.text.TextUtils; 14 import android.text.TextUtils;
16 import android.view.ActionMode; 15 import android.view.ActionMode;
17 import android.view.Menu; 16 import android.view.Menu;
18 import android.view.MenuItem; 17 import android.view.MenuItem;
19 18
20 import org.chromium.content.R; 19 import org.chromium.content.R;
21 20
22 /** 21 /**
23 * An ActionMode.Callback for in-page selection. This class handles both the edi table and 22 * An ActionMode.Callback for in-page selection. This class handles both the edi table and
24 * non-editable cases. 23 * non-editable cases.
25 */ 24 */
26 public class SelectActionModeCallback implements ActionMode.Callback { 25 public class SelectActionModeCallback implements ActionMode.Callback {
27 private static final int SELECT_ALL_ATTR_INDEX = 0;
28 private static final int CUT_ATTR_INDEX = 1;
29 private static final int COPY_ATTR_INDEX = 2;
30 private static final int PASTE_ATTR_INDEX = 3;
31 private static final int SHARE_ATTR_INDEX = 4;
32 private static final int WEB_SEARCH_ATTR_INDEX = 5;
33 private static final int[] ACTION_MODE_ATTRS = {
34 android.R.attr.actionModeSelectAllDrawable,
35 android.R.attr.actionModeCutDrawable,
36 android.R.attr.actionModeCopyDrawable,
37 android.R.attr.actionModePasteDrawable,
38 R.attr.action_mode_share_drawable,
39 R.attr.action_mode_web_search_drawable
40 };
41
42 private static final int ID_SELECTALL = 0;
43 private static final int ID_COPY = 1;
44 private static final int ID_SHARE = 2;
45 private static final int ID_SEARCH = 3;
46 private static final int ID_CUT = 4;
47 private static final int ID_PASTE = 5;
48
49 /** 26 /**
50 * An interface to retrieve information about the current selection, and als o to perform 27 * An interface to retrieve information about the current selection, and als o to perform
51 * actions based on the selection or when the action bar is dismissed. 28 * actions based on the selection or when the action bar is dismissed.
52 */ 29 */
53 public interface ActionHandler { 30 public interface ActionHandler {
54 /** 31 /**
55 * Perform a select all action. 32 * Perform a select all action.
56 */ 33 */
57 void selectAll(); 34 void selectAll();
58 35
(...skipping 74 matching lines...) Expand 10 before | Expand all | Expand 10 after
133 if (mEditable != isEditableNow) { 110 if (mEditable != isEditableNow) {
134 mEditable = isEditableNow; 111 mEditable = isEditableNow;
135 menu.clear(); 112 menu.clear();
136 createActionMenu(mode, menu); 113 createActionMenu(mode, menu);
137 return true; 114 return true;
138 } 115 }
139 return false; 116 return false;
140 } 117 }
141 118
142 private void createActionMenu(ActionMode mode, Menu menu) { 119 private void createActionMenu(ActionMode mode, Menu menu) {
143 TypedArray styledAttributes = getContext().obtainStyledAttributes( 120 mode.getMenuInflater().inflate(R.menu.select_action_menu, menu);
144 R.style.ContentActionBar, ACTION_MODE_ATTRS); 121 if (!mEditable || !canPaste()) {
145 122 menu.removeItem(R.id.select_action_menu_paste);
146 menu.add(Menu.NONE, ID_SELECTALL, Menu.NONE, android.R.string.selectAll) .
147 setAlphabeticShortcut('a').
148 setIcon(styledAttributes.getResourceId(SELECT_ALL_ATTR_INDEX, 0)).
149 setShowAsAction(
150 MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WIT H_TEXT);
151
152 if (mEditable) {
153 menu.add(Menu.NONE, ID_CUT, Menu.NONE, android.R.string.cut).
154 setIcon(styledAttributes.getResourceId(CUT_ATTR_INDEX, 0)).
155 setAlphabeticShortcut('x').
156 setShowAsAction(
157 MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WIT H_TEXT);
158 }
159
160 menu.add(Menu.NONE, ID_COPY, Menu.NONE, android.R.string.copy).
161 setIcon(styledAttributes.getResourceId(COPY_ATTR_INDEX, 0)).
162 setAlphabeticShortcut('c').
163 setShowAsAction(
164 MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION_WIT H_TEXT);
165
166 if (mEditable && canPaste()) {
167 menu.add(Menu.NONE, ID_PASTE, Menu.NONE, android.R.string.paste).
168 setIcon(styledAttributes.getResourceId(PASTE_ATTR_INDEX, 0)).
169 setAlphabeticShortcut('v').
170 setShowAsAction(
171 MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_ACTION _WITH_TEXT);
172 } 123 }
173 124
174 if (!mEditable) { 125 if (!mEditable) {
175 if (mActionHandler.isShareAvailable()) { 126 menu.removeItem(R.id.select_action_menu_cut);
176 menu.add(Menu.NONE, ID_SHARE, Menu.NONE, R.string.actionbar_shar e).
177 setIcon(styledAttributes.getResourceId(SHARE_ATTR_INDEX, 0)) .
178 setShowAsAction(
179 MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_AC TION_WITH_TEXT);
180 }
181
182 if (!mIncognito && mActionHandler.isWebSearchAvailable()) {
183 menu.add(Menu.NONE, ID_SEARCH, Menu.NONE, R.string.actionbar_web _search).
184 setIcon(styledAttributes.getResourceId(WEB_SEARCH_ATTR_INDEX , 0)).
185 setShowAsAction(
186 MenuItem.SHOW_AS_ACTION_ALWAYS | MenuItem.SHOW_AS_AC TION_WITH_TEXT);
187 }
188 } 127 }
189 128
190 styledAttributes.recycle(); 129 if (mEditable || !mActionHandler.isShareAvailable()) {
130 menu.removeItem(R.id.select_action_menu_share);
131 }
132
133 if (mEditable || mIncognito || !mActionHandler.isWebSearchAvailable()) {
134 menu.removeItem(R.id.select_action_menu_web_search);
135 }
191 } 136 }
192 137
193 @Override 138 @Override
194 public boolean onActionItemClicked(ActionMode mode, MenuItem item) { 139 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
195 switch(item.getItemId()) { 140 int id = item.getItemId();
196 case ID_SELECTALL: 141
197 mActionHandler.selectAll(); 142 if (id == R.id.select_action_menu_select_all) {
198 break; 143 mActionHandler.selectAll();
199 case ID_CUT: 144 } else if (id == R.id.select_action_menu_cut) {
200 mActionHandler.cut(); 145 mActionHandler.cut();
201 break; 146 } else if (id == R.id.select_action_menu_copy) {
202 case ID_COPY: 147 mActionHandler.copy();
203 mActionHandler.copy(); 148 mode.finish();
204 mode.finish(); 149 } else if (id == R.id.select_action_menu_paste) {
205 break; 150 mActionHandler.paste();
206 case ID_PASTE: 151 } else if (id == R.id.select_action_menu_share) {
207 mActionHandler.paste(); 152 mActionHandler.share();
208 break; 153 mode.finish();
209 case ID_SHARE: 154 } else if (id == R.id.select_action_menu_web_search) {
210 mActionHandler.share(); 155 mActionHandler.search();
211 mode.finish(); 156 mode.finish();
212 break; 157 } else {
213 case ID_SEARCH: 158 return false;
214 mActionHandler.search();
215 mode.finish();
216 break;
217 default:
218 return false;
219 } 159 }
220 return true; 160 return true;
221 } 161 }
222 162
223 @Override 163 @Override
224 public void onDestroyActionMode(ActionMode mode) { 164 public void onDestroyActionMode(ActionMode mode) {
225 mActionHandler.onDestroyActionMode(); 165 mActionHandler.onDestroyActionMode();
226 } 166 }
227 167
228 private boolean canPaste() { 168 private boolean canPaste() {
229 ClipboardManager clipMgr = (ClipboardManager) 169 ClipboardManager clipMgr = (ClipboardManager)
230 getContext().getSystemService(Context.CLIPBOARD_SERVICE); 170 getContext().getSystemService(Context.CLIPBOARD_SERVICE);
231 return clipMgr.hasPrimaryClip(); 171 return clipMgr.hasPrimaryClip();
232 } 172 }
233 } 173 }
OLDNEW
« no previous file with comments | « content/public/android/java/resource_map/org/chromium/content/R.java ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698