From 930596730c3df733dc5c5601579fd044f55682c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kjetil=20=C3=98rbekk?= Date: Sun, 26 Feb 2012 13:25:43 +0100 Subject: Support setting state on Android. --- .../src/main/java/com/orbekk/same/SameService.java | 11 +++++++++++ .../com/orbekk/same/android/ClientInterfaceBridge.java | 18 +++++++++++++++--- same/src/main/java/com/orbekk/same/Client.java | 7 +++++++ .../src/main/java/com/orbekk/same/ClientInterface.java | 1 + 4 files changed, 34 insertions(+), 3 deletions(-) diff --git a/same-android/src/main/java/com/orbekk/same/SameService.java b/same-android/src/main/java/com/orbekk/same/SameService.java index 386b9b8..9662d6f 100644 --- a/same-android/src/main/java/com/orbekk/same/SameService.java +++ b/same-android/src/main/java/com/orbekk/same/SameService.java @@ -29,6 +29,7 @@ public class SameService extends Service { public final static int UPDATED_STATE_MESSAGE = 5; public final static int ADD_STATE_RECEIVER = 6; public final static int REMOVE_STATE_RECEIVER = 7; + public final static int SET_STATE = 8; public final static String AVAILABLE_NETWORKS_UPDATE = "com.orbekk.same.SameService.action.AVAILABLE_NETWORKS_UPDATE"; @@ -110,6 +111,16 @@ public class SameService extends Service { Messenger droppedMessenger = (Messenger)message.obj; stateReceivers.remove(droppedMessenger); break; + case SET_STATE: + // TODO: Respond to the callee somehow. + State.Component updatedComponent = + (State.Component)message.obj; + try { + sameController.getClient().getInterface().set( + updatedComponent); + } catch (UpdateConflict e) { + logger.info("Update failed: {}", updatedComponent); + } default: super.handleMessage(message); } 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 index 662816b..cbfeff3 100644 --- a/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java +++ b/same-android/src/main/java/com/orbekk/same/android/ClientInterfaceBridge.java @@ -18,6 +18,7 @@ import android.os.RemoteException; import com.orbekk.same.ClientInterface; import com.orbekk.same.SameService; import com.orbekk.same.State; +import com.orbekk.same.State.Component; import com.orbekk.same.StateChangedListener; import com.orbekk.same.UpdateConflict; import com.orbekk.same.VariableFactory; @@ -113,9 +114,19 @@ public class ClientInterfaceBridge implements ClientInterface { @Override public void set(String name, String data, long revision) throws UpdateConflict { - logger.info("set({}, {}, {}", - new Object[]{name, data, revision}); - throw new RuntimeException("Not implemented."); + set(new Component(name, revision, data)); + } + + @Override + public void set(Component component) throws UpdateConflict { + Message message = Message.obtain(null, SameService.SET_STATE); + message.obj = component; + try { + serviceMessenger.send(message); + } catch (RemoteException e) { + e.printStackTrace(); + throw new UpdateConflict(e.getMessage()); + } } @Override @@ -131,4 +142,5 @@ public class ClientInterfaceBridge implements ClientInterface { public VariableFactory createVariableFactory() { return VariableFactory.create(this); } + } diff --git a/same/src/main/java/com/orbekk/same/Client.java b/same/src/main/java/com/orbekk/same/Client.java index 244a64d..b496aac 100644 --- a/same/src/main/java/com/orbekk/same/Client.java +++ b/same/src/main/java/com/orbekk/same/Client.java @@ -9,6 +9,7 @@ import org.codehaus.jackson.type.TypeReference; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import com.orbekk.same.State.Component; import com.orbekk.util.WorkQueue; public class Client implements DiscoveryListener { @@ -49,6 +50,12 @@ public class Client implements DiscoveryListener { } } + @Override + public void set(Component component) throws UpdateConflict { + set(component.getName(), component.getData(), + component.getRevision()); + } + @Override public void addStateListener(StateChangedListener listener) { stateListeners.add(listener); diff --git a/same/src/main/java/com/orbekk/same/ClientInterface.java b/same/src/main/java/com/orbekk/same/ClientInterface.java index 99adf21..4b4c731 100644 --- a/same/src/main/java/com/orbekk/same/ClientInterface.java +++ b/same/src/main/java/com/orbekk/same/ClientInterface.java @@ -3,6 +3,7 @@ package com.orbekk.same; public interface ClientInterface { State getState(); void set(String name, String data, long revision) throws UpdateConflict; + void set(State.Component component) throws UpdateConflict; void addStateListener(StateChangedListener listener); void removeStateListener(StateChangedListener listener); } \ No newline at end of file -- cgit v1.2.3