package com.openvehicles.OVMS.ui.settings;
import java.util.List;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.res.Configuration;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.EditText;
import android.widget.Gallery;
import android.widget.ImageView;
import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;
import com.luttu.AppPrefes;
import com.openvehicles.OVMS.R;
import com.openvehicles.OVMS.entities.CarData;
import com.openvehicles.OVMS.ui.BaseFragmentActivity;
import com.openvehicles.OVMS.ui.utils.Ui;
import com.openvehicles.OVMS.ui.validators.PasswdValidator;
import com.openvehicles.OVMS.ui.validators.StringValidator;
import com.openvehicles.OVMS.ui.validators.ValidationException;
import com.openvehicles.OVMS.utils.CarsStorage;
public class CarEditorFragment extends SherlockFragment {
private CarData mCarData;
private boolean isSelectedCar;
private int mEditPosition;
private Gallery mGalleryCar;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_careditor, null);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
getSherlockActivity().getSupportActionBar().setIcon(R.drawable.ic_action_edit);
mEditPosition = getArguments().getInt("position", -1);
if (mEditPosition >= 0) {
mCarData = CarsStorage.get().getStoredCars().get(mEditPosition);
CarData selectedCarData = CarsStorage.get().getSelectedCarData();
isSelectedCar = selectedCarData != null && mCarData != null
&& selectedCarData.sel_vehicleid.equals(mCarData.sel_vehicleid);
}
mGalleryCar = (Gallery) getView().findViewById(R.id.ga_car);
mGalleryCar.setAdapter(new CarImgAdapter());
setHasOptionsMenu(true);
if (mCarData != null) approveCarData();
}
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.control_save_delete, menu);
}
@Override
public void onPrepareOptionsMenu(Menu menu) {
Log.d("CarEditorFragment", "onPrepareOptionsMenu edit car: " + (CarsStorage.get().getStoredCars().size() > 1));
menu.findItem(R.id.mi_delete).setVisible(mCarData != null && CarsStorage.get().getStoredCars().size() > 1);
menu.findItem(R.id.mi_control).setVisible(isSelectedCar);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.mi_save:
save();
return true;
case R.id.mi_delete:
delete();
return true;
case R.id.mi_control:
Bundle args = new Bundle();
args.putInt("position", mEditPosition);
BaseFragmentActivity activity = (BaseFragmentActivity) getActivity();
activity.setNextFragment(ControlFragment.class, args);
return true;
default:
return false;
}
}
private void delete() {
new AlertDialog.Builder(getActivity())
.setMessage(R.string.msg_delete_this_car)
.setNegativeButton(R.string.No, null)
.setPositiveButton(R.string.Yes, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
CarsStorage.get().getStoredCars().remove(mEditPosition);
CarsStorage.get().saveStoredCars();
getActivity().finish();
}
})
.show();
}
private void save() {
if (mCarData == null) {
mCarData = new CarData();
}
View rootView = getView();
try {
mCarData.sel_vehicleid = Ui.getValidValue(rootView, R.id.txt_vehicle_id,
new StringValidator() {
@Override
public boolean valid(EditText pEditText, Object pValue) {
if (!super.valid(pEditText, pValue)) return false;
setErrorMessage(pEditText.getContext().getString(R.string.msg_invalid_id_already_registered, pValue));
List<CarData> mAllCars = CarsStorage.get().getStoredCars();
int count = mAllCars.size();
for (int i=0; i<count; i++) {
if (mAllCars.get(i).sel_vehicleid.equals(pValue) && i != mEditPosition) {
return false;
}
}
return true;
}
});
mCarData.sel_vehicle_label = Ui.getValidValue(rootView, R.id.txt_vehicle_label, new StringValidator());
mCarData.sel_server_password = Ui.getValidValue(rootView, R.id.txt_server_passwd, new PasswdValidator(4, 16));
mCarData.sel_module_password = Ui.getValidValue(rootView, R.id.txt_module_passwd, new PasswdValidator(4, 16));
mCarData.sel_server = Ui.getValidValue(rootView, R.id.txt_server_address, new StringValidator());
mCarData.sel_vehicle_image = sAvailableColors[mGalleryCar.getSelectedItemPosition()];
} catch (ValidationException e) {
Log.e("Validation", e.getMessage(), e);
return;
}
if (mEditPosition < 0) {
CarsStorage.get().getStoredCars().add(mCarData);
}
CarsStorage.get().saveStoredCars();
getActivity().finish();
}
private void approveCarData() {
View rootView = getView();
getSherlockActivity().setTitle(mCarData.sel_vehicleid);
Ui.setValue(rootView, R.id.txt_vehicle_id, mCarData.sel_vehicleid);
Ui.setValue(rootView, R.id.txt_vehicle_label, mCarData.sel_vehicle_label);
Ui.setValue(rootView, R.id.txt_server_passwd, mCarData.sel_server_password);
Ui.setValue(rootView, R.id.txt_module_passwd, mCarData.sel_module_password);
Ui.setValue(rootView, R.id.txt_server_address, mCarData.sel_server);
AppPrefes appPrefes = new AppPrefes(getActivity(), "ovms");
Log.d("CarEditorFragment", "sel_vehicle_label=" + mCarData.sel_vehicle_label);
appPrefes.SaveData("sel_vehicle_label", mCarData.sel_vehicle_label);
int index = -1;
for (String imgRes: sAvailableColors) {
index++;
if (imgRes.equals(mCarData.sel_vehicle_image)) break;
}
if (index > 0) mGalleryCar.setSelection(index);
}
private static class CarImgAdapter extends BaseAdapter {
@Override
public int getCount() {
return sAvailableColors.length;
}
@Override
public Object getItem(int position) {
return sAvailableColors[position];
}
@Override
public long getItemId(int position) {
return 0;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
ImageView iv = convertView != null ? (ImageView)convertView : new ImageView(parent.getContext());
iv.setScaleType(ImageView.ScaleType.FIT_START);
iv.setAdjustViewBounds(true);
iv.setImageResource(Ui.getDrawableIdentifier(parent.getContext(), sAvailableColors[position]));
return iv;
}
}
private static final String[] sAvailableColors = {
"car_roadster_arcticwhite",
"car_roadster_brilliantyellow",
"car_roadster_electricblue",
"car_roadster_fushionred",
"car_roadster_glacierblue",
"car_roadster_jetblack",
"car_roadster_lightninggreen",
"car_roadster_obsidianblack",
"car_roadster_racinggreen",
"car_roadster_radiantred",
"car_roadster_sterlingsilver",
"car_roadster_thundergray",
"car_roadster_twilightblue",
"car_roadster_veryorange",
"car_ampera_black",
"car_ampera_crystalred",
"car_ampera_cybergray",
"car_ampera_lithiumwhite",
"car_ampera_powerblue",
"car_ampera_silvertopas",
"car_ampera_sovereignsilver",
"car_ampera_summitwhite",
"car_holdenvolt_black",
"car_holdenvolt_crystalclaret",
"car_holdenvolt_silvernitrate",
"car_holdenvolt_urbanfresh",
"car_holdenvolt_whitediamond",
"car_twizy_diamondblackwithivygreen",
"car_twizy_snowwhiteandflameorange",
"car_twizy_snowwhiteandurbanblue",
"car_twizy_snowwhitewithblack",
"car_thinkcity_brightred",
"car_thinkcity_citrusyellow",
"car_thinkcity_classicblack",
"car_thinkcity_skyblue"
};
}