This commit is contained in:
Vitor Pamplona 2024-09-09 19:42:43 -04:00
parent 8ede4eb3d6
commit 8841aa9a10
4 changed files with 44 additions and 0 deletions

View File

@ -288,6 +288,9 @@ dependencies {
// Cbor for cashuB format // Cbor for cashuB format
implementation libs.kotlinx.serialization.cbor implementation libs.kotlinx.serialization.cbor
implementation libs.tor.android
implementation libs.jtorctl
testImplementation libs.junit testImplementation libs.junit
testImplementation libs.mockk testImplementation libs.mockk

View File

@ -21,14 +21,18 @@
package com.vitorpamplona.amethyst.ui package com.vitorpamplona.amethyst.ui
import android.annotation.SuppressLint import android.annotation.SuppressLint
import android.content.ComponentName
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.content.ServiceConnection
import android.net.ConnectivityManager import android.net.ConnectivityManager
import android.net.Network import android.net.Network
import android.net.NetworkCapabilities import android.net.NetworkCapabilities
import android.os.Build import android.os.Build
import android.os.Bundle import android.os.Bundle
import android.os.IBinder
import android.util.Log import android.util.Log
import android.widget.Toast
import androidx.activity.compose.setContent import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts import androidx.activity.result.contract.ActivityResultContracts
@ -63,6 +67,8 @@ import kotlinx.coroutines.DelicateCoroutinesApi
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch import kotlinx.coroutines.launch
import org.torproject.jni.TorService
import org.torproject.jni.TorService.LocalBinder
import java.net.URLEncoder import java.net.URLEncoder
import java.nio.charset.StandardCharsets import java.nio.charset.StandardCharsets
import java.util.Timer import java.util.Timer
@ -133,6 +139,34 @@ class MainActivity : AppCompatActivity() {
// resets state until next External Signer Call // resets state until next External Signer Call
Timer().schedule(350) { shouldPauseService = true } Timer().schedule(350) { shouldPauseService = true }
bindService(
Intent(this, TorService::class.java),
object : ServiceConnection {
override fun onServiceConnected(
name: ComponentName,
service: IBinder,
) {
// moved torService to a local variable, since we only need it once
val torService = (service as LocalBinder).service
while (torService.torControlConnection == null) {
try {
Thread.sleep(500)
} catch (e: InterruptedException) {
e.printStackTrace()
}
}
Toast.makeText(this@MainActivity, "Got Tor control connection", Toast.LENGTH_LONG).show()
}
override fun onServiceDisconnected(name: ComponentName) {
}
},
BIND_AUTO_CREATE,
)
} }
override fun onPause() { override fun onPause() {
@ -155,6 +189,8 @@ class MainActivity : AppCompatActivity() {
(getSystemService(ConnectivityManager::class.java) as ConnectivityManager) (getSystemService(ConnectivityManager::class.java) as ConnectivityManager)
.unregisterNetworkCallback(networkCallback) .unregisterNetworkCallback(networkCallback)
stopService(Intent(baseContext, TorService::class.java))
super.onPause() super.onPause()
} }

View File

@ -22,6 +22,7 @@ fragmentKtx = "1.8.3"
gms = "4.4.2" gms = "4.4.2"
jacksonModuleKotlin = "2.17.2" jacksonModuleKotlin = "2.17.2"
jna = "5.14.0" jna = "5.14.0"
jtorctl = "0.4.5.7"
junit = "4.13.2" junit = "4.13.2"
kotlin = "2.0.0" kotlin = "2.0.0"
kotlinxCollectionsImmutable = "0.3.7" kotlinxCollectionsImmutable = "0.3.7"
@ -41,6 +42,7 @@ rfc3986 = "0.1.0"
secp256k1KmpJniAndroid = "0.15.0" secp256k1KmpJniAndroid = "0.15.0"
securityCryptoKtx = "1.1.0-alpha06" securityCryptoKtx = "1.1.0-alpha06"
spotless = "6.25.0" spotless = "6.25.0"
torAndroid = "0.4.8.12"
translate = "17.0.3" translate = "17.0.3"
unifiedpush = "2.3.1" unifiedpush = "2.3.1"
urlDetector = "0.1.23" urlDetector = "0.1.23"
@ -99,6 +101,7 @@ google-mlkit-language-id = { group = "com.google.mlkit", name = "language-id", v
google-mlkit-translate = { group = "com.google.mlkit", name = "translate", version.ref = "translate" } google-mlkit-translate = { group = "com.google.mlkit", name = "translate", version.ref = "translate" }
jackson-module-kotlin = { group = "com.fasterxml.jackson.module", name = "jackson-module-kotlin", version.ref = "jacksonModuleKotlin" } jackson-module-kotlin = { group = "com.fasterxml.jackson.module", name = "jackson-module-kotlin", version.ref = "jacksonModuleKotlin" }
jna = { group = "net.java.dev.jna", name = "jna", version.ref = "jna" } jna = { group = "net.java.dev.jna", name = "jna", version.ref = "jna" }
jtorctl = { module = "info.guardianproject:jtorctl", version.ref = "jtorctl" }
junit = { group = "junit", name = "junit", version.ref = "junit" } junit = { group = "junit", name = "junit", version.ref = "junit" }
kotlinx-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotlinx-collections-immutable", version.ref = "kotlinxCollectionsImmutable" } kotlinx-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotlinx-collections-immutable", version.ref = "kotlinxCollectionsImmutable" }
kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlinxSerialization" } kotlinx-serialization-cbor = { module = "org.jetbrains.kotlinx:kotlinx-serialization-cbor", version.ref = "kotlinxSerialization" }
@ -110,6 +113,7 @@ mockk = { group = "io.mockk", name = "mockk", version.ref = "mockk" }
okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" } okhttp = { group = "com.squareup.okhttp3", name = "okhttp", version.ref = "okhttp" }
rfc3986-normalizer = { group = "org.czeal", name = "rfc3986", version.ref = "rfc3986" } rfc3986-normalizer = { group = "org.czeal", name = "rfc3986", version.ref = "rfc3986" }
secp256k1-kmp-jni-android = { group = "fr.acinq.secp256k1", name = "secp256k1-kmp-jni-android", version.ref = "secp256k1KmpJniAndroid" } secp256k1-kmp-jni-android = { group = "fr.acinq.secp256k1", name = "secp256k1-kmp-jni-android", version.ref = "secp256k1KmpJniAndroid" }
tor-android = { module = "info.guardianproject:tor-android", version.ref = "torAndroid" }
trbl-blurhash = { group = "io.trbl", name = "blurhash", version.ref = "blurhash" } trbl-blurhash = { group = "io.trbl", name = "blurhash", version.ref = "blurhash" }
unifiedpush = { group = "com.github.UnifiedPush", name = "android-connector", version.ref = "unifiedpush" } unifiedpush = { group = "com.github.UnifiedPush", name = "android-connector", version.ref = "unifiedpush" }
url-detector = { group = "io.github.url-detector", name = "url-detector", version.ref = "urlDetector" } url-detector = { group = "io.github.url-detector", name = "url-detector", version.ref = "urlDetector" }

View File

@ -24,6 +24,7 @@ dependencyResolutionManagement {
google() google()
mavenCentral() mavenCentral()
maven { url "https://jitpack.io" } maven { url "https://jitpack.io" }
maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }
} }
} }