mirror of
https://github.com/fork-maintainers/iceraven-browser
synced 2024-11-05 21:20:45 +00:00
Wire up UI to make add-on installation cancelable
This commit is contained in:
parent
8c73218822
commit
d16c70d8be
@ -18,7 +18,6 @@ import androidx.recyclerview.widget.LinearLayoutManager
|
||||
import kotlinx.android.synthetic.main.fragment_add_ons_management.*
|
||||
import kotlinx.android.synthetic.main.fragment_add_ons_management.view.*
|
||||
import kotlinx.android.synthetic.main.overlay_add_on_progress.view.*
|
||||
import kotlinx.coroutines.CoroutineScope
|
||||
import kotlinx.coroutines.Dispatchers
|
||||
import kotlinx.coroutines.Dispatchers.IO
|
||||
import kotlinx.coroutines.launch
|
||||
@ -35,6 +34,7 @@ import org.mozilla.fenix.ext.getRootView
|
||||
import org.mozilla.fenix.ext.settings
|
||||
import org.mozilla.fenix.ext.showToolbar
|
||||
import org.mozilla.fenix.theme.ThemeManager
|
||||
import java.util.concurrent.CancellationException
|
||||
|
||||
/**
|
||||
* Fragment use for managing add-ons.
|
||||
@ -46,7 +46,6 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
|
||||
* Whether or not an add-on installation is in progress.
|
||||
*/
|
||||
private var isInstallationInProgress = false
|
||||
private var scope: CoroutineScope? = null
|
||||
private var adapter: AddonsManagerAdapter? = null
|
||||
|
||||
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||
@ -244,7 +243,7 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
|
||||
|
||||
isInstallationInProgress = true
|
||||
|
||||
requireContext().components.addonManager.installAddon(
|
||||
val installOperation = requireContext().components.addonManager.installAddon(
|
||||
addon,
|
||||
onSuccess = {
|
||||
runIfFragmentIsAttached {
|
||||
@ -254,21 +253,33 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management),
|
||||
showInstallationDialog(it)
|
||||
}
|
||||
},
|
||||
onError = { _, _ ->
|
||||
onError = { _, e ->
|
||||
this@AddonsManagementFragment.view?.let { view ->
|
||||
val rootView = activity?.getRootView() ?: view
|
||||
showSnackBar(
|
||||
rootView,
|
||||
getString(
|
||||
R.string.mozac_feature_addons_failed_to_install,
|
||||
addon.translatedName
|
||||
// No need to display an error message if installation was cancelled by the user.
|
||||
if (e !is CancellationException) {
|
||||
val rootView = activity?.getRootView() ?: view
|
||||
showSnackBar(
|
||||
rootView,
|
||||
getString(
|
||||
R.string.mozac_feature_addons_failed_to_install,
|
||||
addon.translatedName
|
||||
)
|
||||
)
|
||||
)
|
||||
}
|
||||
addonProgressOverlay?.visibility = View.GONE
|
||||
isInstallationInProgress = false
|
||||
}
|
||||
}
|
||||
)
|
||||
|
||||
addonProgressOverlay.cancel_button.setOnClickListener {
|
||||
lifecycleScope.launch(Dispatchers.Main) {
|
||||
// Hide the installation progress overlay once cancellation is successful.
|
||||
if (installOperation.cancel().await()) {
|
||||
addonProgressOverlay.visibility = View.GONE
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun announceForAccessibility(announcementText: CharSequence) {
|
||||
|
@ -9,16 +9,34 @@
|
||||
android:layout_height="wrap_content"
|
||||
android:elevation="1dp">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_ons_overlay_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:drawablePadding="8dp"
|
||||
android:gravity="start|center_vertical"
|
||||
android:padding="16dp"
|
||||
android:text="@string/mozac_add_on_install_progress_caption"
|
||||
app:drawableStartCompat="@drawable/mozac_ic_extensions_black" />
|
||||
<RelativeLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/add_ons_overlay_text"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_marginStart="8dp"
|
||||
android:layout_marginEnd="8dp"
|
||||
android:drawablePadding="8dp"
|
||||
android:gravity="start|center_vertical"
|
||||
android:padding="16dp"
|
||||
android:text="@string/mozac_add_on_install_progress_caption"
|
||||
app:drawableStartCompat="@drawable/mozac_ic_extensions_black" />
|
||||
|
||||
<Button
|
||||
android:id="@+id/cancel_button"
|
||||
style="?android:attr/borderlessButtonStyle"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_below="@id/add_ons_overlay_text"
|
||||
android:layout_alignParentEnd="true"
|
||||
android:layout_marginEnd="16dp"
|
||||
android:layout_marginBottom="16dp"
|
||||
android:text="@string/mozac_feature_addons_install_addon_dialog_cancel"
|
||||
android:textAllCaps="false" />
|
||||
|
||||
</RelativeLayout>
|
||||
|
||||
</androidx.cardview.widget.CardView>
|
||||
|
Loading…
Reference in New Issue
Block a user