Skip to content

Commit

Permalink
Unify settings content UI (#1484)
Browse files Browse the repository at this point in the history
* Unify settings UI

* Rebase fixes

Reuse layouts across all the settings views.

* Fixed performance monitor reset
  • Loading branch information
keianhzo authored and bluemarvin committed Aug 5, 2019
1 parent 9856aae commit 028c538
Show file tree
Hide file tree
Showing 20 changed files with 554 additions and 670 deletions.
Expand Up @@ -6,83 +6,75 @@
package org.mozilla.vrbrowser.ui.widgets.settings;

import android.content.Context;
import android.widget.ScrollView;
import android.view.LayoutInflater;

import androidx.databinding.DataBindingUtil;

import org.mozilla.vrbrowser.R;
import org.mozilla.vrbrowser.audio.AudioEngine;
import org.mozilla.vrbrowser.browser.SettingsStore;
import org.mozilla.vrbrowser.ui.views.UIButton;
import org.mozilla.vrbrowser.ui.views.settings.ButtonSetting;
import org.mozilla.vrbrowser.databinding.OptionsControllerBinding;
import org.mozilla.vrbrowser.ui.views.settings.RadioGroupSetting;
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;

class ControllerOptionsView extends SettingsView {
private AudioEngine mAudio;
private UIButton mBackButton;
private RadioGroupSetting mPointerColorRadio;
private RadioGroupSetting mScrollDirectionRadio;
private ButtonSetting mResetButton;

private OptionsControllerBinding mBinding;

public ControllerOptionsView(Context aContext, WidgetManagerDelegate aWidgetManager) {
super(aContext, aWidgetManager);
initialize(aContext);
}

private void initialize(Context aContext) {
inflate(aContext, R.layout.options_controller, this);
mAudio = AudioEngine.fromContext(aContext);
LayoutInflater inflater = LayoutInflater.from(aContext);

// Inflate this data binding layout
mBinding = DataBindingUtil.inflate(inflater, R.layout.options_controller, this, true);

mBackButton = findViewById(R.id.backButton);
mBackButton.setOnClickListener(view -> {
if (mAudio != null) {
mAudio.playSound(AudioEngine.Sound.CLICK);
}
onDismiss();
});
mScrollbar = mBinding.scrollbar;

mScrollbar = findViewById(R.id.scrollbar);
// Header
mBinding.headerLayout.setBackClickListener(view -> onDismiss());

// Footer
mBinding.footerLayout.setResetClickListener(v -> resetOptions());

int color = SettingsStore.getInstance(getContext()).getPointerColor();
mPointerColorRadio = findViewById(R.id.pointer_color_radio);
mPointerColorRadio.setOnCheckedChangeListener(mPointerColorListener);
setPointerColor(mPointerColorRadio.getIdForValue(color), false);
mBinding.pointerColorRadio.setOnCheckedChangeListener(mPointerColorListener);
setPointerColor(mBinding.pointerColorRadio.getIdForValue(color), false);

int scrollDirection = SettingsStore.getInstance(getContext()).getScrollDirection();
mScrollDirectionRadio = findViewById(R.id.scroll_direction_radio);
mScrollDirectionRadio.setOnCheckedChangeListener(mScrollDirectionListener);
setScrollDirection(mScrollDirectionRadio.getIdForValue(scrollDirection), false);

mResetButton = findViewById(R.id.resetButton);
mResetButton.setOnClickListener(v -> resetOptions());
mBinding.scrollDirectionRadio.setOnCheckedChangeListener(mScrollDirectionListener);
setScrollDirection(mBinding.scrollDirectionRadio.getIdForValue(scrollDirection), false);
}

private void resetOptions() {
if (!mPointerColorRadio.getValueForId(mPointerColorRadio.getCheckedRadioButtonId()).equals(SettingsStore.POINTER_COLOR_DEFAULT_DEFAULT)) {
setPointerColor(mPointerColorRadio.getIdForValue(SettingsStore.POINTER_COLOR_DEFAULT_DEFAULT), true);
if (!mBinding.pointerColorRadio.getValueForId(mBinding.pointerColorRadio.getCheckedRadioButtonId()).equals(SettingsStore.POINTER_COLOR_DEFAULT_DEFAULT)) {
setPointerColor(mBinding.pointerColorRadio.getIdForValue(SettingsStore.POINTER_COLOR_DEFAULT_DEFAULT), true);
}
if (!mScrollDirectionRadio.getValueForId(mScrollDirectionRadio.getCheckedRadioButtonId()).equals(SettingsStore.SCROLL_DIRECTION_DEFAULT)) {
setScrollDirection(mScrollDirectionRadio.getIdForValue(SettingsStore.SCROLL_DIRECTION_DEFAULT), true);
if (!mBinding.scrollDirectionRadio.getValueForId(mBinding.scrollDirectionRadio.getCheckedRadioButtonId()).equals(SettingsStore.SCROLL_DIRECTION_DEFAULT)) {
setScrollDirection(mBinding.scrollDirectionRadio.getIdForValue(SettingsStore.SCROLL_DIRECTION_DEFAULT), true);
}
}

private void setPointerColor(int checkedId, boolean doApply) {
mPointerColorRadio.setOnCheckedChangeListener(null);
mPointerColorRadio.setChecked(checkedId, doApply);
mPointerColorRadio.setOnCheckedChangeListener(mPointerColorListener);
mBinding.pointerColorRadio.setOnCheckedChangeListener(null);
mBinding.pointerColorRadio.setChecked(checkedId, doApply);
mBinding.pointerColorRadio.setOnCheckedChangeListener(mPointerColorListener);

if (doApply) {
SettingsStore.getInstance(getContext()).setPointerColor((int)mPointerColorRadio.getValueForId(checkedId));
SettingsStore.getInstance(getContext()).setPointerColor((int)mBinding.pointerColorRadio.getValueForId(checkedId));
mWidgetManager.updatePointerColor();
}
}

private void setScrollDirection(int checkedId, boolean doApply) {
mScrollDirectionRadio.setOnCheckedChangeListener(null);
mScrollDirectionRadio.setChecked(checkedId, doApply);
mScrollDirectionRadio.setOnCheckedChangeListener(mScrollDirectionListener);
mBinding.scrollDirectionRadio.setOnCheckedChangeListener(null);
mBinding.scrollDirectionRadio.setChecked(checkedId, doApply);
mBinding.scrollDirectionRadio.setOnCheckedChangeListener(mScrollDirectionListener);

if (doApply) {
SettingsStore.getInstance(getContext()).setScrollDirection((int)mScrollDirectionRadio.getValueForId(checkedId));
SettingsStore.getInstance(getContext()).setScrollDirection((int)mBinding.scrollDirectionRadio.getValueForId(checkedId));
}
}

Expand Down
Expand Up @@ -6,76 +6,63 @@
package org.mozilla.vrbrowser.ui.widgets.settings;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;

import androidx.databinding.DataBindingUtil;

import org.mozilla.vrbrowser.R;
import org.mozilla.vrbrowser.audio.AudioEngine;
import org.mozilla.vrbrowser.browser.SettingsStore;
import org.mozilla.vrbrowser.browser.engine.SessionStore;
import org.mozilla.vrbrowser.ui.views.UIButton;
import org.mozilla.vrbrowser.ui.views.settings.ButtonSetting;
import org.mozilla.vrbrowser.databinding.OptionsDeveloperBinding;
import org.mozilla.vrbrowser.ui.views.settings.SwitchSetting;
import org.mozilla.vrbrowser.ui.widgets.WidgetManagerDelegate;

import static org.mozilla.vrbrowser.utils.ServoUtils.isServoAvailable;

class DeveloperOptionsView extends SettingsView {
private AudioEngine mAudio;
private UIButton mBackButton;
private SwitchSetting mRemoteDebuggingSwitch;
private SwitchSetting mConsoleLogsSwitch;
private SwitchSetting mMultiprocessSwitch;
private SwitchSetting mPerformanceSwitch;
private SwitchSetting mServoSwitch;
private ButtonSetting mResetButton;

private OptionsDeveloperBinding mBinding;

public DeveloperOptionsView(Context aContext, WidgetManagerDelegate aWidgetManager) {
super(aContext, aWidgetManager);
initialize(aContext);
}

private void initialize(Context aContext) {
inflate(aContext, R.layout.options_developer, this);
LayoutInflater inflater = LayoutInflater.from(aContext);

mAudio = AudioEngine.fromContext(aContext);
// Inflate this data binding layout
mBinding = DataBindingUtil.inflate(inflater, R.layout.options_developer, this, true);

mBackButton = findViewById(R.id.backButton);
mBackButton.setOnClickListener(view -> {
if (mAudio != null) {
mAudio.playSound(AudioEngine.Sound.CLICK);
}
mScrollbar = mBinding.scrollbar;

onDismiss();
});
// Header
mBinding.headerLayout.setBackClickListener(view -> onDismiss());

mRemoteDebuggingSwitch = findViewById(R.id.remote_debugging_switch);
mRemoteDebuggingSwitch.setOnCheckedChangeListener(mRemoteDebuggingListener);
// Footer
mBinding.footerLayout.setResetClickListener(mResetListener);

// Switches
mBinding.remoteDebuggingSwitch.setOnCheckedChangeListener(mRemoteDebuggingListener);
setRemoteDebugging(SettingsStore.getInstance(getContext()).isRemoteDebuggingEnabled(), false);

mConsoleLogsSwitch = findViewById(R.id.show_console_switch);
mConsoleLogsSwitch.setOnCheckedChangeListener(mConsoleLogsListener);
mBinding.showConsoleSwitch.setOnCheckedChangeListener(mConsoleLogsListener);
setConsoleLogs(SettingsStore.getInstance(getContext()).isConsoleLogsEnabled(), false);

mMultiprocessSwitch = findViewById(R.id.multiprocess_switch);
mMultiprocessSwitch.setOnCheckedChangeListener(mMultiprocessListener);
mBinding.multiprocessSwitch.setOnCheckedChangeListener(mMultiprocessListener);
setMultiprocess(SettingsStore.getInstance(getContext()).isMultiprocessEnabled(), false);

mPerformanceSwitch = findViewById(R.id.performance_monitor_switch);
mPerformanceSwitch.setOnCheckedChangeListener(mPerformanceListener);
mBinding.performanceMonitorSwitch.setOnCheckedChangeListener(mPerformanceListener);
setPerformance(SettingsStore.getInstance(getContext()).isPerformanceMonitorEnabled(), false);

mServoSwitch = findViewById(R.id.servo_switch);
if (!isServoAvailable()) {
mServoSwitch.setVisibility(View.GONE);
mBinding.servoSwitch.setVisibility(View.GONE);

} else {
mServoSwitch.setOnCheckedChangeListener(mServoListener);
mBinding.servoSwitch.setOnCheckedChangeListener(mServoListener);
setServo(SettingsStore.getInstance(getContext()).isServoEnabled(), false);
}

mResetButton = findViewById(R.id.resetButton);
mResetButton.setOnClickListener(mResetListener);

mScrollbar = findViewById(R.id.scrollbar);
}

private SwitchSetting.OnCheckedChangeListener mRemoteDebuggingListener = (compoundButton, value, doApply) -> {
Expand All @@ -100,30 +87,34 @@ private void initialize(Context aContext) {

private OnClickListener mResetListener = (view) -> {
boolean restart = false;
if (mRemoteDebuggingSwitch.isChecked() != SettingsStore.REMOTE_DEBUGGING_DEFAULT) {
if (mBinding.remoteDebuggingSwitch.isChecked() != SettingsStore.REMOTE_DEBUGGING_DEFAULT) {
setRemoteDebugging(SettingsStore.REMOTE_DEBUGGING_DEFAULT, true);
restart = true;
}

if (mConsoleLogsSwitch.isChecked() != SettingsStore.CONSOLE_LOGS_DEFAULT) {
if (mBinding.showConsoleSwitch.isChecked() != SettingsStore.CONSOLE_LOGS_DEFAULT) {
setConsoleLogs(SettingsStore.CONSOLE_LOGS_DEFAULT, true);
}
if (mMultiprocessSwitch.isChecked() != SettingsStore.MULTIPROCESS_DEFAULT) {
if (mBinding.multiprocessSwitch.isChecked() != SettingsStore.MULTIPROCESS_DEFAULT) {
setMultiprocess(SettingsStore.MULTIPROCESS_DEFAULT, true);
}
if (mServoSwitch.isChecked() != SettingsStore.SERVO_DEFAULT) {
if (mBinding.servoSwitch.isChecked() != SettingsStore.SERVO_DEFAULT) {
setServo(SettingsStore.SERVO_DEFAULT, true);
}

if (mBinding.performanceMonitorSwitch.isChecked() != SettingsStore.PERFORMANCE_MONITOR_DEFAULT) {
setPerformance(SettingsStore.PERFORMANCE_MONITOR_DEFAULT, true);
}

if (restart && mDelegate != null) {
showRestartDialog();
}
};

private void setRemoteDebugging(boolean value, boolean doApply) {
mRemoteDebuggingSwitch.setOnCheckedChangeListener(null);
mRemoteDebuggingSwitch.setValue(value, doApply);
mRemoteDebuggingSwitch.setOnCheckedChangeListener(mRemoteDebuggingListener);
mBinding.remoteDebuggingSwitch.setOnCheckedChangeListener(null);
mBinding.remoteDebuggingSwitch.setValue(value, doApply);
mBinding.remoteDebuggingSwitch.setOnCheckedChangeListener(mRemoteDebuggingListener);

SettingsStore.getInstance(getContext()).setRemoteDebuggingEnabled(value);

Expand All @@ -133,9 +124,9 @@ private void setRemoteDebugging(boolean value, boolean doApply) {
}

private void setConsoleLogs(boolean value, boolean doApply) {
mConsoleLogsSwitch.setOnCheckedChangeListener(null);
mConsoleLogsSwitch.setValue(value, doApply);
mConsoleLogsSwitch.setOnCheckedChangeListener(mConsoleLogsListener);
mBinding.showConsoleSwitch.setOnCheckedChangeListener(null);
mBinding.showConsoleSwitch.setValue(value, doApply);
mBinding.showConsoleSwitch.setOnCheckedChangeListener(mConsoleLogsListener);

SettingsStore.getInstance(getContext()).setConsoleLogsEnabled(value);

Expand All @@ -145,9 +136,9 @@ private void setConsoleLogs(boolean value, boolean doApply) {
}

private void setMultiprocess(boolean value, boolean doApply) {
mMultiprocessSwitch.setOnCheckedChangeListener(null);
mMultiprocessSwitch.setValue(value, false);
mMultiprocessSwitch.setOnCheckedChangeListener(mMultiprocessListener);
mBinding.multiprocessSwitch.setOnCheckedChangeListener(null);
mBinding.multiprocessSwitch.setValue(value, false);
mBinding.multiprocessSwitch.setOnCheckedChangeListener(mMultiprocessListener);

SettingsStore.getInstance(getContext()).setMultiprocessEnabled(value);

Expand All @@ -157,17 +148,17 @@ private void setMultiprocess(boolean value, boolean doApply) {
}

private void setPerformance(boolean value, boolean doApply) {
mPerformanceSwitch.setOnCheckedChangeListener(null);
mPerformanceSwitch.setValue(value, false);
mPerformanceSwitch.setOnCheckedChangeListener(mPerformanceListener);
mBinding.performanceMonitorSwitch.setOnCheckedChangeListener(null);
mBinding.performanceMonitorSwitch.setValue(value, false);
mBinding.performanceMonitorSwitch.setOnCheckedChangeListener(mPerformanceListener);

SettingsStore.getInstance(getContext()).setPerformanceMonitorEnabled(value);
}

private void setServo(boolean value, boolean doApply) {
mServoSwitch.setOnCheckedChangeListener(null);
mServoSwitch.setValue(value, false);
mServoSwitch.setOnCheckedChangeListener(mServoListener);
mBinding.servoSwitch.setOnCheckedChangeListener(null);
mBinding.servoSwitch.setValue(value, false);
mBinding.servoSwitch.setOnCheckedChangeListener(mServoListener);

SettingsStore.getInstance(getContext()).setServoEnabled(value);

Expand Down

0 comments on commit 028c538

Please sign in to comment.