diff --git a/build.gradle.kts b/build.gradle.kts index 657363fe..9a4b13e0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,9 +9,9 @@ buildscript { } dependencies { - classpath(kotlin("gradle-plugin", "1.5.10")) - classpath("com.android.tools.build:gradle:7.0.0-beta03") - classpath("com.google.firebase:firebase-crashlytics-gradle:2.7.0") + classpath(kotlin("gradle-plugin", "1.5.20")) + classpath("com.android.tools.build:gradle:7.0.0-beta05") + classpath("com.google.firebase:firebase-crashlytics-gradle:2.7.1") classpath("com.google.android.gms:oss-licenses-plugin:0.10.4") classpath("com.google.gms:google-services:4.3.8") } diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e708b1c0..7454180f 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 0f80bbf5..05679dc3 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.1.1-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 4f906e0c..744e882e 100755 --- a/gradlew +++ b/gradlew @@ -72,7 +72,7 @@ case "`uname`" in Darwin* ) darwin=true ;; - MINGW* ) + MSYS* | MINGW* ) msys=true ;; NONSTOP* ) diff --git a/mobile/build.gradle.kts b/mobile/build.gradle.kts index 14fdaf88..836bce8e 100644 --- a/mobile/build.gradle.kts +++ b/mobile/build.gradle.kts @@ -72,9 +72,9 @@ dependencies { implementation(kotlin("stdlib-jdk8")) implementation("androidx.appcompat:appcompat:1.3.0") // https://issuetracker.google.com/issues/151603528 implementation("androidx.browser:browser:1.3.0") - implementation("androidx.core:core-ktx:1.6.0-beta02") + implementation("androidx.core:core-ktx:1.6.0") implementation("androidx.emoji:emoji:1.1.0") - implementation("androidx.fragment:fragment-ktx:1.3.4") + implementation("androidx.fragment:fragment-ktx:1.3.5") implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") @@ -83,18 +83,18 @@ dependencies { implementation("androidx.swiperefreshlayout:swiperefreshlayout:1.1.0") implementation("com.android.billingclient:billing-ktx:4.0.0") implementation("com.google.android.gms:play-services-oss-licenses:17.0.0") - implementation("com.google.android.material:material:1.4.0-rc01") + implementation("com.google.android.material:material:1.4.0") implementation("com.google.firebase:firebase-analytics-ktx:19.0.0") - implementation("com.google.firebase:firebase-crashlytics:18.0.1") + implementation("com.google.firebase:firebase-crashlytics:18.1.0") implementation("com.google.zxing:core:3.4.1") implementation("com.jakewharton.timber:timber:4.7.1") implementation("com.linkedin.dexmaker:dexmaker:2.28.1") implementation("com.takisoft.preferencex:preferencex-simplemenu:1.1.0") implementation("org.jetbrains.kotlinx:kotlinx-collections-immutable:0.3.4") - implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.0") + implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.5.1") testImplementation("junit:junit:4.13.2") androidTestImplementation("androidx.room:room-testing:$roomVersion") - androidTestImplementation("androidx.test:runner:1.3.0") - androidTestImplementation("androidx.test.espresso:espresso-core:3.3.0") - androidTestImplementation("androidx.test.ext:junit-ktx:1.1.2") + androidTestImplementation("androidx.test:runner:1.4.0") + androidTestImplementation("androidx.test.espresso:espresso-core:3.4.0") + androidTestImplementation("androidx.test.ext:junit-ktx:1.1.3") } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt index e7f03c16..bf2950bb 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/RepeaterService.kt @@ -479,17 +479,19 @@ class RepeaterService : Service(), CoroutineScope, WifiP2pManager.ChannelListene private fun showNotification(group: WifiP2pGroup? = null) = ServiceNotification.startForeground(this, if (group == null) emptyMap() else mapOf(Pair(group.`interface`, group.clientList?.size ?: 0))) - private fun removeGroup() = p2pManager.removeGroup(channel, object : WifiP2pManager.ActionListener { - override fun onSuccess() { - launch { cleanLocked() } - } - override fun onFailure(reason: Int) { - if (reason != WifiP2pManager.BUSY) { - SmartSnackbar.make(formatReason(R.string.repeater_remove_group_failure, reason)).show() - } // else assuming it's already gone - onSuccess() - } - }) + private fun removeGroup() { + p2pManager.removeGroup(channel ?: return, object : WifiP2pManager.ActionListener { + override fun onSuccess() { + launch { cleanLocked() } + } + override fun onFailure(reason: Int) { + if (reason != WifiP2pManager.BUSY) { + SmartSnackbar.make(formatReason(R.string.repeater_remove_group_failure, reason)).show() + } // else assuming it's already gone + onSuccess() + } + }) + } private fun cleanLocked() { if (receiverRegistered) { ensureReceiverUnregistered(receiver) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt index 02db97d3..db3bf1b7 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/net/wifi/WifiApDialogFragment.kt @@ -389,7 +389,7 @@ class WifiApDialogFragment : AlertDialogFragment, proxy: Any, method: Method, args: Array?) = when { - Build.VERSION.SDK_INT >= 26 && method.isDefault -> newLookup.newInstance(interfaceClass, 0xf) // ALL_MODES - .`in`(interfaceClass).unreflectSpecial(method, interfaceClass).bindTo(proxy).run { - if (args == null) invokeWithArguments() else invokeWithArguments(*args) - } + Build.VERSION.SDK_INT >= 26 && method.isDefault -> try { + newLookup.newInstance(interfaceClass, 0xf) // ALL_MODES + } catch (e: ReflectiveOperationException) { + Timber.w(e) + MethodHandles.lookup().`in`(interfaceClass) + }.unreflectSpecial(method, interfaceClass).bindTo(proxy).run { + if (args == null) invokeWithArguments() else invokeWithArguments(*args) + } // otherwise, we just redispatch it to InvocationHandler method.declaringClass.isAssignableFrom(javaClass) -> when { method.declaringClass == Object::class.java -> when (method.name) {