Update expo deps, unpin things (#10044)
This commit is contained in:
+19
-17
@@ -143,7 +143,7 @@
|
|||||||
"emoji-mart": "^5.6.0",
|
"emoji-mart": "^5.6.0",
|
||||||
"emoji-regex": "^10.4.0",
|
"emoji-regex": "^10.4.0",
|
||||||
"eventemitter3": "^5.0.1",
|
"eventemitter3": "^5.0.1",
|
||||||
"expo": "^54.0.27",
|
"expo": "^54.0.33",
|
||||||
"expo-application": "~7.0.8",
|
"expo-application": "~7.0.8",
|
||||||
"expo-blur": "~15.0.8",
|
"expo-blur": "~15.0.8",
|
||||||
"expo-build-properties": "~1.0.10",
|
"expo-build-properties": "~1.0.10",
|
||||||
@@ -152,28 +152,28 @@
|
|||||||
"expo-contacts": "^15.0.10",
|
"expo-contacts": "^15.0.10",
|
||||||
"expo-dev-client": "~6.0.20",
|
"expo-dev-client": "~6.0.20",
|
||||||
"expo-device": "~8.0.10",
|
"expo-device": "~8.0.10",
|
||||||
"expo-file-system": "~19.0.20",
|
"expo-file-system": "~19.0.21",
|
||||||
"expo-font": "~14.0.10",
|
"expo-font": "~14.0.11",
|
||||||
"expo-haptics": "~15.0.8",
|
"expo-haptics": "~15.0.8",
|
||||||
"expo-image": "~3.0.11",
|
"expo-image": "~3.0.11",
|
||||||
"expo-image-manipulator": "~14.0.8",
|
"expo-image-manipulator": "~14.0.8",
|
||||||
"expo-image-picker": "~17.0.9",
|
"expo-image-picker": "~17.0.10",
|
||||||
"expo-intent-launcher": "~13.0.8",
|
"expo-intent-launcher": "~13.0.8",
|
||||||
"expo-keep-awake": "~15.0.8",
|
"expo-keep-awake": "~15.0.8",
|
||||||
"expo-linear-gradient": "~15.0.8",
|
"expo-linear-gradient": "~15.0.8",
|
||||||
"expo-linking": "~8.0.10",
|
"expo-linking": "~8.0.11",
|
||||||
"expo-localization": "~17.0.8",
|
"expo-localization": "~17.0.8",
|
||||||
"expo-location": "~19.0.8",
|
"expo-location": "~19.0.8",
|
||||||
"expo-media-library": "~18.2.1",
|
"expo-media-library": "~18.2.1",
|
||||||
"expo-notifications": "~0.32.14",
|
"expo-notifications": "~0.32.16",
|
||||||
"expo-privacy-sensitive": "^0.1.0",
|
"expo-privacy-sensitive": "^0.1.0",
|
||||||
"expo-screen-orientation": "~9.0.8",
|
"expo-screen-orientation": "~9.0.8",
|
||||||
"expo-sharing": "~14.0.8",
|
"expo-sharing": "~14.0.8",
|
||||||
"expo-sms": "^14.0.7",
|
"expo-sms": "^14.0.7",
|
||||||
"expo-splash-screen": "~31.0.12",
|
"expo-splash-screen": "~31.0.13",
|
||||||
"expo-system-ui": "~6.0.9",
|
"expo-system-ui": "~6.0.9",
|
||||||
"expo-updates": "~29.0.14",
|
"expo-updates": "~29.0.16",
|
||||||
"expo-video": "~3.0.15",
|
"expo-video": "~3.0.16",
|
||||||
"expo-video-thumbnails": "^10.0.8",
|
"expo-video-thumbnails": "^10.0.8",
|
||||||
"expo-web-browser": "~15.0.10",
|
"expo-web-browser": "~15.0.10",
|
||||||
"fast-deep-equal": "^3.1.3",
|
"fast-deep-equal": "^3.1.3",
|
||||||
@@ -239,7 +239,7 @@
|
|||||||
"@babel/preset-env": "^7.26.0",
|
"@babel/preset-env": "^7.26.0",
|
||||||
"@babel/runtime": "^7.26.0",
|
"@babel/runtime": "^7.26.0",
|
||||||
"@eslint/js": "^9.39.2",
|
"@eslint/js": "^9.39.2",
|
||||||
"@expo/config-plugins": "~54.0.1",
|
"@expo/config-plugins": "~54.0.4",
|
||||||
"@lingui/babel-plugin-lingui-macro": "^5.9.2",
|
"@lingui/babel-plugin-lingui-macro": "^5.9.2",
|
||||||
"@lingui/cli": "^5.9.2",
|
"@lingui/cli": "^5.9.2",
|
||||||
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
|
"@pmmmwh/react-refresh-webpack-plugin": "^0.5.15",
|
||||||
@@ -258,7 +258,7 @@
|
|||||||
"babel-jest": "^29.7.0",
|
"babel-jest": "^29.7.0",
|
||||||
"babel-plugin-module-resolver": "^5.0.2",
|
"babel-plugin-module-resolver": "^5.0.2",
|
||||||
"babel-plugin-react-compiler": "^19.1.0-rc.3",
|
"babel-plugin-react-compiler": "^19.1.0-rc.3",
|
||||||
"babel-preset-expo": "~54.0.0",
|
"babel-preset-expo": "~54.0.10",
|
||||||
"eslint": "^9.39.2",
|
"eslint": "^9.39.2",
|
||||||
"eslint-import-resolver-typescript": "^4.4.4",
|
"eslint-import-resolver-typescript": "^4.4.4",
|
||||||
"eslint-plugin-bsky-internal": "link:./eslint",
|
"eslint-plugin-bsky-internal": "link:./eslint",
|
||||||
@@ -275,7 +275,7 @@
|
|||||||
"husky": "^8.0.3",
|
"husky": "^8.0.3",
|
||||||
"is-ci": "^3.0.1",
|
"is-ci": "^3.0.1",
|
||||||
"jest": "^29.7.0",
|
"jest": "^29.7.0",
|
||||||
"jest-expo": "~54.0.14",
|
"jest-expo": "~54.0.17",
|
||||||
"jest-junit": "^16.0.0",
|
"jest-junit": "^16.0.0",
|
||||||
"lint-staged": "^13.2.3",
|
"lint-staged": "^13.2.3",
|
||||||
"lockfile-lint": "^4.14.0",
|
"lockfile-lint": "^4.14.0",
|
||||||
@@ -291,13 +291,15 @@
|
|||||||
"resolutions": {
|
"resolutions": {
|
||||||
"@react-native/babel-preset": "0.81.5",
|
"@react-native/babel-preset": "0.81.5",
|
||||||
"@react-native/normalize-colors": "0.81.5",
|
"@react-native/normalize-colors": "0.81.5",
|
||||||
"**/@expo/image-utils": "0.8.7",
|
"**/@expo/image-utils": "0.8.12",
|
||||||
"**/@react-native-async-storage/async-storage": "2.2.0",
|
|
||||||
"**/expo-constants": "18.0.8",
|
|
||||||
"**/expo-device": "7.1.4",
|
|
||||||
"**/multiformats": "9.9.0",
|
"**/multiformats": "9.9.0",
|
||||||
"unicode-segmenter": "0.14.5",
|
"unicode-segmenter": "0.14.5",
|
||||||
"@types/estree": "1.0.6"
|
"@types/estree": "1.0.6",
|
||||||
|
"metro": "0.83.3",
|
||||||
|
"metro-core": "0.83.3",
|
||||||
|
"metro-config": "0.83.3",
|
||||||
|
"metro-runtime": "0.83.3",
|
||||||
|
"metro-source-map": "0.83.3"
|
||||||
},
|
},
|
||||||
"jest": {
|
"jest": {
|
||||||
"preset": "jest-expo/ios",
|
"preset": "jest-expo/ios",
|
||||||
|
|||||||
@@ -1,44 +0,0 @@
|
|||||||
diff --git a/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultLauncher.kt b/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultLauncher.kt
|
|
||||||
index d300fc2..0890878 100644
|
|
||||||
--- a/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultLauncher.kt
|
|
||||||
+++ b/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/activityresult/AppContextActivityResultLauncher.kt
|
|
||||||
@@ -3,8 +3,8 @@ package expo.modules.kotlin.activityresult
|
|
||||||
import androidx.activity.result.ActivityResultCallback
|
|
||||||
import androidx.activity.result.contract.ActivityResultContract
|
|
||||||
import java.io.Serializable
|
|
||||||
+import kotlinx.coroutines.suspendCancellableCoroutine
|
|
||||||
import kotlin.coroutines.resume
|
|
||||||
-import kotlin.coroutines.suspendCoroutine
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A launcher for a previously-[AppContextActivityResultCaller.registerForActivityResult] prepared call
|
|
||||||
@@ -22,8 +22,12 @@ abstract class AppContextActivityResultLauncher<I : Serializable, O> {
|
|
||||||
*/
|
|
||||||
abstract fun launch(input: I, callback: ActivityResultCallback<O>)
|
|
||||||
|
|
||||||
- suspend fun launch(input: I): O = suspendCoroutine { continuation ->
|
|
||||||
- launch(input) { output -> continuation.resume(output) }
|
|
||||||
+ suspend fun launch(input: I): O = suspendCancellableCoroutine { continuation ->
|
|
||||||
+ launch(input) { output ->
|
|
||||||
+ if (continuation.isActive) {
|
|
||||||
+ continuation.resume(output)
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
}
|
|
||||||
|
|
||||||
abstract val contract: AppContextActivityResultContract<I, O>
|
|
||||||
diff --git a/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt b/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt
|
|
||||||
index 47c4d15..afe138d 100644
|
|
||||||
--- a/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt
|
|
||||||
+++ b/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt
|
|
||||||
@@ -125,6 +125,10 @@ internal fun peekResponseBody(
|
|
||||||
}
|
|
||||||
|
|
||||||
internal fun shouldParseBody(response: Response): Boolean {
|
|
||||||
+ if (response.request.url.encodedPath == "/bitdrift_public.protobuf.client.v1.ApiService/Mux") {
|
|
||||||
+ return false
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
// Check for Content-Type
|
|
||||||
val skipContentTypes = listOf(
|
|
||||||
"text/event-stream", // Server Sent Events
|
|
||||||
@@ -0,0 +1,15 @@
|
|||||||
|
diff --git a/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt b/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt
|
||||||
|
index 47c4d15..afe138d 100644
|
||||||
|
--- a/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt
|
||||||
|
+++ b/node_modules/expo-modules-core/android/src/main/java/expo/modules/kotlin/devtools/ExpoNetworkInspectOkHttpInterceptors.kt
|
||||||
|
@@ -125,6 +125,10 @@ internal fun peekResponseBody(
|
||||||
|
}
|
||||||
|
|
||||||
|
internal fun shouldParseBody(response: Response): Boolean {
|
||||||
|
+ if (response.request.url.encodedPath == "/bitdrift_public.protobuf.client.v1.ApiService/Mux") {
|
||||||
|
+ return false
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
// Check for Content-Type
|
||||||
|
val skipContentTypes = listOf(
|
||||||
|
"text/event-stream", // Server Sent Events
|
||||||
@@ -1,992 +0,0 @@
|
|||||||
diff --git a/node_modules/expo-notifications/android/.gradle/8.10/checksums/checksums.lock b/node_modules/expo-notifications/android/.gradle/8.10/checksums/checksums.lock
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..883ef6a
|
|
||||||
Binary files /dev/null and b/node_modules/expo-notifications/android/.gradle/8.10/checksums/checksums.lock differ
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/8.10/dependencies-accessors/gc.properties b/node_modules/expo-notifications/android/.gradle/8.10/dependencies-accessors/gc.properties
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..e69de29
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/8.10/fileChanges/last-build.bin b/node_modules/expo-notifications/android/.gradle/8.10/fileChanges/last-build.bin
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..f76dd23
|
|
||||||
Binary files /dev/null and b/node_modules/expo-notifications/android/.gradle/8.10/fileChanges/last-build.bin differ
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/8.10/fileHashes/fileHashes.lock b/node_modules/expo-notifications/android/.gradle/8.10/fileHashes/fileHashes.lock
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..774caf7
|
|
||||||
Binary files /dev/null and b/node_modules/expo-notifications/android/.gradle/8.10/fileHashes/fileHashes.lock differ
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/8.10/gc.properties b/node_modules/expo-notifications/android/.gradle/8.10/gc.properties
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..e69de29
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock b/node_modules/expo-notifications/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..a3c1514
|
|
||||||
Binary files /dev/null and b/node_modules/expo-notifications/android/.gradle/buildOutputCleanup/buildOutputCleanup.lock differ
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/buildOutputCleanup/cache.properties b/node_modules/expo-notifications/android/.gradle/buildOutputCleanup/cache.properties
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..0e5b4da
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.gradle/buildOutputCleanup/cache.properties
|
|
||||||
@@ -0,0 +1,2 @@
|
|
||||||
+#Thu Apr 24 20:44:36 PDT 2025
|
|
||||||
+gradle.version=8.10
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/config.properties b/node_modules/expo-notifications/android/.gradle/config.properties
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..0bd71c6
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.gradle/config.properties
|
|
||||||
@@ -0,0 +1,2 @@
|
|
||||||
+#Thu Apr 24 20:44:32 PDT 2025
|
|
||||||
+java.home=/Applications/Android Studio.app/Contents/jbr/Contents/Home
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.gradle/vcs-1/gc.properties b/node_modules/expo-notifications/android/.gradle/vcs-1/gc.properties
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..e69de29
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/.gitignore b/node_modules/expo-notifications/android/.idea/.gitignore
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..26d3352
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/.gitignore
|
|
||||||
@@ -0,0 +1,3 @@
|
|
||||||
+# Default ignored files
|
|
||||||
+/shelf/
|
|
||||||
+/workspace.xml
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/AndroidProjectSystem.xml b/node_modules/expo-notifications/android/.idea/AndroidProjectSystem.xml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..4a53bee
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/AndroidProjectSystem.xml
|
|
||||||
@@ -0,0 +1,6 @@
|
|
||||||
+<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
+<project version="4">
|
|
||||||
+ <component name="AndroidProjectSystem">
|
|
||||||
+ <option name="providerId" value="com.android.tools.idea.GradleProjectSystem" />
|
|
||||||
+ </component>
|
|
||||||
+</project>
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/caches/deviceStreaming.xml b/node_modules/expo-notifications/android/.idea/caches/deviceStreaming.xml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..9e9ba09
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/caches/deviceStreaming.xml
|
|
||||||
@@ -0,0 +1,607 @@
|
|
||||||
+<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
+<project version="4">
|
|
||||||
+ <component name="DeviceStreaming">
|
|
||||||
+ <option name="deviceSelectionList">
|
|
||||||
+ <list>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="27" />
|
|
||||||
+ <option name="brand" value="DOCOMO" />
|
|
||||||
+ <option name="codename" value="F01L" />
|
|
||||||
+ <option name="id" value="F01L" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="FUJITSU" />
|
|
||||||
+ <option name="name" value="F-01L" />
|
|
||||||
+ <option name="screenDensity" value="360" />
|
|
||||||
+ <option name="screenX" value="720" />
|
|
||||||
+ <option name="screenY" value="1280" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="OnePlus" />
|
|
||||||
+ <option name="codename" value="OP5552L1" />
|
|
||||||
+ <option name="id" value="OP5552L1" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="OnePlus" />
|
|
||||||
+ <option name="name" value="CPH2415" />
|
|
||||||
+ <option name="screenDensity" value="480" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2412" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="OPPO" />
|
|
||||||
+ <option name="codename" value="OP573DL1" />
|
|
||||||
+ <option name="id" value="OP573DL1" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="OPPO" />
|
|
||||||
+ <option name="name" value="CPH2557" />
|
|
||||||
+ <option name="screenDensity" value="480" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="28" />
|
|
||||||
+ <option name="brand" value="DOCOMO" />
|
|
||||||
+ <option name="codename" value="SH-01L" />
|
|
||||||
+ <option name="id" value="SH-01L" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="SHARP" />
|
|
||||||
+ <option name="name" value="AQUOS sense2 SH-01L" />
|
|
||||||
+ <option name="screenDensity" value="480" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2160" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="Lenovo" />
|
|
||||||
+ <option name="codename" value="TB370FU" />
|
|
||||||
+ <option name="formFactor" value="Tablet" />
|
|
||||||
+ <option name="id" value="TB370FU" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Lenovo" />
|
|
||||||
+ <option name="name" value="Tab P12" />
|
|
||||||
+ <option name="screenDensity" value="340" />
|
|
||||||
+ <option name="screenX" value="1840" />
|
|
||||||
+ <option name="screenY" value="2944" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="a15" />
|
|
||||||
+ <option name="id" value="a15" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="A15" />
|
|
||||||
+ <option name="screenDensity" value="450" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2340" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="a35x" />
|
|
||||||
+ <option name="id" value="a35x" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="A35" />
|
|
||||||
+ <option name="screenDensity" value="450" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2340" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="31" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="a51" />
|
|
||||||
+ <option name="id" value="a51" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy A51" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="akita" />
|
|
||||||
+ <option name="id" value="akita" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 8a" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="motorola" />
|
|
||||||
+ <option name="codename" value="arcfox" />
|
|
||||||
+ <option name="id" value="arcfox" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Motorola" />
|
|
||||||
+ <option name="name" value="razr plus 2024" />
|
|
||||||
+ <option name="screenDensity" value="360" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="1272" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="motorola" />
|
|
||||||
+ <option name="codename" value="austin" />
|
|
||||||
+ <option name="id" value="austin" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Motorola" />
|
|
||||||
+ <option name="name" value="moto g 5G (2022)" />
|
|
||||||
+ <option name="screenDensity" value="280" />
|
|
||||||
+ <option name="screenX" value="720" />
|
|
||||||
+ <option name="screenY" value="1600" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="b0q" />
|
|
||||||
+ <option name="id" value="b0q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy S22 Ultra" />
|
|
||||||
+ <option name="screenDensity" value="600" />
|
|
||||||
+ <option name="screenX" value="1440" />
|
|
||||||
+ <option name="screenY" value="3088" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="32" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="bluejay" />
|
|
||||||
+ <option name="id" value="bluejay" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 6a" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="caiman" />
|
|
||||||
+ <option name="id" value="caiman" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 9 Pro" />
|
|
||||||
+ <option name="screenDensity" value="360" />
|
|
||||||
+ <option name="screenX" value="960" />
|
|
||||||
+ <option name="screenY" value="2142" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="comet" />
|
|
||||||
+ <option name="default" value="true" />
|
|
||||||
+ <option name="id" value="comet" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 9 Pro Fold" />
|
|
||||||
+ <option name="screenDensity" value="390" />
|
|
||||||
+ <option name="screenX" value="2076" />
|
|
||||||
+ <option name="screenY" value="2152" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="29" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="crownqlteue" />
|
|
||||||
+ <option name="id" value="crownqlteue" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy Note9" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="2220" />
|
|
||||||
+ <option name="screenY" value="1080" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="dm2q" />
|
|
||||||
+ <option name="id" value="dm2q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="S23 Plus" />
|
|
||||||
+ <option name="screenDensity" value="450" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2340" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="dm3q" />
|
|
||||||
+ <option name="id" value="dm3q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy S23 Ultra" />
|
|
||||||
+ <option name="screenDensity" value="600" />
|
|
||||||
+ <option name="screenX" value="1440" />
|
|
||||||
+ <option name="screenY" value="3088" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="e1q" />
|
|
||||||
+ <option name="default" value="true" />
|
|
||||||
+ <option name="id" value="e1q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy S24" />
|
|
||||||
+ <option name="screenDensity" value="480" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2340" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="e3q" />
|
|
||||||
+ <option name="id" value="e3q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy S24 Ultra" />
|
|
||||||
+ <option name="screenDensity" value="450" />
|
|
||||||
+ <option name="screenX" value="1440" />
|
|
||||||
+ <option name="screenY" value="3120" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="eos" />
|
|
||||||
+ <option name="id" value="eos" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Eos" />
|
|
||||||
+ <option name="screenDensity" value="320" />
|
|
||||||
+ <option name="screenX" value="384" />
|
|
||||||
+ <option name="screenY" value="384" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="felix" />
|
|
||||||
+ <option name="id" value="felix" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel Fold" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="2208" />
|
|
||||||
+ <option name="screenY" value="1840" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="felix" />
|
|
||||||
+ <option name="id" value="felix" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel Fold" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="2208" />
|
|
||||||
+ <option name="screenY" value="1840" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="felix_camera" />
|
|
||||||
+ <option name="id" value="felix_camera" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel Fold (Camera-enabled)" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="2208" />
|
|
||||||
+ <option name="screenY" value="1840" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="motorola" />
|
|
||||||
+ <option name="codename" value="fogona" />
|
|
||||||
+ <option name="id" value="fogona" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Motorola" />
|
|
||||||
+ <option name="name" value="moto g play - 2024" />
|
|
||||||
+ <option name="screenDensity" value="280" />
|
|
||||||
+ <option name="screenX" value="720" />
|
|
||||||
+ <option name="screenY" value="1600" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="g0q" />
|
|
||||||
+ <option name="id" value="g0q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="SM-S906U1" />
|
|
||||||
+ <option name="screenDensity" value="450" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2340" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="gta9pwifi" />
|
|
||||||
+ <option name="id" value="gta9pwifi" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="SM-X210" />
|
|
||||||
+ <option name="screenDensity" value="240" />
|
|
||||||
+ <option name="screenX" value="1200" />
|
|
||||||
+ <option name="screenY" value="1920" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="gts7xllite" />
|
|
||||||
+ <option name="id" value="gts7xllite" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="SM-T738U" />
|
|
||||||
+ <option name="screenDensity" value="340" />
|
|
||||||
+ <option name="screenX" value="1600" />
|
|
||||||
+ <option name="screenY" value="2560" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="gts8uwifi" />
|
|
||||||
+ <option name="formFactor" value="Tablet" />
|
|
||||||
+ <option name="id" value="gts8uwifi" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy Tab S8 Ultra" />
|
|
||||||
+ <option name="screenDensity" value="320" />
|
|
||||||
+ <option name="screenX" value="1848" />
|
|
||||||
+ <option name="screenY" value="2960" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="gts8wifi" />
|
|
||||||
+ <option name="formFactor" value="Tablet" />
|
|
||||||
+ <option name="id" value="gts8wifi" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy Tab S8" />
|
|
||||||
+ <option name="screenDensity" value="274" />
|
|
||||||
+ <option name="screenX" value="1600" />
|
|
||||||
+ <option name="screenY" value="2560" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="gts9fe" />
|
|
||||||
+ <option name="id" value="gts9fe" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy Tab S9 FE 5G" />
|
|
||||||
+ <option name="screenDensity" value="280" />
|
|
||||||
+ <option name="screenX" value="1440" />
|
|
||||||
+ <option name="screenY" value="2304" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="husky" />
|
|
||||||
+ <option name="id" value="husky" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 8 Pro" />
|
|
||||||
+ <option name="screenDensity" value="390" />
|
|
||||||
+ <option name="screenX" value="1008" />
|
|
||||||
+ <option name="screenY" value="2244" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="30" />
|
|
||||||
+ <option name="brand" value="motorola" />
|
|
||||||
+ <option name="codename" value="java" />
|
|
||||||
+ <option name="id" value="java" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Motorola" />
|
|
||||||
+ <option name="name" value="G20" />
|
|
||||||
+ <option name="screenDensity" value="280" />
|
|
||||||
+ <option name="screenX" value="720" />
|
|
||||||
+ <option name="screenY" value="1600" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="komodo" />
|
|
||||||
+ <option name="id" value="komodo" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 9 Pro XL" />
|
|
||||||
+ <option name="screenDensity" value="360" />
|
|
||||||
+ <option name="screenX" value="1008" />
|
|
||||||
+ <option name="screenY" value="2244" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="lynx" />
|
|
||||||
+ <option name="id" value="lynx" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 7a" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="motorola" />
|
|
||||||
+ <option name="codename" value="maui" />
|
|
||||||
+ <option name="id" value="maui" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Motorola" />
|
|
||||||
+ <option name="name" value="moto g play - 2023" />
|
|
||||||
+ <option name="screenDensity" value="280" />
|
|
||||||
+ <option name="screenX" value="720" />
|
|
||||||
+ <option name="screenY" value="1600" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="o1q" />
|
|
||||||
+ <option name="id" value="o1q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy S21" />
|
|
||||||
+ <option name="screenDensity" value="421" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="31" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="oriole" />
|
|
||||||
+ <option name="id" value="oriole" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 6" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="panther" />
|
|
||||||
+ <option name="id" value="panther" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 7" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="q5q" />
|
|
||||||
+ <option name="id" value="q5q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy Z Fold5" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1812" />
|
|
||||||
+ <option name="screenY" value="2176" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="q6q" />
|
|
||||||
+ <option name="id" value="q6q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy Z Fold6" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1856" />
|
|
||||||
+ <option name="screenY" value="2160" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="30" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="r11" />
|
|
||||||
+ <option name="formFactor" value="Wear OS" />
|
|
||||||
+ <option name="id" value="r11" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel Watch" />
|
|
||||||
+ <option name="screenDensity" value="320" />
|
|
||||||
+ <option name="screenX" value="384" />
|
|
||||||
+ <option name="screenY" value="384" />
|
|
||||||
+ <option name="type" value="WEAR_OS" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="r11q" />
|
|
||||||
+ <option name="id" value="r11q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="SM-S711U" />
|
|
||||||
+ <option name="screenDensity" value="450" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2340" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="30" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="redfin" />
|
|
||||||
+ <option name="id" value="redfin" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 5" />
|
|
||||||
+ <option name="screenDensity" value="440" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2340" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="shiba" />
|
|
||||||
+ <option name="id" value="shiba" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 8" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="samsung" />
|
|
||||||
+ <option name="codename" value="t2q" />
|
|
||||||
+ <option name="id" value="t2q" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Samsung" />
|
|
||||||
+ <option name="name" value="Galaxy S21 Plus" />
|
|
||||||
+ <option name="screenDensity" value="394" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2400" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="33" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="tangorpro" />
|
|
||||||
+ <option name="formFactor" value="Tablet" />
|
|
||||||
+ <option name="id" value="tangorpro" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel Tablet" />
|
|
||||||
+ <option name="screenDensity" value="320" />
|
|
||||||
+ <option name="screenX" value="1600" />
|
|
||||||
+ <option name="screenY" value="2560" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="34" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="tokay" />
|
|
||||||
+ <option name="default" value="true" />
|
|
||||||
+ <option name="id" value="tokay" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 9" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2424" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ <PersistentDeviceSelectionData>
|
|
||||||
+ <option name="api" value="35" />
|
|
||||||
+ <option name="brand" value="google" />
|
|
||||||
+ <option name="codename" value="tokay" />
|
|
||||||
+ <option name="default" value="true" />
|
|
||||||
+ <option name="id" value="tokay" />
|
|
||||||
+ <option name="labId" value="google" />
|
|
||||||
+ <option name="manufacturer" value="Google" />
|
|
||||||
+ <option name="name" value="Pixel 9" />
|
|
||||||
+ <option name="screenDensity" value="420" />
|
|
||||||
+ <option name="screenX" value="1080" />
|
|
||||||
+ <option name="screenY" value="2424" />
|
|
||||||
+ </PersistentDeviceSelectionData>
|
|
||||||
+ </list>
|
|
||||||
+ </option>
|
|
||||||
+ </component>
|
|
||||||
+</project>
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/gradle.xml b/node_modules/expo-notifications/android/.idea/gradle.xml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..b838237
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/gradle.xml
|
|
||||||
@@ -0,0 +1,12 @@
|
|
||||||
+<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
+<project version="4">
|
|
||||||
+ <component name="GradleSettings">
|
|
||||||
+ <option name="linkedExternalProjectsSettings">
|
|
||||||
+ <GradleProjectSettings>
|
|
||||||
+ <option name="testRunner" value="CHOOSE_PER_TEST" />
|
|
||||||
+ <option name="externalProjectPath" value="$PROJECT_DIR$" />
|
|
||||||
+ <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
|
||||||
+ </GradleProjectSettings>
|
|
||||||
+ </option>
|
|
||||||
+ </component>
|
|
||||||
+</project>
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/migrations.xml b/node_modules/expo-notifications/android/.idea/migrations.xml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..f8051a6
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/migrations.xml
|
|
||||||
@@ -0,0 +1,10 @@
|
|
||||||
+<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
+<project version="4">
|
|
||||||
+ <component name="ProjectMigrations">
|
|
||||||
+ <option name="MigrateToGradleLocalJavaHome">
|
|
||||||
+ <set>
|
|
||||||
+ <option value="$PROJECT_DIR$" />
|
|
||||||
+ </set>
|
|
||||||
+ </option>
|
|
||||||
+ </component>
|
|
||||||
+</project>
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/misc.xml b/node_modules/expo-notifications/android/.idea/misc.xml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..3040d03
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/misc.xml
|
|
||||||
@@ -0,0 +1,10 @@
|
|
||||||
+<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
+<project version="4">
|
|
||||||
+ <component name="ExternalStorageConfigurationManager" enabled="true" />
|
|
||||||
+ <component name="ProjectRootManager">
|
|
||||||
+ <output url="file://$PROJECT_DIR$/build/classes" />
|
|
||||||
+ </component>
|
|
||||||
+ <component name="ProjectType">
|
|
||||||
+ <option name="id" value="Android" />
|
|
||||||
+ </component>
|
|
||||||
+</project>
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/runConfigurations.xml b/node_modules/expo-notifications/android/.idea/runConfigurations.xml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..16660f1
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/runConfigurations.xml
|
|
||||||
@@ -0,0 +1,17 @@
|
|
||||||
+<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
+<project version="4">
|
|
||||||
+ <component name="RunConfigurationProducerService">
|
|
||||||
+ <option name="ignoredProducers">
|
|
||||||
+ <set>
|
|
||||||
+ <option value="com.intellij.execution.junit.AbstractAllInDirectoryConfigurationProducer" />
|
|
||||||
+ <option value="com.intellij.execution.junit.AllInPackageConfigurationProducer" />
|
|
||||||
+ <option value="com.intellij.execution.junit.PatternConfigurationProducer" />
|
|
||||||
+ <option value="com.intellij.execution.junit.TestInClassConfigurationProducer" />
|
|
||||||
+ <option value="com.intellij.execution.junit.UniqueIdConfigurationProducer" />
|
|
||||||
+ <option value="com.intellij.execution.junit.testDiscovery.JUnitTestDiscoveryConfigurationProducer" />
|
|
||||||
+ <option value="org.jetbrains.kotlin.idea.junit.KotlinJUnitRunConfigurationProducer" />
|
|
||||||
+ <option value="org.jetbrains.kotlin.idea.junit.KotlinPatternConfigurationProducer" />
|
|
||||||
+ </set>
|
|
||||||
+ </option>
|
|
||||||
+ </component>
|
|
||||||
+</project>
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/expo-notifications/android/.idea/workspace.xml b/node_modules/expo-notifications/android/.idea/workspace.xml
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..df26928
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/.idea/workspace.xml
|
|
||||||
@@ -0,0 +1,47 @@
|
|
||||||
+<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
+<project version="4">
|
|
||||||
+ <component name="AutoImportSettings">
|
|
||||||
+ <option name="autoReloadType" value="NONE" />
|
|
||||||
+ </component>
|
|
||||||
+ <component name="ChangeListManager">
|
|
||||||
+ <list default="true" id="fed6a9c0-2e93-4b6e-953a-d1cd1e93b59f" name="Changes" comment="" />
|
|
||||||
+ <option name="SHOW_DIALOG" value="false" />
|
|
||||||
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
|
|
||||||
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
|
|
||||||
+ <option name="LAST_RESOLUTION" value="IGNORE" />
|
|
||||||
+ </component>
|
|
||||||
+ <component name="ClangdSettings">
|
|
||||||
+ <option name="formatViaClangd" value="false" />
|
|
||||||
+ </component>
|
|
||||||
+ <component name="ProjectColorInfo"><![CDATA[{
|
|
||||||
+ "associatedIndex": 4
|
|
||||||
+}]]></component>
|
|
||||||
+ <component name="ProjectId" id="2wCjuanPzVGKP91vdmftQVgUlaM" />
|
|
||||||
+ <component name="ProjectViewState">
|
|
||||||
+ <option name="hideEmptyMiddlePackages" value="true" />
|
|
||||||
+ <option name="showLibraryContents" value="true" />
|
|
||||||
+ </component>
|
|
||||||
+ <component name="PropertiesComponent"><![CDATA[{
|
|
||||||
+ "keyToString": {
|
|
||||||
+ "RunOnceActivity.ShowReadmeOnStart": "true",
|
|
||||||
+ "RunOnceActivity.cidr.known.project.marker": "true",
|
|
||||||
+ "RunOnceActivity.readMode.enableVisualFormatting": "true",
|
|
||||||
+ "android.gradle.sync.needed": "true",
|
|
||||||
+ "cf.first.check.clang-format": "false",
|
|
||||||
+ "cidr.known.project.marker": "true",
|
|
||||||
+ "kotlin-language-version-configured": "true",
|
|
||||||
+ "last_opened_file_path": "/Users/hailey/bsky/social-app/node_modules/expo-notifications/android"
|
|
||||||
+ }
|
|
||||||
+}]]></component>
|
|
||||||
+ <component name="SpellCheckerSettings" RuntimeDictionaries="0" Folders="0" CustomDictionaries="0" DefaultDictionary="application-level" UseSingleDictionary="true" transferred="true" />
|
|
||||||
+ <component name="TaskManager">
|
|
||||||
+ <task active="true" id="Default" summary="Default task">
|
|
||||||
+ <changelist id="fed6a9c0-2e93-4b6e-953a-d1cd1e93b59f" name="Changes" comment="" />
|
|
||||||
+ <created>1745552672693</created>
|
|
||||||
+ <option name="number" value="Default" />
|
|
||||||
+ <option name="presentableId" value="Default" />
|
|
||||||
+ <updated>1745552672693</updated>
|
|
||||||
+ </task>
|
|
||||||
+ <servers />
|
|
||||||
+ </component>
|
|
||||||
+</project>
|
|
||||||
\ No newline at end of file
|
|
||||||
diff --git a/node_modules/expo-notifications/android/build.gradle b/node_modules/expo-notifications/android/build.gradle
|
|
||||||
index bc479ee..1ebfa00 100644
|
|
||||||
--- a/node_modules/expo-notifications/android/build.gradle
|
|
||||||
+++ b/node_modules/expo-notifications/android/build.gradle
|
|
||||||
@@ -42,6 +42,7 @@ dependencies {
|
|
||||||
implementation 'com.google.firebase:firebase-messaging:24.0.1'
|
|
||||||
|
|
||||||
implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
|
|
||||||
+ implementation project(':expo-background-notification-handler')
|
|
||||||
|
|
||||||
if (project.findProject(':expo-modules-test-core')) {
|
|
||||||
testImplementation project(':expo-modules-test-core')
|
|
||||||
diff --git a/node_modules/expo-notifications/android/local.properties b/node_modules/expo-notifications/android/local.properties
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000..ab4c86d
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/node_modules/expo-notifications/android/local.properties
|
|
||||||
@@ -0,0 +1,8 @@
|
|
||||||
+## This file must *NOT* be checked into Version Control Systems,
|
|
||||||
+# as it contains information specific to your local configuration.
|
|
||||||
+#
|
|
||||||
+# Location of the SDK. This is only used by Gradle.
|
|
||||||
+# For customization when using a Version Control System, please read the
|
|
||||||
+# header note.
|
|
||||||
+#Thu Apr 24 20:44:32 PDT 2025
|
|
||||||
+sdk.dir=/Users/hailey/Library/Android/sdk
|
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt
|
|
||||||
index 7b99e6c..45a450d 100644
|
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt
|
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt
|
|
||||||
@@ -15,6 +15,7 @@ import org.json.JSONObject
|
|
||||||
* This interface exists to provide a common API for both classes.
|
|
||||||
* */
|
|
||||||
interface INotificationContent : Parcelable {
|
|
||||||
+ val channelId: String?
|
|
||||||
val title: String?
|
|
||||||
val text: String?
|
|
||||||
val subText: String?
|
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
|
||||||
index 191b64e..fe8b3c5 100644
|
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
|
||||||
@@ -35,6 +35,7 @@ import kotlin.coroutines.Continuation;
|
|
||||||
* Refactoring this class may require a migration strategy for the data stored in SharedPreferences.
|
|
||||||
*/
|
|
||||||
public class NotificationContent implements Parcelable, Serializable, INotificationContent {
|
|
||||||
+ private String mChannelId;
|
|
||||||
private String mTitle;
|
|
||||||
private String mText;
|
|
||||||
private String mSubtitle;
|
|
||||||
@@ -65,6 +66,11 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
+ @Nullable
|
|
||||||
+ public String getChannelId() {
|
|
||||||
+ return mChannelId;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
@Nullable
|
|
||||||
public String getTitle() {
|
|
||||||
return mTitle;
|
|
||||||
@@ -158,6 +164,7 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
|
||||||
}
|
|
||||||
|
|
||||||
protected NotificationContent(Parcel in) {
|
|
||||||
+ mChannelId = in.readString();
|
|
||||||
mTitle = in.readString();
|
|
||||||
mText = in.readString();
|
|
||||||
mSubtitle = in.readString();
|
|
||||||
@@ -183,6 +190,7 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void writeToParcel(Parcel dest, int flags) {
|
|
||||||
+ dest.writeString(mChannelId);
|
|
||||||
dest.writeString(mTitle);
|
|
||||||
dest.writeString(mText);
|
|
||||||
dest.writeString(mSubtitle);
|
|
||||||
@@ -203,6 +211,7 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
|
||||||
private static final long serialVersionUID = 397666843266836802L;
|
|
||||||
|
|
||||||
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
|
|
||||||
+ out.writeObject(mChannelId);
|
|
||||||
out.writeObject(mTitle);
|
|
||||||
out.writeObject(mText);
|
|
||||||
out.writeObject(mSubtitle);
|
|
||||||
@@ -285,6 +294,11 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
|
||||||
useDefaultVibrationPattern();
|
|
||||||
}
|
|
||||||
|
|
||||||
+ public Builder setChannelId(String channelId) {
|
|
||||||
+ content.mChannelId = channelId;
|
|
||||||
+ return this;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
public Builder setTitle(String title) {
|
|
||||||
content.mTitle = title;
|
|
||||||
return this;
|
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt
|
|
||||||
index 3af254c..3c77e9d 100644
|
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt
|
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt
|
|
||||||
@@ -11,6 +11,9 @@ import org.json.JSONObject
|
|
||||||
* */
|
|
||||||
@JvmInline
|
|
||||||
value class NotificationData(private val data: Map<String, String>) {
|
|
||||||
+ val channelId: String?
|
|
||||||
+ get() = data["channelId"]
|
|
||||||
+
|
|
||||||
val title: String?
|
|
||||||
get() = data["title"]
|
|
||||||
|
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt
|
|
||||||
index d2cc6cf..6a48ff2 100644
|
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt
|
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt
|
|
||||||
@@ -31,6 +31,8 @@ class RemoteNotificationContent(private val remoteMessage: RemoteMessage) : INot
|
|
||||||
return remoteMessage.notification?.imageUrl != null
|
|
||||||
}
|
|
||||||
|
|
||||||
+ override val channelId = remoteMessage.notification?.channelId ?: notificationData.channelId
|
|
||||||
+
|
|
||||||
override val title = remoteMessage.notification?.title ?: notificationData.title
|
|
||||||
|
|
||||||
override val text = remoteMessage.notification?.body ?: notificationData.message
|
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt
|
|
||||||
index 98f003f..2f745e8 100644
|
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt
|
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt
|
|
||||||
@@ -101,6 +101,9 @@ open class ExpoNotificationBuilder(
|
|
||||||
builder.setOngoing(content.isSticky)
|
|
||||||
|
|
||||||
// see "Notification anatomy" https://developer.android.com/develop/ui/views/notifications#Templates
|
|
||||||
+ content.channelId?.let {
|
|
||||||
+ builder.setChannelId(it)
|
|
||||||
+ }
|
|
||||||
builder.setContentTitle(content.title)
|
|
||||||
builder.setContentText(content.text)
|
|
||||||
builder.setSubText(content.subText)
|
|
||||||
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
|
|
||||||
index 90ca4ff..9d4cb09 100644
|
|
||||||
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
|
|
||||||
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
|
|
||||||
@@ -3,6 +3,9 @@ package expo.modules.notifications.service.delegates
|
|
||||||
import android.content.Context
|
|
||||||
import android.os.Bundle
|
|
||||||
import com.google.firebase.messaging.RemoteMessage
|
|
||||||
+import expo.modules.backgroundnotificationhandler.BackgroundNotificationHandler
|
|
||||||
+import expo.modules.backgroundnotificationhandler.BackgroundNotificationHandlerInterface
|
|
||||||
+import expo.modules.backgroundnotificationhandler.ExpoBackgroundNotificationHandlerModule
|
|
||||||
import expo.modules.interfaces.taskManager.TaskServiceProviderHelper
|
|
||||||
import expo.modules.notifications.notifications.RemoteMessageSerializer
|
|
||||||
import expo.modules.notifications.notifications.background.BackgroundRemoteNotificationTaskConsumer
|
|
||||||
@@ -18,7 +21,7 @@ import expo.modules.notifications.tokens.interfaces.FirebaseTokenListener
|
|
||||||
import java.lang.ref.WeakReference
|
|
||||||
import java.util.*
|
|
||||||
|
|
||||||
-open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseMessagingDelegate {
|
|
||||||
+open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseMessagingDelegate, BackgroundNotificationHandlerInterface{
|
|
||||||
companion object {
|
|
||||||
// Unfortunately we cannot save state between instances of a service other way
|
|
||||||
// than by static properties. Fortunately, using weak references we can
|
|
||||||
@@ -105,8 +108,19 @@ open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseM
|
|
||||||
DebugLogging.logRemoteMessage("FirebaseMessagingDelegate.onMessageReceived: message", remoteMessage)
|
|
||||||
val notification = createNotification(remoteMessage)
|
|
||||||
DebugLogging.logNotification("FirebaseMessagingDelegate.onMessageReceived: notification", notification)
|
|
||||||
- NotificationsService.receive(context, notification)
|
|
||||||
- runTaskManagerTasks(context.applicationContext, RemoteMessageSerializer.toBundle(remoteMessage))
|
|
||||||
+ if (!ExpoBackgroundNotificationHandlerModule.isForegrounded) {
|
|
||||||
+ BackgroundNotificationHandler(context, this).handleMessage(remoteMessage)
|
|
||||||
+ } else {
|
|
||||||
+ NotificationsService.receive(context, notification)
|
|
||||||
+ runTaskManagerTasks(
|
|
||||||
+ context.applicationContext,
|
|
||||||
+ RemoteMessageSerializer.toBundle(remoteMessage)
|
|
||||||
+ )
|
|
||||||
+ }
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ override fun showMessage(remoteMessage: RemoteMessage) {
|
|
||||||
+ NotificationsService.receive(context, createNotification(remoteMessage))
|
|
||||||
}
|
|
||||||
|
|
||||||
protected fun createNotification(remoteMessage: RemoteMessage): Notification {
|
|
||||||
@@ -0,0 +1,170 @@
|
|||||||
|
diff --git a/node_modules/expo-notifications/android/build.gradle b/node_modules/expo-notifications/android/build.gradle
|
||||||
|
index bc479ee..1ebfa00 100644
|
||||||
|
--- a/node_modules/expo-notifications/android/build.gradle
|
||||||
|
+++ b/node_modules/expo-notifications/android/build.gradle
|
||||||
|
@@ -42,6 +42,7 @@ dependencies {
|
||||||
|
implementation 'com.google.firebase:firebase-messaging:24.0.1'
|
||||||
|
|
||||||
|
implementation 'me.leolin:ShortcutBadger:1.1.22@aar'
|
||||||
|
+ implementation project(':expo-background-notification-handler')
|
||||||
|
|
||||||
|
if (project.findProject(':expo-modules-test-core')) {
|
||||||
|
testImplementation project(':expo-modules-test-core')
|
||||||
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt
|
||||||
|
index 7b99e6c..45a450d 100644
|
||||||
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt
|
||||||
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/interfaces/INotificationContent.kt
|
||||||
|
@@ -15,6 +15,7 @@ import org.json.JSONObject
|
||||||
|
* This interface exists to provide a common API for both classes.
|
||||||
|
* */
|
||||||
|
interface INotificationContent : Parcelable {
|
||||||
|
+ val channelId: String?
|
||||||
|
val title: String?
|
||||||
|
val text: String?
|
||||||
|
val subText: String?
|
||||||
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
||||||
|
index 191b64e..fe8b3c5 100644
|
||||||
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
||||||
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationContent.java
|
||||||
|
@@ -35,6 +35,7 @@ import kotlin.coroutines.Continuation;
|
||||||
|
* Refactoring this class may require a migration strategy for the data stored in SharedPreferences.
|
||||||
|
*/
|
||||||
|
public class NotificationContent implements Parcelable, Serializable, INotificationContent {
|
||||||
|
+ private String mChannelId;
|
||||||
|
private String mTitle;
|
||||||
|
private String mText;
|
||||||
|
private String mSubtitle;
|
||||||
|
@@ -65,6 +66,11 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
+ @Nullable
|
||||||
|
+ public String getChannelId() {
|
||||||
|
+ return mChannelId;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
@Nullable
|
||||||
|
public String getTitle() {
|
||||||
|
return mTitle;
|
||||||
|
@@ -158,6 +164,7 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
||||||
|
}
|
||||||
|
|
||||||
|
protected NotificationContent(Parcel in) {
|
||||||
|
+ mChannelId = in.readString();
|
||||||
|
mTitle = in.readString();
|
||||||
|
mText = in.readString();
|
||||||
|
mSubtitle = in.readString();
|
||||||
|
@@ -183,6 +190,7 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
+ dest.writeString(mChannelId);
|
||||||
|
dest.writeString(mTitle);
|
||||||
|
dest.writeString(mText);
|
||||||
|
dest.writeString(mSubtitle);
|
||||||
|
@@ -203,6 +211,7 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
||||||
|
private static final long serialVersionUID = 397666843266836802L;
|
||||||
|
|
||||||
|
private void writeObject(java.io.ObjectOutputStream out) throws IOException {
|
||||||
|
+ out.writeObject(mChannelId);
|
||||||
|
out.writeObject(mTitle);
|
||||||
|
out.writeObject(mText);
|
||||||
|
out.writeObject(mSubtitle);
|
||||||
|
@@ -285,6 +294,11 @@ public class NotificationContent implements Parcelable, Serializable, INotificat
|
||||||
|
useDefaultVibrationPattern();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ public Builder setChannelId(String channelId) {
|
||||||
|
+ content.mChannelId = channelId;
|
||||||
|
+ return this;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
public Builder setTitle(String title) {
|
||||||
|
content.mTitle = title;
|
||||||
|
return this;
|
||||||
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt
|
||||||
|
index 3af254c..3c77e9d 100644
|
||||||
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt
|
||||||
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/NotificationData.kt
|
||||||
|
@@ -11,6 +11,9 @@ import org.json.JSONObject
|
||||||
|
* */
|
||||||
|
@JvmInline
|
||||||
|
value class NotificationData(private val data: Map<String, String>) {
|
||||||
|
+ val channelId: String?
|
||||||
|
+ get() = data["channelId"]
|
||||||
|
+
|
||||||
|
val title: String?
|
||||||
|
get() = data["title"]
|
||||||
|
|
||||||
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt
|
||||||
|
index d2cc6cf..6a48ff2 100644
|
||||||
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt
|
||||||
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/model/RemoteNotificationContent.kt
|
||||||
|
@@ -31,6 +31,8 @@ class RemoteNotificationContent(private val remoteMessage: RemoteMessage) : INot
|
||||||
|
return remoteMessage.notification?.imageUrl != null
|
||||||
|
}
|
||||||
|
|
||||||
|
+ override val channelId = remoteMessage.notification?.channelId ?: notificationData.channelId
|
||||||
|
+
|
||||||
|
override val title = remoteMessage.notification?.title ?: notificationData.title
|
||||||
|
|
||||||
|
override val text = remoteMessage.notification?.body ?: notificationData.message
|
||||||
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt
|
||||||
|
index 98f003f..2f745e8 100644
|
||||||
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt
|
||||||
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/notifications/presentation/builders/ExpoNotificationBuilder.kt
|
||||||
|
@@ -101,6 +101,9 @@ open class ExpoNotificationBuilder(
|
||||||
|
builder.setOngoing(content.isSticky)
|
||||||
|
|
||||||
|
// see "Notification anatomy" https://developer.android.com/develop/ui/views/notifications#Templates
|
||||||
|
+ content.channelId?.let {
|
||||||
|
+ builder.setChannelId(it)
|
||||||
|
+ }
|
||||||
|
builder.setContentTitle(content.title)
|
||||||
|
builder.setContentText(content.text)
|
||||||
|
builder.setSubText(content.subText)
|
||||||
|
diff --git a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
|
||||||
|
index 90ca4ff..9d4cb09 100644
|
||||||
|
--- a/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
|
||||||
|
+++ b/node_modules/expo-notifications/android/src/main/java/expo/modules/notifications/service/delegates/FirebaseMessagingDelegate.kt
|
||||||
|
@@ -3,6 +3,9 @@ package expo.modules.notifications.service.delegates
|
||||||
|
import android.content.Context
|
||||||
|
import android.os.Bundle
|
||||||
|
import com.google.firebase.messaging.RemoteMessage
|
||||||
|
+import expo.modules.backgroundnotificationhandler.BackgroundNotificationHandler
|
||||||
|
+import expo.modules.backgroundnotificationhandler.BackgroundNotificationHandlerInterface
|
||||||
|
+import expo.modules.backgroundnotificationhandler.ExpoBackgroundNotificationHandlerModule
|
||||||
|
import expo.modules.interfaces.taskManager.TaskServiceProviderHelper
|
||||||
|
import expo.modules.notifications.notifications.RemoteMessageSerializer
|
||||||
|
import expo.modules.notifications.notifications.background.BackgroundRemoteNotificationTaskConsumer
|
||||||
|
@@ -18,7 +21,7 @@ import expo.modules.notifications.tokens.interfaces.FirebaseTokenListener
|
||||||
|
import java.lang.ref.WeakReference
|
||||||
|
import java.util.*
|
||||||
|
|
||||||
|
-open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseMessagingDelegate {
|
||||||
|
+open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseMessagingDelegate, BackgroundNotificationHandlerInterface{
|
||||||
|
companion object {
|
||||||
|
// Unfortunately we cannot save state between instances of a service other way
|
||||||
|
// than by static properties. Fortunately, using weak references we can
|
||||||
|
@@ -105,8 +108,19 @@ open class FirebaseMessagingDelegate(protected val context: Context) : FirebaseM
|
||||||
|
DebugLogging.logRemoteMessage("FirebaseMessagingDelegate.onMessageReceived: message", remoteMessage)
|
||||||
|
val notification = createNotification(remoteMessage)
|
||||||
|
DebugLogging.logNotification("FirebaseMessagingDelegate.onMessageReceived: notification", notification)
|
||||||
|
- NotificationsService.receive(context, notification)
|
||||||
|
- runTaskManagerTasks(context.applicationContext, RemoteMessageSerializer.toBundle(remoteMessage))
|
||||||
|
+ if (!ExpoBackgroundNotificationHandlerModule.isForegrounded) {
|
||||||
|
+ BackgroundNotificationHandler(context, this).handleMessage(remoteMessage)
|
||||||
|
+ } else {
|
||||||
|
+ NotificationsService.receive(context, notification)
|
||||||
|
+ runTaskManagerTasks(
|
||||||
|
+ context.applicationContext,
|
||||||
|
+ RemoteMessageSerializer.toBundle(remoteMessage)
|
||||||
|
+ )
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ override fun showMessage(remoteMessage: RemoteMessage) {
|
||||||
|
+ NotificationsService.receive(context, createNotification(remoteMessage))
|
||||||
|
}
|
||||||
|
|
||||||
|
protected fun createNotification(remoteMessage: RemoteMessage): Notification {
|
||||||
Reference in New Issue
Block a user