diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 61ff6b25..66274e06 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -69,39 +69,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - { - val intent = Intent(context, DownloadQueueActivity::class.java) - startActivity(intent) + navController.navigate(R.id.downloadQueueMainFragment) } R.id.moreFragment -> { val intent = Intent(context, SettingsActivity::class.java) @@ -175,20 +180,50 @@ class MainActivity : BaseActivity() { } } cookieViewModel.updateCookiesFile() -// lifecycleScope.launch(Dispatchers.IO){ -// val active = downloadViewModel.getActiveDownloads() -// if (active.isNotEmpty()){ -// val wm = WorkManager.getInstance(this@MainActivity) -// active.forEach { -// if (wm.getWorkInfosByTag()) -// } -// WorkManager.getInstance(this@MainActivity).get -// } -// } val intent = intent handleIntents(intent) } + fun hideBottomNavigation(){ + if(navigationView is NavigationBarView){ + if (navigationView is BottomNavigationView){ + findViewById(R.id.frame_layout).updateLayoutParams { + this.height = LayoutParams.MATCH_PARENT + } + navigationView.animate()?.translationY(navigationView.height.toFloat())?.setDuration(300)?.withEndAction { + navigationView.visibility = View.GONE + }?.start() + }else{ + findViewById(R.id.frame_layout).updateLayoutParams { + this.width = LayoutParams.MATCH_PARENT + } + navigationView.animate()?.translationX(-navigationView.width.toFloat())?.setDuration(300)?.withEndAction { + navigationView.visibility = View.GONE + }?.start() + } + } + } + + fun showBottomNavigation(){ + if(navigationView is NavigationBarView){ + if (navigationView is BottomNavigationView){ + findViewById(R.id.frame_layout).updateLayoutParams { + this.height = 0 + } + navigationView.animate()?.translationY(0F)?.setDuration(300)?.withEndAction { + navigationView.visibility = View.VISIBLE + }?.start() + }else{ + findViewById(R.id.frame_layout).updateLayoutParams { + this.width = 0 + } + navigationView.animate()?.translationX(0F)?.setDuration(300)?.withEndAction { + navigationView.visibility = View.VISIBLE + }?.start() + } + } + } + fun disableBottomNavigation(){ if (navigationView is NavigationBarView){ (navigationView as NavigationBarView).menu.forEach { it.isEnabled = false } @@ -207,6 +242,7 @@ class MainActivity : BaseActivity() { override fun onResume() { super.onResume() + //incognito header val incognitoHeader = findViewById(R.id.incognito_header) if (preferences.getBoolean("incognito", false)){ incognitoHeader.visibility = View.VISIBLE @@ -215,6 +251,10 @@ class MainActivity : BaseActivity() { window.statusBarColor = getColor(android.R.color.transparent) incognitoHeader.visibility = View.GONE } + //check logs option + if (navigationView is NavigationView){ + (navigationView as NavigationView).menu.findItem(R.id.downloadLogListFragment).isVisible = preferences.getBoolean("log_downloads", false) + } } override fun onNewIntent(intent: Intent) { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt index 39cb10c5..5f28fd2e 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/HomeFragment.kt @@ -102,6 +102,7 @@ class HomeFragment : Fragment(), HomeAdapter.OnItemClickListener, OnClickListene fragmentView = inflater.inflate(R.layout.fragment_home, container, false) activity = getActivity() mainActivity = activity as MainActivity? + mainActivity?.showBottomNavigation() quickLaunchSheet = false return fragmentView } 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 faffb54f..23941c01 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 @@ -2,9 +2,7 @@ package com.deniscerri.ytdlnis.ui.downloads import android.app.Activity import android.content.Intent -import android.content.res.Configuration import android.os.Bundle -import android.util.DisplayMetrics import android.view.LayoutInflater import android.view.View import android.view.View.OnClickListener @@ -12,6 +10,7 @@ import android.view.ViewGroup import android.widget.TextView import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.GridLayoutManager import androidx.recyclerview.widget.RecyclerView import androidx.work.WorkManager @@ -21,7 +20,7 @@ import com.deniscerri.ytdlnis.database.models.DownloadItem import com.deniscerri.ytdlnis.database.repository.DownloadRepository import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding -import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity +import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogFragment import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.NotificationUtil import com.google.android.material.progressindicator.LinearProgressIndicator @@ -107,9 +106,12 @@ class ActiveDownloadsFragment() : Fragment(), ActiveDownloadAdapter.OnItemClickL override fun onOutputClick(item: DownloadItem) { val logFile = fileUtil.getLogFile(requireContext(), item) if (logFile.exists()) { - val intent = Intent(requireContext(), DownloadLogActivity::class.java) - intent.putExtra("logpath", logFile.absolutePath) - startActivity(intent) + val bundle = Bundle() + bundle.putString("logpath", logFile.absolutePath) + findNavController().navigate( + R.id.downloadLogFragment, + bundle + ) } } diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/DownloadQueueActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/DownloadQueueMainFragment.kt similarity index 81% rename from app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/DownloadQueueActivity.kt rename to app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/DownloadQueueMainFragment.kt index d9585244..b9b1a104 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/DownloadQueueActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/downloads/DownloadQueueMainFragment.kt @@ -1,20 +1,22 @@ package com.deniscerri.ytdlnis.ui.downloads -import android.content.Context import android.content.DialogInterface import android.os.Bundle +import android.view.LayoutInflater import android.view.MenuItem import android.view.View +import android.view.ViewGroup import android.widget.Toast +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.RecyclerView import androidx.viewpager2.widget.ViewPager2 import androidx.work.WorkManager +import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.database.repository.DownloadRepository import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel -import com.deniscerri.ytdlnis.ui.BaseActivity import com.deniscerri.ytdlnis.util.NotificationUtil import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.dialog.MaterialAlertDialogBuilder @@ -25,25 +27,31 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class DownloadQueueActivity : BaseActivity(){ +class DownloadQueueMainFragment : Fragment(){ private lateinit var downloadViewModel: DownloadViewModel private lateinit var topAppBar: MaterialToolbar private lateinit var workManager: WorkManager private lateinit var tabLayout: TabLayout private lateinit var viewPager2: ViewPager2 private lateinit var fragmentAdapter : DownloadListFragmentAdapter - var context: Context? = null + private lateinit var mainActivity: MainActivity - public override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_download_queue) - context = baseContext - val view : View = window.decorView.findViewById(android.R.id.content) - workManager = WorkManager.getInstance(this) + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + mainActivity = activity as MainActivity + return inflater.inflate(R.layout.fragment_download_queue_main_screen, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + workManager = WorkManager.getInstance(requireContext()) downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] - topAppBar = findViewById(R.id.logs_toolbar) - topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() } + topAppBar = view.findViewById(R.id.logs_toolbar) + topAppBar.setNavigationOnClickListener { mainActivity.onBackPressedDispatcher.onBackPressed() } tabLayout = view.findViewById(R.id.download_tablayout) viewPager2 = view.findViewById(R.id.download_viewpager) @@ -56,7 +64,7 @@ class DownloadQueueActivity : BaseActivity(){ val fragments = mutableListOf(ActiveDownloadsFragment(), QueuedDownloadsFragment(), CancelledDownloadsFragment(), ErroredDownloadsFragment()) fragmentAdapter = DownloadListFragmentAdapter( - supportFragmentManager, + childFragmentManager, lifecycle, fragments ) @@ -81,7 +89,7 @@ class DownloadQueueActivity : BaseActivity(){ tabLayout.selectTab(tabLayout.getTabAt(position)) } }) - + mainActivity.hideBottomNavigation() initMenu() } @@ -115,7 +123,7 @@ class DownloadQueueActivity : BaseActivity(){ } private fun showDeleteDialog (deleteClicked: (deleteClicked: Boolean) -> Unit){ - val deleteDialog = MaterialAlertDialogBuilder(this) + val deleteDialog = MaterialAlertDialogBuilder(requireContext()) deleteDialog.setTitle(getString(R.string.you_are_going_to_delete_multiple_items)) deleteDialog.setNegativeButton(getString(R.string.cancel)) { dialogInterface: DialogInterface, _: Int -> dialogInterface.cancel() } deleteDialog.setPositiveButton(getString(R.string.ok)) { _: DialogInterface?, _: Int -> @@ -127,7 +135,7 @@ class DownloadQueueActivity : BaseActivity(){ private fun cancelAllDownloads() { workManager.cancelAllWorkByTag("download") lifecycleScope.launch { - val notificationUtil = NotificationUtil(this@DownloadQueueActivity) + val notificationUtil = NotificationUtil(requireContext()) val activeAndQueued = withContext(Dispatchers.IO){ downloadViewModel.getActiveAndQueuedDownloads() } 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 9227f277..c1c32974 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 @@ -3,7 +3,6 @@ package com.deniscerri.ytdlnis.ui.downloads import android.app.Activity import android.content.DialogInterface import android.content.Intent -import android.content.res.Configuration import android.graphics.Canvas import android.graphics.Color import android.os.Bundle @@ -32,7 +31,7 @@ import com.deniscerri.ytdlnis.database.models.DownloadItem import com.deniscerri.ytdlnis.database.viewmodel.DownloadViewModel import com.deniscerri.ytdlnis.databinding.FragmentHomeBinding import com.deniscerri.ytdlnis.ui.downloadcard.DownloadBottomSheetDialog -import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity +import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogFragment import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.UiUtil import com.google.android.material.bottomsheet.BottomSheetDialog @@ -97,7 +96,7 @@ class ErroredDownloadsFragment : Fragment(), GenericDownloadAdapter.OnItemClickL override fun onActionButtonClick(itemID: Long) { val item = items.find { it.id == itemID } ?: return val file = fileUtil.getLogFile(requireContext(), item) - val intent = Intent(requireContext(), DownloadLogActivity::class.java) + val intent = Intent(requireContext(), DownloadLogFragment::class.java) intent.putExtra("logpath", file.absolutePath) startActivity(intent) } 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 6b2785be..39f848a0 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 @@ -4,7 +4,6 @@ import android.app.Activity import android.content.Context import android.content.DialogInterface import android.content.Intent -import android.content.res.Configuration import android.graphics.Canvas import android.graphics.Color import android.os.Bundle @@ -100,7 +99,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ fragmentView = inflater.inflate(R.layout.fragment_history, container, false) activity = getActivity() mainActivity = activity as MainActivity? - + mainActivity?.showBottomNavigation() return fragmentView } @@ -156,7 +155,6 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ } downloadViewModel = ViewModelProvider(this)[DownloadViewModel::class.java] - initMenu() initChips() } @@ -217,7 +215,7 @@ class HistoryFragment : Fragment(), HistoryAdapter.OnItemClickListener{ } } R.id.download_queue -> { - val intent = Intent(context, DownloadQueueActivity::class.java) + val intent = Intent(context, DownloadQueueMainFragment::class.java) startActivity(intent) } R.id.remove_deleted_history -> { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/CommandTemplatesActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/CommandTemplatesFragment.kt similarity index 79% rename from app/src/main/java/com/deniscerri/ytdlnis/ui/more/CommandTemplatesActivity.kt rename to app/src/main/java/com/deniscerri/ytdlnis/ui/more/CommandTemplatesFragment.kt index 11b93dd1..ae4926be 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/CommandTemplatesActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/CommandTemplatesFragment.kt @@ -5,19 +5,22 @@ import android.content.DialogInterface import android.graphics.Canvas import android.graphics.Color import android.os.Bundle +import android.view.LayoutInflater import android.view.MenuItem import android.view.View +import android.view.ViewGroup import android.widget.RelativeLayout +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.adapter.TemplatesAdapter import com.deniscerri.ytdlnis.database.models.CommandTemplate import com.deniscerri.ytdlnis.database.viewmodel.CommandTemplateViewModel -import com.deniscerri.ytdlnis.ui.BaseActivity import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.UiUtil import com.google.android.material.appbar.MaterialToolbar @@ -30,7 +33,7 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.withContext -class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickListener { +class CommandTemplatesFragment : Fragment(), TemplatesAdapter.OnItemClickListener { private lateinit var recyclerView: RecyclerView private lateinit var templatesAdapter: TemplatesAdapter private lateinit var topAppBar: MaterialToolbar @@ -38,24 +41,32 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis private lateinit var uiUtil: UiUtil private lateinit var templatesList: List private lateinit var noResults: RelativeLayout - var context: Context? = null + private lateinit var mainActivity: MainActivity - public override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_command_templates) - context = baseContext + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + mainActivity = activity as MainActivity + mainActivity.hideBottomNavigation() + return inflater.inflate(R.layout.fragment_command_templates, container, false) + } + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) templatesList = listOf() - topAppBar = findViewById(R.id.logs_toolbar) - topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() } - noResults = findViewById(R.id.no_results) + topAppBar = view.findViewById(R.id.logs_toolbar) + topAppBar.setNavigationOnClickListener { mainActivity.onBackPressedDispatcher.onBackPressed() } + noResults = view.findViewById(R.id.no_results) templatesAdapter = TemplatesAdapter( this, - this@CommandTemplatesActivity + mainActivity ) - recyclerView = findViewById(R.id.template_recyclerview) + recyclerView = view.findViewById(R.id.template_recyclerview) recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.adapter = templatesAdapter val itemTouchHelper = ItemTouchHelper(simpleCallback) @@ -64,7 +75,7 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis uiUtil = UiUtil(FileUtil()) commandTemplateViewModel = ViewModelProvider(this)[CommandTemplateViewModel::class.java] - commandTemplateViewModel.items.observe(this) { + commandTemplateViewModel.items.observe(viewLifecycleOwner) { if (it.isEmpty()) noResults.visibility = View.VISIBLE else noResults.visibility = View.GONE templatesList = it @@ -88,7 +99,7 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis lifecycleScope.launch{ withContext(Dispatchers.IO){ val count = commandTemplateViewModel.importFromClipboard() - runOnUiThread{ + mainActivity.runOnUiThread{ Snackbar.make(recyclerView, "${getString(R.string.items_imported)} (${count})", Snackbar.LENGTH_LONG).show() } } @@ -100,13 +111,13 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis } private fun initChips() { - val new = findViewById(R.id.newTemplate) - new.setOnClickListener { - uiUtil.showCommandTemplateCreationOrUpdatingSheet(null,this@CommandTemplatesActivity, this, commandTemplateViewModel) {} + val new = view?.findViewById(R.id.newTemplate) + new?.setOnClickListener { + uiUtil.showCommandTemplateCreationOrUpdatingSheet(null,mainActivity, this, commandTemplateViewModel) {} } - val shortcuts = findViewById(R.id.shortcuts) - shortcuts.setOnClickListener { - uiUtil.showShortcutsSheet(this@CommandTemplatesActivity,this, commandTemplateViewModel) + val shortcuts = view?.findViewById(R.id.shortcuts) + shortcuts?.setOnClickListener { + uiUtil.showShortcutsSheet(mainActivity,this, commandTemplateViewModel) } } @@ -115,7 +126,7 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis } override fun onItemClick(commandTemplate: CommandTemplate, index: Int) { - uiUtil.showCommandTemplateCreationOrUpdatingSheet(commandTemplate,this@CommandTemplatesActivity, this, commandTemplateViewModel) { + uiUtil.showCommandTemplateCreationOrUpdatingSheet(commandTemplate,mainActivity, this, commandTemplateViewModel) { templatesAdapter.notifyItemChanged(index) } @@ -126,7 +137,7 @@ class CommandTemplatesActivity : BaseActivity(), TemplatesAdapter.OnItemClickLis } override fun onDelete(commandTemplate: CommandTemplate) { - val deleteDialog = MaterialAlertDialogBuilder(this) + val deleteDialog = MaterialAlertDialogBuilder(requireContext()) deleteDialog.setTitle(getString(R.string.you_are_going_to_delete) + " \"" + commandTemplate.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/more/CookiesActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/CookiesFragment.kt similarity index 82% rename from app/src/main/java/com/deniscerri/ytdlnis/ui/more/CookiesActivity.kt rename to app/src/main/java/com/deniscerri/ytdlnis/ui/more/CookiesFragment.kt index 76afaab9..3caeeb81 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/CookiesActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/CookiesFragment.kt @@ -1,28 +1,32 @@ package com.deniscerri.ytdlnis.ui.more import android.content.Context +import android.content.Context.INPUT_METHOD_SERVICE import android.content.DialogInterface import android.content.Intent import android.graphics.Canvas import android.graphics.Color import android.os.Bundle +import android.view.LayoutInflater import android.view.MenuItem import android.view.View +import android.view.ViewGroup import android.view.inputmethod.InputMethodManager import android.widget.EditText import android.widget.RelativeLayout import androidx.appcompat.app.AlertDialog import androidx.core.widget.doOnTextChanged +import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider import androidx.lifecycle.lifecycleScope import androidx.recyclerview.widget.ItemTouchHelper import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.adapter.CookieAdapter import com.deniscerri.ytdlnis.database.models.CookieItem import com.deniscerri.ytdlnis.database.viewmodel.CookieViewModel -import com.deniscerri.ytdlnis.ui.BaseActivity import com.deniscerri.ytdlnis.util.FileUtil import com.deniscerri.ytdlnis.util.UiUtil import com.google.android.material.appbar.MaterialToolbar @@ -36,7 +40,7 @@ import kotlinx.coroutines.launch import java.io.File -class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { +class CookiesFragment : Fragment(), CookieAdapter.OnItemClickListener { private lateinit var recyclerView: RecyclerView private lateinit var listAdapter: CookieAdapter private lateinit var topAppBar: MaterialToolbar @@ -44,24 +48,30 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { private lateinit var uiUtil: UiUtil private lateinit var cookiesList: List private lateinit var noResults : RelativeLayout - var context: Context? = null + private lateinit var mainActivity: MainActivity + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + mainActivity = activity as MainActivity + mainActivity.hideBottomNavigation() + return inflater.inflate(R.layout.fragment_cookies, container, false) + } - public override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_cookies) - context = baseContext - - topAppBar = findViewById(R.id.logs_toolbar) - topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + topAppBar = view.findViewById(R.id.logs_toolbar) + topAppBar.setNavigationOnClickListener { mainActivity.onBackPressedDispatcher.onBackPressed() } cookiesList = listOf() - noResults = findViewById(R.id.no_results) + noResults = view.findViewById(R.id.no_results) listAdapter = CookieAdapter( this, - this@CookiesActivity + mainActivity ) - recyclerView = findViewById(R.id.template_recyclerview) + recyclerView = view.findViewById(R.id.template_recyclerview) recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.adapter = listAdapter val itemTouchHelper = ItemTouchHelper(simpleCallback) @@ -70,7 +80,7 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { uiUtil = UiUtil(FileUtil()) cookiesViewModel = ViewModelProvider(this)[CookieViewModel::class.java] - cookiesViewModel.items.observe(this) { + cookiesViewModel.items.observe(viewLifecycleOwner) { if (it.isEmpty()) noResults.visibility = View.VISIBLE else noResults.visibility = View.GONE cookiesList = it @@ -84,14 +94,14 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { topAppBar.setOnMenuItemClickListener { m: MenuItem -> when (m.itemId) { R.id.delete_cookies -> { - val deleteDialog = MaterialAlertDialogBuilder(this) + val deleteDialog = MaterialAlertDialogBuilder(requireContext()) deleteDialog.setTitle(getString(R.string.confirm_delete_history)) deleteDialog.setMessage(getString(R.string.confirm_delete_cookies_desc)) deleteDialog.setNegativeButton(getString(R.string.cancel)) { dialogInterface: DialogInterface, _: Int -> dialogInterface.cancel() } deleteDialog.setPositiveButton(getString(R.string.ok)) { _: DialogInterface?, _: Int -> cookiesViewModel.deleteAll() kotlin.runCatching { - File(cacheDir, "cookies.txt").apply { writeText("") } + File(context?.cacheDir, "cookies.txt").apply { writeText("") } } } deleteDialog.show() @@ -111,14 +121,14 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { } private fun initChips() { - val new = findViewById(R.id.newCookie) - new.setOnClickListener { + val new = view?.findViewById(R.id.newCookie) + new?.setOnClickListener { showDialog("") } } private fun showDialog(url: String){ - val builder = MaterialAlertDialogBuilder(this) + val builder = MaterialAlertDialogBuilder(requireContext()) builder.setTitle(getString(R.string.cookies)) val inputLayout = layoutInflater.inflate(R.layout.textinput, null) val editText = inputLayout.findViewById(R.id.url_edittext) @@ -130,7 +140,7 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { builder.setPositiveButton( getString(R.string.get_cookies) ) { dialog: DialogInterface?, which: Int -> - val myIntent = Intent(this, WebViewActivity::class.java) + val myIntent = Intent(requireContext(), WebViewActivity::class.java) myIntent.putExtra("url", editText.text.toString()) startActivity(myIntent) } @@ -144,7 +154,7 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { dialog.getButton(AlertDialog.BUTTON_POSITIVE).isEnabled = editText.text.isNotEmpty() } dialog.show() - val imm = getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager + val imm = mainActivity.getSystemService(INPUT_METHOD_SERVICE) as InputMethodManager editText!!.postDelayed({ editText.requestFocus() imm.showSoftInput(editText, 0) @@ -165,7 +175,7 @@ class CookiesActivity : BaseActivity(), CookieAdapter.OnItemClickListener { } override fun onDelete(cookie: CookieItem) { - val deleteDialog = MaterialAlertDialogBuilder(this) + val deleteDialog = MaterialAlertDialogBuilder(requireContext()) deleteDialog.setTitle(getString(R.string.you_are_going_to_delete) + " \"" + cookie.url + "\"!") 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/more/MoreFragment.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/MoreFragment.kt index f13a7a31..71e0076c 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 @@ -10,11 +10,11 @@ import android.view.ViewGroup import android.widget.CheckBox import android.widget.TextView import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController import androidx.preference.PreferenceManager import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R -import com.deniscerri.ytdlnis.ui.downloads.DownloadQueueActivity -import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogListActivity +import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogListFragment import com.deniscerri.ytdlnis.ui.more.settings.SettingsActivity import com.google.android.material.dialog.MaterialAlertDialogBuilder import kotlin.system.exitProcess @@ -36,6 +36,7 @@ class MoreFragment : Fragment() { savedInstanceState: Bundle? ): View? { mainActivity = activity as MainActivity + mainActivity.showBottomNavigation() return inflater.inflate(R.layout.fragment_more, container, false) } @@ -67,23 +68,19 @@ class MoreFragment : Fragment() { } logs.setOnClickListener { - val intent = Intent(context, DownloadLogListActivity::class.java) - startActivity(intent) + findNavController().navigate(R.id.downloadLogListFragment) } commandTemplates.setOnClickListener { - val intent = Intent(context, CommandTemplatesActivity::class.java) - startActivity(intent) + findNavController().navigate(R.id.commandTemplatesFragment) } downloadQueue.setOnClickListener { - val intent = Intent(context, DownloadQueueActivity::class.java) - startActivity(intent) + findNavController().navigate(R.id.downloadQueueMainFragment) } cookies.setOnClickListener { - val intent = Intent(context, CookiesActivity::class.java) - startActivity(intent) + findNavController().navigate(R.id.cookiesFragment) } terminateApp.setOnClickListener { diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogFragment.kt similarity index 63% rename from app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogActivity.kt rename to app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogFragment.kt index 16f32a2b..d6173897 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogFragment.kt @@ -2,12 +2,17 @@ package com.deniscerri.ytdlnis.ui.more.downloadLogs import android.content.ClipboardManager import android.content.Context +import android.content.Context.CLIPBOARD_SERVICE import android.os.Build import android.os.Bundle import android.os.FileObserver +import android.view.LayoutInflater import android.view.View +import android.view.ViewGroup import android.widget.ScrollView import android.widget.TextView +import androidx.fragment.app.Fragment +import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.ui.BaseActivity import com.google.android.material.appbar.MaterialToolbar @@ -15,38 +20,49 @@ import com.google.android.material.floatingactionbutton.ExtendedFloatingActionBu import java.io.File -class DownloadLogActivity : BaseActivity() { +class DownloadLogFragment : Fragment() { private lateinit var content: TextView private lateinit var contentScrollView : ScrollView private lateinit var topAppBar: MaterialToolbar private lateinit var observer: FileObserver private lateinit var copyLog : ExtendedFloatingActionButton - var context: Context? = null + private lateinit var mainActivity: MainActivity - public override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_download_log) - context = baseContext + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + mainActivity = activity as MainActivity + mainActivity.hideBottomNavigation() + return inflater.inflate(R.layout.fragment_download_log, container, false) + } - topAppBar = findViewById(R.id.title) + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + + topAppBar = view.findViewById(R.id.title) topAppBar.setNavigationOnClickListener { - onBackPressedDispatcher.onBackPressed() + mainActivity.onBackPressedDispatcher.onBackPressed() } - content = findViewById(R.id.content) + content = view.findViewById(R.id.content) content.setTextIsSelectable(true) - contentScrollView = findViewById(R.id.content_scrollview) + contentScrollView = view.findViewById(R.id.content_scrollview) - copyLog = findViewById(R.id.copy_log) + copyLog = view.findViewById(R.id.copy_log) copyLog.setOnClickListener { val clipboard: ClipboardManager = - getSystemService(CLIPBOARD_SERVICE) as ClipboardManager + mainActivity.getSystemService(CLIPBOARD_SERVICE) as ClipboardManager clipboard.setText(content.text) } - val path = intent.getStringExtra("logpath") + val path = arguments?.getString("logpath") if (path == null) { - onBackPressedDispatcher.onBackPressed() + mainActivity.onBackPressedDispatcher.onBackPressed() + }else{ + arguments?.remove("logpath") } val file = File(path!!) @@ -56,7 +72,7 @@ class DownloadLogActivity : BaseActivity() { if(Build.VERSION.SDK_INT < 29){ observer = object : FileObserver(file.absolutePath, MODIFY) { override fun onEvent(event: Int, p: String?) { - runOnUiThread{ + mainActivity.runOnUiThread{ val newText = File(path).readText() content.text = newText content.scrollTo(0, content.height) @@ -68,7 +84,7 @@ class DownloadLogActivity : BaseActivity() { }else{ observer = object : FileObserver(file, MODIFY) { override fun onEvent(event: Int, p: String?) { - runOnUiThread{ + mainActivity.runOnUiThread{ val newText = File(path).readText() content.text = newText content.scrollTo(0, content.height) diff --git a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogListActivity.kt b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogListFragment.kt similarity index 74% rename from app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogListActivity.kt rename to app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogListFragment.kt index ad328e57..cabfb569 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogListActivity.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/ui/more/downloadLogs/DownloadLogListFragment.kt @@ -1,54 +1,62 @@ package com.deniscerri.ytdlnis.ui.more.downloadLogs -import android.content.Context import android.content.DialogInterface -import android.content.Intent import android.os.Build import android.os.Bundle import android.os.FileObserver +import android.view.LayoutInflater import android.view.MenuItem import android.view.View +import android.view.ViewGroup import android.widget.RelativeLayout import android.widget.Toast +import androidx.fragment.app.Fragment +import androidx.navigation.fragment.findNavController import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView +import com.deniscerri.ytdlnis.MainActivity import com.deniscerri.ytdlnis.R import com.deniscerri.ytdlnis.adapter.DownloadLogsAdapter -import com.deniscerri.ytdlnis.ui.BaseActivity import com.google.android.material.appbar.MaterialToolbar import com.google.android.material.dialog.MaterialAlertDialogBuilder import java.io.File -class DownloadLogListActivity : BaseActivity(), DownloadLogsAdapter.OnItemClickListener { +class DownloadLogListFragment : Fragment(), DownloadLogsAdapter.OnItemClickListener { private lateinit var recyclerView: RecyclerView private lateinit var downloadLogAdapter: DownloadLogsAdapter private lateinit var noResults: RelativeLayout private lateinit var fileList: MutableList private lateinit var topAppBar: MaterialToolbar private lateinit var logFolder : File - var context: Context? = null + private lateinit var mainActivity: MainActivity + override fun onCreateView( + inflater: LayoutInflater, + container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + mainActivity = activity as MainActivity + mainActivity.hideBottomNavigation() + return inflater.inflate(R.layout.fragment_download_log_list, container, false) + } - public override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - setContentView(R.layout.activity_download_log_list) - context = baseContext - - topAppBar = findViewById(R.id.logs_toolbar) - topAppBar.setNavigationOnClickListener { onBackPressedDispatcher.onBackPressed() } + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + topAppBar = view.findViewById(R.id.logs_toolbar) + topAppBar.setNavigationOnClickListener { mainActivity.onBackPressedDispatcher.onBackPressed() } downloadLogAdapter = DownloadLogsAdapter( this, - this@DownloadLogListActivity + mainActivity ) - recyclerView = findViewById(R.id.logs_recyclerview) + recyclerView = view.findViewById(R.id.logs_recyclerview) recyclerView.layoutManager = LinearLayoutManager(context) recyclerView.adapter = downloadLogAdapter - noResults = findViewById(R.id.no_results) + noResults = view.findViewById(R.id.no_results) noResults.visibility = View.GONE - logFolder = File(filesDir.absolutePath + "/logs") + logFolder = File(requireContext().filesDir.absolutePath + "/logs") updateList(logFolder) if(Build.VERSION.SDK_INT < 29){ @@ -78,7 +86,7 @@ class DownloadLogListActivity : BaseActivity(), DownloadLogsAdapter.OnItemClickL val itemId = m.itemId if (itemId == R.id.remove_logs) { try{ - val deleteDialog = MaterialAlertDialogBuilder(this) + val deleteDialog = MaterialAlertDialogBuilder(requireContext()) deleteDialog.setTitle(getString(R.string.confirm_delete_history)) deleteDialog.setMessage(getString(R.string.confirm_delete_logs_desc)) deleteDialog.setNegativeButton(getString(R.string.cancel)) { dialogInterface: DialogInterface, _: Int -> dialogInterface.cancel() } @@ -107,7 +115,7 @@ class DownloadLogListActivity : BaseActivity(), DownloadLogsAdapter.OnItemClickL e.printStackTrace() } downloadLogAdapter.submitList(fileList.toList()) - runOnUiThread{ + mainActivity.runOnUiThread{ if (fileList.isNotEmpty()) { noResults.visibility = View.GONE topAppBar.menu.findItem(R.id.remove_logs).isVisible = true @@ -118,18 +126,17 @@ class DownloadLogListActivity : BaseActivity(), DownloadLogsAdapter.OnItemClickL } } - companion object { - private const val TAG = "DownloadLogActivity" - } - override fun onItemClick(file: File) { - val intent = Intent(this, DownloadLogActivity::class.java) - intent.putExtra("logpath", file.absolutePath) - startActivity(intent) + val bundle = Bundle() + bundle.putString("logpath", file.absolutePath) + findNavController().navigate( + R.id.downloadLogFragment, + bundle + ) } override fun onDeleteClick(file: File) { - val deleteDialog = MaterialAlertDialogBuilder(this) + val deleteDialog = MaterialAlertDialogBuilder(requireContext()) deleteDialog.setTitle(getString(R.string.you_are_going_to_delete) + " \"" + file.name + "\"!") 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/util/NotificationUtil.kt b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt index c4689fea..05a5c2c3 100644 --- a/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt +++ b/app/src/main/java/com/deniscerri/ytdlnis/util/NotificationUtil.kt @@ -16,7 +16,7 @@ import com.deniscerri.ytdlnis.receiver.CancelDownloadNotificationReceiver import com.deniscerri.ytdlnis.receiver.PauseDownloadNotificationReceiver import com.deniscerri.ytdlnis.receiver.ResumeActivity import com.deniscerri.ytdlnis.receiver.SharedDownloadNotificationReceiver -import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogActivity +import com.deniscerri.ytdlnis.ui.more.downloadLogs.DownloadLogFragment import java.io.File @@ -228,7 +228,7 @@ class NotificationUtil(var context: Context) { ) { val notificationBuilder = getBuilder(channel) - val intent = Intent(context, DownloadLogActivity::class.java) + val intent = Intent(context, DownloadLogFragment::class.java) intent.putExtra("logpath", logFile?.absolutePath) val errorPendingIntent: PendingIntent = TaskStackBuilder.create(context).run { diff --git a/app/src/main/res/layout/activity_command_templates.xml b/app/src/main/res/layout/fragment_command_templates.xml similarity index 100% rename from app/src/main/res/layout/activity_command_templates.xml rename to app/src/main/res/layout/fragment_command_templates.xml diff --git a/app/src/main/res/layout/activity_cookies.xml b/app/src/main/res/layout/fragment_cookies.xml similarity index 100% rename from app/src/main/res/layout/activity_cookies.xml rename to app/src/main/res/layout/fragment_cookies.xml diff --git a/app/src/main/res/layout/activity_download_log.xml b/app/src/main/res/layout/fragment_download_log.xml similarity index 100% rename from app/src/main/res/layout/activity_download_log.xml rename to app/src/main/res/layout/fragment_download_log.xml diff --git a/app/src/main/res/layout/activity_download_log_list.xml b/app/src/main/res/layout/fragment_download_log_list.xml similarity index 100% rename from app/src/main/res/layout/activity_download_log_list.xml rename to app/src/main/res/layout/fragment_download_log_list.xml diff --git a/app/src/main/res/layout/activity_download_queue.xml b/app/src/main/res/layout/fragment_download_queue_main_screen.xml similarity index 100% rename from app/src/main/res/layout/activity_download_queue.xml rename to app/src/main/res/layout/fragment_download_queue_main_screen.xml diff --git a/app/src/main/res/menu/nav_menu_largescreen.xml b/app/src/main/res/menu/nav_menu_largescreen.xml index 9301e13a..54af1788 100644 --- a/app/src/main/res/menu/nav_menu_largescreen.xml +++ b/app/src/main/res/menu/nav_menu_largescreen.xml @@ -16,19 +16,19 @@ + android:id="@+id/downloadLogListFragment"/> + android:id="@+id/commandTemplatesFragment"/> + android:id="@+id/downloadQueueMainFragment"/> + android:id="@+id/cookiesFragment"/> + android:id="@+id/action_historyFragment_to_downloadQueueMainFragment" + app:destination="@id/downloadQueueMainFragment" /> - - - - + + + + - - - - + + + + + + + \ No newline at end of file