package org.wikipedia.theme;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.squareup.otto.Subscribe;
import org.wikipedia.R;
import org.wikipedia.WikipediaApp;
import org.wikipedia.analytics.AppearanceChangeFunnel;
import org.wikipedia.events.WebViewInvalidateEvent;
import org.wikipedia.page.ExtendedBottomSheetDialogFragment;
import org.wikipedia.settings.Prefs;
public class ThemeChooserDialog extends ExtendedBottomSheetDialogFragment {
private WikipediaApp app;
private TextView buttonDefaultTextSize;
private TextView buttonDecreaseTextSize;
private TextView buttonIncreaseTextSize;
private TextView buttonThemeLight;
private TextView buttonThemeDark;
private ProgressBar fontChangeProgressBar;
private boolean updatingFont = false;
private AppearanceChangeFunnel funnel;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.dialog_themechooser, container);
buttonDecreaseTextSize = (TextView) rootView.findViewById(R.id.buttonDecreaseTextSize);
buttonDecreaseTextSize.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updatingFont = true;
float currentSize = app.getFontSize(getDialog().getWindow());
app.setFontSizeMultiplier(Prefs.getTextSizeMultiplier() - 1);
updateButtonState();
funnel.logFontSizeChange(currentSize, app.getFontSize(getDialog().getWindow()));
}
});
buttonDefaultTextSize = (TextView) rootView.findViewById(R.id.buttonDefaultTextSize);
buttonDefaultTextSize.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updatingFont = true;
float currentSize = app.getFontSize(getDialog().getWindow());
app.setFontSizeMultiplier(0);
updateButtonState();
funnel.logFontSizeChange(currentSize, app.getFontSize(getDialog().getWindow()));
}
});
buttonIncreaseTextSize = (TextView) rootView.findViewById(R.id.buttonIncreaseTextSize);
buttonIncreaseTextSize.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
updatingFont = true;
float currentSize = app.getFontSize(getDialog().getWindow());
app.setFontSizeMultiplier(Prefs.getTextSizeMultiplier() + 1);
updateButtonState();
funnel.logFontSizeChange(currentSize, app.getFontSize(getDialog().getWindow()));
}
});
ThemeOnClickListener themeOnClickListener = new ThemeOnClickListener();
buttonThemeLight = (TextView) rootView.findViewById(R.id.buttonColorsLight);
buttonThemeLight.setOnClickListener(themeOnClickListener);
buttonThemeDark = (TextView) rootView.findViewById(R.id.buttonColorsDark);
buttonThemeDark.setOnClickListener(themeOnClickListener);
fontChangeProgressBar = (ProgressBar) rootView.findViewById(R.id.font_change_progress_bar);
updateButtonState();
disableBackgroundDim();
return rootView;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
app = WikipediaApp.getInstance();
app.getBus().register(this);
funnel = new AppearanceChangeFunnel(app, app.getWikiSite());
}
@Override
public void onDestroy() {
super.onDestroy();
app.getBus().unregister(this);
}
@Subscribe public void on(WebViewInvalidateEvent event) {
updatingFont = false;
updateButtonState();
}
private void updateButtonState() {
int mult = Prefs.getTextSizeMultiplier();
if (updatingFont) {
fontChangeProgressBar.setVisibility(View.VISIBLE);
buttonDefaultTextSize.setEnabled(false);
buttonDecreaseTextSize.setEnabled(false);
buttonIncreaseTextSize.setEnabled(false);
} else {
fontChangeProgressBar.setVisibility(View.GONE);
if (mult == 0) {
buttonDefaultTextSize.setEnabled(false);
buttonDecreaseTextSize.setEnabled(true);
buttonIncreaseTextSize.setEnabled(true);
} else {
buttonDefaultTextSize.setEnabled(true);
buttonDecreaseTextSize.setEnabled(mult > WikipediaApp.FONT_SIZE_MULTIPLIER_MIN);
buttonIncreaseTextSize.setEnabled(mult < WikipediaApp.FONT_SIZE_MULTIPLIER_MAX);
}
}
buttonThemeLight.setActivated(app.isCurrentThemeLight());
buttonThemeDark.setActivated(app.isCurrentThemeDark());
}
private class ThemeOnClickListener implements View.OnClickListener {
@Override
public void onClick(View view) {
Theme theme = getThemeChoiceForButton(view);
if (app.getCurrentTheme() != theme) {
funnel.logThemeChange(app.getCurrentTheme(), theme);
app.setCurrentTheme(theme);
}
}
private Theme getThemeChoiceForButton(View view) {
return isButtonForLightTheme(view) ? Theme.LIGHT : Theme.DARK;
}
private boolean isButtonForLightTheme(View view) {
return view == buttonThemeLight;
}
}
}