diff options
author | Dominik <dominik@dominikschuermann.de> | 2012-06-20 19:28:05 +0300 |
---|---|---|
committer | Dominik <dominik@dominikschuermann.de> | 2012-06-20 19:28:05 +0300 |
commit | 4130123e77c3ca2ea098f7c54dc143051f96b08d (patch) | |
tree | 7bb35890c980d69baa6cfe72c8cfaa4effc97850 /com_actionbarsherlock/src | |
parent | af4d8a59d1fe10226e5c627215863e2b68d4d303 (diff) | |
download | open-keychain-4130123e77c3ca2ea098f7c54dc143051f96b08d.tar.gz open-keychain-4130123e77c3ca2ea098f7c54dc143051f96b08d.tar.bz2 open-keychain-4130123e77c3ca2ea098f7c54dc143051f96b08d.zip |
Log wrapper and actionbarsherlock update
Diffstat (limited to 'com_actionbarsherlock/src')
13 files changed, 270 insertions, 156 deletions
diff --git a/com_actionbarsherlock/src/android/support/v4/app/_ActionBarSherlockTrojanHorse.java b/com_actionbarsherlock/src/android/support/v4/app/_ActionBarSherlockTrojanHorse.java new file mode 100644 index 000000000..3e3db62b7 --- /dev/null +++ b/com_actionbarsherlock/src/android/support/v4/app/_ActionBarSherlockTrojanHorse.java @@ -0,0 +1,144 @@ +package android.support.v4.app; + +import android.util.Log; +import android.view.View; +import android.view.Window; +import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener; +import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener; +import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener; +import com.actionbarsherlock.view.Menu; +import com.actionbarsherlock.view.MenuInflater; +import com.actionbarsherlock.view.MenuItem; + +import java.util.ArrayList; + +/** I'm in ur package. Stealing ur variables. */ +public abstract class _ActionBarSherlockTrojanHorse extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener { + private static final boolean DEBUG = false; + private static final String TAG = "_ActionBarSherlockTrojanHorse"; + + /** Fragment interface for menu creation callback. */ + public interface OnCreateOptionsMenuListener { + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater); + } + /** Fragment interface for menu preparation callback. */ + public interface OnPrepareOptionsMenuListener { + public void onPrepareOptionsMenu(Menu menu); + } + /** Fragment interface for menu item selection callback. */ + public interface OnOptionsItemSelectedListener { + public boolean onOptionsItemSelected(MenuItem item); + } + + private ArrayList<Fragment> mCreatedMenus; + + + /////////////////////////////////////////////////////////////////////////// + // Sherlock menu handling + /////////////////////////////////////////////////////////////////////////// + + @Override + public boolean onCreatePanelMenu(int featureId, Menu menu) { + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu); + + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + boolean result = onCreateOptionsMenu(menu); + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result); + + MenuInflater inflater = getSupportMenuInflater(); + boolean show = false; + ArrayList<Fragment> newMenus = null; + if (mFragments.mActive != null) { + for (int i = 0; i < mFragments.mAdded.size(); i++) { + Fragment f = mFragments.mAdded.get(i); + if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnCreateOptionsMenuListener) { + show = true; + ((OnCreateOptionsMenuListener)f).onCreateOptionsMenu(menu, inflater); + if (newMenus == null) { + newMenus = new ArrayList<Fragment>(); + } + newMenus.add(f); + } + } + } + + if (mCreatedMenus != null) { + for (int i = 0; i < mCreatedMenus.size(); i++) { + Fragment f = mCreatedMenus.get(i); + if (newMenus == null || !newMenus.contains(f)) { + f.onDestroyOptionsMenu(); + } + } + } + + mCreatedMenus = newMenus; + + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + show); + result |= show; + + if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result); + return result; + } + return false; + } + + @Override + public boolean onPreparePanel(int featureId, View view, Menu menu) { + if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu); + + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + boolean result = onPrepareOptionsMenu(menu); + if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result); + + boolean show = false; + if (mFragments.mActive != null) { + for (int i = 0; i < mFragments.mAdded.size(); i++) { + Fragment f = mFragments.mAdded.get(i); + if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnPrepareOptionsMenuListener) { + show = true; + ((OnPrepareOptionsMenuListener)f).onPrepareOptionsMenu(menu); + } + } + } + + if (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + show); + result |= show; + + result &= menu.hasVisibleItems(); + if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result); + return result; + } + return false; + } + + @Override + public boolean onMenuItemSelected(int featureId, MenuItem item) { + if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item); + + if (featureId == Window.FEATURE_OPTIONS_PANEL) { + if (onOptionsItemSelected(item)) { + return true; + } + + if (mFragments.mActive != null) { + for (int i = 0; i < mFragments.mAdded.size(); i++) { + Fragment f = mFragments.mAdded.get(i); + if (f != null && !f.mHidden && f.mHasMenu && f.mMenuVisible && f instanceof OnOptionsItemSelectedListener) { + if (((OnOptionsItemSelectedListener)f).onOptionsItemSelected(item)) { + return true; + } + } + } + } + } + return false; + } + + public abstract boolean onCreateOptionsMenu(Menu menu); + + public abstract boolean onPrepareOptionsMenu(Menu menu); + + public abstract boolean onOptionsItemSelected(MenuItem item); + + public abstract MenuInflater getSupportMenuInflater(); +} diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/ActionBarSherlock.java b/com_actionbarsherlock/src/com/actionbarsherlock/ActionBarSherlock.java index a7cc25d3e..8340fb591 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/ActionBarSherlock.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/ActionBarSherlock.java @@ -523,6 +523,20 @@ public abstract class ActionBarSherlock { */
public void dispatchPanelClosed(int featureId, android.view.Menu menu) {}
+ /**
+ * Notify the action bar that the activity has been destroyed. This method
+ * should be called before the superclass implementation.
+ *
+ * <blockquote><p>
+ * @Override
+ * public void onDestroy() {
+ * mSherlock.dispatchDestroy();
+ * super.onDestroy();
+ * }
+ * </p></blockquote>
+ */
+ public void dispatchDestroy() {}
+
///////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////
diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockActivity.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockActivity.java index d0a6d8128..9cb57e95a 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockActivity.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockActivity.java @@ -77,6 +77,12 @@ public abstract class SherlockActivity extends Activity implements OnCreatePanel }
@Override
+ protected void onDestroy() {
+ getSherlock().dispatchDestroy();
+ super.onDestroy();
+ }
+
+ @Override
protected void onPostCreate(Bundle savedInstanceState) {
getSherlock().dispatchPostCreate(savedInstanceState);
super.onPostCreate(savedInstanceState);
diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java index 4172888cc..a7c856bf0 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockDialogFragment.java @@ -1,18 +1,18 @@ package com.actionbarsherlock.app; -import static com.actionbarsherlock.app.SherlockFragmentActivity.DEBUG; import android.app.Activity; import android.support.v4.app.DialogFragment; -import android.util.Log; -import com.actionbarsherlock.internal.view.menu.MenuItemMule; -import com.actionbarsherlock.internal.view.menu.MenuMule; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; -public class SherlockDialogFragment extends DialogFragment { - private static final String TAG = "SherlockDialogFragment"; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener; +public class SherlockDialogFragment extends DialogFragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener { private SherlockFragmentActivity mActivity; public SherlockFragmentActivity getSherlockActivity() { @@ -22,7 +22,7 @@ public class SherlockDialogFragment extends DialogFragment { @Override public void onAttach(Activity activity) { if (!(activity instanceof SherlockFragmentActivity)) { - throw new IllegalStateException(TAG + " must be attached to a SherlockFragmentActivity."); + throw new IllegalStateException(getClass().getSimpleName() + " must be attached to a SherlockFragmentActivity."); } mActivity = (SherlockFragmentActivity)activity; @@ -30,45 +30,37 @@ public class SherlockDialogFragment extends DialogFragment { } @Override - public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { - if (DEBUG) Log.d(TAG, "[onCreateOptionsMenu] menu: " + menu + ", inflater: " + inflater); + public void onDetach() { + mActivity = null; + super.onDetach(); + } - if (menu instanceof MenuMule) { - MenuMule mule = (MenuMule)menu; - mule.mDispatchShow = true; - onCreateOptionsMenu(mule.unwrap(), mActivity.getSupportMenuInflater()); - } + @Override + public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { + onCreateOptionsMenu(new MenuWrapper(menu), mActivity.getSupportMenuInflater()); } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { //Nothing to see here. } @Override public final void onPrepareOptionsMenu(android.view.Menu menu) { - if (DEBUG) Log.d(TAG, "[onPrepareOptionsMenu] menu: " + menu); - - if (menu instanceof MenuMule) { - MenuMule mule = (MenuMule)menu; - mule.mDispatchShow = true; - onPrepareOptionsMenu(mule.unwrap()); - } + onPrepareOptionsMenu(new MenuWrapper(menu)); } + @Override public void onPrepareOptionsMenu(Menu menu) { //Nothing to see here. } @Override public final boolean onOptionsItemSelected(android.view.MenuItem item) { - if (DEBUG) Log.d(TAG, "[onOptionsItemSelected] item: " + item); - - if (item instanceof MenuItemMule) { - return onOptionsItemSelected(((MenuItemMule)item).unwrap()); - } - return false; + return onOptionsItemSelected(new MenuItemWrapper(item)); } + @Override public boolean onOptionsItemSelected(MenuItem item) { //Nothing to see here. return false; diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java index 3247c987c..078f9b0ca 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockExpandableListActivity.java @@ -77,6 +77,12 @@ public abstract class SherlockExpandableListActivity extends ExpandableListActiv }
@Override
+ protected void onDestroy() {
+ getSherlock().dispatchDestroy();
+ super.onDestroy();
+ }
+
+ @Override
protected void onPostCreate(Bundle savedInstanceState) {
getSherlock().dispatchPostCreate(savedInstanceState);
super.onPostCreate(savedInstanceState);
diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragment.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragment.java index 10d673f9f..0f24e9c85 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragment.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragment.java @@ -1,18 +1,18 @@ package com.actionbarsherlock.app; -import static com.actionbarsherlock.app.SherlockFragmentActivity.DEBUG; import android.app.Activity; import android.support.v4.app.Fragment; -import android.util.Log; -import com.actionbarsherlock.internal.view.menu.MenuItemMule; -import com.actionbarsherlock.internal.view.menu.MenuMule; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; -public class SherlockFragment extends Fragment { - private static final String TAG = "SherlockFragment"; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener; +public class SherlockFragment extends Fragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener { private SherlockFragmentActivity mActivity; public SherlockFragmentActivity getSherlockActivity() { @@ -22,7 +22,7 @@ public class SherlockFragment extends Fragment { @Override public void onAttach(Activity activity) { if (!(activity instanceof SherlockFragmentActivity)) { - throw new IllegalStateException(TAG + " must be attached to a SherlockFragmentActivity."); + throw new IllegalStateException(getClass().getSimpleName() + " must be attached to a SherlockFragmentActivity."); } mActivity = (SherlockFragmentActivity)activity; @@ -30,45 +30,37 @@ public class SherlockFragment extends Fragment { } @Override - public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { - if (DEBUG) Log.d(TAG, "[onCreateOptionsMenu] menu: " + menu + ", inflater: " + inflater); + public void onDetach() { + mActivity = null; + super.onDetach(); + } - if (menu instanceof MenuMule) { - MenuMule mule = (MenuMule)menu; - mule.mDispatchShow = true; - onCreateOptionsMenu(mule.unwrap(), mActivity.getSupportMenuInflater()); - } + @Override + public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { + onCreateOptionsMenu(new MenuWrapper(menu), mActivity.getSupportMenuInflater()); } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { //Nothing to see here. } @Override public final void onPrepareOptionsMenu(android.view.Menu menu) { - if (DEBUG) Log.d(TAG, "[onPrepareOptionsMenu] menu: " + menu); - - if (menu instanceof MenuMule) { - MenuMule mule = (MenuMule)menu; - mule.mDispatchShow = true; - onPrepareOptionsMenu(mule.unwrap()); - } + onPrepareOptionsMenu(new MenuWrapper(menu)); } + @Override public void onPrepareOptionsMenu(Menu menu) { //Nothing to see here. } @Override public final boolean onOptionsItemSelected(android.view.MenuItem item) { - if (DEBUG) Log.d(TAG, "[onOptionsItemSelected] item: " + item); - - if (item instanceof MenuItemMule) { - return onOptionsItemSelected(((MenuItemMule)item).unwrap()); - } - return false; + return onOptionsItemSelected(new MenuItemWrapper(item)); } + @Override public boolean onOptionsItemSelected(MenuItem item) { //Nothing to see here. return false; diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java index 49a5c6ca9..5cd13ba7c 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockFragmentActivity.java @@ -2,27 +2,24 @@ package com.actionbarsherlock.app; import android.content.res.Configuration; import android.os.Bundle; -import android.support.v4.app.FragmentActivity; +import android.support.v4.app._ActionBarSherlockTrojanHorse; import android.util.Log; import android.view.KeyEvent; import android.view.View; import android.view.ViewGroup.LayoutParams; import android.view.Window; import com.actionbarsherlock.ActionBarSherlock; -import com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener; -import com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener; -import com.actionbarsherlock.ActionBarSherlock.OnCreatePanelMenuListener; -import com.actionbarsherlock.ActionBarSherlock.OnMenuItemSelectedListener; -import com.actionbarsherlock.ActionBarSherlock.OnPreparePanelListener; -import com.actionbarsherlock.internal.view.menu.MenuItemMule; -import com.actionbarsherlock.internal.view.menu.MenuMule; import com.actionbarsherlock.view.ActionMode; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; -public abstract class SherlockFragmentActivity extends FragmentActivity implements OnCreatePanelMenuListener, OnPreparePanelListener, OnMenuItemSelectedListener, OnActionModeStartedListener, OnActionModeFinishedListener { - static final boolean DEBUG = false; +import static com.actionbarsherlock.ActionBarSherlock.OnActionModeFinishedListener; +import static com.actionbarsherlock.ActionBarSherlock.OnActionModeStartedListener; + +/** @see {@link _ActionBarSherlockTrojanHorse} */ +public class SherlockFragmentActivity extends _ActionBarSherlockTrojanHorse implements OnActionModeStartedListener, OnActionModeFinishedListener { + private static final boolean DEBUG = false; private static final String TAG = "SherlockFragmentActivity"; private ActionBarSherlock mSherlock; @@ -86,6 +83,12 @@ public abstract class SherlockFragmentActivity extends FragmentActivity implemen } @Override + protected void onDestroy() { + getSherlock().dispatchDestroy(); + super.onDestroy(); + } + + @Override protected void onPostCreate(Bundle savedInstanceState) { getSherlock().dispatchPostCreate(savedInstanceState); super.onPostCreate(savedInstanceState); @@ -221,75 +224,14 @@ public abstract class SherlockFragmentActivity extends FragmentActivity implemen // Sherlock menu handling /////////////////////////////////////////////////////////////////////////// - @Override - public boolean onCreatePanelMenu(int featureId, Menu menu) { - if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] featureId: " + featureId + ", menu: " + menu); - - if (featureId == Window.FEATURE_OPTIONS_PANEL) { - boolean result = onCreateOptionsMenu(menu); - if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] activity create result: " + result); - - //Dispatch to parent panel creation for fragment dispatching - if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] dispatching to native with mule"); - MenuMule mule = new MenuMule(menu); - super.onCreatePanelMenu(featureId, mule); - - if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] fragments create result: " + mule.mDispatchShow); - result |= mule.mDispatchShow; - - if (DEBUG) Log.d(TAG, "[onCreatePanelMenu] returning " + result); - return result; - } - return false; - } - public boolean onCreateOptionsMenu(Menu menu) { return true; } - @Override - public boolean onPreparePanel(int featureId, View view, Menu menu) { - if (DEBUG) Log.d(TAG, "[onPreparePanel] featureId: " + featureId + ", view: " + view + " menu: " + menu); - - if (featureId == Window.FEATURE_OPTIONS_PANEL) { - boolean result = onPrepareOptionsMenu(menu); - if (DEBUG) Log.d(TAG, "[onPreparePanel] activity prepare result: " + result); - - //Dispatch to parent panel preparation for fragment dispatching - if (DEBUG) Log.d(TAG, "[onPreparePanel] dispatching to native with mule"); - MenuMule mule = new MenuMule(menu); - super.onPreparePanel(featureId, view, mule); - - if (DEBUG) Log.d(TAG, "[onPreparePanel] fragments prepare result: " + mule.mDispatchShow); - result |= mule.mDispatchShow; - - result &= menu.hasVisibleItems(); - if (DEBUG) Log.d(TAG, "[onPreparePanel] returning " + result); - return result; - } - return false; - } - public boolean onPrepareOptionsMenu(Menu menu) { return true; } - @Override - public boolean onMenuItemSelected(int featureId, MenuItem item) { - if (DEBUG) Log.d(TAG, "[onMenuItemSelected] featureId: " + featureId + ", item: " + item); - - if (featureId == Window.FEATURE_OPTIONS_PANEL) { - if (onOptionsItemSelected(item)) { - return true; - } - - //Dispatch to parent panel selection for fragment dispatching - if (DEBUG) Log.d(TAG, "[onMenuItemSelected] dispatching to native with mule"); - return super.onMenuItemSelected(featureId, new MenuItemMule(item)); - } - return false; - } - public boolean onOptionsItemSelected(MenuItem item) { return false; } diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListActivity.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListActivity.java index 83114c3aa..00c00fee5 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListActivity.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListActivity.java @@ -77,6 +77,12 @@ public abstract class SherlockListActivity extends ListActivity implements OnCre }
@Override
+ protected void onDestroy() {
+ getSherlock().dispatchDestroy();
+ super.onDestroy();
+ }
+
+ @Override
protected void onPostCreate(Bundle savedInstanceState) {
getSherlock().dispatchPostCreate(savedInstanceState);
super.onPostCreate(savedInstanceState);
diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListFragment.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListFragment.java index 03a312b35..13ca3c49f 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListFragment.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockListFragment.java @@ -1,18 +1,18 @@ package com.actionbarsherlock.app; -import static com.actionbarsherlock.app.SherlockFragmentActivity.DEBUG; import android.app.Activity; import android.support.v4.app.ListFragment; -import android.util.Log; -import com.actionbarsherlock.internal.view.menu.MenuItemMule; -import com.actionbarsherlock.internal.view.menu.MenuMule; +import com.actionbarsherlock.internal.view.menu.MenuItemWrapper; +import com.actionbarsherlock.internal.view.menu.MenuWrapper; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; -public class SherlockListFragment extends ListFragment { - private static final String TAG = "SherlockListFragment"; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnCreateOptionsMenuListener; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnOptionsItemSelectedListener; +import static com.actionbarsherlock.app.SherlockFragmentActivity.OnPrepareOptionsMenuListener; +public class SherlockListFragment extends ListFragment implements OnCreateOptionsMenuListener, OnPrepareOptionsMenuListener, OnOptionsItemSelectedListener { private SherlockFragmentActivity mActivity; public SherlockFragmentActivity getSherlockActivity() { @@ -22,7 +22,7 @@ public class SherlockListFragment extends ListFragment { @Override public void onAttach(Activity activity) { if (!(activity instanceof SherlockFragmentActivity)) { - throw new IllegalStateException(TAG + " must be attached to a SherlockFragmentActivity."); + throw new IllegalStateException(getClass().getSimpleName() + " must be attached to a SherlockFragmentActivity."); } mActivity = (SherlockFragmentActivity)activity; @@ -30,45 +30,37 @@ public class SherlockListFragment extends ListFragment { } @Override - public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { - if (DEBUG) Log.d(TAG, "[onCreateOptionsMenu] menu: " + menu + ", inflater: " + inflater); + public void onDetach() { + mActivity = null; + super.onDetach(); + } - if (menu instanceof MenuMule) { - MenuMule mule = (MenuMule)menu; - mule.mDispatchShow = true; - onCreateOptionsMenu(mule.unwrap(), mActivity.getSupportMenuInflater()); - } + @Override + public final void onCreateOptionsMenu(android.view.Menu menu, android.view.MenuInflater inflater) { + onCreateOptionsMenu(new MenuWrapper(menu), mActivity.getSupportMenuInflater()); } + @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { //Nothing to see here. } @Override public final void onPrepareOptionsMenu(android.view.Menu menu) { - if (DEBUG) Log.d(TAG, "[onPrepareOptionsMenu] menu: " + menu); - - if (menu instanceof MenuMule) { - MenuMule mule = (MenuMule)menu; - mule.mDispatchShow = true; - onPrepareOptionsMenu(mule.unwrap()); - } + onPrepareOptionsMenu(new MenuWrapper(menu)); } + @Override public void onPrepareOptionsMenu(Menu menu) { //Nothing to see here. } @Override public final boolean onOptionsItemSelected(android.view.MenuItem item) { - if (DEBUG) Log.d(TAG, "[onOptionsItemSelected] item: " + item); - - if (item instanceof MenuItemMule) { - return onOptionsItemSelected(((MenuItemMule)item).unwrap()); - } - return false; + return onOptionsItemSelected(new MenuItemWrapper(item)); } + @Override public boolean onOptionsItemSelected(MenuItem item) { //Nothing to see here. return false; diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java index 71e40300a..4f80be515 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/app/SherlockPreferenceActivity.java @@ -77,6 +77,12 @@ public abstract class SherlockPreferenceActivity extends PreferenceActivity impl }
@Override
+ protected void onDestroy() {
+ getSherlock().dispatchDestroy();
+ super.onDestroy();
+ }
+
+ @Override
protected void onPostCreate(Bundle savedInstanceState) {
getSherlock().dispatchPostCreate(savedInstanceState);
super.onPostCreate(savedInstanceState);
diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java b/com_actionbarsherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java index f080bfe95..05353d28c 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/internal/ActionBarSherlockCompat.java @@ -81,6 +81,8 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu /** Whether or not the title is stable and can be displayed. */ private boolean mIsTitleReady = false; + /** Whether or not the parent activity has been destroyed. */ + private boolean mIsDestroyed = false; /* Emulate PanelFeatureState */ private boolean mClosingActionMenu; @@ -413,7 +415,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu } // Next collapse any expanded action views. - if (aActionBar != null && wActionBar.hasExpandedActionView()) { + if (wActionBar != null && wActionBar.hasExpandedActionView()) { if (action == KeyEvent.ACTION_UP) { wActionBar.collapseActionView(); } @@ -428,7 +430,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu mMenuKeyIsLongPress = true; } else if (event.getAction() == KeyEvent.ACTION_UP) { if (!mMenuKeyIsLongPress) { - if (mActionMode == null) { + if (mActionMode == null && wActionBar != null) { if (wActionBar.isOverflowMenuShowing()) { wActionBar.hideOverflowMenu(); } else { @@ -445,6 +447,11 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu return result; } + @Override + public void dispatchDestroy() { + mIsDestroyed = true; + } + /////////////////////////////////////////////////////////////////////////// // Menu callback lifecycle and creation @@ -977,7 +984,7 @@ public class ActionBarSherlockCompat extends ActionBarSherlock implements MenuBu @Override public void run() { //Invalidate if the panel menu hasn't been created before this. - if (!mActivity.isFinishing() && mMenu == null) { + if (!mIsDestroyed && !mActivity.isFinishing() && mMenu == null) { dispatchInvalidateOptionsMenu(); } } diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java b/com_actionbarsherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java index 1bd0eaccb..e390ea428 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/internal/app/ActionBarWrapper.java @@ -217,7 +217,6 @@ public class ActionBarWrapper extends ActionBar implements android.app.ActionBar public TabWrapper(android.app.ActionBar.Tab nativeTab) { mNativeTab = nativeTab; mNativeTab.setTag(this); - mNativeTab.setTabListener(this); } @Override @@ -289,6 +288,7 @@ public class ActionBarWrapper extends ActionBar implements android.app.ActionBar @Override public Tab setTabListener(TabListener listener) { + mNativeTab.setTabListener(listener != null ? this : null); mListener = listener; return this; } diff --git a/com_actionbarsherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java b/com_actionbarsherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java index e284604bb..067d0494e 100644 --- a/com_actionbarsherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java +++ b/com_actionbarsherlock/src/com/actionbarsherlock/internal/nineoldandroids/view/animation/AnimatorProxy.java @@ -140,6 +140,8 @@ public final class AnimatorProxy extends Animation { return; } + view.setAnimation(this); + final RectF after = mAfter; computeRect(after, view); after.union(mBefore); @@ -202,4 +204,9 @@ public final class AnimatorProxy extends Animation { transformMatrix(t.getMatrix(), view); } } + + @Override + public void reset() { + /* Do nothing. */ + } } |