103 lines
4.1 KiB
Kotlin
103 lines
4.1 KiB
Kotlin
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
package org.mozilla.fenix.library.bookmarks.selectfolder
|
|
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.Menu
|
|
import android.view.MenuInflater
|
|
import android.view.MenuItem
|
|
import android.view.View
|
|
import android.view.ViewGroup
|
|
import androidx.appcompat.app.AppCompatActivity
|
|
import androidx.fragment.app.Fragment
|
|
import androidx.fragment.app.activityViewModels
|
|
import androidx.lifecycle.ViewModelProvider
|
|
import androidx.lifecycle.lifecycleScope
|
|
import androidx.navigation.fragment.findNavController
|
|
import androidx.navigation.fragment.navArgs
|
|
import kotlinx.android.synthetic.main.fragment_select_bookmark_folder.*
|
|
import kotlinx.android.synthetic.main.fragment_select_bookmark_folder.view.*
|
|
import kotlinx.coroutines.Dispatchers.IO
|
|
import kotlinx.coroutines.Dispatchers.Main
|
|
import kotlinx.coroutines.launch
|
|
import kotlinx.coroutines.withContext
|
|
import mozilla.appservices.places.BookmarkRoot
|
|
import mozilla.components.concept.storage.BookmarkNode
|
|
import org.mozilla.fenix.R
|
|
import org.mozilla.fenix.ext.components
|
|
import org.mozilla.fenix.ext.nav
|
|
import org.mozilla.fenix.ext.requireComponents
|
|
import org.mozilla.fenix.library.bookmarks.BookmarksSharedViewModel
|
|
import org.mozilla.fenix.library.bookmarks.DesktopFolders
|
|
import org.mozilla.fenix.library.bookmarks.SignInView
|
|
|
|
class SelectBookmarkFolderFragment : Fragment() {
|
|
|
|
private val sharedViewModel: BookmarksSharedViewModel by activityViewModels {
|
|
ViewModelProvider.NewInstanceFactory() // this is a workaround for #4652
|
|
}
|
|
private var bookmarkNode: BookmarkNode? = null
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
super.onCreate(savedInstanceState)
|
|
setHasOptionsMenu(true)
|
|
}
|
|
|
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
|
val view = inflater.inflate(R.layout.fragment_select_bookmark_folder, container, false)
|
|
|
|
val signInView = SignInView(view.selectBookmarkLayout, findNavController())
|
|
sharedViewModel.signedIn.observe(viewLifecycleOwner, signInView)
|
|
|
|
return view
|
|
}
|
|
|
|
override fun onResume() {
|
|
super.onResume()
|
|
activity?.title = getString(R.string.bookmark_select_folder_fragment_label)
|
|
(activity as? AppCompatActivity)?.supportActionBar?.show()
|
|
|
|
val accountManager = requireComponents.backgroundServices.accountManager
|
|
sharedViewModel.observeAccountManager(accountManager, owner = this)
|
|
|
|
lifecycleScope.launch(Main) {
|
|
bookmarkNode = withContext(IO) {
|
|
val context = requireContext()
|
|
context.components.core.bookmarksStorage
|
|
.getTree(BookmarkRoot.Root.id, recursive = true)
|
|
?.let { DesktopFolders(context, showMobileRoot = true).withOptionalDesktopFolders(it) }
|
|
}
|
|
activity?.title = bookmarkNode?.title ?: getString(R.string.library_bookmarks)
|
|
val adapter = SelectBookmarkFolderAdapter(sharedViewModel)
|
|
recylerViewBookmarkFolders.adapter = adapter
|
|
adapter.updateData(bookmarkNode)
|
|
}
|
|
}
|
|
|
|
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
val args: SelectBookmarkFolderFragmentArgs by navArgs()
|
|
if (!args.visitedAddBookmark) {
|
|
inflater.inflate(R.menu.bookmarks_select_folder, menu)
|
|
}
|
|
}
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
return when (item.itemId) {
|
|
R.id.add_folder_button -> {
|
|
lifecycleScope.launch(Main) {
|
|
nav(
|
|
R.id.bookmarkSelectFolderFragment,
|
|
SelectBookmarkFolderFragmentDirections
|
|
.actionBookmarkSelectFolderFragmentToBookmarkAddFolderFragment()
|
|
)
|
|
}
|
|
true
|
|
}
|
|
else -> super.onOptionsItemSelected(item)
|
|
}
|
|
}
|
|
}
|