From 43f60dd4b90c1a93ae866166f5c3bcfe4d7f64a8 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Wed, 10 May 2023 14:10:10 +0100
Subject: [PATCH] Upgrade onionwrapper to 0.0.2 and dont-kill-me-lib to 0.2.7.

---
 gradle/variables.gradle                       |  2 +-
 gradle/verification-metadata.xml              | 40 ++++-----
 mailbox-android/build.gradle                  |  2 +-
 .../wakelock/AndroidWakeLockModule.java       | 20 -----
 .../briarproject/mailbox/android/AppModule.kt |  7 ++
 .../core/tor/AndroidLocationUtils.java        | 89 -------------------
 .../mailbox/core/tor/AndroidTorModule.kt      |  9 +-
 .../mailbox/core/tor/AndroidTorPlugin.java    |  4 +-
 .../mailbox/core/system/LocationUtils.java    | 32 -------
 .../mailbox/core/tor/AbstractTorPlugin.java   |  2 +-
 mailbox-lib/.gitignore                        |  4 +-
 .../mailbox/core/tor/JavaTorModule.kt         |  6 +-
 .../mailbox/core/tor/JavaTorPlugin.java       |  2 +-
 13 files changed, 43 insertions(+), 176 deletions(-)
 delete mode 100644 mailbox-android/src/main/java/org/briarproject/android/dontkillmelib/wakelock/AndroidWakeLockModule.java
 delete mode 100644 mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidLocationUtils.java
 delete mode 100644 mailbox-core/src/main/java/org/briarproject/mailbox/core/system/LocationUtils.java

diff --git a/gradle/variables.gradle b/gradle/variables.gradle
index f2e55839..89e95b3b 100644
--- a/gradle/variables.gradle
+++ b/gradle/variables.gradle
@@ -8,5 +8,5 @@ ext {
     junit_version = '5.7.2'
     mockk_version = '1.10.4'
     ktlint_plugin_version = '10.2.1'
-    onionwrapper_version = '0.0.1'
+    onionwrapper_version = '0.0.2'
 }
diff --git a/gradle/verification-metadata.xml b/gradle/verification-metadata.xml
index 8eb93806..5eef64ae 100644
--- a/gradle/verification-metadata.xml
+++ b/gradle/verification-metadata.xml
@@ -3093,12 +3093,12 @@
             <sha256 value="a473a77476dd631630ebb3a37b34812f94e6a7245c39765a14d7231b90e0645b" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.briarproject" name="dont-kill-me-lib" version="0.2.6">
-         <artifact name="dont-kill-me-lib-0.2.6.aar">
-            <sha256 value="8a4cc201143227c0865c2edfba035f71109bf02e1ab26444fa3e42d3c569960f" origin="Generated by Gradle"/>
+      <component group="org.briarproject" name="dont-kill-me-lib" version="0.2.7">
+         <artifact name="dont-kill-me-lib-0.2.7.aar">
+            <sha256 value="8a9540941fd927e1c127096a7a9b4aa61ce2f2965d2e24f849be92f9e57213c4" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="dont-kill-me-lib-0.2.6.module">
-            <sha256 value="2646adc39d022c2ed366493bdc92247d1afe6b5dbd41783235e096062fcc31ae" origin="Generated by Gradle"/>
+         <artifact name="dont-kill-me-lib-0.2.7.module">
+            <sha256 value="6f1deb46d52d513dccde6ee992f3b9ffa8f35001e7e5446fa8239596ae56eb99" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.briarproject" name="jtorctl" version="0.5">
@@ -3133,28 +3133,28 @@
             <sha256 value="9feb0d95ecef6e394b2a55ec4e451ec659f84a705345976053de166b157a0460" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.briarproject" name="onionwrapper-android" version="0.0.1">
