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

Side by Side Diff: chrome/android/java/src/org/chromium/chrome/browser/toolbar/ActionModeController.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
1 // Copyright 2015 The Chromium Authors. All rights reserved. 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 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.chrome.browser; 5 package org.chromium.chrome.browser.toolbar;
6 6
7 import android.animation.Animator; 7 import android.animation.Animator;
8 import android.animation.AnimatorListenerAdapter; 8 import android.animation.AnimatorListenerAdapter;
9 import android.animation.ObjectAnimator; 9 import android.animation.ObjectAnimator;
10 import android.animation.ValueAnimator; 10 import android.animation.ValueAnimator;
11 import android.content.Context; 11 import android.content.Context;
12 import android.content.res.TypedArray; 12 import android.content.res.TypedArray;
13 import android.support.v7.app.ActionBar; 13 import android.support.v7.app.ActionBar;
14 import android.util.Property; 14 import android.util.Property;
15 15
16 import org.chromium.chrome.R; 16 import org.chromium.chrome.R;
17 17
18 /** 18 /**
19 * This class handles the animation for the contextual menu bar and adds a custo m 19 * This class controls the how toolbar animates while the action mode bar is bei ng shown. It also
20 * ActionMode.Callback to the menu bar. 20 * manages a {@link ToolbarActionModeCallback}.
21 */ 21 */
22 public class ContextualMenuBar { 22 public class ActionModeController {
23 23
24 private static final int SLIDE_DURATION_MS = 200; 24 private static final int SLIDE_DURATION_MS = 200;
25 25
26 private CustomSelectionActionModeCallback mCustomSelectionActionModeCallback ; 26 private ToolbarActionModeCallback mCustomSelectionActionModeCallback;
David Trainor- moved to gerrit 2015/08/18 18:32:50 change variable name too?
Ian Wen 2015/08/19 18:35:36 Done.
27 private ObjectAnimator mCurrentAnimation = null; 27 private ObjectAnimator mCurrentAnimation = null;
28 private boolean mShowingContextualActionBar = false; 28 private boolean mShowingActionMode = false;
29 private float mTabStripHeight; 29 private float mTabStripHeight;
30 private final Context mContext; 30 private final Context mContext;
31 private final ActionBarDelegate mActionBarDelegate; 31 private final ActionBarDelegate mActionBarDelegate;
32 32
33 /** Property for animating the top margin of ActionBarDelegate. */ 33 /** Property for animating the top margin of ActionBarDelegate. */
34 public static final Property<ActionBarDelegate, Integer> TOP_MARGIN_ANIM_PRO PERTY = 34 public static final Property<ActionBarDelegate, Integer> TOP_MARGIN_ANIM_PRO PERTY =
35 new Property<ActionBarDelegate, Integer>(Integer.class, "controlTopM argin") { 35 new Property<ActionBarDelegate, Integer>(Integer.class, "controlTopM argin") {
36 @Override 36 @Override
37 public Integer get(ActionBarDelegate delegate) { 37 public Integer get(ActionBarDelegate delegate) {
38 return delegate.getControlTopMargin(); 38 return delegate.getControlTopMargin();
39 } 39 }
40 @Override 40 @Override
41 public void set(ActionBarDelegate delegate, Integer value) { 41 public void set(ActionBarDelegate delegate, Integer value) {
42 delegate.setControlTopMargin(value); 42 delegate.setControlTopMargin(value);
43 } 43 }
44 }; 44 };
45 45
46 /** 46 /**
47 * This is an interface for objects that the contextualMenuBar can use for a nimating the action 47 * This is an interface for to let the controller animate the position of {@ link Toolbar}, while
48 * bar. 48 * action mode is showing.
49 */ 49 */
50 public interface ActionBarDelegate { 50 public interface ActionBarDelegate {
51 51
52 /** 52 /**
53 * Sets the top margin of the control container. 53 * Sets the top margin of the control container.
54 * @param margin The new top margin of the control container. 54 * @param margin The new top margin of the control container.
55 */ 55 */
56 public void setControlTopMargin(int margin); 56 public void setControlTopMargin(int margin);
57 57
58 /** 58 /**
59 * @return The top margin of the control container. 59 * @return The top margin of the control container.
60 */ 60 */
61 public int getControlTopMargin(); 61 public int getControlTopMargin();
62 62
63 /** 63 /**
64 * @return The action bar that will be animated in and out. 64 * @return The action bar that will be animated in and out.
65 */ 65 */
66 public ActionBar getSupportActionBar(); 66 public ActionBar getSupportActionBar();
67 67
68 /** 68 /**
69 * Change the background visibility for the action bar. 69 * Change the background visibility for the action bar.
70 * @param visible Whether the background should be visible. 70 * @param visible Whether the background should be visible.
71 */ 71 */
72 public void setActionBarBackgroundVisibility(boolean visible); 72 public void setActionBarBackgroundVisibility(boolean visible);
73 } 73 }
74 74
75 /** 75 /**
76 * Creates the contextual menu bar and ties it to an action bar using the gi ven action bar 76 * Creates the {@link ActionModeController} and ties it to an action bar usi ng the given action
77 * delegate. 77 * bar delegate.
78 * @param context The context which the contextual action menu bar should be using for accessing 78 * @param actionBarDelegate The delegate for communicating with toolbar for animation.
79 * resources.
80 * @param actionBarDelegate The delegate for communicating with the action b ar while animating
81 * it.
82 */ 79 */
83 public ContextualMenuBar(Context context, ActionBarDelegate actionBarDelegat e) { 80 public ActionModeController(Context context, ActionBarDelegate actionBarDele gate) {
84 mActionBarDelegate = actionBarDelegate; 81 mActionBarDelegate = actionBarDelegate;
85 mContext = context; 82 mContext = context;
86 mTabStripHeight = mContext.getResources().getDimension(R.dimen.tab_strip _height); 83 mTabStripHeight = mContext.getResources().getDimension(R.dimen.tab_strip _height);
87 } 84 }
88 85
89 /** 86 /**
90 * Overrides the preset height of the tab strip. 87 * Overrides the preset height of the tab strip.
91 */ 88 */
92 public void setTabStripHeight(int tabStripHeight) { 89 public void setTabStripHeight(int tabStripHeight) {
93 mTabStripHeight = tabStripHeight; 90 mTabStripHeight = tabStripHeight;
94 } 91 }
95 92
96 /** 93 /**
97 * @return The delegate handling action bar positioning for the contextual m enu bar. 94 * @return The delegate handling action bar positioning for the custom actio n bar.
98 */ 95 */
99 public ActionBarDelegate getActionBarDelegate() { 96 public ActionBarDelegate getActionBarDelegate() {
100 return mActionBarDelegate; 97 return mActionBarDelegate;
101 } 98 }
102 99
103 /** 100 /**
104 * Sets the custom ActionMode.Callback 101 * Sets the custom ActionMode.Callback
105 * @param customSelectionActionModeCallback 102 * @param customSelectionActionModeCallback
106 */ 103 */
107 public void setCustomSelectionActionModeCallback( 104 public void setCustomSelectionActionModeCallback(
108 CustomSelectionActionModeCallback customSelectionActionModeCallback) { 105 ToolbarActionModeCallback customSelectionActionModeCallback) {
David Trainor- moved to gerrit 2015/08/18 18:32:50 Change parameter name too?
Ian Wen 2015/08/19 18:35:36 Done.
109 if (customSelectionActionModeCallback.equals(mCustomSelectionActionModeC allback)) return; 106 if (customSelectionActionModeCallback.equals(mCustomSelectionActionModeC allback)) return;
110 mCustomSelectionActionModeCallback = customSelectionActionModeCallback; 107 mCustomSelectionActionModeCallback = customSelectionActionModeCallback;
111 mCustomSelectionActionModeCallback.setContextualMenuBar(this); 108 mCustomSelectionActionModeCallback.setActionModeController(this);
112 } 109 }
113 110
114 /** 111 /**
115 * @return The custom ActionMode.Callback. 112 * @return The custom ActionMode.Callback.
116 */ 113 */
117 public CustomSelectionActionModeCallback getCustomSelectionActionModeCallbac k() { 114 public ToolbarActionModeCallback getActionModeCallback() {
118 return mCustomSelectionActionModeCallback; 115 return mCustomSelectionActionModeCallback;
119 } 116 }
120 117
121 /** 118 /**
122 * @return The current action bar height. 119 * @return The current action bar height.
123 */ 120 */
124 private int queryCurrentActionBarHeight() { 121 private int queryCurrentActionBarHeight() {
125 ActionBar actionBar = mActionBarDelegate.getSupportActionBar(); 122 ActionBar actionBar = mActionBarDelegate.getSupportActionBar();
126 if (actionBar != null) return actionBar.getHeight(); 123 if (actionBar != null) return actionBar.getHeight();
127 124
128 TypedArray styledAttributes = 125 TypedArray styledAttributes =
129 mContext.obtainStyledAttributes(new int[] {R.attr.actionBarSize} ); 126 mContext.obtainStyledAttributes(new int[] {R.attr.actionBarSize} );
130 int height = styledAttributes.getDimensionPixelSize(0, 0); 127 int height = styledAttributes.getDimensionPixelSize(0, 0);
131 styledAttributes.recycle(); 128 styledAttributes.recycle();
132 return height; 129 return height;
133 } 130 }
134 131
135 /** 132 /**
136 * Show controls after orientation change if previously visible. 133 * Show controls after orientation change if previously visible.
137 */ 134 */
138 public void showControlsOnOrientationChange() { 135 public void showControlsOnOrientationChange() {
139 if (mShowingContextualActionBar && mCurrentAnimation == null) { 136 if (mShowingActionMode && mCurrentAnimation == null) {
140 showControls(); 137 startShowAnimation();
141 } 138 }
142 } 139 }
143 140
144 /** 141 /**
145 * Animation for the textview if the action bar is visible. 142 * Animation for the textview if the action bar is visible.
146 */ 143 */
147 public void showControls() { 144 public void startShowAnimation() {
148 if (mCurrentAnimation != null) mCurrentAnimation.cancel(); 145 if (mCurrentAnimation != null) mCurrentAnimation.cancel();
149 146
150 mCurrentAnimation = ObjectAnimator.ofInt(mActionBarDelegate, TOP_MARGIN_ ANIM_PROPERTY, 147 mCurrentAnimation = ObjectAnimator.ofInt(mActionBarDelegate, TOP_MARGIN_ ANIM_PROPERTY,
151 (int) (Math.max(0, queryCurrentActionBarHeight() - mTabStripHeig ht))).setDuration( 148 (int) (Math.max(0, queryCurrentActionBarHeight() - mTabStripHeig ht))).setDuration(
152 SLIDE_DURATION_MS); 149 SLIDE_DURATION_MS);
153 150
154 mCurrentAnimation.addListener(new AnimatorListenerAdapter() { 151 mCurrentAnimation.addListener(new AnimatorListenerAdapter() {
155 @Override 152 @Override
156 public void onAnimationEnd(Animator animation) { 153 public void onAnimationEnd(Animator animation) {
157 mCurrentAnimation = null; 154 mCurrentAnimation = null;
158 } 155 }
159 }); 156 });
160 157
161 mCurrentAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateList ener() { 158 mCurrentAnimation.addUpdateListener(new ValueAnimator.AnimatorUpdateList ener() {
162 @Override 159 @Override
163 public void onAnimationUpdate(ValueAnimator animation) { 160 public void onAnimationUpdate(ValueAnimator animation) {
164 ActionBar actionBar = mActionBarDelegate.getSupportActionBar(); 161 ActionBar actionBar = mActionBarDelegate.getSupportActionBar();
165 if (actionBar != null) { 162 if (actionBar != null) {
166 animation.setIntValues((int) (Math.max(0, 163 animation.setIntValues((int) (Math.max(0,
167 queryCurrentActionBarHeight() - mTabStripHeight))); 164 queryCurrentActionBarHeight() - mTabStripHeight)));
168 } 165 }
169 } 166 }
170 }); 167 });
171 168
172 mActionBarDelegate.setActionBarBackgroundVisibility(true); 169 mActionBarDelegate.setActionBarBackgroundVisibility(true);
173 mCurrentAnimation.start(); 170 mCurrentAnimation.start();
174 mShowingContextualActionBar = true; 171 mShowingActionMode = true;
175 } 172 }
176 173
177 /** 174 /**
178 * Hide animation for the textview if the action bar is not visible. 175 * Hide animation for the textview if the action bar is not visible.
179 */ 176 */
180 public void hideControls() { 177 public void startHideAnimation() {
181 if (mCurrentAnimation != null) mCurrentAnimation.cancel(); 178 if (mCurrentAnimation != null) mCurrentAnimation.cancel();
182 179
183 mCurrentAnimation = ObjectAnimator.ofInt(mActionBarDelegate, TOP_MARGIN_ ANIM_PROPERTY, 180 mCurrentAnimation = ObjectAnimator.ofInt(mActionBarDelegate, TOP_MARGIN_ ANIM_PROPERTY,
184 0).setDuration(SLIDE_DURATION_MS); 181 0).setDuration(SLIDE_DURATION_MS);
185 182
186 mCurrentAnimation.addListener(new AnimatorListenerAdapter() { 183 mCurrentAnimation.addListener(new AnimatorListenerAdapter() {
187 @Override 184 @Override
188 public void onAnimationEnd(Animator animation) { 185 public void onAnimationEnd(Animator animation) {
189 mCurrentAnimation = null; 186 mCurrentAnimation = null;
190 mActionBarDelegate.setActionBarBackgroundVisibility(false); 187 mActionBarDelegate.setActionBarBackgroundVisibility(false);
191 } 188 }
192 }); 189 });
193 190
194 mCurrentAnimation.start(); 191 mCurrentAnimation.start();
195 mShowingContextualActionBar = false; 192 mShowingActionMode = false;
196 } 193 }
197 } 194 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698