camera roll

This commit is contained in:
Andrey Shovkoplyas 2020-05-14 15:00:06 +02:00 committed by Andrea Maria Piana
parent 91bcd0c861
commit f659cbf242
No known key found for this signature in database
GPG Key ID: AA6CCA6DE0E06424
47 changed files with 604 additions and 719 deletions

View File

@ -35,7 +35,8 @@
android:theme="@style/AppTheme"
android:name=".MainApplication"
android:largeHeap="true"
android:usesCleartextTraffic="true">
android:usesCleartextTraffic="true"
android:requestLegacyExternalStorage="true">
<activity
android:name=".MainActivity"
android:label="@string/app_name"

View File

@ -70,7 +70,6 @@ PODS:
- OpenSSL-Universal (1.0.2.19):
- OpenSSL-Universal/Static (= 1.0.2.19)
- OpenSSL-Universal/Static (1.0.2.19)
- QBImagePickerController (3.4.0)
- RCTRequired (0.62.2)
- RCTTypeSafety (0.62.2):
- FBLazyVector (= 0.62.2)
@ -236,13 +235,15 @@ PODS:
- React-jsinspector (0.62.2)
- react-native-background-timer (2.2.0):
- React
- react-native-camera (3.23.1):
- react-native-camera (3.26.0):
- React
- react-native-camera/RCT (= 3.23.1)
- react-native-camera/RN (= 3.23.1)
- react-native-camera/RCT (3.23.1):
- react-native-camera/RCT (= 3.26.0)
- react-native-camera/RN (= 3.26.0)
- react-native-camera/RCT (3.26.0):
- React
- react-native-camera/RN (3.23.1):
- react-native-camera/RN (3.26.0):
- React
- react-native-cameraroll (1.6.2):
- React
- react-native-image-resizer (1.0.0):
- React
@ -256,7 +257,7 @@ PODS:
- React
- react-native-splash-screen (3.2.0):
- React
- react-native-webview (8.0.7):
- react-native-webview (9.4.0):
- React
- React-RCTActionSheet (0.62.2):
- React-Core/RCTActionSheetHeaders (= 0.62.2)
@ -327,11 +328,15 @@ PODS:
- React
- RNGestureHandler (1.6.1):
- React
- RNImageCropPicker (0.25.3):
- QBImagePickerController
- RNImageCropPicker (0.31.1):
- React-Core
- React-RCTImage
- RSKImageCropper
- RNImageCropPicker/QBImagePickerController (= 0.31.1)
- TOCropViewController
- RNImageCropPicker/QBImagePickerController (0.31.1):
- React-Core
- React-RCTImage
- TOCropViewController
- RNKeychain (3.0.0-rc.3):
- React
- RNLanguages (3.0.2):
@ -344,13 +349,13 @@ PODS:
- React
- RNSVG (9.13.6):
- React
- RSKImageCropper (2.2.3)
- SQLCipher (3.4.2):
- SQLCipher/standard (= 3.4.2)
- SQLCipher/common (3.4.2)
- SQLCipher/standard (3.4.2):
- SQLCipher/common
- SSZipArchive (2.2.2)
- TOCropViewController (2.5.2)
- TouchID (4.4.1):
- React
- Yoga (1.14.0)
@ -395,6 +400,7 @@ DEPENDENCIES:
- React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`)
- react-native-background-timer (from `../node_modules/react-native-background-timer`)
- react-native-camera (from `../node_modules/react-native-camera`)
- "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)"
- react-native-image-resizer (from `../node_modules/react-native-image-resizer`)
- react-native-mail (from `../node_modules/react-native-mail`)
- "react-native-netinfo (from `../node_modules/@react-native-community/netinfo`)"
@ -433,8 +439,6 @@ DEPENDENCIES:
SPEC REPOS:
https://github.com/CocoaPods/Specs.git:
- boost-for-react-native
- QBImagePickerController
- RSKImageCropper
- SQLCipher
- SSZipArchive
trunk:
@ -448,6 +452,7 @@ SPEC REPOS:
- Flipper-RSocket
- FlipperKit
- OpenSSL-Universal
- TOCropViewController
- YogaKit
EXTERNAL SOURCES:
@ -483,6 +488,8 @@ EXTERNAL SOURCES:
:path: "../node_modules/react-native-background-timer"
react-native-camera:
:path: "../node_modules/react-native-camera"
react-native-cameraroll:
:path: "../node_modules/@react-native-community/cameraroll"
react-native-image-resizer:
:path: "../node_modules/react-native-image-resizer"
react-native-mail:
@ -563,7 +570,6 @@ SPEC CHECKSUMS:
Folly: 30e7936e1c45c08d884aa59369ed951a8e68cf51
glog: 682164e7ac67e41afd8f7b6a37a96d04caf61cc0
OpenSSL-Universal: 8b48cc0d10c1b2923617dfe5c178aa9ed2689355
QBImagePickerController: d54cf93db6decf26baf6ed3472f336ef35cae022
RCTRequired: cec6a34b3ac8a9915c37e7e4ad3aa74726ce4035
RCTTypeSafety: 93006131180074cffa227a1075802c89a49dd4ce
React: 29a8b1a02bd764fb7644ef04019270849b9a7ac3
@ -574,14 +580,15 @@ SPEC CHECKSUMS:
React-jsiexecutor: 1540d1c01bb493ae3124ed83351b1b6a155db7da
React-jsinspector: 512e560d0e985d0e8c479a54a4e5c147a9c83493
react-native-background-timer: 1f7d560647b40e6a60b01c452ba29c54bf581fc4
react-native-camera: 1b52abea404d04e040edb3e74b7c5523c01a3089
react-native-camera: 2b74be8edc1103c4c46d1f4e5f41723d9ff052cc
react-native-cameraroll: ac69828fc43b9dbf92149714fd739577d38e4448
react-native-image-resizer: 4516052af6ae0248caf4ccf356caecefe60072d7
react-native-mail: 7e37dfbe93ff0d4c7df346b738854dbed533e86f
react-native-netinfo: ddaca8bbb9e6e914b1a23787ccb879bc642931c9
react-native-safe-area-context: e200d4433aba6b7e60b52da5f37af11f7a0b0392
react-native-shake: de052eaa3eadc4a326b8ddd7ac80c06e8d84528c
react-native-splash-screen: 200d11d188e2e78cea3ad319964f6142b6384865
react-native-webview: f51a7a42278b01b07464a65c586aa0086c1e741e
react-native-webview: cf5527893252b3b036eea024a1da6996f7344c74
React-RCTActionSheet: f41ea8a811aac770e0cc6e0ad6b270c644ea8b7c
React-RCTAnimation: 49ab98b1c1ff4445148b72a3d61554138565bad0
React-RCTBlob: a332773f0ebc413a0ce85942a55b064471587a71
@ -597,20 +604,20 @@ SPEC CHECKSUMS:
RNCMaskedView: 71fc32d971f03b7f03d6ab6b86b730c4ee64f5b6
RNFS: 2bd9eb49dc82fa9676382f0585b992c424cd59df
RNGestureHandler: 8f09cd560f8d533eb36da5a6c5a843af9f056b38
RNImageCropPicker: bfb3ea9c8622f290532e2fe63f369e0d5a52f597
RNImageCropPicker: 38865ab4af1b0b2146ad66061196bc0184946855
RNKeychain: 216f37338fcb9e5c3a2530f1e3295f737a690cb1
RNLanguages: 962e562af0d34ab1958d89bcfdb64fafc37c513e
RNReactNativeHapticFeedback: 2566b468cc8d0e7bb2f84b23adc0f4614594d071
RNReanimated: 955cf4068714003d2f1a6e2bae3fb1118f359aff
RNScreens: ac02d0e4529f08ced69f5580d416f968a6ec3a1d
RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f
RSKImageCropper: a446db0e8444a036b34f3c43db01b2373baa4b2a
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
SSZipArchive: fa16b8cc4cdeceb698e5e5d9f67e9558532fbf23
TOCropViewController: e9da34f484aedd4e5d5a8ab230ba217cfe16c729
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
Yoga: 3ebccbdd559724312790e7742142d062476b698e
YogaKit: f782866e155069a2cca2517aafea43200b01fd5a
PODFILE CHECKSUM: 23557eb8cb46b1c5dd060326fe1873a162394149
COCOAPODS: 1.8.4
COCOAPODS: 1.9.1

View File

@ -22,7 +22,7 @@
74B758FC20D7C00B003343C3 /* launch-image-universal.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 74B758FB20D7C00B003343C3 /* launch-image-universal.storyboard */; };
8391E8E0E93C41A98AAA6631 /* Inter-SemiBoldItalic.otf in Resources */ = {isa = PBXBuildFile; fileRef = A4F2BBE8D4DD4140A6CCAC39 /* Inter-SemiBoldItalic.otf */; };
8E55E6877F950B81C8D711C5 /* libPods-StatusIm.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 101A4045637A2ADF57D28EF5 /* libPods-StatusIm.a */; };
925C1F4C1F7B73B20063DFA0 /* (null) in Frameworks */ = {isa = PBXBuildFile; };
925C1F4C1F7B73B20063DFA0 /* BuildFile in Frameworks */ = {isa = PBXBuildFile; };
9EF0836B1F3B53AB00876A8F /* libReactNativeConfig.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 9EF083611F3B538B00876A8F /* libReactNativeConfig.a */; };
B24FC7FD1DE7195700D694FF /* Social.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FC1DE7195700D694FF /* Social.framework */; };
B24FC7FF1DE7195F00D694FF /* MessageUI.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = B24FC7FE1DE7195F00D694FF /* MessageUI.framework */; };
@ -138,7 +138,7 @@
B24FC7FD1DE7195700D694FF /* Social.framework in Frameworks */,
CE4E31B31D8695250033ED64 /* Statusgo.framework in Frameworks */,
20AB9EC61D47CC0300E7FD9C /* libRCTStatus.a in Frameworks */,
925C1F4C1F7B73B20063DFA0 /* (null) in Frameworks */,
925C1F4C1F7B73B20063DFA0 /* BuildFile in Frameworks */,
25DC9C9DC25846BD8D084888 /* libc++.tbd in Frameworks */,
BA68A2377A20496EA737000D /* libz.tbd in Frameworks */,
8E55E6877F950B81C8D711C5 /* libPods-StatusIm.a in Frameworks */,
@ -474,13 +474,13 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-StatusIm/Pods-StatusIm-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/QBImagePickerController/QBImagePicker.bundle",
"${PODS_ROOT}/RSKImageCropper/RSKImageCropper/RSKImageCropperStrings.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RSKImageCropperStrings.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;
@ -538,13 +538,13 @@
);
inputPaths = (
"${PODS_ROOT}/Target Support Files/Pods-StatusIm-StatusImTests/Pods-StatusIm-StatusImTests-resources.sh",
"${PODS_CONFIGURATION_BUILD_DIR}/QBImagePickerController/QBImagePicker.bundle",
"${PODS_ROOT}/RSKImageCropper/RSKImageCropper/RSKImageCropperStrings.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/RNImageCropPicker/QBImagePicker.bundle",
"${PODS_CONFIGURATION_BUILD_DIR}/TOCropViewController/TOCropViewControllerBundle.bundle",
);
name = "[CP] Copy Pods Resources";
outputPaths = (
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/QBImagePicker.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/RSKImageCropperStrings.bundle",
"${TARGET_BUILD_DIR}/${UNLOCALIZED_RESOURCES_FOLDER_PATH}/TOCropViewControllerBundle.bundle",
);
runOnlyForDeploymentPostprocessing = 0;
shellPath = /bin/sh;

View File

@ -76,13 +76,13 @@
</dict>
</dict>
<key>NSCameraUsageDescription</key>
<string>The app uses your camera to scan QR codes.</string>
<string>Status uses camera to take pictures and scan QR codes.</string>
<key>NSLocationAlwaysUsageDescription</key>
<string>Location access is required for some DApps to function properly.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>Location access is required for some DApps to function properly.</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>Photos access is required to give you the ability to choose custom profile pictures.</string>
<string>Photos access is required to give you the ability to send images.</string>
<key>UIAppFonts</key>
<array>
<string>Inter-Bold.otf</string>

View File

@ -10,6 +10,7 @@
"app:android": "react-native run-android"
},
"dependencies": {
"@react-native-community/cameraroll": "^1.6.1",
"@react-native-community/clipboard": "^1.2.2",
"@react-native-community/masked-view": "^0.1.6",
"@react-native-community/netinfo": "^4.4.0",
@ -38,7 +39,7 @@
"react-native-fs": "^2.14.1",
"react-native-gesture-handler": "^1.6.0",
"react-native-haptic-feedback": "^1.9.0",
"react-native-image-crop-picker": "^0.25.0",
"react-native-image-crop-picker": "^0.31.1",
"react-native-image-resizer": "git+https://github.com/status-im/react-native-image-resizer.git#1.0.0-2-status",
"react-native-keychain": "git+https://github.com/status-im/react-native-keychain.git#v.3.0.0-5-status",
"react-native-languages": "^3.0.2",

View File

@ -1207,6 +1207,11 @@
"@types/yargs" "^15.0.0"
chalk "^3.0.0"
"@react-native-community/cameraroll@^1.6.1":
version "1.6.2"
resolved "https://registry.yarnpkg.com/@react-native-community/cameraroll/-/cameraroll-1.6.2.tgz#a4dedcf8ba7bc938f805dd07dd43a275edb1f411"
integrity sha512-5R/2Tpi7APoNBDmRV23OcRIN9YiaRMJAHrXkGDpj7jVo2yQpJCCrARnZ9qhJ9dYEMybdP/XhXI1vVjuad5xqNQ==
"@react-native-community/cli-debugger-ui@^4.8.0":
version "4.8.0"
resolved "https://registry.yarnpkg.com/@react-native-community/cli-debugger-ui/-/cli-debugger-ui-4.8.0.tgz#9a6419b29be69422e0056bbb1874775750351d22"
@ -6451,9 +6456,9 @@ react-native-background-timer@^2.1.1:
integrity sha512-Y7N6diSFko/FCJPMmB0PoBlmY1kEcma7qDVwn8t7zi12GLqpe/Vwls97onkSD8/QL+BR33BygUHOrLTPwgeKfg==
react-native-camera@^3.3.3:
version "3.23.1"
resolved "https://registry.yarnpkg.com/react-native-camera/-/react-native-camera-3.23.1.tgz#fb6fe52f8a357852de6dcd81d0d187cd632dc7dd"
integrity sha512-ghQT2IhiZiNMDgixD/MrfwgFx9arwOb2z79xDJ8dsz8DFcpBMbXjXZETaAK0WaZ/MWOaY84k0eGlx1hoVT77wQ==
version "3.26.0"
resolved "https://registry.yarnpkg.com/react-native-camera/-/react-native-camera-3.26.0.tgz#80f37124c524d76ae79f55f3975ed73b6515aa49"
integrity sha512-W/h89LN+jujlzc89nWpvukbfnbFO+Fskf6PR23pP6zminpJDIArHabWLd1mQoJ3p6r+gUJ8I4bgsxUmSMgLAgA==
dependencies:
prop-types "^15.6.2"
@ -6505,10 +6510,10 @@ react-native-haptic-feedback@^1.9.0:
resolved "https://registry.yarnpkg.com/react-native-haptic-feedback/-/react-native-haptic-feedback-1.9.0.tgz#7d62c54536f04dd5d8f1c2bb8ee444009f2294b9"
integrity sha512-tIRbq8k7HK9AoyvXrOHUEFmJd65ZAh1HP9mDyD/gDisG1ApY4Im9UKn0q0of9z7s8AJY3sZA9GMuSKdSBGdKKQ==
react-native-image-crop-picker@^0.25.0:
version "0.25.3"
resolved "https://registry.yarnpkg.com/react-native-image-crop-picker/-/react-native-image-crop-picker-0.25.3.tgz#46ee28b4a0a187240e388bd28a44cf8c274caec6"
integrity sha512-jQ416WXEiEQ3w057QOYU++8/mDqYb2A/AGZY/NwR5eKda/z8a4wncWKj7oF9KBAHNKE1TmPrl9Rm0GZ0Jrzp6A==
react-native-image-crop-picker@^0.31.1:
version "0.31.1"
resolved "https://registry.yarnpkg.com/react-native-image-crop-picker/-/react-native-image-crop-picker-0.31.1.tgz#b56248a9e31d62f1c6e7c2f85d296869c32af4cd"
integrity sha512-I5z7DcTKYYASevIalkqKdiw9Fe4CVCKPVMMkLGDVGUYgZZWlbOS9G1+oNWtWwoB5S9e931GkDrZ/HL5UhADG/Q==
"react-native-image-resizer@git+https://github.com/status-im/react-native-image-resizer.git#1.0.0-2-status":
version "1.0.0"

View File

@ -503,6 +503,20 @@
}
},
{
"path": "androidx/exifinterface/exifinterface/1.1.0-beta01/exifinterface-1.1.0-beta01",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "113ca4bcf7feed9865496b8980cb92dec0d99d12",
"sha256": "1hxg57hchc87vzzwc7a5n7jdfa82zwycl38scds957crxap57sah"
},
"jar": {
"sha1": "3a3ae85030468e63b28989401fe69db581e40c82",
"sha256": "174rrl18rq5yrrmjcvl3chjhqs051dlf2j1fipwcgv0v737jk67w"
}
},
{
"path": "androidx/fragment/fragment/1.0.0/fragment-1.0.0",
"host": "https://dl.google.com/dl/android/maven2",
@ -965,6 +979,20 @@
}
},
{
"path": "androidx/transition/transition/1.2.0-rc01/transition-1.2.0-rc01",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "7fe296c768d13fdd86a0dcd5e15083d5b6f5290f",
"sha256": "1gkxz4mfa6pb5k5dz6j9hbpx1kkgp9sf33r6wcxcqg74nyn7jpd4"
},
"jar": {
"sha1": "40bdbe5a245edd0393b7b0e1d9dd6c446dd9008d",
"sha256": "1fkfzqnppj6ky7d7i42n2hjyhrlll26b5cmik85qfzqq42b1zrbj"
}
},
{
"path": "androidx/transition/transition/1.2.0/transition-1.2.0",
"host": "https://dl.google.com/dl/android/maven2",
@ -1133,34 +1161,6 @@
}
},
{
"path": "android/arch/core/common/1.1.0/common-1.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "jar",
"pom": {
"sha1": "a5bed3736b36ebb3b7c100983fd5d0e880305a6a",
"sha256": "0i5ywqk14h224a20vcvf929r314597zj7krl33gcnl8m1lpf5n5q"
},
"jar": {
"sha1": "8007981f7d7540d89cd18471b8e5dcd2b4f99167",
"sha256": "1zcbkc77gw64saspaw5lwl6r5pkkghxb36vscj7zz4mwjjvj8j6k"
}
},
{
"path": "android/arch/core/runtime/1.1.0/runtime-1.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "49ed9c19afbc009dbfcf17a7daad4198e28c9a7e",
"sha256": "170s3l8nw7cf1fqdqffblrgpg71jww1vb4mzgvzi74w3vxx72gzs"
},
"jar": {
"sha1": "0dabc0064464782c5014c7e8be5e93bd76466c41",
"sha256": "1qs5hj3ma3nj2i13majn3vnzlyq31xchakn6xqp8myxwfmshyh43"
}
},
{
"path": "android/arch/lifecycle/common/1.0.0/common-1.0.0",
"host": "https://dl.google.com/dl/android/maven2",
@ -1175,34 +1175,6 @@
}
},
{
"path": "android/arch/lifecycle/common/1.1.0/common-1.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "jar",
"pom": {
"sha1": "01d1ca8193bf2fe61614750c1e3c32b4bea135f5",
"sha256": "1vzj0nlkxwwghwr8a1jzbjxf0p7wg3p8dgz2yhqi0zpfaj6i81qq"
},
"jar": {
"sha1": "0edf3f7bfb84a7521d0599efa3b0113a0ee90f85",
"sha256": "01q8qc28007dqffsfhsnlg1bnbxylv7n53jxbx6xqm9jsg7k2kk1"
}
},
{
"path": "android/arch/lifecycle/livedata-core/1.1.0/livedata-core-1.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "9b955481cd49f9a2540e97498627d3daaaff956f",
"sha256": "0ch0niir5p6rl45xncqji9gd1im9f4jafqqw6205ss91l1blnna1"
},
"jar": {
"sha1": "d6827a080a137fa345a0ed4a438e14e5633e0032",
"sha256": "0sr0nmz159h33qkccd7jf0lszkfcd83z549dwz3q0nmnzzw7zr8l"
}
},
{
"path": "android/arch/lifecycle/runtime/1.0.0/runtime-1.0.0",
"host": "https://dl.google.com/dl/android/maven2",
@ -1217,34 +1189,6 @@
}
},
{
"path": "android/arch/lifecycle/runtime/1.1.0/runtime-1.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "57175c3b6e8acf3eee00890df352e0aa417f7cc0",
"sha256": "132z65g4kba11b2wxhsjgk872jn8api5zxflq10grl2xnysxmjhy"
},
"jar": {
"sha1": "95428e5f6bf6875a6a1125d2157c3836a1a837f5",
"sha256": "0biy4a682zdsjjv8c4s099zi9a3lh6n9krakcw9sbmjdja9xfkq9"
}
},
{
"path": "android/arch/lifecycle/viewmodel/1.1.0/viewmodel-1.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "6455d9c23b43dc23b57caa216e26eae3e3343922",
"sha256": "0cw4a1myg9fkpmz6bksj5njy2shy79q7hlpqz8wfvpaiay47c9l0"
},
"jar": {
"sha1": "74ee369b874da61b5b81bebd7b8df0c2577309c8",
"sha256": "0mr5ph6dfd8wmsdyd3i2szpwrppksrl00am4vihhd1d9bqxcj1v4"
}
},
{
"path": "com/android/databinding/baseLibrary/3.0.0/baseLibrary-3.0.0",
"host": "https://dl.google.com/dl/android/maven2",
@ -1371,20 +1315,6 @@
}
},
{
"path": "com/android/support/animated-vector-drawable/27.1.0/animated-vector-drawable-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "359012d7abf2815fad47a7b368b6707918a0964f",
"sha256": "0v9lzwz7vagacqrz8h02kls66kdm1mr406k0mg2pgmwgja0336ym"
},
"jar": {
"sha1": "de8e39a293c7ae0bdb75306d60b40aa1a4e88d05",
"sha256": "0bskm6c27pzg30p49xai2fybfjw5jwq50q7yipx87l33zylv65hj"
}
},
{
"path": "com/android/support/appcompat-v7/26.0.2/appcompat-v7-26.0.2",
"host": "https://dl.google.com/dl/android/maven2",
@ -1413,20 +1343,6 @@
}
},
{
"path": "com/android/support/appcompat-v7/27.1.0/appcompat-v7-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "57564e50039cb70a26b8b87c9bc8c562101aecd1",
"sha256": "0j3wh3x5bz55m5d3dzn1pzrpsmaz9hcgg33nfhhybmgawih5jh5m"
},
"jar": {
"sha1": "41d5bc28ca11447234a8b9ab5fb133eaa3cc7fa5",
"sha256": "12x9sfrx31mbx2y1fhsg0f3idr9kp7fbpzc3k1m1wqg99hn9ikdz"
}
},
{
"path": "com/android/support/recyclerview-v7/27.0.1/recyclerview-v7-27.0.1",
"host": "https://dl.google.com/dl/android/maven2",
@ -1483,20 +1399,6 @@
}
},
{
"path": "com/android/support/support-annotations/27.1.0/support-annotations-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "jar",
"pom": {
"sha1": "6d9073e2877892ac198c704a9e20eef24a2f6b04",
"sha256": "0llkhlliwjl6vd4hg4qakack67ask82kbf0ayimcymlwaq644w9m"
},
"jar": {
"sha1": "39ded76b5e1ce1c5b2688e1d25cdc20ecee32007",
"sha256": "1kwrj8189qsbdkk6kcq05y6zrvzqi1zmwmazhjgb1ln30q19cr9k"
}
},
{
"path": "com/android/support/support-compat/26.0.2/support-compat-26.0.2",
"host": "https://dl.google.com/dl/android/maven2",
@ -1539,20 +1441,6 @@
}
},
{
"path": "com/android/support/support-compat/27.1.0/support-compat-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "232b5c21f55a0b4e2a325e0e3392879c7b2b58e1",
"sha256": "0z6zya2c0b0lkar3n53x9l2fhyrdzbn4wlpi35x1l0lia7djc9iv"
},
"jar": {
"sha1": "a7eea3cb0c9f9bf5ce0f0899a9bee721ffd191e0",
"sha256": "0217jq31qkv2dlryi51mfm7dg7h6lhnyzd89jy9362hrihjs6sc3"
}
},
{
"path": "com/android/support/support-core-ui/26.0.2/support-core-ui-26.0.2",
"host": "https://dl.google.com/dl/android/maven2",
@ -1595,20 +1483,6 @@
}
},
{
"path": "com/android/support/support-core-ui/27.1.0/support-core-ui-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "2911a40f8f086cbc34b0eaf6249b35b82917993a",
"sha256": "04r4bj5q58cm2l0q4ixs45m5r36i22a7ahxpmzpjic1c7q46d271"
},
"jar": {
"sha1": "54b6f9853ff5e53174622f3f6f7eb208aacebd56",
"sha256": "0sp0hr5hyga50b8xgk8208b1w2vj1hl4xk3183l7cip608rx6bgd"
}
},
{
"path": "com/android/support/support-core-utils/26.0.2/support-core-utils-26.0.2",
"host": "https://dl.google.com/dl/android/maven2",
@ -1651,20 +1525,6 @@
}
},
{
"path": "com/android/support/support-core-utils/27.1.0/support-core-utils-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "1a83c651b465dbbc595cfd2386947a5c6d0c7426",
"sha256": "1x1x13gyy0prvjc3c6j306p6qcmb8z2zi51s4bzidl94w1zzk262"
},
"jar": {
"sha1": "1f21723126baf81f154326bb5f2e901cec82d03b",
"sha256": "19kdq4v6rx4p1kvyg9hsnp4yk4ln2lv4np6i3xzb8fzi3l9v4ya5"
}
},
{
"path": "com/android/support/support-fragment/26.0.2/support-fragment-26.0.2",
"host": "https://dl.google.com/dl/android/maven2",
@ -1707,20 +1567,6 @@
}
},
{
"path": "com/android/support/support-fragment/27.1.0/support-fragment-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "531e097c13a83a62561f761d67a3b50bfec2a3c9",
"sha256": "1lvl7l4qmlyb3j5zqd33hq6j5q410rqhqk5pzdm70jdrd0iyyygw"
},
"jar": {
"sha1": "2db3ef0a4733b8e65977621e161d1529c0020751",
"sha256": "04wbcslz0an5b328wphld1z0341d20il55p6br3pljnzmw7ywpmk"
}
},
{
"path": "com/android/support/support-media-compat/26.0.2/support-media-compat-26.0.2",
"host": "https://dl.google.com/dl/android/maven2",
@ -1805,20 +1651,6 @@
}
},
{
"path": "com/android/support/support-vector-drawable/27.1.0/support-vector-drawable-27.1.0",
"host": "https://dl.google.com/dl/android/maven2",
"type": "aar",
"pom": {
"sha1": "fd58f7bb5386a55664be50b634e6173d97c4400d",
"sha256": "0h2zipsxg1jdng32q18ql6lksbqzb9nfkbbbk481zlk25v0xdhjf"
},
"jar": {
"sha1": "cbfd5d8020f0cbd4b66a09f8d21e2265a55f529b",
"sha256": "01nai97hncvfwf32zqfxvz1mq3r76s30kkkbf6h6ilpgj0hfk4md"
}
},
{
"path": "com/android/tools/analytics-library/crash/26.2.1/crash-26.2.1",
"host": "https://dl.google.com/dl/android/maven2",
@ -4269,20 +4101,6 @@
}
},
{
"path": "com/facebook/flipper/flipper-network-plugin/0.35.0/flipper-network-plugin-0.35.0",
"host": "https://repository.sonatype.org/content/groups/sonatype-public-grid",
"type": "aar",
"pom": {
"sha1": "366a68d0df95951a73453d305b83fad53143b902",
"sha256": "15xm3xpf6r4sfzi92jl1i26dsmlm888w7j06rrzc46zf0aymnwx9"
},
"jar": {
"sha1": "5180a9a0456bccee56206713393878b964101e55",
"sha256": "0ajhgyirpvmix5j0gdk174k272034inj037si925zdigglw5nh0q"
}
},
{
"path": "com/facebook/flipper/flipper/0.35.0/flipper-0.35.0",
"host": "https://repository.sonatype.org/content/groups/sonatype-public-grid",
@ -4354,16 +4172,16 @@
},
{
"path": "com/github/yalantis/ucrop/2.2.2-native/ucrop-2.2.2-native",
"path": "com/github/yalantis/ucrop/2.2.5-native/ucrop-2.2.5-native",
"host": "https://repository.sonatype.org/content/groups/sonatype-public-grid",
"type": "aar",
"pom": {
"sha1": "02df11f4174862c446a3dc2ef14cec1cd5755c4a",
"sha256": "1g5qsc6zfbjg7a5vdyx7g02qnv8vswxik29rnwnw8n075vns0h21"
"sha1": "54e36a57a744bd8ac522da81284a6366bb6939a6",
"sha256": "19x239zg1bjf97zgkv6jvba1la6sn4j6b76w5rnc4kp5jlh89pql"
},
"jar": {
"sha1": "6f5312e3163bf668b0f66c3068926b700e410a8d",
"sha256": "0c50s95achsswsf7125k4ibr60l4m53yn5m501an2wk1658q7kx8"
"sha1": "34281fb5e7e7a2681b2482881fcfceba1a322b84",
"sha256": "0nrm55pihyq1fy6iwi21abv7wdsjdz4g9dwsrn1a3dbppwwjbkr1"
}
},
@ -6525,20 +6343,6 @@
}
},
{
"path": "com/squareup/okhttp3/okhttp/3.8.1/okhttp-3.8.1",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "fb78f48ceb52df1ca8eea576716c34c99a5890d0",
"sha256": "0kny2snb3ihja7pm7qh2wky8767pyrc8i3yjzncys5c327m22pap"
},
"jar": {
"sha1": "4d060ca3190df0eda4dc13415532a12e15ca5f11",
"sha256": "0h988ydigk449lcsp80jzjpn36ms4cksjl229m11vxkl7y8pzmf1"
}
},
{
"path": "com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1",
"host": "https://repo.maven.apache.org/maven2",
@ -6553,20 +6357,6 @@
}
},
{
"path": "com/squareup/okhttp3/okhttp/3.14.1/okhttp-3.14.1",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "92952bd2db127114ec7069b05317c1fe033de54b",
"sha256": "0x2v74z227bhfl23p5vzd1b9lccmgsjgfwzm01kcfrgxxlkddabs"
},
"jar": {
"sha1": "67612a22d4b8f33c55263b188bf5a72774d06d18",
"sha256": "0qz5qggrvrs9pbvb30n8bm5hn1p48pjd4qfkvijalxihcn8ycsss"
}
},
{
"path": "com/squareup/okhttp3/okhttp/4.7.2/okhttp-4.7.2",
"host": "https://repo.maven.apache.org/maven2",
@ -6581,16 +6371,6 @@
}
},
{
"path": "com/squareup/okhttp3/parent/3.8.1/parent-3.8.1",
"host": "https://repo.maven.apache.org/maven2",
"type": "pom",
"pom": {
"sha1": "e81c3f3a398182176b819aa4bd2d70418a5c69f3",
"sha256": "0msfhnyx0wc2sqrm9l2hz017ddiq0mva3icarcl2ysbap0zp59gj"
}
},
{
"path": "com/squareup/okhttp3/parent/3.12.1/parent-3.12.1",
"host": "https://repo.maven.apache.org/maven2",
@ -6601,16 +6381,6 @@
}
},
{
"path": "com/squareup/okhttp3/parent/3.14.1/parent-3.14.1",
"host": "https://repo.maven.apache.org/maven2",
"type": "pom",
"pom": {
"sha1": "32696e235dfe284f78e05f9bd24345a2d261633c",
"sha256": "0hpw4vnnfxvd9yhhmrlq0hqczd1lpa7nrk25zglficjwb15wsm96"
}
},
{
"path": "com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0",
"host": "https://repo.maven.apache.org/maven2",
@ -6621,16 +6391,6 @@
}
},
{
"path": "com/squareup/okio/okio-parent/1.17.2/okio-parent-1.17.2",
"host": "https://repo.maven.apache.org/maven2",
"type": "pom",
"pom": {
"sha1": "57554cc5eac8170d5ea09c38ff7d6b86d7c8db23",
"sha256": "097h2vz0wxjb9nj8lhdaazkzpfasr1ss38qgn6ab63iadwa407z8"
}
},
{
"path": "com/squareup/okio/okio/1.15.0/okio-1.15.0",
"host": "https://repo.maven.apache.org/maven2",
@ -6645,20 +6405,6 @@
}
},
{
"path": "com/squareup/okio/okio/1.17.2/okio-1.17.2",
"host": "https://repo.maven.apache.org/maven2",
"type": "jar",
"pom": {
"sha1": "abe9c87bf8b3b4e19cabc0014b76fd633fa467a5",
"sha256": "1w03pgj28lsb9x7g10gaky8hxvb4xsa1k99x415p2smb8dagfmyd"
},
"jar": {
"sha1": "78c7820b205002da4d2d137f6f312bd64b3d6049",
"sha256": "1f72kw6ap0a5rw2ng20sxdy28kb01nc6y7byqka7mi7s5wny837q"
}
},
{
"path": "com/squareup/okio/okio/2.6.0/okio-2.6.0",
"host": "https://repo.maven.apache.org/maven2",

View File

@ -1,3 +1,4 @@
androidx.activity:activity:1.0.0
androidx.activity:activity:1.1.0
androidx.annotation:annotation:1.0.0
androidx.annotation:annotation:1.1.0
@ -27,21 +28,26 @@ androidx.databinding:databinding-compiler-common:3.5.3
androidx.documentfile:documentfile:1.0.0
androidx.drawerlayout:drawerlayout:1.0.0
androidx.exifinterface:exifinterface:1.0.0
androidx.exifinterface:exifinterface:1.1.0-beta01
androidx.fragment:fragment:1.0.0
androidx.fragment:fragment:1.1.0
androidx.fragment:fragment:1.2.1
androidx.interpolator:interpolator:1.0.0
androidx.legacy:legacy-support-core-ui:1.0.0
androidx.legacy:legacy-support-core-utils:1.0.0
androidx.legacy:legacy-support-v4:1.0.0
androidx.lifecycle:lifecycle-common:2.0.0
androidx.lifecycle:lifecycle-common:2.1.0
androidx.lifecycle:lifecycle-common:2.2.0
androidx.lifecycle:lifecycle-livedata-core:2.0.0
androidx.lifecycle:lifecycle-livedata-core:2.2.0
androidx.lifecycle:lifecycle-livedata:2.0.0
androidx.lifecycle:lifecycle-runtime:2.0.0
androidx.lifecycle:lifecycle-runtime:2.1.0
androidx.lifecycle:lifecycle-runtime:2.2.0
androidx.lifecycle:lifecycle-viewmodel-savedstate:2.2.0
androidx.lifecycle:lifecycle-viewmodel:2.0.0
androidx.lifecycle:lifecycle-viewmodel:2.1.0
androidx.lifecycle:lifecycle-viewmodel:2.2.0
androidx.loader:loader:1.0.0
androidx.localbroadcastmanager:localbroadcastmanager:1.0.0
@ -56,6 +62,7 @@ androidx.swiperefreshlayout:swiperefreshlayout:1.0.0
androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02
androidx.transition:transition:1.1.0
androidx.transition:transition:1.2.0
androidx.transition:transition:1.2.0-rc01
androidx.vectordrawable:vectordrawable-animated:1.0.0
androidx.vectordrawable:vectordrawable-animated:1.1.0
androidx.vectordrawable:vectordrawable:1.0.1
@ -295,7 +302,6 @@ com.drewnoakes:metadata-extractor:2.11.0
com.facebook.conceal:conceal:1.1.3
com.facebook.fbjni:fbjni-java-only:0.0.3
com.facebook.flipper:flipper-fresco-plugin:0.35.0
com.facebook.flipper:flipper-network-plugin:0.35.0
com.facebook.flipper:flipper:0.35.0
com.facebook.fresco:animated-base:2.0.0
com.facebook.fresco:animated-drawable:2.0.0
@ -321,7 +327,7 @@ com.facebook.yoga:proguard-annotations:1.14.1
com.github.status-im.status-keycard-java:android:3.0.1
com.github.status-im.status-keycard-java:lib:3.0.1
com.github.status-im:function:0.0.1
com.github.yalantis:ucrop:2.2.2-native
com.github.yalantis:ucrop:2.2.5-native
com.googlecode.json-simple:json-simple:1.1
com.googlecode.juniversalchardet:juniversalchardet:1.0.3
com.google.android.gms:play-services-auth-base:16.0.0
@ -371,9 +377,7 @@ com.intellij:annotations:12.0
com.parse.bolts:bolts-tasks:1.4.0
com.squareup.okhttp3:okhttp-urlconnection:3.12.1
com.squareup.okhttp3:okhttp:3.12.1
com.squareup.okhttp3:okhttp:3.14.1
com.squareup.okio:okio:1.15.0
com.squareup.okio:okio:1.17.2
com.squareup:javapoet:1.8.0
com.squareup:javawriter:2.5.0
com.sun.activation:javax.activation:1.2.0

View File

@ -34,6 +34,7 @@ https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-compile
https://dl.google.com/dl/android/maven2/androidx/documentfile/documentfile/1.0.0/documentfile-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/drawerlayout/drawerlayout/1.0.0/drawerlayout-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.0.0/exifinterface-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.1.0-beta01/exifinterface-1.1.0-beta01.pom
https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.0.0/fragment-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.1.0/fragment-1.1.0.pom
https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.2.1/fragment-1.2.1.pom
@ -67,6 +68,7 @@ https://dl.google.com/dl/android/maven2/androidx/slidingpanelayout/slidingpanela
https://dl.google.com/dl/android/maven2/androidx/swiperefreshlayout/swiperefreshlayout/1.0.0/swiperefreshlayout-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/swiperefreshlayout/swiperefreshlayout/1.1.0-alpha02/swiperefreshlayout-1.1.0-alpha02.pom
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.1.0/transition-1.1.0.pom
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.2.0-rc01/transition-1.2.0-rc01.pom
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.2.0/transition-1.2.0.pom
https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable-animated/1.0.0/vectordrawable-animated-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/vectordrawable/vectordrawable-animated/1.1.0/vectordrawable-animated-1.1.0.pom
@ -79,14 +81,8 @@ https://dl.google.com/dl/android/maven2/androidx/versionedparcelable/versionedpa
https://dl.google.com/dl/android/maven2/androidx/viewpager2/viewpager2/1.0.0/viewpager2-1.0.0.pom
https://dl.google.com/dl/android/maven2/androidx/viewpager/viewpager/1.0.0/viewpager-1.0.0.pom
https://dl.google.com/dl/android/maven2/android/arch/core/common/1.0.0/common-1.0.0.pom
https://dl.google.com/dl/android/maven2/android/arch/core/common/1.1.0/common-1.1.0.pom
https://dl.google.com/dl/android/maven2/android/arch/core/runtime/1.1.0/runtime-1.1.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.0.0/common-1.0.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/common/1.1.0/common-1.1.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/livedata-core/1.1.0/livedata-core-1.1.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.0.0/runtime-1.0.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/runtime/1.1.0/runtime-1.1.0.pom
https://dl.google.com/dl/android/maven2/android/arch/lifecycle/viewmodel/1.1.0/viewmodel-1.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.0/baseLibrary-3.0.0.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.0.1/baseLibrary-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/databinding/baseLibrary/3.2.1/baseLibrary-3.2.1.pom
@ -96,38 +92,30 @@ https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCommon/3
https://dl.google.com/dl/android/maven2/com/android/databinding/compilerCommon/3.0.1/compilerCommon-3.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/26.0.2/animated-vector-drawable-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/27.0.1/animated-vector-drawable-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-drawable/27.1.0/animated-vector-drawable-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/26.0.2/appcompat-v7-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/27.0.1/appcompat-v7-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/appcompat-v7/27.1.0/appcompat-v7-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/recyclerview-v7/27.0.1/recyclerview-v7-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/26.0.2/support-annotations-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/26.1.0/support-annotations-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/27.0.1/support-annotations-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/27.1.0/support-annotations-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-compat/26.0.2/support-compat-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-compat/26.1.0/support-compat-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-compat/27.0.1/support-compat-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-compat/27.1.0/support-compat-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/26.0.2/support-core-ui-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/26.1.0/support-core-ui-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/27.0.1/support-core-ui-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-ui/27.1.0/support-core-ui-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-utils/26.0.2/support-core-utils-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-utils/26.1.0/support-core-utils-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-utils/27.0.1/support-core-utils-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-core-utils/27.1.0/support-core-utils-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-fragment/26.0.2/support-fragment-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-fragment/26.1.0/support-fragment-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-fragment/27.0.1/support-fragment-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-fragment/27.1.0/support-fragment-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-media-compat/26.0.2/support-media-compat-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-media-compat/26.1.0/support-media-compat-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-v4/26.0.2/support-v4-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-v4/26.1.0/support-v4-26.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/26.0.2/support-vector-drawable-26.0.2.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/27.0.1/support-vector-drawable-27.0.1.pom
https://dl.google.com/dl/android/maven2/com/android/support/support-vector-drawable/27.1.0/support-vector-drawable-27.1.0.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.2.1/crash-26.2.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.3.1/crash-26.3.1.pom
https://dl.google.com/dl/android/maven2/com/android/tools/analytics-library/crash/26.5.3/crash-26.5.3.pom
@ -303,13 +291,12 @@ https://repository.sonatype.org/content/groups/sonatype-public-grid/com/android/
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/android/tools/sdk-common/25.2.3/sdk-common-25.2.3.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/facebook/fbjni/fbjni-java-only/0.0.3/fbjni-java-only-0.0.3.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/facebook/flipper/flipper-fresco-plugin/0.35.0/flipper-fresco-plugin-0.35.0.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/facebook/flipper/flipper-network-plugin/0.35.0/flipper-network-plugin-0.35.0.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/facebook/flipper/flipper/0.35.0/flipper-0.35.0.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/facebook/yoga/proguard-annotations/1.14.1/proguard-annotations-1.14.1.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/status-im/function/0.0.1/function-0.0.1.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/status-im/status-keycard-java/android/3.0.1/android-3.0.1.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/status-im/status-keycard-java/lib/3.0.1/lib-3.0.1.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/yalantis/ucrop/2.2.2-native/ucrop-2.2.2-native.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/yalantis/ucrop/2.2.5-native/ucrop-2.2.5-native.pom
https://repository.sonatype.org/content/groups/sonatype-public-grid/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
https://repo.maven.apache.org/maven2/commons-cli/commons-cli/1.2/commons-cli-1.2.pom
https://repo.maven.apache.org/maven2/commons-codec/commons-codec/1.4/commons-codec-1.4.pom
@ -471,17 +458,11 @@ https://repo.maven.apache.org/maven2/com/parse/bolts/bolts-tasks/1.4.0/bolts-tas
https://repo.maven.apache.org/maven2/com/squareup/javapoet/1.8.0/javapoet-1.8.0.pom
https://repo.maven.apache.org/maven2/com/squareup/javawriter/2.5.0/javawriter-2.5.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp-urlconnection/3.12.1/okhttp-urlconnection-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.8.1/okhttp-3.8.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.12.1/okhttp-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/3.14.1/okhttp-3.14.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/okhttp/4.7.2/okhttp-4.7.2.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.8.1/parent-3.8.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.1/parent-3.12.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.14.1/parent-3.14.1.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.15.0/okio-parent-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio-parent/1.17.2/okio-parent-1.17.2.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.15.0/okio-1.15.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/1.17.2/okio-1.17.2.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.6.0/okio-2.6.0.pom
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.7.0-alpha.lockfree.1/okio-2.7.0-alpha.lockfree.1.pom
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom

View File

@ -1,6 +1,7 @@
app
react-native-background-timer
react-native-camera
react-native-community_cameraroll
react-native-community_clipboard
react-native-community_masked-view
react-native-community_netinfo

BIN
resources/images/icons/camera@2x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 399 B

After

Width:  |  Height:  |  Size: 455 B

BIN
resources/images/icons/camera@3x.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 576 B

After

Width:  |  Height:  |  Size: 706 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 376 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 610 B

View File

@ -30,7 +30,7 @@
:http {:port 3449
:host "0.0.0.0"}
:cache-blockers #{status-im.utils.js-resources}
:cache-blockers #{status-im.utils.js-resources status-im.ui.components.icons.icons}
:builds {:mobile
{:target :react-native

View File

@ -18,9 +18,7 @@
[status-im.utils.platform :as platform]
[status-im.utils.utils :as utils]
[status-im.chat.models.message-seen :as message-seen]
[status-im.chat.models.loading :as loading]
[status-im.utils.image-processing :as image-processing]
[taoensso.timbre :as log]))
[status-im.chat.models.loading :as loading]))
(defn- get-chat [cofx chat-id]
(get-in cofx [:db :chats chat-id]))
@ -311,21 +309,3 @@
{:events [:chat.ui/input-on-focus]}
[{db :db}]
{:db (set-chat-ui-props db {:input-bottom-sheet nil})})
(re-frame/reg-fx
:chat-open-image-picker
(fn []
(react/show-image-picker
(fn [image]
(image-processing/resize
(aget image "path")
400 400
(fn [resized-image]
(re-frame/dispatch [:chat.ui/set-chat-ui-props {:send-image (aget resized-image "path")}]))
#(log/error "could not resize image" %)))
"photo")))
(fx/defn chat-open-image-picker
{:events [:chat.ui/open-image-picker]}
[cofx]
{:chat-open-image-picker nil})

View File

@ -0,0 +1,123 @@
(ns status-im.chat.models.images
(:require [re-frame.core :as re-frame]
[status-im.utils.fx :as fx]
["@react-native-community/cameraroll" :as CameraRoll]
[status-im.utils.types :as types]
[status-im.ui.components.react :as react]
[status-im.utils.image-processing :as image-processing]
[taoensso.timbre :as log]
[clojure.string :as string]
[status-im.utils.platform :as platform]))
(def maximum-image-size-px 2000)
(defn- resize-and-call [uri cb]
(react/image-get-size
uri
(fn [width height]
(let [resize? (> (max width height) maximum-image-size-px)]
(image-processing/resize
uri
(if resize? maximum-image-size-px width)
(if resize? maximum-image-size-px height)
60
(fn [resized-image]
(let [path (aget resized-image "path")
path (if (string/starts-with? path "file") path (str "file://" path))]
(cb path)))
#(log/error "could not resize image" %))))))
(re-frame/reg-fx
::save-image-to-gallery
(fn [base64-uri]
(if platform/ios?
(.saveToCameraRoll CameraRoll base64-uri)
(react/image-get-size
base64-uri
(fn [width height]
(image-processing/resize
base64-uri
width
height
100
(fn [resized-image]
(let [path (aget resized-image "path")
path (if (string/starts-with? path "file") path (str "file://" path))]
(.saveToCameraRoll CameraRoll path)))
#(log/error "could not resize image" %)))))))
(re-frame/reg-fx
::resize-camera-roll-images
(fn [photos]
(doseq [photo photos]
(resize-and-call
(-> photo :node :image :uri)
#(re-frame/dispatch [:add-resized-image-to-roll %])))))
(re-frame/reg-fx
::chat-open-image-picker
(fn []
(react/show-image-picker
(fn [result]
(resize-and-call
(aget result "path")
#(re-frame/dispatch [:chat.ui/image-selected %])))
"photo")))
(re-frame/reg-fx
::image-captured
(fn [uri]
(resize-and-call
uri
#(re-frame/dispatch [:chat.ui/image-selected %]))))
(re-frame/reg-fx
::camera-roll-get-photos
(fn [num]
(-> (.getPhotos CameraRoll (clj->js {:first num :assetType "Photos"}))
(.then #(re-frame/dispatch [:on-camera-roll-get-photos (:edges (types/js->clj %))]))
(.catch #(log/error "could not get cameraroll photos")))))
(fx/defn image-captured
{:events [:chat.ui/image-captured]}
[_ uri]
{::image-captured uri})
(fx/defn camera-roll-get-photos
{:events [:chat.ui/camera-roll-get-photos]}
[_ num]
{::camera-roll-get-photos num})
(fx/defn add-resized-image-to-roll
{:events [:add-resized-image-to-roll]}
[{db :db} uri]
{:db (update db :camera-roll-photos conj uri)})
(fx/defn on-camera-roll-get-photos
{:events [:on-camera-roll-get-photos]}
[{db :db} photos]
(when-not (seq (:camera-roll-photos db))
{:db (assoc db :camera-roll-photos [])
::resize-camera-roll-images photos}))
(fx/defn cancel-sending-image
{:events [:chat.ui/cancel-sending-image]}
[{:keys [db]}]
(let [current-chat-id (:current-chat-id db)]
{:db (update-in db [:chats current-chat-id :metadata] dissoc :sending-image)}))
(fx/defn image-selected
{:events [:chat.ui/image-selected]}
[{:keys [db]} uri]
(let [current-chat-id (:current-chat-id db)]
{:db (assoc-in db [:chats current-chat-id :metadata :sending-image :uri] uri)}))
(fx/defn chat-open-image-picker
{:events [:chat.ui/open-image-picker]}
[_]
{::chat-open-image-picker nil})
(fx/defn save-image-to-gallery
{:events [:chat.ui/save-image-to-gallery]}
[_ base64-uri]
{::save-image-to-gallery base64-uri})

View File

@ -78,8 +78,11 @@
[{:keys [db] :as cofx} message]
(let [current-chat-id (:current-chat-id db)]
(fx/merge cofx
{:db (assoc-in db [:chats current-chat-id :metadata :responding-to-message]
message)}
{:db (-> db
(assoc-in [:chats current-chat-id :metadata :responding-to-message]
message)
(update-in [:chats current-chat-id :metadata]
dissoc :sending-image))}
(chat-input-focus :input-ref))))
(fx/defn cancel-message-reply
@ -90,9 +93,9 @@
{:db (assoc-in db [:chats current-chat-id :metadata :responding-to-message] nil)}
(chat-input-focus :input-ref))))
(defn plain-text-message-fx
(fx/defn send-plain-text-message
"when not empty, proceed by sending text message"
[input-text current-chat-id {:keys [db] :as cofx}]
[{:keys [db] :as cofx} input-text current-chat-id]
(when-not (string/blank? input-text)
(let [{:keys [message-id]}
(get-in db [:chats current-chat-id :metadata :responding-to-message])
@ -113,19 +116,18 @@
(process-cooldown)))))
(fx/defn send-image
{:events [:chat.ui/send-image]}
[{{:keys [current-chat-id] :as db} :db :as cofx} send-image]
(println "SENDING" send-image)
(fx/merge cofx
{:db (chat/set-chat-ui-props db {:send-image-loading? true})}
(when-not (string/blank? send-image)
(chat.message/send-message {:chat-id current-chat-id
:content-type constants/content-type-image
:image-path send-image
:text "Update to latest version to see a nice image here!"}))))
[{{:keys [current-chat-id] :as db} :db :as cofx}]
(let [image-path (get-in db [:chats current-chat-id :metadata :sending-image :uri])]
(fx/merge cofx
{:db (update-in db [:chats current-chat-id :metadata] dissoc :sending-image)}
(when-not (string/blank? image-path)
(chat.message/send-message {:chat-id current-chat-id
:content-type constants/content-type-image
:image-path (string/replace image-path #"file://" "")
:text "Update to latest version to see a nice image here!"})))))
(fx/defn send-sticker-fx
[{:keys [db] :as cofx} {:keys [hash pack]} current-chat-id]
(fx/defn send-sticker-message
[cofx {:keys [hash pack]} current-chat-id]
(when-not (string/blank? hash)
(chat.message/send-message cofx {:chat-id current-chat-id
:content-type constants/content-type-sticker
@ -137,15 +139,9 @@
"Sends message from current chat input"
[{{:keys [current-chat-id] :as db} :db :as cofx}]
(let [{:keys [input-text]} (get-in db [:chat/inputs current-chat-id])]
(plain-text-message-fx input-text current-chat-id cofx)))
(fx/defn send-transaction-result
{:events [:chat/send-transaction-result]}
[cofx chat-id params result])
;;TODO: should be implemented on status-go side
;;see https://github.com/status-im/team-core/blob/6c3d67d8e8bd8500abe52dab06a59e976ec942d2/rfc-001.md#status-gostatus-react-interface
;; effects
(fx/merge cofx
(send-image)
(send-plain-text-message input-text current-chat-id))))
(re-frame/reg-fx
::focus-rn-component

View File

@ -16,6 +16,7 @@
:ens-name "ens-name"
:parsed-text "parsed-text"
:rtl? false
:image nil
:response-to "a"}
:whisper-timestamp 1
:outgoing-status :sending

View File

@ -69,7 +69,8 @@
status-im.ui.screens.group.events
status-im.utils.universal-links.events
status-im.search.core
status-im.ui.screens.profile.events))
status-im.ui.screens.profile.events
status-im.chat.models.images))
;; init module
(handlers/register-handler-fx
@ -575,7 +576,7 @@
:stickers/recent-stickers
(conj (remove #(= hash %) (:stickers/recent-stickers multiaccount)) hash)
{})
(chat.input/send-sticker-fx sticker current-chat-id))))
(chat.input/send-sticker-message sticker current-chat-id))))
(handlers/register-handler-fx
:chat/disable-cooldown

View File

@ -119,6 +119,7 @@
(reg-root-key-sub :group-chat-profile/profile :group-chat-profile/profile)
(reg-root-key-sub :selected-participants :selected-participants)
(reg-root-key-sub :chat/inputs :chat/inputs)
(reg-root-key-sub :camera-roll-photos :camera-roll-photos)
;;browser
(reg-root-key-sub :browsers :browser/browsers)
@ -837,6 +838,12 @@
(fn [{:keys [metadata]}]
(:responding-to-message metadata)))
(re-frame/reg-sub
:chats/sending-image
:<- [:chats/current-chat]
(fn [{:keys [metadata]}]
(get-in metadata [:sending-image])))
(re-frame/reg-sub
:public-chat.new/topic-error-message
:<- [:public-group-topic]

View File

@ -3,6 +3,7 @@
[reagent.core :as reagent]
[clojure.string :as string]
[clojure.walk :as walk]
[oops.core :refer [oget]]
["react-native-camera" :refer (RNCamera)]))
(defn- constants [t]
@ -24,9 +25,20 @@
(.then (fn [allowed?] (if allowed? (then) (else))))
(.catch else)))
(defn camera [props]
(reagent/create-element RNCamera (clj->js (merge {:inverted true} props))))
(def camera (reagent/adapt-react-class RNCamera))
(defn get-qr-code-data [^js code]
(when-let [data (.-data code)]
(string/trim data)))
(defn on-layout [layout]
(fn [evt]
(reset! layout {:width (oget evt "nativeEvent" "layout" "width")
:height (oget evt "nativeEvent" "layout" "height")})))
(defn on-tap [camera-ref layout focus-object]
(fn [coord]
(when (and @camera-ref (:width @layout))
(let [{:keys [width height]} @layout
{:keys [x y]} (js->clj coord :keywordize-keys true)]
(reset! focus-object (clj->js {:x (/ x width) :y (/ y height) :autoExposure true}))))))

View File

@ -47,6 +47,7 @@
(def black-transparent-40-persist (alpha black 0.4))
(def black-transparent-50 (alpha black 0.5))
(def black-light "#2d2d2d") ;; sign-with-keycard-button
(def black-transparent-86 "rgba(0, 0, 0, 0.86)")
;; DARK GREY
(def gray (:gray light)) ;; Dark grey, used as a background for a light foreground and as section header and secondary text color

View File

@ -29,6 +29,9 @@
(def text-class (reagent/adapt-react-class (.-Text react-native)))
(def text-input-class (reagent/adapt-react-class (.-TextInput react-native)))
(def image-class (reagent/adapt-react-class (.-Image react-native)))
(defn image-get-size [uri callback] (.getSize (.-Image react-native) uri callback))
(defn valid-source? [source]
(or (not (map? source))
(not (contains? source :uri))
@ -192,6 +195,15 @@
(.then images-fn)
(.catch show-access-error))))
(defn show-image-picker-camera
([images-fn]
(show-image-picker-camera images-fn nil))
([images-fn props]
(-> ^js image-picker
(.openCamera (clj->js props))
(.then images-fn)
(.catch show-access-error))))
;; Clipboard
(def sharing

View File

@ -3,7 +3,8 @@
[status-im.ui.components.status-bar.styles :as styles]
[status-im.utils.platform :as platform]))
(def route->bar-type (merge {:qr-scanner {:type :black}}
(def route->bar-type (merge {:qr-scanner {:type :black}
:image-preview {:type :black}}
(when platform/ios?
{:new-chat {:type :black}
:new-public-chat {:type :black}})))

View File

@ -0,0 +1,34 @@
(ns status-im.ui.screens.chat.image.preview.views
(:require-macros [status-im.utils.views :refer [defview letsubs]])
(:require [status-im.ui.components.colors :as colors]
[status-im.ui.components.react :as react]
[re-frame.core :as re-frame]
[status-im.ui.components.button :as button]
[status-im.ui.components.icons.vector-icons :as icons]
[status-im.ui.screens.chat.sheets :as sheets]))
(defview preview-image []
(letsubs [{:keys [content] :as message} [:get-screen-params]
{:keys [width height]} [:dimensions/window]]
[react/view {:flex 1 :background-color colors/black-persist}
[react/safe-area-view {:style {:flex 1 :justify-content :flex-end}}
[react/view {:flex 1 :align-items :center :justify-content :center}
[react/image {:style (merge {:width width
:height (- height 200)
:background-color :black})
:resize-mode :contain
:source {:uri (:image content)}}]]
[react/view {:flex-direction :row :padding-horizontal 8
:justify-content :space-between :align-items :center}
[react/view {:width 64}]
[button/button {:on-press #(re-frame/dispatch [:navigate-back])
:type :secondary
:label :t/close
:text-style {:color colors/white-persist}}]
[react/touchable-highlight
{:on-press #(re-frame/dispatch [:bottom-sheet/show-sheet
{:content (sheets/image-long-press message true)
:height 64}])}
[icons/icon :main-icons/more {:container-style {:width 24 :height 24
:margin 20}
:color colors/white-persist}]]]]]))

View File

@ -1,3 +0,0 @@
(ns status-im.ui.screens.chat.image.styles)
(def image-panel-height 263)

View File

@ -5,12 +5,19 @@
[re-frame.core :as re-frame]
[status-im.ui.components.colors :as colors]
[status-im.ui.components.animation :as anim]
[status-im.ui.screens.chat.image.styles :as styles]
[status-im.utils.utils :as utils]
[status-im.i18n :as i18n]
[status-im.ui.components.icons.vector-icons :as icons]))
(defn button [images-showing?]
(defn show-panel-anim
[bottom-anim-value alpha-value]
(anim/start
(anim/parallel
[(anim/spring bottom-anim-value {:toValue 0
:useNativeDriver true})
(anim/timing alpha-value {:toValue 1
:duration 500
:useNativeDriver true})])))
(defn input-button [images-showing?]
[react/touchable-highlight
{:on-press
(fn [_]
@ -23,61 +30,55 @@
{:container-style {:margin 14 :margin-right 6}
:color (if images-showing? colors/blue colors/gray)}]])
(defn show-panel-anim
[bottom-anim-value alpha-value]
(anim/start
(anim/parallel
[(anim/spring bottom-anim-value {:toValue 0
:useNativeDriver true})
(anim/timing alpha-value {:toValue 1
:duration 500
:useNativeDriver true})])))
(defn select-button [title icon on-press]
[react/touchable-highlight {:on-press on-press :style {:flex 1}}
[react/view {:background-color colors/black :max-height 223 :flex 1 :border-radius 16
:align-items :center :justify-content :center}
[react/view {:height 48 :width 48 :align-items :center :justify-content :center :border-radius 24
:border-width 2 :border-color colors/gray}
[icons/icon icon {:color :white}]]
[react/text {:style {:margin-top 9 :typography :caption :color colors/gray}} title]]])
(defn take-picture []
(re-frame/dispatch [:request-permissions
{:permissions [:camera]
:on-allowed #(re-frame/dispatch [:navigate-to :profile-photo-capture])
:on-denied (fn []
(utils/set-timeout
#(utils/show-popup (i18n/label :t/error)
(i18n/label :t/camera-access-error))
50))}]))
(react/show-image-picker-camera #(re-frame/dispatch [:chat.ui/image-captured (.-path %)]) {}))
(defn round-button [on-press cancel? loading?]
[react/touchable-highlight {:on-press (when-not loading? on-press)}
[react/view {:width 32 :height 32 :border-radius 16 :background-color (if cancel? colors/gray colors/blue)
:align-items :center :justify-content :center}
(if loading?
[react/activity-indicator {:color :white
:animating true}]
[icons/icon (if cancel? :main-icons/close :main-icons/arrow-up) {:color :white}])]])
(defn buttons []
[react/view
[react/touchable-highlight {:on-press take-picture}
[react/view {:style {:width 44 :height 44
:align-items :center :justify-content :center}}
[icons/icon :camera {:color colors/black}]]]
[react/touchable-highlight {:on-press #(re-frame/dispatch [:chat.ui/open-image-picker])
:style {:margin-top 8}}
[react/view {:width 44 :height 44
:align-items :center :justify-content :center}
[icons/icon :collection {:color colors/black}]]]])
(defn image-preview [uri first? panel-height]
(let [wh (/ (- panel-height 8) 2)]
[react/touchable-highlight {:on-press #(re-frame/dispatch [:chat.ui/image-selected uri])}
[react/image {:style (merge {:width wh
:height wh
:background-color :black
:border-radius 4}
(when first?
{:margin-bottom 8}))
:source {:uri uri}}]]))
(defview photos [panel-height]
(letsubs [camera-roll-photos [:camera-roll-photos]]
[react/view {:flex 1 :flex-direction :row}
(for [[first-img second-img] (partition 2 camera-roll-photos)]
^{:key (str "image" first-img)}
[react/view {:margin-left 8}
(when first-img
[image-preview first-img true panel-height])
(when second-img
[image-preview second-img false panel-height])])]))
(defview image-view []
(letsubs [send-image [:chats/current-chat-ui-prop :send-image]
loading? [:chats/current-chat-ui-prop :send-image-loading?]
bottom-anim-value (anim/create-value styles/image-panel-height)
alpha-value (anim/create-value 0)]
{:component-did-mount #(show-panel-anim bottom-anim-value alpha-value)}
[react/animated-view {:style {:background-color :white
:height styles/image-panel-height
(letsubs [panel-height [:chats/chat-panel-height]
bottom-anim-value (anim/create-value @panel-height)
alpha-value (anim/create-value 0)]
{:component-did-mount (fn []
(show-panel-anim bottom-anim-value alpha-value)
(re-frame/dispatch [:chat.ui/camera-roll-get-photos 20]))}
[react/animated-view {:style {:background-color colors/white
:height panel-height
:transform [{:translateY bottom-anim-value}]
:opacity alpha-value}}
(if send-image
[react/view {:align-items :center :flex-direction :row :flex 1 :justify-content :space-between
:padding-horizontal 20}
[round-button #(re-frame/dispatch [:chat.ui/set-chat-ui-props {:send-image nil}]) true false]
[react/image {:source {:uri send-image} :style {:width 150 :height 150 :border-radius 8}}]
[round-button #(re-frame/dispatch [:chat.ui/send-image send-image]) false loading?]]
[react/view {:flex-direction :row :padding-horizontal 16 :padding-top 12 :flex 1}
[select-button "Take a picture" :main-icons/camera take-picture]
[react/view {:width 16}]
[select-button "Choose photo" :main-icons/photo #(re-frame/dispatch [:chat.ui/open-image-picker])]])]))
[react/scroll-view {:horizontal true :style {:flex 1}}
[react/view {:flex 1 :flex-direction :row :margin-horizontal 8}
[buttons]
[photos panel-height]]]]))

View File

@ -33,46 +33,67 @@
:placeholder-text-color colors/gray
:auto-capitalize :sentences}])
(defview reply-message [from alias message-text]
(defview reply-message [from alias content]
(letsubs [{:keys [ens-name]} [:contacts/contact-name-by-identity from]
current-public-key [:multiaccount/public-key]]
[react/scroll-view {:style style/reply-message-content}
[react/view {:style style/reply-message-to-container}
(chat-utils/format-reply-author from alias ens-name current-public-key style/reply-message-author)]
[react/text {:style (assoc (message-style/style-message-text false) :font-size 14) :number-of-lines 3} message-text]]))
(if (:image content)
[react/image {:style {:width 56
:height 56
:background-color :black
:border-radius 4}
:source {:uri (:image content)}}]
[react/text {:style (assoc (message-style/style-message-text false) :font-size 14)
:number-of-lines 3} (:text content)])]))
(defview reply-message-view []
(letsubs [{:keys [content from alias] :as message} [:chats/reply-message]]
(when message
[react/view {:style style/reply-message}
[photos/member-photo from]
[reply-message from alias (:text content)]
[react/touchable-highlight
{:style style/cancel-reply-highlight
:on-press #(re-frame/dispatch [:chat.ui/cancel-message-reply])
:accessibility-label :cancel-message-reply}
[react/view {:style style/cancel-reply-container}
[vector-icons/icon :main-icons/close {:container-style style/cancel-reply-icon
:width 19
:height 19
:color colors/white}]]]])))
(defn close-button [on-press]
[react/touchable-highlight
{:style style/cancel-reply-highlight
:on-press on-press
:accessibility-label :cancel-message-reply}
[vector-icons/icon :main-icons/close {:container-style style/cancel-reply-icon
:width 19
:height 19
:color colors/white}]])
(defn reply-message-view [{:keys [content from alias]}]
[react/view {:style style/reply-message}
[photos/member-photo from]
[reply-message from alias content]
[close-button #(re-frame/dispatch [:chat.ui/cancel-message-reply])]])
(defn send-image-view [{:keys [uri]}]
[react/view {:style style/reply-message}
[react/image {:style {:width 56 :height 56
:border-radius 4}
:source {:uri uri}}]
[close-button #(re-frame/dispatch [:chat.ui/cancel-sending-image])]])
(defview container []
(letsubs [mainnet? [:mainnet?]
input-text [:chats/current-chat-input-text]
cooldown-enabled? [:chats/cooldown-enabled?]
input-bottom-sheet [:chats/current-chat-ui-prop :input-bottom-sheet]
one-to-one-chat? [:current-chat/one-to-one-chat?]]
(let [input-text-empty? (string/blank? (string/trim (or input-text "")))]
one-to-one-chat? [:current-chat/one-to-one-chat?]
reply-message [:chats/reply-message]
sending-image [:chats/sending-image]]
(let [input-text-empty? (and (string/blank? (string/trim (or input-text "")))
(not sending-image))]
[react/view {:style (style/root)}
[reply-message-view]
(when reply-message
[reply-message-view reply-message])
(when sending-image
[send-image-view sending-image])
[react/view {:style style/input-container}
[basic-text-input input-text cooldown-enabled?]
(when input-text-empty?
[image/button (= :images input-bottom-sheet)])
(when (and input-text-empty? mainnet?)
(when (and input-text-empty? (not reply-message))
[image/input-button (= :images input-bottom-sheet)])
(when (and input-text-empty? mainnet? (not reply-message))
[stickers/button (= :stickers input-bottom-sheet)])
(when (and one-to-one-chat? input-text-empty? (or config/commands-enabled? mainnet?))
(when (and one-to-one-chat? input-text-empty? (or config/commands-enabled? mainnet?)
(not reply-message))
[extensions/button (= :extensions input-bottom-sheet)])
(when-not input-text-empty?
[send-button/send-button-view input-text-empty?

View File

@ -13,7 +13,8 @@
[status-im.utils.contenthash :as contenthash]
[status-im.utils.http :as http]
[status-im.utils.platform :as platform]
[status-im.utils.security :as security])
[status-im.utils.security :as security]
[reagent.core :as reagent])
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
(defview mention-element [from]
@ -37,7 +38,7 @@
appender])
(defview quoted-message
[_ {:keys [from text]} outgoing current-public-key]
[_ {:keys [from text image]} outgoing current-public-key]
(letsubs [{:keys [ens-name alias]} [:contacts/contact-name-by-identity from]]
[react/view {:style (style/quoted-message-container outgoing)}
[react/view {:style style/quoted-message-author-container}
@ -47,10 +48,15 @@
ens-name
current-public-key
(partial style/quoted-message-author outgoing)]]
[react/text {:style (style/quoted-message-text outgoing)
:number-of-lines 5}
text]]))
(if image
[react/image {:style {:width 56
:height 56
:background-color :black
:border-radius 4}
:source {:uri image}}]
[react/text {:style (style/quoted-message-text outgoing)
:number-of-lines 5}
text])]))
(defn render-inline [message-text outgoing content-type acc {:keys [type literal destination]}]
(case type
@ -149,15 +155,24 @@
;; Append timestamp to new block
(conj elements timestamp))))
(defn text-message-press-handlers [message]
{:on-press (fn [_]
(re-frame/dispatch [:chat.ui/set-chat-ui-props {:input-bottom-sheet nil}])
(react/dismiss-keyboard!))
:on-long-press #(re-frame/dispatch [:bottom-sheet/show-sheet
{:content (sheets/message-long-press message)
:height 192}])})
(defn text-message
[{:keys [content outgoing current-public-key] :as message}]
[message-bubble-wrapper message
(let [response-to (:response-to content)]
[react/view
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key])
[render-parsed-text-with-timestamp message (:parsed-text content)]])
[message-timestamp message true]])
[react/touchable-highlight (text-message-press-handlers message)
[message-bubble-wrapper message
(let [response-to (:response-to content)]
[react/view
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key])
[render-parsed-text-with-timestamp message (:parsed-text content)]])
[message-timestamp message true]]])
(defn unknown-content-type
[{:keys [outgoing content-type content] :as message}]
@ -177,13 +192,14 @@
(defn emoji-message
[{:keys [content current-public-key outgoing] :as message}]
(let [response-to (:response-to content)]
[message-bubble-wrapper message
[react/view {:style (style/style-message-text outgoing)}
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key])
[react/text {:style (style/emoji-message message)}
(:text content)]]
[message-timestamp message]]))
[react/touchable-highlight (text-message-press-handlers message)
[message-bubble-wrapper message
[react/view {:style (style/style-message-text outgoing)}
(when (and (seq response-to) (:quoted-message message))
[quoted-message response-to (:quoted-message message) outgoing current-public-key])
[react/text {:style (style/emoji-message message)}
(:text content)]]
[message-timestamp message]]]))
(defn message-activity-indicator
[]
@ -224,24 +240,6 @@
(letsubs [{:keys [ens-name]} [:contacts/contact-name-by-identity from]]
(chat.utils/format-author alias style/message-author-name-container ens-name)))
(defn message-press-handlers [{:keys [outgoing from content-type content] :as message}]
(let [pack (get-in content [:sticker :pack])]
{:on-press (fn [_]
(when (and (= content-type constants/content-type-sticker) pack)
(re-frame/dispatch [:stickers/open-sticker-pack pack]))
(re-frame/dispatch [:chat.ui/set-chat-ui-props {:input-bottom-sheet nil}])
(react/dismiss-keyboard!))
:on-long-press #(cond (or (= content-type constants/content-type-text)
(= content-type constants/content-type-emoji))
(re-frame/dispatch [:bottom-sheet/show-sheet
{:content (sheets/message-long-press message)
:height 192}])
(and (= content-type constants/content-type-sticker)
from (not outgoing))
(re-frame/dispatch [:bottom-sheet/show-sheet
{:content (sheets/sticker-long-press message)
:height 64}]))}))
(defn message-content-wrapper
"Author, userpic and delivery wrapper"
[{:keys [alias first-in-group? display-photo? identicon display-username?
@ -276,26 +274,61 @@
[react/view (style/system-message-body message)
[react/view child]]])
(defn message-content-image [{:keys [content outgoing]}]
(let [dimensions (reagent/atom [260 260])
uri (:image content)]
(react/image-get-size
uri
(fn [width height]
(let [k (/ (max width height) 260)]
(reset! dimensions [(/ width k) (/ height k)]))))
(fn []
[react/view {:style (style/image-content outgoing)}
[react/image {:style {:width (first @dimensions) :height (last @dimensions)}
:resize-mode :contain
:source {:uri uri}}]])))
(defn image-message-press-handlers [{:keys [content] :as message}]
{:on-press (fn [_]
(when (:image content)
(re-frame/dispatch [:navigate-to :image-preview message]))
(re-frame/dispatch [:chat.ui/set-chat-ui-props {:input-bottom-sheet nil}])
(react/dismiss-keyboard!))
:on-long-press #(re-frame/dispatch [:bottom-sheet/show-sheet
{:content (sheets/image-long-press message false)
:height 160}])})
(defn sticker-message-press-handlers [{:keys [content] :as message}]
(let [pack (get-in content [:sticker :pack])]
{:on-press (fn [_]
(when pack
(re-frame/dispatch [:stickers/open-sticker-pack pack]))
(re-frame/dispatch [:chat.ui/set-chat-ui-props {:input-bottom-sheet nil}])
(react/dismiss-keyboard!))
:on-long-press #(re-frame/dispatch [:bottom-sheet/show-sheet
{:content (sheets/sticker-long-press message)
:height 64}])}))
(defn chat-message [{:keys [content content-type] :as message}]
(if (= content-type constants/content-type-command)
[message.command/command-content message-content-wrapper message]
(if (= content-type constants/content-type-system-text)
[system-message-content-wrapper message [system-text-message message]]
[react/touchable-highlight (message-press-handlers message)
[message-content-wrapper
message
(if (= content-type constants/content-type-text)
;; text message
[text-message message]
(if (= content-type constants/content-type-status)
[message-content-status message]
(if (= content-type constants/content-type-emoji)
[emoji-message message]
(if (= content-type constants/content-type-sticker)
[message-content-wrapper
message
(if (= content-type constants/content-type-text)
;; text message
[text-message message]
(if (= content-type constants/content-type-status)
[message-content-status message]
(if (= content-type constants/content-type-emoji)
[emoji-message message]
(if (= content-type constants/content-type-sticker)
[react/touchable-highlight (sticker-message-press-handlers message)
[react/image {:style {:margin 10 :width 140 :height 140}
;;TODO (perf) move to event
:source {:uri (contenthash/url (-> content :sticker :hash))}}]
(if (= content-type constants/content-type-image)
[react/image {:style {:margin-vertical 10 :width 140 :height 140 :border-radius 8}
:source {:uri (:image content)}}]
[unknown-content-type message])))))]])))
:source {:uri (contenthash/url (-> content :sticker :hash))}}]]
(if (= content-type constants/content-type-image)
[react/touchable-highlight (image-message-press-handlers message)
[message-content-image message]]
[unknown-content-type message])))))])))

View File

@ -210,3 +210,51 @@
:accessibility-label :view-chat-details-button
:accessories [:chevron]
:on-press #(hide-sheet-and-dispatch [:chat.ui/show-profile from])}]])))
(defn image-long-press [{:keys [content identicon from outgoing] :as message} from-preview?]
(fn []
(let [{:keys [ens-name alias]} @(re-frame/subscribe [:contacts/contact-name-by-identity from])]
[react/view
(when-not outgoing
[list-item/list-item
{:theme :action
:icon (multiaccounts/displayed-photo {:identicon identicon
:public-key from})
:title [view-profile {:name (or ens-name alias)
:helper :t/view-profile}]
:accessibility-label :view-chat-details-button
:accessories [:chevron]
:on-press #(do
(when from-preview?
(re-frame/dispatch [:navigate-back]))
(hide-sheet-and-dispatch [:chat.ui/show-profile from]))}])
[list-item/list-item
{:theme :action
:title :t/message-reply
:icon :main-icons/reply
:on-press #(do
(when from-preview?
(re-frame/dispatch [:navigate-back]))
(hide-sheet-and-dispatch [:chat.ui/reply-to-message message]))}]
;; we have only base64 string for image, so we need to find a way how to copy it
#_[list-item/list-item
{:theme :action
:title :t/sharing-copy-to-clipboard
:icon :main-icons/copy
:on-press (fn []
(re-frame/dispatch [:bottom-sheet/hide-sheet])
(react/copy-to-clipboard (:image content)))}]
[list-item/list-item
{:theme :action
:title :t/save
:icon :main-icons/download
:on-press (fn []
(hide-sheet-and-dispatch [:chat.ui/save-image-to-gallery (:image content)]))}]
;; we have only base64 string for image, so we need to find a way how to share it
#_[list-item/list-item
{:theme :action
:title :t/sharing-share
:icon :main-icons/share
:on-press (fn []
(re-frame/dispatch [:bottom-sheet/hide-sheet])
(list-selection/open-share {:message (:image content)}))}]])))

View File

@ -18,7 +18,6 @@
:justify-content :space-between
:padding-top 8
:padding-bottom 8
:padding-right 8
:padding-left 8})
(def reply-message-content
@ -47,22 +46,18 @@
:justify-content :flex-start})
(def cancel-reply-highlight
{:align-self :flex-start
:width 19
:height 19})
(def cancel-reply-container
{:flex-direction :row
:justify-content :flex-end
:height "100%"})
{:align-items :center
:width 44
:height 44})
(def cancel-reply-icon
{:background-color colors/gray
:width 21
:height 21
:width 20
:height 20
:margin-top 4
:align-items :center
:justify-content :center
:border-radius 12})
:border-radius 10})
(def input-container
{:flex-direction :row

View File

@ -309,3 +309,10 @@
(if outgoing
(outgoing-blockquote-text-style)
(default-blockquote-text-style)))
(defn image-content [outgoing]
{:overflow :hidden
:border-top-left-radius 16
:border-top-right-radius 16
:border-bottom-left-radius (if outgoing 16 4)
:border-bottom-right-radius (if outgoing 4 16)})

View File

@ -80,6 +80,11 @@
;;TODO (perf) move to event
:source {:uri (contenthash/url (-> content :sticker :hash))}}]
(= constants/content-type-image content-type)
[react/text {:style styles/last-message-text
:accessibility-label :no-messages-text}
(i18n/label :t/image)]
(string/blank? (:text content))
[react/text {:style styles/last-message-text}
""]

View File

@ -8,12 +8,6 @@
[status-im.utils.universal-links.core :as universal-links]
[status-im.utils.fx :as fx]))
(re-frame/reg-fx
:open-image-picker
;; the image picker is only used here for now, this effect can be use in other scenarios as well
(fn [callback-event]
(profile.models/open-image-picker! callback-event)))
(handlers/register-handler-fx
:profile/send-transaction
(fn [cofx [_ chat-id]]
@ -24,11 +18,6 @@
(fn [cofx [_ name]]
(profile.models/update-name name cofx)))
(handlers/register-handler-fx
:my-profile/update-picture
(fn [cofx [this-event base64-image]]
(profile.models/update-picture this-event base64-image cofx)))
(handlers/register-handler-fx
:my-profile/remove-current-photo
(fn [{:keys [db] :as cofx}]

View File

@ -5,22 +5,9 @@
[status-im.ui.components.react :as react]
[status-im.multiaccounts.update.core :as multiaccounts.update]
[status-im.chat.models :as chat-models]
[status-im.utils.image-processing :as image-processing]
[taoensso.timbre :as log]
[status-im.utils.fx :as fx]))
(defn open-image-picker! [callback-event]
(react/show-image-picker
(fn [image]
(let [path (get (js->clj image) "path")
_ (log/debug path)
on-success (fn [base64]
(re-frame/dispatch [callback-event base64]))
on-error (fn [type error]
(.log js/console type error))]
(image-processing/img->base64 path on-success on-error 150 150)))
"photo"))
(defn send-transaction [chat-id cofx]
;;TODO start send transaction command flow
(chat-models/start-chat cofx chat-id {:navigation-reset? true}))
@ -59,17 +46,6 @@
(when photo-path
(multiaccounts.update/multiaccount-update :photo-path photo-path {})))))
(defn update-picture [this-event base64-image {:keys [db] :as cofx}]
(if base64-image
(fx/merge cofx
{:db (-> db
(assoc-in [:my-profile/profile :photo-path]
(str "data:image/jpeg;base64," base64-image))
(assoc :my-profile/editing? true)
(assoc :profile/photo-added? true))}
save)
{:open-image-picker this-event}))
(defn start-editing-group-chat-profile [{:keys [db]}]
(let [current-chat-name (get-in db [:chats (:current-chat-id db) :name])]
{:db (-> db

View File

@ -1,13 +0,0 @@
(ns status-im.ui.screens.profile.photo-capture.styles
(:require [status-im.ui.components.colors :as colors]))
(def container
{:flex 1
:background-color colors/white})
(def button-container
{:align-items :center})
(def button
{:position :absolute
:bottom 10})

View File

@ -1,43 +0,0 @@
(ns status-im.ui.screens.profile.photo-capture.views
(:require [re-frame.core :as re-frame]
[reagent.core :as reagent]
[status-im.ui.components.camera :as camera]
[status-im.ui.components.react :as react]
[status-im.ui.screens.profile.photo-capture.styles :as styles]
[status-im.utils.image-processing :as image-processing]
[taoensso.timbre :as log]
[status-im.ui.components.icons.vector-icons :as icons]
[status-im.ui.components.topbar :as topbar]
[status-im.ui.components.colors :as colors]))
(defn image-captured [^js data]
(let [path (.-uri data)
_ (log/debug "Captured image: " path)
on-success (fn [base64]
(log/debug "Captured success: " base64)
(re-frame/dispatch [:my-profile/update-picture base64])
(re-frame/dispatch [:navigate-back]))
on-error (fn [type error]
(log/debug type error))]
(image-processing/img->base64 path on-success on-error 150 150)))
(defn profile-photo-capture []
(let [camera-ref (reagent/atom nil)]
[react/view styles/container
[topbar/topbar {:title :t/image-source-title}]
[camera/camera {:style {:flex 1}
;;:aspect (:fill camera/aspects)
:captureQuality "480p"
;;:captureTarget (:disk camera/capture-targets)
:type "front"
:ref #(reset! camera-ref %)}]
[react/view styles/button-container
[react/view styles/button
[react/touchable-highlight
{:on-press (fn []
(let [^js camera @camera-ref]
(-> (.takePictureAsync camera)
(.then image-captured)
(.catch #(log/debug "Error capturing image: " %)))))}
[react/view
[icons/icon :main-icons/camera {:color colors/white}]]]]]]))

View File

@ -1,44 +0,0 @@
(ns status-im.ui.screens.profile.user.sheet.views
(:require [re-frame.core :as re-frame]
[status-im.i18n :as i18n]
[status-im.ui.components.react :as react]
[status-im.utils.utils :as utils]
[status-im.ui.components.list-item.views :as list-item]))
(defn hide-sheet-and-dispatch [event]
(re-frame/dispatch [:bottom-sheet/hide-sheet])
(re-frame/dispatch event))
(defn profile-icon-actions [include-remove-action?]
(fn []
[react/view {:flex 1}
[list-item/list-item
{:theme :action
:title :t/image-source-gallery
:accessibility-label :group-info-button
:icon :main-icons/photo
:on-press #(hide-sheet-and-dispatch [:my-profile/update-picture])}]
[list-item/list-item
{:theme :action
:title :t/image-source-make-photo
:accessibility-label :delete-and-leave-group-button
:icon :main-icons/camera
:on-press (fn []
(hide-sheet-and-dispatch
[:request-permissions
{:permissions [:camera :write-external-storage]
:on-allowed #(re-frame/dispatch
[:navigate-to :profile-photo-capture])
:on-denied
(fn []
(utils/set-timeout
#(utils/show-popup (i18n/label :t/error)
(i18n/label :t/camera-access-error))
50))}]))}]
(when include-remove-action?
[list-item/list-item
{:theme :action-destructive
:title :t/image-remove-current
:accessibility-label :group-info-button
:icon :main-icons/delete
:on-press #(hide-sheet-and-dispatch [:my-profile/remove-current-photo])}])]))

View File

@ -9,7 +9,8 @@
[status-im.ui.screens.qr-scanner.styles :as styles]
[status-im.ui.components.colors :as colors]
[status-im.utils.config :as config]
[status-im.ui.components.button :as button]))
[status-im.ui.components.button :as button]
[reagent.core :as reagent]))
(defn- topbar [_ {:keys [title] :as opts}]
[topbar/toolbar
@ -65,7 +66,10 @@
(letsubs [read-once? (atom false)
{:keys [height width]} [:dimensions/window]
camera-flashlight [:wallet.send/camera-flashlight]
opts [:get-screen-params]]
opts [:get-screen-params]
camera-ref (atom nil)
focus-object (reagent/atom nil)
layout (atom nil)]
(if config/qr-test-menu-enabled?
[qr-test-view opts]
[react/safe-area-view {:style {:flex 1
@ -74,9 +78,13 @@
[react/with-activity-indicator
{}
[camera/camera
{:style {:flex 1}
:captureAudio false
:onBarCodeRead #(when-not @read-once?
(reset! read-once? true)
(on-barcode-read opts %))}]]
{:ref #(reset! camera-ref %)
:style {:flex 1}
:capture-audio false
:on-layout (camera/on-layout layout)
:auto-focus-point-of-interest @focus-object
:on-tap (camera/on-tap camera-ref layout focus-object)
:on-bar-code-read #(when-not @read-once?
(reset! read-once? true)
(on-barcode-read opts %))}]]
[viewfinder (int (* 2 (/ (min height width) 3)))]])))

View File

@ -18,7 +18,8 @@
[status-im.ui.screens.routing.browser-stack :as browser-stack]
[status-im.ui.components.tabbar.core :as tabbar]
[status-im.ui.screens.routing.core :as navigation]
[status-im.utils.platform :as platform]))
[status-im.utils.platform :as platform]
[status-im.ui.screens.chat.image.preview.views :as image-preview]))
(defonce main-stack (navigation/create-stack))
(defonce bottom-tabs (navigation/create-bottom-tabs))
@ -87,4 +88,7 @@
:component wallet.components/contact-code}
{:name :qr-scanner
:insets {:top false}
:component qr-scanner/qr-scanner}]]))
:component qr-scanner/qr-scanner}
{:name :image-preview
:insets {:top false}
:component image-preview/preview-image}]]))

View File

@ -3,7 +3,6 @@
[status-im.ui.screens.ens.views :as ens]
[status-im.ui.screens.contacts-list.views :as contacts-list]
[status-im.ui.screens.profile.contact.views :as profile.contact]
[status-im.ui.screens.profile.photo-capture.views :as photo-capture]
[status-im.ui.screens.bootnodes-settings.edit-bootnode.views
:as
edit-bootnode]
@ -69,8 +68,6 @@
{:name :profile
:insets {:top false}
:component profile.contact/profile}
{:name :profile-photo-capture
:component photo-capture/profile-photo-capture}
{:name :bootnodes-settings
:component bootnodes-settings/bootnodes-settings}
{:name :installations

View File

@ -1,20 +1,7 @@
(ns status-im.utils.image-processing
(:require [goog.object :as object]
[status-im.utils.fs :as fs]
["react-native-image-resizer" :default image-resizer]))
(:require ["react-native-image-resizer" :default image-resizer]))
(defn resize [path max-width max-height on-resize on-error]
(-> (.createResizedImage image-resizer path max-width max-height "JPEG" 75 0 nil)
(defn resize [path max-width max-height quality on-resize on-error]
(-> (.createResizedImage image-resizer path max-width max-height "JPEG" quality 0 nil)
(.then on-resize)
(.catch on-error)))
(defn- image-base64-encode [path on-success on-error]
(fs/read-file path "base64" on-success #(on-error :base64 %)))
(defn img->base64 [path on-success on-error max-width max-height]
(let [on-resized (fn [image]
(let [path (object/get image "path")]
(image-base64-encode path on-success on-error)))
on-error (fn [error]
(on-error :resize error))]
(resize path max-width max-height on-resized on-error)))

View File

@ -3,6 +3,6 @@
"owner": "status-im",
"repo": "status-go",
"version": "feature/content-type-images",
"commit-sha1": "514923e84df1426a85cac1f2470f064820ab6d4b",
"src-sha256": "03k55hn20ijr98j80p20j38i2lpl6f3dib70b3d83zjcz00wpgqh"
"commit-sha1": "6301aac7823edca3c670586890af731d1cf9c249",
"src-sha256": "0qk56d0la7v93akq9133al8fxq66r8x4xfglf0wb4nxqz2hvkjh8"
}

View File

@ -877,7 +877,7 @@
"share-public-chat-text": "Check out this public chat on the Status app: {{link}}",
"sharing-copied-to-clipboard": "Copied",
"sharing-copy-to-clipboard": "Copy",
"sharing-share": "Share...",
"sharing-share": "Share",
"show-less": "Show less",
"show-more": "Show more",
"show-qr": "Show QR code",
@ -1122,5 +1122,8 @@
"preference": "Preference",
"light": "Light",
"dark": "Dark",
"system": "System"
"system": "System",
"give-permissions-camera": "Give permission\nto access camera",
"photos": "Photos",
"image": "Image"
}