From 1a454a0bc987b3530f64bccf28d70fa6f123cbb3 Mon Sep 17 00:00:00 2001 From: Rahul Kumar Patel Date: Tue, 6 Apr 2021 03:26:05 +0530 Subject: [PATCH] Add back manual downloader from v3 --- .../com/aurora/store/data/event/BusEvent.kt | 5 + .../java/com/aurora/store/util/PackageUtil.kt | 2 +- .../view/ui/details/AppDetailsActivity.kt | 17 ++- .../view/ui/sheets/ManualDownloadSheet.kt | 132 +++++++++++++++++ .../main/res/layout/sheet_manual_download.xml | 134 ++++++++++++++++++ app/src/main/res/menu/menu_details.xml | 4 + app/src/main/res/values/strings.xml | 4 + 7 files changed, 295 insertions(+), 3 deletions(-) create mode 100644 app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt create mode 100644 app/src/main/res/layout/sheet_manual_download.xml diff --git a/app/src/main/java/com/aurora/store/data/event/BusEvent.kt b/app/src/main/java/com/aurora/store/data/event/BusEvent.kt index 664cff69e..ab38a9a9b 100644 --- a/app/src/main/java/com/aurora/store/data/event/BusEvent.kt +++ b/app/src/main/java/com/aurora/store/data/event/BusEvent.kt @@ -40,6 +40,11 @@ sealed class BusEvent { var email: String = String(), var aasToken: String = String() ) : BusEvent() + + data class ManualDownload( + var packageName: String, + var versionCode: Int + ) : BusEvent() } sealed class InstallerEvent { diff --git a/app/src/main/java/com/aurora/store/util/PackageUtil.kt b/app/src/main/java/com/aurora/store/util/PackageUtil.kt index 533df3634..baccc83b5 100644 --- a/app/src/main/java/com/aurora/store/util/PackageUtil.kt +++ b/app/src/main/java/com/aurora/store/util/PackageUtil.kt @@ -67,7 +67,7 @@ object PackageUtil { return try { val packageInfo = getPackageInfo(context, packageName) if (packageInfo != null) { - "${packageInfo.versionName}.${packageInfo.versionCode}" + "${packageInfo.versionName} (${packageInfo.versionCode})" } else { "" } diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt index f9d2752cb..24b546d93 100644 --- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsActivity.kt @@ -50,6 +50,7 @@ import com.aurora.store.databinding.ActivityDetailsBinding import com.aurora.store.util.* import com.aurora.store.view.ui.downloads.DownloadActivity import com.aurora.store.view.ui.sheets.InstallErrorDialogSheet +import com.aurora.store.view.ui.sheets.ManualDownloadSheet import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback @@ -116,6 +117,12 @@ class AppDetailsActivity : BaseDetailsActivity() { attachActions() } } + is BusEvent.ManualDownload -> { + if (app.packageName == event.packageName) { + app.versionCode = event.versionCode + purchase() + } + } is InstallerEvent.Failed -> { if (app.packageName == event.packageName) { InstallErrorDialogSheet.newInstance( @@ -206,6 +213,12 @@ class AppDetailsActivity : BaseDetailsActivity() { uninstallApp() return true } + R.id.menu_download_manual -> { + val sheet = ManualDownloadSheet.newInstance(app) + sheet.isCancelable = false + sheet.show(supportFragmentManager, ManualDownloadSheet.TAG) + return true + } R.id.menu_download_manager -> { open(DownloadActivity::class.java) return true @@ -327,7 +340,7 @@ class AppDetailsActivity : BaseDetailsActivity() { app ) } - txtLine3.text = ("v${app.versionName}.${app.versionCode}") + txtLine3.text = ("${app.versionName} (${app.versionCode})") val tags = mutableListOf() if (app.isFree) @@ -546,7 +559,7 @@ class AppDetailsActivity : BaseDetailsActivity() { if (isUpdatable) { B.layoutDetailsApp.txtLine3.text = - ("$installedVersion > ${app.versionName}.${app.versionCode}") + ("$installedVersion > ${app.versionName} (${app.versionCode})") btn.setText(R.string.action_update) btn.addOnClickListener { startDownload() } } else { diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt new file mode 100644 index 000000000..59cf729dd --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/ManualDownloadSheet.kt @@ -0,0 +1,132 @@ +/* + * Aurora Store + * Copyright (C) 2019, Rahul Kumar Patel + * + * Aurora Store is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 2 of the License, or + * (at your option) any later version. + * + * Aurora Store is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with Aurora Store. If not, see . + * + * + */ +package com.aurora.store.view.ui.sheets + +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.aurora.Constants +import com.aurora.extensions.load +import com.aurora.extensions.toast +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.data.event.BusEvent +import com.aurora.store.data.providers.AuthProvider +import com.aurora.store.databinding.SheetManualDownloadBinding +import com.bumptech.glide.load.resource.bitmap.RoundedCorners +import nl.komponents.kovenant.task +import nl.komponents.kovenant.ui.failUi +import nl.komponents.kovenant.ui.successUi +import org.greenrobot.eventbus.EventBus + +class ManualDownloadSheet : BaseBottomSheet() { + + private lateinit var B: SheetManualDownloadBinding + private lateinit var app: App + private lateinit var authData: AuthData + private lateinit var purchaseHelper: PurchaseHelper + + companion object { + + const val TAG = "ManualDownloadSheet" + + @JvmStatic + fun newInstance( + app: App + ): ManualDownloadSheet { + return ManualDownloadSheet().apply { + arguments = Bundle().apply { + putString(Constants.STRING_APP, gson.toJson(app)) + } + } + } + } + + override fun onCreateContentView( + inflater: LayoutInflater, + container: ViewGroup, + savedInstanceState: Bundle? + ): View { + B = SheetManualDownloadBinding.inflate(inflater) + authData = AuthProvider.with(requireContext()).getAuthData() + purchaseHelper = PurchaseHelper(authData) + return B.root + } + + override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val bundle = arguments + bundle?.let { + val rawApp = bundle.getString(Constants.STRING_APP, "{}") + app = gson.fromJson(rawApp, App::class.java) + if (app.packageName.isNotEmpty()) { + inflateData() + attachActions() + } else { + dismissAllowingStateLoss() + } + } + } + + private fun inflateData() { + B.imgIcon.load(app.iconArtwork.url) { + placeholder(R.drawable.bg_placeholder) + transform(RoundedCorners(32)) + } + + B.txtLine1.text = app.displayName + B.txtLine2.text = app.packageName + B.txtLine3.text = ("${app.versionName} (${app.versionCode})") + + B.versionCodeLayout.hint = "${app.versionCode}" + } + + private fun attachActions() { + B.btnPrimary.setOnClickListener { + val customVersionString = (B.versionCodeInp.text).toString() + if (customVersionString.isEmpty()) + B.versionCodeInp.error = "Enter version code" + else { + val customVersion = 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) + } + } + } + + B.btnSecondary.setOnClickListener { + dismissAllowingStateLoss() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_manual_download.xml b/app/src/main/res/layout/sheet_manual_download.xml new file mode 100644 index 000000000..b71ff18fb --- /dev/null +++ b/app/src/main/res/layout/sheet_manual_download.xml @@ -0,0 +1,134 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/menu_details.xml b/app/src/main/res/menu/menu_details.xml index 1c40d93fb..f28b16f57 100644 --- a/app/src/main/res/menu/menu_details.xml +++ b/app/src/main/res/menu/menu_details.xml @@ -28,6 +28,10 @@ android:id="@+id/action_uninstall" android:title="@string/action_uninstall" /> + + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index a60d7debc..e73e5e1af 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -52,6 +52,7 @@ "Add to Blacklist" "Buy" "Cancel" + "Check" "Clear" "Clear all" "Clear data" @@ -341,6 +342,7 @@ "Settings" "Spoof manager" "Updates" + "Manual download" "Old installation sessions abandoned" "Not available on anonymous accounts" "Blacklisted" @@ -352,4 +354,6 @@ "Permission granted" "Device spoof applied successfully." "App purchases not available on Anonymous accounts." + "The version code you are requesting is unavailable." + "Congrats, requested version code is available, downloading now." \ No newline at end of file