2020-10-09 13:53:58 +00:00
|
|
|
package oppen.ariane.ui.bookmarks
|
2020-09-10 21:20:24 +00:00
|
|
|
|
|
|
|
import android.content.Context
|
2020-09-11 19:49:30 +00:00
|
|
|
import android.os.Handler
|
|
|
|
import android.os.Looper
|
2020-09-10 21:20:24 +00:00
|
|
|
import android.view.View
|
|
|
|
import androidx.appcompat.app.AppCompatDialog
|
2020-09-11 21:02:54 +00:00
|
|
|
import androidx.appcompat.widget.PopupMenu
|
2020-09-10 21:20:24 +00:00
|
|
|
import androidx.recyclerview.widget.LinearLayoutManager
|
2020-09-12 20:10:30 +00:00
|
|
|
import com.google.android.material.snackbar.BaseTransientBottomBar
|
|
|
|
import com.google.android.material.snackbar.Snackbar
|
2020-09-10 21:20:24 +00:00
|
|
|
import kotlinx.android.synthetic.main.dialog_bookmarks.view.*
|
2020-10-09 13:53:58 +00:00
|
|
|
import oppen.ariane.R
|
|
|
|
import oppen.ariane.io.bookmarks.Bookmark
|
|
|
|
import oppen.ariane.io.bookmarks.BookmarksDatasource
|
2020-09-10 21:20:24 +00:00
|
|
|
|
|
|
|
|
|
|
|
class BookmarksDialog(
|
|
|
|
context: Context,
|
2020-09-11 21:02:54 +00:00
|
|
|
private val bookmarkDatasource: BookmarksDatasource,
|
2020-09-11 19:49:30 +00:00
|
|
|
onBookmark: (bookmark: Bookmark) -> Unit): AppCompatDialog(context, R.style.FSDialog) {
|
|
|
|
|
2020-09-11 21:02:54 +00:00
|
|
|
var bookmarksAdapter: BookmarksAdapter
|
2020-09-10 21:20:24 +00:00
|
|
|
|
2020-09-12 20:10:30 +00:00
|
|
|
var view: View = View.inflate(context, R.layout.dialog_bookmarks, null)
|
|
|
|
|
2020-09-10 21:20:24 +00:00
|
|
|
init {
|
|
|
|
|
|
|
|
setContentView(view)
|
|
|
|
|
|
|
|
view.bookmarks_toolbar.setNavigationIcon(R.drawable.vector_close)
|
|
|
|
view.bookmarks_toolbar.setNavigationOnClickListener {
|
|
|
|
dismiss()
|
|
|
|
}
|
|
|
|
|
|
|
|
//None as yet
|
|
|
|
view.bookmarks_toolbar.inflateMenu(R.menu.add_bookmarks)
|
2020-11-11 15:22:33 +00:00
|
|
|
view.bookmarks_toolbar.setOnMenuItemClickListener {_ ->
|
2020-09-10 21:20:24 +00:00
|
|
|
true
|
2020-09-11 19:49:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
view.bookmarks_recycler.layoutManager = LinearLayoutManager(context)
|
|
|
|
|
|
|
|
bookmarksAdapter = BookmarksAdapter({ bookmark ->
|
|
|
|
//onBookmark
|
|
|
|
onBookmark(bookmark)
|
|
|
|
dismiss()
|
|
|
|
|
2020-09-11 21:02:54 +00:00
|
|
|
}){ view, bookmark, isFirst, isLast ->
|
2020-09-11 19:49:30 +00:00
|
|
|
//onOverflow
|
2020-09-11 21:02:54 +00:00
|
|
|
val bookmarkOverflow = PopupMenu(context, view)
|
2020-09-11 19:49:30 +00:00
|
|
|
|
2020-09-11 21:02:54 +00:00
|
|
|
bookmarkOverflow.inflate(R.menu.menu_bookmark)
|
|
|
|
|
|
|
|
if(isFirst) bookmarkOverflow.menu.removeItem(R.id.menu_bookmark_move_up)
|
|
|
|
if(isLast) bookmarkOverflow.menu.removeItem(R.id.menu_bookmark_move_down)
|
|
|
|
|
|
|
|
bookmarkOverflow.setOnMenuItemClickListener { menuItem ->
|
|
|
|
when(menuItem.itemId){
|
2020-09-12 20:10:30 +00:00
|
|
|
R.id.menu_bookmark_edit -> edit(bookmark)
|
|
|
|
R.id.menu_bookmark_delete -> delete(bookmark)
|
2020-09-11 21:02:54 +00:00
|
|
|
R.id.menu_bookmark_move_up -> moveUp(bookmark)
|
|
|
|
R.id.menu_bookmark_move_down-> moveDown(bookmark)
|
|
|
|
}
|
|
|
|
true
|
|
|
|
}
|
|
|
|
|
|
|
|
bookmarkOverflow.show()
|
2020-09-11 19:49:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
view.bookmarks_recycler.adapter = bookmarksAdapter
|
2020-09-10 21:20:24 +00:00
|
|
|
|
2020-09-11 19:49:30 +00:00
|
|
|
bookmarkDatasource.get { bookmarks ->
|
2020-09-11 21:02:54 +00:00
|
|
|
|
2020-09-11 19:49:30 +00:00
|
|
|
Handler(Looper.getMainLooper()).post {
|
|
|
|
bookmarksAdapter.update(bookmarks)
|
|
|
|
}
|
2020-09-10 21:20:24 +00:00
|
|
|
}
|
|
|
|
}
|
2020-09-11 21:02:54 +00:00
|
|
|
|
2020-09-12 20:10:30 +00:00
|
|
|
private fun edit(bookmark: Bookmark){
|
2020-09-12 20:51:41 +00:00
|
|
|
BookmarkDialog(context, BookmarkDialog.mode_edit, null, bookmark.uri.toString(), bookmark.label){ label, uri ->
|
2020-10-09 13:53:58 +00:00
|
|
|
bookmarkDatasource.update(bookmark, label, uri){
|
|
|
|
bookmarkDatasource.get {bookmarks ->
|
|
|
|
Handler(Looper.getMainLooper()).post {
|
|
|
|
bookmarksAdapter.update(bookmarks)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-09-12 20:51:41 +00:00
|
|
|
}.show()
|
2020-09-12 20:10:30 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
*
|
|
|
|
* Bookmark isn't actually deleted from the DB until the Snackbar disappears. Which is nice.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
private fun delete(bookmark: Bookmark){
|
|
|
|
//OnDelete
|
|
|
|
bookmarksAdapter.hide(bookmark)
|
|
|
|
Snackbar.make(view, "Deleted ${bookmark.label}", Snackbar.LENGTH_SHORT).addCallback(object: Snackbar.Callback() {
|
|
|
|
override fun onDismissed(transientBottomBar: Snackbar?, event: Int) = when (event) {
|
|
|
|
BaseTransientBottomBar.BaseCallback.DISMISS_EVENT_ACTION -> bookmarksAdapter.show(bookmark)
|
|
|
|
else -> bookmarkDatasource.delete(bookmark){
|
2020-10-09 13:53:58 +00:00
|
|
|
Handler(Looper.getMainLooper()).post {
|
|
|
|
bookmarksAdapter.remove(bookmark)
|
|
|
|
}
|
2020-09-12 20:10:30 +00:00
|
|
|
}
|
|
|
|
}
|
|
|
|
}).setAction("Undo"){
|
|
|
|
//Action listener unused
|
|
|
|
}.show()
|
|
|
|
}
|
|
|
|
|
2020-09-11 21:02:54 +00:00
|
|
|
private fun moveUp(bookmark: Bookmark){
|
|
|
|
bookmarkDatasource.moveUp(bookmark){
|
|
|
|
bookmarkDatasource.get { bookmarks ->
|
|
|
|
Handler(Looper.getMainLooper()).post {
|
|
|
|
bookmarksAdapter.update(bookmarks)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private fun moveDown(bookmark: Bookmark){
|
|
|
|
bookmarkDatasource.moveDown(bookmark){
|
|
|
|
bookmarkDatasource.get { bookmarks ->
|
|
|
|
Handler(Looper.getMainLooper()).post {
|
|
|
|
bookmarksAdapter.update(bookmarks)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2020-09-10 21:20:24 +00:00
|
|
|
}
|