diff --git a/app/src/main/java/com/deniscerri/ytdlnis/App.kt b/app/src/main/java/com/deniscerri/ytdlnis/App.kt
index 67e42664..caa5c7eb 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/App.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/App.kt
@@ -1,7 +1,11 @@
package com.deniscerri.ytdlnis
import android.app.Application
+import android.app.UiModeManager.MODE_NIGHT_NO
+import android.app.UiModeManager.MODE_NIGHT_YES
import android.widget.Toast
+import androidx.appcompat.app.AppCompatDelegate
+import androidx.appcompat.app.AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM
import androidx.preference.PreferenceManager
import androidx.work.Configuration
import androidx.work.WorkManager
@@ -32,6 +36,8 @@ class App : Application() {
false
)
+ val sharedPreferences = getSharedPreferences("root_preferences", MODE_PRIVATE)
+
applicationScope = CoroutineScope(SupervisorJob())
applicationScope.launch((Dispatchers.IO)) {
try {
@@ -42,12 +48,19 @@ class App : Application() {
}
}
+ AppCompatDelegate.setDefaultNightMode(
+ when(sharedPreferences.getString("ytdlnis_theme", "Default")){
+ "Default" -> MODE_NIGHT_FOLLOW_SYSTEM
+ "Dark" -> MODE_NIGHT_YES
+ else -> MODE_NIGHT_NO
+ }
+ )
+
WorkManager.initialize(
this@App,
Configuration.Builder()
.setExecutor(Executors.newFixedThreadPool(
- getSharedPreferences("root_preferences", MODE_PRIVATE)
- .getInt("concurrent_downloads", 1)))
+ sharedPreferences.getInt("concurrent_downloads", 1)))
.build())
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt
index 25686649..fa436458 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt
@@ -33,9 +33,11 @@ import com.deniscerri.ytdlnis.ui.HomeFragment
import com.deniscerri.ytdlnis.ui.downloads.DownloadQueueActivity
import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity
import com.deniscerri.ytdlnis.util.UpdateUtil
+import com.google.android.material.bottomnavigation.BottomNavigationView
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import com.google.android.material.navigation.NavigationBarView
import com.google.android.material.navigation.NavigationView
+import com.google.android.material.navigationrail.NavigationRailView
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import java.io.BufferedReader
@@ -95,17 +97,16 @@ class MainActivity : AppCompatActivity() {
val sharedPreferences = getSharedPreferences("root_preferences", Activity.MODE_PRIVATE)
val startDestination = sharedPreferences.getString("start_destination", "")
- val graph = navHostFragment.navController.navInflater.inflate(R.navigation.nav_graph)
+ val graph = navController.navInflater.inflate(R.navigation.nav_graph)
when(startDestination) {
- "History" -> graph.setStartDestination(R.id.historyFragment)
- "More" -> graph.setStartDestination(R.id.moreFragment)
- else -> graph.setStartDestination(R.id.homeFragment)
+ "History" -> graph.setStartDestination(R.id.historyFragment)
+ "More" -> if (navigationView is NavigationBarView) graph.setStartDestination(R.id.moreFragment) else graph.setStartDestination(R.id.homeFragment)
+ else -> graph.setStartDestination(R.id.homeFragment)
}
- navHostFragment.navController.graph = graph
-
-
+ navController.graph = graph
if (navigationView is NavigationBarView){
+ (navigationView as NavigationBarView).selectedItemId = graph.startDestinationId
(navigationView as NavigationBarView).setupWithNavController(navController)
(navigationView as NavigationBarView).setOnItemReselectedListener {
when (it.itemId) {
@@ -125,6 +126,7 @@ class MainActivity : AppCompatActivity() {
}
}
if (navigationView is NavigationView){
+ (navigationView as NavigationView).setCheckedItem(graph.startDestinationId)
(navigationView as NavigationView).setupWithNavController(navController)
//terminate button
(navigationView as NavigationView).menu.getItem(7).setOnMenuItemClickListener {
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt
index ffbf7994..fa42401d 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ActiveDownloadsFragment.kt
@@ -71,7 +71,7 @@ class ActiveDownloadsFragment() : Fragment(), ActiveDownloadAdapter.OnItemClickL
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
activeRecyclerView.layoutManager = GridLayoutManager(context, 3)
- }else if (landScape || dpWidth >= 700){
+ }else if (landScape || dpWidth >= 650){
activeRecyclerView.layoutManager = GridLayoutManager(context, 2)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt
index f4887209..c85399d0 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/CancelledDownloadsFragment.kt
@@ -82,7 +82,7 @@ class CancelledDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClic
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
cancelledRecyclerView.layoutManager = GridLayoutManager(context, 3)
- }else if (landScape || dpWidth >= 700){
+ }else if (landScape || dpWidth >= 650){
cancelledRecyclerView.layoutManager = GridLayoutManager(context, 2)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt
index e5c803d0..cf28c919 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/ErroredDownloadsFragment.kt
@@ -85,7 +85,7 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
erroredRecyclerView.layoutManager = GridLayoutManager(context, 3)
- }else if (landScape || dpWidth >= 700){
+ }else if (landScape || dpWidth >= 650){
erroredRecyclerView.layoutManager = GridLayoutManager(context, 2)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt
index 957d5c73..83307315 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/HistoryFragment.kt
@@ -120,7 +120,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
recyclerView?.layoutManager = GridLayoutManager(context, 3)
- }else if (landScape || dpWidth >= 700){
+ }else if (landScape || dpWidth >= 650){
recyclerView?.layoutManager = GridLayoutManager(context, 2)
}
noResults?.visibility = GONE
@@ -297,6 +297,9 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{
historyViewModel.setSorting(HistoryRepository.HistorySortType.FILESIZE)
changeSortIcon(filesize, historyViewModel.sortOrder.value!!)
}
+ val displayMetrics = DisplayMetrics()
+ requireActivity().windowManager.defaultDisplay.getMetrics(displayMetrics)
+ sortSheet!!.behavior.peekHeight = displayMetrics.heightPixels
sortSheet!!.show()
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt
index 1d69809f..22941fa4 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/QueuedDownloadsFragment.kt
@@ -93,7 +93,7 @@ class QueuedDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickLi
val dpWidth: Float = displayMetrics.widthPixels / displayMetrics.density
if (dpWidth > 1200 && landScape){
queuedRecyclerView.layoutManager = GridLayoutManager(context, 3)
- }else if (landScape || dpWidth >= 700){
+ }else if (landScape || dpWidth >= 650){
queuedRecyclerView.layoutManager = GridLayoutManager(context, 2)
}
diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/settings/SettingsFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/settings/SettingsFragment.kt
index 1a6b76de..f26d3d70 100644
--- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/settings/SettingsFragment.kt
+++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/settings/SettingsFragment.kt
@@ -10,6 +10,7 @@ import android.os.Bundle
import android.os.Environment
import android.os.PowerManager
import android.provider.Settings
+import android.util.Log
import android.widget.Toast
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatDelegate
@@ -33,6 +34,7 @@ import java.util.*
class SettingsFragment : PreferenceFragmentCompat() {
private var language: ListPreference? = null
+ private var theme: ListPreference? = null
private var ignoreBatteryOptimization: Preference? = null
private var musicPath: Preference? = null
private var videoPath: Preference? = null
@@ -102,6 +104,7 @@ class SettingsFragment : PreferenceFragmentCompat() {
requireContext().getSharedPreferences("root_preferences", Activity.MODE_PRIVATE)
val editor = preferences.edit()
language = findPreference("app_language")
+ theme = findPreference("ytdlnis_theme")
ignoreBatteryOptimization = findPreference("ignore_battery")
musicPath = findPreference("music_path")
videoPath = findPreference("video_path")
@@ -161,6 +164,8 @@ class SettingsFragment : PreferenceFragmentCompat() {
ignoreBatteryOptimization!!.isVisible = false
}
+ editor.putString("theme", theme!!.value)
+
if (preferences.getString("music_path", "")!!.isEmpty()) {
editor.putString("music_path", getString(R.string.music_path))
}
@@ -225,6 +230,32 @@ class SettingsFragment : PreferenceFragmentCompat() {
true
}
+ theme!!.summary = when(theme!!.value){
+ "Default" -> getString(R.string.defaultValue)
+ "Dark" -> getString(R.string.dark)
+ else -> getString(R.string.light)
+ }
+ theme!!.onPreferenceChangeListener =
+ Preference.OnPreferenceChangeListener { _: Preference?, newValue: Any ->
+ when(newValue){
+ "Default" -> {
+ theme!!.summary = getString(R.string.defaultValue)
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM)
+ }
+ "Dark" -> {
+ theme!!.summary = getString(R.string.dark)
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
+ }
+ else -> {
+ theme!!.summary = getString(R.string.light)
+ AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO)
+ }
+ }
+ editor.putString("ytdlnis_theme", newValue.toString())
+ editor.apply()
+ true
+ }
+
ignoreBatteryOptimization!!.onPreferenceClickListener =
Preference.OnPreferenceClickListener {
val intent = Intent()
diff --git a/app/src/main/res/drawable/baseline_format_paint_24.xml b/app/src/main/res/drawable/baseline_format_paint_24.xml
new file mode 100644
index 00000000..1323aedc
--- /dev/null
+++ b/app/src/main/res/drawable/baseline_format_paint_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/history_card.xml b/app/src/main/res/layout/history_card.xml
index 4c138f6c..d8441fa4 100644
--- a/app/src/main/res/layout/history_card.xml
+++ b/app/src/main/res/layout/history_card.xml
@@ -1,5 +1,6 @@
@@ -62,7 +64,7 @@
android:id="@+id/downloads_info_bottom"
android:layout_width="0dp"
android:layout_height="wrap_content"
- android:layout_margin="10dp"
+ android:padding="10dp"
android:ellipsize="end"
android:gravity="bottom"
android:maxLines="1"
@@ -76,20 +78,25 @@
android:textStyle="bold"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/downloads_info_time"
+ app:layout_constraintHorizontal_bias="0.0"
+ app:layout_constraintVertical_bias="1.0"
app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toBottomOf="@+id/downloads_title"
- app:layout_constraintVertical_bias="1.0" />
+ app:layout_constraintTop_toBottomOf="@+id/downloads_download_button_type" />
+ app:layout_constraintTop_toTopOf="parent" />
diff --git a/app/src/main/res/values/arrays.xml b/app/src/main/res/values/arrays.xml
index 8fe39e7f..872acd90 100644
--- a/app/src/main/res/values/arrays.xml
+++ b/app/src/main/res/values/arrays.xml
@@ -163,4 +163,20 @@
- History
- More
+
+
+ - @string/defaultValue
+ - @string/dark
+ - @string/light
+
+
+
+ - Default
+ - Dark
+ - Light
+
+
+
+ Dark
+ Light
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 219a71ab..fc9a05dc 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -223,4 +223,5 @@
Codec
Audio Sample Rate
Copied To Clipboard
+ Theme
\ No newline at end of file
diff --git a/app/src/main/res/xml/root_preferences.xml b/app/src/main/res/xml/root_preferences.xml
index ed6f23f9..9eb5479e 100644
--- a/app/src/main/res/xml/root_preferences.xml
+++ b/app/src/main/res/xml/root_preferences.xml
@@ -8,6 +8,15 @@
app:summary="en"
app:title="@string/language" />
+
+