package treehou.se.habit.ui.colorpicker;
import android.app.Fragment;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.google.gson.Gson;
import java.util.Locale;
import java.util.Timer;
import java.util.TimerTask;
import butterknife.BindView;
import butterknife.ButterKnife;
import butterknife.Unbinder;
import io.realm.Realm;
import se.treehou.ng.ohcommunicator.connector.GsonHelper;
import se.treehou.ng.ohcommunicator.connector.models.OHServer;
import se.treehou.ng.ohcommunicator.connector.models.OHWidget;
import se.treehou.ng.ohcommunicator.services.Connector;
import se.treehou.ng.ohcommunicator.services.IServerHandler;
import treehou.se.habit.R;
import treehou.se.habit.connector.Constants;
import treehou.se.habit.core.db.model.ServerDB;
public class LightFragment extends Fragment {
private static final String TAG = "LightFragment";
private static final String ARG_SERVER = "ARG_SERVER";
private static final String ARG_WIDGET = "ARG_SITEMAP";
private static final String ARG_COLOR = "ARG_COLOR";
@BindView(R.id.lbl_name) TextView lblName;
@BindView(R.id.pcr_color_h) ColorPicker pcrColor;
private Realm realm;
private OHServer server;
private OHWidget widget;
private int color;
private Timer timer = new Timer();
private Unbinder unbinder;
public static LightFragment newInstance(long serverId, OHWidget widget, int color) {
LightFragment fragment = new LightFragment();
Bundle args = new Bundle();
Gson gson = GsonHelper.createGsonBuilder();
args.putLong(ARG_SERVER, serverId);
args.putString(ARG_WIDGET, gson.toJson(widget));
args.putInt(ARG_COLOR, color);
fragment.setArguments(args);
return fragment;
}
public LightFragment() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
realm = Realm.getDefaultInstance();
Bundle args = getArguments();
long serverId = args.getLong(ARG_SERVER);
String jWidget = args.getString(ARG_WIDGET);
color = args.getInt(ARG_COLOR);
Gson gson = GsonHelper.createGsonBuilder();
server = ServerDB.load(realm, serverId).toGeneric();
widget = gson.fromJson(jWidget, OHWidget.class);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_colorpicker, container, false);
unbinder = ButterKnife.bind(this, rootView);
lblName.setText(widget.getLabel());
pcrColor.setColor(color);
return rootView;
}
@Override
public void onResume() {
super.onResume();
pcrColor.setOnColorChangeListener(colorChangeListener);
}
@Override
public void onPause() {
super.onPause();
pcrColor.setOnColorChangeListener(null);
}
@Override
public void onDestroy() {
super.onDestroy();
realm.close();
}
@Override
public void onDestroyView() {
super.onDestroyView();
unbinder.unbind();
}
private ColorPicker.ColorChangeListener colorChangeListener = new ColorPicker.ColorChangeListener() {
@Override
public void onColorChange(final float[] hsv) {
timer.cancel();
timer.purge();
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
IServerHandler serverHandler = new Connector.ServerHandler(server, getActivity());
hsv[1] *= 100;
hsv[2] *= 100;
Log.d(TAG, "Color changed to " + String.format("%d,%d,%d", (int) hsv[0], (int) (hsv[1]), (int) (hsv[2])));
if (hsv[2] > 5) {
serverHandler.sendCommand(widget.getItem().getName(), String.format(Locale.getDefault(), Constants.COMMAND_COLOR, (int) hsv[0], (int) (hsv[1]), (int) (hsv[2])));
} else {
serverHandler.sendCommand(widget.getItem().getName(), Constants.COMMAND_OFF);
}
}
}, 300);
}
};
}