Backed out 9 changesets (bug 1880805, bug 1880792) for gradle-dependencies TL bustages. CLOSED TREE
Backed out changeset f94e6acf0cd3 (bug 1880805) Backed out changeset 22e14524bf1f (bug 1880805) Backed out changeset 774b263652b5 (bug 1880805) Backed out changeset 77fe8fb48620 (bug 1880805) Backed out changeset 3ae77f91197e (bug 1880805) Backed out changeset 1ffaa88f56da (bug 1880805) Backed out changeset 1dee3246c6a2 (bug 1880805) Backed out changeset 9abb09c562ef (bug1880792) Backed out changeset 24a1c7a574c4 (bug1880792)
This commit is contained in:
@@ -125,7 +125,7 @@ allprojects {
|
|||||||
buildId = getBuildId()
|
buildId = getBuildId()
|
||||||
|
|
||||||
buildToolsVersion = mozconfig.substs.ANDROID_BUILD_TOOLS_VERSION
|
buildToolsVersion = mozconfig.substs.ANDROID_BUILD_TOOLS_VERSION
|
||||||
compileSdkVersion = tryInt(mozconfig.substs.ANDROID_COMPILE_SDK)
|
compileSdkVersion = tryInt(mozconfig.substs.ANDROID_TARGET_SDK)
|
||||||
targetSdkVersion = tryInt(mozconfig.substs.ANDROID_TARGET_SDK)
|
targetSdkVersion = tryInt(mozconfig.substs.ANDROID_TARGET_SDK)
|
||||||
minSdkVersion = tryInt(mozconfig.substs.MOZ_ANDROID_MIN_SDK_VERSION)
|
minSdkVersion = tryInt(mozconfig.substs.MOZ_ANDROID_MIN_SDK_VERSION)
|
||||||
manifestPlaceholders = [
|
manifestPlaceholders = [
|
||||||
|
|||||||
@@ -58,8 +58,7 @@ def android_sdk_version():
|
|||||||
# If you think you can't handle the whole set of changes, please reach out to the Release
|
# If you think you can't handle the whole set of changes, please reach out to the Release
|
||||||
# Engineering team.
|
# Engineering team.
|
||||||
return namespace(
|
return namespace(
|
||||||
build_tools_version="35.0.0",
|
build_tools_version="34.0.0",
|
||||||
compile_sdk_version="35",
|
|
||||||
target_sdk_version="34",
|
target_sdk_version="34",
|
||||||
min_sdk_version="21",
|
min_sdk_version="21",
|
||||||
)
|
)
|
||||||
@@ -156,4 +155,3 @@ set_config("ANDROID_SDK_ROOT", android_sdk_root)
|
|||||||
|
|
||||||
set_config("ANDROID_BUILD_TOOLS_VERSION", android_sdk_version.build_tools_version)
|
set_config("ANDROID_BUILD_TOOLS_VERSION", android_sdk_version.build_tools_version)
|
||||||
set_config("ANDROID_TARGET_SDK", android_sdk_version.target_sdk_version)
|
set_config("ANDROID_TARGET_SDK", android_sdk_version.target_sdk_version)
|
||||||
set_config("ANDROID_COMPILE_SDK", android_sdk_version.compile_sdk_version)
|
|
||||||
|
|||||||
@@ -3,6 +3,6 @@ componentsGroupId: "org.mozilla.components"
|
|||||||
|
|
||||||
# Synchronized build configuration for all modules
|
# Synchronized build configuration for all modules
|
||||||
jvmTargetCompatibility: 17
|
jvmTargetCompatibility: 17
|
||||||
compileSdkVersion: 35
|
compileSdkVersion: 34
|
||||||
minSdkVersion: 21
|
minSdkVersion: 21
|
||||||
targetSdkVersion: 34
|
targetSdkVersion: 34
|
||||||
|
|||||||
@@ -282,6 +282,7 @@ class SystemEngineSession(
|
|||||||
// Explicitly set global defaults.
|
// Explicitly set global defaults.
|
||||||
|
|
||||||
cacheMode = LOAD_NO_CACHE
|
cacheMode = LOAD_NO_CACHE
|
||||||
|
databaseEnabled = false
|
||||||
|
|
||||||
setDeprecatedWebSettings(this)
|
setDeprecatedWebSettings(this)
|
||||||
|
|
||||||
@@ -304,8 +305,6 @@ class SystemEngineSession(
|
|||||||
webSettings.saveFormData = false
|
webSettings.saveFormData = false
|
||||||
// Deprecated in API18.
|
// Deprecated in API18.
|
||||||
webSettings.savePassword = false
|
webSettings.savePassword = false
|
||||||
// Deprecated in API35; default value is false.
|
|
||||||
webSettings.databaseEnabled = false
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun setUseWideViewPort(settings: WebSettings, useWideViewPort: Boolean?) {
|
private fun setUseWideViewPort(settings: WebSettings, useWideViewPort: Boolean?) {
|
||||||
|
|||||||
@@ -341,8 +341,6 @@ class BrowserIcons constructor(
|
|||||||
sharedMemoryCache.clear()
|
sharedMemoryCache.clear()
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("DEPRECATION") // Apps are not notified of these levels since API level 34.
|
|
||||||
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1909473
|
|
||||||
override fun onTrimMemory(level: Int) {
|
override fun onTrimMemory(level: Int) {
|
||||||
val shouldClearMemoryCache = when (level) {
|
val shouldClearMemoryCache = when (level) {
|
||||||
// Foreground: The device is running much lower on memory. The app is running and not killable, but the
|
// Foreground: The device is running much lower on memory. The app is running and not killable, but the
|
||||||
|
|||||||
@@ -77,8 +77,6 @@ internal class TrimMemoryMiddleware : Middleware<BrowserState, BrowserAction> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("DEPRECATION") // Apps are not notified of these levels since API level 34.
|
|
||||||
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1909473
|
|
||||||
private fun shouldCloseEngineSessions(level: Int): Boolean {
|
private fun shouldCloseEngineSessions(level: Int): Boolean {
|
||||||
return when (level) {
|
return when (level) {
|
||||||
// Foreground: The device is running extremely low on memory. The app is not yet considered a killable
|
// Foreground: The device is running extremely low on memory. The app is not yet considered a killable
|
||||||
|
|||||||
@@ -192,8 +192,6 @@ class TrimMemoryMiddlewareTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun `TrimMemoryMiddleware - TRIM_MEMORY_RUNNING_CRITICAL`() {
|
fun `TrimMemoryMiddleware - TRIM_MEMORY_RUNNING_CRITICAL`() {
|
||||||
@Suppress("DEPRECATION") // Apps are not notified of these levels since API level 34.
|
|
||||||
// See https://bugzilla.mozilla.org/show_bug.cgi?id=1909473
|
|
||||||
store.dispatch(
|
store.dispatch(
|
||||||
SystemAction.LowMemoryAction(
|
SystemAction.LowMemoryAction(
|
||||||
level = ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL,
|
level = ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL,
|
||||||
|
|||||||
@@ -2,8 +2,6 @@
|
|||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
@file:Suppress("DEPRECATION")
|
|
||||||
|
|
||||||
package mozilla.components.feature.autofill.response.dataset
|
package mozilla.components.feature.autofill.response.dataset
|
||||||
|
|
||||||
import android.annotation.SuppressLint
|
import android.annotation.SuppressLint
|
||||||
|
|||||||
@@ -126,7 +126,6 @@ class CustomTabsToolbarFeatureTest {
|
|||||||
assertFalse(toolbar.display.onUrlClicked.invoke())
|
assertFalse(toolbar.display.onUrlClicked.invoke())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
@Test
|
@Test
|
||||||
@Config(sdk = [28])
|
@Config(sdk = [28])
|
||||||
fun `initialize updates toolbar, window and text color on SDK 28`() {
|
fun `initialize updates toolbar, window and text color on SDK 28`() {
|
||||||
@@ -167,7 +166,6 @@ class CustomTabsToolbarFeatureTest {
|
|||||||
assertEquals(Color.WHITE, toolbar.display.colors.text)
|
assertEquals(Color.WHITE, toolbar.display.colors.text)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
@Test
|
@Test
|
||||||
fun `initialize updates toolbar, window and text color`() {
|
fun `initialize updates toolbar, window and text color`() {
|
||||||
val tab = createCustomTab(
|
val tab = createCustomTab(
|
||||||
|
|||||||
@@ -68,8 +68,8 @@ class AndroidAssetFinder {
|
|||||||
private fun PackageManager.getSignatures(packageName: String): Array<Signature> {
|
private fun PackageManager.getSignatures(packageName: String): Array<Signature> {
|
||||||
val packageInfo = getPackageSignatureInfo(packageName) ?: return emptyArray()
|
val packageInfo = getPackageSignatureInfo(packageName) ?: return emptyArray()
|
||||||
|
|
||||||
val signatures = if (SDK_INT >= Build.VERSION_CODES.P) {
|
return if (SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
val signingInfo = packageInfo.signingInfo ?: return emptyArray()
|
val signingInfo = packageInfo.signingInfo
|
||||||
if (signingInfo.hasMultipleSigners()) {
|
if (signingInfo.hasMultipleSigners()) {
|
||||||
signingInfo.apkContentsSigners
|
signingInfo.apkContentsSigners
|
||||||
} else {
|
} else {
|
||||||
@@ -82,10 +82,8 @@ class AndroidAssetFinder {
|
|||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
@Suppress("Deprecation")
|
@Suppress("Deprecation")
|
||||||
packageInfo.signatures ?: emptyArray()
|
packageInfo.signatures
|
||||||
}
|
}
|
||||||
|
|
||||||
return signatures
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@SuppressLint("PackageManagerGetSignatures")
|
@SuppressLint("PackageManagerGetSignatures")
|
||||||
|
|||||||
@@ -24,7 +24,6 @@ import android.content.pm.PackageManager.PERMISSION_GRANTED
|
|||||||
import android.hardware.camera2.CameraManager
|
import android.hardware.camera2.CameraManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
import android.os.Build
|
import android.os.Build
|
||||||
import android.os.Build.VERSION.SDK_INT
|
|
||||||
import android.os.Process
|
import android.os.Process
|
||||||
import android.provider.ContactsContract
|
import android.provider.ContactsContract
|
||||||
import android.view.accessibility.AccessibilityManager
|
import android.view.accessibility.AccessibilityManager
|
||||||
@@ -46,10 +45,10 @@ import java.io.File
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* The (visible) version name of the application, as specified by the <manifest> tag's versionName
|
* The (visible) version name of the application, as specified by the <manifest> tag's versionName
|
||||||
* attribute. E.g. "2.0". Returns an empty string if versionName is null.
|
* attribute. E.g. "2.0".
|
||||||
*/
|
*/
|
||||||
val Context.appVersionName: String
|
val Context.appVersionName: String
|
||||||
get() = packageManager.getPackageInfoCompat(packageName, 0).versionName ?: ""
|
get() = packageManager.getPackageInfoCompat(packageName, 0).versionName
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the name (label) of the application or the package name as a fallback.
|
* Returns the name (label) of the application or the package name as a fallback.
|
||||||
@@ -333,18 +332,6 @@ inline fun Context.runOnlyInMainProcess(block: () -> Unit) {
|
|||||||
fun Context.getColorFromAttr(@AttrRes attr: Int) =
|
fun Context.getColorFromAttr(@AttrRes attr: Int) =
|
||||||
ContextCompat.getColor(this, theme.resolveAttribute(attr))
|
ContextCompat.getColor(this, theme.resolveAttribute(attr))
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the color int corresponding to the Android statusBarColor attribute.
|
|
||||||
*/
|
|
||||||
@ColorInt
|
|
||||||
fun Context.getStatusBarColor() =
|
|
||||||
if (SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
ContextCompat.getColor(this, theme.resolveAttribute(android.R.attr.statusBarColor))
|
|
||||||
} else {
|
|
||||||
null
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns a tinted drawable for the given resource ID.
|
* Returns a tinted drawable for the given resource ID.
|
||||||
* @param resId ID of the drawable to load.
|
* @param resId ID of the drawable to load.
|
||||||
|
|||||||
@@ -5,7 +5,6 @@
|
|||||||
package mozilla.components.support.ktx.android.graphics
|
package mozilla.components.support.ktx.android.graphics
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import android.graphics.Bitmap.Config
|
|
||||||
import android.graphics.BitmapShader
|
import android.graphics.BitmapShader
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
import android.graphics.Paint
|
import android.graphics.Paint
|
||||||
@@ -36,7 +35,7 @@ private const val BITMAP_COMPRESSION_QUALITY = 100
|
|||||||
* - Wrap your bitmap's ImageView with a layout that masks your view with rounded corners (e.g. CardView)
|
* - Wrap your bitmap's ImageView with a layout that masks your view with rounded corners (e.g. CardView)
|
||||||
*/
|
*/
|
||||||
@CheckResult
|
@CheckResult
|
||||||
fun Bitmap.withRoundedCorners(cornerRadiusPx: Float, config: Config): Bitmap {
|
fun Bitmap.withRoundedCorners(cornerRadiusPx: Float): Bitmap {
|
||||||
val roundedBitmap = Bitmap.createBitmap(width, height, config)
|
val roundedBitmap = Bitmap.createBitmap(width, height, config)
|
||||||
val canvas = Canvas(roundedBitmap)
|
val canvas = Canvas(roundedBitmap)
|
||||||
val paint = Paint().apply {
|
val paint = Paint().apply {
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import mozilla.components.support.utils.ColorUtils.isDark
|
|||||||
*/
|
*/
|
||||||
fun Window.setStatusBarTheme(@ColorInt color: Int) {
|
fun Window.setStatusBarTheme(@ColorInt color: Int) {
|
||||||
createWindowInsetsController().isAppearanceLightStatusBars = !isDark(color)
|
createWindowInsetsController().isAppearanceLightStatusBars = !isDark(color)
|
||||||
setStatusBarColorCompat(color)
|
statusBarColor = color
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -29,10 +29,13 @@ fun Window.setNavigationBarTheme(
|
|||||||
@ColorInt navBarDividerColor: Int? = null,
|
@ColorInt navBarDividerColor: Int? = null,
|
||||||
) {
|
) {
|
||||||
navBarColor?.let {
|
navBarColor?.let {
|
||||||
setNavigationBarColorCompat(it)
|
navigationBarColor = it
|
||||||
createWindowInsetsController().isAppearanceLightNavigationBars = !isDark(it)
|
createWindowInsetsController().isAppearanceLightNavigationBars = !isDark(it)
|
||||||
}
|
}
|
||||||
setNavigationBarDividerColorCompat(navBarDividerColor)
|
|
||||||
|
if (SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
|
navigationBarDividerColor = navBarDividerColor ?: 0
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -41,39 +44,3 @@ fun Window.setNavigationBarTheme(
|
|||||||
fun Window.createWindowInsetsController(): WindowInsetsControllerCompat {
|
fun Window.createWindowInsetsController(): WindowInsetsControllerCompat {
|
||||||
return WindowInsetsControllerCompat(this, this.decorView)
|
return WindowInsetsControllerCompat(this, this.decorView)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the status bar color.
|
|
||||||
*
|
|
||||||
* @param color The color to set as the status bar color.
|
|
||||||
*/
|
|
||||||
fun Window.setStatusBarColorCompat(@ColorInt color: Int) {
|
|
||||||
if (SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
statusBarColor = color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the navigation bar color.
|
|
||||||
*
|
|
||||||
* @param color The color to set as the navigation bar color.
|
|
||||||
*/
|
|
||||||
fun Window.setNavigationBarColorCompat(@ColorInt color: Int) {
|
|
||||||
if (SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
navigationBarColor = color
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets the navigation bar divider color.
|
|
||||||
*
|
|
||||||
* @param color The color to set as the navigation bar divider color.
|
|
||||||
*/
|
|
||||||
fun Window.setNavigationBarDividerColorCompat(@ColorInt color: Int?) {
|
|
||||||
if (SDK_INT >= Build.VERSION_CODES.P && SDK_INT < Build.VERSION_CODES.VANILLA_ICE_CREAM) {
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
navigationBarDividerColor = color ?: 0
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -18,8 +18,6 @@ import android.content.Intent.EXTRA_SUBJECT
|
|||||||
import android.content.Intent.EXTRA_TEXT
|
import android.content.Intent.EXTRA_TEXT
|
||||||
import android.content.Intent.EXTRA_TITLE
|
import android.content.Intent.EXTRA_TITLE
|
||||||
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
|
import android.content.Intent.FLAG_ACTIVITY_NEW_TASK
|
||||||
import android.content.pm.PackageInfo
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
import android.content.pm.PackageManager.PERMISSION_GRANTED
|
||||||
import android.hardware.camera2.CameraManager
|
import android.hardware.camera2.CameraManager
|
||||||
import android.net.Uri
|
import android.net.Uri
|
||||||
@@ -29,7 +27,6 @@ import androidx.core.content.getSystemService
|
|||||||
import androidx.core.net.toUri
|
import androidx.core.net.toUri
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
import mozilla.components.support.ktx.R
|
import mozilla.components.support.ktx.R
|
||||||
import mozilla.components.support.test.any
|
|
||||||
import mozilla.components.support.test.argumentCaptor
|
import mozilla.components.support.test.argumentCaptor
|
||||||
import mozilla.components.support.test.fakes.android.FakeContext
|
import mozilla.components.support.test.fakes.android.FakeContext
|
||||||
import mozilla.components.support.test.mock
|
import mozilla.components.support.test.mock
|
||||||
@@ -42,11 +39,9 @@ import org.junit.Assert.assertTrue
|
|||||||
import org.junit.Before
|
import org.junit.Before
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mockito.Mockito.anyString
|
|
||||||
import org.mockito.Mockito.doReturn
|
import org.mockito.Mockito.doReturn
|
||||||
import org.mockito.Mockito.spy
|
import org.mockito.Mockito.spy
|
||||||
import org.mockito.Mockito.verify
|
import org.mockito.Mockito.verify
|
||||||
import org.mockito.Mockito.`when`
|
|
||||||
import org.robolectric.Robolectric
|
import org.robolectric.Robolectric
|
||||||
import org.robolectric.Shadows.shadowOf
|
import org.robolectric.Shadows.shadowOf
|
||||||
import org.robolectric.annotation.Config
|
import org.robolectric.annotation.Config
|
||||||
@@ -292,44 +287,6 @@ class ContextTest {
|
|||||||
whenever(cameraManager.cameraIdList).thenThrow(AssertionError("Test"))
|
whenever(cameraManager.cameraIdList).thenThrow(AssertionError("Test"))
|
||||||
assertFalse(context.hasCamera())
|
assertFalse(context.hasCamera())
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `appVersionName returns proper value`() {
|
|
||||||
val context: Context = mock()
|
|
||||||
val packageManager: PackageManager = mock()
|
|
||||||
val packageInfo = PackageInfo().apply { versionName = "1.0.0" }
|
|
||||||
|
|
||||||
`when`(context.packageManager).thenReturn(packageManager)
|
|
||||||
`when`(context.packageName).thenReturn("org.mozilla.app")
|
|
||||||
`when`(
|
|
||||||
packageManager.getPackageInfo(
|
|
||||||
anyString(),
|
|
||||||
any<PackageManager.PackageInfoFlags>(),
|
|
||||||
),
|
|
||||||
).thenReturn(packageInfo)
|
|
||||||
|
|
||||||
val versionName = context.appVersionName
|
|
||||||
assertEquals("1.0.0", versionName)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `appVersionName returns empty string when versionName is null`() {
|
|
||||||
val context: Context = mock()
|
|
||||||
val packageManager: PackageManager = mock()
|
|
||||||
val packageInfo = PackageInfo().apply { versionName = null }
|
|
||||||
|
|
||||||
`when`(context.packageManager).thenReturn(packageManager)
|
|
||||||
`when`(context.packageName).thenReturn("org.mozilla.app")
|
|
||||||
`when`(
|
|
||||||
packageManager.getPackageInfo(
|
|
||||||
anyString(),
|
|
||||||
any<PackageManager.PackageInfoFlags>(),
|
|
||||||
),
|
|
||||||
).thenReturn(packageInfo)
|
|
||||||
|
|
||||||
val versionName = context.appVersionName
|
|
||||||
assertEquals("", versionName)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Implements(FileProvider::class)
|
@Implements(FileProvider::class)
|
||||||
|
|||||||
@@ -31,12 +31,11 @@ class BitmapKtTest {
|
|||||||
fun `WHEN withRoundedCorners is called THEN returned bitmap's corners should be transparent and center with color`() {
|
fun `WHEN withRoundedCorners is called THEN returned bitmap's corners should be transparent and center with color`() {
|
||||||
val dimen = 200
|
val dimen = 200
|
||||||
val fillColor = Color.RED
|
val fillColor = Color.RED
|
||||||
val config = Bitmap.Config.ARGB_8888
|
|
||||||
|
|
||||||
val bitmap = Bitmap.createBitmap(dimen, dimen, config).apply {
|
val bitmap = Bitmap.createBitmap(dimen, dimen, Bitmap.Config.ARGB_8888).apply {
|
||||||
eraseColor(fillColor)
|
eraseColor(fillColor)
|
||||||
}
|
}
|
||||||
val roundedBitmap = bitmap.withRoundedCorners(40f, config)
|
val roundedBitmap = bitmap.withRoundedCorners(40f)
|
||||||
|
|
||||||
fun assertCornersAreTransparent() {
|
fun assertCornersAreTransparent() {
|
||||||
val cornerLocations = listOf(0, dimen - 1)
|
val cornerLocations = listOf(0, dimen - 1)
|
||||||
|
|||||||
@@ -46,7 +46,6 @@ class WindowTest {
|
|||||||
@After
|
@After
|
||||||
fun teardown() = setStaticField(Build.VERSION::SDK_INT.javaField, 0)
|
fun teardown() = setStaticField(Build.VERSION::SDK_INT.javaField, 0)
|
||||||
|
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
@Test
|
@Test
|
||||||
fun `GIVEN a color WHEN setStatusBarTheme THEN sets the status bar color`() {
|
fun `GIVEN a color WHEN setStatusBarTheme THEN sets the status bar color`() {
|
||||||
window.setStatusBarTheme(Color.BLUE)
|
window.setStatusBarTheme(Color.BLUE)
|
||||||
@@ -65,7 +64,6 @@ class WindowTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
fun `GIVEN Android 8 & has nav bar color WHEN setNavigationBarTheme THEN only the nav bar color is set`() {
|
fun `GIVEN Android 8 & has nav bar color WHEN setNavigationBarTheme THEN only the nav bar color is set`() {
|
||||||
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.O_MR1)
|
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.O_MR1)
|
||||||
window.setNavigationBarTheme(navBarColor = Color.MAGENTA)
|
window.setNavigationBarTheme(navBarColor = Color.MAGENTA)
|
||||||
@@ -87,7 +85,6 @@ class WindowTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
fun `GIVEN Android 8 & all args WHEN setNavigationBarTheme THEN only the nav bar color is set`() {
|
fun `GIVEN Android 8 & all args WHEN setNavigationBarTheme THEN only the nav bar color is set`() {
|
||||||
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.O_MR1)
|
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.O_MR1)
|
||||||
window.setNavigationBarTheme(navBarColor = Color.MAGENTA, navBarDividerColor = Color.DKGRAY)
|
window.setNavigationBarTheme(navBarColor = Color.MAGENTA, navBarDividerColor = Color.DKGRAY)
|
||||||
@@ -101,7 +98,6 @@ class WindowTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
fun `GIVEN Android 9 & no args WHEN setNavigationBarTheme THEN the nav bar divider color is set to default`() {
|
fun `GIVEN Android 9 & no args WHEN setNavigationBarTheme THEN the nav bar divider color is set to default`() {
|
||||||
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
||||||
window.setNavigationBarTheme()
|
window.setNavigationBarTheme()
|
||||||
@@ -111,7 +107,6 @@ class WindowTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
fun `GIVEN Android 9 has nav bar color WHEN setNavigationBarTheme THEN the nav bar color is set & nav bar divider color set to default`() {
|
fun `GIVEN Android 9 has nav bar color WHEN setNavigationBarTheme THEN the nav bar color is set & nav bar divider color set to default`() {
|
||||||
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
||||||
window.setNavigationBarTheme(navBarColor = Color.BLUE)
|
window.setNavigationBarTheme(navBarColor = Color.BLUE)
|
||||||
@@ -121,7 +116,6 @@ class WindowTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
fun `GIVEN Android 9 has nav bar divider color WHEN setNavigationBarTheme THEN only the nav bar divider color is set`() {
|
fun `GIVEN Android 9 has nav bar divider color WHEN setNavigationBarTheme THEN only the nav bar divider color is set`() {
|
||||||
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
||||||
window.setNavigationBarTheme(navBarDividerColor = Color.GREEN)
|
window.setNavigationBarTheme(navBarDividerColor = Color.GREEN)
|
||||||
@@ -131,7 +125,6 @@ class WindowTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Suppress("DEPRECATION")
|
|
||||||
fun `GIVEN Android 9 & all args WHEN setNavigationBarTheme THEN the nav bar & nav bar divider colors are set`() {
|
fun `GIVEN Android 9 & all args WHEN setNavigationBarTheme THEN the nav bar & nav bar divider colors are set`() {
|
||||||
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
setStaticField(Build.VERSION::SDK_INT.javaField, Build.VERSION_CODES.P)
|
||||||
window.setNavigationBarTheme(navBarColor = Color.YELLOW, navBarDividerColor = Color.CYAN)
|
window.setNavigationBarTheme(navBarColor = Color.YELLOW, navBarDividerColor = Color.CYAN)
|
||||||
|
|||||||
@@ -5,8 +5,6 @@ permalink: /changelog/
|
|||||||
---
|
---
|
||||||
|
|
||||||
# 131.0 (In Development)
|
# 131.0 (In Development)
|
||||||
* **All components**
|
|
||||||
* ⚠️Increased `compileSdkVersion` to 35 (Android 15)
|
|
||||||
|
|
||||||
# 130.0
|
# 130.0
|
||||||
|
|
||||||
|
|||||||
@@ -18,10 +18,7 @@ import androidx.compose.runtime.Composable
|
|||||||
import androidx.compose.ui.platform.LocalContext
|
import androidx.compose.ui.platform.LocalContext
|
||||||
import androidx.compose.ui.res.colorResource
|
import androidx.compose.ui.res.colorResource
|
||||||
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
||||||
import mozilla.components.support.ktx.android.content.getStatusBarColor
|
|
||||||
import mozilla.components.support.ktx.android.view.createWindowInsetsController
|
import mozilla.components.support.ktx.android.view.createWindowInsetsController
|
||||||
import mozilla.components.support.ktx.android.view.setNavigationBarColorCompat
|
|
||||||
import mozilla.components.support.ktx.android.view.setStatusBarColorCompat
|
|
||||||
import org.mozilla.fenix.HomeActivity
|
import org.mozilla.fenix.HomeActivity
|
||||||
import org.mozilla.fenix.R
|
import org.mozilla.fenix.R
|
||||||
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
import org.mozilla.fenix.browser.browsingmode.BrowsingMode
|
||||||
@@ -90,10 +87,10 @@ abstract class ThemeManager(
|
|||||||
|
|
||||||
private fun updateLightSystemBars(window: Window, context: Context) {
|
private fun updateLightSystemBars(window: Window, context: Context) {
|
||||||
if (SDK_INT >= Build.VERSION_CODES.M) {
|
if (SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
context.getStatusBarColor()?.let { window.setStatusBarColorCompat(it) }
|
window.statusBarColor = context.getColorFromAttr(android.R.attr.statusBarColor)
|
||||||
window.createWindowInsetsController().isAppearanceLightStatusBars = true
|
window.createWindowInsetsController().isAppearanceLightStatusBars = true
|
||||||
} else {
|
} else {
|
||||||
window.setStatusBarColorCompat(Color.BLACK)
|
window.statusBarColor = Color.BLACK
|
||||||
}
|
}
|
||||||
|
|
||||||
if (SDK_INT >= Build.VERSION_CODES.O) {
|
if (SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
@@ -116,7 +113,7 @@ abstract class ThemeManager(
|
|||||||
}
|
}
|
||||||
|
|
||||||
private fun updateNavigationBar(window: Window, context: Context) {
|
private fun updateNavigationBar(window: Window, context: Context) {
|
||||||
window.setNavigationBarColorCompat(context.getColorFromAttr(R.attr.layer1))
|
window.navigationBarColor = context.getColorFromAttr(R.attr.layer1)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,7 +18,6 @@ import org.junit.Test
|
|||||||
import org.junit.runner.RunWith
|
import org.junit.runner.RunWith
|
||||||
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
import org.mozilla.fenix.helpers.FenixRobolectricTestRunner
|
||||||
import org.mozilla.fenix.utils.Settings
|
import org.mozilla.fenix.utils.Settings
|
||||||
import kotlin.collections.removeFirst as removeFirstKt
|
|
||||||
|
|
||||||
@RunWith(FenixRobolectricTestRunner::class)
|
@RunWith(FenixRobolectricTestRunner::class)
|
||||||
class WifiConnectionMonitorTest {
|
class WifiConnectionMonitorTest {
|
||||||
@@ -180,7 +179,7 @@ class WifiConnectionMonitorTest {
|
|||||||
wifiConnectionMonitor.addOnWifiConnectedChangedListener {
|
wifiConnectionMonitor.addOnWifiConnectedChangedListener {
|
||||||
// Altering callbacks while looping.
|
// Altering callbacks while looping.
|
||||||
if (wifiConnectionMonitor.callbacks.isNotEmpty()) {
|
if (wifiConnectionMonitor.callbacks.isNotEmpty()) {
|
||||||
wifiConnectionMonitor.callbacks.removeFirstKt()
|
wifiConnectionMonitor.callbacks.removeFirst()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ class SettingsMozillaMenuRobot {
|
|||||||
fun verifyVersionNumbers() {
|
fun verifyVersionNumbers() {
|
||||||
val context = InstrumentationRegistry.getInstrumentation().targetContext
|
val context = InstrumentationRegistry.getInstrumentation().targetContext
|
||||||
val packageInfo = context.packageManager.getPackageInfoCompat(context.packageName, 0)
|
val packageInfo = context.packageManager.getPackageInfoCompat(context.packageName, 0)
|
||||||
val versionName = packageInfo.versionName ?: ""
|
val versionName = packageInfo.versionName
|
||||||
val gvBuildId = org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID
|
val gvBuildId = org.mozilla.geckoview.BuildConfig.MOZ_APP_BUILDID
|
||||||
val gvVersion = org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION
|
val gvVersion = org.mozilla.geckoview.BuildConfig.MOZ_APP_VERSION
|
||||||
|
|
||||||
|
|||||||
@@ -28,11 +28,8 @@ import mozilla.components.feature.search.widget.BaseVoiceSearchActivity
|
|||||||
import mozilla.components.lib.auth.canUseBiometricFeature
|
import mozilla.components.lib.auth.canUseBiometricFeature
|
||||||
import mozilla.components.lib.crash.Crash
|
import mozilla.components.lib.crash.Crash
|
||||||
import mozilla.components.support.base.feature.UserInteractionHandler
|
import mozilla.components.support.base.feature.UserInteractionHandler
|
||||||
import mozilla.components.support.ktx.android.content.getStatusBarColor
|
import mozilla.components.support.ktx.android.content.getColorFromAttr
|
||||||
import mozilla.components.support.ktx.android.view.createWindowInsetsController
|
import mozilla.components.support.ktx.android.view.createWindowInsetsController
|
||||||
import mozilla.components.support.ktx.android.view.setNavigationBarColorCompat
|
|
||||||
import mozilla.components.support.ktx.android.view.setNavigationBarDividerColorCompat
|
|
||||||
import mozilla.components.support.ktx.android.view.setStatusBarColorCompat
|
|
||||||
import mozilla.components.support.locale.LocaleAwareAppCompatActivity
|
import mozilla.components.support.locale.LocaleAwareAppCompatActivity
|
||||||
import mozilla.components.support.utils.SafeIntent
|
import mozilla.components.support.utils.SafeIntent
|
||||||
import mozilla.components.support.utils.StatusBarUtils
|
import mozilla.components.support.utils.StatusBarUtils
|
||||||
@@ -110,7 +107,7 @@ open class MainActivity : LocaleAwareAppCompatActivity() {
|
|||||||
window.decorView.systemUiVisibility =
|
window.decorView.systemUiVisibility =
|
||||||
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
View.SYSTEM_UI_FLAG_LAYOUT_STABLE or View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
|
||||||
|
|
||||||
window.setStatusBarColorCompat(ContextCompat.getColor(this, android.R.color.transparent))
|
window.statusBarColor = ContextCompat.getColor(this, android.R.color.transparent)
|
||||||
when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
|
when (resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK) {
|
||||||
Configuration.UI_MODE_NIGHT_UNDEFINED, // We assume light here per Android doc's recommendation
|
Configuration.UI_MODE_NIGHT_UNDEFINED, // We assume light here per Android doc's recommendation
|
||||||
Configuration.UI_MODE_NIGHT_NO,
|
Configuration.UI_MODE_NIGHT_NO,
|
||||||
@@ -396,21 +393,20 @@ open class MainActivity : LocaleAwareAppCompatActivity() {
|
|||||||
|
|
||||||
private fun updateLightSystemBars() {
|
private fun updateLightSystemBars() {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
window.context.getStatusBarColor()?.let { window.setStatusBarColorCompat(it) }
|
window.statusBarColor = getColorFromAttr(android.R.attr.statusBarColor)
|
||||||
window.createWindowInsetsController().isAppearanceLightStatusBars = true
|
window.createWindowInsetsController().isAppearanceLightStatusBars = true
|
||||||
} else {
|
} else {
|
||||||
window.setStatusBarColorCompat(Color.BLACK)
|
window.statusBarColor = Color.BLACK
|
||||||
}
|
}
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||||
// API level can display handle light navigation bar color
|
// API level can display handle light navigation bar color
|
||||||
window.createWindowInsetsController().isAppearanceLightNavigationBars = true
|
window.createWindowInsetsController().isAppearanceLightNavigationBars = true
|
||||||
window.setNavigationBarColorCompat(ContextCompat.getColor(this, android.R.color.transparent))
|
window.navigationBarColor = ContextCompat.getColor(this, android.R.color.transparent)
|
||||||
|
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
|
||||||
window.setNavigationBarDividerColorCompat(
|
window.navigationBarDividerColor =
|
||||||
ContextCompat.getColor(this, android.R.color.transparent),
|
ContextCompat.getColor(this, android.R.color.transparent)
|
||||||
)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -85,11 +85,11 @@ object SupportUtils {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the version name of this package or an empty string if versionName is null.
|
* Returns the version name of this package.
|
||||||
*/
|
*/
|
||||||
fun getAppVersion(context: Context): String {
|
fun getAppVersion(context: Context): String {
|
||||||
try {
|
try {
|
||||||
return context.packageManager.getPackageInfoCompat(context.packageName, 0).versionName ?: ""
|
return context.packageManager.getPackageInfoCompat(context.packageName, 0).versionName
|
||||||
} catch (e: PackageManager.NameNotFoundException) {
|
} catch (e: PackageManager.NameNotFoundException) {
|
||||||
// This should be impossible - we should always be able to get information about ourselves:
|
// This should be impossible - we should always be able to get information about ourselves:
|
||||||
throw IllegalStateException("Unable find package details for Focus", e)
|
throw IllegalStateException("Unable find package details for Focus", e)
|
||||||
|
|||||||
@@ -4,14 +4,8 @@
|
|||||||
|
|
||||||
package org.mozilla.focus.utils
|
package org.mozilla.focus.utils
|
||||||
|
|
||||||
import android.content.Context
|
|
||||||
import android.content.pm.PackageInfo
|
|
||||||
import android.content.pm.PackageManager
|
|
||||||
import org.junit.Assert.assertEquals
|
import org.junit.Assert.assertEquals
|
||||||
import org.junit.Assert.assertThrows
|
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
import org.mockito.Mockito.mock
|
|
||||||
import org.mockito.Mockito.`when`
|
|
||||||
import java.util.Locale
|
import java.util.Locale
|
||||||
|
|
||||||
class SupportUtilsTest {
|
class SupportUtilsTest {
|
||||||
@@ -67,47 +61,4 @@ class SupportUtilsTest {
|
|||||||
SupportUtils.manifestoURL,
|
SupportUtils.manifestoURL,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `appVersionName returns proper value`() {
|
|
||||||
val context: Context = mock()
|
|
||||||
val packageManager: PackageManager = mock()
|
|
||||||
val packageInfo = PackageInfo().apply { versionName = "1.0.0" }
|
|
||||||
|
|
||||||
`when`(context.packageManager).thenReturn(packageManager)
|
|
||||||
`when`(context.packageName).thenReturn("org.mozilla.focus")
|
|
||||||
`when`(packageManager.getPackageInfo("org.mozilla.focus", 0)).thenReturn(packageInfo)
|
|
||||||
|
|
||||||
val version = SupportUtils.getAppVersion(context)
|
|
||||||
assertEquals("1.0.0", version)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `appVersionName returns empty string when versionName is null`() {
|
|
||||||
val context: Context = mock()
|
|
||||||
val packageManager: PackageManager = mock()
|
|
||||||
val packageInfo = PackageInfo().apply { versionName = null }
|
|
||||||
|
|
||||||
`when`(context.packageManager).thenReturn(packageManager)
|
|
||||||
`when`(context.packageName).thenReturn("org.mozilla.focus")
|
|
||||||
`when`(packageManager.getPackageInfo("org.mozilla.focus", 0)).thenReturn(packageInfo)
|
|
||||||
|
|
||||||
val version = SupportUtils.getAppVersion(context)
|
|
||||||
assertEquals("", version)
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
fun `appVersionName throws IllegalStateException when package not found`() {
|
|
||||||
val context: Context = mock()
|
|
||||||
val packageManager: PackageManager = mock()
|
|
||||||
|
|
||||||
`when`(context.packageManager).thenReturn(packageManager)
|
|
||||||
`when`(context.packageName).thenReturn("org.mozilla.focus")
|
|
||||||
`when`(packageManager.getPackageInfo("org.mozilla.focus", 0))
|
|
||||||
.thenThrow(PackageManager.NameNotFoundException::class.java)
|
|
||||||
|
|
||||||
assertThrows(IllegalStateException::class.java) {
|
|
||||||
SupportUtils.getAppVersion(context)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,6 @@ exclude: true
|
|||||||
## v131
|
## v131
|
||||||
- Added [`GeckoDisplay.windowInsetsChanged`][131.1].
|
- Added [`GeckoDisplay.windowInsetsChanged`][131.1].
|
||||||
- Added [`GeckoView.addWindowInsetsListener`][131.2] and [`GeckoView.removeWindowInsetsListener`][131.3] to allow listening WindowInsets changes of Activity's root window with multiple listeners.
|
- Added [`GeckoView.addWindowInsetsListener`][131.2] and [`GeckoView.removeWindowInsetsListener`][131.3] to allow listening WindowInsets changes of Activity's root window with multiple listeners.
|
||||||
- ⚠️Increased `compileSdkVersion` to 35 (Android 15)
|
|
||||||
|
|
||||||
[131.1]: {{javadoc_uri}}/GeckoDisplay.html#windowInsetsChanged
|
[131.1]: {{javadoc_uri}}/GeckoDisplay.html#windowInsetsChanged
|
||||||
[131.2]: {{javadoc_uri}}/GeckoView.html#addWindowInsetsListener
|
[131.2]: {{javadoc_uri}}/GeckoView.html#addWindowInsetsListener
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
emulator
|
emulator
|
||||||
platform-tools
|
platform-tools
|
||||||
build-tools;35.0.0
|
build-tools;34.0.0
|
||||||
platforms;android-35
|
platforms;android-34
|
||||||
|
|||||||
@@ -288,8 +288,8 @@ def install(logger, dest=None, reinstall=False, prompt=True):
|
|||||||
|
|
||||||
if new_install:
|
if new_install:
|
||||||
packages = ["platform-tools",
|
packages = ["platform-tools",
|
||||||
"build-tools;35.0.0",
|
"build-tools;34.0.0",
|
||||||
"platforms;android-35",
|
"platforms;android-34",
|
||||||
"emulator"]
|
"emulator"]
|
||||||
|
|
||||||
install_android_packages(logger, paths, packages, prompt=prompt)
|
install_android_packages(logger, paths, packages, prompt=prompt)
|
||||||
|
|||||||
Reference in New Issue
Block a user