-         <artifact name="onionwrapper-android-0.0.1.aar">
-            <sha256 value="959115946586daa090f057645cf75992407a59025e221c3bf88d2aa930ef3919" origin="Generated by Gradle"/>
+      <component group="org.briarproject" name="onionwrapper-android" version="0.0.2">
+         <artifact name="onionwrapper-android-0.0.2.aar">
+            <sha256 value="d196f1fe5d8b750866ea09d80509716aae7645d39b2c85433994718dbebeb4d1" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="onionwrapper-android-0.0.1.module">
-            <sha256 value="8f6abee13082ca633178932555c8261ff46099181179c2f6015c916ed436d181" origin="Generated by Gradle"/>
+         <artifact name="onionwrapper-android-0.0.2.module">
+            <sha256 value="53b951f528bcd09804c98be99933160beaea329f64c9d691a971ce61d67b4497" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.briarproject" name="onionwrapper-core" version="0.0.1">
-         <artifact name="onionwrapper-core-0.0.1.jar">
-            <sha256 value="a1937506b00ee6620e909a500e5d004be81f94a6f7d7c898e1a9e841a8ae8a2a" origin="Generated by Gradle"/>
+      <component group="org.briarproject" name="onionwrapper-core" version="0.0.2">
+         <artifact name="onionwrapper-core-0.0.2.jar">
+            <sha256 value="7038e960c9e59803f0e2c19444dbb5214cd99e5a7463c0a01c45318e07a0eb80" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="onionwrapper-core-0.0.1.module">
-            <sha256 value="c76d8a5c0a61483088280a1d8122e0c0325e4f4882625d89911eede1656d8753" origin="Generated by Gradle"/>
+         <artifact name="onionwrapper-core-0.0.2.module">
+            <sha256 value="71b6e4713dff5920a85585232ebe9909024885c9178b8ca5cf391bbcbe0f30b8" origin="Generated by Gradle"/>
          </artifact>
       </component>
-      <component group="org.briarproject" name="onionwrapper-java" version="0.0.1">
-         <artifact name="onionwrapper-java-0.0.1.jar">
-            <sha256 value="102ccea934d02b13702fd28e890e27e342db8b669a4c84bb54a3783cb8926552" origin="Generated by Gradle"/>
+      <component group="org.briarproject" name="onionwrapper-java" version="0.0.2">
+         <artifact name="onionwrapper-java-0.0.2.jar">
+            <sha256 value="87a3f4082174dbbd32c4f5f062b46af1d3fedd8cfa1ec84f6ce6ccb6e3674fb6" origin="Generated by Gradle"/>
          </artifact>
-         <artifact name="onionwrapper-java-0.0.1.module">
-            <sha256 value="6b31d326baf6be7be0f51fbcebea8b2ab5a5612a6a05916921f4dee9c7ab86cc" origin="Generated by Gradle"/>
+         <artifact name="onionwrapper-java-0.0.2.module">
+            <sha256 value="80baa417137ebe8069c846a63d6dff03b90eb9d075d3975a305e92a6773220f4" origin="Generated by Gradle"/>
          </artifact>
       </component>
       <component group="org.briarproject" name="snowflake-android" version="2.5.1">
