From c705f7e83140d73acfca59a3d26b2e69360e6672 Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Sun, 2 Mar 2025 17:15:52 +0100 Subject: [PATCH] made changelog a separate fragment --- .../ytdl/ui/adapter/ChangelogAdapter.kt | 2 +- .../more/settings/DownloadSettingsFragment.kt | 4 + .../more/settings/FolderSettingsFragment.kt | 4 + .../more/settings/GeneralSettingsFragment.kt | 3 + .../settings/ProcessingSettingsFragment.kt | 4 + .../advanced/AdvancedSettingsFragment.kt | 3 + .../settings/updating/ChangeLogFragment.kt | 75 +++++++++++++++++++ .../{ => updating}/UpdateSettingsFragment.kt | 68 ++--------------- .../com/deniscerri/ytdl/util/UpdateUtil.kt | 2 +- app/src/main/res/layout/changelog_item.xml | 14 +++- .../main/res/layout/fragment_changelog.xml | 33 ++++++++ app/src/main/res/navigation/nav_graph.xml | 2 +- app/src/main/res/navigation/settings_nav.xml | 12 ++- 13 files changed, 158 insertions(+), 68 deletions(-) create mode 100644 app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/ChangeLogFragment.kt rename app/src/main/java/com/deniscerri/ytdl/ui/more/settings/{ => updating}/UpdateSettingsFragment.kt (75%) create mode 100644 app/src/main/res/layout/fragment_changelog.xml diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/adapter/ChangelogAdapter.kt b/app/src/main/java/com/deniscerri/ytdl/ui/adapter/ChangelogAdapter.kt index 98fc085e..49a7c276 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/adapter/ChangelogAdapter.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/adapter/ChangelogAdapter.kt @@ -80,7 +80,7 @@ class ChangelogAdapter(activity: Activity) : ListAdapter(R.id.assets) assetGroup.removeAllViews() it.assets.forEachIndexed { idx, c -> - val tmp = activity.layoutInflater.inflate(R.layout.filter_chip, assetGroup, false) as Chip + val tmp = activity.layoutInflater.inflate(R.layout.suggestion_chip, assetGroup, false) as Chip tmp.isCheckable = false tmp.layoutParams = layoutParams tmp.text = c.name diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt index e413619a..6f7f3ad5 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/DownloadSettingsFragment.kt @@ -8,6 +8,7 @@ import android.provider.Settings import androidx.activity.result.contract.ActivityResultContracts import androidx.compose.foundation.interaction.DragInteraction import androidx.core.content.edit +import androidx.navigation.fragment.findNavController import androidx.preference.EditTextPreference import androidx.preference.ListPreference import androidx.preference.Preference @@ -268,6 +269,9 @@ class DownloadSettingsFragment : BaseSettingsFragment() { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) { resetPreferences(preferences.edit(), R.xml.downloading_preferences) requireActivity().recreate() + val fragmentId = findNavController().currentDestination?.id + findNavController().popBackStack(fragmentId!!,true) + findNavController().navigate(fragmentId) } true } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt index dd1b8046..979403d7 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/FolderSettingsFragment.kt @@ -12,6 +12,7 @@ import android.provider.Settings import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceCategory import androidx.preference.PreferenceGroup @@ -240,6 +241,9 @@ class FolderSettingsFragment : BaseSettingsFragment() { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) { resetPreferences(editor, R.xml.folders_preference) requireActivity().recreate() + val fragmentId = findNavController().currentDestination?.id + findNavController().popBackStack(fragmentId!!,true) + findNavController().navigate(fragmentId) } true } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt index 880c3041..6fbd0d66 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/GeneralSettingsFragment.kt @@ -373,6 +373,9 @@ class GeneralSettingsFragment : BaseSettingsFragment() { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) { resetPreferences(editor, R.xml.general_preferences) ThemeUtil.updateThemes() + val fragmentId = findNavController().currentDestination?.id + findNavController().popBackStack(fragmentId!!,true) + findNavController().navigate(fragmentId) } true } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt index 1dca14ef..c8d9b81c 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/ProcessingSettingsFragment.kt @@ -2,6 +2,7 @@ package com.deniscerri.ytdl.ui.more.settings import android.annotation.SuppressLint import android.os.Bundle +import androidx.navigation.fragment.findNavController import androidx.preference.EditTextPreference import androidx.preference.Preference import androidx.preference.PreferenceManager @@ -77,6 +78,9 @@ class ProcessingSettingsFragment : BaseSettingsFragment() { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) { resetPreferences(editor, R.xml.processing_preferences) requireActivity().recreate() + val fragmentId = findNavController().currentDestination?.id + findNavController().popBackStack(fragmentId!!,true) + findNavController().navigate(fragmentId) } true } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt index 951c014c..3d0fb385 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/advanced/AdvancedSettingsFragment.kt @@ -84,6 +84,9 @@ class AdvancedSettingsFragment : BaseSettingsFragment() { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) { resetPreferences(editor, R.xml.downloading_preferences) requireActivity().recreate() + val fragmentId = findNavController().currentDestination?.id + findNavController().popBackStack(fragmentId!!,true) + findNavController().navigate(fragmentId) } true } diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/ChangeLogFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/ChangeLogFragment.kt new file mode 100644 index 00000000..51fce797 --- /dev/null +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/ChangeLogFragment.kt @@ -0,0 +1,75 @@ +package com.deniscerri.ytdl.ui.more.settings.updating + +import android.animation.AnimatorSet +import android.annotation.SuppressLint +import android.content.SharedPreferences +import android.os.Bundle +import android.util.Log +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.animation.AccelerateDecelerateInterpolator +import android.widget.RelativeLayout +import androidx.core.view.isVisible +import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope +import androidx.preference.PreferenceManager +import androidx.recyclerview.widget.ItemTouchHelper +import androidx.recyclerview.widget.LinearLayoutManager +import androidx.recyclerview.widget.RecyclerView +import com.deniscerri.ytdl.R +import com.deniscerri.ytdl.database.models.YoutubePlayerClientItem +import com.deniscerri.ytdl.ui.adapter.ChangelogAdapter +import com.deniscerri.ytdl.ui.adapter.YoutubePlayerClientAdapter +import com.deniscerri.ytdl.ui.more.settings.SettingsActivity +import com.deniscerri.ytdl.util.Extensions.enableFastScroll +import com.deniscerri.ytdl.util.UiUtil +import com.deniscerri.ytdl.util.UpdateUtil +import com.google.android.material.card.MaterialCardView +import com.google.android.material.chip.Chip +import com.google.gson.Gson +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext + + +class ChangeLogFragment : Fragment() { + private lateinit var recyclerView: RecyclerView + private lateinit var listAdapter: ChangelogAdapter + private lateinit var noResults : RelativeLayout + private lateinit var settingsActivity: SettingsActivity + private lateinit var preferences: SharedPreferences + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + settingsActivity = activity as SettingsActivity + settingsActivity.changeTopAppbarTitle(getString(R.string.changelog)) + preferences = PreferenceManager.getDefaultSharedPreferences(requireContext()) + return inflater.inflate(R.layout.fragment_changelog, container, false) + } + + @SuppressLint("RestrictedApi") + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + noResults = view.findViewById(R.id.no_results) + + listAdapter = ChangelogAdapter(settingsActivity) + recyclerView = view.findViewById(R.id.recycler_view) + recyclerView.layoutManager = LinearLayoutManager(context) + recyclerView.adapter = listAdapter + recyclerView.enableFastScroll() + + val updateUtil = UpdateUtil(requireContext()) + lifecycleScope.launch { + val releases = withContext(Dispatchers.IO) { + updateUtil.getGithubReleases() + } + listAdapter.submitList(releases) + noResults.isVisible = releases.isEmpty() + recyclerView.isVisible = releases.isNotEmpty() + } + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/UpdateSettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/UpdateSettingsFragment.kt similarity index 75% rename from app/src/main/java/com/deniscerri/ytdl/ui/more/settings/UpdateSettingsFragment.kt rename to app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/UpdateSettingsFragment.kt index 82060787..bc5ea643 100644 --- a/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/UpdateSettingsFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdl/ui/more/settings/updating/UpdateSettingsFragment.kt @@ -1,78 +1,25 @@ -package com.deniscerri.ytdl.ui.more.settings +package com.deniscerri.ytdl.ui.more.settings.updating -import android.annotation.SuppressLint -import android.app.Activity -import android.app.DownloadManager -import android.content.BroadcastReceiver -import android.content.ClipboardManager -import android.content.Context -import android.content.DialogInterface -import android.content.Intent -import android.content.IntentFilter import android.content.SharedPreferences -import android.net.Uri -import android.os.Build import android.os.Bundle -import android.os.Environment -import android.os.Handler -import android.os.Looper -import android.text.Editable -import android.text.TextWatcher -import android.text.method.LinkMovementMethod -import android.view.Gravity -import android.view.LayoutInflater import android.view.View -import android.view.ViewGroup -import android.view.Window -import android.view.inputmethod.InputMethodManager -import android.widget.Button -import android.widget.CheckBox -import android.widget.EditText -import android.widget.LinearLayout -import android.widget.ListView -import android.widget.PopupMenu import android.widget.TextView -import android.widget.Toast -import androidx.appcompat.app.AlertDialog -import androidx.appcompat.app.AppCompatActivity -import androidx.appcompat.content.res.AppCompatResources -import androidx.core.content.ContextCompat -import androidx.core.view.get -import androidx.core.view.isVisible import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController import androidx.preference.Preference import androidx.preference.PreferenceManager -import com.afollestad.materialdialogs.utils.MDUtil.getStringArray import com.deniscerri.ytdl.BuildConfig import com.deniscerri.ytdl.R -import com.deniscerri.ytdl.database.models.CommandTemplate -import com.deniscerri.ytdl.database.viewmodel.DownloadViewModel import com.deniscerri.ytdl.database.viewmodel.SettingsViewModel import com.deniscerri.ytdl.database.viewmodel.YTDLPViewModel -import com.deniscerri.ytdl.util.FileUtil +import com.deniscerri.ytdl.ui.more.settings.BaseSettingsFragment import com.deniscerri.ytdl.util.UiUtil -import com.deniscerri.ytdl.util.UiUtil.showShortcutsSheet import com.deniscerri.ytdl.util.UpdateUtil -import com.deniscerri.ytdl.util.extractors.YTDLPUtil -import com.google.android.material.bottomsheet.BottomSheetBehavior -import com.google.android.material.bottomsheet.BottomSheetDialog -import com.google.android.material.chip.Chip -import com.google.android.material.chip.ChipGroup -import com.google.android.material.dialog.MaterialAlertDialogBuilder -import com.google.android.material.materialswitch.MaterialSwitch import com.google.android.material.snackbar.Snackbar -import com.google.android.material.textfield.TextInputLayout -import com.yausername.youtubedl_android.YoutubeDL -import io.noties.markwon.AbstractMarkwonPlugin -import io.noties.markwon.Markwon -import io.noties.markwon.MarkwonConfiguration -import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -import java.io.File -import java.util.Locale class UpdateSettingsFragment : BaseSettingsFragment() { @@ -130,10 +77,8 @@ class UpdateSettingsFragment : BaseSettingsFragment() { findPreference("changelog")?.setOnPreferenceClickListener { - lifecycleScope.launch(Dispatchers.IO) { - updateUtil?.showChangeLog(requireActivity()) - } - true + findNavController().navigate(R.id.changeLogFragment) + false } @@ -165,6 +110,9 @@ class UpdateSettingsFragment : BaseSettingsFragment() { UiUtil.showGenericConfirmDialog(requireContext(), getString(R.string.reset), getString(R.string.reset_preferences_in_screen)) { resetPreferences(preferences.edit(), R.xml.updating_preferences) requireActivity().recreate() + val fragmentId = findNavController().currentDestination?.id + findNavController().popBackStack(fragmentId!!,true) + findNavController().navigate(fragmentId) } true } diff --git a/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt b/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt index ca256f54..65ac5fc3 100644 --- a/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdl/util/UpdateUtil.kt @@ -126,7 +126,7 @@ class UpdateUtil(var context: Context) { } } - private fun getGithubReleases(): List { + fun getGithubReleases(): List { val url = "https://api.github.com/repos/deniscerri/ytdlnis/releases" val conn: HttpURLConnection var json = listOf() diff --git a/app/src/main/res/layout/changelog_item.xml b/app/src/main/res/layout/changelog_item.xml index 13ecfeb4..a1276f24 100644 --- a/app/src/main/res/layout/changelog_item.xml +++ b/app/src/main/res/layout/changelog_item.xml @@ -1,12 +1,14 @@ - - \ No newline at end of file + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_changelog.xml b/app/src/main/res/layout/fragment_changelog.xml new file mode 100644 index 00000000..a0f718e7 --- /dev/null +++ b/app/src/main/res/layout/fragment_changelog.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_graph.xml b/app/src/main/res/navigation/nav_graph.xml index 7076ca60..5363e707 100644 --- a/app/src/main/res/navigation/nav_graph.xml +++ b/app/src/main/res/navigation/nav_graph.xml @@ -137,7 +137,7 @@ android:label="DownloadSettingsFragment" /> + android:name="com.deniscerri.ytdl.ui.more.settings.updating.UpdateSettingsFragment" + android:label="UpdateSettingsFragment" > + + + \ No newline at end of file