Skip to content

Commit

Permalink
added onCreateOptionsMenu, onPrepareOptionsMenu interfaces that are a…
Browse files Browse the repository at this point in the history
…vailable for modules/proxies
  • Loading branch information
Mark Mokryn committed Oct 23, 2014
1 parent a70a083 commit 5764a42
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 2 deletions.
Expand Up @@ -22,6 +22,8 @@
import org.appcelerator.titanium.TiLifecycle.interceptOnBackPressedEvent;
import org.appcelerator.titanium.TiLifecycle.onActivityResultEvent;
import org.appcelerator.titanium.TiLifecycle.OnInstanceStateEvent;
import org.appcelerator.titanium.TiLifecycle.OnCreateOptionsMenuEvent;
import org.appcelerator.titanium.TiLifecycle.OnPrepareOptionsMenuEvent;
import org.appcelerator.titanium.proxy.ActionBarProxy;
import org.appcelerator.titanium.proxy.ActivityProxy;
import org.appcelerator.titanium.proxy.IntentProxy;
Expand Down Expand Up @@ -79,6 +81,8 @@ public abstract class TiBaseActivity extends ActionBarActivity
private TiWeakList<interceptOnBackPressedEvent> interceptOnBackPressedListeners = new TiWeakList<interceptOnBackPressedEvent>();
private TiWeakList<OnInstanceStateEvent> instanceStateListeners = new TiWeakList<OnInstanceStateEvent>();
private TiWeakList<onActivityResultEvent> onActivityResultListeners = new TiWeakList<onActivityResultEvent>();
private TiWeakList<OnCreateOptionsMenuEvent> onCreateOptionsMenuListeners = new TiWeakList<OnCreateOptionsMenuEvent>();
private TiWeakList<OnPrepareOptionsMenuEvent> onPrepareOptionsMenuListeners = new TiWeakList<OnPrepareOptionsMenuEvent>();
private APSAnalytics analytics = APSAnalytics.getInstance();

protected View layout;
Expand Down Expand Up @@ -828,11 +832,23 @@ public boolean onCreateOptionsMenu(Menu menu)
return false;
}

boolean listenerExists = false;
synchronized (onCreateOptionsMenuListeners.synchronizedList()) {
for (OnCreateOptionsMenuEvent listener : onCreateOptionsMenuListeners.nonNull()) {
try {
listenerExists = true;
TiLifecycle.fireOnCreateOptionsMenuEvent(this, listener, menu);
} catch (Throwable t) {
Log.e(TAG, "Error dispatching OnCreateOptionsMenuEvent: " + t.getMessage(), t);
}
}
}

if (menuHelper == null) {
menuHelper = new TiMenuSupport(activityProxy);
}

return menuHelper.onCreateOptionsMenu(super.onCreateOptionsMenu(menu), menu);
return menuHelper.onCreateOptionsMenu(super.onCreateOptionsMenu(menu) || listenerExists, menu);
}

@Override
Expand Down Expand Up @@ -861,7 +877,18 @@ public boolean onOptionsItemSelected(MenuItem item)
@Override
public boolean onPrepareOptionsMenu(Menu menu)
{
return menuHelper.onPrepareOptionsMenu(super.onPrepareOptionsMenu(menu), menu);
boolean listenerExists = false;
synchronized (onPrepareOptionsMenuListeners.synchronizedList()) {
for (OnPrepareOptionsMenuEvent listener : onPrepareOptionsMenuListeners.nonNull()) {
try {
listenerExists = true;
TiLifecycle.fireOnPrepareOptionsMenuEvent(this, listener, menu);
} catch (Throwable t) {
Log.e(TAG, "Error dispatching OnPrepareOptionsMenuEvent: " + t.getMessage(), t);
}
}
}
return menuHelper.onPrepareOptionsMenu(super.onPrepareOptionsMenu(menu) || listenerExists, menu);
}

public static void callOrientationChangedListener(Configuration newConfig)
Expand Down Expand Up @@ -928,6 +955,16 @@ public void addOnActivityResultListener(onActivityResultEvent listener)
onActivityResultListeners.add(new WeakReference<onActivityResultEvent>(listener));
}

public void addOnCreateOptionsMenuEventListener(OnCreateOptionsMenuEvent listener)
{
onCreateOptionsMenuListeners.add(new WeakReference<OnCreateOptionsMenuEvent>(listener));
}

public void addOnPrepareOptionsMenuEventListener(OnPrepareOptionsMenuEvent listener)
{
onPrepareOptionsMenuListeners.add(new WeakReference<OnPrepareOptionsMenuEvent>(listener));
}

public void removeOnLifecycleEventListener(OnLifecycleEvent listener)
{
// TODO stub
Expand Down
Expand Up @@ -9,6 +9,7 @@
import android.app.Activity;
import android.os.Bundle;
import android.content.Intent;
import android.view.Menu;

/**
*This class contains a single static utility method for firing a lifecycle event to a single listener.
Expand Down Expand Up @@ -102,6 +103,26 @@ public interface onActivityResultEvent {
public void onActivityResult(Activity activity, int requestCode, int resultCode, Intent data);
}

/**
* An interface to handle onCreateOptionsMenu events.
*/
public interface OnCreateOptionsMenuEvent {
/**
* Implementing classes should use this to receive native Android onCreateOptionsMenu events.
*/
public void onCreateOptionsMenu(Activity activity, Menu menu);
}

/**
* An interface to handle onPrepareOptionsMenu events.
*/
public interface OnPrepareOptionsMenuEvent {
/**
* Implementing classes should use this to receive native Android onPrepareOptionsMenu events.
*/
public void onPrepareOptionsMenu(Activity activity, Menu menu);
}

/**
* An interface to intercept OnBackPressed events.
*/
Expand All @@ -112,6 +133,16 @@ public interface interceptOnBackPressedEvent {
public boolean interceptOnBackPressed();
}

public static void fireOnCreateOptionsMenuEvent(Activity activity, OnCreateOptionsMenuEvent listener, Menu menu)
{
listener.onCreateOptionsMenu(activity, menu);
}

public static void fireOnPrepareOptionsMenuEvent(Activity activity, OnPrepareOptionsMenuEvent listener, Menu menu)
{
listener.onPrepareOptionsMenu(activity, menu);
}

public static void fireLifecycleEvent(Activity activity, OnLifecycleEvent listener, int which)
{
switch (which) {
Expand Down

0 comments on commit 5764a42

Please sign in to comment.