Confirming exit from app
This commit is contained in:
@@ -4,6 +4,7 @@ import android.os.Bundle
|
|||||||
import android.view.MenuItem
|
import android.view.MenuItem
|
||||||
import android.view.View
|
import android.view.View
|
||||||
import android.view.ViewGroup.MarginLayoutParams
|
import android.view.ViewGroup.MarginLayoutParams
|
||||||
|
import android.widget.Toast
|
||||||
import androidx.activity.result.ActivityResultCallback
|
import androidx.activity.result.ActivityResultCallback
|
||||||
import androidx.annotation.IdRes
|
import androidx.annotation.IdRes
|
||||||
import androidx.appcompat.view.ActionMode
|
import androidx.appcompat.view.ActionMode
|
||||||
@@ -20,6 +21,8 @@ import com.google.android.material.appbar.AppBarLayout.LayoutParams.*
|
|||||||
import com.google.android.material.navigation.NavigationBarView
|
import com.google.android.material.navigation.NavigationBarView
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
|
import kotlinx.coroutines.delay
|
||||||
|
import kotlinx.coroutines.launch
|
||||||
import kotlinx.coroutines.withContext
|
import kotlinx.coroutines.withContext
|
||||||
import org.koin.android.ext.android.get
|
import org.koin.android.ext.android.get
|
||||||
import org.koin.androidx.viewmodel.ext.android.viewModel
|
import org.koin.androidx.viewmodel.ext.android.viewModel
|
||||||
@@ -60,6 +63,8 @@ class MainActivity :
|
|||||||
View.OnFocusChangeListener,
|
View.OnFocusChangeListener,
|
||||||
SearchSuggestionListener, NavigationBarView.OnItemSelectedListener {
|
SearchSuggestionListener, NavigationBarView.OnItemSelectedListener {
|
||||||
|
|
||||||
|
private var isConfirmingExit: Boolean = false
|
||||||
|
|
||||||
private val viewModel by viewModel<MainViewModel>()
|
private val viewModel by viewModel<MainViewModel>()
|
||||||
private val searchSuggestionViewModel by viewModel<SearchSuggestionViewModel>()
|
private val searchSuggestionViewModel by viewModel<SearchSuggestionViewModel>()
|
||||||
private val voiceInputLauncher = registerForActivityResult(VoiceInputContract(), VoiceInputCallback())
|
private val voiceInputLauncher = registerForActivityResult(VoiceInputContract(), VoiceInputCallback())
|
||||||
@@ -131,6 +136,7 @@ class MainActivity :
|
|||||||
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE)
|
||||||
runOnCommit { onSearchClosed() }
|
runOnCommit { onSearchClosed() }
|
||||||
}
|
}
|
||||||
|
shouldHandleExitConfirmation() -> lifecycleScope.launch { resetExitConfirmation() }
|
||||||
else -> super.onBackPressed()
|
else -> super.onBackPressed()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -147,6 +153,19 @@ class MainActivity :
|
|||||||
return super.onOptionsItemSelected(item)
|
return super.onOptionsItemSelected(item)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private suspend fun resetExitConfirmation() {
|
||||||
|
isConfirmingExit = true
|
||||||
|
val toast = Toast.makeText(this, R.string.confirm_exit, Toast.LENGTH_LONG)
|
||||||
|
toast.show()
|
||||||
|
delay(2000)
|
||||||
|
toast.cancel()
|
||||||
|
isConfirmingExit = false
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun shouldHandleExitConfirmation(): Boolean {
|
||||||
|
return !isConfirmingExit
|
||||||
|
}
|
||||||
|
|
||||||
override fun onClick(v: View) {
|
override fun onClick(v: View) {
|
||||||
when (v.id) {
|
when (v.id) {
|
||||||
R.id.fab -> viewModel.openLastReader()
|
R.id.fab -> viewModel.openLastReader()
|
||||||
|
|||||||
@@ -337,4 +337,5 @@
|
|||||||
<string name="changelog">Changelog</string>
|
<string name="changelog">Changelog</string>
|
||||||
<string name="explore">Explore</string>
|
<string name="explore">Explore</string>
|
||||||
<string name="tools">Tools</string>
|
<string name="tools">Tools</string>
|
||||||
|
<string name="confirm_exit">Press back again to exit</string>
|
||||||
</resources>
|
</resources>
|
||||||
Reference in New Issue
Block a user