diff --git a/app/build.gradle b/app/build.gradle
index 11fe401eb..8236bf7a6 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -22,6 +22,7 @@
plugins {
id 'com.android.application'
id 'org.jetbrains.kotlin.android'
+ id 'org.jetbrains.kotlin.plugin.parcelize'
id 'org.jetbrains.kotlin.kapt'
id 'androidx.navigation.safeargs.kotlin'
id 'org.jlleitschuh.gradle.ktlint'
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4192be285..9a3a2d534 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -95,7 +95,6 @@
-
diff --git a/app/src/main/java/com/aurora/store/data/model/Exodus.kt b/app/src/main/java/com/aurora/store/data/model/Exodus.kt
index 7a3fa9dce..8f505a1d0 100644
--- a/app/src/main/java/com/aurora/store/data/model/Exodus.kt
+++ b/app/src/main/java/com/aurora/store/data/model/Exodus.kt
@@ -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 = 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 = 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 = 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 = emptyList(),
var categories: List = emptyList()
+) {
override fun hashCode(): Int {
return id
diff --git a/app/src/main/java/com/aurora/store/util/NavigationUtil.kt b/app/src/main/java/com/aurora/store/util/NavigationUtil.kt
deleted file mode 100644
index 7bb3ab7c9..000000000
--- a/app/src/main/java/com/aurora/store/util/NavigationUtil.kt
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Aurora Store
- * Copyright (C) 2021, 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.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())
- }
-}
diff --git a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt
index 693ec2117..53dcc3b06 100644
--- a/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt
+++ b/app/src/main/java/com/aurora/store/view/ui/details/AppDetailsFragment.kt
@@ -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 {
diff --git a/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusActivity.kt b/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusFragment.kt
similarity index 65%
rename from app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusActivity.kt
rename to app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusFragment.kt
index ecbe57d26..f13b2166e 100644
--- a/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusActivity.kt
+++ b/app/src/main/java/com/aurora/store/view/ui/details/DetailsExodusFragment.kt
@@ -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) {
- 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): List {
return try {
ExodusDataProvider
- .with(this)
+ .with(requireContext())
.getFilteredTrackers(trackerIds)
} catch (e: Exception) {
emptyList()
diff --git a/app/src/main/res/navigation/mobile_navigation.xml b/app/src/main/res/navigation/mobile_navigation.xml
index ae013fea9..a46e4c0a6 100644
--- a/app/src/main/res/navigation/mobile_navigation.xml
+++ b/app/src/main/res/navigation/mobile_navigation.xml
@@ -117,6 +117,9 @@
+
+
+
+
diff --git a/build.gradle b/build.gradle
index 1927df877..32243569e 100644
--- a/build.gradle
+++ b/build.gradle
@@ -22,6 +22,7 @@
plugins {
id 'com.android.application' version '8.0.2' apply false
id 'org.jetbrains.kotlin.android' version '1.8.21' apply false
+ id 'org.jetbrains.kotlin.plugin.parcelize' version '1.8.21' apply false
id 'androidx.navigation.safeargs.kotlin' version '2.6.0' apply false
id 'org.jlleitschuh.gradle.ktlint' version '11.4.0' apply false
id 'com.starter.easylauncher' version '6.2.0' apply false