Bug 1278221 - Manually find the toolbar in order to show options menu r?sebastian
Workaround for an Android support library bug
MozReview-Commit-ID: GD023N7tEWu
--- a/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/activities/FxAccountStatusActivity.java
+++ b/mobile/android/services/src/main/java/org/mozilla/gecko/fxa/activities/FxAccountStatusActivity.java
@@ -13,20 +13,23 @@ import android.annotation.TargetApi;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.content.Intent;
import android.os.Build;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
+import android.support.v7.widget.Toolbar;
import android.util.TypedValue;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.view.View;
+import android.view.Window;
import android.widget.Toast;
import org.mozilla.gecko.AppConstants;
import org.mozilla.gecko.Locales.LocaleAwareAppCompatActivity;
import org.mozilla.gecko.R;
import org.mozilla.gecko.background.common.log.Logger;
import org.mozilla.gecko.background.fxa.FxAccountUtils;
import org.mozilla.gecko.fxa.FirefoxAccounts;
import org.mozilla.gecko.fxa.FxAccountConstants;
@@ -202,9 +205,28 @@ public class FxAccountStatusActivity ext
final MenuItem debugModeItem = menu.findItem(R.id.enable_debug_mode);
if (debugModeItem != null) {
// Update checked state based on internal flag.
menu.findItem(R.id.enable_debug_mode).setChecked(FxAccountUtils.LOG_PERSONAL_INFORMATION);
}
}
return super.onCreateOptionsMenu(menu);
};
+
+ @Override
+ public void openOptionsMenu() {
+ // This is a workaround of an Android bug:
+ // https://code.google.com/p/android/issues/detail?id=185217
+ // openOptionsMenu isn't overriden by WindowDecorActionBar, which is used by AppCompatActivity,
+ // meaning getSupportActionbar().openOptionsMenu doesn't work.
+ // Based loosely on the code in:
+ // http://androidxref.com/6.0.1_r10/xref/frameworks/support/v7/appcompat/src/android/support/v7/internal/app/WindowDecorActionBar.java#getDecorToolbar
+
+ final Window window = getWindow();
+ final View decor = window.getDecorView();
+ final View view = decor.findViewById(R.id.action_bar);
+
+ if (view instanceof Toolbar) {
+ final Toolbar toolbar = (Toolbar) view;
+ toolbar.showOverflowMenu();
+ }
+ }
}