From 28ccfd5c38df380fc87461238c9b717ad7fd7dce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Sat, 25 Feb 2012 21:52:03 +0100 Subject: Begin implementing a client bridge. SameInterfaceBridge should implement ClientInterface and communicate with same through a SameService. Add replyTo support in SameService. --- .../orbekk/same/android/SameInterfaceBridge.java | 95 ++++++++++++++++++++++ 1 file changed, 95 insertions(+) create mode 100644 same-android/src/main/java/com/orbekk/same/android/SameInterfaceBridge.java (limited to 'same-android/src/main/java/com/orbekk/same/android') 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()"); + } + +} -- cgit v1.2.3