Skip to content

Commit 46bf98d

Browse files
committed
ui: never access CREATOR directly
All of the parcelers have their own type prefix. So we have to actually use the legit methods. This is a bit annoying, as there's no fully compatible way across all API versions, so we have to branch. Signed-off-by: Jason A. Donenfeld <[email protected]>
1 parent 3e9ddd8 commit 46bf98d

File tree

1 file changed

+13
-4
lines changed

1 file changed

+13
-4
lines changed

ui/src/main/java/com/wireguard/android/viewmodel/ConfigProxy.kt

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,22 +4,27 @@
44
*/
55
package com.wireguard.android.viewmodel
66

7+
import android.os.Build
78
import android.os.Parcel
89
import android.os.Parcelable
10+
import androidx.core.os.ParcelCompat
911
import androidx.databinding.ObservableArrayList
1012
import androidx.databinding.ObservableList
1113
import com.wireguard.config.BadConfigException
1214
import com.wireguard.config.Config
1315
import com.wireguard.config.Peer
14-
import java.util.ArrayList
1516

1617
class ConfigProxy : Parcelable {
1718
val `interface`: InterfaceProxy
1819
val peers: ObservableList<PeerProxy> = ObservableArrayList()
1920

2021
private constructor(parcel: Parcel) {
21-
`interface` = InterfaceProxy.CREATOR.createFromParcel(parcel)
22-
parcel.readTypedList(peers, PeerProxy.CREATOR)
22+
`interface` = ParcelCompat.readParcelable(parcel, InterfaceProxy::class.java.classLoader, InterfaceProxy::class.java) ?: InterfaceProxy()
23+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
24+
ParcelCompat.readParcelableList(parcel, peers, PeerProxy::class.java.classLoader, PeerProxy::class.java)
25+
} else {
26+
parcel.readTypedList(peers, PeerProxy.CREATOR)
27+
}
2328
peers.forEach { it.bind(this) }
2429
}
2530

@@ -57,7 +62,11 @@ class ConfigProxy : Parcelable {
5762

5863
override fun writeToParcel(dest: Parcel, flags: Int) {
5964
dest.writeParcelable(`interface`, flags)
60-
dest.writeTypedList(peers)
65+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
66+
dest.writeParcelableList(peers, flags)
67+
} else {
68+
dest.writeTypedList(peers)
69+
}
6170
}
6271

6372
private class ConfigProxyCreator : Parcelable.Creator<ConfigProxy> {

0 commit comments

Comments
 (0)