2019-04-04 22:40:39 +02:00
|
|
|
/* This Source Code Form is subject to the terms of the Mozilla Public
|
2019-07-12 20:38:15 +02:00
|
|
|
* 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/. */
|
2019-04-04 22:40:39 +02:00
|
|
|
|
|
|
|
package org.mozilla.fenix.library.bookmarks.addfolder
|
|
|
|
|
|
|
|
import android.os.Bundle
|
|
|
|
import android.view.Menu
|
|
|
|
import android.view.MenuInflater
|
|
|
|
import android.view.MenuItem
|
2019-10-21 19:06:08 +02:00
|
|
|
import android.view.View
|
|
|
|
import android.view.View.GONE
|
2019-04-04 22:40:39 +02:00
|
|
|
import androidx.fragment.app.Fragment
|
2019-06-13 02:14:46 +02:00
|
|
|
import androidx.fragment.app.activityViewModels
|
2019-09-01 00:41:50 +02:00
|
|
|
import androidx.lifecycle.ViewModelProvider
|
2019-06-13 02:14:46 +02:00
|
|
|
import androidx.lifecycle.lifecycleScope
|
2019-04-04 22:40:39 +02:00
|
|
|
import androidx.navigation.Navigation
|
2019-10-21 19:06:08 +02:00
|
|
|
import kotlinx.android.synthetic.main.fragment_edit_bookmark.*
|
2019-04-04 22:40:39 +02:00
|
|
|
import kotlinx.coroutines.Dispatchers.IO
|
|
|
|
import kotlinx.coroutines.Dispatchers.Main
|
|
|
|
import kotlinx.coroutines.launch
|
2019-10-21 19:06:08 +02:00
|
|
|
import kotlinx.coroutines.withContext
|
2019-04-04 22:40:39 +02:00
|
|
|
import mozilla.appservices.places.BookmarkRoot
|
2019-11-12 10:56:32 +01:00
|
|
|
import mozilla.components.support.ktx.android.view.hideKeyboard
|
2019-11-16 21:45:25 +01:00
|
|
|
import mozilla.components.support.ktx.android.view.showKeyboard
|
2019-04-04 22:40:39 +02:00
|
|
|
import org.mozilla.fenix.R
|
2019-04-17 19:37:36 +02:00
|
|
|
import org.mozilla.fenix.components.metrics.Event
|
2019-06-06 21:40:10 +02:00
|
|
|
import org.mozilla.fenix.ext.nav
|
2019-04-04 22:40:39 +02:00
|
|
|
import org.mozilla.fenix.ext.requireComponents
|
2019-11-25 21:36:47 +01:00
|
|
|
import org.mozilla.fenix.ext.showToolbar
|
2019-04-04 22:40:39 +02:00
|
|
|
import org.mozilla.fenix.library.bookmarks.BookmarksSharedViewModel
|
|
|
|
|
2019-10-06 19:57:41 +02:00
|
|
|
/**
|
|
|
|
* Menu to create a new bookmark folder.
|
|
|
|
*/
|
2019-10-21 19:06:08 +02:00
|
|
|
class AddBookmarkFolderFragment : Fragment(R.layout.fragment_edit_bookmark) {
|
2019-04-04 22:40:39 +02:00
|
|
|
|
2019-09-01 00:41:50 +02:00
|
|
|
private val sharedViewModel: BookmarksSharedViewModel by activityViewModels {
|
|
|
|
ViewModelProvider.NewInstanceFactory() // this is a workaround for #4652
|
|
|
|
}
|
2019-04-04 22:40:39 +02:00
|
|
|
|
|
|
|
override fun onCreate(savedInstanceState: Bundle?) {
|
|
|
|
super.onCreate(savedInstanceState)
|
|
|
|
setHasOptionsMenu(true)
|
|
|
|
}
|
|
|
|
|
2019-10-21 19:06:08 +02:00
|
|
|
/**
|
|
|
|
* Hides fields for bookmark items present in the shared layout file.
|
|
|
|
*/
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
|
|
bookmarkUrlLabel.visibility = GONE
|
|
|
|
bookmarkUrlEdit.visibility = GONE
|
2019-11-16 21:45:25 +01:00
|
|
|
bookmarkNameEdit.showKeyboard()
|
2019-10-21 19:06:08 +02:00
|
|
|
}
|
|
|
|
|
2019-04-04 22:40:39 +02:00
|
|
|
override fun onResume() {
|
|
|
|
super.onResume()
|
2019-11-25 21:36:47 +01:00
|
|
|
showToolbar(getString(R.string.bookmark_add_folder_fragment_label))
|
2019-04-04 22:40:39 +02:00
|
|
|
|
2020-04-22 05:41:20 +02:00
|
|
|
viewLifecycleOwner.lifecycleScope.launch(Main) {
|
2019-10-21 19:06:08 +02:00
|
|
|
sharedViewModel.selectedFolder = withContext(IO) {
|
|
|
|
sharedViewModel.selectedFolder
|
|
|
|
?: requireComponents.core.bookmarksStorage.getTree(BookmarkRoot.Mobile.id)
|
|
|
|
}
|
|
|
|
|
|
|
|
bookmarkParentFolderSelector.text = sharedViewModel.selectedFolder!!.title
|
|
|
|
bookmarkParentFolderSelector.setOnClickListener {
|
|
|
|
nav(
|
|
|
|
R.id.bookmarkAddFolderFragment,
|
|
|
|
AddBookmarkFolderFragmentDirections
|
|
|
|
.actionBookmarkAddFolderFragmentToBookmarkSelectFolderFragment(
|
|
|
|
BookmarkRoot.Root.id,
|
|
|
|
true
|
|
|
|
)
|
|
|
|
)
|
2019-04-04 22:40:39 +02:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2019-11-16 21:34:58 +01:00
|
|
|
override fun onPause() {
|
|
|
|
super.onPause()
|
|
|
|
bookmarkNameEdit.hideKeyboard()
|
|
|
|
}
|
|
|
|
|
2019-04-04 22:40:39 +02:00
|
|
|
override fun onCreateOptionsMenu(menu: Menu, inflater: MenuInflater) {
|
|
|
|
inflater.inflate(R.menu.bookmarks_add_folder, menu)
|
|
|
|
}
|
|
|
|
|
|
|
|
override fun onOptionsItemSelected(item: MenuItem): Boolean {
|
|
|
|
return when (item.itemId) {
|
|
|
|
R.id.confirm_add_folder_button -> {
|
2019-10-21 19:06:08 +02:00
|
|
|
if (bookmarkNameEdit.text.isNullOrBlank()) {
|
|
|
|
bookmarkNameEdit.error =
|
2019-07-16 19:23:19 +02:00
|
|
|
getString(R.string.bookmark_empty_title_error)
|
2019-04-04 22:40:39 +02:00
|
|
|
return true
|
|
|
|
}
|
2019-11-12 10:56:32 +01:00
|
|
|
this.view?.hideKeyboard()
|
2020-04-22 05:41:20 +02:00
|
|
|
viewLifecycleOwner.lifecycleScope.launch(IO) {
|
2019-04-19 07:11:01 +02:00
|
|
|
val newGuid = requireComponents.core.bookmarksStorage.addFolder(
|
2019-10-21 19:06:08 +02:00
|
|
|
sharedViewModel.selectedFolder!!.guid, bookmarkNameEdit.text.toString(), null
|
2019-04-04 22:40:39 +02:00
|
|
|
)
|
2019-04-19 07:11:01 +02:00
|
|
|
sharedViewModel.selectedFolder = requireComponents.core.bookmarksStorage.getTree(newGuid)
|
2019-04-17 19:37:36 +02:00
|
|
|
requireComponents.analytics.metrics.track(Event.AddBookmarkFolder)
|
2019-10-21 19:06:08 +02:00
|
|
|
withContext(Main) {
|
2019-04-04 22:40:39 +02:00
|
|
|
Navigation.findNavController(requireActivity(), R.id.container).popBackStack()
|
|
|
|
}
|
|
|
|
}
|
|
|
|
true
|
|
|
|
}
|
|
|
|
else -> super.onOptionsItemSelected(item)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|