package com.firstbuild.androidapp.paragon;
import android.app.Activity;
import android.app.Fragment;
import android.os.Bundle;
import android.text.Html;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.SeekBar;
import android.widget.TextView;
import com.afollestad.materialdialogs.MaterialDialog;
import com.firstbuild.androidapp.ParagonValues;
import com.firstbuild.androidapp.R;
import com.firstbuild.androidapp.paragon.datamodel.BuiltInRecipeSettingsInfo;
import com.firstbuild.androidapp.paragon.datamodel.RecipeInfo;
import com.firstbuild.androidapp.paragon.datamodel.StageInfo;
import com.firstbuild.androidapp.productmanager.ParagonInfo;
import com.firstbuild.androidapp.productmanager.ProductInfo;
import com.firstbuild.androidapp.productmanager.ProductManager;
/**
* A simple {@link Fragment} subclass.
*/
public class RecipeSettingsFragment extends Fragment {
private final int DONENESS_R = 0;
private final int DONENESS_MR = 1;
private final int DONENESS_M = 2;
private final int DONENESS_MW = 3;
private final int DONENESS_W = 4;
private final float INTERVAL_THICKNESS = 0.25f;
private final String TAG = RecipeSettingsFragment.class.getSimpleName();
private TextView textThickness;
private SeekBar seekBarThickness;
private TextView textDoneness;
private SeekBar seekBarDoneness;
private float setThickness;
private String setDoneness;
private float setTargetTemp = 0.0f;
private float setTargetTimeMin = 0;
private float setTargetTimeMax = 0;
private TextView textSetTimeMin;
private TextView textSetTimeMax;
private TextView textSetTemp;
private ParagonMainActivity attached = null;
public RecipeSettingsFragment() {
// Required empty public constructor
}
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
attached = (ParagonMainActivity) activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
// Inflate the layout for this fragment
View view = inflater.inflate(R.layout.fragment_sousvide_settings, container, false);
attached.setTitle(attached.selectedBuiltInRecipe.name);
textSetTimeMin = (TextView) view.findViewById(R.id.text_set_time_min);
textSetTimeMax = (TextView) view.findViewById(R.id.text_set_time_max);
textSetTemp = (TextView) view.findViewById(R.id.text_set_temp);
textThickness = (TextView) view.findViewById(R.id.text_status_name);
seekBarThickness = (SeekBar) view.findViewById(R.id.seekbar_thickness);
if (attached.selectedBuiltInRecipe.thickness.isEmpty()) {
view.findViewById(R.id.layout_thickness).setVisibility(View.GONE);
}
else {
int numThickness = attached.selectedBuiltInRecipe.thickness.size();
float minThickness = attached.selectedBuiltInRecipe.thickness.get(0);
float maxThickness = attached.selectedBuiltInRecipe.thickness.get(numThickness - 1);
seekBarThickness.setMax((int) ((maxThickness - minThickness) / INTERVAL_THICKNESS));
}
seekBarThickness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
// String selectedValue = getResources().getStringArray(R.array.string_thickness)[progress];
// Min thickness is 0.25, we have grid on every 0.25 thickness on seekbar.
setThickness = (progress * 0.25f) + 0.25f;
textThickness.setText(setThickness + "\"");
calculateTimeTemp();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
seekBarThickness.setProgress(0);
textDoneness = (TextView) view.findViewById(R.id.text_doneness);
seekBarDoneness = (SeekBar) view.findViewById(R.id.seekbar_doneness);
int numDoneness = attached.selectedBuiltInRecipe.doneness.size();
if (numDoneness < 2) {
view.findViewById(R.id.layout_doneness).setVisibility(View.GONE);
}
else {
seekBarDoneness.setMax(attached.selectedBuiltInRecipe.doneness.size() - 1);
}
seekBarDoneness.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
setDoneness = attached.selectedBuiltInRecipe.doneness.get(progress);
textDoneness.setText(setDoneness);
calculateTimeTemp();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
seekBarDoneness.setProgress(0);
view.findViewById(R.id.btn_continue).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(setTargetTemp < ParagonValues.WARNING_TEMPERATURE &&
!attached.isShowFoodWarning()){
new MaterialDialog.Builder(getActivity())
.title("Reminder")
.content("Cooking below 140℉ increases your risks of foodborne illness")
.positiveText("Ok")
.neutralColor(R.color.colorParagonSecondaryText)
.neutralText("Don't show again")
.cancelable(false)
.callback(new MaterialDialog.ButtonCallback() {
@Override
public void onPositive(MaterialDialog dialog) {
attached.checkGoodToGo();
}
@Override
public void onNegative(MaterialDialog dialog) {
attached.checkGoodToGo();
}
@Override
public void onNeutral(MaterialDialog dialog) {
attached.saveShowFoodWarning();
attached.checkGoodToGo();
}
})
.show();
}
else{
attached.checkGoodToGo();
}
}
});
view.findViewById(R.id.btn_save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
}
});
initRecipeSetting();
return view;
}
/**
* This table for Round
* Top Round
* Bottom Round
* Blade (Flat Iron)
* Cubed Flank Skirt Tip
*/
private void calculateTimeTemp() {
BuiltInRecipeSettingsInfo recipeSettings = attached.selectedBuiltInRecipe;
int indexThickness = 0;
int indexDoneness = 0;
for (int i = 0; i < recipeSettings.thickness.size() - 1; i++) {
Log.d(TAG, "--" +setThickness +", "+recipeSettings.thickness.get(i)+", "+recipeSettings.thickness.get(i + 1));
if (recipeSettings.thickness.get(i) <= setThickness &&
setThickness <= recipeSettings.thickness.get(i + 1)) {
indexThickness = i;
break;
}
}
for (int i = 0; i < recipeSettings.doneness.size(); i++) {
if (recipeSettings.doneness.get(i).equals(setDoneness)) {
indexDoneness = i;
break;
}
}
Log.d(TAG, "calculateTimeTemp indexDoness :" + indexDoneness + ", indexThickness :" + indexThickness);
BuiltInRecipeSettingsInfo.RecipeSetting settings = recipeSettings.getRecipeSetting(indexDoneness, indexThickness);
setTargetTemp = settings.temp;
setTargetTimeMax = settings.timeMax;
setTargetTimeMin = settings.timeMin;
if (setTargetTemp == 0 && setTargetTimeMax == 0.0f && setTargetTimeMin == 0.0f) {
textSetTemp.setText("--");
textSetTimeMin.setText(Html.fromHtml("--" + "<small>H : </small>" + "--" + "<small>M</small>"));
textSetTimeMax.setText(Html.fromHtml("--" + "<small>H : </small>" + "--" + "<small>M</small>"));
new MaterialDialog.Builder(attached)
.content("Not recommended setting")
.positiveText("Ok")
.cancelable(true).show();
}
else {
textSetTemp.setText(Html.fromHtml(setTargetTemp + "<small>℉</small>"));
int timeH = (int) Math.floor(setTargetTimeMin);
int timeM = (int) ((setTargetTimeMin - timeH) * 60);
String hour = timeH + "";
String minutes = String.format("%02d", timeM);
textSetTimeMin.setText(Html.fromHtml(hour + "<small>H : </small>" + minutes + "<small>M</small>"));
timeH = (int) Math.floor(setTargetTimeMax);
timeM = (int) ((setTargetTimeMax - timeH) * 60);
hour = timeH + "";
minutes = String.format("%02d", timeM);
textSetTimeMax.setText(Html.fromHtml(hour + "<small>H : </small>" + minutes + "<small>M</small>"));
}
}
/**
* Create recipe temprorally and put selected values.
*/
private void initRecipeSetting() {
// Now create a sousvide recipe and pointing the recipe as currentRecipe.
// ProductManager.getInstance().getCurrent().createRecipeConfigForSousVide();
}
/**
* Go to next step. this is came from checkGoodToGo of ParagonMainActivity.
*/
public void goodToGo() {
((ParagonMainActivity) getActivity()).nextStep(ParagonMainActivity.ParagonSteps.STEP_SOUSVIDE_GETREADY);
}
public void sendRecipeConfig() {
ParagonInfo product = (ParagonInfo)ProductManager.getInstance().getCurrent();
RecipeInfo recipeConfig = new RecipeInfo("", "", "", "");
recipeConfig.setType(RecipeInfo.TYPE_SOUSVIDE);
StageInfo stageInfo = new StageInfo();
stageInfo.setTime((int) (setTargetTimeMin * 60));
stageInfo.setMaxTime((int) (setTargetTimeMax * 60));
stageInfo.setTemp((int) setTargetTemp);
stageInfo.setSpeed(10);
recipeConfig.addStage(stageInfo);
product.setErdRecipeConfig(recipeConfig);
product.sendRecipeConfig();
}
}