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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/CustomSelectionActionModeCallback.java

Issue 1292923004: Refactor chrome's action mode logics and namings (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 4 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
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 package org.chromium.chrome.browser;
6
7 import android.view.ActionMode;
8 import android.view.Menu;
9 import android.view.MenuItem;
10
11 import java.lang.reflect.Field;
12 import java.lang.reflect.InvocationTargetException;
13 import java.lang.reflect.Method;
14
15 /**
16 * A class that represents a custom ActionMode.Callback.
17 */
18 public class CustomSelectionActionModeCallback implements ActionMode.Callback {
19
20 private static boolean sInitializedTypeMethods;
21 private static Method sGetTypeMethod;
22 private static int sTypeFloating;
23
24 private ContextualMenuBar mContextualMenuBar;
25
26 /**
27 * Sets the @param contextualMenuBar.
28 */
29 public void setContextualMenuBar(ContextualMenuBar contextualMenuBar) {
30 mContextualMenuBar = contextualMenuBar;
31 }
32
33 @Override
34 public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
35 return true;
36 }
37
38 @Override
39 public void onDestroyActionMode(ActionMode mode) {
40 if (isFloatingActionMode(mode)) return;
41 mContextualMenuBar.hideControls();
42 }
43
44 @Override
45 public boolean onCreateActionMode(ActionMode mode, Menu menu) {
46 if (isFloatingActionMode(mode)) return true;
47 mContextualMenuBar.showControls();
48 return true;
49 }
50
51 @Override
52 public boolean onActionItemClicked(ActionMode mode, MenuItem item) {
53 return false;
54 }
55
56 // TODO(tedchoc): Delete this method and replace with just getType() when a public M SDK is
57 // available.
58 private static boolean isFloatingActionMode(ActionMode mode) {
59 initializeGetTypeMethods();
60
61 if (sGetTypeMethod == null) return false;
62
63 Object retVal = null;
64 try {
65 retVal = sGetTypeMethod.invoke(mode);
66 } catch (IllegalAccessException e) {
67 return false;
68 } catch (IllegalArgumentException e) {
69 return false;
70 } catch (InvocationTargetException e) {
71 return false;
72 }
73 if (!(retVal instanceof Integer)) return false;
74
75 return ((Integer) retVal).intValue() == sTypeFloating;
76 }
77
78 private static void initializeGetTypeMethods() {
79 if (sInitializedTypeMethods) return;
80 sInitializedTypeMethods = true;
81
82 Method getType = null;
83 int typeFloating = -1;
84 try {
85 getType = ActionMode.class.getMethod("getType");
86 } catch (NoSuchMethodException e) {
87 return;
88 }
89
90 try {
91 Field field = ActionMode.class.getField("TYPE_FLOATING");
92 Object value = field.get(null);
93
94 if (value instanceof Integer) {
95 typeFloating = (Integer) value;
96 } else {
97 return;
98 }
99 } catch (NoSuchFieldException e) {
100 return;
101 } catch (IllegalAccessException e) {
102 return;
103 } catch (IllegalArgumentException e) {
104 return;
105 }
106
107 sGetTypeMethod = getType;
108 sTypeFloating = typeFloating;
109 }
110 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698