chore(config): coil-gif dependency, RECORD_AUDIO permission, firestore rules allow voice type
- build.gradle.kts: add coil-gif 2.7.0 for animated GIF/WebP support - AndroidManifest: RECORD_AUDIO permission + microphone feature (optional) - firestore.rules: messages create allows 'voice' type alongside 'image', accepts durationMs field
This commit is contained in:
parent
3ad725ca8a
commit
dbf7ae662b
|
|
@ -187,6 +187,8 @@ dependencies {
|
||||||
|
|
||||||
// Image loading
|
// Image loading
|
||||||
implementation("io.coil-kt:coil-compose:2.7.0")
|
implementation("io.coil-kt:coil-compose:2.7.0")
|
||||||
|
// Animated GIF / WebP support (for GIFs, stickers, Bitmoji from the keyboard)
|
||||||
|
implementation("io.coil-kt:coil-gif:2.7.0")
|
||||||
|
|
||||||
// AppCompat — required by BiometricPrompt (needs FragmentActivity base)
|
// AppCompat — required by BiometricPrompt (needs FragmentActivity base)
|
||||||
implementation("androidx.appcompat:appcompat:1.7.0")
|
implementation("androidx.appcompat:appcompat:1.7.0")
|
||||||
|
|
|
||||||
|
|
@ -4,8 +4,10 @@
|
||||||
<uses-permission android:name="android.permission.INTERNET" />
|
<uses-permission android:name="android.permission.INTERNET" />
|
||||||
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
|
||||||
<uses-permission android:name="android.permission.CAMERA" />
|
<uses-permission android:name="android.permission.CAMERA" />
|
||||||
|
<uses-permission android:name="android.permission.RECORD_AUDIO" />
|
||||||
|
|
||||||
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
<uses-feature android:name="android.hardware.camera" android:required="false" />
|
||||||
|
<uses-feature android:name="android.hardware.microphone" android:required="false" />
|
||||||
|
|
||||||
<application
|
<application
|
||||||
android:name=".CloserApp"
|
android:name=".CloserApp"
|
||||||
|
|
|
||||||
|
|
@ -433,9 +433,9 @@ service cloud.firestore {
|
||||||
allow create: if isCouplesMember(coupleId)
|
allow create: if isCouplesMember(coupleId)
|
||||||
&& coupleEncryptionEnabled(coupleId)
|
&& coupleEncryptionEnabled(coupleId)
|
||||||
&& request.resource.data.authorUserId == request.auth.uid
|
&& request.resource.data.authorUserId == request.auth.uid
|
||||||
&& request.resource.data.keys().hasOnly(['authorUserId', 'text', 'createdAt', 'type', 'mediaUrl'])
|
&& request.resource.data.keys().hasOnly(['authorUserId', 'text', 'createdAt', 'type', 'mediaUrl', 'durationMs'])
|
||||||
&& (
|
&& (
|
||||||
(request.resource.data.get('type', 'text') == 'image'
|
(request.resource.data.get('type', 'text') in ['image', 'voice']
|
||||||
&& request.resource.data.mediaUrl is string
|
&& request.resource.data.mediaUrl is string
|
||||||
&& request.resource.data.mediaUrl.size() > 0)
|
&& request.resource.data.mediaUrl.size() > 0)
|
||||||
||
|
||
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue