From d3a1910b2e3523dfce0e638a78340b6c26bccbb2 Mon Sep 17 00:00:00 2001 From: str4d <str4d@mail.i2p> Date: Wed, 20 Aug 2014 02:37:27 +0000 Subject: [PATCH] Return null on unknown State in Parcel --- .../net/i2p/android/router/service/IRouterState.aidl | 9 +++++++-- .../i2p/android/router/service/IRouterStateCallback.aidl | 5 ++++- .../main/java/net/i2p/android/router/service/State.java | 7 ++++++- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/client/src/main/aidl/net/i2p/android/router/service/IRouterState.aidl b/client/src/main/aidl/net/i2p/android/router/service/IRouterState.aidl index 92bc3f321..bc20ece79 100644 --- a/client/src/main/aidl/net/i2p/android/router/service/IRouterState.aidl +++ b/client/src/main/aidl/net/i2p/android/router/service/IRouterState.aidl @@ -27,8 +27,13 @@ interface IRouterState { boolean isStarted(); /** - * Get the state of the I2P router - **/ + * Get the state of the I2P router. + * + * @return null if the State is not known, e.g. a new state has been added + * to State.aidl in I2P Android. Client app devs should update their client + * library, or their copy of State.aidl, if they are getting null States. + * Future State.aidl versions will be backwards-compatible. + */ State getState(); } diff --git a/client/src/main/aidl/net/i2p/android/router/service/IRouterStateCallback.aidl b/client/src/main/aidl/net/i2p/android/router/service/IRouterStateCallback.aidl index 5158ce44e..0397618c5 100644 --- a/client/src/main/aidl/net/i2p/android/router/service/IRouterStateCallback.aidl +++ b/client/src/main/aidl/net/i2p/android/router/service/IRouterStateCallback.aidl @@ -9,7 +9,10 @@ import net.i2p.android.router.service.State; */ oneway interface IRouterStateCallback { /** - * Called when the state of the I2P router changes + * Called when the state of the I2P router changes. + * + * @param newState may be null if the State is not known. See + * {@link net.i2p.android.router.service.IRouterState#getState()}. */ void stateChanged(in State newState); } diff --git a/client/src/main/java/net/i2p/android/router/service/State.java b/client/src/main/java/net/i2p/android/router/service/State.java index 469165966..148016e6e 100644 --- a/client/src/main/java/net/i2p/android/router/service/State.java +++ b/client/src/main/java/net/i2p/android/router/service/State.java @@ -34,7 +34,12 @@ public enum State implements Parcelable { public static final Creator<State> CREATOR = new Creator<State>() { @Override public State createFromParcel(final Parcel source) { - return State.valueOf(source.readString()); + try { + return State.valueOf(source.readString()); + } catch (IllegalArgumentException e) { + // Parcel is from a newer version of State with new states. + return null; + } } @Override -- GitLab