diff options
author | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-04-30 05:00:51 +0200 |
---|---|---|
committer | Jason A. Donenfeld <Jason@zx2c4.com> | 2018-04-30 05:29:54 +0200 |
commit | 73b0c4ea8116c4b1088dcd84cb2f4d7181baf7ab (patch) | |
tree | 225036077f4ef272531cf4e87e423c603181b449 /app/src/main/java/com/wireguard/config/Config.java | |
parent | 622f41f11f92005e2dd3791fd13b0ace294958d5 (diff) |
TunnelEditorFragment: rewrite and simplify
This should remove some null pointer dereferences and overall make the
thing more robust.
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
Diffstat (limited to 'app/src/main/java/com/wireguard/config/Config.java')
-rw-r--r-- | app/src/main/java/com/wireguard/config/Config.java | 79 |
1 files changed, 40 insertions, 39 deletions
diff --git a/app/src/main/java/com/wireguard/config/Config.java b/app/src/main/java/com/wireguard/config/Config.java index b38d2a13..6330ff5e 100644 --- a/app/src/main/java/com/wireguard/config/Config.java +++ b/app/src/main/java/com/wireguard/config/Config.java @@ -21,35 +21,24 @@ import java.util.List; * Represents a wg-quick configuration file, its name, and its connection state. */ -public class Config implements Parcelable { - public static final Creator<Config> CREATOR = new Creator<Config>() { - @Override - public Config createFromParcel(final Parcel in) { - return new Config(in); - } - - @Override - public Config[] newArray(final int size) { - return new Config[size]; - } - }; - - public static class Observable extends BaseObservable { +public class Config { + public static class Observable extends BaseObservable implements Parcelable { private String name; private Interface.Observable observableInterface; private ObservableList<Peer.Observable> observablePeers; - public Observable(Config parent, String name) { this.name = name; loadData(parent); } public void loadData(Config parent) { - this.observableInterface = new Interface.Observable(parent.interfaceSection); + this.observableInterface = new Interface.Observable(parent == null ? null : parent.interfaceSection); this.observablePeers = new ObservableArrayList<>(); - for (Peer peer : parent.getPeers()) - this.observablePeers.add(new Peer.Observable(peer)); + if (parent != null) { + for (Peer peer : parent.getPeers()) + this.observablePeers.add(new Peer.Observable(peer)); + } } public void commitData(Config parent) { @@ -66,7 +55,7 @@ public class Config implements Parcelable { @Bindable public String getName() { - return name; + return name == null ? "" : name; } public void setName(String name) { @@ -83,20 +72,43 @@ public class Config implements Parcelable { public ObservableList<Peer.Observable> getPeers() { return observablePeers; } - } - private final Interface interfaceSection; - private List<Peer> peers = new ArrayList<>(); - public Config() { - interfaceSection = new Interface(); - } + public static final Creator<Observable> CREATOR = new Creator<Observable>() { + @Override + public Observable createFromParcel(final Parcel in) { + return new Observable(in); + } - private Config(final Parcel in) { - interfaceSection = in.readParcelable(Interface.class.getClassLoader()); - in.readTypedList(peers, Peer.CREATOR); + @Override + public Observable[] newArray(final int size) { + return new Observable[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(final Parcel dest, final int flags) { + dest.writeString(name); + dest.writeParcelable(observableInterface, flags); + dest.writeTypedList(observablePeers); + } + + private Observable(final Parcel in) { + name = in.readString(); + observableInterface = in.readParcelable(Interface.Observable.class.getClassLoader()); + observablePeers = new ObservableArrayList<>(); + in.readTypedList(observablePeers, Peer.Observable.CREATOR); + } } + private final Interface interfaceSection = new Interface(); + private List<Peer> peers = new ArrayList<>(); + public static Config from(final InputStream stream) throws IOException { return from(new BufferedReader(new InputStreamReader(stream, StandardCharsets.UTF_8))); } @@ -130,11 +142,6 @@ public class Config implements Parcelable { return config; } - @Override - public int describeContents() { - return 0; - } - public Interface getInterface() { return interfaceSection; } @@ -150,10 +157,4 @@ public class Config implements Parcelable { sb.append('\n').append(peer); return sb.toString(); } - - @Override - public void writeToParcel(final Parcel dest, final int flags) { - dest.writeParcelable(interfaceSection, flags); - dest.writeTypedList(peers); - } } |