summaryrefslogtreecommitdiffstats
path: root/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/ToolbarLayout.java
diff options
context:
space:
mode:
Diffstat (limited to 'mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/ToolbarLayout.java')
-rw-r--r--mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/ToolbarLayout.java131
1 files changed, 131 insertions, 0 deletions
diff --git a/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/ToolbarLayout.java b/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/ToolbarLayout.java
new file mode 100644
index 0000000000..ce074f2ee3
--- /dev/null
+++ b/mobile/android/geckoview_example/src/main/java/org/mozilla/geckoview_example/ToolbarLayout.java
@@ -0,0 +1,131 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+package org.mozilla.geckoview_example;
+
+import android.content.Context;
+import android.graphics.Typeface;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.drawable.GradientDrawable;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageView;
+import android.widget.LinearLayout;
+import android.widget.PopupMenu;
+import android.widget.TextView;
+import androidx.core.content.ContextCompat;
+
+public class ToolbarLayout extends LinearLayout {
+ public interface TabListener {
+ void switchToTab(int tabId);
+
+ void onBrowserActionClick();
+ }
+
+ private LocationView mLocationView;
+ private Button mTabsCountButton;
+ private View mBrowserAction;
+ private TabListener mTabListener;
+ private TabSessionManager mSessionManager;
+
+ public ToolbarLayout(Context context, TabSessionManager sessionManager) {
+ super(context);
+ mSessionManager = sessionManager;
+ initView();
+ }
+
+ private void initView() {
+ setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT, 1.0f));
+ setOrientation(LinearLayout.HORIZONTAL);
+ mLocationView = new LocationView(getContext());
+ mLocationView.setLayoutParams(
+ new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT, 1.0f));
+ mLocationView.setId(R.id.url_bar);
+ addView(mLocationView);
+
+ mTabsCountButton = getTabsCountButton();
+ addView(mTabsCountButton);
+
+ mBrowserAction = getBrowserAction();
+ addView(mBrowserAction);
+ }
+
+ private Button getTabsCountButton() {
+ Button button = new Button(getContext());
+ button.setLayoutParams(new LayoutParams(150, LayoutParams.MATCH_PARENT));
+ button.setId(R.id.tabs_button);
+ button.setOnClickListener(this::onTabButtonClicked);
+ button.setBackground(ContextCompat.getDrawable(getContext(), R.drawable.tab_number_background));
+ button.setTypeface(button.getTypeface(), Typeface.BOLD);
+ return button;
+ }
+
+ private View getBrowserAction() {
+ View browserAction =
+ ((LayoutInflater) getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE))
+ .inflate(R.layout.browser_action, this, false);
+ browserAction.setVisibility(GONE);
+ return browserAction;
+ }
+
+ public void setBrowserActionButton(ActionButton button) {
+ if (button == null) {
+ mBrowserAction.setVisibility(GONE);
+ return;
+ }
+
+ BitmapDrawable drawable = new BitmapDrawable(getContext().getResources(), button.icon);
+ ImageView view = mBrowserAction.findViewById(R.id.browser_action_icon);
+ view.setOnClickListener(this::onBrowserActionButtonClicked);
+ view.setBackground(drawable);
+
+ TextView badge = mBrowserAction.findViewById(R.id.browser_action_badge);
+ if (button.text != null && !button.text.equals("")) {
+ if (button.backgroundColor != null) {
+ GradientDrawable backgroundDrawable = ((GradientDrawable) badge.getBackground().mutate());
+ backgroundDrawable.setColor(button.backgroundColor);
+ backgroundDrawable.invalidateSelf();
+ }
+ if (button.textColor != null) {
+ badge.setTextColor(button.textColor);
+ }
+ badge.setText(button.text);
+ badge.setVisibility(VISIBLE);
+ } else {
+ badge.setVisibility(GONE);
+ }
+
+ mBrowserAction.setVisibility(VISIBLE);
+ }
+
+ public void onBrowserActionButtonClicked(View view) {
+ mTabListener.onBrowserActionClick();
+ }
+
+ public LocationView getLocationView() {
+ return mLocationView;
+ }
+
+ public void setTabListener(TabListener listener) {
+ this.mTabListener = listener;
+ }
+
+ public void updateTabCount() {
+ mTabsCountButton.setText(String.valueOf(mSessionManager.sessionCount()));
+ }
+
+ public void onTabButtonClicked(View view) {
+ PopupMenu tabButtonMenu = new PopupMenu(getContext(), mTabsCountButton);
+ for (int idx = 0; idx < mSessionManager.sessionCount(); ++idx) {
+ tabButtonMenu.getMenu().add(0, idx, idx, mSessionManager.getSession(idx).getTitle());
+ }
+ tabButtonMenu.setOnMenuItemClickListener(
+ item -> {
+ mTabListener.switchToTab(item.getItemId());
+ return true;
+ });
+ tabButtonMenu.show();
+ }
+}