diff options
author | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-02-25 23:04:04 +0100 |
---|---|---|
committer | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-02-25 23:04:04 +0100 |
commit | 5aaf308a0c0d67836d3225fb7f4ed0ab0d842209 (patch) | |
tree | d6b3a944ed8e2bad09c7ad4024aa1f9a0e5920e7 /same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java | |
parent | df19ffa05ec5dfc6bccb010bc9fd6231987bafcb (diff) |
Rename SameInterfaceBridge → ClientInterfaceBridge.
Diffstat (limited to 'same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java')
-rw-r--r-- | same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java b/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java new file mode 100644 index 0000000..22396f3 --- /dev/null +++ b/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java @@ -0,0 +1,99 @@ +package com.orbekk.same.android; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import android.content.ComponentName; +import android.content.Context; +import android.content.Intent; +import android.content.ServiceConnection; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.os.Messenger; +import android.os.RemoteException; +import android.widget.Toast; + +import com.orbekk.same.ClientInterface; +import com.orbekk.same.SameService; +import com.orbekk.same.State; +import com.orbekk.same.StateChangedListener; +import com.orbekk.same.UpdateConflict; + +public class ClientInterfaceBridge implements ClientInterface { + class ResponseHandler extends Handler { + @Override public void handleMessage(Message message) { + switch (message.what) { + case SameService.UPDATED_STATE_MESSAGE: + State.Component component = (State.Component)message.obj; + Toast.makeText(context, "Updated: " + component, + Toast.LENGTH_SHORT).show(); + default: + logger.warn("Received unknown message from service: {}", + message); + } + } + } + + private Logger logger = LoggerFactory.getLogger(getClass()); + private Messenger serviceMessenger = null; + private Messenger responseMessenger = new Messenger(new ResponseHandler()); + private Context context; + + private ServiceConnection serviceConnection = new ServiceConnection() { + @Override + public void onServiceConnected(ComponentName name, IBinder service) { + serviceMessenger = new Messenger(service); + Message message = Message.obtain(null, + SameService.ADD_STATE_RECEIVER); + message.replyTo = responseMessenger; + try { + serviceMessenger.send(message); + } catch (RemoteException e) { + e.printStackTrace(); + } + } + + @Override + public void onServiceDisconnected(ComponentName name) { + serviceMessenger = null; + } + }; + + public ClientInterfaceBridge(Context context) { + this.context = context; + } + + public void connect() { + Intent intent = new Intent(context, SameService.class); + context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); + } + + public void disconnect() { + if (serviceMessenger != null) { + context.unbindService(serviceConnection); + } + } + + @Override + public State getState() { + return null; + } + + @Override + public void set(String name, String data, long revision) throws UpdateConflict { + logger.info("set({}, {}, {}", + new Object[]{name, data, revision}); + } + + @Override + public void addStateListener(StateChangedListener listener) { + logger.info("addStateListener()"); + } + + @Override + public void removeStateListener(StateChangedListener listener) { + logger.info("removeStateListener()"); + } + +} |