package com.openxc.enabler;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import android.support.v4.app.ListFragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ListView;
import com.openxc.VehicleManager;
import com.openxc.messages.CanMessage;
import com.openxc.messages.VehicleMessage;
import com.openxcplatform.enabler.R;
public class CanMessageViewFragment extends ListFragment {
private static String TAG = "CanMessageView";
private VehicleManager mVehicleManager;
private CanMessageAdapter mAdapter;
private VehicleMessage.Listener mListener = new VehicleMessage.Listener() {
@Override
public void receive(final VehicleMessage message) {
Activity activity = getActivity();
if(activity != null) {
getActivity().runOnUiThread(new Runnable() {
public void run() {
mAdapter.add(message.asCanMessage());
}
});
}
}
};
private ServiceConnection mConnection = new ServiceConnection() {
public void onServiceConnected(ComponentName className,
IBinder service) {
Log.i(TAG, "Bound to VehicleManager");
mVehicleManager = ((VehicleManager.VehicleBinder)service
).getService();
mVehicleManager.addListener(CanMessage.class, mListener);
}
public void onServiceDisconnected(ComponentName className) {
Log.w(TAG, "VehicleService disconnected unexpectedly");
mVehicleManager = null;
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mAdapter = new CanMessageAdapter(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View v = inflater.inflate(R.layout.can_message_list_fragment,
container, false);
return v;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setListAdapter(mAdapter);
}
@Override
public void setUserVisibleHint(boolean isVisibleToUser) {
super.setUserVisibleHint(isVisibleToUser);
if (isVisibleToUser) {
getActivity().bindService(
new Intent(getActivity(), VehicleManager.class),
mConnection, Context.BIND_AUTO_CREATE);
} else {
if(mVehicleManager != null) {
Log.i(TAG, "Unbinding from vehicle service");
mVehicleManager.removeListener(CanMessage.class, mListener);
getActivity().unbindService(mConnection);
mVehicleManager = null;
}
}
}
public void onListItemClick(ListView listView, View view,
int position, long id) {
Intent intent = new Intent(getActivity(),
CanMessageDetailActivity.class);
intent.putExtra(CanMessageDetailActivity.EXTRA_CAN_MESSAGE,
mAdapter.getItem(position));
// This activity is not very useful or performant right now so it isn't
// enabled - see https://github.com/openxc/openxc-android/issues/159
// startActivity(intent);
}
}