package com.openvehicles.OVMS.ui.settings;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.Toast;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.openvehicles.OVMS.R;
import com.openvehicles.OVMS.api.OnResultCommandListener;
import com.openvehicles.OVMS.entities.CarData;
import com.openvehicles.OVMS.ui.BaseFragment;
import com.openvehicles.OVMS.ui.BaseFragmentActivity;
import com.openvehicles.OVMS.ui.utils.Ui;
import com.openvehicles.OVMS.utils.CarsStorage;
import com.openvehicles.OVMS.utils.ConnectionList;
import com.openvehicles.OVMS.utils.ConnectionList.Con;
import com.openvehicles.OVMS.utils.NotificationData;
import com.openvehicles.OVMS.utils.OVMSNotifications;
public class ControlFragment extends BaseFragment implements OnClickListener,
OnResultCommandListener, Con {
ConnectionList connectionList;
private int mEditPosition;
private CarData mCarData;
private String ussdCmd;
private OVMSNotifications ovmsNotifications;
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
SherlockFragmentActivity activity = getSherlockActivity();
// get data of car to edit:
mEditPosition = getArguments().getInt("position", -1);
if (mEditPosition >= 0) {
mCarData = CarsStorage.get().getStoredCars().get(mEditPosition);
}
String url = "http://api.openchargemap.io/v2/referencedata/";
connectionList = new ConnectionList(getActivity(), this, url,false);
activity.getSupportActionBar().setIcon(R.drawable.ic_action_control);
activity.setTitle(R.string.Control);
View pRootView = getView();
Ui.setOnClick(pRootView, R.id.btn_features, this);
Ui.setOnClick(pRootView, R.id.btn_parameters, this);
Ui.setOnClick(pRootView, R.id.btn_mmi_ussd_code, this);
Ui.setOnClick(pRootView, R.id.btn_connections, this);
Ui.setOnClick(pRootView, R.id.btn_cellular_usage, this);
Ui.setOnClick(pRootView, R.id.btn_reset_ovms_module, this);
// diag logs only available on Renault Twizy (up to now):
if (mCarData.car_type.equals("RT")) {
Ui.setOnClick(pRootView, R.id.btn_diag_logs, this);
} else {
pRootView.findViewById(R.id.btn_diag_logs).setVisibility(View.GONE);
}
ussdCmd = "";
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_control, null);
}
@Override
public void onDestroyView() {
cancelCommand();
super.onDestroyView();
}
@Override
public void onClick(View v) {
BaseFragmentActivity activity = (BaseFragmentActivity) getActivity();
Bundle args;
switch (v.getId()) {
case R.id.btn_mmi_ussd_code:
Ui.showEditDialog(v.getContext(), getString(R.string.msg_mmi_ssd_code),
"*100#", R.string.Send, false, new Ui.OnChangeListener<String>() {
@Override
public void onAction(String pData) {
if (TextUtils.isEmpty(pData))
return;
ussdCmd = pData;
Context context = getActivity();
if (ovmsNotifications == null)
ovmsNotifications = new OVMSNotifications(context);
boolean is_new = ovmsNotifications.addNotification(
NotificationData.TYPE_COMMAND,
mCarData.sel_vehicleid + ": " + ussdCmd,
ussdCmd);
if (is_new) {
// signal App to reload notifications:
Intent uiNotify = new Intent(context.getPackageName() + ".Notification");
context.sendBroadcast(uiNotify);
}
sendCommand(R.string.lb_mmi_ussd_code, "41," + pData, ControlFragment.this);
}
});
break;
case R.id.btn_features:
args = new Bundle();
args.putInt("position", mEditPosition);
activity.setNextFragment(FeaturesFragment.class, args);
break;
case R.id.btn_parameters:
args = new Bundle();
args.putInt("position", mEditPosition);
activity.setNextFragment(ControlParametersFragment.class, args);
break;
case R.id.btn_reset_ovms_module:
sendCommand(R.string.msg_rebooting_car_module, "5", this);
break;
case R.id.btn_connections:
connectionList.sublist();
break;
case R.id.btn_cellular_usage:
activity.setNextFragment(CellularStatsFragment.class);
break;
case R.id.btn_diag_logs:
args = new Bundle();
args.putInt("position", mEditPosition);
activity.setNextFragment(LogsFragment.class, args);
break;
}
}
@Override
public void onResultCommand(String[] result) {
if (result.length <= 1)
return;
Context context = getActivity();
int command = Integer.parseInt(result[0]);
int resCode = Integer.parseInt(result[1]);
String cmdMessage = getSentCommandMessage(result[0]);
switch (resCode) {
case 0: // ok
if (command == 41) {
// only process second cmd result carrying data:
if (result.length >= 3) {
// add MMI/USSD result to Notifications:
if (ovmsNotifications == null)
ovmsNotifications = new OVMSNotifications(context);
boolean is_new = ovmsNotifications.addNotification(
NotificationData.TYPE_USSD,
mCarData.sel_vehicleid + ": " + ussdCmd,
result[2]);
if (is_new) {
// signal App to reload notifications:
Intent uiNotify = new Intent(context.getPackageName() + ".Notification");
context.sendBroadcast(uiNotify);
// user info dialog:
new AlertDialog.Builder(context)
.setTitle(cmdMessage)
.setMessage(ussdCmd + " =>\n" + result[2])
.setPositiveButton(android.R.string.ok, null)
.show();
}
}
} else {
// default:
Toast.makeText(context, cmdMessage + " => " + getString(R.string.msg_ok),
Toast.LENGTH_SHORT).show();
}
break;
case 1: // failed
Toast.makeText(context, cmdMessage + " => " + getString(R.string.err_failed, result[2]),
Toast.LENGTH_SHORT).show();
break;
case 2: // unsupported
Toast.makeText(context, cmdMessage + " => " + getString(R.string.err_unsupported_operation),
Toast.LENGTH_SHORT).show();
break;
case 3: // unimplemented
Toast.makeText(context, cmdMessage + " => " + getString(R.string.err_unimplemented_operation),
Toast.LENGTH_SHORT).show();
break;
}
}
@Override
public void connections(String al, String name) {
// TODO Auto-generated method stub
Log.d("ControlFragment", "connections: al=" + al);
}
}