<feed xmlns='http://www.w3.org/2005/Atom'>
<title>wireguard-android/ui/src/main/java/com/wireguard/android/model, branch master</title>
<subtitle>Android GUI for WireGuard</subtitle>
<id>https://git.zx2c4.com/wireguard-android/atom/ui/src/main/java/com/wireguard/android/model?h=master</id>
<link rel='self' href='https://git.zx2c4.com/wireguard-android/atom/ui/src/main/java/com/wireguard/android/model?h=master'/>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/'/>
<updated>2025-10-20T16:22:36Z</updated>
<entry>
<title>ui: raise min SDK to 24</title>
<updated>2025-10-20T16:22:36Z</updated>
<author>
<name>Harsh Shandilya</name>
<email>me@msfjarvis.dev</email>
</author>
<published>2025-09-19T15:15:17Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=3b6ab660a94ef563be25e50804951feda26bc30a'/>
<id>urn:sha1:3b6ab660a94ef563be25e50804951feda26bc30a</id>
<content type='text'>
The difference between the usage of 21 and 24 is not big enough to hold
on to all the baggage from API 21

Signed-off-by: Harsh Shandilya &lt;me@msfjarvis.dev&gt;
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>global: update copyright notices</title>
<updated>2025-05-19T15:31:02Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2025-05-19T15:31:02Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=0295abd808ba00a024d5752980f7fccfcb6161bb'/>
<id>urn:sha1:0295abd808ba00a024d5752980f7fccfcb6161bb</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>ui: reformat all code</title>
<updated>2023-05-05T11:18:30Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2023-05-05T01:09:38Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=40eaa54cf025d3b4d4f75ab907602e8ecbfe05ad'/>
<id>urn:sha1:40eaa54cf025d3b4d4f75ab907602e8ecbfe05ad</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>global: bump copyright date</title>
<updated>2023-03-21T14:41:11Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2023-03-21T14:41:11Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=853e86e6d057e2a50317405c594296ca8aa32df3'/>
<id>urn:sha1:853e86e6d057e2a50317405c594296ca8aa32df3</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>global: bump copyright year</title>
<updated>2021-10-29T14:47:12Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2021-10-29T14:47:12Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=bf84e26a86ae27963312c2dd1422674f479934db'/>
<id>urn:sha1:bf84e26a86ae27963312c2dd1422674f479934db</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>ui: replace deprecated string operations</title>
<updated>2021-05-05T11:26:56Z</updated>
<author>
<name>Harsh Shandilya</name>
<email>me@msfjarvis.dev</email>
</author>
<published>2021-05-05T11:26:56Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=e71c84a7857bb0ad637175ba938d08fcb86053b1'/>
<id>urn:sha1:e71c84a7857bb0ad637175ba938d08fcb86053b1</id>
<content type='text'>
Signed-off-by: Harsh Shandilya &lt;me@msfjarvis.dev&gt;
</content>
</entry>
<entry>
<title>TunnelManager: catch exception in intent receiver</title>
<updated>2020-09-21T08:54:07Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2020-09-21T08:54:07Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=52c2e9cd24c263ea0cdfeaf4c866aa523b43c48b'/>
<id>urn:sha1:52c2e9cd24c263ea0cdfeaf4c866aa523b43c48b</id>
<content type='text'>
java.lang.IllegalStateException:
  at android.app.ContextImpl.startServiceCommon (ContextImpl.java:1720)
  at android.app.ContextImpl.startService (ContextImpl.java:1675)
  at android.content.ContextWrapper.startService (ContextWrapper.java:669)
  at com.wireguard.android.backend.GoBackend.startVpnService (GoBackend.java:4)
  at com.wireguard.android.backend.GoBackend.setStateInternal (GoBackend.java:4)
  at com.wireguard.android.backend.GoBackend.setState (GoBackend.java:2)
  at com.wireguard.android.model.TunnelManager$setTunnelState$2$1.invokeSuspend (TunnelManager.java:6)
  at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith (BaseContinuationImpl.java:2)
  at kotlinx.coroutines.DispatchedTask.run (DispatchedTask.java:2)
  at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely (CoroutineScheduler.java)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask (CoroutineScheduler.java:7)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker (CoroutineScheduler.java:7)
  at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run (CoroutineScheduler.java:7)

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>ui: move to Jetpack DataStore instead of SharedPrefs</title>
<updated>2020-09-18T18:29:23Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2020-09-18T12:03:48Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=d200437813ae09769dc90820ded3911a324601ca'/>
<id>urn:sha1:d200437813ae09769dc90820ded3911a324601ca</id>
<content type='text'>
Hopefully PreferencesPreferenceDataStore gets to go away sometime down
the line.

Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
<entry>
<title>ui: replace GlobalScope with a hand-rolled CoroutineScope</title>
<updated>2020-09-16T16:01:06Z</updated>
<author>
<name>Harsh Shandilya</name>
<email>me@msfjarvis.dev</email>
</author>
<published>2020-09-16T10:00:15Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=2f088938c6c8c718d0a4ed639c18868257e354a1'/>
<id>urn:sha1:2f088938c6c8c718d0a4ed639c18868257e354a1</id>
<content type='text'>
GlobalScope has numerous problems[1] that make it unfit for
use in most applications and making it behave correctly requires
an excessive amount of verbosity that's alleviated simply by using
any other scope. Since we run multiple operations in the context
of the application's lifecycle, introduce a new scope that is created
when our application is, and cancelled upon its termination.

While at it, make the scope default to Dispatchers.IO to reduce pressure
on the UI event loop. Tasks requiring access to the UI thread appropriately
switch context making the change completely safe.

1: https://medium.com/@elizarov/the-reason-to-avoid-globalscope-835337445abc

Signed-off-by: Harsh Shandilya &lt;me@msfjarvis.dev&gt;
</content>
</entry>
<entry>
<title>global: lint codebase with recent changes</title>
<updated>2020-09-16T08:37:21Z</updated>
<author>
<name>Jason A. Donenfeld</name>
<email>Jason@zx2c4.com</email>
</author>
<published>2020-09-16T08:37:21Z</published>
<link rel='alternate' type='text/html' href='https://git.zx2c4.com/wireguard-android/commit/?id=8b9a40b3d751cf723c822e3ca317735a99f09cab'/>
<id>urn:sha1:8b9a40b3d751cf723c822e3ca317735a99f09cab</id>
<content type='text'>
Signed-off-by: Jason A. Donenfeld &lt;Jason@zx2c4.com&gt;
</content>
</entry>
</feed>
