Source code

Revision control

Copy as Markdown

Other Tools

/* 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();
}
}