diff --git a/mobile/build.gradle.kts b/mobile/build.gradle.kts index e4d8c7fb..99a90670 100644 --- a/mobile/build.gradle.kts +++ b/mobile/build.gradle.kts @@ -67,7 +67,7 @@ android { androidExtensions.isExperimental = true dependencies { - val lifecycleVersion = "2.2.0" + val lifecycleVersion = "2.3.0-alpha03" val roomVersion = "2.2.5" coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:1.0.5") @@ -76,7 +76,7 @@ dependencies { implementation("androidx.browser:browser:1.2.0") implementation("androidx.core:core-ktx:1.3.0-rc01") implementation("androidx.emoji:emoji:1.1.0-rc01") - implementation("androidx.fragment:fragment-ktx:1.2.4") + implementation("androidx.fragment:fragment-ktx:1.3.0-alpha05") implementation("androidx.lifecycle:lifecycle-common-java8:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-livedata-ktx:$lifecycleVersion") implementation("androidx.lifecycle:lifecycle-runtime-ktx:$lifecycleVersion") diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt index 0767c197..c2b9615a 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/EBegFragment.kt @@ -83,7 +83,7 @@ class EBegFragment : AppCompatDialogFragment() { override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) dialog!!.setTitle(R.string.settings_misc_donate) - lifecycleScope.launchWhenCreated { + viewLifecycleOwner.lifecycleScope.launchWhenCreated { billingClient.querySkuDetails(SkuDetailsParams.newBuilder().apply { setSkusList(listOf("donate001", "donate002", "donate005", "donate010", "donate020", "donate050", "donate100", "donate200", "donatemax")) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt b/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt index 2763efdc..ffad0025 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/MainActivity.kt @@ -40,7 +40,7 @@ class MainActivity : AppCompatActivity(), BottomNavigationView.OnNavigationItemS number = count } else binding.navigation.removeBadge(R.id.navigation_clients) } - SmartSnackbar.Register(lifecycle, binding.fragmentHolder) + SmartSnackbar.Register(binding.fragmentHolder) WifiDoubleLock.ActivityListener(this) } diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientsFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientsFragment.kt index 24f44575..0058e4b3 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientsFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/client/ClientsFragment.kt @@ -18,6 +18,7 @@ import androidx.core.os.BuildCompat import androidx.databinding.BaseObservable import androidx.fragment.app.Fragment import androidx.fragment.app.activityViewModels +import androidx.lifecycle.findViewTreeLifecycleOwner import androidx.lifecycle.lifecycleScope import androidx.lifecycle.observe import androidx.recyclerview.widget.DefaultItemAnimator @@ -110,7 +111,7 @@ class ClientsFragment : Fragment() { private inner class ClientViewHolder(val binding: ListitemClientBinding) : RecyclerView.ViewHolder(binding.root), View.OnClickListener, PopupMenu.OnMenuItemClickListener { init { - binding.lifecycleOwner = this@ClientsFragment + binding.lifecycleOwner = binding.root.findViewTreeLifecycleOwner() binding.root.setOnClickListener(this) binding.description.movementMethod = LinkMovementMethod.getInstance() } @@ -149,7 +150,7 @@ class ClientsFragment : Fragment() { } R.id.stats -> { binding.client?.let { client -> - lifecycleScope.launchWhenCreated { + viewLifecycleOwner.lifecycleScope.launchWhenCreated { withContext(Dispatchers.Unconfined) { StatsDialogFragment().withArg(StatsArg( client.title.value ?: return@withContext, diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt index e2b17360..9ac50029 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetherManager.kt @@ -140,7 +140,7 @@ sealed class TetherManager(protected val parent: TetheringFragment) : Manager(), private val tethering = BluetoothTethering(parent.requireContext()) { onTetheringStarted() } init { - parent.lifecycle.addObserver(this) + parent.viewLifecycleOwner.lifecycle.addObserver(this) } override fun onDestroy(owner: LifecycleOwner) = tethering.close() diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt index 16585a06..58c0e876 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/manage/TetheringFragment.kt @@ -161,7 +161,7 @@ class TetheringFragment : Fragment(), ServiceConnection, Toolbar.OnMenuItemClick true } R.id.configuration_repeater -> { - lifecycleScope.launchWhenCreated { + viewLifecycleOwner.lifecycleScope.launchWhenCreated { adapter.repeaterManager.getConfiguration()?.let { config -> WifiApDialogFragment().withArg(WifiApDialogFragment.Arg(config, p2pMode = true)).show( this@TetheringFragment, CONFIGURE_REPEATER) diff --git a/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt b/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt index bf875ec5..9e7e9487 100644 --- a/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt +++ b/mobile/src/main/java/be/mygod/vpnhotspot/widget/SmartSnackbar.kt @@ -6,8 +6,8 @@ import android.view.View import android.widget.Toast import androidx.annotation.StringRes import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.Lifecycle import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.findViewTreeLifecycleOwner import be.mygod.vpnhotspot.App.Companion.app import be.mygod.vpnhotspot.util.readableMessage import com.google.android.material.snackbar.Snackbar @@ -32,9 +32,9 @@ sealed class SmartSnackbar { }.readableMessage) } - class Register(lifecycle: Lifecycle, private val view: View) : DefaultLifecycleObserver { + class Register(private val view: View) : DefaultLifecycleObserver { init { - lifecycle.addObserver(this) + view.findViewTreeLifecycleOwner()!!.lifecycle.addObserver(this) } override fun onResume(owner: LifecycleOwner) {