Migrate DetailsExodusActivity to fragment
Signed-off-by: Aayush Gupta <aayushgupta219@gmail.com>
This commit is contained in:
@@ -22,6 +22,7 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application'
|
id 'com.android.application'
|
||||||
id 'org.jetbrains.kotlin.android'
|
id 'org.jetbrains.kotlin.android'
|
||||||
|
id 'org.jetbrains.kotlin.plugin.parcelize'
|
||||||
id 'org.jetbrains.kotlin.kapt'
|
id 'org.jetbrains.kotlin.kapt'
|
||||||
id 'androidx.navigation.safeargs.kotlin'
|
id 'androidx.navigation.safeargs.kotlin'
|
||||||
id 'org.jlleitschuh.gradle.ktlint'
|
id 'org.jlleitschuh.gradle.ktlint'
|
||||||
|
|||||||
@@ -95,7 +95,6 @@
|
|||||||
</activity>
|
</activity>
|
||||||
|
|
||||||
<activity android:name=".view.ui.account.GoogleActivity" />
|
<activity android:name=".view.ui.account.GoogleActivity" />
|
||||||
<activity android:name=".view.ui.details.DetailsExodusActivity" />
|
|
||||||
|
|
||||||
<service android:name=".data.service.NotificationService" />
|
<service android:name=".data.service.NotificationService" />
|
||||||
<service android:name=".data.installer.InstallerService" />
|
<service android:name=".data.installer.InstallerService" />
|
||||||
|
|||||||
@@ -19,25 +19,29 @@
|
|||||||
|
|
||||||
package com.aurora.store.data.model
|
package com.aurora.store.data.model
|
||||||
|
|
||||||
|
import android.os.Parcelable
|
||||||
|
import kotlinx.parcelize.Parcelize
|
||||||
import java.text.DateFormat
|
import java.text.DateFormat
|
||||||
import java.text.ParseException
|
import java.text.ParseException
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
|
||||||
class ExodusReport {
|
data class ExodusReport(
|
||||||
val creator: String = String()
|
val creator: String = String(),
|
||||||
val name: String = String()
|
val name: String = String(),
|
||||||
val reports: List<Report> = listOf()
|
val reports: List<Report> = listOf()
|
||||||
}
|
)
|
||||||
|
|
||||||
class Report {
|
@Parcelize
|
||||||
val id: Int = 0
|
data class Report(
|
||||||
val downloads: String = String()
|
val id: Int = 0,
|
||||||
val version: String = String()
|
val downloads: String = String(),
|
||||||
val creationDate: String = String()
|
val version: String = String(),
|
||||||
val updatedAt: String = String()
|
val creationDate: String = String(),
|
||||||
val versionCode: String = String()
|
val updatedAt: String = String(),
|
||||||
|
val versionCode: String = String(),
|
||||||
val trackers: List<Int> = listOf()
|
val trackers: List<Int> = listOf()
|
||||||
|
) : Parcelable {
|
||||||
|
|
||||||
fun getFormattedCreationDate(): String {
|
fun getFormattedCreationDate(): String {
|
||||||
return try {
|
return try {
|
||||||
@@ -52,16 +56,17 @@ class Report {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
class ExodusTracker {
|
data class ExodusTracker(
|
||||||
var id: Int = 0
|
var id: Int = 0,
|
||||||
var name: String = String()
|
var name: String = String(),
|
||||||
var url: String = String()
|
var url: String = String(),
|
||||||
var signature: String = String()
|
var signature: String = String(),
|
||||||
var date: String = String()
|
var date: String = String(),
|
||||||
var description: String = String()
|
var description: String = String(),
|
||||||
var networkSignature: String = String()
|
var networkSignature: String = String(),
|
||||||
var documentation: List<String> = emptyList()
|
var documentation: List<String> = emptyList(),
|
||||||
var categories: List<String> = emptyList()
|
var categories: List<String> = emptyList()
|
||||||
|
) {
|
||||||
|
|
||||||
override fun hashCode(): Int {
|
override fun hashCode(): Int {
|
||||||
return id
|
return id
|
||||||
|
|||||||
@@ -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())
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -62,7 +62,6 @@ import com.aurora.gplayapi.data.models.StreamBundle
|
|||||||
import com.aurora.gplayapi.data.models.StreamCluster
|
import com.aurora.gplayapi.data.models.StreamCluster
|
||||||
import com.aurora.gplayapi.helpers.AppDetailsHelper
|
import com.aurora.gplayapi.helpers.AppDetailsHelper
|
||||||
import com.aurora.gplayapi.helpers.ReviewsHelper
|
import com.aurora.gplayapi.helpers.ReviewsHelper
|
||||||
import com.aurora.store.MainActivity
|
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.State
|
import com.aurora.store.State
|
||||||
import com.aurora.store.data.ViewState
|
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.databinding.LayoutDetailsReviewBinding
|
||||||
import com.aurora.store.util.CommonUtil
|
import com.aurora.store.util.CommonUtil
|
||||||
import com.aurora.store.util.Log
|
import com.aurora.store.util.Log
|
||||||
import com.aurora.store.util.NavigationUtil
|
|
||||||
import com.aurora.store.util.PackageUtil
|
import com.aurora.store.util.PackageUtil
|
||||||
import com.aurora.store.util.PathUtil
|
import com.aurora.store.util.PathUtil
|
||||||
import com.aurora.store.util.Preferences
|
import com.aurora.store.util.Preferences
|
||||||
@@ -1036,7 +1034,10 @@ class AppDetailsFragment : BaseFragment(R.layout.fragment_details) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
B.headerPrivacy.addClickListener {
|
B.headerPrivacy.addClickListener {
|
||||||
NavigationUtil.openExodusActivity(requireContext(), app, report)
|
findNavController().navigate(
|
||||||
|
AppDetailsFragmentDirections
|
||||||
|
.actionAppDetailsFragmentToDetailsExodusFragment(report)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
B.txtStatus.apply {
|
B.txtStatus.apply {
|
||||||
|
|||||||
@@ -20,76 +20,57 @@
|
|||||||
package com.aurora.store.view.ui.details
|
package com.aurora.store.view.ui.details
|
||||||
|
|
||||||
import android.os.Bundle
|
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.Constants
|
||||||
import com.aurora.gplayapi.data.models.App
|
import com.aurora.extensions.browse
|
||||||
import com.aurora.store.R
|
import com.aurora.store.R
|
||||||
import com.aurora.store.data.model.ExodusTracker
|
import com.aurora.store.data.model.ExodusTracker
|
||||||
import com.aurora.store.data.model.Report
|
import com.aurora.store.data.model.Report
|
||||||
import com.aurora.store.data.providers.ExodusDataProvider
|
import com.aurora.store.data.providers.ExodusDataProvider
|
||||||
import com.aurora.store.databinding.ActivityGenericRecyclerBinding
|
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.HeaderViewModel_
|
||||||
import com.aurora.store.view.epoxy.views.details.ExodusViewModel_
|
import com.aurora.store.view.epoxy.views.details.ExodusViewModel_
|
||||||
import com.aurora.store.view.ui.commons.BaseActivity
|
|
||||||
import org.json.JSONObject
|
import org.json.JSONObject
|
||||||
|
|
||||||
class DetailsExodusActivity : BaseActivity() {
|
class DetailsExodusFragment : Fragment(R.layout.activity_generic_recycler) {
|
||||||
|
|
||||||
private lateinit var B: ActivityGenericRecyclerBinding
|
private var _binding: ActivityGenericRecyclerBinding? = null
|
||||||
private lateinit var app: App
|
private val binding: ActivityGenericRecyclerBinding
|
||||||
private lateinit var report: Report
|
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() {
|
// Toolbar
|
||||||
|
binding.layoutToolbarAction.apply {
|
||||||
}
|
txtTitle.text = ""
|
||||||
|
toolbar.setOnClickListener {
|
||||||
override fun onReconnected() {
|
findNavController().navigateUp()
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
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))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
updateController(getExodusTrackersFromReport(args.report))
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun attachToolbar() {
|
override fun onDestroyView() {
|
||||||
B.layoutToolbarAction.toolbar.setOnClickListener {
|
super.onDestroyView()
|
||||||
finishAfterTransition()
|
_binding = null
|
||||||
}
|
|
||||||
B.layoutToolbarAction.txtTitle.text = app.displayName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun updateController(reviews: List<ExodusTracker>) {
|
private fun updateController(reviews: List<ExodusTracker>) {
|
||||||
B.recycler.withModels {
|
binding.recycler.withModels {
|
||||||
add(
|
add(
|
||||||
HeaderViewModel_()
|
HeaderViewModel_()
|
||||||
.id("header")
|
.id("header")
|
||||||
.title(getString(R.string.exodus_view_report))
|
.title(getString(R.string.exodus_view_report))
|
||||||
.browseUrl("browse")
|
.browseUrl("browse")
|
||||||
.click { _ -> browse(Constants.EXODUS_REPORT_URL + report.id) }
|
.click { _ -> context?.browse(Constants.EXODUS_REPORT_URL + args.report.id) }
|
||||||
)
|
)
|
||||||
reviews.forEach {
|
reviews.forEach {
|
||||||
add(
|
add(
|
||||||
@@ -97,7 +78,7 @@ class DetailsExodusActivity : BaseActivity() {
|
|||||||
.id(it.id)
|
.id(it.id)
|
||||||
.tracker(it)
|
.tracker(it)
|
||||||
.click { _ ->
|
.click { _ ->
|
||||||
browse(it.url)
|
context?.browse(it.url)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -124,7 +105,7 @@ class DetailsExodusActivity : BaseActivity() {
|
|||||||
private fun fetchLocalTrackers(trackerIds: List<Int>): List<JSONObject> {
|
private fun fetchLocalTrackers(trackerIds: List<Int>): List<JSONObject> {
|
||||||
return try {
|
return try {
|
||||||
ExodusDataProvider
|
ExodusDataProvider
|
||||||
.with(this)
|
.with(requireContext())
|
||||||
.getFilteredTrackers(trackerIds)
|
.getFilteredTrackers(trackerIds)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
emptyList()
|
emptyList()
|
||||||
@@ -117,6 +117,9 @@
|
|||||||
<action
|
<action
|
||||||
android:id="@+id/action_appDetailsFragment_to_detailsReviewFragment"
|
android:id="@+id/action_appDetailsFragment_to_detailsReviewFragment"
|
||||||
app:destination="@id/detailsReviewFragment" />
|
app:destination="@id/detailsReviewFragment" />
|
||||||
|
<action
|
||||||
|
android:id="@+id/action_appDetailsFragment_to_detailsExodusFragment"
|
||||||
|
app:destination="@id/detailsExodusFragment" />
|
||||||
</fragment>
|
</fragment>
|
||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/categoryBrowseFragment"
|
android:id="@+id/categoryBrowseFragment"
|
||||||
@@ -199,7 +202,6 @@
|
|||||||
<fragment
|
<fragment
|
||||||
android:id="@+id/detailsMoreFragment"
|
android:id="@+id/detailsMoreFragment"
|
||||||
android:name="com.aurora.store.view.ui.details.DetailsMoreFragment"
|
android:name="com.aurora.store.view.ui.details.DetailsMoreFragment"
|
||||||
android:label="fragment_details_more"
|
|
||||||
tools:layout="@layout/fragment_details_more" >
|
tools:layout="@layout/fragment_details_more" >
|
||||||
<argument
|
<argument
|
||||||
android:name="app"
|
android:name="app"
|
||||||
@@ -215,6 +217,14 @@
|
|||||||
<argument android:name="packageName"
|
<argument android:name="packageName"
|
||||||
app:argType="string" />
|
app:argType="string" />
|
||||||
</fragment>
|
</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
|
<action
|
||||||
android:id="@+id/action_global_appDetailsFragment"
|
android:id="@+id/action_global_appDetailsFragment"
|
||||||
app:destination="@id/appDetailsFragment" />
|
app:destination="@id/appDetailsFragment" />
|
||||||
|
|||||||
@@ -22,6 +22,7 @@
|
|||||||
plugins {
|
plugins {
|
||||||
id 'com.android.application' version '8.0.2' apply false
|
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.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 'androidx.navigation.safeargs.kotlin' version '2.6.0' apply false
|
||||||
id 'org.jlleitschuh.gradle.ktlint' version '11.4.0' apply false
|
id 'org.jlleitschuh.gradle.ktlint' version '11.4.0' apply false
|
||||||
id 'com.starter.easylauncher' version '6.2.0' apply false
|
id 'com.starter.easylauncher' version '6.2.0' apply false
|
||||||
|
|||||||
Reference in New Issue
Block a user