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 com.openxc.VehicleManager; import com.openxc.messages.EventedSimpleVehicleMessage; import com.openxc.messages.SimpleVehicleMessage; import com.openxc.messages.VehicleMessage; import com.openxcplatform.enabler.R; public class VehicleDashboardFragment extends ListFragment { private static String TAG = "VehicleDashboard"; private VehicleManager mVehicleManager; private SimpleVehicleMessageAdapter mAdapter; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mAdapter = new SimpleVehicleMessageAdapter(getActivity()); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View v = inflater.inflate(R.layout.vehicle_dashboard, container, false); return v; } @Override public void setUserVisibleHint(boolean isVisibleToUser) { super.setUserVisibleHint(isVisibleToUser); if(getActivity() == null) { return; } 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(SimpleVehicleMessage.class, mListener); mVehicleManager.removeListener(EventedSimpleVehicleMessage.class, mListener); getActivity().unbindService(mConnection); mVehicleManager = null; } } } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); setListAdapter(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() { if(message instanceof EventedSimpleVehicleMessage) { SimpleVehicleMessage convertedMsg = new SimpleVehicleMessage(message.getTimestamp(), ((EventedSimpleVehicleMessage) message).getName(), ((EventedSimpleVehicleMessage) message).getValue() + ": " + ((EventedSimpleVehicleMessage) message).getEvent()); mAdapter.add(convertedMsg.asSimpleMessage()); } else mAdapter.add(message.asSimpleMessage()); } }); } } }; 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(SimpleVehicleMessage.class, mListener); mVehicleManager.addListener(EventedSimpleVehicleMessage.class, mListener); } public void onServiceDisconnected(ComponentName className) { Log.w(TAG, "VehicleService disconnected unexpectedly"); mVehicleManager = null; } }; }