aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/app/src/main/java/com/wireguard/config/Config.java
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2018-04-30 05:00:51 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2018-04-30 05:29:54 +0200
commit73b0c4ea8116c4b1088dcd84cb2f4d7181baf7ab (patch)
tree225036077f4ef272531cf4e87e423c603181b449 /app/src/main/java/com/wireguard/config/Config.java
parentAllow exporting to zip file (diff)
downloadwireguard-android-73b0c4ea8116c4b1088dcd84cb2f4d7181baf7ab.tar.xz
wireguard-android-73b0c4ea8116c4b1088dcd84cb2f4d7181baf7ab.zip
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.java79
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);
- }
}