Migrate DetailsExodusActivity to fragment

Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
Aayush Gupta
2023-07-06 10:32:29 +05:30
parent 7fab0496b9
commit e65b35f014
8 changed files with 69 additions and 119 deletions

View File

@@ -19,25 +19,29 @@
package com.aurora.store.data.model
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import java.text.DateFormat
import java.text.ParseException
import java.text.SimpleDateFormat
import java.util.*
class ExodusReport {
val creator: String = String()
val name: String = String()
data class ExodusReport(
val creator: String = String(),
val name: String = String(),
val reports: List<Report> = listOf()
}
)
class Report {
val id: Int = 0
val downloads: String = String()
val version: String = String()
val creationDate: String = String()
val updatedAt: String = String()
val versionCode: String = String()
@Parcelize
data class Report(
val id: Int = 0,
val downloads: String = String(),
val version: String = String(),
val creationDate: String = String(),
val updatedAt: String = String(),
val versionCode: String = String(),
val trackers: List<Int> = listOf()
) : Parcelable {
fun getFormattedCreationDate(): String {
return try {
@@ -52,16 +56,17 @@ class Report {
}
}
class ExodusTracker {
var id: Int = 0
var name: String = String()
var url: String = String()
var signature: String = String()
var date: String = String()
var description: String = String()
var networkSignature: String = String()
var documentation: List<String> = emptyList()
data class ExodusTracker(
var id: Int = 0,
var name: String = String(),
var url: String = String(),
var signature: String = String(),
var date: String = String(),
var description: String = String(),
var networkSignature: String = String(),
var documentation: List<String> = emptyList(),
var categories: List<String> = emptyList()
) {
override fun hashCode(): Int {
return id

View File

@@ -1,48 +0,0 @@
/*
* 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/>.
*
*/
package com.aurora.store.util
import android.app.ActivityOptions
import android.content.Context
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import com.aurora.Constants
import com.aurora.gplayapi.data.models.App
import com.aurora.store.data.model.Report
import com.aurora.store.view.ui.details.DetailsExodusActivity
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import java.lang.reflect.Modifier
object NavigationUtil {
val gson: Gson = GsonBuilder().excludeFieldsWithModifiers(Modifier.TRANSIENT).create()
fun openExodusActivity(context: Context, app: App, report: Report) {
val intent = Intent(
context,
DetailsExodusActivity::class.java
).apply {
putExtra(Constants.STRING_APP, gson.toJson(app))
putExtra(Constants.STRING_EXTRA, gson.toJson(report))
}
val options = ActivityOptions.makeSceneTransitionAnimation(context as AppCompatActivity)
context.startActivity(intent, options.toBundle())
}
}

View File

@@ -62,7 +62,6 @@ import com.aurora.gplayapi.data.models.StreamBundle
import com.aurora.gplayapi.data.models.StreamCluster
import com.aurora.gplayapi.helpers.AppDetailsHelper
import com.aurora.gplayapi.helpers.ReviewsHelper
import com.aurora.store.MainActivity
import com.aurora.store.R
import com.aurora.store.State
import com.aurora.store.data.ViewState
@@ -86,7 +85,6 @@ import com.aurora.store.databinding.LayoutDetailsPrivacyBinding
import com.aurora.store.databinding.LayoutDetailsReviewBinding
import com.aurora.store.util.CommonUtil
import com.aurora.store.util.Log
import com.aurora.store.util.NavigationUtil
import com.aurora.store.util.PackageUtil
import com.aurora.store.util.PathUtil
import com.aurora.store.util.Preferences
@@ -1036,7 +1034,10 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
}
B.headerPrivacy.addClickListener {
NavigationUtil.openExodusActivity(requireContext(), app, report)
findNavController().navigate(
AppDetailsFragmentDirections
.actionAppDetailsFragmentToDetailsExodusFragment(report)
)
}
} else {
B.txtStatus.apply {

View File

@@ -20,76 +20,57 @@
package com.aurora.store.view.ui.details
import android.os.Bundle
import android.view.View
import androidx.fragment.app.Fragment
import androidx.navigation.fragment.findNavController
import androidx.navigation.fragment.navArgs
import com.aurora.Constants
import com.aurora.gplayapi.data.models.App
import com.aurora.extensions.browse
import com.aurora.store.R
import com.aurora.store.data.model.ExodusTracker
import com.aurora.store.data.model.Report
import com.aurora.store.data.providers.ExodusDataProvider
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
import com.aurora.extensions.browse
import com.aurora.store.view.epoxy.views.HeaderViewModel_
import com.aurora.store.view.epoxy.views.details.ExodusViewModel_
import com.aurora.store.view.ui.commons.BaseActivity
import org.json.JSONObject
class DetailsExodusActivity : BaseActivity() {
class DetailsExodusFragment : Fragment(R.layout.activity_generic_recycler) {
private lateinit var B: ActivityGenericRecyclerBinding
private lateinit var app: App
private lateinit var report: Report
private var _binding: ActivityGenericRecyclerBinding? = null
private val binding: ActivityGenericRecyclerBinding
get() = _binding!!
override fun onConnected() {
private val args: DetailsExodusFragmentArgs by navArgs()
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
_binding = ActivityGenericRecyclerBinding.bind(view)
override fun onDisconnected() {
}
override fun onReconnected() {
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
B = ActivityGenericRecyclerBinding.inflate(layoutInflater)
setContentView(B.root)
val rawApp: String? = intent.getStringExtra(Constants.STRING_APP)
val rawExodusTrackers: String? = intent.getStringExtra(Constants.STRING_EXTRA)
if (rawApp != null) {
app = gson.fromJson(rawApp, App::class.java)
report = gson.fromJson(
rawExodusTrackers,
Report::class.java
)
app.let {
attachToolbar()
report.let {
updateController(getExodusTrackersFromReport(report))
}
// Toolbar
binding.layoutToolbarAction.apply {
txtTitle.text = ""
toolbar.setOnClickListener {
findNavController().navigateUp()
}
}
updateController(getExodusTrackersFromReport(args.report))
}
private fun attachToolbar() {
B.layoutToolbarAction.toolbar.setOnClickListener {
finishAfterTransition()
}
B.layoutToolbarAction.txtTitle.text = app.displayName
override fun onDestroyView() {
super.onDestroyView()
_binding = null
}
private fun updateController(reviews: List<ExodusTracker>) {
B.recycler.withModels {
binding.recycler.withModels {
add(
HeaderViewModel_()
.id("header")
.title(getString(R.string.exodus_view_report))
.browseUrl("browse")
.click { _ -> browse(Constants.EXODUS_REPORT_URL + report.id) }
.click { _ -> context?.browse(Constants.EXODUS_REPORT_URL + args.report.id) }
)
reviews.forEach {
add(
@@ -97,7 +78,7 @@ class DetailsExodusActivity : BaseActivity() {
.id(it.id)
.tracker(it)
.click { _ ->
browse(it.url)
context?.browse(it.url)
}
)
}
@@ -124,7 +105,7 @@ class DetailsExodusActivity : BaseActivity() {
private fun fetchLocalTrackers(trackerIds: List<Int>): List<JSONObject> {
return try {
ExodusDataProvider
.with(this)
.with(requireContext())
.getFilteredTrackers(trackerIds)
} catch (e: Exception) {
emptyList()