diff --git a/mailbox-android/build.gradle b/mailbox-android/build.gradle
index 75cce90a..ed5bed7c 100644
--- a/mailbox-android/build.gradle
+++ b/mailbox-android/build.gradle
@@ -77,7 +77,7 @@ configurations {
 
 dependencies {
     implementation project(path: ':mailbox-core', configuration: 'default')
-    implementation 'org.briarproject:dont-kill-me-lib:0.2.6'
+    implementation 'org.briarproject:dont-kill-me-lib:0.2.7'
     implementation "org.briarproject:onionwrapper-android:$onionwrapper_version"
 
     implementation 'com.github.tony19:logback-android:3.0.0'
diff --git a/mailbox-android/src/main/java/org/briarproject/android/dontkillmelib/wakelock/AndroidWakeLockModule.java b/mailbox-android/src/main/java/org/briarproject/android/dontkillmelib/wakelock/AndroidWakeLockModule.java
deleted file mode 100644
index 0b243089..00000000
--- a/mailbox-android/src/main/java/org/briarproject/android/dontkillmelib/wakelock/AndroidWakeLockModule.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package org.briarproject.android.dontkillmelib.wakelock;
-
-import javax.inject.Singleton;
-
-import dagger.Module;
-import dagger.Provides;
-import dagger.hilt.InstallIn;
-import dagger.hilt.components.SingletonComponent;
-
-@Module
-@InstallIn(SingletonComponent.class)
-public class AndroidWakeLockModule {
-
-	@Provides
-	@Singleton
-	AndroidWakeLockManager provideWakeLockManager(
-			AndroidWakeLockManagerImpl wakeLockManager) {
-		return wakeLockManager;
-	}
-}
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.kt
index 02ce9bc3..67206b68 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/android/AppModule.kt
@@ -27,6 +27,8 @@ import dagger.hilt.InstallIn
 import dagger.hilt.components.SingletonComponent
 import org.briarproject.android.dontkillmelib.DozeHelper
 import org.briarproject.android.dontkillmelib.DozeHelperImpl
+import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManager
+import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManagerFactory
 import org.briarproject.mailbox.core.CoreModule
 import org.briarproject.mailbox.core.db.DatabaseConfig
 import org.briarproject.mailbox.core.files.FileProvider
@@ -79,4 +81,9 @@ internal class AppModule {
     @Singleton
     @Provides
     fun provideSystem() = System { code -> exitProcess(code) }
+
+    @Singleton
+    @Provides
+    fun provideAndroidWakeLockManager(app: Application): AndroidWakeLockManager =
+        AndroidWakeLockManagerFactory.createAndroidWakeLockManager(app)
 }
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidLocationUtils.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidLocationUtils.java
deleted file mode 100644
index 4fb9b179..00000000
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidLocationUtils.java
+++ /dev/null
@@ -1,89 +0,0 @@
-/*
- *     Briar Mailbox
- *     Copyright (C) 2021-2022  The Briar Project
- *
- *     This program is free software: you can redistribute it and/or modify
- *     it under the terms of the GNU Affero General Public License as
- *     published by the Free Software Foundation, either version 3 of the
- *     License, or (at your option) any later version.
- *
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU Affero General Public License for more details.
- *
- *     You should have received a copy of the GNU Affero General Public License
- *     along with this program.  If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-package org.briarproject.mailbox.core.tor;
-
-import android.annotation.SuppressLint;
-import android.app.Application;
-import android.content.Context;
-import android.telephony.TelephonyManager;
-import android.text.TextUtils;
-
-import org.briarproject.mailbox.core.system.LocationUtils;
-import org.slf4j.Logger;
-
-import java.util.Locale;
-
-import javax.inject.Inject;
-
-import static android.content.Context.TELEPHONY_SERVICE;
-import static org.slf4j.LoggerFactory.getLogger;
-
-class AndroidLocationUtils implements LocationUtils {
-
-	private static final Logger LOG = getLogger(AndroidLocationUtils.class);
-
-	private final Context appContext;
-
-	@Inject
-	AndroidLocationUtils(Application app) {
-		appContext = app.getApplicationContext();
-	}
-
-	/**
-	 * This guesses the current country from the first of these sources that
-	 * succeeds (also in order of likelihood of being correct):
-	 *
-	 * <ul>
-	 * <li>Phone network. This works even when no SIM card is inserted, or a
-	 *     foreign SIM card is inserted.</li>
-	 * <li>SIM card. This is only an heuristic and assumes the user is not
-	 *     roaming.</li>
-	 * <li>User locale. This is an even worse heuristic.</li>
-	 * </ul>
-	 * <p>
-	 * Note: this is very similar to <a href="https://android.googlesource.com/platform/frameworks/base/+/cd92588%5E/location/java/android/location/CountryDetector.java">
-	 * this API</a> except it seems that Google doesn't want us to use it for
-	 * some reason - both that class and {@code Context.COUNTRY_CODE} are
-	 * annotated {@code @hide}.
-	 */
-	@Override
-	@SuppressLint("DefaultLocale")
-	public String getCurrentCountry() {
-		String countryCode = getCountryFromPhoneNetwork();
-		if (!TextUtils.isEmpty(countryCode)) return countryCode.toUpperCase();
-		LOG.info("Falling back to SIM card country");
-		countryCode = getCountryFromSimCard();
-		if (!TextUtils.isEmpty(countryCode)) return countryCode.toUpperCase();
-		LOG.info("Falling back to user-defined locale");
-		return Locale.getDefault().getCountry();
-	}
-
-	private String getCountryFromPhoneNetwork() {
-		Object o = appContext.getSystemService(TELEPHONY_SERVICE);
-		TelephonyManager tm = (TelephonyManager) o;
-		return tm == null ? "" : tm.getNetworkCountryIso();
-	}
-
-	private String getCountryFromSimCard() {
-		Object o = appContext.getSystemService(TELEPHONY_SERVICE);
-		TelephonyManager tm = (TelephonyManager) o;
-		return tm == null ? "" : tm.getSimCountryIso();
-	}
-}
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt
index 2e3c5c40..4717eab8 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorModule.kt
@@ -34,8 +34,9 @@ import org.briarproject.mailbox.core.lifecycle.LifecycleManager
 import org.briarproject.mailbox.core.lifecycle.ServiceException
 import org.briarproject.mailbox.core.server.WebServerManager
 import org.briarproject.mailbox.core.settings.SettingsManager
-import org.briarproject.mailbox.core.system.LocationUtils
+import org.briarproject.onionwrapper.AndroidLocationUtilsFactory
 import org.briarproject.onionwrapper.CircumventionProvider
+import org.briarproject.onionwrapper.LocationUtils
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory.getLogger
 import java.util.concurrent.Executor
@@ -116,9 +117,9 @@ internal class AndroidTorModule {
         }
 
     @Provides
-    fun provideLocationUtils(locationUtils: AndroidLocationUtils): LocationUtils {
-        return locationUtils
-    }
+    @Singleton
+    fun provideLocationUtils(app: Application): LocationUtils =
+        AndroidLocationUtilsFactory.createAndroidLocationUtils(app)
 
     @Provides
     @Singleton
diff --git a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java
index 29f88d53..6da3f8e7 100644
--- a/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java
+++ b/mailbox-android/src/main/java/org/briarproject/mailbox/core/tor/AndroidTorPlugin.java
@@ -20,15 +20,13 @@
 package org.briarproject.mailbox.core.tor;
 
 import android.app.Application;
-import android.content.Context;
 import android.os.Build;
 
-import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLock;
 import org.briarproject.android.dontkillmelib.wakelock.AndroidWakeLockManager;
 import org.briarproject.mailbox.core.settings.SettingsManager;
-import org.briarproject.mailbox.core.system.LocationUtils;
 import org.briarproject.onionwrapper.AndroidTorWrapper;
 import org.briarproject.onionwrapper.CircumventionProvider;
+import org.briarproject.onionwrapper.LocationUtils;
 
 import java.io.File;
 import java.util.ArrayList;
diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/LocationUtils.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/LocationUtils.java
deleted file mode 100644
index 96440876..00000000
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/system/LocationUtils.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
- *     Briar Mailbox
- *     Copyright (C) 2021-2022  The Briar Project
- *
- *     This program is free software: you can redistribute it and/or modify
- *     it under the terms of the GNU Affero General Public License as
- *     published by the Free Software Foundation, either version 3 of the
- *     License, or (at your option) any later version.
- *
- *     This program is distributed in the hope that it will be useful,
- *     but WITHOUT ANY WARRANTY; without even the implied warranty of
- *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *     GNU Affero General Public License for more details.
- *
- *     You should have received a copy of the GNU Affero General Public License
- *     along with this program.  If not, see <https://www.gnu.org/licenses/>.
- *
- */
-
-package org.briarproject.mailbox.core.system;
-
-public interface LocationUtils {
-
-	/**
-	 * Get the country the device is currently located in, or "" if it cannot
-	 * be determined.
-	 * <p>
-	 * The country codes are formatted upper-case and as per <a href="
-	 * https://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-1 alpha 2</a>.
-	 */
-	String getCurrentCountry();
-}
diff --git a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java
index 8f2d8d3f..967aa5d5 100644
--- a/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java
+++ b/mailbox-core/src/main/java/org/briarproject/mailbox/core/tor/AbstractTorPlugin.java
@@ -27,9 +27,9 @@ import org.briarproject.mailbox.core.lifecycle.IoExecutor;
 import org.briarproject.mailbox.core.lifecycle.ServiceException;
 import org.briarproject.mailbox.core.settings.Settings;
 import org.briarproject.mailbox.core.settings.SettingsManager;
-import org.briarproject.mailbox.core.system.LocationUtils;
 import org.briarproject.onionwrapper.CircumventionProvider;
 import org.briarproject.onionwrapper.CircumventionProvider.BridgeType;
+import org.briarproject.onionwrapper.LocationUtils;
 import org.briarproject.onionwrapper.TorWrapper;
 import org.briarproject.onionwrapper.TorWrapper.HiddenServiceProperties;
 import org.briarproject.onionwrapper.TorWrapper.Observer;
diff --git a/mailbox-lib/.gitignore b/mailbox-lib/.gitignore
index 8376b623..aa09c152 100644
--- a/mailbox-lib/.gitignore
+++ b/mailbox-lib/.gitignore
@@ -1 +1,3 @@
-/src/main/resources/*.zip
+/src/main/resources/aarch64/
+/src/main/resources/armhf/
+/src/main/resources/x86_64/
diff --git a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt
index 94a56973..da296ff2 100644
--- a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt
+++ b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorModule.kt
@@ -30,13 +30,13 @@ import org.briarproject.mailbox.core.lifecycle.IoExecutor
 import org.briarproject.mailbox.core.lifecycle.LifecycleManager
 import org.briarproject.mailbox.core.server.WebServerManager
 import org.briarproject.mailbox.core.settings.SettingsManager
-import org.briarproject.mailbox.core.system.LocationUtils
 import org.briarproject.mailbox.core.util.OsUtils.isLinux
 import org.briarproject.onionwrapper.CircumventionProvider
+import org.briarproject.onionwrapper.JavaLocationUtilsFactory
+import org.briarproject.onionwrapper.LocationUtils
 import org.slf4j.Logger
 import org.slf4j.LoggerFactory.getLogger
 import java.io.File
-import java.util.Locale
 import java.util.concurrent.Executor
 import javax.inject.Singleton
 
@@ -108,6 +108,6 @@ class JavaTorModule {
 
     @Provides
     @Singleton
-    fun provideLocationUtils() = LocationUtils { Locale.getDefault().country }
+    fun provideLocationUtils(): LocationUtils = JavaLocationUtilsFactory.createJavaLocationUtils()
 
 }
diff --git a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java
index dd4d55e5..e3ac9442 100644
--- a/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java
+++ b/mailbox-lib/src/main/java/org/briarproject/mailbox/core/tor/JavaTorPlugin.java
@@ -20,8 +20,8 @@
 package org.briarproject.mailbox.core.tor;
 
 import org.briarproject.mailbox.core.settings.SettingsManager;
-import org.briarproject.mailbox.core.system.LocationUtils;
 import org.briarproject.onionwrapper.CircumventionProvider;
+import org.briarproject.onionwrapper.LocationUtils;
 import org.briarproject.onionwrapper.UnixTorWrapper;
 
 import java.io.File;
-- 
GitLab