From 660cab770224d2793524552419204a547e06bbea Mon Sep 17 00:00:00 2001 From: deniscerri <64997243+deniscerri@users.noreply.github.com> Date: Sat, 25 Mar 2023 11:13:18 +0100 Subject: [PATCH] added navigation component & command chip in history fragment --- app/build.gradle | 6 +- .../com/deniscerri/ytdlnis/MainActivity.kt | 110 +++++++----------- .../database/repository/DownloadRepository.kt | 10 +- .../database/repository/HistoryRepository.kt | 3 - .../database/viewmodel/ResultViewModel.kt | 2 +- .../DownloadMultipleBottomSheetDialog.kt | 12 +- .../ui/downloads/ErroredDownloadsFragment.kt | 7 +- .../ytdlnis/ui/downloads/HistoryFragment.kt | 24 ++-- .../ytdlnis/ui/more/MoreFragment.kt | 75 +++++++++++- .../ytdlnis/ui/more/TerminalActivity.kt | 2 +- .../com/deniscerri/ytdlnis/util/UpdateUtil.kt | 5 - app/src/main/res/layout/activity_main.xml | 8 +- .../main/res/layout/download_type_sheet.xml | 78 +++++-------- app/src/main/res/layout/fragment_history.xml | 13 ++- app/src/main/res/layout/fragment_more.xml | 68 ++++++++++- app/src/main/res/menu/bottom_nav_menu.xml | 6 +- app/src/main/res/navigation/nav_graph.xml | 32 +++++ app/src/main/res/xml/root_preferences.xml | 1 - build.gradle | 1 + 19 files changed, 285 insertions(+), 178 deletions(-) create mode 100644 app/src/main/res/navigation/nav_graph.xml diff --git a/app/build.gradle b/app/build.gradle index d1c0cdee..23b11d15 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -125,8 +125,9 @@ dependencies { implementation 'androidx.core:core:1.9.0' implementation 'androidx.recyclerview:recyclerview:1.3.0' implementation 'androidx.preference:preference:1.2.0' - implementation "androidx.navigation:navigation-fragment-ktx:2.5.3" - implementation "androidx.navigation:navigation-ui-ktx:2.5.3" + implementation "androidx.navigation:navigation-fragment-ktx:$navVer" + implementation "androidx.navigation:navigation-ui-ktx:$navVer" + implementation "androidx.navigation:navigation-dynamic-features-fragment:$navVer" implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.test.ext:junit-ktx:1.1.5' @@ -139,6 +140,7 @@ dependencies { androidTestImplementation "androidx.test:runner:1.5.2" androidTestImplementation "androidx.test:core:1.5.0" androidTestImplementation "androidx.test:rules:1.5.0" + androidTestImplementation "androidx.navigation:navigation-testing:$navVer" implementation "io.reactivex.rxjava2:rxandroid:2.1.0" implementation "com.devbrackets.android:exomedia:4.3.0" diff --git a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt index f8762ce6..6f2af847 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/MainActivity.kt @@ -25,6 +25,12 @@ import androidx.fragment.app.Fragment import androidx.fragment.app.FragmentManager import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope +import androidx.navigation.findNavController +import androidx.navigation.fragment.NavHostFragment +import androidx.navigation.fragment.findNavController +import androidx.navigation.ui.AppBarConfiguration +import androidx.navigation.ui.setupActionBarWithNavController +import androidx.navigation.ui.setupWithNavController import com.deniscerri.ytdlnis.database.viewmodel.ResultViewModel import com.deniscerri.ytdlnis.databinding.ActivityMainBinding import com.deniscerri.ytdlnis.ui.HomeFragment @@ -33,6 +39,8 @@ import com.deniscerri.ytdlnis.ui.downloads.HistoryFragment import com.deniscerri.ytdlnis.ui.more.MoreFragment import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity import com.deniscerri.ytdlnis.util.UpdateUtil +import com.google.android.material.appbar.MaterialToolbar +import com.google.android.material.bottomnavigation.BottomNavigationView import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch @@ -48,20 +56,17 @@ import kotlin.system.exitProcess class MainActivity : AppCompatActivity() { - private lateinit var binding: ActivityMainBinding lateinit var context: Context - private lateinit var homeFragment: HomeFragment - private lateinit var historyFragment: HistoryFragment private lateinit var preferences: SharedPreferences private lateinit var resultViewModel: ResultViewModel + private lateinit var bottomNav: BottomNavigationView + private lateinit var navHostFragment : NavHostFragment override fun onCreate(savedInstanceState: Bundle?) { - binding = ActivityMainBinding.inflate(layoutInflater) super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) - setContentView(binding.root) context = baseContext resultViewModel = ViewModelProvider(this)[ResultViewModel::class.java] preferences = context.getSharedPreferences("root_preferences", MODE_PRIVATE) @@ -72,56 +77,50 @@ class MainActivity : AppCompatActivity() { askPermissions() checkUpdate() - fm = supportFragmentManager - homeFragment = HomeFragment() - historyFragment = HistoryFragment() - moreFragment = MoreFragment() - initFragments() - binding.bottomNavigationView.setOnItemSelectedListener { item: MenuItem -> - when (item.itemId) { - R.id.home -> { - if (lastFragment === homeFragment) { - homeFragment.scrollToTop() - } else { - this.setTitle(R.string.app_name) - } - replaceFragment(homeFragment) - } - R.id.history -> { - if (lastFragment === historyFragment) { - val intent = Intent(context, DownloadQueueActivity::class.java) - startActivity(intent) - } else { - this.title = getString(R.string.downloads) - } - replaceFragment(historyFragment) - } - R.id.more -> { - if (lastFragment === moreFragment) { - val intent = Intent(context, SettingsActivity::class.java) - startActivity(intent) - } else { - this.title = getString(R.string.more) - } - replaceFragment(moreFragment) - } - } - true - } + navHostFragment = supportFragmentManager.findFragmentById(R.id.frame_layout) as NavHostFragment + val navController = navHostFragment.findNavController() + bottomNav = findViewById(R.id.bottomNavigationView) + window.decorView.setOnApplyWindowInsetsListener { view: View, windowInsets: WindowInsets? -> val windowInsetsCompat = WindowInsetsCompat.toWindowInsetsCompat( windowInsets!!, view ) val isImeVisible = windowInsetsCompat.isVisible(WindowInsetsCompat.Type.ime()) - binding.bottomNavigationView.visibility = + bottomNav.visibility = if (isImeVisible) View.GONE else View.VISIBLE view.onApplyWindowInsets(windowInsets) } + + bottomNav.setupWithNavController(navController) + bottomNav.setOnItemReselectedListener { + when (it.itemId) { + R.id.homeFragment -> { + (navHostFragment.childFragmentManager.primaryNavigationFragment!! as HomeFragment).scrollToTop() + } + R.id.historyFragment -> { + val intent = Intent(context, DownloadQueueActivity::class.java) + startActivity(intent) + } + R.id.moreFragment -> { + val intent = Intent(context, SettingsActivity::class.java) + startActivity(intent) + } + } + } + val intent = intent handleIntents(intent) } + fun hideNav() { + bottomNav.visibility = View.GONE + } + + fun showNav() { + bottomNav.visibility = View.VISIBLE + } + override fun onResume() { super.onResume() val incognitoHeader = findViewById(R.id.incognito_header) @@ -144,9 +143,6 @@ class MainActivity : AppCompatActivity() { val type = intent.type if (Intent.ACTION_SEND == action && type != null) { Log.e(TAG, action) - homeFragment = HomeFragment() - historyFragment = HistoryFragment() - moreFragment = MoreFragment() if (type.equals("application/txt", ignoreCase = true)) { try { val uri = if (Build.VERSION.SDK_INT >= 33){ @@ -169,33 +165,16 @@ class MainActivity : AppCompatActivity() { } val l = listOf(*textBuilder.toString().split("\n").toTypedArray()) val lines = LinkedList(l) - homeFragment.handleFileIntent(lines) + (navHostFragment.childFragmentManager.primaryNavigationFragment!! as HomeFragment).handleFileIntent(lines) } catch (e: Exception) { e.printStackTrace() } } else { - homeFragment.handleIntent(intent) + (navHostFragment.childFragmentManager.primaryNavigationFragment!! as HomeFragment).handleIntent(intent) } - initFragments() } } - private fun initFragments() { - fm.beginTransaction() - .replace(R.id.frame_layout, homeFragment) - .add(R.id.frame_layout, historyFragment) - .add(R.id.frame_layout, moreFragment) - .hide(historyFragment) - .hide(moreFragment) - .commit() - lastFragment = homeFragment - } - - private fun replaceFragment(f: Fragment) { - fm.beginTransaction().hide(lastFragment).show(f).commit() - lastFragment = f - } - private fun checkUpdate() { if (preferences.getBoolean("update_app", false)) { @@ -301,8 +280,5 @@ class MainActivity : AppCompatActivity() { companion object { private const val TAG = "MainActivity" - private lateinit var moreFragment: MoreFragment - private lateinit var lastFragment: Fragment - private lateinit var fm: FragmentManager } } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt index 73139c38..15e96788 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/DownloadRepository.kt @@ -37,7 +37,7 @@ class DownloadRepository(private val downloadDao: DownloadDao) { suspend fun setDownloadStatus(item: DownloadItem, status: Status){ item.status = status.toString() - update(item); + update(item) } fun getItemByID(id: Long) : DownloadItem { @@ -56,14 +56,6 @@ class DownloadRepository(private val downloadDao: DownloadDao) { downloadDao.deleteQueued() } - suspend fun deleteSingleProcessing(item: DownloadItem){ - downloadDao.deleteSingleProcessing(item.id) - } - - suspend fun queueAllProcessing(){ - downloadDao.queueAllProcessing() - } - fun checkIfPresentForProcessing(item: ResultItem): DownloadItem{ return downloadDao.checkIfErrorOrCancelled(item.url) } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt index c936f0f8..18726708 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/repository/HistoryRepository.kt @@ -63,7 +63,4 @@ class HistoryRepository(private val historyDao: HistoryDao) { } } - suspend fun checkDownloaded(){ - - } } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt index e73bed38..46b9a1cc 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/database/viewmodel/ResultViewModel.kt @@ -109,7 +109,7 @@ class ResultViewModel(application: Application) : AndroidViewModel(application) } fun update(item: ResultItem) = viewModelScope.launch(Dispatchers.IO){ - repository.update(item); + repository.update(item) } fun getItemByURL(url: String) : ResultItem { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt index fce35733..ad47a71c 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloadcard/DownloadMultipleBottomSheetDialog.kt @@ -12,6 +12,7 @@ import android.util.Log import android.view.* import android.widget.Button import android.widget.LinearLayout +import android.widget.TextView import android.widget.Toast import androidx.activity.result.contract.ActivityResultContracts import androidx.lifecycle.ViewModelProvider @@ -32,11 +33,6 @@ import com.google.android.material.bottomsheet.BottomSheetBehavior import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.bottomsheet.BottomSheetDialogFragment import com.google.android.material.button.MaterialButton -import com.google.android.material.datepicker.CalendarConstraints -import com.google.android.material.datepicker.DateValidatorPointForward -import com.google.android.material.datepicker.MaterialDatePicker -import com.google.android.material.timepicker.MaterialTimePicker -import com.google.android.material.timepicker.TimeFormat import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking @@ -149,9 +145,9 @@ class DownloadMultipleBottomSheetDialog(private var items: MutableList(R.id.audio) - val video = bottomSheet.findViewById(R.id.video) - val command = bottomSheet.findViewById(R.id.command) + val audio = bottomSheet.findViewById(R.id.audio) + val video = bottomSheet.findViewById(R.id.video) + val command = bottomSheet.findViewById(R.id.command) withContext(Dispatchers.IO){ 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 85dbf455..8052ecb5 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 @@ -12,12 +12,10 @@ import android.view.Window import android.widget.AdapterView import android.widget.AdapterView.OnItemClickListener import android.widget.Button -import android.widget.LinearLayout import android.widget.TextView import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -33,12 +31,11 @@ import com.google.android.material.bottomsheet.BottomSheetDialog import com.google.android.material.button.MaterialButton import com.google.android.material.chip.Chip import com.google.android.material.dialog.MaterialAlertDialogBuilder -import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import java.io.File -class ErroredDownloadsFragment() : Fragment(), GenericDownloadAdapter.OnItemClickListener, OnItemClickListener { +class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickListener, OnItemClickListener { private var _binding : FragmentHomeBinding? = null private var fragmentView: View? = null private var activity: Activity? = null @@ -195,7 +192,7 @@ class ErroredDownloadsFragment() : Fragment(), GenericDownloadAdapter.OnItemClic private fun removeItem(item: DownloadItem, bottomSheet: BottomSheetDialog?){ bottomSheet?.hide() - val deleteDialog = MaterialAlertDialogBuilder(requireContext()!!) + val deleteDialog = MaterialAlertDialogBuilder(requireContext()) deleteDialog.setTitle(getString(R.string.you_are_going_to_delete) + " \"" + item.title + "\"!") deleteDialog.setNegativeButton(getString(R.string.cancel)) { dialogInterface: DialogInterface, _: Int -> dialogInterface.cancel() } deleteDialog.setPositiveButton(getString(R.string.ok)) { _: DialogInterface?, _: Int -> 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 d4a6c22f..61942676 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 @@ -3,22 +3,20 @@ package com.deniscerri.ytdlnis.ui.downloads import android.app.Activity import android.content.Context import android.content.DialogInterface -import android.content.Intent import android.content.res.Configuration import android.os.Bundle import android.os.Handler import android.os.Looper import android.text.InputType -import android.text.format.DateUtils import android.util.Log import android.view.* -import android.view.View.* +import android.view.View.GONE +import android.view.View.VISIBLE import android.widget.* import androidx.appcompat.widget.SearchView import androidx.core.content.ContextCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider -import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView @@ -42,13 +40,10 @@ 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.floatingactionbutton.ExtendedFloatingActionButton -import kotlinx.coroutines.launch import kotlinx.coroutines.runBlocking import java.io.File -import java.text.DateFormat import java.text.SimpleDateFormat import java.util.* -import kotlin.collections.ArrayList /** * A fragment representing a list of Items. @@ -130,7 +125,6 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ recyclerView?.adapter = historyAdapter noResults?.visibility = GONE - selectionChips?.visibility = VISIBLE shimmerCards?.visibility = GONE @@ -325,6 +319,16 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ video.isChecked = false } } + val command = fragmentView!!.findViewById(R.id.command_chip) + command.setOnClickListener { + if (command.isChecked) { + historyViewModel.setFormatFilter("command") + command.isChecked = true + } else { + historyViewModel.setFormatFilter("") + command.isChecked = false + } + } } private fun updateWebsiteChips(list : List) { @@ -419,7 +423,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ } if (isPresent){ - btn!!.setOnClickListener { + btn.setOnClickListener { uiUtil!!.shareFileIntent(requireContext(),item.downloadPath) } } @@ -439,7 +443,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ else formatNote!!.text = item.format.format_note if (item.format.container != "") container!!.text = item.format.container.uppercase() - else container!!.visibility = View.GONE + else container!!.visibility = GONE val codecText = if (item.format.encoding != "") { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/MoreFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/MoreFragment.kt index f56e6916..2a02adee 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/MoreFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/MoreFragment.kt @@ -1,17 +1,78 @@ package com.deniscerri.ytdlnis.ui.more import android.app.Activity +import android.content.Intent import android.content.SharedPreferences import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.widget.TextView +import androidx.fragment.app.Fragment +import androidx.navigation.Navigation import androidx.preference.Preference import androidx.preference.PreferenceFragmentCompat +import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R +import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding +import com.deniscerri.ytdlnis.ui.downloads.DownloadQueueActivity +import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogListActivity +import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity -class MoreFragment : PreferenceFragmentCompat() { +class MoreFragment : Fragment() { private lateinit var mainSharedPreferences: SharedPreferences - override fun onCreatePreferences(savedInstanceState: Bundle?, rootKey: String?) { - setPreferencesFromResource(R.xml.more_preferences, rootKey) + private lateinit var terminal: TextView + private lateinit var logs: TextView + private lateinit var commandTemplates: TextView + private lateinit var downloadQueue: TextView + private lateinit var settings: TextView + private lateinit var mainActivity: MainActivity + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + mainActivity = activity as MainActivity + return inflater.inflate(R.layout.fragment_more, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + mainSharedPreferences = requireContext().getSharedPreferences("root_preferences", Activity.MODE_PRIVATE) + terminal = view.findViewById(R.id.terminal) + logs = view.findViewById(R.id.logs) + commandTemplates = view.findViewById(R.id.command_templates) + downloadQueue = view.findViewById(R.id.download_queue) + settings = view.findViewById(R.id.settings) + + val navHostFragment = parentFragmentManager.findFragmentById(R.id.frame_layout) + + terminal.setOnClickListener { + val intent = Intent(context, TerminalActivity::class.java) + startActivity(intent) + } + + logs.setOnClickListener { + val intent = Intent(context, DownloadLogListActivity::class.java) + startActivity(intent) + } + + commandTemplates.setOnClickListener { + val intent = Intent(context, CommandTemplatesActivity::class.java) + startActivity(intent) + } + + downloadQueue.setOnClickListener { + val intent = Intent(context, DownloadQueueActivity::class.java) + startActivity(intent) + } + + settings.setOnClickListener { + val intent = Intent(context, SettingsActivity::class.java) + startActivity(intent) + } + } companion object { @@ -20,7 +81,11 @@ class MoreFragment : PreferenceFragmentCompat() { override fun onResume() { super.onResume() - findPreference("download_logs")!!.isVisible = - mainSharedPreferences.getBoolean("log_downloads", false) + if (mainSharedPreferences.getBoolean("log_downloads", false)) { + logs.visibility = View.VISIBLE + }else { + logs.visibility = View.GONE + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt index 78bd2b9c..2d14ceb9 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/TerminalActivity.kt @@ -58,7 +58,7 @@ class TerminalActivity : AppCompatActivity() { fab = findViewById(R.id.command_fab) fab!!.setOnClickListener { input!!.visibility = View.GONE - output!!.text = "${output!!.text}\n~ $ ${input!!.text}\n"; + output!!.text = "${output!!.text}\n~ $ ${input!!.text}\n" swapFabs() startDownload( input!!.text.toString() diff --git a/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt index 2df10a2a..39a592af 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/util/UpdateUtil.kt @@ -16,10 +16,7 @@ import com.deniscerri.ytdlnis.R import com.google.android.material.dialog.MaterialAlertDialogBuilder import com.yausername.youtubedl_android.YoutubeDL import com.yausername.youtubedl_android.YoutubeDL.UpdateStatus -import io.reactivex.Observable -import io.reactivex.android.schedulers.AndroidSchedulers import io.reactivex.disposables.CompositeDisposable -import io.reactivex.schedulers.Schedulers import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import org.json.JSONException @@ -28,12 +25,10 @@ import java.io.BufferedReader import java.io.InputStreamReader import java.net.HttpURLConnection import java.net.URL -import java.util.concurrent.atomic.AtomicReference class UpdateUtil(var context: Context) { private val tag = "UpdateUtil" private val downloadManager: DownloadManager = context.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager - private val compositeDisposable = CompositeDisposable() private val ytdlpNightly = "https://api.github.com/repos/yt-dlp/yt-dlp-nightly-builds/releases/latest" fun updateApp(): Boolean { diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 4a4c9ec8..f3950009 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -20,14 +20,18 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - + app:layout_constraintTop_toBottomOf="@+id/incognito_header" + /> - - - + android:textSize="15sp" + android:text="@string/audio" + app:drawableLeftCompat="@drawable/ic_music" /> - - - - - - + android:textSize="15sp" + android:text="@string/video" + app:drawableLeftCompat="@drawable/ic_video" /> - - - - - - - - - - - - + android:textSize="15sp" + android:text="@string/command" + app:drawableLeftCompat="@drawable/ic_terminal" /> diff --git a/app/src/main/res/layout/fragment_history.xml b/app/src/main/res/layout/fragment_history.xml index 8f3bb3e7..229ab6d5 100644 --- a/app/src/main/res/layout/fragment_history.xml +++ b/app/src/main/res/layout/fragment_history.xml @@ -1,8 +1,8 @@ - @@ -41,6 +41,7 @@ @@ -83,6 +83,13 @@ android:layout_height="wrap_content" android:text="@string/video"/> + + diff --git a/app/src/main/res/layout/fragment_more.xml b/app/src/main/res/layout/fragment_more.xml index 0f917189..7eb55f5d 100644 --- a/app/src/main/res/layout/fragment_more.xml +++ b/app/src/main/res/layout/fragment_more.xml @@ -1,5 +1,5 @@ - @@ -19,6 +19,70 @@ android:layout_gravity="center" android:background="@drawable/ic_app_icon" android:scaleType="center" /> + + + + + + + + + + + + + + diff --git a/app/src/main/res/menu/bottom_nav_menu.xml b/app/src/main/res/menu/bottom_nav_menu.xml index f3906556..46e7211a 100644 --- a/app/src/main/res/menu/bottom_nav_menu.xml +++ b/app/src/main/res/menu/bottom_nav_menu.xml @@ -3,11 +3,11 @@ + android:id="@+id/homeFragment"/> + android:id="@+id/historyFragment"/> + android:id="@+id/moreFragment"/> \ 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 new file mode 100644 index 00000000..531018f1 --- /dev/null +++ b/app/src/main/res/navigation/nav_graph.xml @@ -0,0 +1,32 @@ + + + + + + + + + + \ 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 0011f91d..a0ae164e 100644 --- a/app/src/main/res/xml/root_preferences.xml +++ b/app/src/main/res/xml/root_preferences.xml @@ -1,6 +1,5 @@ -