Add back manual downloader from v3

This commit is contained in:
Rahul Kumar Patel
2021-04-06 03:26:05 +05:30
parent 9aa03ebec2
commit 1a454a0bc9
7 changed files with 295 additions and 3 deletions

View File

@@ -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 {

View File

@@ -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 {
""
}

View File

@@ -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<String>()
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 {

View File

@@ -0,0 +1,132 @@
/*
* Aurora Store
* Copyright (C) 2019, Rahul Kumar Patel <whyorean@gmail.com>
*
* 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 <http://www.gnu.org/licenses/>.
*
*
*/
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()
}
}
}

View File

@@ -0,0 +1,134 @@
<?xml version="1.0" encoding="utf-8"?><!--
~ Aurora Store
~ Copyright (C) 2021, Rahul Kumar Patel <whyorean@gmail.com>
~
~ 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 <http://www.gnu.org/licenses/>.
~
-->
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:divider="@drawable/divider"
android:orientation="vertical"
android:padding="@dimen/padding_large"
android:showDividers="middle">
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/img_icon"
android:layout_width="@dimen/icon_size_category"
android:layout_height="@dimen/icon_size_category"
android:layout_centerVertical="true"
tools:src="@drawable/bg_circle" />
<TextView
android:id="@+id/txt_header"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginStart="@dimen/margin_normal"
android:layout_marginBottom="@dimen/margin_normal"
android:layout_toEndOf="@id/img_icon"
android:maxLines="1"
android:text="@string/title_manual_download"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.Aurora.SubTitle" />
</RelativeLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
<TextView
android:id="@+id/txt_line1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:maxLines="2"
android:textAppearance="@style/TextAppearance.Aurora.Line1"
tools:text="App Name" />
<TextView
android:id="@+id/txt_line2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt_line1"
android:layout_alignStart="@id/txt_line1"
android:layout_alignEnd="@id/txt_line1"
android:textAppearance="@style/TextAppearance.Aurora.Line2"
android:textColor="?colorAccent"
tools:text="Package Name" />
<TextView
android:id="@+id/txt_line3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_below="@id/txt_line2"
android:layout_alignStart="@id/txt_line1"
android:layout_alignEnd="@id/txt_line1"
android:textAlignment="viewStart"
android:textAppearance="@style/TextAppearance.Aurora.Line3"
tools:text="Base version" />
</RelativeLayout>
<com.google.android.material.textfield.TextInputLayout
android:id="@+id/version_code_layout"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:helperText="Enter version code you wish to download">
<com.google.android.material.textfield.TextInputEditText
android:id="@+id/version_code_inp"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:imeOptions="actionDone"
android:inputType="number" />
</com.google.android.material.textfield.TextInputLayout>
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_secondary"
style="@style/Widget.MaterialComponents.Button.TextButton.Dialog.Flush"
android:layout_width="0dp"
android:layout_height="@dimen/height_button"
android:layout_weight="1"
android:text="@string/action_cancel" />
<com.google.android.material.button.MaterialButton
android:id="@+id/btn_primary"
style="@style/Widget.MaterialComponents.Button.TextButton.Dialog.Flush"
android:layout_width="0dp"
android:layout_height="@dimen/height_button"
android:layout_weight="1"
android:text="@string/action_check" />
</LinearLayout>
</LinearLayout>

View File

@@ -28,6 +28,10 @@
android:id="@+id/action_uninstall"
android:title="@string/action_uninstall" />
<item
android:id="@+id/menu_download_manual"
android:title="@string/title_manual_download" />
<item
android:id="@+id/menu_download_manager"
android:title="@string/title_download_manager" />

View File

@@ -52,6 +52,7 @@
<string name="action_blacklist_add">"Add to Blacklist"</string>
<string name="action_buy">"Buy"</string>
<string name="action_cancel">"Cancel"</string>
<string name="action_check">"Check"</string>
<string name="action_clear">"Clear"</string>
<string name="action_clear_all">"Clear all"</string>
<string name="action_clear_restart">"Clear data"</string>
@@ -341,6 +342,7 @@
<string name="title_settings">"Settings"</string>
<string name="title_spoof_manager">"Spoof manager"</string>
<string name="title_updates">"Updates"</string>
<string name="title_manual_download">"Manual download"</string>
<string name="toast_abandon_sessions">"Old installation sessions abandoned"</string>
<string name="toast_anonymous_restriction">"Not available on anonymous accounts"</string>
<string name="toast_apk_blacklisted">"Blacklisted"</string>
@@ -352,4 +354,6 @@
<string name="toast_permission_granted">"Permission granted"</string>
<string name="toast_spoof_applied">"Device spoof applied successfully."</string>
<string name="toast_purchase_blocked">"App purchases not available on Anonymous accounts."</string>
<string name="toast_manual_unavailable">"The version code you are requesting is unavailable."</string>
<string name="toast_manual_available">"Congrats, requested version code is available, downloading now."</string>
</resources>