1 package com
.actionbarsherlock
.internal
;
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
;
18 @ActionBarSherlock.Implementation(api
= 14)
19 public class ActionBarSherlockNative
extends ActionBarSherlock
{
20 private ActionBarWrapper mActionBar
;
21 private ActionModeWrapper mActionMode
;
22 private MenuWrapper mMenu
;
24 public ActionBarSherlockNative(Activity activity
, int flags
) {
25 super(activity
, flags
);
30 public ActionBar
getActionBar() {
31 if (DEBUG
) Log
.d(TAG
, "[getActionBar]");
37 private void initActionBar() {
38 if (mActionBar
!= null
|| mActivity
.getActionBar() == null
) {
42 mActionBar
= new ActionBarWrapper(mActivity
);
46 public void dispatchInvalidateOptionsMenu() {
47 if (DEBUG
) Log
.d(TAG
, "[dispatchInvalidateOptionsMenu]");
49 mActivity
.getWindow().invalidatePanelMenu(Window
.FEATURE_OPTIONS_PANEL
);
53 public boolean dispatchCreateOptionsMenu(android
.view
.Menu menu
) {
54 if (DEBUG
) Log
.d(TAG
, "[dispatchCreateOptionsMenu] menu: " + menu
);
56 if (mMenu
== null
|| menu
!= mMenu
.unwrap()) {
57 mMenu
= new MenuWrapper(menu
);
60 final boolean result
= callbackCreateOptionsMenu(mMenu
);
61 if (DEBUG
) Log
.d(TAG
, "[dispatchCreateOptionsMenu] returning " + result
);
66 public boolean dispatchPrepareOptionsMenu(android
.view
.Menu menu
) {
67 if (DEBUG
) Log
.d(TAG
, "[dispatchPrepareOptionsMenu] menu: " + menu
);
69 final boolean result
= callbackPrepareOptionsMenu(mMenu
);
70 if (DEBUG
) Log
.d(TAG
, "[dispatchPrepareOptionsMenu] returning " + result
);
75 public boolean dispatchOptionsItemSelected(android
.view
.MenuItem item
) {
76 if (DEBUG
) Log
.d(TAG
, "[dispatchOptionsItemSelected] item: " + item
.getTitleCondensed());
78 final boolean result
= callbackOptionsItemSelected(mMenu
.findItem(item
));
79 if (DEBUG
) Log
.d(TAG
, "[dispatchOptionsItemSelected] returning " + result
);
84 public boolean hasFeature(int feature
) {
85 if (DEBUG
) Log
.d(TAG
, "[hasFeature] feature: " + feature
);
87 final boolean result
= mActivity
.getWindow().hasFeature(feature
);
88 if (DEBUG
) Log
.d(TAG
, "[hasFeature] returning " + result
);
93 public boolean requestFeature(int featureId
) {
94 if (DEBUG
) Log
.d(TAG
, "[requestFeature] featureId: " + featureId
);
96 final boolean result
= mActivity
.getWindow().requestFeature(featureId
);
97 if (DEBUG
) Log
.d(TAG
, "[requestFeature] returning " + result
);
102 public void setUiOptions(int uiOptions
) {
103 if (DEBUG
) Log
.d(TAG
, "[setUiOptions] uiOptions: " + uiOptions
);
105 mActivity
.getWindow().setUiOptions(uiOptions
);
109 public void setUiOptions(int uiOptions
, int mask
) {
110 if (DEBUG
) Log
.d(TAG
, "[setUiOptions] uiOptions: " + uiOptions
+ ", mask: " + mask
);
112 mActivity
.getWindow().setUiOptions(uiOptions
, mask
);
116 public void setContentView(int layoutResId
) {
117 if (DEBUG
) Log
.d(TAG
, "[setContentView] layoutResId: " + layoutResId
);
119 mActivity
.getWindow().setContentView(layoutResId
);
124 public void setContentView(View view
, LayoutParams params
) {
125 if (DEBUG
) Log
.d(TAG
, "[setContentView] view: " + view
+ ", params: " + params
);
127 mActivity
.getWindow().setContentView(view
, params
);
132 public void addContentView(View view
, LayoutParams params
) {
133 if (DEBUG
) Log
.d(TAG
, "[addContentView] view: " + view
+ ", params: " + params
);
135 mActivity
.getWindow().addContentView(view
, params
);
140 public void setTitle(CharSequence title
) {
141 if (DEBUG
) Log
.d(TAG
, "[setTitle] title: " + title
);
143 mActivity
.getWindow().setTitle(title
);
147 public void setProgressBarVisibility(boolean visible
) {
148 if (DEBUG
) Log
.d(TAG
, "[setProgressBarVisibility] visible: " + visible
);
150 mActivity
.setProgressBarVisibility(visible
);
154 public void setProgressBarIndeterminateVisibility(boolean visible
) {
155 if (DEBUG
) Log
.d(TAG
, "[setProgressBarIndeterminateVisibility] visible: " + visible
);
157 mActivity
.setProgressBarIndeterminateVisibility(visible
);
161 public void setProgressBarIndeterminate(boolean indeterminate
) {
162 if (DEBUG
) Log
.d(TAG
, "[setProgressBarIndeterminate] indeterminate: " + indeterminate
);
164 mActivity
.setProgressBarIndeterminate(indeterminate
);
168 public void setProgress(int progress
) {
169 if (DEBUG
) Log
.d(TAG
, "[setProgress] progress: " + progress
);
171 mActivity
.setProgress(progress
);
175 public void setSecondaryProgress(int secondaryProgress
) {
176 if (DEBUG
) Log
.d(TAG
, "[setSecondaryProgress] secondaryProgress: " + secondaryProgress
);
178 mActivity
.setSecondaryProgress(secondaryProgress
);
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
);
196 public ActionMode
startActionMode(com
.actionbarsherlock
.view
.ActionMode
.Callback callback
) {
197 if (DEBUG
) Log
.d(TAG
, "[startActionMode] callback: " + callback
);
199 if (mActionMode
!= null
) {
200 mActionMode
.finish();
202 ActionModeCallbackWrapper wrapped
= null
;
203 if (callback
!= null
) {
204 wrapped
= new ActionModeCallbackWrapper(callback
);
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
) {
214 if (mActivity
instanceof OnActionModeStartedListener
&& mActionMode
!= null
) {
215 ((OnActionModeStartedListener
)mActivity
).onActionModeStarted(mActionMode
);
221 private class ActionModeCallbackWrapper
implements android
.view
.ActionMode
.Callback
{
222 private final ActionMode
.Callback mCallback
;
224 public ActionModeCallbackWrapper(ActionMode
.Callback callback
) {
225 mCallback
= callback
;
229 public boolean onCreateActionMode(android
.view
.ActionMode mode
, android
.view
.Menu menu
) {
230 //See ActionBarSherlockNative#startActionMode
231 mActionMode
= new ActionModeWrapper(mode
);
233 return mCallback
.onCreateActionMode(mActionMode
, mActionMode
.getMenu());
237 public boolean onPrepareActionMode(android
.view
.ActionMode mode
, android
.view
.Menu menu
) {
238 return mCallback
.onPrepareActionMode(mActionMode
, mActionMode
.getMenu());
242 public boolean onActionItemClicked(android
.view
.ActionMode mode
, android
.view
.MenuItem item
) {
243 return mCallback
.onActionItemClicked(mActionMode
, mActionMode
.getMenu().findItem(item
));
247 public void onDestroyActionMode(android
.view
.ActionMode mode
) {
248 mCallback
.onDestroyActionMode(mActionMode
);
249 if (mActivity
instanceof OnActionModeFinishedListener
) {
250 ((OnActionModeFinishedListener
)mActivity
).onActionModeFinished(mActionMode
);
255 private class ActionModeWrapper
extends ActionMode
{
256 private final android
.view
.ActionMode mActionMode
;
257 private MenuWrapper mMenu
= null
;
259 ActionModeWrapper(android
.view
.ActionMode actionMode
) {
260 mActionMode
= actionMode
;
264 public void setTitle(CharSequence title
) {
265 mActionMode
.setTitle(title
);
269 public void setTitle(int resId
) {
270 mActionMode
.setTitle(resId
);
274 public void setSubtitle(CharSequence subtitle
) {
275 mActionMode
.setSubtitle(subtitle
);
279 public void setSubtitle(int resId
) {
280 mActionMode
.setSubtitle(resId
);
284 public void setCustomView(View view
) {
285 mActionMode
.setCustomView(view
);
289 public void invalidate() {
290 mActionMode
.invalidate();
294 public void finish() {
295 mActionMode
.finish();
299 public MenuWrapper
getMenu() {
301 mMenu
= new MenuWrapper(mActionMode
.getMenu());
307 public CharSequence
getTitle() {
308 return mActionMode
.getTitle();
312 public CharSequence
getSubtitle() {
313 return mActionMode
.getSubtitle();
317 public View
getCustomView() {
318 return mActionMode
.getCustomView();
322 public MenuInflater
getMenuInflater() {
323 return ActionBarSherlockNative
.this.getMenuInflater();
327 public void setTag(Object tag
) {
328 mActionMode
.setTag(tag
);
332 public Object
getTag() {
333 return mActionMode
.getTag();