diff options
author | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-02-25 21:52:03 +0100 |
---|---|---|
committer | Kjetil Ørbekk <kjetil.orbekk@gmail.com> | 2012-02-25 21:52:03 +0100 |
commit | 28ccfd5c38df380fc87461238c9b717ad7fd7dce (patch) | |
tree | f3bc162d8495468e11cf6b57929bab7e1623ce2d /same-android/src/main/java/com/orbekk/same/android | |
parent | a5ae972e46ccaccc0b60d4ff218d3b7ece1108ba (diff) |
Begin implementing a client bridge.
SameInterfaceBridge should implement ClientInterface and communicate
with same through a SameService.
Add replyTo support in SameService.
Diffstat (limited to 'same-android/src/main/java/com/orbekk/same/android')
-rw-r--r-- | same-android/src/main/java/com/orbekk/same/android/SameInterfaceBridge.java | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/same-android/src/main/java/com/orbekk/same/android/SameInterfaceBridge.java b/same-android/src/main/java/com/orbekk/same/android/SameInterfaceBridge.java new file mode 100644 index 0000000..48e38cd --- /dev/null +++ b/same-android/src/main/java/com/orbekk/same/android/SameInterfaceBridge.java @@ -0,0 +1,95 @@ +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 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 SameInterfaceBridge implements ClientInterface { + class ResponseHandler extends Handler { + @Override public void handleMessage(Message message) { + switch (message.what) { + 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 display_message = Message.obtain(null, + SameService.DISPLAY_MESSAGE); + display_message.obj = "Message from bridge."; + display_message.replyTo = responseMessenger; + try { + serviceMessenger.send(display_message); + } catch (RemoteException e) { + logger.error("Failed to send message to service."); + } + } + + @Override + public void onServiceDisconnected(ComponentName name) { + serviceMessenger = null; + } + }; + + public SameInterfaceBridge(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()"); + } + +} |