From b9cb95d39bdb4bbac6dd0d2b0405e4d5a23717c2 Mon Sep 17 00:00:00 2001 From: Marvin W Date: Sun, 14 Aug 2016 10:26:24 +0200 Subject: [PATCH] Move certain wearable classes --- .../{internal => }/AmsEntityUpdate.java | 2 +- .../{internal => }/AncsNotification.java | 2 +- .../android/gms/wearable/CapabilityInfo.java | 34 +++++ .../android/gms/wearable/MessageApi.java | 88 +++++++++++++ .../internal/AmsEntityUpdateParcelable.java | 2 + .../internal/AncsNotificationParcelable.java | 2 + .../internal/CapabilityInfoParcelable.java | 71 ++++++++++- .../internal/ChannelEventParcelable.java | 6 +- .../gms/wearable/internal/ChannelImpl.java | 120 ++++++++++++++++++ .../internal/SendMessageResponse.java | 17 ++- 10 files changed, 334 insertions(+), 10 deletions(-) rename play-services-wearable-api/src/main/java/com/google/android/gms/wearable/{internal => }/AmsEntityUpdate.java (92%) rename play-services-wearable-api/src/main/java/com/google/android/gms/wearable/{internal => }/AncsNotification.java (92%) create mode 100644 play-services-wearable-api/src/main/java/com/google/android/gms/wearable/CapabilityInfo.java create mode 100644 play-services-wearable-api/src/main/java/com/google/android/gms/wearable/MessageApi.java create mode 100644 play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelImpl.java diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AmsEntityUpdate.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/AmsEntityUpdate.java similarity index 92% rename from play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AmsEntityUpdate.java rename to play-services-wearable-api/src/main/java/com/google/android/gms/wearable/AmsEntityUpdate.java index 1e156633..92f3c07c 100644 --- a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AmsEntityUpdate.java +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/AmsEntityUpdate.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.android.gms.wearable.internal; +package com.google.android.gms.wearable; public interface AmsEntityUpdate { } diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AncsNotification.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/AncsNotification.java similarity index 92% rename from play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AncsNotification.java rename to play-services-wearable-api/src/main/java/com/google/android/gms/wearable/AncsNotification.java index f96a605f..20685d5f 100644 --- a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AncsNotification.java +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/AncsNotification.java @@ -14,7 +14,7 @@ * limitations under the License. */ -package com.google.android.gms.wearable.internal; +package com.google.android.gms.wearable; public interface AncsNotification { } diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/CapabilityInfo.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/CapabilityInfo.java new file mode 100644 index 00000000..cc9fd8d9 --- /dev/null +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/CapabilityInfo.java @@ -0,0 +1,34 @@ +/* + * Copyright 2013-2016 microG Project Team + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.gms.wearable; + +import java.util.Set; + +/** + * Information about a Capability on the network and where it is available. + */ +public interface CapabilityInfo { + /** + * Returns the name of the capability. + */ + String getName(); + + /** + * Returns the set of nodes for the capability. Disconnected nodes may or may not be included in the set. + */ + Set getNodes(); +} diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/MessageApi.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/MessageApi.java new file mode 100644 index 00000000..e2016f73 --- /dev/null +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/MessageApi.java @@ -0,0 +1,88 @@ +/* + * Copyright 2013-2015 microG Project Team + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.gms.wearable; + +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.common.api.PendingResult; +import com.google.android.gms.common.api.Result; +import com.google.android.gms.common.api.Status; + +import org.microg.gms.common.PublicApi; + +@PublicApi +public interface MessageApi { + + /** + * A value returned by {@link SendMessageResult#getRequestId()} when + * {@link #sendMessage(GoogleApiClient, String, String, byte[])} fails. + */ + int UNKNOWN_REQUEST_ID = -1; + + /** + * Registers a listener to be notified of received messages. Calls to this method should + * balanced with {@link #removeListener(GoogleApiClient, MessageListener)} to avoid leaking + * resources. + *

+ * Callers wishing to be notified of events in the background should use {@link WearableListenerService}. + */ + PendingResult addListener(GoogleApiClient client, MessageListener listener); + + /** + * Removes a message listener which was previously added through + * {@link #addListener(GoogleApiClient, MessageListener)}. + */ + PendingResult removeListener(GoogleApiClient client, MessageListener listener); + + /** + * Sends {@code byte[]} data to the specified node. + * + * @param nodeId identifier for a particular node on the Android Wear network. Valid targets + * may be obtained through {@link NodeApi#getConnectedNodes(GoogleApiClient)} + * or from the host in {@link DataItem#getUri()}. + * @param path identifier used to specify a particular endpoint at the receiving node + * @param data small array of information to pass to the target node. Generally not larger + * than 100k + */ + PendingResult sendMessage(GoogleApiClient client, String nodeId, + String path, byte[] data); + + /** + * Used with {@link MessageApi#addListener(GoogleApiClient, MessageListener)} to receive + * message events. + *

+ * Callers wishing to be notified of events in the background should use + * {@link WearableListenerService}. + */ + interface MessageListener { + /** + * Notification that a message has been received. + */ + void onMessageReceived(MessageEvent messageEvent); + } + + /** + * Contains the request id assigned to the message. On failure, the id will be + * {@link MessageApi#UNKNOWN_REQUEST_ID} and the status will be unsuccessful. + */ + interface SendMessageResult extends Result { + /** + * @return an ID used to identify the sent message. If {@link #getStatus()} is not + * successful, this value will be {@link MessageApi#UNKNOWN_REQUEST_ID}. + */ + int getRequestId(); + } +} diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AmsEntityUpdateParcelable.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AmsEntityUpdateParcelable.java index 8533e19b..6c96ec9d 100644 --- a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AmsEntityUpdateParcelable.java +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AmsEntityUpdateParcelable.java @@ -16,6 +16,8 @@ package com.google.android.gms.wearable.internal; +import com.google.android.gms.wearable.AmsEntityUpdate; + import org.microg.safeparcel.AutoSafeParcelable; public class AmsEntityUpdateParcelable extends AutoSafeParcelable implements AmsEntityUpdate { diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AncsNotificationParcelable.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AncsNotificationParcelable.java index 81cdb875..a7d3cd0d 100644 --- a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AncsNotificationParcelable.java +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/AncsNotificationParcelable.java @@ -16,6 +16,8 @@ package com.google.android.gms.wearable.internal; +import com.google.android.gms.wearable.AncsNotification; + import org.microg.safeparcel.AutoSafeParcelable; public class AncsNotificationParcelable extends AutoSafeParcelable implements AncsNotification { diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/CapabilityInfoParcelable.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/CapabilityInfoParcelable.java index cdc5d6c4..49b94e7f 100644 --- a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/CapabilityInfoParcelable.java +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/CapabilityInfoParcelable.java @@ -16,8 +16,75 @@ package com.google.android.gms.wearable.internal; -import org.microg.safeparcel.AutoSafeParcelable; +import com.google.android.gms.wearable.CapabilityInfo; +import com.google.android.gms.wearable.Node; + +import org.microg.safeparcel.AutoSafeParcelable; +import org.microg.safeparcel.SafeParceled; + +import java.util.HashSet; +import java.util.List; +import java.util.Set; + +public class CapabilityInfoParcelable extends AutoSafeParcelable implements CapabilityInfo { + @SafeParceled(1) + private int versionCode = 1; + + @SafeParceled(2) + private String name; + + @SafeParceled(value = 3, subClass = NodeParcelable.class) + private List nodeParcelables; + + private Set nodes; + private Object lock = new Object(); + + private CapabilityInfoParcelable() { + } + + public CapabilityInfoParcelable(String name, List nodeParcelables) { + this.name = name; + this.nodeParcelables = nodeParcelables; + } + + @Override + public String getName() { + return name; + } + + @Override + public synchronized Set getNodes() { + if (nodes == null) { + nodes = new HashSet(nodeParcelables); + } + return nodes; + } + + @Override + public boolean equals(Object other) { + if (this == other) return true; + if (other == null || getClass() != other.getClass()) return false; + + CapabilityInfoParcelable that = (CapabilityInfoParcelable) other; + + if (versionCode != that.versionCode) return false; + if (name != null ? !name.equals(that.name) : that.name != null) return false; + return nodeParcelables != null ? nodeParcelables.equals(that.nodeParcelables) : that.nodeParcelables == null; + } + + @Override + public int hashCode() { + int result = versionCode; + result = 31 * result + (name != null ? name.hashCode() : 0); + result = 31 * result + (nodeParcelables != null ? nodeParcelables.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "CapabilityInfo{" + name + ", " + nodeParcelables + "}"; + } -public class CapabilityInfoParcelable extends AutoSafeParcelable { public static final Creator CREATOR = new AutoCreator(CapabilityInfoParcelable.class); + } diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelEventParcelable.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelEventParcelable.java index 93c0be72..7336c2be 100644 --- a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelEventParcelable.java +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelEventParcelable.java @@ -16,17 +16,15 @@ package com.google.android.gms.wearable.internal; -import com.google.android.gms.wearable.Channel; - import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.SafeParceled; public class ChannelEventParcelable extends AutoSafeParcelable { @SafeParceled(1) - private int versionCode; + private int versionCode = 1; @SafeParceled(2) - public Channel channel; // TODO: ChannelImpl needed! + public ChannelImpl channel; @SafeParceled(3) public int eventType; @SafeParceled(4) diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelImpl.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelImpl.java new file mode 100644 index 00000000..18ab6ebc --- /dev/null +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/ChannelImpl.java @@ -0,0 +1,120 @@ +/* + * Copyright 2013-2016 microG Project Team + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.android.gms.wearable.internal; + +import android.net.Uri; +import android.util.Log; + +import com.google.android.gms.common.api.GoogleApiClient; +import com.google.android.gms.common.api.PendingResult; +import com.google.android.gms.common.api.Status; +import com.google.android.gms.wearable.Channel; +import com.google.android.gms.wearable.ChannelApi; + +import org.microg.safeparcel.AutoSafeParcelable; +import org.microg.safeparcel.SafeParceled; + +public class ChannelImpl extends AutoSafeParcelable implements Channel { + private static final String TAG = "GmsWearChannelImpl"; + + @SafeParceled(1) + private int versionCode = 1; + @SafeParceled(2) + private String token; + @SafeParceled(3) + private String nodeId; + @SafeParceled(4) + private String path; + + private ChannelImpl() { + } + + public ChannelImpl(String token, String nodeId, String path) { + this.token = token; + this.nodeId = nodeId; + this.path = path; + } + + @Override + public PendingResult addListener(GoogleApiClient client, ChannelApi.ChannelListener listener) { + Log.d(TAG, "unimplemented Method: addListener"); + return null; + } + + @Override + public PendingResult close(GoogleApiClient client, int errorCode) { + Log.d(TAG, "unimplemented Method: close"); + return null; + } + + @Override + public PendingResult close(GoogleApiClient client) { + Log.d(TAG, "unimplemented Method: close"); + return null; + } + + @Override + public PendingResult getInputStream(GoogleApiClient client) { + Log.d(TAG, "unimplemented Method: getInputStream"); + return null; + } + + @Override + public PendingResult getOutputStream(GoogleApiClient client) { + Log.d(TAG, "unimplemented Method: getOutputStream"); + return null; + } + + public String getNodeId() { + return nodeId; + } + + @Override + public String getPath() { + return path; + } + + public String getToken() { + return token; + } + + @Override + public PendingResult receiveFile(GoogleApiClient client, Uri uri, boolean append) { + Log.d(TAG, "unimplemented Method: receiveFile"); + return null; + } + + @Override + public PendingResult removeListener(GoogleApiClient client, ChannelApi.ChannelListener listener) { + Log.d(TAG, "unimplemented Method: removeListener"); + return null; + } + + @Override + public PendingResult sendFile(GoogleApiClient client, Uri uri) { + Log.d(TAG, "unimplemented Method: sendFile"); + return null; + } + + @Override + public PendingResult sendFile(GoogleApiClient client, Uri uri, long startOffset, long length) { + Log.d(TAG, "unimplemented Method: sendFile"); + return null; + } + + public static final Creator CREATOR = new AutoCreator(ChannelImpl.class); +} diff --git a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/SendMessageResponse.java b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/SendMessageResponse.java index d3a0b7fb..3d8364a6 100644 --- a/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/SendMessageResponse.java +++ b/play-services-wearable-api/src/main/java/com/google/android/gms/wearable/internal/SendMessageResponse.java @@ -16,10 +16,13 @@ package com.google.android.gms.wearable.internal; +import com.google.android.gms.common.api.Status; +import com.google.android.gms.wearable.MessageApi; + import org.microg.safeparcel.AutoSafeParcelable; import org.microg.safeparcel.SafeParceled; -public class SendMessageResponse extends AutoSafeParcelable { +public class SendMessageResponse extends AutoSafeParcelable implements MessageApi.SendMessageResult { @SafeParceled(1) private int versionCode = 1; @@ -28,7 +31,17 @@ public class SendMessageResponse extends AutoSafeParcelable { public int statusCode; @SafeParceled(3) - public int resultId = -1; + public int requestId = -1; + + @Override + public int getRequestId() { + return requestId; + } + + @Override + public Status getStatus() { + return new Status(statusCode); + } public static final Creator CREATOR = new AutoCreator(SendMessageResponse.class); }