parent
6b349a535a
commit
0000d6a782
|
@ -6,7 +6,6 @@ package org.mozilla.fenix.ext
|
||||||
|
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers.IO
|
|
||||||
import kotlinx.coroutines.Dispatchers.Main
|
import kotlinx.coroutines.Dispatchers.Main
|
||||||
import kotlinx.coroutines.delay
|
import kotlinx.coroutines.delay
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
|
@ -19,7 +18,7 @@ fun CoroutineScope.allowUndo(
|
||||||
onCancel: suspend () -> Unit = {},
|
onCancel: suspend () -> Unit = {},
|
||||||
operation: suspend () -> Unit
|
operation: suspend () -> Unit
|
||||||
) {
|
) {
|
||||||
val undoJob = launch(IO) {
|
val undoJob = launch(Main) {
|
||||||
delay(UNDO_DELAY)
|
delay(UNDO_DELAY)
|
||||||
operation.invoke()
|
operation.invoke()
|
||||||
}
|
}
|
||||||
|
|
|
@ -7,28 +7,28 @@ package org.mozilla.fenix.home
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.graphics.drawable.BitmapDrawable
|
import android.graphics.drawable.BitmapDrawable
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.BOTTOM
|
|
||||||
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.TOP
|
|
||||||
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.START
|
|
||||||
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.END
|
|
||||||
import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.PARENT_ID
|
|
||||||
import android.view.LayoutInflater
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup
|
import android.view.ViewGroup
|
||||||
import androidx.appcompat.app.AppCompatActivity
|
import androidx.appcompat.app.AppCompatActivity
|
||||||
|
import androidx.constraintlayout.widget.ConstraintLayout.LayoutParams.PARENT_ID
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
import androidx.navigation.Navigation
|
import androidx.navigation.Navigation
|
||||||
import kotlinx.android.synthetic.main.fragment_home.*
|
import kotlinx.android.synthetic.main.fragment_home.*
|
||||||
import kotlinx.android.synthetic.main.fragment_home.view.*
|
import kotlinx.android.synthetic.main.fragment_home.view.*
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
|
import kotlinx.coroutines.Dispatchers
|
||||||
import kotlinx.coroutines.Job
|
import kotlinx.coroutines.Job
|
||||||
import kotlinx.coroutines.launch
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.Dispatchers
|
|
||||||
import kotlinx.coroutines.runBlocking
|
import kotlinx.coroutines.runBlocking
|
||||||
import mozilla.components.browser.menu.BrowserMenu
|
import mozilla.components.browser.menu.BrowserMenu
|
||||||
import mozilla.components.browser.session.Session
|
import mozilla.components.browser.session.Session
|
||||||
import mozilla.components.browser.session.SessionManager
|
import mozilla.components.browser.session.SessionManager
|
||||||
|
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.BOTTOM
|
||||||
|
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.END
|
||||||
|
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.START
|
||||||
|
import org.jetbrains.anko.constraint.layout.ConstraintSetBuilder.Side.TOP
|
||||||
import org.jetbrains.anko.constraint.layout.applyConstraintSet
|
import org.jetbrains.anko.constraint.layout.applyConstraintSet
|
||||||
import org.mozilla.fenix.BrowserDirection
|
import org.mozilla.fenix.BrowserDirection
|
||||||
import org.mozilla.fenix.BrowsingModeManager
|
import org.mozilla.fenix.BrowsingModeManager
|
||||||
|
@ -64,6 +64,9 @@ class HomeFragment : Fragment(), CoroutineScope {
|
||||||
private val bus = ActionBusFactory.get(this)
|
private val bus = ActionBusFactory.get(this)
|
||||||
private var sessionObserver: SessionManager.Observer? = null
|
private var sessionObserver: SessionManager.Observer? = null
|
||||||
private var homeMenu: HomeMenu? = null
|
private var homeMenu: HomeMenu? = null
|
||||||
|
|
||||||
|
var deleteSessionJob: (suspend () -> Unit)? = null
|
||||||
|
|
||||||
private lateinit var sessionControlComponent: SessionControlComponent
|
private lateinit var sessionControlComponent: SessionControlComponent
|
||||||
|
|
||||||
private lateinit var job: Job
|
private lateinit var job: Job
|
||||||
|
@ -203,7 +206,16 @@ class HomeFragment : Fragment(), CoroutineScope {
|
||||||
(activity as HomeActivity).openToBrowser(BrowserDirection.FromHome)
|
(activity as HomeActivity).openToBrowser(BrowserDirection.FromHome)
|
||||||
}
|
}
|
||||||
is TabAction.Close -> {
|
is TabAction.Close -> {
|
||||||
removeTabWithUndo(action.sessionId)
|
if (deleteSessionJob == null) removeTabWithUndo(action.sessionId) else {
|
||||||
|
deleteSessionJob?.let {
|
||||||
|
launch {
|
||||||
|
it.invoke()
|
||||||
|
}.invokeOnCompletion {
|
||||||
|
deleteSessionJob = null
|
||||||
|
removeTabWithUndo(action.sessionId)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
is TabAction.Share -> {
|
is TabAction.Share -> {
|
||||||
requireComponents.core.sessionManager.findSessionById(action.sessionId)
|
requireComponents.core.sessionManager.findSessionById(action.sessionId)
|
||||||
|
@ -323,6 +335,13 @@ class HomeFragment : Fragment(), CoroutineScope {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
deleteSessionJob = {
|
||||||
|
sessionManager.findSessionById(sessionId)
|
||||||
|
?.let { session ->
|
||||||
|
sessionManager.remove(session)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
CoroutineScope(Dispatchers.Main).allowUndo(
|
CoroutineScope(Dispatchers.Main).allowUndo(
|
||||||
view!!, getString(R.string.snackbar_tab_deleted),
|
view!!, getString(R.string.snackbar_tab_deleted),
|
||||||
getString(R.string.snackbar_deleted_undo), { emitSessionChanges() }
|
getString(R.string.snackbar_deleted_undo), { emitSessionChanges() }
|
||||||
|
|
Loading…
Reference in New Issue