diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a917b6674..2bbfb8b35 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -19,7 +19,7 @@ jobs: - name: Setup Java uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 17 distribution: temurin - name: Install Android SDK with pieces Gradle skips @@ -43,7 +43,7 @@ jobs: # See and # The runner seems to have ~6 gigs of memory, so we make sure to stay under that. # We have Java 11 so we don't have a perm size anymore. - GRADLE_OPTS: -Dorg.gradle.jvmargs="-XX:MaxMetaspaceSize=1g -Xms2g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dev/stderr" + GRADLE_OPTS: -Dorg.gradle.jvmargs="-XX:MaxMetaspaceSize=2g -Xms1g -Xmx3g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dev/stderr" with: gradle-home-cache-cleanup: true gradle-executable: /usr/bin/time diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index f9fdeb3aa..6a3f311ec 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -17,7 +17,7 @@ jobs: - name: Setup Java uses: actions/setup-java@v3 with: - java-version: 11 + java-version: 17 distribution: temurin - name: Install Android SDK with pieces Gradle skips @@ -41,7 +41,7 @@ jobs: # See and # The runner seems to have ~6 gigs of memory, so we make sure to stay under that. # We have Java 11 so we don't have a perm size anymore. - GRADLE_OPTS: -Dorg.gradle.jvmargs="-XX:MaxMetaspaceSize=1g -Xms2g -Xmx4g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dev/stderr" + GRADLE_OPTS: -Dorg.gradle.jvmargs="-XX:MaxMetaspaceSize=2g -Xms1g -Xmx3g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dev/stderr" with: gradle-home-cache-cleanup: true gradle-executable: /usr/bin/time diff --git a/android-components b/android-components index 51fe6a7e4..3b06ad680 160000 --- a/android-components +++ b/android-components @@ -1 +1 @@ -Subproject commit 51fe6a7e4c1e4d01946aadddf21b788e8ce7fff7 +Subproject commit 3b06ad6808a63083161cbce1cfbdac71afed2e57 diff --git a/app/src/forkRelease/res/drawable/animated_splash_screen.xml b/app/src/forkRelease/res/drawable/animated_splash_screen.xml new file mode 100644 index 000000000..e71cf9e92 --- /dev/null +++ b/app/src/forkRelease/res/drawable/animated_splash_screen.xml @@ -0,0 +1,516 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/java/io/github/forkmaintainers/iceraven/components/PagedAddonInstallationDialogFragment.kt b/app/src/main/java/io/github/forkmaintainers/iceraven/components/PagedAddonInstallationDialogFragment.kt index 27b3a6168..1b22f6abc 100644 --- a/app/src/main/java/io/github/forkmaintainers/iceraven/components/PagedAddonInstallationDialogFragment.kt +++ b/app/src/main/java/io/github/forkmaintainers/iceraven/components/PagedAddonInstallationDialogFragment.kt @@ -6,6 +6,7 @@ package io.github.forkmaintainers.iceraven.components import android.annotation.SuppressLint import android.app.Dialog +import android.content.DialogInterface import android.graphics.Bitmap import android.graphics.Color import android.graphics.drawable.BitmapDrawable @@ -68,6 +69,11 @@ class PagedAddonInstallationDialogFragment : AppCompatDialogFragment() { */ var onConfirmButtonClicked: ((Addon, Boolean) -> Unit)? = null + /** + * A lambda called when the dialog is dismissed. + */ + var onDismissed: (() -> Unit)? = null + /** * Reference to the application's [PagedAddonInstallationDialogFragment] to fetch add-on icons. */ @@ -114,6 +120,11 @@ class PagedAddonInstallationDialogFragment : AppCompatDialogFragment() { iconJob?.cancel() } + override fun onCancel(dialog: DialogInterface) { + super.onCancel(dialog) + onDismissed?.invoke() + } + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val sheetDialog = Dialog(requireContext()) sheetDialog.requestWindowFeature(Window.FEATURE_NO_TITLE) @@ -267,6 +278,7 @@ class PagedAddonInstallationDialogFragment : AppCompatDialogFragment() { gravity = Gravity.BOTTOM, shouldWidthMatchParent = true, ), + onDismissed: (() -> Unit)? = null, onConfirmButtonClicked: ((Addon, Boolean) -> Unit)? = null, ): PagedAddonInstallationDialogFragment { val fragment = PagedAddonInstallationDialogFragment() @@ -290,6 +302,7 @@ class PagedAddonInstallationDialogFragment : AppCompatDialogFragment() { } } fragment.onConfirmButtonClicked = onConfirmButtonClicked + fragment.onDismissed = onDismissed fragment.arguments = arguments fragment.addonCollectionProvider = addonCollectionProvider return fragment diff --git a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt index 7d7c8dc80..c7028d7c4 100644 --- a/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt +++ b/app/src/main/java/org/mozilla/fenix/addons/AddonsManagementFragment.kt @@ -9,7 +9,11 @@ import android.graphics.Typeface import android.graphics.fonts.FontStyle.FONT_WEIGHT_MEDIUM import android.os.Build import android.os.Bundle +import android.view.Menu +import android.view.MenuInflater +import android.view.MenuItem import android.view.View +import android.view.inputmethod.EditorInfo import androidx.annotation.VisibleForTesting import androidx.appcompat.widget.SearchView import androidx.core.view.MenuHost @@ -29,9 +33,10 @@ import kotlinx.coroutines.launch import mozilla.components.concept.engine.webextension.WebExtensionInstallException import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.AddonManagerException -import mozilla.components.feature.addons.ui.AddonsManagerAdapter import mozilla.components.feature.addons.ui.translateName import mozilla.components.support.base.feature.ViewBoundFeatureWrapper +import mozilla.components.support.base.log.logger.Logger +import mozilla.components.support.ktx.android.view.hideKeyboard import org.mozilla.fenix.BuildConfig import org.mozilla.fenix.Config import org.mozilla.fenix.R @@ -45,6 +50,7 @@ import org.mozilla.fenix.ext.showToolbar import org.mozilla.fenix.extension.WebExtensionPromptFeature import org.mozilla.fenix.theme.ThemeManager import java.util.concurrent.CancellationException +import java.util.Locale /** * Fragment use for managing add-ons. @@ -59,7 +65,6 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management) private var binding: FragmentAddOnsManagementBinding? = null private val webExtensionPromptFeature = ViewBoundFeatureWrapper() - private var addons: List = emptyList() /** * Whether or not an add-on installation is in progress. @@ -89,7 +94,7 @@ class AddonsManagementFragment : Fragment(R.layout.fragment_add_ons_management) webExtensionPromptFeature.set( feature = WebExtensionPromptFeature( store = requireComponents.core.store, - provideAddons = { addons }, + provideAddons = { addons!! }, context = requireContext(), fragmentManager = parentFragmentManager, view = view, diff --git a/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt b/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt index 586081fa3..c1d58f910 100644 --- a/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt +++ b/app/src/main/java/org/mozilla/fenix/extension/WebExtensionPromptFeature.kt @@ -18,7 +18,7 @@ import mozilla.components.browser.state.state.extension.WebExtensionPromptReques import mozilla.components.browser.state.store.BrowserStore import mozilla.components.feature.addons.Addon import mozilla.components.feature.addons.toInstalledState -import mozilla.components.feature.addons.ui.AddonInstallationDialogFragment +import io.github.forkmaintainers.iceraven.components.PagedAddonInstallationDialogFragment as AddonInstallationDialogFragment import mozilla.components.feature.addons.ui.PermissionsDialogFragment import mozilla.components.lib.state.ext.flowScoped import mozilla.components.support.base.feature.LifecycleAwareFeature @@ -34,7 +34,7 @@ import java.lang.ref.WeakReference */ class WebExtensionPromptFeature( private val store: BrowserStore, - private val provideAddons: suspend () -> List, + private val provideAddons: suspend () -> List?, private val context: Context, private val view: View, private val fragmentManager: FragmentManager, @@ -56,7 +56,7 @@ class WebExtensionPromptFeature( flow.mapNotNull { state -> state.webExtensionPromptRequest }.distinctUntilChanged().collect { promptRequest -> - val addon = provideAddons().find { addon -> + val addon = provideAddons()?.find { addon -> addon.id == promptRequest.extension.id } when (promptRequest) {