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

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

View File

@@ -95,7 +95,6 @@
</activity>
<activity android:name=".view.ui.account.GoogleActivity" />
<activity android:name=".view.ui.details.DetailsExodusActivity" />
<service android:name=".data.service.NotificationService" />
<service android:name=".data.installer.InstallerService" />

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()

View File

@@ -117,6 +117,9 @@
<action
android:id="@+id/action_appDetailsFragment_to_detailsReviewFragment"
app:destination="@id/detailsReviewFragment" />
<action
android:id="@+id/action_appDetailsFragment_to_detailsExodusFragment"
app:destination="@id/detailsExodusFragment" />
</fragment>
<fragment
android:id="@+id/categoryBrowseFragment"
@@ -199,7 +202,6 @@
<fragment
android:id="@+id/detailsMoreFragment"
android:name="com.aurora.store.view.ui.details.DetailsMoreFragment"
android:label="fragment_details_more"
tools:layout="@layout/fragment_details_more" >
<argument
android:name="app"
@@ -215,6 +217,14 @@
<argument android:name="packageName"
app:argType="string" />
</fragment>
<fragment
android:id="@+id/detailsExodusFragment"
android:name="com.aurora.store.view.ui.details.DetailsExodusFragment"
tools:layout="@layout/activity_generic_recycler" >
<argument
android:name="report"
app:argType="com.aurora.store.data.model.Report" />
</fragment>
<action
android:id="@+id/action_global_appDetailsFragment"
app:destination="@id/appDetailsFragment" />

View File

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