diff --git a/app/src/main/java/com/aurora/store/MainActivity.kt b/app/src/main/java/com/aurora/store/MainActivity.kt index 7a598a997..cfdb2a0f2 100644 --- a/app/src/main/java/com/aurora/store/MainActivity.kt +++ b/app/src/main/java/com/aurora/store/MainActivity.kt @@ -45,7 +45,6 @@ import com.aurora.gplayapi.data.models.AuthData import com.aurora.store.data.model.SelfUpdate import com.aurora.store.data.network.HttpClient import com.aurora.store.data.providers.AuthProvider -import com.aurora.store.data.service.SelfUpdateService import com.aurora.store.databinding.ActivityMainBinding import com.aurora.store.util.CertUtil.isFDroidApp import com.aurora.store.util.Log @@ -59,6 +58,7 @@ import com.aurora.store.view.ui.downloads.DownloadActivity import com.aurora.store.view.ui.preferences.SettingsActivity import com.aurora.store.view.ui.sale.AppSalesActivity import com.aurora.store.view.ui.search.SearchSuggestionActivity +import com.aurora.store.view.ui.sheets.SelfUpdateSheet import com.aurora.store.view.ui.spoof.SpoofActivity import com.bumptech.glide.load.resource.bitmap.RoundedCorners import com.google.android.material.bottomnavigation.BottomNavigationView @@ -277,10 +277,10 @@ class MainActivity : BaseActivity() { if (it.versionCode > BuildConfig.VERSION_CODE) { if (isFDroidApp(this, BuildConfig.APPLICATION_ID)) { if (it.fdroidBuild.isNotEmpty()) { - showUpdatesDialog(it) + showUpdatesSheet(it) } } else if (it.auroraBuild.isNotEmpty()) { - showUpdatesDialog(it) + showUpdatesSheet(it) } else { Log.i(getString(R.string.details_no_updates)) } @@ -294,27 +294,11 @@ class MainActivity : BaseActivity() { } } - private fun showUpdatesDialog(selfUpdate: SelfUpdate) { - val messages: List = listOf( - selfUpdate.versionCode.toString(), - if (selfUpdate.changelog.isEmpty()) - getString(R.string.details_changelog_unavailable) - else - selfUpdate.changelog, - getString(R.string.dialog_desc_self_update) - ) - - showDialog( - getString(R.string.dialog_title_self_update), - messages.joinToString(separator = "\n"), - { _, _ -> - val intent = Intent(this, SelfUpdateService::class.java) - intent.putExtra(Constants.STRING_EXTRA, gson.toJson(selfUpdate)) - startService(intent) - }, - { dialog, _ -> - dialog.dismiss() - }, - ) + private fun showUpdatesSheet(selfUpdate: SelfUpdate) { + if (!supportFragmentManager.isDestroyed) { + val sheet = SelfUpdateSheet.newInstance(selfUpdate) + sheet.isCancelable = false + sheet.show(supportFragmentManager, SelfUpdateSheet.TAG) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/aurora/store/data/service/SelfUpdateService.kt b/app/src/main/java/com/aurora/store/data/service/SelfUpdateService.kt index 2b5f85654..6c714c88d 100644 --- a/app/src/main/java/com/aurora/store/data/service/SelfUpdateService.kt +++ b/app/src/main/java/com/aurora/store/data/service/SelfUpdateService.kt @@ -15,7 +15,7 @@ import com.aurora.store.BuildConfig import com.aurora.store.R import com.aurora.store.data.downloader.DownloadManager import com.aurora.store.data.downloader.RequestBuilder.buildRequest -import com.aurora.store.data.installer.AppInstaller +import com.aurora.store.data.installer.NativeInstaller import com.aurora.store.data.model.SelfUpdate import com.aurora.store.util.CertUtil.isFDroidApp import com.aurora.store.util.Log @@ -144,10 +144,15 @@ class SelfUpdateService : Service() { override fun onCompleted(groupId: Int, download: Download, fetchGroup: FetchGroup) { if (groupId == app.id && fetchGroup.groupDownloadProgress == 100) { Log.d("Calling installer ${app.displayName}") - AppInstaller(this@SelfUpdateService).getPreferredInstaller().install( - BuildConfig.APPLICATION_ID, - listOf(download.file) - ) + + try { + NativeInstaller(this@SelfUpdateService).install( + app.packageName, + fetchGroup.downloads.map { it.file } + ) + } catch (e: Exception) { + Log.e("Self update : ${e.stackTraceToString()}") + } task { TimeUnit.SECONDS.sleep(10) diff --git a/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadActivity.kt b/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadActivity.kt index 04a9c8f52..821fba747 100644 --- a/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadActivity.kt +++ b/app/src/main/java/com/aurora/store/view/ui/downloads/DownloadActivity.kt @@ -182,6 +182,7 @@ class DownloadActivity : BaseActivity() { fetch.getDownloads { downloads -> updateController( downloads + .filter { it.id == BuildConfig.APPLICATION_ID.hashCode() } .sortedWith { o1, o2 -> o2.created.compareTo(o1.created) } .map { DownloadFile(it) } ) diff --git a/app/src/main/java/com/aurora/store/view/ui/sheets/SelfUpdateSheet.kt b/app/src/main/java/com/aurora/store/view/ui/sheets/SelfUpdateSheet.kt new file mode 100644 index 000000000..ef1553b20 --- /dev/null +++ b/app/src/main/java/com/aurora/store/view/ui/sheets/SelfUpdateSheet.kt @@ -0,0 +1,101 @@ +/* + * 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.content.Intent +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.aurora.Constants +import com.aurora.store.R +import com.aurora.store.data.model.SelfUpdate +import com.aurora.store.data.service.SelfUpdateService +import com.aurora.store.databinding.SheetSelfUpdateBinding + +class SelfUpdateSheet : BaseBottomSheet() { + + private lateinit var B: SheetSelfUpdateBinding + private lateinit var selfUpdate: SelfUpdate + + companion object { + + const val TAG = "ManualDownloadSheet" + + @JvmStatic + fun newInstance( + selfUpdate: SelfUpdate + ): SelfUpdateSheet { + return SelfUpdateSheet().apply { + arguments = Bundle().apply { + putString(Constants.STRING_EXTRA, gson.toJson(selfUpdate)) + } + } + } + } + + override fun onCreateContentView( + inflater: LayoutInflater, + container: ViewGroup, + savedInstanceState: Bundle? + ): View { + B = SheetSelfUpdateBinding.inflate(inflater) + return B.root + } + + override fun onContentViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val bundle = arguments + bundle?.let { + val rawUpdate = bundle.getString(Constants.STRING_EXTRA, "{}") + selfUpdate = gson.fromJson(rawUpdate, SelfUpdate::class.java) + if (selfUpdate.versionName.isNotEmpty()) { + inflateData() + attachActions() + } else { + dismissAllowingStateLoss() + } + } + } + + private fun inflateData() { + B.txtLine2.text = ("${selfUpdate.versionName} (${selfUpdate.versionCode})") + + val messages: String = if (selfUpdate.changelog.isEmpty()) + getString(R.string.details_changelog_unavailable) + else + selfUpdate.changelog + + B.txtChangelog.text = messages.trim() + } + + private fun attachActions() { + B.btnPrimary.setOnClickListener { + val intent = Intent(requireContext(), SelfUpdateService::class.java) + intent.putExtra(Constants.STRING_EXTRA, gson.toJson(selfUpdate)) + requireContext().startService(intent) + dismissAllowingStateLoss() + } + + B.btnSecondary.setOnClickListener { + dismissAllowingStateLoss() + } + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/sheet_self_update.xml b/app/src/main/res/layout/sheet_self_update.xml new file mode 100644 index 000000000..8bbdc9229 --- /dev/null +++ b/app/src/main/res/layout/sheet_self_update.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file