diff --git a/build.gradle b/build.gradle index 091a950..f0eeb00 100644 --- a/build.gradle +++ b/build.gradle @@ -9,7 +9,7 @@ buildscript { 'minSdk' : 14, 'compileSdk' : 28, 'buildTools' : '28.0.3', - 'androidPlugin' : '3.4.0', + 'androidPlugin' : '4.0.0', androidx_app_compat : '1.0.2', androidx_card_view : '1.0.0', @@ -28,14 +28,18 @@ buildscript { 'gradlePlugin': "com.android.tools.build:gradle:${versions.androidPlugin}", ] ] + versions.kotlin = '1.3.72' } repositories { + google() + jcenter() gradlePluginPortal() - mavenCentral() + mavenCentral() } dependencies { + classpath 'com.android.tools.build:gradle:4.0.0' classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$versions.kotlin" classpath 'com.github.ben-manes:gradle-versions-plugin:0.38.0' // How can we move this to the sample folder diff --git a/lib/src/main/kotlin/org/walletconnect/Session.kt b/lib/src/main/kotlin/org/walletconnect/Session.kt index f66a1b8..28745b3 100644 --- a/lib/src/main/kotlin/org/walletconnect/Session.kt +++ b/lib/src/main/kotlin/org/walletconnect/Session.kt @@ -32,7 +32,9 @@ interface Session { val key: String, val protocol: String = "wc", val version: Int = 1 - ) + ) { + fun toWCUri() = "wc:$handshakeTopic@$version?bridge=${URLEncoder.encode(bridge, "UTF-8")}&key=$key" + } data class Config( val handshakeTopic: String, diff --git a/sample/app/gradle.properties b/sample/app/gradle.properties new file mode 100644 index 0000000..d59b76e --- /dev/null +++ b/sample/app/gradle.properties @@ -0,0 +1,15 @@ +## For more details on how to configure your build environment visit +# http://www.gradle.org/docs/current/userguide/build_environment.html +# +# Specifies the JVM arguments used for the daemon process. +# The setting is particularly useful for tweaking memory settings. +# Default value: -Xmx1024m -XX:MaxPermSize=256m +# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# +# When configured, Gradle will run in incubating parallel mode. +# This option should only be used with decoupled projects. More details, visit +# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects +# org.gradle.parallel=true +#Fri May 21 10:30:53 SAST 2021 +android.enableJetifier=true +android.useAndroidX=true diff --git a/sample/app/src/main/AndroidManifest.xml b/sample/app/src/main/AndroidManifest.xml index f1cca81..a6f07c8 100644 --- a/sample/app/src/main/AndroidManifest.xml +++ b/sample/app/src/main/AndroidManifest.xml @@ -8,7 +8,8 @@ android:allowBackup="true" android:label="@string/app_name" android:supportsRtl="true" - android:name=".ExampleApplication"> + android:name=".ExampleApplication" + android:networkSecurityConfig="@xml/network_config"> diff --git a/sample/app/src/main/java/io/walletconnect/example/ExampleApplication.kt b/sample/app/src/main/java/io/walletconnect/example/ExampleApplication.kt index d2e8319..2e29037 100644 --- a/sample/app/src/main/java/io/walletconnect/example/ExampleApplication.kt +++ b/sample/app/src/main/java/io/walletconnect/example/ExampleApplication.kt @@ -43,13 +43,13 @@ class ExampleApplication : MultiDexApplication() { private lateinit var moshi: Moshi private lateinit var bridge: BridgeServer private lateinit var storage: WCSessionStore - lateinit var config: Session.Config + lateinit var config: Session.FullyQualifiedConfig lateinit var session: Session fun resetSession() { nullOnThrow { session }?.clearCallbacks() val key = ByteArray(32).also { Random().nextBytes(it) }.toNoPrefixHexString() - config = Session.Config(UUID.randomUUID().toString(), "http://localhost:${BridgeServer.PORT}", key) + config = Session.FullyQualifiedConfig(UUID.randomUUID().toString(), "http://localhost:${BridgeServer.PORT}", key) session = WCSession(config, MoshiPayloadAdapter(moshi), storage, diff --git a/sample/app/src/main/java/io/walletconnect/example/MainActivity.kt b/sample/app/src/main/java/io/walletconnect/example/MainActivity.kt index 7c373dd..c160cf1 100644 --- a/sample/app/src/main/java/io/walletconnect/example/MainActivity.kt +++ b/sample/app/src/main/java/io/walletconnect/example/MainActivity.kt @@ -22,7 +22,9 @@ class MainActivity : Activity(), Session.Callback { when(status) { Session.Status.Approved -> sessionApproved() Session.Status.Closed -> sessionClosed() - Session.Status.Connected, + Session.Status.Connected -> { + requestConnectionToWallet() + } Session.Status.Disconnected, is Session.Status.Error -> { // Do Stuff @@ -32,6 +34,19 @@ class MainActivity : Activity(), Session.Callback { override fun onMethodCall(call: Session.MethodCall) { } + + private fun requestConnectionToWallet() { + val i = Intent(Intent.ACTION_VIEW) + i.data = Uri.parse(ExampleApplication.config.toWCUri()) + startActivity(i) + } + + private fun navigateToWallet() { + val i = Intent(Intent.ACTION_VIEW) + i.data = Uri.parse("wc:") + startActivity(i) + } + private fun sessionApproved() { uiScope.launch { screen_main_status.text = "Connected: ${ExampleApplication.session.approvedAccounts()}" @@ -61,9 +76,6 @@ class MainActivity : Activity(), Session.Callback { screen_main_connect_button.setOnClickListener { ExampleApplication.resetSession() ExampleApplication.session.addCallback(this) - val i = Intent(Intent.ACTION_VIEW) - i.data = Uri.parse(ExampleApplication.config.toWCUri()) - startActivity(i) } screen_main_disconnect_button.setOnClickListener { ExampleApplication.session.kill() @@ -86,6 +98,7 @@ class MainActivity : Activity(), Session.Callback { ::handleResponse ) this.txRequest = txRequest + navigateToWallet() } } diff --git a/sample/app/src/main/java/io/walletconnect/example/server/BridgeServer.kt b/sample/app/src/main/java/io/walletconnect/example/server/BridgeServer.kt index 4c372fd..b6833cd 100644 --- a/sample/app/src/main/java/io/walletconnect/example/server/BridgeServer.kt +++ b/sample/app/src/main/java/io/walletconnect/example/server/BridgeServer.kt @@ -14,11 +14,11 @@ import java.util.concurrent.ConcurrentHashMap class BridgeServer(moshi: Moshi) : WebSocketServer(InetSocketAddress(PORT)) { - private val adapter = moshi.adapter>( + private val adapter = moshi.adapter>( Types.newParameterizedType( Map::class.java, String::class.java, - String::class.java + Any::class.java ) ) @@ -41,8 +41,8 @@ class BridgeServer(moshi: Moshi) : WebSocketServer(InetSocketAddress(PORT)) { conn ?: error("Unknown socket") message?.also { val msg = adapter.fromJson(it) ?: error("Invalid message") - val type: String = msg["type"] ?: error("Type not found") - val topic: String = msg["topic"] ?: error("Topic not found") + val type: String = msg["type"] as String? ?: error("Type not found") + val topic: String = msg["topic"] as String? ?: error("Topic not found") when (type) { "pub" -> { var sendMessage = false diff --git a/sample/app/src/main/res/xml/network_config.xml b/sample/app/src/main/res/xml/network_config.xml new file mode 100644 index 0000000..a8f0840 --- /dev/null +++ b/sample/app/src/main/res/xml/network_config.xml @@ -0,0 +1,8 @@ + + + + sslip.io + localhost + + + diff --git a/settings.gradle b/settings.gradle index aed61d3..066033c 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,2 +1,2 @@ -include ':lib' //, ':sample:app' +include ':lib', ':sample:app'