package org.kvj.bravo7;
import org.kvj.bravo7.SuperService.LocalBinder;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.IBinder;
public class ControllerConnector<A extends ApplicationContext, T extends Object, S extends SuperService<T, A>>
implements ServiceConnection {
private static final String TAG = "ControllerConnector";
private Context activity = null;
private ControllerReceiver<T> receiver = null;
@SuppressWarnings("rawtypes")
private LocalBinder localBinder = null;
public ControllerConnector(Context activity, ControllerReceiver<T> receiver) {
this.activity = activity;
this.receiver = receiver;
}
public interface ControllerReceiver<T> {
public void onController(T controller);
}
public void onServiceDisconnected(ComponentName arg0) {
// Log.i(TAG, "[" + activity.getClass().getSimpleName()
// + "]service disconnected");
localBinder = null;
receiver.onController(null);
}
@SuppressWarnings("rawtypes")
public void onServiceConnected(ComponentName name, IBinder service) {
// Log.i(TAG, "[" + activity.getClass().getSimpleName()
// + "]service connected: " + service);
localBinder = (LocalBinder) service;
receiver.onController(getController());
}
public void connectController(Class<S> cl) {
Intent intent = new Intent(activity, cl);
activity.bindService(intent, this, Context.BIND_AUTO_CREATE);
}
public void disconnectController() {
if (localBinder != null) {
activity.unbindService(this);
}
}
@SuppressWarnings("unchecked")
public T getController() {
if (localBinder == null) {
return null;
}
return (T) localBinder.getController();
}
}