Bug 1278221 - Manually find the toolbar in order to show options menu r?sebastian draft
authorAndrzej Hunt <ahunt@mozilla.com>
Mon, 06 Jun 2016 14:16:35 -0700
changeset 376411 7640cdc79c340c4ab63e6b5ac625729575cad170
parent 376296 2f0a8c420b18954e18b57993ea9c1a84190a0cb1
child 523148 65f54263aa6c2a6b639484df6717c87544f57d01
push id20572
push userahunt@mozilla.com
push dateTue, 07 Jun 2016 22:16:40 +0000
reviewerssebastian
bugs1278221
milestone50.0a1
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
mobile/android/services/src/main/java/org/mozilla/gecko/fxa/activities/FxAccountStatusActivity.java
--- 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();
+    }
+  }
 }