ManualDownloadSheet: Drop dependency upon kovenant

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-07-19 21:21:18 +05:30
parent 8ee0969914
commit 3e7fbd6c8d
2 changed files with 65 additions and 27 deletions

View File

@@ -19,32 +19,30 @@
*/ */
package com.aurora.store.view.ui.sheets package com.aurora.store.view.ui.sheets
import android.app.Dialog
import android.os.Bundle import android.os.Bundle
import android.view.LayoutInflater import android.view.LayoutInflater
import android.view.View import android.view.View
import android.view.ViewGroup import android.view.ViewGroup
import androidx.fragment.app.viewModels
import androidx.lifecycle.lifecycleScope
import com.aurora.Constants import com.aurora.Constants
import com.aurora.extensions.load import com.aurora.extensions.load
import com.aurora.extensions.toast import com.aurora.extensions.toast
import com.aurora.gplayapi.data.models.App import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.data.models.AuthData
import com.aurora.gplayapi.helpers.PurchaseHelper
import com.aurora.store.R import com.aurora.store.R
import com.aurora.store.data.event.BusEvent
import com.aurora.store.data.providers.AuthProvider
import com.aurora.store.databinding.SheetManualDownloadBinding import com.aurora.store.databinding.SheetManualDownloadBinding
import com.aurora.store.viewmodel.sheets.SheetsViewModel
import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.bumptech.glide.load.resource.bitmap.RoundedCorners
import nl.komponents.kovenant.task import kotlinx.coroutines.flow.collectLatest
import nl.komponents.kovenant.ui.failUi import kotlinx.coroutines.launch
import nl.komponents.kovenant.ui.successUi
import org.greenrobot.eventbus.EventBus
class ManualDownloadSheet : BaseBottomSheet() { class ManualDownloadSheet : BaseBottomSheet() {
private lateinit var B: SheetManualDownloadBinding private lateinit var B: SheetManualDownloadBinding
private lateinit var app: App private lateinit var app: App
private lateinit var authData: AuthData
private lateinit var purchaseHelper: PurchaseHelper private val viewModel: SheetsViewModel by viewModels()
companion object { companion object {
@@ -68,8 +66,6 @@ class ManualDownloadSheet : BaseBottomSheet() {
savedInstanceState: Bundle? savedInstanceState: Bundle?
): View { ): View {
B = SheetManualDownloadBinding.inflate(inflater) B = SheetManualDownloadBinding.inflate(inflater)
authData = AuthProvider.with(requireContext()).getAuthData()
purchaseHelper = PurchaseHelper(authData)
return B.root return B.root
} }
@@ -88,6 +84,20 @@ class ManualDownloadSheet : BaseBottomSheet() {
} }
} }
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
this.lifecycleScope.launch {
viewModel.purchaseStatus.collectLatest {
if (it) {
toast(R.string.toast_manual_available)
dismissAllowingStateLoss()
} else {
toast(R.string.toast_manual_unavailable)
}
}
}
return super.onCreateDialog(savedInstanceState)
}
private fun inflateData() { private fun inflateData() {
B.imgIcon.load(app.iconArtwork.url) { B.imgIcon.load(app.iconArtwork.url) {
placeholder(R.drawable.bg_placeholder) placeholder(R.drawable.bg_placeholder)
@@ -108,21 +118,7 @@ class ManualDownloadSheet : BaseBottomSheet() {
if (customVersionString.isEmpty()) if (customVersionString.isEmpty())
B.versionCodeInp.error = "Enter version code" B.versionCodeInp.error = "Enter version code"
else { else {
val customVersion = customVersionString.toInt() viewModel.purchase(requireContext(), app, customVersionString.toInt())
task {
purchaseHelper.purchase(app.packageName, customVersion, app.offerType)
} successUi {
if (it.isNotEmpty()) {
toast(R.string.toast_manual_available)
EventBus.getDefault().post(BusEvent.ManualDownload(app.packageName, customVersion))
dismissAllowingStateLoss()
} else {
toast(R.string.toast_manual_unavailable)
}
} failUi {
toast(R.string.toast_manual_unavailable)
}
} }
} }

View File

@@ -0,0 +1,42 @@
package com.aurora.store.viewmodel.sheets
import android.content.Context
import android.util.Log
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.aurora.gplayapi.data.models.App
import com.aurora.gplayapi.helpers.PurchaseHelper
import com.aurora.store.data.event.BusEvent
import com.aurora.store.data.providers.AuthProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableSharedFlow
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asSharedFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.launch
import org.greenrobot.eventbus.EventBus
class SheetsViewModel : ViewModel() {
private val TAG = SheetsViewModel::class.java.simpleName
private val _purchaseStatus = MutableSharedFlow<Boolean>()
val purchaseStatus = _purchaseStatus.asSharedFlow()
fun purchase(context: Context, app: App, customVersion: Int) {
viewModelScope.launch(Dispatchers.IO) {
try {
val purchaseHelper = PurchaseHelper(AuthProvider.with(context).getAuthData())
val files = purchaseHelper.purchase(app.packageName, customVersion, app.offerType)
if (files.isNotEmpty()) {
EventBus.getDefault()
.post(BusEvent.ManualDownload(app.packageName, customVersion))
}
_purchaseStatus.emit(files.isNotEmpty())
} catch (exception: Exception) {
_purchaseStatus.emit(false)
Log.e(TAG, "Failed to find version: $customVersion", exception)
}
}
}
}