0824d3848f474b93305f270ebd766248d8b0073b
[pub/Android/ownCloud.git] / actionbarsherlock / src / com / actionbarsherlock / internal / ActionBarSherlockNative.java
1 package com.actionbarsherlock.internal;
2
3 import com.actionbarsherlock.ActionBarSherlock;
4 import com.actionbarsherlock.app.ActionBar;
5 import com.actionbarsherlock.internal.app.ActionBarWrapper;
6 import com.actionbarsherlock.internal.view.menu.MenuWrapper;
7 import com.actionbarsherlock.view.ActionMode;
8 import com.actionbarsherlock.view.MenuInflater;
9 import android.app.Activity;
10 import android.content.Context;
11 import android.util.Log;
12 import android.util.TypedValue;
13 import android.view.ContextThemeWrapper;
14 import android.view.View;
15 import android.view.Window;
16 import android.view.ViewGroup.LayoutParams;
17
18 @ActionBarSherlock.Implementation(api = 14)
19 public class ActionBarSherlockNative extends ActionBarSherlock {
20 private ActionBarWrapper mActionBar;
21 private ActionModeWrapper mActionMode;
22 private MenuWrapper mMenu;
23
24 public ActionBarSherlockNative(Activity activity, int flags) {
25 super(activity, flags);
26 }
27
28
29 @Override
30 public ActionBar getActionBar() {
31 if (DEBUG) Log.d(TAG, "[getActionBar]");
32
33 initActionBar();
34 return mActionBar;
35 }
36
37 private void initActionBar() {
38 if (mActionBar != null || mActivity.getActionBar() == null) {
39 return;
40 }
41
42 mActionBar = new ActionBarWrapper(mActivity);
43 }
44
45 @Override
46 public void dispatchInvalidateOptionsMenu() {
47 if (DEBUG) Log.d(TAG, "[dispatchInvalidateOptionsMenu]");
48
49 mActivity.getWindow().invalidatePanelMenu(Window.FEATURE_OPTIONS_PANEL);
50 }
51
52 @Override
53 public boolean dispatchCreateOptionsMenu(android.view.Menu menu) {
54 if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] menu: " + menu);
55
56 if (mMenu == null || menu != mMenu.unwrap()) {
57 mMenu = new MenuWrapper(menu);
58 }
59
60 final boolean result = callbackCreateOptionsMenu(mMenu);
61 if (DEBUG) Log.d(TAG, "[dispatchCreateOptionsMenu] returning " + result);
62 return result;
63 }
64
65 @Override
66 public boolean dispatchPrepareOptionsMenu(android.view.Menu menu) {
67 if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] menu: " + menu);
68
69 final boolean result = callbackPrepareOptionsMenu(mMenu);
70 if (DEBUG) Log.d(TAG, "[dispatchPrepareOptionsMenu] returning " + result);
71 return result;
72 }
73
74 @Override
75 public boolean dispatchOptionsItemSelected(android.view.MenuItem item) {
76 if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] item: " + item.getTitleCondensed());
77
78 final boolean result = callbackOptionsItemSelected(mMenu.findItem(item));
79 if (DEBUG) Log.d(TAG, "[dispatchOptionsItemSelected] returning " + result);
80 return result;
81 }
82
83 @Override
84 public boolean hasFeature(int feature) {
85 if (DEBUG) Log.d(TAG, "[hasFeature] feature: " + feature);
86
87 final boolean result = mActivity.getWindow().hasFeature(feature);
88 if (DEBUG) Log.d(TAG, "[hasFeature] returning " + result);
89 return result;
90 }
91
92 @Override
93 public boolean requestFeature(int featureId) {
94 if (DEBUG) Log.d(TAG, "[requestFeature] featureId: " + featureId);
95
96 final boolean result = mActivity.getWindow().requestFeature(featureId);
97 if (DEBUG) Log.d(TAG, "[requestFeature] returning " + result);
98 return result;
99 }
100
101 @Override
102 public void setUiOptions(int uiOptions) {
103 if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions);
104
105 mActivity.getWindow().setUiOptions(uiOptions);
106 }
107
108 @Override
109 public void setUiOptions(int uiOptions, int mask) {
110 if (DEBUG) Log.d(TAG, "[setUiOptions] uiOptions: " + uiOptions + ", mask: " + mask);
111
112 mActivity.getWindow().setUiOptions(uiOptions, mask);
113 }
114
115 @Override
116 public void setContentView(int layoutResId) {
117 if (DEBUG) Log.d(TAG, "[setContentView] layoutResId: " + layoutResId);
118
119 mActivity.getWindow().setContentView(layoutResId);
120 initActionBar();
121 }
122
123 @Override
124 public void setContentView(View view, LayoutParams params) {
125 if (DEBUG) Log.d(TAG, "[setContentView] view: " + view + ", params: " + params);
126
127 mActivity.getWindow().setContentView(view, params);
128 initActionBar();
129 }
130
131 @Override
132 public void addContentView(View view, LayoutParams params) {
133 if (DEBUG) Log.d(TAG, "[addContentView] view: " + view + ", params: " + params);
134
135 mActivity.getWindow().addContentView(view, params);
136 initActionBar();
137 }
138
139 @Override
140 public void setTitle(CharSequence title) {
141 if (DEBUG) Log.d(TAG, "[setTitle] title: " + title);
142
143 mActivity.getWindow().setTitle(title);
144 }
145
146 @Override
147 public void setProgressBarVisibility(boolean visible) {
148 if (DEBUG) Log.d(TAG, "[setProgressBarVisibility] visible: " + visible);
149
150 mActivity.setProgressBarVisibility(visible);
151 }
152
153 @Override
154 public void setProgressBarIndeterminateVisibility(boolean visible) {
155 if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminateVisibility] visible: " + visible);
156
157 mActivity.setProgressBarIndeterminateVisibility(visible);
158 }
159
160 @Override
161 public void setProgressBarIndeterminate(boolean indeterminate) {
162 if (DEBUG) Log.d(TAG, "[setProgressBarIndeterminate] indeterminate: " + indeterminate);
163
164 mActivity.setProgressBarIndeterminate(indeterminate);
165 }
166
167 @Override
168 public void setProgress(int progress) {
169 if (DEBUG) Log.d(TAG, "[setProgress] progress: " + progress);
170
171 mActivity.setProgress(progress);
172 }
173
174 @Override
175 public void setSecondaryProgress(int secondaryProgress) {
176 if (DEBUG) Log.d(TAG, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress);
177
178 mActivity.setSecondaryProgress(secondaryProgress);
179 }
180
181 @Override
182 protected Context getThemedContext() {
183 Context context = mActivity;
184 TypedValue outValue = new TypedValue();
185 mActivity.getTheme().resolveAttribute(android.R.attr.actionBarWidgetTheme, outValue, true);
186 if (outValue.resourceId != 0) {
187 //We are unable to test if this is the same as our current theme
188 //so we just wrap it and hope that if the attribute was specified
189 //then the user is intentionally specifying an alternate theme.
190 context = new ContextThemeWrapper(context, outValue.resourceId);
191 }
192 return context;
193 }
194
195 @Override
196 public ActionMode startActionMode(com.actionbarsherlock.view.ActionMode.Callback callback) {
197 if (DEBUG) Log.d(TAG, "[startActionMode] callback: " + callback);
198
199 if (mActionMode != null) {
200 mActionMode.finish();
201 }
202 ActionModeCallbackWrapper wrapped = null;
203 if (callback != null) {
204 wrapped = new ActionModeCallbackWrapper(callback);
205 }
206
207 //Calling this will trigger the callback wrapper's onCreate which
208 //is where we will set the new instance to mActionMode since we need
209 //to pass it through to the sherlock callbacks and the call below
210 //will not have returned yet to store its value.
211 if (mActivity.startActionMode(wrapped) == null) {
212 mActionMode = null;
213 }
214 if (mActivity instanceof OnActionModeStartedListener && mActionMode != null) {
215 ((OnActionModeStartedListener)mActivity).onActionModeStarted(mActionMode);
216 }
217
218 return mActionMode;
219 }
220
221 private class ActionModeCallbackWrapper implements android.view.ActionMode.Callback {
222 private final ActionMode.Callback mCallback;
223
224 public ActionModeCallbackWrapper(ActionMode.Callback callback) {
225 mCallback = callback;
226 }
227
228 @Override
229 public boolean onCreateActionMode(android.view.ActionMode mode, android.view.Menu menu) {
230 //See ActionBarSherlockNative#startActionMode
231 mActionMode = new ActionModeWrapper(mode);
232
233 return mCallback.onCreateActionMode(mActionMode, mActionMode.getMenu());
234 }
235
236 @Override
237 public boolean onPrepareActionMode(android.view.ActionMode mode, android.view.Menu menu) {
238 return mCallback.onPrepareActionMode(mActionMode, mActionMode.getMenu());
239 }
240
241 @Override
242 public boolean onActionItemClicked(android.view.ActionMode mode, android.view.MenuItem item) {
243 return mCallback.onActionItemClicked(mActionMode, mActionMode.getMenu().findItem(item));
244 }
245
246 @Override
247 public void onDestroyActionMode(android.view.ActionMode mode) {
248 mCallback.onDestroyActionMode(mActionMode);
249 if (mActivity instanceof OnActionModeFinishedListener) {
250 ((OnActionModeFinishedListener)mActivity).onActionModeFinished(mActionMode);
251 }
252 }
253 }
254
255 private class ActionModeWrapper extends ActionMode {
256 private final android.view.ActionMode mActionMode;
257 private MenuWrapper mMenu = null;
258
259 ActionModeWrapper(android.view.ActionMode actionMode) {
260 mActionMode = actionMode;
261 }
262
263 @Override
264 public void setTitle(CharSequence title) {
265 mActionMode.setTitle(title);
266 }
267
268 @Override
269 public void setTitle(int resId) {
270 mActionMode.setTitle(resId);
271 }
272
273 @Override
274 public void setSubtitle(CharSequence subtitle) {
275 mActionMode.setSubtitle(subtitle);
276 }
277
278 @Override
279 public void setSubtitle(int resId) {
280 mActionMode.setSubtitle(resId);
281 }
282
283 @Override
284 public void setCustomView(View view) {
285 mActionMode.setCustomView(view);
286 }
287
288 @Override
289 public void invalidate() {
290 mActionMode.invalidate();
291 }
292
293 @Override
294 public void finish() {
295 mActionMode.finish();
296 }
297
298 @Override
299 public MenuWrapper getMenu() {
300 if (mMenu == null) {
301 mMenu = new MenuWrapper(mActionMode.getMenu());
302 }
303 return mMenu;
304 }
305
306 @Override
307 public CharSequence getTitle() {
308 return mActionMode.getTitle();
309 }
310
311 @Override
312 public CharSequence getSubtitle() {
313 return mActionMode.getSubtitle();
314 }
315
316 @Override
317 public View getCustomView() {
318 return mActionMode.getCustomView();
319 }
320
321 @Override
322 public MenuInflater getMenuInflater() {
323 return ActionBarSherlockNative.this.getMenuInflater();
324 }
325
326 @Override
327 public void setTag(Object tag) {
328 mActionMode.setTag(tag);
329 }
330
331 @Override
332 public Object getTag() {
333 return mActionMode.getTag();
334 }
335 }
336 }