package com.openvehicles.OVMS.ui; import java.util.ArrayList; import android.content.Context; import android.content.res.Configuration; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; import android.widget.BaseAdapter; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; 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.api.ApiService; import com.openvehicles.OVMS.entities.CarData; import com.openvehicles.OVMS.ui.settings.CarEditorFragment; import com.openvehicles.OVMS.ui.settings.CarInfoFragment; import com.openvehicles.OVMS.ui.settings.ControlFragment; import com.openvehicles.OVMS.ui.utils.Database; import com.openvehicles.OVMS.ui.utils.Ui; import com.openvehicles.OVMS.utils.CarsStorage; public class SettingsFragment extends BaseFragment implements OnItemClickListener { private ListView mListView; private AppPrefes appPrefes; private Database database; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { mListView = new ListView(container.getContext()); appPrefes = new AppPrefes(container.getContext(), "ovms"); database = new Database(container.getContext()); return mListView; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); mListView.setChoiceMode(ListView.CHOICE_MODE_SINGLE); mListView.setOnItemClickListener(this); mListView.setAdapter(new SettingsAdapter(getActivity(), CarsStorage .get().getStoredCars())); setHasOptionsMenu(true); } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.add, menu); } @Override public boolean onOptionsItemSelected(MenuItem item) { if (item.getItemId() == R.id.mi_add) { edit(-1); return true; } return super.onOptionsItemSelected(item); } @Override public void update(CarData pCarData) { int count = mListView.getCount(); for (int i = 0; i < count; i++) { if (pCarData == mListView.getItemAtPosition(i)) { mListView.setItemChecked(i, true); break; } } mListView.invalidateViews(); } @Override public void onServiceAvailable(ApiService pService) { if (pService.isLoggedIn()) update(pService.getCarData()); } @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { switch (view.getId()) { case R.id.btn_edit: edit(position); return; case R.id.btn_control: control(position); return; case R.id.btn_info: info(position); return; default: CarData carData = (CarData) parent.getAdapter().getItem(position); CarsStorage.get().setSelectedCarId(carData.sel_vehicleid); appPrefes.SaveData("sel_vehicle_label", carData.sel_vehicle_label); appPrefes.SaveData("autotrack", "on"); appPrefes.SaveData("Id", database.getConnectionFilter(carData.sel_vehicle_label)); changeCar(carData); } } private void edit(int pPosition) { Bundle args = new Bundle(); args.putInt("position", pPosition); BaseFragmentActivity.show(getActivity(), CarEditorFragment.class, args, Configuration.ORIENTATION_UNDEFINED); } private void control(int pPosition) { Bundle args = new Bundle(); args.putInt("position", pPosition); BaseFragmentActivity.show(getActivity(), ControlFragment.class, args, Configuration.ORIENTATION_UNDEFINED); } private void info(int pPosition) { Bundle args = new Bundle(); args.putInt("position", pPosition); BaseFragmentActivity.show(getActivity(), CarInfoFragment.class, args, Configuration.ORIENTATION_UNDEFINED); } private static class SettingsAdapter extends BaseAdapter implements OnClickListener { private final LayoutInflater mInflater; private final ArrayList<CarData> mItems; private ListView mListView; public SettingsAdapter(Context pContext, ArrayList<CarData> pItems) { mItems = pItems; mInflater = LayoutInflater.from(pContext); } @Override public int getCount() { return mItems.size(); } @Override public Object getItem(int position) { return mItems.get(position); } @Override public long getItemId(int position) { return 0; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = mInflater.inflate(R.layout.item_car, null); } ImageButton btnEdit = (ImageButton) convertView .findViewById(R.id.btn_edit); ImageButton btnControl = (ImageButton) convertView .findViewById(R.id.btn_control); ImageButton btnInfo = (ImageButton) convertView .findViewById(R.id.btn_info); btnEdit.setOnClickListener(this); btnControl.setOnClickListener(this); btnInfo.setOnClickListener(this); btnEdit.setTag(position); btnControl.setTag(position); btnInfo.setTag(position); CarData it = mItems.get(position); ImageView iv = (ImageView) convertView.findViewById(R.id.img_car); iv.setImageResource(Ui.getDrawableIdentifier(parent.getContext(), it.sel_vehicle_image)); ((TextView) convertView.findViewById(R.id.txt_title)) .setText(it.sel_vehicle_label); if (mListView == null && parent instanceof ListView) { mListView = (ListView) parent; } if (mListView == null) return convertView; iv = (ImageView) convertView.findViewById(R.id.img_signal_rssi); if (mListView.isItemChecked(position)) { convertView.setBackgroundColor(0x8033B5E5); btnInfo.setVisibility(View.VISIBLE); btnControl.setVisibility(View.VISIBLE); iv.setVisibility(View.VISIBLE); iv.setImageResource(Ui.getDrawableIdentifier( parent.getContext(), "signal_strength_" + it.car_gsm_bars)); } else { convertView.setBackgroundColor(0); iv.setVisibility(View.INVISIBLE); btnInfo.setVisibility(View.INVISIBLE); btnControl.setVisibility(View.INVISIBLE); } return convertView; } @Override public void onClick(View v) { if (mListView == null || mListView.getOnItemClickListener() == null) return; mListView.getOnItemClickListener().onItemClick(mListView, v, (Integer) v.getTag(), v.getId()); } } }