From e65b35f014f9314bfce553cde3ff74115983cd96 Mon Sep 17 00:00:00 2001 From: Aayush Gupta Date: Thu, 6 Jul 2023 10:32:29 +0530 Subject: [PATCH] Migrate DetailsExodusActivity to fragment Signed-off-by: Aayush Gupta --- app/build.gradle | 1 + app/src/main/AndroidManifest.xml | 1 - .../com/aurora/store/data/model/Exodus.kt | 45 +++++++----- .../com/aurora/store/util/NavigationUtil.kt | 48 ------------ .../view/ui/details/AppDetailsFragment.kt | 7 +- ...usActivity.kt => DetailsExodusFragment.kt} | 73 +++++++------------ .../main/res/navigation/mobile_navigation.xml | 12 ++- build.gradle | 1 + 8 files changed, 69 insertions(+), 119 deletions(-) delete mode 100644 app/src/main/java/com/aurora/store/util/NavigationUtil.kt rename app/src/main/java/com/aurora/store/view/ui/details/{DetailsExodusActivity.kt => DetailsExodusFragment.kt} (65%) 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