package treehou.se.habit.ui.settings.subsettings;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CheckBox;
import android.widget.CompoundButton;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.Switch;
import com.trello.rxlifecycle.components.support.RxFragment;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import io.realm.Realm;
import io.realm.RealmResults;
import rx.functions.Action1;
import rx.functions.Func1;
import se.treehou.ng.ohcommunicator.connector.models.OHWidget;
import treehou.se.habit.util.Constants;
import treehou.se.habit.R;
import treehou.se.habit.core.db.settings.WidgetSettingsDB;
import treehou.se.habit.ui.widgets.DummyWidgetFactory;
public class WidgetSettingsFragment extends RxFragment {
private static final String TAG = "WidgetSettingsFragment";
private static final int BASE_IMAGE_SIZE = 50;
private OHWidget displayWidget;
@BindView(R.id.widget_holder) FrameLayout widgetHolder;
@BindView(R.id.img_widget_icon1) ImageView img1;
@BindView(R.id.img_widget_icon2) ImageView img2;
@BindView(R.id.img_widget_icon3) ImageView img3;
@BindView(R.id.img_widget_icon4) ImageView img4;
@BindView(R.id.img_widget_icon5) ImageView img5;
@BindView(R.id.img_widget_icon6) ImageView img6;
@BindView(R.id.cbx_enable_image_background) CheckBox cbxEnableImageBackground;
@BindView(R.id.lou_icon_backgrounds) View louIconBackground;
@BindView(R.id.bar_image_size) SeekBar barImageSize;
@BindView(R.id.bar_text_size) SeekBar barTextSize;
@BindView(R.id.swt_compressed_button) Switch swtCompressButton;
@BindView(R.id.swt_compressed_slider) Switch swtCompressSlider;
private Realm realm;
private Unbinder unbinder;
public static WidgetSettingsFragment newInstance() {
WidgetSettingsFragment fragment = new WidgetSettingsFragment();
Bundle args = new Bundle();
fragment.setArguments(args);
return fragment;
}
public WidgetSettingsFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
realm = Realm.getDefaultInstance();
displayWidget = new OHWidget();
displayWidget.setType("Dummy");
displayWidget.setLabel(getActivity().getString(R.string.label_widget_text));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_settings_widget, container, false);
unbinder = ButterKnife.bind(this, rootView);
ActionBar actionBar = ((AppCompatActivity) getActivity()).getSupportActionBar();
actionBar.setTitle(R.string.settings_widget);
final WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm);
redrawWidget();
barTextSize.setProgress(settings.getTextSize()-Constants.MIN_TEXT_ADDON);
barTextSize.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
realm.beginTransaction();
settings.setTextSize(Constants.MIN_TEXT_ADDON+progress);
realm.commitTransaction();
redrawWidget();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
DummyWidgetFactory factory = new DummyWidgetFactory(getActivity());
Bitmap bitmap = BitmapFactory.decodeResource(getActivity().getResources(), R.drawable.ic_item_settings_widget);
factory.setBackgroundColor(img1,bitmap, WidgetSettingsDB.MUTED_COLOR);
img1.setOnClickListener(new BackgroundSelectListener(WidgetSettingsDB.MUTED_COLOR));
factory.setBackgroundColor(img2,bitmap, WidgetSettingsDB.LIGHT_MUTED_COLOR);
img2.setOnClickListener(new BackgroundSelectListener(WidgetSettingsDB.LIGHT_MUTED_COLOR));
factory.setBackgroundColor(img3,bitmap, WidgetSettingsDB.DARK_MUTED_COLOR);
img3.setOnClickListener(new BackgroundSelectListener(WidgetSettingsDB.DARK_MUTED_COLOR));
factory.setBackgroundColor(img4,bitmap, WidgetSettingsDB.VIBRANT_COLOR);
img4.setOnClickListener(new BackgroundSelectListener(WidgetSettingsDB.VIBRANT_COLOR));
factory.setBackgroundColor(img5,bitmap, WidgetSettingsDB.LIGHT_VIBRANT_COLOR);
img5.setOnClickListener(new BackgroundSelectListener(WidgetSettingsDB.LIGHT_VIBRANT_COLOR));
factory.setBackgroundColor(img6,bitmap, WidgetSettingsDB.DARK_VIBRANT_COLOR);
img6.setOnClickListener(new BackgroundSelectListener(WidgetSettingsDB.DARK_VIBRANT_COLOR));
barImageSize.setProgress(settings.getIconSize()-BASE_IMAGE_SIZE);
barImageSize.setProgress(settings.getIconSize()-Constants.MIN_TEXT_ADDON);
barImageSize.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
realm.beginTransaction();
settings.setIconSize(BASE_IMAGE_SIZE + progress);
realm.commitTransaction();
redrawWidget();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
// TODO Add image showing change
swtCompressButton.setChecked(settings.isCompressedSingleButton());
swtCompressButton.setOnCheckedChangeListener((buttonView, isChecked) -> setCompressedButtonChanged(isChecked));
swtCompressSlider.setChecked(settings.isCompressedSlider());
swtCompressSlider.setOnCheckedChangeListener((buttonView, isChecked) -> setCompressedSliderChanged(isChecked));
// Inflate the layout for this fragment
return rootView;
}
@Override
public void onResume() {
super.onResume();
WidgetSettingsDB.loadGlobalRx(realm)
.map(widgetSettingsDBs -> widgetSettingsDBs.first().getImageBackground() >= 0)
.compose(bindToLifecycle())
.subscribe(useBackground -> {
cbxEnableImageBackground.setOnCheckedChangeListener(null);
cbxEnableImageBackground.setChecked(useBackground);
cbxEnableImageBackground.setOnCheckedChangeListener((compoundButton, checked) -> updateBackground(checked ? WidgetSettingsDB.MUTED_COLOR : WidgetSettingsDB.NO_COLOR));
louIconBackground.setVisibility(useBackground ? View.VISIBLE : View.GONE);
});
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
@Override
public void onDestroy() {
super.onDestroy();
realm.close();
}
private void setCompressedButtonChanged(boolean isChecked){
WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm);
realm.beginTransaction();
settings.setCompressedSingleButton(isChecked);
realm.commitTransaction();
}
private void setCompressedSliderChanged(boolean isChecked){
WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm);
realm.beginTransaction();
settings.setCompressedSlider(isChecked);
realm.commitTransaction();
}
private void redrawWidget(){
DummyWidgetFactory factory = new DummyWidgetFactory(getActivity());
View widget = factory.createWidget(displayWidget);
widgetHolder.removeAllViews();
Log.d(TAG, "Settings widget " + widget);
widgetHolder.addView(widget);
}
private void updateBackground(int backgroundType){
WidgetSettingsDB settings = WidgetSettingsDB.loadGlobal(realm);
realm.beginTransaction();
settings.setImageBackground(backgroundType);
realm.commitTransaction();
redrawWidget();
}
private class BackgroundSelectListener implements View.OnClickListener{
private int backgroundType;
private BackgroundSelectListener(int backgroundType) {
this.backgroundType = backgroundType;
}
@Override
public void onClick(View v) {
updateBackground(backgroundType);
}
}
}