react native navigation
Signed-off-by: andrey <motor4ik@gmail.com>
This commit is contained in:
parent
0e12360ed8
commit
5f719ac95b
|
@ -26,14 +26,14 @@ import com.facebook.react.ReactRootView;
|
|||
import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;
|
||||
|
||||
import com.facebook.react.ReactFragmentActivity;
|
||||
import com.facebook.react.ReactActivity;
|
||||
import com.reactnativenavigation.NavigationActivity;
|
||||
import com.facebook.react.modules.core.PermissionListener;
|
||||
import org.devio.rn.splashscreen.SplashScreen;
|
||||
|
||||
import java.util.Properties;
|
||||
import im.status.ethereum.module.StatusThreadPoolExecutor;
|
||||
|
||||
public class MainActivity extends ReactFragmentActivity
|
||||
public class MainActivity extends NavigationActivity
|
||||
implements ActivityCompat.OnRequestPermissionsResultCallback{
|
||||
|
||||
|
||||
|
@ -178,14 +178,7 @@ public class MainActivity extends ReactFragmentActivity
|
|||
super.onDestroy();
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the name of the main component registered from JavaScript.
|
||||
* This is used to schedule rendering of the component.
|
||||
*/
|
||||
@Override
|
||||
protected String getMainComponentName() {
|
||||
return "StatusIm";
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
|
@ -242,14 +235,4 @@ public class MainActivity extends ReactFragmentActivity
|
|||
mPermissionListener = null;
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
protected ReactActivityDelegate createReactActivityDelegate() {
|
||||
return new ReactActivityDelegate(this, getMainComponentName()) {
|
||||
@Override
|
||||
protected ReactRootView createRootView() {
|
||||
return new RNGestureHandlerEnabledRootView(MainActivity.this);
|
||||
}
|
||||
};
|
||||
}
|
||||
}
|
||||
|
|
|
@ -10,8 +10,9 @@ import com.facebook.react.PackageList;
|
|||
import com.aakashns.reactnativedialogs.ReactNativeDialogsPackage;
|
||||
import com.facebook.react.ReactApplication;
|
||||
import com.facebook.react.ReactNativeHost;
|
||||
import com.reactnativenavigation.NavigationApplication;
|
||||
import com.reactnativenavigation.react.NavigationReactNativeHost;
|
||||
import com.facebook.react.ReactPackage;
|
||||
import com.facebook.soloader.SoLoader;
|
||||
import com.facebook.react.ReactInstanceManager;
|
||||
|
||||
import java.util.List;
|
||||
|
@ -20,9 +21,9 @@ import im.status.ethereum.keycard.RNStatusKeycardPackage;
|
|||
import im.status.ethereum.module.StatusPackage;
|
||||
import im.status.ethereum.pushnotifications.PushNotificationPackage;
|
||||
|
||||
public class MainApplication extends MultiDexApplication implements ReactApplication {
|
||||
public class MainApplication extends NavigationApplication {
|
||||
|
||||
private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) {
|
||||
private final ReactNativeHost mReactNativeHost = new NavigationReactNativeHost(this) {
|
||||
@Override
|
||||
public boolean getUseDeveloperSupport() {
|
||||
return BuildConfig.DEBUG;
|
||||
|
@ -54,7 +55,7 @@ public class MainApplication extends MultiDexApplication implements ReactApplica
|
|||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
SoLoader.init(this, /* native exopackage */ false);
|
||||
|
||||
WebView.setWebContentsDebuggingEnabled(BuildConfig.DEBUG_WEBVIEW == "1");
|
||||
initializeFlipper(this, getReactNativeHost().getReactInstanceManager());
|
||||
}
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
* Project-wide gradle configuration properties for use by all modules
|
||||
*/
|
||||
ext {
|
||||
RNNKotlinVersion = "1.4.31"
|
||||
buildToolsVersion = project.buildToolsVersion
|
||||
minSdkVersion = Integer.valueOf(project.minSdkVersion)
|
||||
compileSdkVersion = Integer.valueOf(project.compileSdkVersion)
|
||||
|
@ -19,6 +20,7 @@ buildscript {
|
|||
jcenter()
|
||||
}
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31"
|
||||
classpath "com.android.tools.build:gradle:${project.ext.gradlePluginVersion}"
|
||||
// WARNING: Do not place your application dependencies here!
|
||||
// They belong in the individual module build.gradle files.
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
platform :ios, '10.0'
|
||||
platform :ios, '11.0'
|
||||
|
||||
require_relative '../node_modules/react-native/scripts/react_native_pods'
|
||||
require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules'
|
||||
|
|
|
@ -290,6 +290,15 @@ PODS:
|
|||
- React
|
||||
- ReactNativeDarkMode (0.2.2):
|
||||
- React
|
||||
- ReactNativeNavigation (7.13.0):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- React-RCTText
|
||||
- ReactNativeNavigation/Core (= 7.13.0)
|
||||
- ReactNativeNavigation/Core (7.13.0):
|
||||
- React-Core
|
||||
- React-RCTImage
|
||||
- React-RCTText
|
||||
- RNCAsyncStorage (1.11.0):
|
||||
- React
|
||||
- RNCClipboard (1.2.2):
|
||||
|
@ -321,10 +330,35 @@ PODS:
|
|||
- React
|
||||
- RNReactNativeHapticFeedback (1.9.0):
|
||||
- React
|
||||
- RNReanimated (1.13.0):
|
||||
- React
|
||||
- RNScreens (2.10.1):
|
||||
- RNReanimated (2.1.0):
|
||||
- DoubleConversion
|
||||
- FBLazyVector
|
||||
- FBReactNativeSpec
|
||||
- Folly
|
||||
- glog
|
||||
- RCTRequired
|
||||
- RCTTypeSafety
|
||||
- React
|
||||
- React-callinvoker
|
||||
- React-Core
|
||||
- React-Core/DevSupport
|
||||
- React-Core/RCTWebSocket
|
||||
- React-CoreModules
|
||||
- React-cxxreact
|
||||
- React-jsi
|
||||
- React-jsiexecutor
|
||||
- React-jsinspector
|
||||
- React-RCTActionSheet
|
||||
- React-RCTAnimation
|
||||
- React-RCTBlob
|
||||
- React-RCTImage
|
||||
- React-RCTLinking
|
||||
- React-RCTNetwork
|
||||
- React-RCTSettings
|
||||
- React-RCTText
|
||||
- React-RCTVibration
|
||||
- ReactCommon/turbomodule/core
|
||||
- Yoga
|
||||
- RNSVG (9.13.6):
|
||||
- React
|
||||
- secp256k1 (0.1.6)
|
||||
|
@ -387,6 +421,7 @@ DEPENDENCIES:
|
|||
- ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`)
|
||||
- "ReactNativeAudioToolkit (from `../node_modules/@react-native-community/audio-toolkit`)"
|
||||
- ReactNativeDarkMode (from `../node_modules/react-native-dark-mode`)
|
||||
- ReactNativeNavigation (from `../node_modules/react-native-navigation`)
|
||||
- "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)"
|
||||
- "RNCClipboard (from `../node_modules/@react-native-community/clipboard`)"
|
||||
- "RNCMaskedView (from `../node_modules/@react-native-community/masked-view`)"
|
||||
|
@ -400,7 +435,6 @@ DEPENDENCIES:
|
|||
- RNPermissions (from `../node_modules/react-native-permissions`)
|
||||
- RNReactNativeHapticFeedback (from `../node_modules/react-native-haptic-feedback`)
|
||||
- RNReanimated (from `../node_modules/react-native-reanimated`)
|
||||
- RNScreens (from `../node_modules/react-native-screens`)
|
||||
- RNSVG (from `../node_modules/react-native-svg`)
|
||||
- secp256k1 (from `https://github.com/status-im/secp256k1.swift.git`)
|
||||
- SQLCipher (~> 3.0)
|
||||
|
@ -507,6 +541,8 @@ EXTERNAL SOURCES:
|
|||
:path: "../node_modules/@react-native-community/audio-toolkit"
|
||||
ReactNativeDarkMode:
|
||||
:path: "../node_modules/react-native-dark-mode"
|
||||
ReactNativeNavigation:
|
||||
:path: "../node_modules/react-native-navigation"
|
||||
RNCAsyncStorage:
|
||||
:path: "../node_modules/@react-native-community/async-storage"
|
||||
RNCClipboard:
|
||||
|
@ -533,8 +569,6 @@ EXTERNAL SOURCES:
|
|||
:path: "../node_modules/react-native-haptic-feedback"
|
||||
RNReanimated:
|
||||
:path: "../node_modules/react-native-reanimated"
|
||||
RNScreens:
|
||||
:path: "../node_modules/react-native-screens"
|
||||
RNSVG:
|
||||
:path: "../node_modules/react-native-svg"
|
||||
secp256k1:
|
||||
|
@ -562,7 +596,7 @@ SPEC CHECKSUMS:
|
|||
FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e
|
||||
FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e
|
||||
Folly: b73c3869541e86821df3c387eb0af5f65addfab4
|
||||
glog: cee4319f395bad5865ef3f32466c2e0ae677432c
|
||||
glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3
|
||||
Keycard: dd96182888da0aacf4de821b641103143bbb26cc
|
||||
Permission-Camera: afad27bf90337684d4a86f3825112d648c8c4d3b
|
||||
Permission-Microphone: 0ffabc3fe1c75cfb260525ee3f529383c9f4368c
|
||||
|
@ -602,6 +636,7 @@ SPEC CHECKSUMS:
|
|||
ReactCommon: 73d79c7039f473b76db6ff7c6b159c478acbbb3b
|
||||
ReactNativeAudioToolkit: de9610f323e855ac6574be8c99621f3d57c5df06
|
||||
ReactNativeDarkMode: 0178ffca3b10f6a7c9f49d6f9810232b328fa949
|
||||
ReactNativeNavigation: 4c4ca87edc0da4ee818158a62cb6188088454e5c
|
||||
RNCAsyncStorage: d059c3ee71738c39834a627476322a5a8cd5bf36
|
||||
RNCClipboard: 8148e21ac347c51fd6cd4b683389094c216bb543
|
||||
RNCMaskedView: 71fc32d971f03b7f03d6ab6b86b730c4ee64f5b6
|
||||
|
@ -614,8 +649,7 @@ SPEC CHECKSUMS:
|
|||
RNLanguages: 962e562af0d34ab1958d89bcfdb64fafc37c513e
|
||||
RNPermissions: ad71dd4f767ec254f2cd57592fbee02afee75467
|
||||
RNReactNativeHapticFeedback: 2566b468cc8d0e7bb2f84b23adc0f4614594d071
|
||||
RNReanimated: 89f5e0a04d1dd52fbf27e7e7030d8f80a646a3fc
|
||||
RNScreens: b748efec66e095134c7166ca333b628cd7e6f3e2
|
||||
RNReanimated: 70f662b5232dd5d19ccff581e919a54ea73df51c
|
||||
RNSVG: 8ba35cbeb385a52fd960fd28db9d7d18b4c2974f
|
||||
secp256k1: f61d67e6fdcb85fd727acf1bf35ace6036db540c
|
||||
SQLCipher: f9fcf29b2e59ced7defc2a2bdd0ebe79b40d4990
|
||||
|
@ -624,6 +658,6 @@ SPEC CHECKSUMS:
|
|||
TouchID: ba4c656d849cceabc2e4eef722dea5e55959ecf4
|
||||
Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6
|
||||
|
||||
PODFILE CHECKSUM: 3df5a5ce6c538b5f3727cb3ee1c20bf66d7ac3eb
|
||||
PODFILE CHECKSUM: 27b3929c4d7f0b5afd76276d0bd4ae289ec11f18
|
||||
|
||||
COCOAPODS: 1.10.0
|
||||
|
|
|
@ -8,6 +8,7 @@
|
|||
*/
|
||||
|
||||
#import "AppDelegate.h"
|
||||
#import <ReactNativeNavigation/ReactNativeNavigation.h>
|
||||
|
||||
#import <asl.h>
|
||||
#import "ReactNativeConfig.h"
|
||||
|
@ -18,7 +19,6 @@
|
|||
|
||||
#import <React/RCTBridge.h>
|
||||
#import <React/RCTBundleURLProvider.h>
|
||||
#import <React/RCTRootView.h>
|
||||
|
||||
#import <UserNotifications/UserNotifications.h>
|
||||
#import <RNCPushNotificationIOS.h>
|
||||
|
@ -77,21 +77,8 @@ static void InitializeFlipper(UIApplication *application) {
|
|||
dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:@"BLANK_PREVIEW"];
|
||||
[[NSUserDefaults standardUserDefaults] registerDefaults:appDefaults];
|
||||
|
||||
RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
|
||||
RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
|
||||
moduleName:@"StatusIm"
|
||||
initialProperties:nil];
|
||||
rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];
|
||||
[ReactNativeNavigation bootstrapWithDelegate:self launchOptions:launchOptions];
|
||||
|
||||
self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
|
||||
_blankView = [[UIView alloc]initWithFrame:self.window.frame];
|
||||
_blankView.backgroundColor = [UIColor whiteColor];
|
||||
_blankView.alpha = 0;
|
||||
|
||||
UIViewController *rootViewController = [UIViewController new];
|
||||
rootViewController.view = rootView;
|
||||
self.window.rootViewController = rootViewController;
|
||||
[self.window makeKeyAndVisible];
|
||||
[RNSplashScreen show];
|
||||
|
||||
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
|
||||
|
@ -116,6 +103,10 @@ static void InitializeFlipper(UIApplication *application) {
|
|||
restorationHandler:restorationHandler];
|
||||
}
|
||||
|
||||
- (NSArray<id<RCTBridgeModule>> *)extraModulesForBridge:(RCTBridge *)bridge {
|
||||
return [ReactNativeNavigation extraModulesForBridge:bridge];
|
||||
}
|
||||
|
||||
- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge
|
||||
{
|
||||
#if DEBUG
|
||||
|
|
|
@ -126,7 +126,7 @@
|
|||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
|
||||
<array>
|
||||
<string>A00000080400010101</string>
|
||||
|
|
|
@ -132,7 +132,7 @@
|
|||
<string>UIInterfaceOrientationLandscapeRight</string>
|
||||
</array>
|
||||
<key>UIViewControllerBasedStatusBarAppearance</key>
|
||||
<false/>
|
||||
<true/>
|
||||
<key>com.apple.developer.nfc.readersession.iso7816.select-identifiers</key>
|
||||
<array>
|
||||
<string>A00000080400010101</string>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -1,22 +1,27 @@
|
|||
androidx.activity:activity:1.0.0
|
||||
androidx.activity:activity:1.1.0
|
||||
androidx.annotation:annotation-experimental:1.0.0
|
||||
androidx.annotation:annotation:1.0.0
|
||||
androidx.annotation:annotation:1.1.0
|
||||
androidx.appcompat:appcompat-resources:1.1.0
|
||||
androidx.appcompat:appcompat-resources:1.2.0
|
||||
androidx.appcompat:appcompat:1.0.2
|
||||
androidx.appcompat:appcompat:1.1.0
|
||||
androidx.appcompat:appcompat:1.2.0
|
||||
androidx.arch.core:core-common:2.0.0
|
||||
androidx.arch.core:core-common:2.1.0
|
||||
androidx.arch.core:core-runtime:2.0.0
|
||||
androidx.arch.core:core-runtime:2.1.0
|
||||
androidx.asynclayoutinflater:asynclayoutinflater:1.0.0
|
||||
androidx.cardview:cardview:1.0.0
|
||||
androidx.collection:collection:1.0.0
|
||||
androidx.collection:collection:1.1.0
|
||||
androidx.constraintlayout:constraintlayout-solver:2.0.4
|
||||
androidx.constraintlayout:constraintlayout:2.0.4
|
||||
androidx.coordinatorlayout:coordinatorlayout:1.0.0
|
||||
androidx.coordinatorlayout:coordinatorlayout:1.1.0
|
||||
androidx.core:core-ktx:1.3.2
|
||||
androidx.core:core:1.0.1
|
||||
androidx.core:core:1.1.0
|
||||
androidx.core:core:1.3.2
|
||||
androidx.cursoradapter:cursoradapter:1.0.0
|
||||
androidx.customview:customview:1.0.0
|
||||
androidx.databinding:databinding-common:3.2.1
|
||||
|
@ -31,25 +36,21 @@ androidx.exifinterface:exifinterface:1.1.0-beta01
|
|||
androidx.exifinterface:exifinterface:1.1.0-rc01
|
||||
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
|
||||
androidx.media:media:1.0.0
|
||||
androidx.multidex:multidex:2.0.1
|
||||
androidx.print:print:1.0.0
|
||||
androidx.recyclerview:recyclerview:1.0.0
|
||||
|
@ -58,7 +59,7 @@ androidx.savedstate:savedstate:1.0.0
|
|||
androidx.slidingpanelayout:slidingpanelayout:1.0.0
|
||||
androidx.swiperefreshlayout:swiperefreshlayout:1.0.0
|
||||
androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02
|
||||
androidx.transition:transition:1.1.0
|
||||
androidx.test:monitor:1.3.0-rc03
|
||||
androidx.transition:transition:1.2.0
|
||||
androidx.transition:transition:1.2.0-rc01
|
||||
androidx.vectordrawable:vectordrawable-animated:1.0.0
|
||||
|
@ -79,6 +80,7 @@ commons-logging:commons-logging:1.2
|
|||
com.adobe.xmp:xmpcore:5.1.2
|
||||
com.afollestad.material-dialogs:commons:0.9.6.0
|
||||
com.afollestad.material-dialogs:core:0.9.6.0
|
||||
com.almworks.sqlite4java:sqlite4java:0.282
|
||||
com.android.databinding:baseLibrary:1.0-rc5
|
||||
com.android.databinding:baseLibrary:3.0.0
|
||||
com.android.databinding:baseLibrary:3.0.1
|
||||
|
@ -331,9 +333,13 @@ com.facebook.soloader:annotation:0.9.0
|
|||
com.facebook.soloader:nativeloader:0.9.0
|
||||
com.facebook.soloader:soloader:0.9.0
|
||||
com.facebook.yoga:proguard-annotations:1.14.1
|
||||
com.github.clans:fab:1.6.4
|
||||
com.github.gundy:semver4j:0.16.4
|
||||
com.github.status-im.status-keycard-java:android:3.0.4
|
||||
com.github.status-im.status-keycard-java:lib:3.0.4
|
||||
com.github.status-im:function:0.0.1
|
||||
com.github.wix-playground:ahbottomnavigation:3.3.0
|
||||
com.github.wix-playground:reflow-animator:1.0.6
|
||||
com.github.yalantis:ucrop:2.2.5-native
|
||||
com.googlecode.json-simple:json-simple:1.1
|
||||
com.googlecode.juniversalchardet:juniversalchardet:1.0.3
|
||||
|
@ -342,7 +348,8 @@ com.google.android.gms:play-services-base:17.0.0
|
|||
com.google.android.gms:play-services-iid:17.0.0
|
||||
com.google.android.gms:play-services-stats:17.0.0
|
||||
com.google.android.gms:play-services-tasks:17.0.0
|
||||
com.google.android.material:material:1.1.0
|
||||
com.google.android.material:material:1.2.0-alpha03
|
||||
com.google.auto.value:auto-value-annotations:1.6.2
|
||||
com.google.auto.value:auto-value:1.5.2
|
||||
com.google.code.findbugs:jsr305:1.3.9
|
||||
com.google.code.findbugs:jsr305:3.0.2
|
||||
|
@ -351,6 +358,7 @@ com.google.code.gson:gson:2.3
|
|||
com.google.code.gson:gson:2.7
|
||||
com.google.code.gson:gson:2.8.0
|
||||
com.google.code.gson:gson:2.8.5
|
||||
com.google.code.gson:gson:2.8.6
|
||||
com.google.errorprone:error_prone_annotations:2.0.18
|
||||
com.google.errorprone:error_prone_annotations:2.1.2
|
||||
com.google.errorprone:error_prone_annotations:2.2.0
|
||||
|
@ -368,9 +376,12 @@ com.google.protobuf:protobuf-java-util:3.4.0
|
|||
com.google.protobuf:protobuf-java:3.0.0
|
||||
com.google.protobuf:protobuf-java:3.4.0
|
||||
com.google.zxing:core:3.3.0
|
||||
com.ibm.icu:icu4j:53.1
|
||||
com.intellij:annotations:12.0
|
||||
com.nhaarman.mockitokotlin2:mockito-kotlin:2.2.0
|
||||
com.parse.bolts:bolts-applinks:1.4.0
|
||||
com.parse.bolts:bolts-tasks:1.4.0
|
||||
com.squareup.assertj:assertj-android:1.1.1
|
||||
com.squareup.okhttp3:okhttp-urlconnection:3.12.12
|
||||
com.squareup.okhttp3:okhttp:3.12.12
|
||||
com.squareup.okio:okio:1.15.0
|
||||
|
@ -383,12 +394,16 @@ com.tunnelvisionlabs:antlr4-annotations:4.5
|
|||
com.tunnelvisionlabs:antlr4-runtime:4.5
|
||||
com.tunnelvisionlabs:antlr4:4.5
|
||||
de.undercouch:gradle-download-task:3.4.3
|
||||
de.undercouch:gradle-download-task:4.0.2
|
||||
it.unimi.dsi:fastutil:7.2.0
|
||||
javax.annotation:javax.annotation-api:1.3.2
|
||||
javax.inject:javax.inject:1
|
||||
javax.xml.bind:jaxb-api:2.2.12-b140109.1041
|
||||
junit:junit:4.12
|
||||
me.zhanghai.android.materialprogressbar:library:1.4.2
|
||||
net.bytebuddy:byte-buddy-agent:1.9.10
|
||||
net.bytebuddy:byte-buddy-agent:1.10.18
|
||||
net.bytebuddy:byte-buddy:1.9.10
|
||||
net.bytebuddy:byte-buddy:1.10.18
|
||||
net.sf.jopt-simple:jopt-simple:4.9
|
||||
net.sf.kxml:kxml2:2.3.0
|
||||
|
@ -402,6 +417,7 @@ net.sf.proguard:proguard-gradle:5.3.3
|
|||
net.sf.proguard:proguard-gradle:6.0.3
|
||||
org.abego.treelayout:org.abego.treelayout.core:1.0.1
|
||||
org.antlr:ST4:4.0.8
|
||||
org.antlr:antlr4-runtime:4.5.2-1
|
||||
org.antlr:antlr4:4.5.3
|
||||
org.antlr:antlr-runtime:3.5.2
|
||||
org.antlr:antlr:3.5.2
|
||||
|
@ -423,11 +439,13 @@ org.apache.httpcomponents:httpmime:4.1
|
|||
org.apache.httpcomponents:httpmime:4.5.2
|
||||
org.apache.httpcomponents:httpmime:4.5.6
|
||||
org.apiguardian:apiguardian-api:1.1.0
|
||||
org.assertj:assertj-core:3.8.0
|
||||
org.bouncycastle:bcpkix-jdk15on:1.48
|
||||
org.bouncycastle:bcpkix-jdk15on:1.56
|
||||
org.bouncycastle:bcprov-jdk15on:1.48
|
||||
org.bouncycastle:bcprov-jdk15on:1.56
|
||||
org.bouncycastle:bcprov-jdk15on:1.60
|
||||
org.bouncycastle:bcprov-jdk15on:1.65
|
||||
org.checkerframework:checker-qual:2.5.2
|
||||
org.codehaus.groovy:groovy-all:2.4.15
|
||||
org.codehaus.mojo:animal-sniffer-annotations:1.14
|
||||
|
@ -444,36 +462,60 @@ org.jacoco:org.jacoco.core:0.7.4.201502262128
|
|||
org.jacoco:org.jacoco.report:0.7.4.201502262128
|
||||
org.jdom:jdom2:2.0.6
|
||||
org.jetbrains.intellij.deps:trove4j:1.0.20181211
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-android:1.4.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core-jvm:1.4.3
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.1.1
|
||||
org.jetbrains.kotlinx:kotlinx-coroutines-core:1.3.8
|
||||
org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-android-extensions:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-annotation-processing-gradle:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-build-common:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-compiler-embeddable:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-compiler-runner:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-daemon-client:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-daemon-embeddable:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-api:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin-model:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-gradle-plugin:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-klib-commonizer-embeddable:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-native-utils:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.1.3-2
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.2.0
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.3.20
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-reflect:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-scripting-common:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-embeddable:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-scripting-compiler-impl-embeddable:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-scripting-jvm:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-script-runtime:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.2.71
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.20
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-stdlib-common:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.2.71
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.20
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk7:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.2.71
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.20
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jdk8:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jre7:1.2.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib-jre8:1.2.0
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.1.3-2
|
||||
|
@ -481,26 +523,49 @@ org.jetbrains.kotlin:kotlin-stdlib:1.2.0
|
|||
org.jetbrains.kotlin:kotlin-stdlib:1.2.71
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.20
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-stdlib:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-test-common:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-test:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.3.50
|
||||
org.jetbrains.kotlin:kotlin-util-io:1.4.31
|
||||
org.jetbrains.kotlin:kotlin-util-klib:1.4.31
|
||||
org.jetbrains.trove4j:trove4j:20160824
|
||||
org.jetbrains:annotations:13.0
|
||||
org.junit.jupiter:junit-jupiter-api:5.7.0
|
||||
org.junit.platform:junit-platform-commons:1.7.0
|
||||
org.jvnet.staxex:stax-ex:1.7.7
|
||||
org.mockito:mockito-core:2.28.2
|
||||
org.mockito:mockito-core:3.6.28
|
||||
org.objenesis:objenesis:2.6
|
||||
org.objenesis:objenesis:3.1
|
||||
org.opentest4j:opentest4j:1.2.0
|
||||
org.ow2.asm:asm-analysis:5.0.3
|
||||
org.ow2.asm:asm-analysis:5.1
|
||||
org.ow2.asm:asm-analysis:6.0
|
||||
org.ow2.asm:asm-analysis:7.2
|
||||
org.ow2.asm:asm-commons:5.1
|
||||
org.ow2.asm:asm-commons:6.0
|
||||
org.ow2.asm:asm-commons:7.2
|
||||
org.ow2.asm:asm-debug-all:5.0.1
|
||||
org.ow2.asm:asm-tree:5.0.3
|
||||
org.ow2.asm:asm-tree:5.1
|
||||
org.ow2.asm:asm-tree:6.0
|
||||
org.ow2.asm:asm-tree:7.2
|
||||
org.ow2.asm:asm-util:5.1
|
||||
org.ow2.asm:asm-util:6.0
|
||||
org.ow2.asm:asm-util:7.2
|
||||
org.ow2.asm:asm:5.0.3
|
||||
org.ow2.asm:asm:5.1
|
||||
org.ow2.asm:asm:6.0
|
||||
org.ow2.asm:asm:7.2
|
||||
org.robolectric:annotations:4.4
|
||||
org.robolectric:junit:4.4
|
||||
org.robolectric:pluginapi:4.4
|
||||
org.robolectric:plugins-maven-dependency-resolver:4.4
|
||||
org.robolectric:resources:4.4
|
||||
org.robolectric:robolectric:4.4
|
||||
org.robolectric:sandbox:4.4
|
||||
org.robolectric:shadowapi:4.4
|
||||
org.robolectric:shadows-framework:4.4
|
||||
org.robolectric:utils-reflector:4.4
|
||||
org.robolectric:utils:4.4
|
||||
|
|
|
@ -1,28 +1,36 @@
|
|||
https://dl.google.com/dl/android/maven2/androidx/activity/activity/1.0.0/activity-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/activity/activity/1.1.0/activity-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation-experimental/1.0.0/annotation-experimental-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.0.0/annotation-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.0.1/annotation-1.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.0.2/annotation-1.0.2.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.1.0-rc01/annotation-1.1.0-rc01.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/annotation/annotation/1.1.0/annotation-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat-resources/1.1.0/appcompat-resources-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat-resources/1.2.0/appcompat-resources-1.2.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.0.0/appcompat-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.0.2/appcompat-1.0.2.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.1.0/appcompat-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/appcompat/appcompat/1.2.0/appcompat-1.2.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.0.0/core-common-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.0.1/core-common-2.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-common/2.1.0/core-common-2.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-runtime/2.0.0/core-runtime-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/arch/core/core-runtime/2.1.0/core-runtime-2.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/asynclayoutinflater/asynclayoutinflater/1.0.0/asynclayoutinflater-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/cardview/cardview/1.0.0/cardview-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.0.0/collection-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/collection/collection/1.1.0/collection-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/constraintlayout/constraintlayout-solver/2.0.4/constraintlayout-solver-2.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/constraintlayout/constraintlayout/2.0.4/constraintlayout-2.0.4.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/coordinatorlayout/coordinatorlayout/1.0.0/coordinatorlayout-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/coordinatorlayout/coordinatorlayout/1.1.0/coordinatorlayout-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core-ktx/1.3.2/core-ktx-1.3.2.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.0.0/core-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.0.1/core-1.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.1.0-rc01/core-1.1.0-rc01.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.1.0/core-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.3.0/core-1.3.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.3.1/core-1.3.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/core/core/1.3.2/core-1.3.2.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/cursoradapter/cursoradapter/1.0.0/cursoradapter-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/customview/customview/1.0.0/customview-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/databinding/databinding-common/3.2.1/databinding-common-3.2.1.pom
|
||||
|
@ -37,26 +45,21 @@ https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.1
|
|||
https://dl.google.com/dl/android/maven2/androidx/exifinterface/exifinterface/1.1.0-rc01/exifinterface-1.1.0-rc01.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
|
||||
https://dl.google.com/dl/android/maven2/androidx/interpolator/interpolator/1.0.0/interpolator-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/legacy/legacy-support-core-ui/1.0.0/legacy-support-core-ui-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/legacy/legacy-support-core-utils/1.0.0/legacy-support-core-utils-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/legacy/legacy-support-v4/1.0.0/legacy-support-v4-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-common/2.0.0/lifecycle-common-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-common/2.1.0/lifecycle-common-2.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-common/2.2.0/lifecycle-common-2.2.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-livedata-core/2.0.0/lifecycle-livedata-core-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-livedata-core/2.2.0/lifecycle-livedata-core-2.2.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-livedata/2.0.0/lifecycle-livedata-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-runtime/2.0.0/lifecycle-runtime-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-runtime/2.1.0/lifecycle-runtime-2.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-runtime/2.2.0/lifecycle-runtime-2.2.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel-savedstate/1.0.0/lifecycle-viewmodel-savedstate-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel-savedstate/2.2.0/lifecycle-viewmodel-savedstate-2.2.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2.0.0/lifecycle-viewmodel-2.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2.1.0/lifecycle-viewmodel-2.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/lifecycle/lifecycle-viewmodel/2.2.0/lifecycle-viewmodel-2.2.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/loader/loader/1.0.0/loader-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/localbroadcastmanager/localbroadcastmanager/1.0.0/localbroadcastmanager-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/media/media/1.0.0/media-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/multidex/multidex/2.0.1/multidex-2.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/print/print/1.0.0/print-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/recyclerview/recyclerview/1.0.0/recyclerview-1.0.0.pom
|
||||
|
@ -65,7 +68,8 @@ https://dl.google.com/dl/android/maven2/androidx/savedstate/savedstate/1.0.0/sav
|
|||
https://dl.google.com/dl/android/maven2/androidx/slidingpanelayout/slidingpanelayout/1.0.0/slidingpanelayout-1.0.0.pom
|
||||
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/test/monitor/1.3.0-rc03/monitor-1.3.0-rc03.pom
|
||||
https://dl.google.com/dl/android/maven2/androidx/transition/transition/1.0.0/transition-1.0.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
|
||||
|
@ -96,6 +100,7 @@ https://dl.google.com/dl/android/maven2/com/android/support/animated-vector-draw
|
|||
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/recyclerview-v7/27.0.1/recyclerview-v7-27.0.1.pom
|
||||
https://dl.google.com/dl/android/maven2/com/android/support/support-annotations/22.2.1/support-annotations-22.2.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
|
||||
|
@ -267,7 +272,8 @@ https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-bas
|
|||
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-iid/17.0.0/play-services-iid-17.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-stats/17.0.0/play-services-stats-17.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/android/gms/play-services-tasks/17.0.0/play-services-tasks-17.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.1.0/material-1.1.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.0.0/material-1.0.0.pom
|
||||
https://dl.google.com/dl/android/maven2/com/google/android/material/material/1.2.0-alpha03/material-1.2.0-alpha03.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.54.0/flipper-fresco-plugin-0.54.0.pom
|
||||
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/facebook/flipper/flipper/0.54.0/flipper-0.54.0.pom
|
||||
|
@ -284,8 +290,9 @@ https://repository.sonatype.org/content/groups/sonatype-public-grid/com/facebook
|
|||
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.4/android-3.0.4.pom
|
||||
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/status-im/status-keycard-java/lib/3.0.4/lib-3.0.4.pom
|
||||
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/wix-playground/ahbottomnavigation/3.3.0/ahbottomnavigation-3.3.0.pom
|
||||
https://repository.sonatype.org/content/groups/sonatype-public-grid/com/github/wix-playground/reflow-animator/1.0.6/reflow-animator-1.0.6.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/antlr/antlr/2.7.7/antlr-2.7.7.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
|
||||
|
@ -299,6 +306,7 @@ https://repo.maven.apache.org/maven2/commons-logging/commons-logging/1.2/commons
|
|||
https://repo.maven.apache.org/maven2/com/adobe/xmp/xmpcore/5.1.2/xmpcore-5.1.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/commons/0.9.6.0/commons-0.9.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/afollestad/material-dialogs/core/0.9.6.0/core-0.9.6.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/almworks/sqlite4java/sqlite4java/0.282/sqlite4java-0.282.pom
|
||||
https://repo.maven.apache.org/maven2/com/android/databinding/baseLibrary/1.0-rc5/baseLibrary-1.0-rc5.pom
|
||||
https://repo.maven.apache.org/maven2/com/android/databinding/compilerCommon/1.0-rc5/compilerCommon-1.0-rc5.pom
|
||||
https://repo.maven.apache.org/maven2/com/android/tools/annotations/24.1.3/annotations-24.1.3.pom
|
||||
|
@ -384,11 +392,16 @@ https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.6.0/soload
|
|||
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.8.2/soloader-0.8.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/facebook/soloader/soloader/0.9.0/soloader-0.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/facebook/stetho/stetho/1.3.1/stetho-1.3.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/github/clans/fab/1.6.4/fab-1.6.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/github/gundy/semver4j/0.16.4/semver4j-0.16.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/googlecode/json-simple/json-simple/1.1/json-simple-1.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/googlecode/juniversalchardet/juniversalchardet/1.0.3/juniversalchardet-1.0.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/3/auto-parent-3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.7.4/auto-value-annotations-1.7.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.7.4/auto-value-parent-1.7.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/auto-parent/6/auto-parent-6.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.6.2/auto-value-annotations-1.6.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-annotations/1.8.1/auto-value-annotations-1.8.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.6.2/auto-value-parent-1.6.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value-parent/1.8.1/auto-value-parent-1.8.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/auto/value/auto-value/1.5.2/auto-value-1.5.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/1.3.9/jsr305-1.3.9.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/2.0.1/jsr305-2.0.1.pom
|
||||
|
@ -397,21 +410,23 @@ https://repo.maven.apache.org/maven2/com/google/code/findbugs/jsr305/3.0.2/jsr30
|
|||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.7/gson-parent-2.7.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.0/gson-parent-2.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.5/gson-parent-2.8.5.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson-parent/2.8.6/gson-parent-2.8.6.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.2.4/gson-2.2.4.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.3/gson-2.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.7/gson-2.7.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.0/gson-2.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.5/gson-2.8.5.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/code/gson/gson/2.8.6/gson-2.8.6.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.0.18/error_prone_annotations-2.0.18.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.1.2/error_prone_annotations-2.1.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.2.0/error_prone_annotations-2.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.3.1/error_prone_annotations-2.3.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.5.1/error_prone_annotations-2.5.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_annotations/2.7.1/error_prone_annotations-2.7.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.0.18/error_prone_parent-2.0.18.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.1.2/error_prone_parent-2.1.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.2.0/error_prone_parent-2.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.3.1/error_prone_parent-2.3.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.5.1/error_prone_parent-2.5.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/errorprone/error_prone_parent/2.7.1/error_prone_parent-2.7.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/google/1/google-1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/failureaccess/1.0.1/failureaccess-1.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/17.0/guava-parent-17.0.pom
|
||||
|
@ -420,14 +435,14 @@ https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/23.0/guava-pa
|
|||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-android/guava-parent-26.0-android.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/26.0-jre/guava-parent-26.0-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/27.0.1-jre/guava-parent-27.0.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/30.1-jre/guava-parent-30.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/30.1-jre/guava-testlib-30.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-parent/30.1.1-jre/guava-parent-30.1.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava-testlib/30.1.1-jre/guava-testlib-30.1.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/17.0/guava-17.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/22.0/guava-22.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/23.0/guava-23.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/26.0-jre/guava-26.0-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/27.0.1-jre/guava-27.0.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1-jre/guava-30.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/guava/30.1.1-jre/guava-30.1.1-jre.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/guava/listenablefuture/9999.0-empty-to-avoid-conflict-with-guava/listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.1/j2objc-annotations-1.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/j2objc/j2objc-annotations/1.3/j2objc-annotations-1.3.pom
|
||||
|
@ -441,13 +456,16 @@ https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-java/4.0.0-rc-
|
|||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.0.0/protobuf-parent-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/3.4.0/protobuf-parent-3.4.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/protobuf/protobuf-parent/4.0.0-rc-2/protobuf-parent-4.0.0-rc-2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/truth/truth-parent/1.1.2/truth-parent-1.1.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/truth/truth/1.1.2/truth-1.1.2.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/truth/truth-parent/1.1.3/truth-parent-1.1.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/truth/truth/1.1.3/truth-1.1.3.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/zxing/core/3.3.0/core-3.3.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/google/zxing/zxing-parent/3.3.0/zxing-parent-3.3.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/ibm/icu/icu4j/53.1/icu4j-53.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/intellij/annotations/12.0/annotations-12.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/nhaarman/mockitokotlin2/mockito-kotlin/2.2.0/mockito-kotlin-2.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/parse/bolts/bolts-applinks/1.4.0/bolts-applinks-1.4.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/parse/bolts/bolts-tasks/1.4.0/bolts-tasks-1.4.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/assertj/assertj-android/1.1.1/assertj-android-1.1.1.pom
|
||||
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.12/okhttp-urlconnection-3.12.12.pom
|
||||
|
@ -459,22 +477,22 @@ https://repo.maven.apache.org/maven2/com/squareup/okhttp3/parent/3.12.12/parent-
|
|||
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/1.15.0/okio-1.15.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/2.9.0/okio-2.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.0.0-alpha.1/okio-3.0.0-alpha.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/squareup/okio/okio/3.0.0-alpha.6/okio-3.0.0-alpha.6.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/1.2.0/all-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/2.0.0/all-2.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/jakarta.activation/2.0.0/jakarta.activation-2.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/all/2.0.1/all-2.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/jakarta.activation/2.0.1/jakarta.activation-2.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/activation/javax.activation/1.2.0/javax.activation-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/2.21/istack-commons-runtime-2.21.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/4.0.0/istack-commons-runtime-4.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons-runtime/4.0.1/istack-commons-runtime-4.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons/2.21/istack-commons-2.21.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons/4.0.0/istack-commons-4.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/istack/istack-commons/4.0.1/istack-commons-4.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/jaxb-bom-ext/2.2.11/jaxb-bom-ext-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/jaxb-bom-ext/3.0.0/jaxb-bom-ext-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/jaxb-bom-ext/3.0.2-b01/jaxb-bom-ext-3.0.2-b01.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-parent/2.2.11/jaxb-parent-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-parent/3.0.0/jaxb-parent-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-parent/3.0.2-b01/jaxb-parent-3.0.2-b01.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-runtime-parent/2.2.11/jaxb-runtime-parent-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-txw-parent/2.2.11/jaxb-txw-parent-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-txw-parent/3.0.0/jaxb-txw-parent-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/bind/mvn/jaxb-txw-parent/3.0.2-b01/jaxb-txw-parent-3.0.2-b01.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/1.2.13/FastInfoset-1.2.13.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/FastInfoset/2.0.0/FastInfoset-2.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/sun/xml/fastinfoset/fastinfoset-project/1.2.13/fastinfoset-project-1.2.13.pom
|
||||
|
@ -487,11 +505,13 @@ https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.5/ant
|
|||
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4-runtime/4.9.0/antlr4-runtime-4.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/com/tunnelvisionlabs/antlr4/4.5/antlr4-4.5.pom
|
||||
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/3.4.3/gradle-download-task-3.4.3.pom
|
||||
https://repo.maven.apache.org/maven2/de/undercouch/gradle-download-task/4.0.2/gradle-download-task-4.0.2.pom
|
||||
https://repo.maven.apache.org/maven2/it/unimi/dsi/fastutil/7.2.0/fastutil-7.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api-parent/3.0.0/jakarta.xml.bind-api-parent-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/3.0.0/jakarta.xml.bind-api-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api-parent/3.0.1/jakarta.xml.bind-api-parent-3.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/jakarta/xml/bind/jakarta.xml.bind-api/3.0.1/jakarta.xml.bind-api-3.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/javax/activation/activation/1.1/activation-1.1.pom
|
||||
https://repo.maven.apache.org/maven2/javax/activation/javax.activation-api/1.2.0/javax.activation-api-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/javax/annotation/javax.annotation-api/1.3.2/javax.annotation-api-1.3.2.pom
|
||||
https://repo.maven.apache.org/maven2/javax/inject/javax.inject/1/javax.inject-1.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api-parent/2.4.0-b180830.0359/jaxb-api-parent-2.4.0-b180830.0359.pom
|
||||
https://repo.maven.apache.org/maven2/javax/xml/bind/jaxb-api/2.2.12-b140109.1041/jaxb-api-2.2.12-b140109.1041.pom
|
||||
|
@ -500,8 +520,14 @@ https://repo.maven.apache.org/maven2/javax/xml/stream/stax-api/1.0-2/stax-api-1.
|
|||
https://repo.maven.apache.org/maven2/junit/junit/4.12/junit-4.12.pom
|
||||
https://repo.maven.apache.org/maven2/junit/junit/4.13.2/junit-4.13.2.pom
|
||||
https://repo.maven.apache.org/maven2/me/zhanghai/android/materialprogressbar/library/1.4.2/library-1.4.2.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.9.0/byte-buddy-agent-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.9.10/byte-buddy-agent-1.9.10.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-agent/1.10.18/byte-buddy-agent-1.10.18.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.9.0/byte-buddy-parent-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.9.10/byte-buddy-parent-1.9.10.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy-parent/1.10.18/byte-buddy-parent-1.10.18.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.9.0/byte-buddy-1.9.0.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.9.10/byte-buddy-1.9.10.pom
|
||||
https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.10.18/byte-buddy-1.10.18.pom
|
||||
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/1/jvnet-parent-1.pom
|
||||
https://repo.maven.apache.org/maven2/net/java/jvnet-parent/3/jvnet-parent-3.pom
|
||||
|
@ -526,7 +552,11 @@ https://repo.maven.apache.org/maven2/net/sf/proguard/proguard-parent/6.3.0beta1/
|
|||
https://repo.maven.apache.org/maven2/org/abego/treelayout/org.abego.treelayout.core/1.0.1/org.abego.treelayout.core-1.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/ST4/4.0.8/ST4-4.0.8.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/ST4/4.3.1/ST4-4.3.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.5.2-1/antlr4-master-4.5.2-1.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.5.3/antlr4-master-4.5.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr4-master/4.9.2/antlr4-master-4.9.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr4-runtime/4.5.2-1/antlr4-runtime-4.5.2-1.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr4-runtime/4.9.2/antlr4-runtime-4.9.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr4/4.5.3/antlr4-4.5.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr-master/3.5.2/antlr-master-3.5.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/antlr/antlr-runtime/3.5.2/antlr-runtime-3.5.2.pom
|
||||
|
@ -588,13 +618,18 @@ https://repo.maven.apache.org/maven2/org/apache/httpcomponents/httpmime/4.5.6/ht
|
|||
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/4.1.1/project-4.1.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/apache/httpcomponents/project/7/project-7.pom
|
||||
https://repo.maven.apache.org/maven2/org/apiguardian/apiguardian-api/1.1.0/apiguardian-api-1.1.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/assertj/assertj-core/1.7.1/assertj-core-1.7.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/assertj/assertj-core/3.8.0/assertj-core-3.8.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/assertj/assertj-parent-pom/1.2.6/assertj-parent-pom-1.2.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/assertj/assertj-parent-pom/2.1.6/assertj-parent-pom-2.1.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.48/bcpkix-jdk15on-1.48.pom
|
||||
https://repo.maven.apache.org/maven2/org/bouncycastle/bcpkix-jdk15on/1.56/bcpkix-jdk15on-1.56.pom
|
||||
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.48/bcprov-jdk15on-1.48.pom
|
||||
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.56/bcprov-jdk15on-1.56.pom
|
||||
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.60/bcprov-jdk15on-1.60.pom
|
||||
https://repo.maven.apache.org/maven2/org/bouncycastle/bcprov-jdk15on/1.65/bcprov-jdk15on-1.65.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/2.5.2/checker-qual-2.5.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.11.0/checker-qual-3.11.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/checkerframework/checker-qual/3.14.0/checker-qual-3.14.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/codehaus/codehaus-parent/4/codehaus-parent-4.pom
|
||||
https://repo.maven.apache.org/maven2/org/codehaus/groovy/groovy-all/2.4.15/groovy-all-2.4.15.pom
|
||||
https://repo.maven.apache.org/maven2/org/codehaus/mojo/animal-sniffer-annotations/1.14/animal-sniffer-annotations-1.14.pom
|
||||
|
@ -609,68 +644,97 @@ https://repo.maven.apache.org/maven2/org/codehaus/mojo/mojo-parent/61/mojo-paren
|
|||
https://repo.maven.apache.org/maven2/org/conscrypt/conscrypt-android/2.0.0/conscrypt-android-2.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/easymock/easymockclassextension/3.2/easymockclassextension-3.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/easymock/easymock-parent/3.2/easymock-parent-3.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/easymock/easymock-parent/4.2/easymock-parent-4.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/easymock/easymock/4.2/easymock-4.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/easymock/easymock-parent/4.3/easymock-parent-4.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/easymock/easymock/4.3/easymock-4.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/eclipse/ee4j/project/1.0.6/project-1.0.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/eclipse/ee4j/project/1.0.7/project-1.0.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.4.2/ecj-4.4.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.4/ecj-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/eclipse/jdt/core/compiler/ecj/4.6.1/ecj-4.6.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/2.2.11/jaxb-bom-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/3.0.0/jaxb-bom-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-bom/3.0.2-b01/jaxb-bom-3.0.2-b01.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/2.2.11/jaxb-core-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/3.0.0/jaxb-core-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-core/3.0.2-b01/jaxb-core-3.0.2-b01.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/jaxb-runtime/2.2.11/jaxb-runtime-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/2.2.11/txw2-2.2.11.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/3.0.0/txw2-3.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/glassfish/jaxb/txw2/3.0.2-b01/txw2-3.0.2-b01.pom
|
||||
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/1.3/hamcrest-core-1.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-core/2.2/hamcrest-core-2.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest-parent/1.3/hamcrest-parent-1.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/hamcrest/hamcrest/2.2/hamcrest-2.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.7.4.201502262128/org.jacoco.build-0.7.4.201502262128.pom
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.8.6/org.jacoco.build-0.8.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.build/0.8.7/org.jacoco.build-0.8.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.7.4.201502262128/org.jacoco.core-0.7.4.201502262128.pom
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.6/org.jacoco.core-0.8.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.core/0.8.7/org.jacoco.core-0.8.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/jacoco/org.jacoco.report/0.7.4.201502262128/org.jacoco.report-0.7.4.201502262128.pom
|
||||
https://repo.maven.apache.org/maven2/org/jdom/jdom2/2.0.6/jdom2-2.0.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/annotations/13.0/annotations-13.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/intellij/deps/trove4j/1.0.20181211/trove4j-1.0.20181211.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-android/1.4.3/kotlinx-coroutines-android-1.4.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-common/1.1.1/kotlinx-coroutines-core-common-1.1.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core-jvm/1.4.3/kotlinx-coroutines-core-jvm-1.4.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.1.1/kotlinx-coroutines-core-1.1.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-coroutines-core/1.3.8/kotlinx-coroutines-core-1.3.8.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlinx/kotlinx-metadata-jvm/0.1.0/kotlinx-metadata-jvm-0.1.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-android-extensions-runtime/1.4.31/kotlin-android-extensions-runtime-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-android-extensions/1.3.50/kotlin-android-extensions-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-android-extensions/1.4.31/kotlin-android-extensions-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-annotation-processing-gradle/1.3.50/kotlin-annotation-processing-gradle-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-annotation-processing-gradle/1.4.31/kotlin-annotation-processing-gradle-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-common/1.3.50/kotlin-build-common-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-build-common/1.4.31/kotlin-build-common-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.3.50/kotlin-compiler-embeddable-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-embeddable/1.4.31/kotlin-compiler-embeddable-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/1.3.50/kotlin-compiler-runner-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-compiler-runner/1.4.31/kotlin-compiler-runner-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-client/1.3.50/kotlin-daemon-client-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-client/1.4.31/kotlin-daemon-client-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.3.50/kotlin-daemon-embeddable-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-daemon-embeddable/1.4.31/kotlin-daemon-embeddable-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1.3.50/kotlin-gradle-plugin-api-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-api/1.4.31/kotlin-gradle-plugin-api-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-model/1.3.50/kotlin-gradle-plugin-model-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin-model/1.4.31/kotlin-gradle-plugin-model-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.3.50/kotlin-gradle-plugin-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-gradle-plugin/1.4.31/kotlin-gradle-plugin-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-klib-commonizer-embeddable/1.4.31/kotlin-klib-commonizer-embeddable-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-native-utils/1.3.50/kotlin-native-utils-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.1.3-2/kotlin-reflect-1.1.3-2.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.2.0/kotlin-reflect-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.20/kotlin-reflect-1.3.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.3.50/kotlin-reflect-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-reflect/1.4.31/kotlin-reflect-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.3.50/kotlin-scripting-common-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-common/1.4.31/kotlin-scripting-common-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.3.50/kotlin-scripting-compiler-embeddable-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-embeddable/1.4.31/kotlin-scripting-compiler-embeddable-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/1.3.50/kotlin-scripting-compiler-impl-embeddable-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-compiler-impl-embeddable/1.4.31/kotlin-scripting-compiler-impl-embeddable-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-jvm/1.3.50/kotlin-scripting-jvm-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-scripting-jvm/1.4.31/kotlin-scripting-jvm-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.3.50/kotlin-script-runtime-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-script-runtime/1.4.31/kotlin-script-runtime-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.2.71/kotlin-stdlib-common-1.2.71.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.0/kotlin-stdlib-common-1.3.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.20/kotlin-stdlib-common-1.3.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.31/kotlin-stdlib-common-1.3.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.50/kotlin-stdlib-common-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.3.71/kotlin-stdlib-common-1.3.71.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.10/kotlin-stdlib-common-1.4.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.20/kotlin-stdlib-common-1.4.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.21/kotlin-stdlib-common-1.4.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.30/kotlin-stdlib-common-1.4.30.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-common/1.4.31/kotlin-stdlib-common-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.2.71/kotlin-stdlib-jdk7-1.2.71.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.20/kotlin-stdlib-jdk7-1.3.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.3.50/kotlin-stdlib-jdk7-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.20/kotlin-stdlib-jdk7-1.4.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk7/1.4.31/kotlin-stdlib-jdk7-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.2.71/kotlin-stdlib-jdk8-1.2.71.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.20/kotlin-stdlib-jdk8-1.3.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.3.50/kotlin-stdlib-jdk8-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.20/kotlin-stdlib-jdk8-1.4.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jdk8/1.4.31/kotlin-stdlib-jdk8-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre7/1.2.0/kotlin-stdlib-jre7-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib-jre8/1.2.0/kotlin-stdlib-jre8-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.1.3-2/kotlin-stdlib-1.1.3-2.pom
|
||||
|
@ -681,25 +745,41 @@ https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.0/ko
|
|||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.20/kotlin-stdlib-1.3.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.31/kotlin-stdlib-1.3.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.50/kotlin-stdlib-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.3.71/kotlin-stdlib-1.3.71.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.10/kotlin-stdlib-1.4.10.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.20/kotlin-stdlib-1.4.20.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.21/kotlin-stdlib-1.4.21.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.30/kotlin-stdlib-1.4.30.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-stdlib/1.4.31/kotlin-stdlib-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test-common/1.4.31/kotlin-test-common-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-test/1.4.31/kotlin-test-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.3.50/kotlin-util-io-1.3.50.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-io/1.4.31/kotlin-util-io-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/kotlin/kotlin-util-klib/1.4.31/kotlin-util-klib-1.4.31.pom
|
||||
https://repo.maven.apache.org/maven2/org/jetbrains/trove4j/trove4j/20160824/trove4j-20160824.pom
|
||||
https://repo.maven.apache.org/maven2/org/junit/junit-bom/5.7.0/junit-bom-5.7.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/junit/jupiter/junit-jupiter-api/5.7.0/junit-jupiter-api-5.7.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/junit/platform/junit-platform-commons/1.7.0/junit-platform-commons-1.7.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/1.7.7/stax-ex-1.7.7.pom
|
||||
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/2.0.0/stax-ex-2.0.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/jvnet/staxex/stax-ex/2.0.1/stax-ex-2.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/2.23.0/mockito-core-2.23.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/2.28.2/mockito-core-2.28.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/mockito/mockito-core/3.6.28/mockito-core-3.6.28.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/2.6/objenesis-parent-2.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.1/objenesis-parent-3.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis-parent/3.2/objenesis-parent-3.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/2.6/objenesis-2.6.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/3.1/objenesis-3.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/objenesis/objenesis/3.2/objenesis-3.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/opentest4j/opentest4j/1.2.0/opentest4j-1.2.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.0.3/asm-analysis-5.0.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/5.1/asm-analysis-5.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/6.0/asm-analysis-6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/7.2/asm-analysis-7.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-analysis/9.1/asm-analysis-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/5.1/asm-commons-5.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/6.0/asm-commons-6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/7.2/asm-commons-7.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-commons/9.1/asm-commons-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-debug-all/5.0.1/asm-debug-all-5.0.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-debug-all/6.0_BETA/asm-debug-all-6.0_BETA.pom
|
||||
|
@ -711,18 +791,33 @@ https://repo.maven.apache.org/maven2/org/ow2/asm/asm-parent/6.0_BETA/asm-parent-
|
|||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.0.3/asm-tree-5.0.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/5.1/asm-tree-5.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/6.0/asm-tree-6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/7.2/asm-tree-7.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-tree/9.1/asm-tree-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/5.1/asm-util-5.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/6.0/asm-util-6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm-util/7.2/asm-util-7.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.0.3/asm-5.0.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/5.1/asm-5.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/6.0/asm-6.0.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/7.2/asm-7.2.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/asm/asm/9.1/asm-9.1.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/ow2/1.3/ow2-1.3.pom
|
||||
https://repo.maven.apache.org/maven2/org/ow2/ow2/1.5/ow2-1.5.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/annotations/4.4/annotations-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/junit/4.4/junit-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/pluginapi/4.4/pluginapi-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/plugins-maven-dependency-resolver/4.4/plugins-maven-dependency-resolver-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/resources/4.4/resources-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/robolectric/4.4/robolectric-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/sandbox/4.4/sandbox-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/shadowapi/4.4/shadowapi-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/shadows-framework/4.4/shadows-framework-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/utils-reflector/4.4/utils-reflector-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/robolectric/utils/4.4/utils-4.4.pom
|
||||
https://repo.maven.apache.org/maven2/org/slf4j/jcl-over-slf4j/2.0.0-alpha1/jcl-over-slf4j-2.0.0-alpha1.pom
|
||||
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-api/2.0.0-alpha1/slf4j-api-2.0.0-alpha1.pom
|
||||
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-jdk14/2.0.0-alpha1/slf4j-jdk14-2.0.0-alpha1.pom
|
||||
https://repo.maven.apache.org/maven2/org/slf4j/slf4j-parent/2.0.0-alpha1/slf4j-parent-2.0.0-alpha1.pom
|
||||
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/4/oss-parent-4.pom
|
||||
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/7/oss-parent-7.pom
|
||||
https://repo.maven.apache.org/maven2/org/sonatype/oss/oss-parent/9/oss-parent-9.pom
|
||||
|
|
|
@ -21,12 +21,11 @@ react-native-keychain
|
|||
react-native-languages
|
||||
react-native-linear-gradient
|
||||
react-native-mail
|
||||
react-native-navigation-bar-color
|
||||
react-native-navigation
|
||||
react-native-nfc-manager
|
||||
react-native-permissions
|
||||
react-native-reanimated
|
||||
react-native-safe-area-context
|
||||
react-native-screens
|
||||
react-native-shake
|
||||
react-native-splash-screen
|
||||
react-native-status
|
||||
|
|
10
package.json
10
package.json
|
@ -20,9 +20,6 @@
|
|||
"@react-native-community/netinfo": "^4.4.0",
|
||||
"@react-native-community/push-notification-ios": "^1.4.1",
|
||||
"@react-native-community/slider": "^3.0.0",
|
||||
"@react-navigation/bottom-tabs": "^5.8.0",
|
||||
"@react-navigation/native": "^5.7.3",
|
||||
"@react-navigation/stack": "^5.9.0",
|
||||
"bignumber.js": "git+https://github.com/status-im/bignumber.js.git#v4.0.2-status",
|
||||
"buffer": "^5.4.2",
|
||||
"chance": "^1.1.0",
|
||||
|
@ -53,12 +50,11 @@
|
|||
"react-native-languages": "^3.0.2",
|
||||
"react-native-linear-gradient": "^2.5.6",
|
||||
"react-native-mail": "git+https://github.com/status-im/react-native-mail.git#v4.0.0-status",
|
||||
"react-native-navigation-bar-color": "^2.0.1",
|
||||
"react-native-navigation": "^7.13.0",
|
||||
"react-native-permissions": "^2.1.5",
|
||||
"react-native-reanimated": "^1.13.0",
|
||||
"react-native-redash": "^14.2.2",
|
||||
"react-native-reanimated": "^2.1.0",
|
||||
"react-native-redash": "^16.0.11",
|
||||
"react-native-safe-area-context": "^2.0.0",
|
||||
"react-native-screens": "^2.10.1",
|
||||
"react-native-shake": "^3.3.1",
|
||||
"react-native-splash-screen": "^3.2.0",
|
||||
"react-native-status-keycard": "git+https://github.com/status-im/react-native-status-keycard.git#v2.5.35",
|
||||
|
|
|
@ -24,6 +24,7 @@
|
|||
:View {}
|
||||
:RefreshControl {}
|
||||
:FlatList {}
|
||||
:SectionList {}
|
||||
:Text {}
|
||||
:StatusBar {}
|
||||
:ScrollView {}
|
||||
|
@ -100,7 +101,6 @@
|
|||
:SafeAreaInsetsContext {:Consumer (fn [])}
|
||||
:SafeAreaView {}}))
|
||||
(def react-native-dark-mode #js {"eventEmitter" {} "initialMode" {}})
|
||||
(def react-native-navigation-bar-color #js {"changeNavigationBarColor" #()})
|
||||
|
||||
(def back-handler #js {:addEventListener identity
|
||||
:removeEventListener identity})
|
||||
|
@ -113,6 +113,10 @@
|
|||
:useFocusEffect identity
|
||||
:CommonActions #js {}
|
||||
:StackActions #js {}})
|
||||
|
||||
(def react-native-navigation #js {:Navigation #js {:constants (fn [] #js {:then identity})
|
||||
:events identity}})
|
||||
|
||||
(def react-navigation-stack #js {:createStackNavigator identity
|
||||
:TransitionPresets #js {:ModalPresentationIOS #js {}}})
|
||||
(def react-navigation-bottom-tabs #js {:createBottomTabNavigator identity})
|
||||
|
@ -147,7 +151,7 @@
|
|||
:event nil
|
||||
:cond nil
|
||||
:block nil
|
||||
:interpolate nil
|
||||
:interpolateNode nil
|
||||
:call nil
|
||||
:timing nil
|
||||
:onChange nil
|
||||
|
@ -156,7 +160,7 @@
|
|||
:Text #js {}
|
||||
:Extrapolate #js {:CLAMP nil}
|
||||
:Code #js {}}
|
||||
:Easing #js {:bezier identity
|
||||
:EasingNode #js {:bezier identity
|
||||
:linear identity}
|
||||
:clockRunning nil})
|
||||
(def react-native-gesture-handler #js {:default #js {}
|
||||
|
@ -188,6 +192,9 @@
|
|||
(def react-native-device-info
|
||||
#js {:getInstallReferrer identity})
|
||||
|
||||
(def react-native-camera-kit
|
||||
#js {:CameraKitCamera #js {}})
|
||||
|
||||
(def react-native-push-notification
|
||||
#js {:localNotification identity
|
||||
:requestPermission identity})
|
||||
|
@ -206,12 +213,11 @@
|
|||
"react-native-safe-area-context" safe-area-context
|
||||
"react-native-config" config
|
||||
"react-native-dark-mode" react-native-dark-mode
|
||||
"react-native-navigation-bar-color" react-native-navigation-bar-color
|
||||
"react-native-iphone-x-helper" (clj->js {:getStatusBarHeight (fn [])
|
||||
:getBottomSpace (fn [])})
|
||||
"react-native-screens" (clj->js {})
|
||||
"react-native-reanimated" react-native-reanimated
|
||||
"react-native-redash" react-native-redash
|
||||
"react-native-redash/lib/module/v1" react-native-redash
|
||||
"react-native-fetch-polyfill" fetch
|
||||
"react-native-status-keycard" status-keycard
|
||||
"react-native-keychain" keychain
|
||||
|
@ -226,7 +232,9 @@
|
|||
"react-native-device-info" react-native-device-info
|
||||
"react-native-push-notification" react-native-push-notification
|
||||
"react-native-linear-gradient" react-native-gradien
|
||||
"react-native-navigation" react-native-navigation
|
||||
"@react-native-community/push-notification-ios" push-notification-ios
|
||||
"react-native-camera-kit" react-native-camera-kit
|
||||
"./fleets.js" default-fleets
|
||||
"./chats.js" default-chats
|
||||
"../translations/ar.json" (js/JSON.parse (slurp "./translations/ar.json"))
|
||||
|
|
|
@ -4,8 +4,8 @@
|
|||
[quo.react-native :as rn]
|
||||
[quo.gesture-handler :as gh]
|
||||
[oops.core :refer [oget ocall]]
|
||||
["react-native-reanimated" :default animated :refer (clockRunning Easing)]
|
||||
["react-native-redash" :as redash]
|
||||
["react-native-reanimated" :default animated :refer (clockRunning EasingNode)]
|
||||
["react-native-redash/lib/module/v1" :as redash]
|
||||
quo.react)
|
||||
(:require-macros [quo.react :refer [maybe-js-deps]]))
|
||||
|
||||
|
@ -55,8 +55,8 @@
|
|||
(def start-clock (oget animated "startClock"))
|
||||
(def stop-clock (oget animated "stopClock"))
|
||||
(def clock-running clockRunning)
|
||||
(def bezier (.-bezier ^js Easing))
|
||||
(def linear (.-linear ^js Easing))
|
||||
(def bezier (.-bezier ^js EasingNode))
|
||||
(def linear (.-linear ^js EasingNode))
|
||||
|
||||
(def easings {:linear linear
|
||||
:ease-in (bezier 0.42 0 1 1)
|
||||
|
@ -128,7 +128,7 @@
|
|||
(.block ^js animated (to-array opts)))
|
||||
|
||||
(defn interpolate [anim-value config]
|
||||
(.interpolate ^js animated anim-value (clj->js config)))
|
||||
(.interpolateNode ^js animated anim-value (clj->js config)))
|
||||
|
||||
(defn call* [args callback]
|
||||
(.call ^js animated (to-array args) callback))
|
||||
|
|
|
@ -21,8 +21,7 @@
|
|||
:left 0
|
||||
:top 0
|
||||
:right 0
|
||||
:bottom 0
|
||||
:background-color (:backdrop @colors/theme)})
|
||||
:bottom 0})
|
||||
|
||||
(defn content-container
|
||||
[window-height]
|
||||
|
|
|
@ -7,7 +7,8 @@
|
|||
[cljs-bean.core :as bean]
|
||||
[quo.components.safe-area :as safe-area]
|
||||
[quo.components.bottom-sheet.style :as styles]
|
||||
[quo.gesture-handler :as gesture-handler]))
|
||||
[quo.gesture-handler :as gesture-handler]
|
||||
[quo.design-system.colors :as colors]))
|
||||
|
||||
(def opacity-coeff 0.8)
|
||||
(def close-duration 150)
|
||||
|
@ -183,7 +184,6 @@
|
|||
(reagent/as-element
|
||||
[modal {:visible @visible
|
||||
:transparent true
|
||||
:status-bar-translucent true
|
||||
:presentation-style :overFullScreen
|
||||
:hardware-accelerated true
|
||||
:on-request-close (fn []
|
||||
|
@ -195,7 +195,9 @@
|
|||
[gesture-handler/tap-gesture-handler (merge {:enabled backdrop-dismiss?}
|
||||
tap-gesture-handler)
|
||||
[animated/view {:style (merge (styles/backdrop)
|
||||
{:opacity opacity})}]]
|
||||
(when platform/ios?
|
||||
{:opacity opacity
|
||||
:background-color (:backdrop @colors/theme)}))}]]
|
||||
[animated/view {:style (merge (styles/content-container window-height)
|
||||
{:transform [{:translateY translate-y}
|
||||
{:translateY (* window-height 2)}]})}
|
||||
|
|
|
@ -68,7 +68,6 @@
|
|||
optional-haptic (fn []
|
||||
(when haptic-feedback
|
||||
(haptic/trigger haptic-type)))]
|
||||
|
||||
[animation/pressable (merge {:bg-color background-color
|
||||
:border-radius border-radius
|
||||
:type type
|
||||
|
|
|
@ -9,11 +9,10 @@
|
|||
[quo.previews.controls :as controls]
|
||||
[quo.react-native :as rn]
|
||||
[quo.core :as quo]
|
||||
[reagent.core :as reagent]
|
||||
[quo.design-system.colors :as colors]
|
||||
[quo.theme :as theme]
|
||||
[status-im.ui.screens.routing.core :as navigation]
|
||||
[quo.previews.icons :as icons]))
|
||||
[quo.previews.icons :as icons]
|
||||
[re-frame.core :as re-frame]))
|
||||
|
||||
(def screens [{:name :texts
|
||||
:insets {:top false}
|
||||
|
@ -75,39 +74,10 @@
|
|||
[rn/view
|
||||
(for [{:keys [name]} screens]
|
||||
^{:key name}
|
||||
[rn/touchable-opacity {:on-press #(navigation/navigate-to name nil)}
|
||||
[rn/touchable-opacity {:on-press #(re-frame/dispatch [:navigate-to name])}
|
||||
[rn/view {:style {:padding-vertical 8}}
|
||||
[quo/text (str "Preview " name)]]])]])
|
||||
|
||||
(defonce navigation-state (atom nil))
|
||||
|
||||
(defn- persist-state! [state-obj]
|
||||
(js/Promise.
|
||||
(fn [resolve _]
|
||||
(reset! navigation-state state-obj)
|
||||
(resolve true))))
|
||||
|
||||
(defn preview-stack []
|
||||
(let [stack (navigation/create-stack)]
|
||||
[stack {}
|
||||
(into [{:name :main
|
||||
:insets {:top false}
|
||||
:component main-screen}]
|
||||
screens)]))
|
||||
|
||||
(defn preview-screens []
|
||||
[navigation/navigation-container
|
||||
{:ref navigation/set-navigator-ref
|
||||
:initial-state @navigation-state
|
||||
:on-state-change persist-state!}
|
||||
[preview-stack]])
|
||||
|
||||
|
||||
|
||||
;; TODO(Ferossgp): Add separate build when shadow-cljs will be integrated
|
||||
;; NOTE(Ferossgp): Separate app can be used to preview all available
|
||||
;; and possible state for components, and for UI testing based on screenshots
|
||||
|
||||
|
||||
(defn init []
|
||||
(.registerComponent ^js rn/app-registry "StatusIm" #(reagent/reactify-component preview-screens)))
|
||||
(def main-screens [{:name :quo-preview
|
||||
:insets {:top false}
|
||||
:component main-screen}])
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
[cljs-bean.core :as bean]
|
||||
[quo.platform :as platform]
|
||||
["react-native" :as rn]
|
||||
["@react-native-community/hooks" :as hooks]))
|
||||
["@react-native-community/hooks" :as hooks]
|
||||
["react-native-navigation" :refer (Navigation)]))
|
||||
|
||||
(def app-registry (.-AppRegistry rn))
|
||||
|
||||
|
@ -28,13 +29,22 @@
|
|||
|
||||
(def keyboard-avoiding-view-class (reagent/adapt-react-class (.-KeyboardAvoidingView ^js rn)))
|
||||
|
||||
(def navigation-const (atom nil))
|
||||
|
||||
(.then (.constants Navigation)
|
||||
(fn [^js consts]
|
||||
(reset! navigation-const {:top-bar-height (.-topBarHeight consts)
|
||||
:bottom-tabs-height (.-bottomTabsHeight consts)
|
||||
:status-bar-height (.-statusBarHeight consts)})))
|
||||
|
||||
(defn keyboard-avoiding-view []
|
||||
(let [this (reagent/current-component)
|
||||
props (reagent/props this)]
|
||||
(into [keyboard-avoiding-view-class
|
||||
(merge (when platform/ios?
|
||||
{:behavior :padding})
|
||||
props)]
|
||||
props
|
||||
{:keyboardVerticalOffset (+ 44 (:status-bar-height @navigation-const))})]
|
||||
(reagent/children this))))
|
||||
|
||||
(def keyboard (.-Keyboard ^js rn))
|
||||
|
|
|
@ -33,8 +33,7 @@
|
|||
[cofx referrer chat-name]
|
||||
(fx/merge cofx
|
||||
{::persistence/chat-initalized! true}
|
||||
(navigation/navigate-to :tabs {:screen :chat-stack
|
||||
:params {:screen :referral-enclav}})))
|
||||
(navigation/navigate-to-cofx :referral-enclav nil)))
|
||||
|
||||
(fx/defn join-public-chat
|
||||
[cofx chat-name]
|
||||
|
|
|
@ -87,7 +87,7 @@
|
|||
(i18n/label :t/use-valid-contact-code)
|
||||
:yourself
|
||||
(i18n/label :t/can-not-add-yourself))
|
||||
:on-dismiss #(re-frame/dispatch [:navigate-to :home])}})))
|
||||
:on-dismiss #(re-frame/dispatch [:pop-to-root-tab :chat-stack])}})))
|
||||
|
||||
(fx/defn qr-code-scanned
|
||||
{:events [:contact/qr-code-scanned]}
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
|
||||
(fx/defn show-bottom-sheet
|
||||
[{:keys [db]} {:keys [view options]}]
|
||||
{:db (assoc db
|
||||
{:rnn-show-bottom-sheet nil
|
||||
:db (assoc db
|
||||
:bottom-sheet/show? true
|
||||
:bottom-sheet/view view
|
||||
:bottom-sheet/options options)})
|
||||
|
@ -19,4 +20,5 @@
|
|||
(fx/defn hide-bottom-sheet
|
||||
{:events [:bottom-sheet/hide]}
|
||||
[{:keys [db]}]
|
||||
{:db (assoc db :bottom-sheet/show? false)})
|
||||
{:rnn-hide-bottom-sheet nil
|
||||
:db (assoc db :bottom-sheet/show? false)})
|
||||
|
|
|
@ -321,8 +321,8 @@
|
|||
(fx/merge cofx
|
||||
{:db (assoc db :browser/options
|
||||
{:browser-id (:browser-id browser)})}
|
||||
(navigation/navigate-to-cofx :browser-stack {:screen :browser
|
||||
:initial false})
|
||||
(navigation/change-tab :browser)
|
||||
(navigation/set-stack-root :browser-stack :browser)
|
||||
(update-browser browser)
|
||||
(resolve-url nil)))))
|
||||
|
||||
|
@ -335,7 +335,7 @@
|
|||
{:db (assoc db :browser/options
|
||||
{:browser-id browser-id})}
|
||||
(update-browser browser)
|
||||
(navigation/navigate-to-cofx :browser nil)
|
||||
(navigation/set-stack-root :browser-stack :browser)
|
||||
(resolve-url nil))))
|
||||
|
||||
(fx/defn web3-error-callback
|
||||
|
@ -555,7 +555,7 @@
|
|||
{:events [:browser.ui/open-empty-tab]}
|
||||
[cofx]
|
||||
(debounce/clear :browser/navigation-state-changed)
|
||||
(navigation/navigate-to-cofx cofx :empty-tab nil))
|
||||
(navigation/set-stack-root cofx :browser-stack :empty-tab))
|
||||
|
||||
(fx/defn url-input-pressed
|
||||
{:events [:browser.ui/url-input-pressed]}
|
||||
|
|
|
@ -182,12 +182,15 @@
|
|||
|
||||
(fx/defn close-chat
|
||||
{:events [:close-chat]}
|
||||
[{:keys [db] :as cofx}]
|
||||
[{:keys [db] :as cofx} target-chat-id]
|
||||
(let [chat-id (:current-chat-id db)]
|
||||
(chat.state/reset-visible-item)
|
||||
(fx/merge cofx
|
||||
{:db (dissoc db :current-chat-id)}
|
||||
(offload-messages chat-id))))
|
||||
(if (:ignore-close-chat db)
|
||||
{:db (dissoc db :ignore-close-chat)}
|
||||
(when (= target-chat-id chat-id)
|
||||
(chat.state/reset-visible-item)
|
||||
(fx/merge cofx
|
||||
{:db (dissoc db :current-chat-id)}
|
||||
(offload-messages chat-id))))))
|
||||
|
||||
(fx/defn remove-chat
|
||||
"Removes chat completely from app, producing all necessary effects for that"
|
||||
|
@ -197,7 +200,7 @@
|
|||
(deactivate-chat chat-id)
|
||||
(offload-messages chat-id)
|
||||
(when (not (= (:view-id db) :home))
|
||||
(navigation/navigate-to-cofx :home {}))))
|
||||
(navigation/pop-to-root-tab :chat-stack))))
|
||||
|
||||
(fx/defn preload-chat-data
|
||||
"Takes chat-id and coeffects map, returns effects necessary when navigating to chat"
|
||||
|
@ -210,11 +213,11 @@
|
|||
{:events [:chat.ui/navigate-to-chat]}
|
||||
[{db :db :as cofx} chat-id]
|
||||
(fx/merge cofx
|
||||
(close-chat)
|
||||
(close-chat (:current-chat-id db))
|
||||
(fn [{:keys [db]}]
|
||||
{:db (assoc db :current-chat-id chat-id)})
|
||||
{:db (assoc db :current-chat-id chat-id :ignore-close-chat true)})
|
||||
(preload-chat-data chat-id)
|
||||
(navigation/navigate-to-cofx :chat-stack {:screen :chat})))
|
||||
(navigation/navigate-to-cofx :chat nil)))
|
||||
|
||||
(fx/defn handle-clear-history-response
|
||||
{:events [::history-cleared]}
|
||||
|
@ -287,7 +290,7 @@
|
|||
{:db (assoc-in db [:chats chat-id] chat)}))
|
||||
#(when navigate-to?
|
||||
{:dispatch-n [[:chat.ui/preload-chat-data chat-id]
|
||||
[:navigate-to :profile nil]]})))
|
||||
[:open-modal :profile]]})))
|
||||
|
||||
(fx/defn start-profile-chat
|
||||
"Starts a new profile chat"
|
||||
|
@ -335,8 +338,7 @@
|
|||
{:events [:chat.ui/show-profile]}
|
||||
[{:keys [db] :as cofx} identity]
|
||||
(let [my-public-key (get-in db [:multiaccount :public-key])]
|
||||
(if (= my-public-key identity)
|
||||
(navigation/navigate-to-cofx cofx :profile-stack {:screen :my-profile})
|
||||
(when (not= my-public-key identity)
|
||||
(fx/merge
|
||||
cofx
|
||||
{:db (assoc db :contacts/identity identity)}
|
||||
|
|
|
@ -10,7 +10,8 @@
|
|||
{:db (assoc db
|
||||
:commands/select-account
|
||||
{:message message
|
||||
:from (ethereum/get-default-account (:multiaccount/accounts db))})})
|
||||
:from (ethereum/get-default-account (:multiaccount/accounts db))})
|
||||
:rnn-show-select-acc-sheet nil})
|
||||
|
||||
(fx/defn set-selected-account
|
||||
{:events [::set-selected-account]}
|
||||
|
@ -20,7 +21,7 @@
|
|||
|
||||
(fx/defn handle-accept-request-address-for-transaction
|
||||
{:events [::accept-request-address-for-transaction]}
|
||||
[{:keys [db] :as cofx} message-id address]
|
||||
[{:keys [db]} message-id address]
|
||||
{:db (dissoc db :commands/select-account)
|
||||
::json-rpc/call [{:method (json-rpc/call-ext-method "acceptRequestAddressForTransaction")
|
||||
:params [message-id address]
|
||||
|
@ -29,7 +30,7 @@
|
|||
|
||||
(fx/defn handle-decline-request-address-for-transaction
|
||||
{:events [::decline-request-address-for-transaction]}
|
||||
[cofx message-id]
|
||||
[_ message-id]
|
||||
{::json-rpc/call [{:method (json-rpc/call-ext-method "declineRequestAddressForTransaction")
|
||||
:params [message-id]
|
||||
:js-response true
|
||||
|
|
|
@ -86,7 +86,7 @@
|
|||
[cofx response-js]
|
||||
(fx/merge cofx
|
||||
(handle-response cofx response-js)
|
||||
(navigation/navigate-to-cofx :home {})))
|
||||
(navigation/pop-to-root-tab :chat-stack)))
|
||||
|
||||
(fx/defn joined
|
||||
{:events [::joined ::requested-to-join]}
|
||||
|
@ -305,7 +305,7 @@
|
|||
(fx/merge cofx
|
||||
(reset-community-id-input id)
|
||||
(bottom-sheet/hide-bottom-sheet)
|
||||
(navigation/navigate-to :invite-people-community {:invite? true})))
|
||||
(navigation/open-modal :invite-people-community {:invite? true})))
|
||||
|
||||
(fx/defn share-community-pressed
|
||||
{:events [::share-community-pressed]}
|
||||
|
@ -313,7 +313,7 @@
|
|||
(fx/merge cofx
|
||||
(reset-community-id-input id)
|
||||
(bottom-sheet/hide-bottom-sheet)
|
||||
(navigation/navigate-to :invite-people-community {})))
|
||||
(navigation/open-modal :invite-people-community {})))
|
||||
|
||||
(fx/defn create-channel-pressed
|
||||
{:events [::create-channel-pressed]}
|
||||
|
@ -367,7 +367,7 @@
|
|||
:membership access
|
||||
:color color
|
||||
:editing? true})}
|
||||
(navigation/navigate-to :communities {:screen :community-edit}))))
|
||||
(navigation/navigate-to :community-edit :nil))))
|
||||
|
||||
(fx/defn community-imported
|
||||
{:events [::community-imported]}
|
||||
|
|
|
@ -58,7 +58,7 @@
|
|||
(re-frame/dispatch [:hide-popover])))
|
||||
;; reset navigation to avoid going back to non existing one to one chat
|
||||
(if from-one-to-one-chat?
|
||||
(navigation/navigate-to-cofx :home {})
|
||||
(navigation/pop-to-root-tab :chat-stack)
|
||||
(navigation/navigate-back)))))
|
||||
|
||||
(fx/defn unblock-contact
|
||||
|
|
|
@ -9,7 +9,9 @@
|
|||
{:events [:contact.ui/send-message-pressed]
|
||||
:interceptors [(re-frame/inject-cofx :random-id-generator)]}
|
||||
[cofx {:keys [public-key]}]
|
||||
(chat/start-chat cofx public-key))
|
||||
(fx/merge cofx
|
||||
(navigation/pop-to-root-tab :chat-stack)
|
||||
(chat/start-chat public-key)))
|
||||
|
||||
(fx/defn contact-code-submitted
|
||||
{:events [:contact.ui/contact-code-submitted]
|
||||
|
|
|
@ -122,7 +122,7 @@
|
|||
{:db (assoc db
|
||||
:group/selected-contacts #{}
|
||||
:new-chat-name "")}
|
||||
(navigation/navigate-to-cofx :create-group-chat nil)))
|
||||
(navigation/navigate-to-cofx :contact-toggle-list nil)))
|
||||
|
||||
(fx/defn name-verified
|
||||
{:events [:contacts/ens-name-verified]}
|
||||
|
|
|
@ -2,10 +2,9 @@
|
|||
(:require status-im.utils.db
|
||||
status-im.events
|
||||
status-im.subs
|
||||
[status-im.ui.screens.views :as views]
|
||||
status-im.navigation.core
|
||||
[re-frame.core :as re-frame]
|
||||
[re-frame.interop :as interop]
|
||||
[reagent.core :as reagent]
|
||||
[reagent.impl.batching :as batching]
|
||||
[status-im.notifications.local :as notifications]
|
||||
[status-im.native-module.core :as status]
|
||||
|
@ -14,8 +13,12 @@
|
|||
[status-im.utils.platform :as platform]
|
||||
[status-im.utils.snoopy :as snoopy]
|
||||
[status-im.utils.config :as config]
|
||||
["react-native-screens" :refer (enableScreens)]
|
||||
["react-native" :as rn :refer (DevSettings LogBox)]))
|
||||
[status-im.utils.universal-links.core :as utils.universal-links]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ui.components.react :as react]
|
||||
["react-native" :refer (DevSettings LogBox)]
|
||||
["react-native-languages" :default react-native-languages]
|
||||
["react-native-shake" :as react-native-shake]))
|
||||
|
||||
(set! interop/next-tick js/setTimeout)
|
||||
(set! batching/fake-raf #(js/setTimeout % 0))
|
||||
|
@ -24,12 +27,19 @@
|
|||
(defn init []
|
||||
(utils.logs/init-logs config/log-level)
|
||||
(error-handler/register-exception-handler!)
|
||||
(enableScreens)
|
||||
(re-frame/dispatch-sync [:init/app-started])
|
||||
(when platform/android?
|
||||
(status/set-soft-input-mode status/adjust-resize))
|
||||
(.registerComponent ^js (.-AppRegistry rn) "StatusIm" #(reagent/reactify-component views/root))
|
||||
(notifications/listen-notifications)
|
||||
(.addEventListener ^js react/app-state "change" #(re-frame/dispatch [:app-state-change %]))
|
||||
(.addEventListener react-native-languages "change" (fn [^js event]
|
||||
(i18n/set-language (.-language event))))
|
||||
(.addEventListener react-native-shake "ShakeEvent" #(re-frame/dispatch [:shake-event]))
|
||||
|
||||
(re-frame/dispatch-sync [:init/app-started])
|
||||
|
||||
(utils.universal-links/initialize)
|
||||
|
||||
;;DEV
|
||||
(snoopy/subscribe!)
|
||||
(when (and js/goog.DEBUG platform/ios? DevSettings)
|
||||
;;on Android this method doesn't work
|
||||
|
|
|
@ -34,11 +34,10 @@
|
|||
[cofx]
|
||||
;; we reset navigation so that navigate back doesn't return
|
||||
;; into the registration flow
|
||||
(navigation/navigate-reset cofx
|
||||
{:index 1
|
||||
:key :profile-stack
|
||||
:routes [{:name :my-profile}
|
||||
{:name :ens-confirmation}]}))
|
||||
(navigation/set-stack-root cofx
|
||||
:profile-stack
|
||||
[:my-profile
|
||||
:ens-confirmation]))
|
||||
|
||||
(fx/defn update-ens-tx-state-and-redirect
|
||||
{:events [:update-ens-tx-state-and-redirect]}
|
||||
|
@ -237,9 +236,8 @@
|
|||
{:db (dissoc db :ens/registration)}
|
||||
;; we reset navigation so that navigate back doesn't return
|
||||
;; into the registration flow
|
||||
(navigation/navigate-reset {:index 1
|
||||
:routes [{:name :my-profile}
|
||||
{:name :ens-main}]})))
|
||||
(navigation/set-stack-root :profile-stack [:my-profile
|
||||
:ens-main])))
|
||||
|
||||
(fx/defn switch-domain-type
|
||||
{:events [::switch-domain-type]}
|
||||
|
|
|
@ -244,5 +244,5 @@
|
|||
[cofx]
|
||||
(fx/merge
|
||||
cofx
|
||||
(navigation/navigate-to :buy-crypto nil)
|
||||
(navigation/open-modal :buy-crypto nil)
|
||||
(wallet/keep-watching-history)))
|
||||
|
|
|
@ -13,14 +13,16 @@
|
|||
(fx/defn navigate-chat-updated
|
||||
{:events [:navigate-chat-updated]}
|
||||
[cofx chat-id]
|
||||
(if (get-in cofx [:db :chats chat-id :is-active])
|
||||
(models.chat/navigate-to-chat cofx chat-id)))
|
||||
(when (get-in cofx [:db :chats chat-id :is-active])
|
||||
(fx/merge cofx
|
||||
(navigation/pop-to-root-tab :chat-stack)
|
||||
(models.chat/navigate-to-chat chat-id))))
|
||||
|
||||
(fx/defn handle-chat-removed
|
||||
{:events [:chat-removed]}
|
||||
[_ response]
|
||||
{:dispatch-n [[:sanitize-messages-and-process-response response]
|
||||
[:navigate-to :home]]})
|
||||
[:pop-to-root-tab :chat-stack]]})
|
||||
|
||||
(fx/defn handle-chat-update
|
||||
{:events [:chat-updated]}
|
||||
|
@ -106,7 +108,7 @@
|
|||
[cofx chat-id]
|
||||
(fx/merge cofx
|
||||
(models.chat/deactivate-chat chat-id)
|
||||
(navigation/navigate-to-cofx :home {})))
|
||||
(navigation/pop-to-root-tab :chat-stack)))
|
||||
|
||||
(def not-blank?
|
||||
(complement string/blank?))
|
||||
|
|
|
@ -8,7 +8,9 @@
|
|||
[status-im.db :refer [app-db]]
|
||||
[status-im.utils.fx :as fx]
|
||||
[status-im.theme.core :as theme]
|
||||
[status-im.utils.theme :as utils.theme]))
|
||||
[status-im.utils.theme :as utils.theme]
|
||||
[status-im.utils.keychain.core :as keychain]
|
||||
[status-im.navigation :as navigation]))
|
||||
|
||||
(fx/defn initialize-app-db
|
||||
"Initialize db to initial state"
|
||||
|
@ -25,16 +27,18 @@
|
|||
|
||||
(fx/defn initialize-views
|
||||
{:events [::initialize-view]}
|
||||
[cofx {:keys [logout?]}]
|
||||
[cofx]
|
||||
(let [{{:multiaccounts/keys [multiaccounts]} :db} cofx]
|
||||
(when (and (seq multiaccounts) (not logout?))
|
||||
(if (and (seq multiaccounts))
|
||||
;; We specifically pass a bunch of fields instead of the whole multiaccount
|
||||
;; as we want store some fields in multiaccount that are not here
|
||||
(let [multiaccount (first (sort-by :timestamp > (vals multiaccounts)))]
|
||||
(multiaccounts.login/open-login cofx
|
||||
(select-keys
|
||||
multiaccount
|
||||
[:key-uid :name :public-key :identicon :images]))))))
|
||||
(fx/merge cofx
|
||||
(multiaccounts.login/open-login (select-keys
|
||||
multiaccount
|
||||
[:key-uid :name :public-key :identicon :images]))
|
||||
(keychain/get-auth-method (:key-uid multiaccount))))
|
||||
(navigation/init-root cofx :intro))))
|
||||
|
||||
(fx/defn initialize-multiaccounts
|
||||
{:events [::initialize-multiaccounts]}
|
||||
|
@ -48,14 +52,12 @@
|
|||
{}
|
||||
all-multiaccounts)]
|
||||
(fx/merge cofx
|
||||
{:db (-> db
|
||||
(assoc :multiaccounts/multiaccounts multiaccounts)
|
||||
(assoc :multiaccounts/logout? logout?)
|
||||
(assoc :multiaccounts/loading false))
|
||||
;; NOTE: Try to dispatch later navigation because of that https://github.com/react-navigation/react-navigation/issues/6879
|
||||
:dispatch-later [{:dispatch [::initialize-view {:logout? logout?}]
|
||||
:ms 100}]
|
||||
:dispatch [::anon-metrics/fetch-opt-in-screen-displayed?]})))
|
||||
{:db (-> db
|
||||
(assoc :multiaccounts/multiaccounts multiaccounts)
|
||||
(assoc :multiaccounts/logout? logout?)
|
||||
(assoc :multiaccounts/loading false))
|
||||
:dispatch-n [[::initialize-view]
|
||||
[::anon-metrics/fetch-opt-in-screen-displayed?]]})))
|
||||
|
||||
(fx/defn start-app
|
||||
{:events [:init/app-started]}
|
||||
|
|
|
@ -4,7 +4,6 @@
|
|||
[status-im.utils.utils :as utils]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ethereum.mnemonic :as mnemonic]
|
||||
[status-im.multiaccounts.model :as multiaccounts.model]
|
||||
[status-im.multiaccounts.recover.core :as multiaccounts.recover]
|
||||
[status-im.navigation :as navigation]
|
||||
[status-im.signing.core :as signing.core]
|
||||
|
@ -17,9 +16,7 @@
|
|||
(fx/merge cofx
|
||||
{:db (-> db
|
||||
(assoc-in [:keycard :creating-backup?] backup-type))}
|
||||
(if (multiaccounts.model/logged-in? cofx)
|
||||
(navigation/navigate-to-cofx :seed-phrase nil)
|
||||
(navigation/navigate-to-cofx :key-storage-stack {:screen :seed-phrase}))))
|
||||
(navigation/navigate-to-cofx :seed-phrase nil)))
|
||||
|
||||
(fx/defn recovery-card-pressed
|
||||
{:events [:keycard-settings.ui/recovery-card-pressed]}
|
||||
|
@ -49,6 +46,7 @@
|
|||
mnemonic/sanitize-passphrase)
|
||||
:password nil
|
||||
:success-event ::create-backup-card}})
|
||||
|
||||
(fx/defn create-backup-card
|
||||
{:events [::create-backup-card]}
|
||||
[{:keys [db] :as cofx} root-data derived-data]
|
||||
|
@ -63,6 +61,4 @@
|
|||
(assoc-in [:keycard :flow] :recovery)
|
||||
(update :multiaccounts/key-storage dissoc :seed-phrase))
|
||||
:dismiss-keyboard nil}
|
||||
(if (multiaccounts.model/logged-in? cofx)
|
||||
(navigation/navigate-to-cofx :keycard-onboarding-intro nil)
|
||||
(navigation/navigate-to-cofx :intro-stack {:screen :keycard-onboarding-intro}))))
|
||||
(navigation/navigate-to-cofx :keycard-onboarding-intro nil)))
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
[status-im.utils.types :as types]
|
||||
[taoensso.timbre :as log]
|
||||
[status-im.bottom-sheet.core :as bottom-sheet]
|
||||
[status-im.utils.platform :as platform]))
|
||||
[status-im.utils.platform :as platform]
|
||||
[status-im.popover.core :as popover]))
|
||||
|
||||
(def default-pin "000000")
|
||||
|
||||
|
@ -168,12 +169,12 @@
|
|||
|
||||
(defn keycard-sheet-content [on-cancel connected? params]
|
||||
(fn []
|
||||
(keycard-sheet/connect-keycard
|
||||
[keycard-sheet/connect-keycard
|
||||
{:on-cancel #(re-frame/dispatch on-cancel)
|
||||
:connected? connected?
|
||||
:params params
|
||||
:on-connect ::on-card-connected
|
||||
:on-disconnect ::on-card-disconnected})))
|
||||
:on-disconnect ::on-card-disconnected}]))
|
||||
|
||||
(fx/defn show-connection-sheet-component
|
||||
[{:keys [db] :as cofx} {:keys [on-card-connected on-card-read handler]
|
||||
|
@ -376,7 +377,7 @@
|
|||
cofx
|
||||
{:db (assoc-in db [:keycard :pin :status] :frozen-card)}
|
||||
hide-connection-sheet)
|
||||
{:db (assoc db :popover/popover {:view :frozen-card})}))
|
||||
(popover/show-popover cofx {:view :frozen-card})))
|
||||
|
||||
(fx/defn on-get-keys-error
|
||||
{:events [:keycard.callback/on-get-keys-error]}
|
||||
|
@ -541,8 +542,4 @@
|
|||
(fx/defn navigete-to-keycard-settings
|
||||
{:events [::navigate-to-keycard-settings]}
|
||||
[cofx]
|
||||
(navigation/navigate-reset
|
||||
cofx
|
||||
{:index 1
|
||||
:routes [{:name :my-profile}
|
||||
{:name :keycard-settings}]}))
|
||||
(navigation/set-stack-root :profile-stack [:my-profile :keycard-settings]))
|
||||
|
|
|
@ -17,7 +17,7 @@
|
|||
[{:keys [db] :as cofx}]
|
||||
(fx/merge cofx
|
||||
{:db db}
|
||||
(navigation/navigate-to-cofx :multiaccounts nil)))
|
||||
(navigation/pop-to-root-tab :multiaccounts-stack)))
|
||||
|
||||
(fx/defn login-pin-more-icon-pressed
|
||||
{:events [:keycard.login.pin.ui/more-icon-pressed]}
|
||||
|
@ -50,10 +50,6 @@
|
|||
{:db (assoc-in db [:keycard :flow] :login)}
|
||||
(navigation/navigate-to-cofx :keycard-recovery-pair nil)))
|
||||
|
||||
(fx/defn frozen-keycard-popup
|
||||
[{:keys [db]}]
|
||||
{:db (assoc db :popover/popover {:view :frozen-card})})
|
||||
|
||||
(fx/defn reset-pin
|
||||
{:events [::reset-pin]}
|
||||
[{:keys [db] :as cofx}]
|
||||
|
@ -71,9 +67,7 @@
|
|||
:error nil
|
||||
:status nil))})
|
||||
(when-not (:multiaccounts/login db)
|
||||
(navigation/navigate-to-cofx
|
||||
:profile-stack
|
||||
{:screen :keycard-pin}))))
|
||||
(navigation/navigate-to-cofx :keycard-pin nil))))
|
||||
|
||||
(fx/defn dismiss-frozen-keycard-popover
|
||||
{:events [::frozen-keycard-popover-dismissed]}
|
||||
|
@ -124,7 +118,7 @@
|
|||
(and (zero? pin-retry-counter)
|
||||
(or (nil? puk-retry-counter)
|
||||
(pos? puk-retry-counter)))
|
||||
nil #_(frozen-keycard-popup cofx)
|
||||
nil
|
||||
|
||||
:else
|
||||
(common/get-keys-from-keycard cofx))))
|
||||
|
|
|
@ -128,13 +128,23 @@
|
|||
(navigation/navigate-to-cofx (if platform/android?
|
||||
:notifications-settings :welcome) nil)))
|
||||
|
||||
(fx/defn intro-wizard
|
||||
{:events [:multiaccounts.create.ui/intro-wizard]}
|
||||
[{:keys [db] :as cofx}]
|
||||
(fx/merge cofx
|
||||
{:db (-> db
|
||||
(update :keycard dissoc :flow)
|
||||
(dissoc :restored-account?))}
|
||||
(multiaccounts.create/prepare-intro-wizard)
|
||||
(navigation/navigate-to-cofx :get-your-keys nil)))
|
||||
|
||||
(fx/defn recovery-no-key
|
||||
{:events [:keycard.recovery.no-key.ui/generate-key-pressed]}
|
||||
[{:keys [db] :as cofx}]
|
||||
(fx/merge cofx
|
||||
{:db (assoc-in db [:keycard :flow] :create)
|
||||
:keycard/check-nfc-enabled nil}
|
||||
(multiaccounts.create/intro-wizard)))
|
||||
(intro-wizard)))
|
||||
|
||||
(fx/defn create-keycard-multiaccount
|
||||
[{:keys [db] :as cofx}]
|
||||
|
@ -170,7 +180,8 @@
|
|||
(fx/merge cofx
|
||||
{:db (-> db
|
||||
(assoc-in [:keycard :setup-step] nil)
|
||||
(dissoc :intro-wizard))}
|
||||
(dissoc :intro-wizard))
|
||||
:init-root-fx :onboarding-notification}
|
||||
(multiaccounts.create/on-multiaccount-created
|
||||
{:recovered (or recovered (get-in db [:intro-wizard :recovering?]))
|
||||
:derived {constants/path-wallet-root-keyword
|
||||
|
@ -192,8 +203,7 @@
|
|||
:keycard-paired-on paired-on
|
||||
:chat-key whisper-private-key}
|
||||
encryption-public-key
|
||||
{})
|
||||
(navigation/navigate-to-cofx :notifications-onboarding nil)))))
|
||||
{})))))
|
||||
|
||||
(fx/defn return-to-keycard-login
|
||||
[{:keys [db] :as cofx}]
|
||||
|
@ -203,10 +213,8 @@
|
|||
:status nil
|
||||
:login [])
|
||||
(update :keycard dissoc :application-info))}
|
||||
(navigation/navigate-reset {:index 0
|
||||
:routes [{:name :intro-stack
|
||||
:state {:routes [{:name :multiaccounts},
|
||||
{:name :keycard-login-pin}]}}]})))
|
||||
(navigation/set-stack-root :multiaccounts-stack [:multiaccounts
|
||||
:keycard-login-pin])))
|
||||
|
||||
(fx/defn on-backup-success
|
||||
[{:keys [db] :as cofx} backup-type]
|
||||
|
@ -216,7 +224,7 @@
|
|||
:content (i18n/label (if (= backup-type :recovery-card)
|
||||
:t/keycard-can-use-with-new-passcode :t/keycard-backup-success-body))}}
|
||||
(if (multiaccounts.model/logged-in? cofx)
|
||||
(navigation/navigate-to-cofx :profile-stack {:screen :keycard-settings})
|
||||
(navigation/navigate-to-cofx :keycard-settings nil)
|
||||
(return-to-keycard-login))))
|
||||
|
||||
(fx/defn on-generate-and-load-key-success
|
||||
|
|
|
@ -1,6 +1,10 @@
|
|||
(ns status-im.keycard.test-menu
|
||||
(:require [status-im.ui.components.react :as react]
|
||||
[status-im.keycard.simulated-keycard :as simulated-keycard]))
|
||||
[status-im.keycard.simulated-keycard :as simulated-keycard]
|
||||
[reagent.core :as reagent]
|
||||
[status-im.utils.random :as random]))
|
||||
|
||||
(def ids (reagent/atom []))
|
||||
|
||||
(defn button [label accessibility-label handler]
|
||||
[react/view
|
||||
|
@ -14,17 +18,26 @@
|
|||
:accessibility-label accessibility-label}
|
||||
label]])
|
||||
|
||||
(defn test-menu []
|
||||
[react/view
|
||||
{:style {:position :absolute
|
||||
:top 70
|
||||
:right 0
|
||||
:width 50
|
||||
:justify-content :center
|
||||
:align-items :center}}
|
||||
[button "conn" :connect-card simulated-keycard/connect-card]
|
||||
[button "conn sell" :connect-selected-card simulated-keycard/connect-selected-card]
|
||||
[button "pair" :connect-pairing-card simulated-keycard/connect-pairing-card]
|
||||
[button "disc" :disconnect-card simulated-keycard/disconnect-card]
|
||||
[button "res" :keycard-reset-state simulated-keycard/reset-state]])
|
||||
(defn test-menu-view [id]
|
||||
(fn []
|
||||
(println id @ids)
|
||||
(when (= id (last @ids))
|
||||
[react/view
|
||||
{:style {:position :absolute
|
||||
:top 70
|
||||
:right 0
|
||||
:width 50
|
||||
:justify-content :center
|
||||
:align-items :center}}
|
||||
[button "conn" :connect-card simulated-keycard/connect-card]
|
||||
[button "conn sell" :connect-selected-card simulated-keycard/connect-selected-card]
|
||||
[button "pair" :connect-pairing-card simulated-keycard/connect-pairing-card]
|
||||
[button "disc" :disconnect-card simulated-keycard/disconnect-card]
|
||||
[button "res" :keycard-reset-state simulated-keycard/reset-state]])))
|
||||
|
||||
(defn test-menu []
|
||||
(let [id (random/id)]
|
||||
(reagent/create-class
|
||||
{:component-did-mount (fn [] (swap! ids conj id))
|
||||
:component-will-unmount (fn [] (reset! ids (vec (remove #(= % id) @ids))))
|
||||
:reagent-render (test-menu-view id)})))
|
||||
|
|
|
@ -315,7 +315,7 @@
|
|||
:on-accept #(do
|
||||
(reset! showing-connection-error-popup? false)
|
||||
(re-frame/dispatch [:mailserver.ui/dismiss-connection-error true])
|
||||
(re-frame/dispatch [:navigate-to :profile-stack {:screen :offline-messaging-settings}]))
|
||||
(re-frame/dispatch [:navigate-to :offline-messaging-settings]))
|
||||
:extra-options [{:text (i18n/label :t/mailserver-retry)
|
||||
:onPress #(do
|
||||
(reset! showing-connection-error-popup? false)
|
||||
|
|
|
@ -109,8 +109,7 @@
|
|||
(fx/merge
|
||||
cofx
|
||||
(bottom-sheet/hide-bottom-sheet)
|
||||
(navigation/navigate-to-cofx :profile-stack {:screen :mobile-network-settings
|
||||
:initial false})))
|
||||
(navigation/navigate-to-cofx :mobile-network-settings nil)))
|
||||
|
||||
(fx/defn mobile-network-show-offline-sheet
|
||||
{:events [:mobile-network/show-offline-sheet]}
|
||||
|
|
|
@ -1,49 +1,18 @@
|
|||
(ns status-im.multiaccounts.create.core
|
||||
(:require [clojure.set :refer [map-invert]]
|
||||
[re-frame.core :as re-frame]
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[status-im.constants :as constants]
|
||||
[status-im.data-store.settings :as data-store.settings]
|
||||
[status-im.ethereum.core :as ethereum]
|
||||
[status-im.ethereum.eip55 :as eip55]
|
||||
[status-im.keycard.nfc :as nfc]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.native-module.core :as status]
|
||||
[status-im.node.core :as node]
|
||||
[status-im.bottom-sheet.core :as bottom-sheet]
|
||||
[status-im.ui.components.colors :as colors]
|
||||
[status-im.navigation :as navigation]
|
||||
[status-im.utils.config :as config]
|
||||
[status-im.utils.fx :as fx]
|
||||
[status-im.utils.security :as security]
|
||||
[status-im.utils.signing-phrase.core :as signing-phrase]
|
||||
[status-im.utils.types :as types]
|
||||
[status-im.utils.utils :as utils]
|
||||
[taoensso.timbre :as log]))
|
||||
|
||||
(def step-kw-to-num
|
||||
{:generate-key 1
|
||||
:choose-key 2
|
||||
:select-key-storage 3
|
||||
:create-code 4})
|
||||
|
||||
(defn decrement-step [step]
|
||||
(let [inverted (map-invert step-kw-to-num)]
|
||||
(if (and (= step :create-code)
|
||||
(not (nfc/nfc-supported?)))
|
||||
:choose-key
|
||||
(inverted (dec (step-kw-to-num step))))))
|
||||
|
||||
(defn inc-step [step]
|
||||
(let [inverted (map-invert step-kw-to-num)]
|
||||
(if (and (= step :choose-key)
|
||||
(not (nfc/nfc-supported?)))
|
||||
:create-code
|
||||
(inverted (inc (step-kw-to-num step))))))
|
||||
|
||||
;; multiaccounts create module
|
||||
(defn get-selected-multiaccount [{:keys [db]}]
|
||||
(let [{:keys [selected-id multiaccounts]} (:intro-wizard db)]
|
||||
(some #(when (= selected-id (:id %)) %) multiaccounts)))
|
||||
[status-im.utils.types :as types]))
|
||||
|
||||
(defn normalize-derived-data-keys [derived-data]
|
||||
(->> derived-data
|
||||
|
@ -62,131 +31,107 @@
|
|||
derived
|
||||
(update :derived normalize-derived-data-keys)))
|
||||
|
||||
(re-frame/reg-cofx
|
||||
::get-signing-phrase
|
||||
(fn [cofx _]
|
||||
(assoc cofx :signing-phrase (signing-phrase/generate))))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::store-multiaccount
|
||||
(fn [[id key-uid hashed-password callback]]
|
||||
(status/multiaccount-store-derived
|
||||
id
|
||||
key-uid
|
||||
[constants/path-wallet-root
|
||||
constants/path-eip1581
|
||||
constants/path-whisper
|
||||
constants/path-default-wallet]
|
||||
hashed-password
|
||||
callback)))
|
||||
|
||||
(fx/defn create-multiaccount
|
||||
{:events [:create-multiaccount]}
|
||||
[{:keys [db]} key-code]
|
||||
(let [{:keys [selected-id]} (:intro-wizard db)
|
||||
key-uid (some
|
||||
(fn [{:keys [id key-uid]}]
|
||||
(when (= id selected-id)
|
||||
key-uid))
|
||||
(get-in db [:intro-wizard :multiaccounts]))
|
||||
hashed-password (ethereum/sha3 (security/safe-unmask-data key-code))
|
||||
callback (fn [result]
|
||||
(let [derived-data (normalize-derived-data-keys (types/json->clj result))
|
||||
public-key (get-in derived-data [constants/path-whisper-keyword :public-key])]
|
||||
(status/gfycat-identicon-async
|
||||
public-key
|
||||
(fn [name identicon]
|
||||
(let [derived-whisper (derived-data constants/path-whisper-keyword)
|
||||
derived-data-extended (assoc-in derived-data
|
||||
[constants/path-whisper-keyword]
|
||||
(merge derived-whisper {:name name :identicon identicon}))]
|
||||
(re-frame/dispatch [::store-multiaccount-success
|
||||
key-code derived-data-extended]))))))]
|
||||
{::store-multiaccount [selected-id key-uid hashed-password callback]}))
|
||||
(let [{:keys [selected-id]} (:intro-wizard db)]
|
||||
{::store-multiaccount
|
||||
[selected-id
|
||||
(some
|
||||
(fn [{:keys [id key-uid]}]
|
||||
(when (= id selected-id)
|
||||
key-uid))
|
||||
(get-in db [:intro-wizard :multiaccounts]))
|
||||
(ethereum/sha3 (security/safe-unmask-data key-code))
|
||||
(fn [result]
|
||||
(let [derived-data (normalize-derived-data-keys (types/json->clj result))
|
||||
public-key (get-in derived-data [constants/path-whisper-keyword :public-key])]
|
||||
(status/gfycat-identicon-async
|
||||
public-key
|
||||
(fn [name identicon]
|
||||
(let [derived-whisper (derived-data constants/path-whisper-keyword)
|
||||
derived-data-extended (assoc-in derived-data
|
||||
[constants/path-whisper-keyword]
|
||||
(merge derived-whisper {:name name :identicon identicon}))]
|
||||
(re-frame/dispatch [::store-multiaccount-success key-code derived-data-extended]))))))]}))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:multiaccount-generate-and-derive-addresses
|
||||
(fn []
|
||||
(status/multiaccount-generate-and-derive-addresses
|
||||
5
|
||||
12
|
||||
[constants/path-whisper
|
||||
constants/path-wallet-root
|
||||
constants/path-default-wallet]
|
||||
#(re-frame/dispatch [:multiaccount-generate-and-derive-addresses-success
|
||||
(mapv normalize-multiaccount-data-keys
|
||||
(types/json->clj %))]))))
|
||||
|
||||
(fx/defn multiaccount-generate-and-derive-addresses-success
|
||||
{:events [:multiaccount-generate-and-derive-addresses-success]}
|
||||
[{:keys [db]} result]
|
||||
{:db (update db :intro-wizard
|
||||
(fn [data]
|
||||
(-> data
|
||||
(dissoc :processing?)
|
||||
(assoc :multiaccounts result
|
||||
:selected-storage-type :default
|
||||
:selected-id (-> result first :id)
|
||||
:step :choose-key))))
|
||||
:rnn-navigate-to-fx :choose-name})
|
||||
|
||||
(fx/defn generate-and-derive-addresses
|
||||
{:events [:generate-and-derive-addresses]}
|
||||
[{:keys [db]}]
|
||||
{:db (assoc-in db [:intro-wizard :processing?] true)
|
||||
:multiaccount-generate-and-derive-addresses nil})
|
||||
|
||||
(fx/defn prepare-intro-wizard
|
||||
[{:keys [db] :as cofx}]
|
||||
{:db (assoc db :intro-wizard {:step :generate-key
|
||||
:back-action :intro-wizard/navigate-back
|
||||
:forward-action :intro-wizard/step-forward-pressed})})
|
||||
[{:keys [db]}]
|
||||
{:db (assoc db :intro-wizard {})})
|
||||
|
||||
(fx/defn intro-wizard
|
||||
{:events [:multiaccounts.create.ui/intro-wizard]}
|
||||
[{:keys [db] :as cofx}]
|
||||
(fx/merge cofx
|
||||
{:db (-> db
|
||||
(update :keycard dissoc :flow)
|
||||
(dissoc :restored-account?))}
|
||||
(prepare-intro-wizard)
|
||||
(navigation/navigate-to-cofx :create-multiaccount-generate-key nil)))
|
||||
(fx/defn save-multiaccount-and-login-with-keycard
|
||||
[_ args]
|
||||
{:keycard/save-multiaccount-and-login args})
|
||||
|
||||
(fx/defn get-new-key
|
||||
{:events [:multiaccounts.create.ui/get-new-key]}
|
||||
[{:keys [db] :as cofx}]
|
||||
(fx/merge cofx
|
||||
(prepare-intro-wizard)
|
||||
(bottom-sheet/hide-bottom-sheet)
|
||||
(navigation/navigate-to-cofx :create-multiaccount-generate-key nil)))
|
||||
(re-frame/reg-fx
|
||||
::save-account-and-login
|
||||
(fn [[key-uid multiaccount-data hashed-password settings config accounts-data]]
|
||||
(status/save-account-and-login
|
||||
key-uid
|
||||
multiaccount-data
|
||||
hashed-password
|
||||
settings
|
||||
config
|
||||
accounts-data)))
|
||||
|
||||
(fx/defn remove-recovery-flag [{:keys [db]}]
|
||||
{:db (dissoc db :recovered-account?)})
|
||||
|
||||
(fx/defn dec-step
|
||||
{:events [:intro-wizard/dec-step]}
|
||||
[{:keys [db] :as cofx}]
|
||||
(let [step (get-in db [:intro-wizard :step])]
|
||||
(fx/merge cofx
|
||||
(when (= step :enter-phrase)
|
||||
remove-recovery-flag)
|
||||
(if (or (= step :enter-phrase)
|
||||
(= :generate-key step))
|
||||
prepare-intro-wizard
|
||||
(fn [_]
|
||||
{:db (assoc-in db [:intro-wizard :step] (decrement-step step))})))))
|
||||
|
||||
(fx/defn intro-step-back
|
||||
{:events [:intro-wizard/navigate-back]}
|
||||
[{:keys [db] :as cofx} skip-alert?]
|
||||
(let [step (get-in db [:intro-wizard :step])]
|
||||
(if (and (= step :choose-key) (not skip-alert?))
|
||||
(utils/show-question
|
||||
(i18n/label :t/are-you-sure-to-cancel)
|
||||
(i18n/label :t/you-will-start-from-scratch)
|
||||
#(re-frame/dispatch [:intro-wizard/navigate-back true]))
|
||||
(fx/merge cofx
|
||||
dec-step
|
||||
navigation/navigate-back))))
|
||||
|
||||
(fx/defn exit-wizard
|
||||
[{:keys [db] :as cofx}]
|
||||
(fx/merge
|
||||
cofx
|
||||
{:db (dissoc db :intro-wizard)}
|
||||
(navigation/navigate-to-cofx :notifications-onboarding nil)))
|
||||
|
||||
(fx/defn init-key-generation
|
||||
[{:keys [db] :as cofx}]
|
||||
{:db (assoc-in db [:intro-wizard :processing?] true)
|
||||
:intro-wizard/start-onboarding nil})
|
||||
|
||||
(fx/defn store-key-code [{:keys [db] :as cofx}]
|
||||
(let [key-code (get-in db [:intro-wizard :key-code])]
|
||||
{:db (update db :intro-wizard
|
||||
assoc :stored-key-code key-code
|
||||
:key-code nil)}))
|
||||
|
||||
(fx/defn intro-step-forward
|
||||
{:events [:intro-wizard/step-forward-pressed]}
|
||||
[{:keys [db] :as cofx} {:keys [skip? key-code] :as opts}]
|
||||
(let [{:keys [step selected-storage-type processing?]} (:intro-wizard db)]
|
||||
(log/debug "[multiaccount.create] intro-step-forward"
|
||||
"step" step)
|
||||
(cond (= step :generate-key)
|
||||
(init-key-generation cofx)
|
||||
|
||||
(and (= step :create-code)
|
||||
(not processing?))
|
||||
(fx/merge cofx
|
||||
{:db (assoc-in db [:intro-wizard :processing?] true)}
|
||||
(create-multiaccount key-code))
|
||||
|
||||
(and (= step :create-code)
|
||||
(:multiaccounts/login db))
|
||||
(exit-wizard cofx)
|
||||
|
||||
(and (= step :select-key-storage)
|
||||
(= :advanced selected-storage-type))
|
||||
{:dispatch [:keycard/start-onboarding-flow]}
|
||||
|
||||
:else (let [next-step (inc-step step)]
|
||||
(fx/merge cofx
|
||||
{:db (update db :intro-wizard
|
||||
assoc :processing? false
|
||||
:step next-step)}
|
||||
(when (= step :create-code)
|
||||
store-key-code)
|
||||
(navigation/navigate-to-cofx (->> next-step name (str "create-multiaccount-") keyword) nil))))))
|
||||
(fx/defn save-account-and-login
|
||||
[_ key-uid multiaccount-data password settings node-config accounts-data]
|
||||
{::save-account-and-login [key-uid
|
||||
(types/clj->json multiaccount-data)
|
||||
password
|
||||
(types/clj->json settings)
|
||||
node-config
|
||||
(types/clj->json accounts-data)]})
|
||||
|
||||
(defn prepare-accounts-data
|
||||
[multiaccount]
|
||||
|
@ -207,19 +152,6 @@
|
|||
:path constants/path-whisper
|
||||
:chat true})])
|
||||
|
||||
(fx/defn save-multiaccount-and-login-with-keycard
|
||||
[_ args]
|
||||
{:keycard/save-multiaccount-and-login args})
|
||||
|
||||
(fx/defn save-account-and-login
|
||||
[_ key-uid multiaccount-data password settings node-config accounts-data]
|
||||
{::save-account-and-login [key-uid
|
||||
(types/clj->json multiaccount-data)
|
||||
password
|
||||
(types/clj->json settings)
|
||||
node-config
|
||||
(types/clj->json accounts-data)]})
|
||||
|
||||
(fx/defn on-multiaccount-created
|
||||
[{:keys [signing-phrase random-guid-generator db] :as cofx}
|
||||
{:keys [address chat-key keycard-instance-uid key-uid
|
||||
|
@ -260,7 +192,7 @@
|
|||
:installation-id (random-guid-generator)
|
||||
;; default mailserver (history node) setting
|
||||
:use-mailservers? true
|
||||
:recovered (or recovered (get-in db [:intro-wizard :recovering?]))}
|
||||
:recovered recovered}
|
||||
config/default-multiaccount)
|
||||
;; The address from which we derive any chat
|
||||
;; account/encryption keys
|
||||
|
@ -303,90 +235,28 @@
|
|||
(ethereum/sha3 (security/safe-unmask-data password))
|
||||
settings
|
||||
(node/get-new-config db)
|
||||
accounts-data))
|
||||
(when (:intro-wizard db)
|
||||
(intro-step-forward {})))))
|
||||
accounts-data)))))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:intro-wizard/start-onboarding
|
||||
(fn []
|
||||
(status/multiaccount-generate-and-derive-addresses
|
||||
5
|
||||
12
|
||||
[constants/path-whisper
|
||||
constants/path-wallet-root
|
||||
constants/path-default-wallet]
|
||||
#(re-frame/dispatch [:intro-wizard/on-keys-generated
|
||||
(mapv normalize-multiaccount-data-keys
|
||||
(types/json->clj %))]))))
|
||||
|
||||
(fx/defn on-keys-generated
|
||||
{:events [:intro-wizard/on-keys-generated]}
|
||||
[{:keys [db] :as cofx} result]
|
||||
(fx/merge
|
||||
{:db (update db :intro-wizard
|
||||
(fn [data]
|
||||
(-> data
|
||||
(dissoc :processing?)
|
||||
(assoc :multiaccounts result
|
||||
:selected-storage-type :default
|
||||
:selected-id (-> result first :id)
|
||||
:step :choose-key))))}
|
||||
(navigation/navigate-to-cofx :create-multiaccount-choose-key nil)))
|
||||
(fx/defn store-multiaccount-success
|
||||
{:events [::store-multiaccount-success]
|
||||
:interceptors [(re-frame/inject-cofx :random-guid-generator)
|
||||
(re-frame/inject-cofx ::get-signing-phrase)]}
|
||||
[{:keys [db] :as cofx} password derived]
|
||||
(fx/merge cofx
|
||||
{:db (dissoc db :intro-wizard)}
|
||||
(on-multiaccount-created (assoc (let [{:keys [selected-id multiaccounts]} (:intro-wizard db)]
|
||||
(some #(when (= selected-id (:id %)) %) multiaccounts))
|
||||
:derived derived
|
||||
:recovered (get-in db [:intro-wizard :recovering?]))
|
||||
password
|
||||
{:save-mnemonic? true})))
|
||||
|
||||
(fx/defn on-key-selected
|
||||
{:events [:intro-wizard/on-key-selected]}
|
||||
[{:keys [db] :as cofx} id]
|
||||
[{:keys [db]} id]
|
||||
{:db (assoc-in db [:intro-wizard :selected-id] id)})
|
||||
|
||||
(fx/defn on-key-storage-selected
|
||||
{:events [:intro-wizard/on-key-storage-selected]}
|
||||
[{:keys [db] :as cofx} storage-type]
|
||||
[{:keys [db]} storage-type]
|
||||
{:db (assoc-in db [:intro-wizard :selected-storage-type] storage-type)})
|
||||
|
||||
(fx/defn on-learn-more-pressed
|
||||
{:events [:intro-wizard/on-learn-more-pressed]}
|
||||
[{:keys [db] :as cofx}]
|
||||
{:db (assoc-in db [:intro-wizard :show-learn-more?] true)})
|
||||
|
||||
(re-frame/reg-cofx
|
||||
::get-signing-phrase
|
||||
(fn [cofx _]
|
||||
(assoc cofx :signing-phrase (signing-phrase/generate))))
|
||||
|
||||
(fx/defn create-multiaccount-success
|
||||
{:events [::store-multiaccount-success]
|
||||
:interceptors [(re-frame/inject-cofx :random-guid-generator)
|
||||
(re-frame/inject-cofx ::get-signing-phrase)]}
|
||||
[cofx password derived]
|
||||
(on-multiaccount-created cofx
|
||||
(assoc
|
||||
(get-selected-multiaccount cofx)
|
||||
:derived
|
||||
derived)
|
||||
password
|
||||
{:save-mnemonic? true}))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::store-multiaccount
|
||||
(fn [[id key-uid hashed-password callback]]
|
||||
(status/multiaccount-store-derived
|
||||
id
|
||||
key-uid
|
||||
[constants/path-wallet-root
|
||||
constants/path-eip1581
|
||||
constants/path-whisper
|
||||
constants/path-default-wallet]
|
||||
hashed-password
|
||||
callback)))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::save-account-and-login
|
||||
(fn [[key-uid multiaccount-data hashed-password settings config accounts-data]]
|
||||
(status/save-account-and-login
|
||||
key-uid
|
||||
multiaccount-data
|
||||
hashed-password
|
||||
settings
|
||||
config
|
||||
accounts-data)))
|
||||
|
|
|
@ -19,10 +19,10 @@
|
|||
[cofx]
|
||||
(navigation/navigate-to-cofx
|
||||
cofx
|
||||
:key-storage-stack
|
||||
{:screen (if (multiaccounts.model/logged-in? cofx)
|
||||
:actions-logged-in
|
||||
:actions-not-logged-in)}))
|
||||
(if (multiaccounts.model/logged-in? cofx)
|
||||
:actions-logged-in
|
||||
:actions-not-logged-in)
|
||||
nil))
|
||||
|
||||
(fx/defn move-keystore-checked
|
||||
{:events [::move-keystore-checked]}
|
||||
|
@ -46,7 +46,7 @@
|
|||
(fx/merge
|
||||
cofx
|
||||
{:db (assoc db :recovered-account? true)}
|
||||
(navigation/navigate-to-cofx :key-storage-stack {:screen :seed-phrase})))
|
||||
(navigation/navigate-to-cofx :seed-phrase nil)))
|
||||
|
||||
(fx/defn seed-phrase-input-changed
|
||||
{:events [::seed-phrase-input-changed]}
|
||||
|
@ -180,7 +180,7 @@ We don't need to take the exact steps, just set the required state and redirect
|
|||
(assoc-in [:keycard :from-key-storage-and-migration?] true)
|
||||
(dissoc :multiaccounts/key-storage))}
|
||||
(popover/hide-popover)
|
||||
(navigation/navigate-to-cofx :intro-stack {:screen :keycard-onboarding-intro})))
|
||||
(navigation/navigate-to-cofx :keycard-onboarding-intro nil)))
|
||||
|
||||
(fx/defn handle-delete-multiaccount-error
|
||||
{:events [::delete-multiaccount-error]}
|
||||
|
@ -192,7 +192,7 @@ We don't need to take the exact steps, just set the required state and redirect
|
|||
[cofx _]
|
||||
(fx/merge cofx
|
||||
(popover/hide-popover)
|
||||
(navigation/navigate-to-cofx :intro-stack {:screen :multiaccounts})))
|
||||
(navigation/navigate-to-cofx :multiaccounts nil)))
|
||||
|
||||
(comment
|
||||
;; check import mnemonic output
|
||||
|
|
|
@ -58,8 +58,7 @@
|
|||
(is (= :passed-derived-data (get-in res [:db :intro-wizard :derived])))
|
||||
(is (= :advanced (get-in res [:db :intro-wizard :selected-storage-type]))) ; :advanced storage type means Keycard
|
||||
(is (= :recovery (get-in res [:db :keycard :flow])))
|
||||
(is (get-in res [:db :keycard :from-key-storage-and-migration?]))
|
||||
(is (= {:intro-stack {:screen :keycard-onboarding-intro}} (get-in res [:db :navigation/screen-params]))))))
|
||||
(is (get-in res [:db :keycard :from-key-storage-and-migration?])))))
|
||||
|
||||
(comment
|
||||
(security/safe-unmask-data (security/mask-data nil)))
|
||||
|
|
|
@ -21,7 +21,6 @@
|
|||
[status-im.transport.core :as transport]
|
||||
[status-im.stickers.core :as stickers]
|
||||
[status-im.mobile-sync-settings.core :as mobile-network]
|
||||
[status-im.navigation :as navigation]
|
||||
[status-im.utils.fx :as fx]
|
||||
[status-im.utils.keychain.core :as keychain]
|
||||
[status-im.utils.logging.core :as logging]
|
||||
|
@ -36,7 +35,8 @@
|
|||
[status-im.chat.models.link-preview :as link-preview]
|
||||
[status-im.utils.mobile-sync :as utils.mobile-sync]
|
||||
[status-im.async-storage.core :as async-storage]
|
||||
[status-im.notifications-center.core :as notifications-center]))
|
||||
[status-im.notifications-center.core :as notifications-center]
|
||||
[status-im.navigation :as navigation]))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::initialize-communities-enabled
|
||||
|
@ -72,9 +72,8 @@
|
|||
(reduce (fn [acc {:keys [chat type wallet] :as account}]
|
||||
(if chat
|
||||
acc
|
||||
(let [account (cond->
|
||||
(update account :address
|
||||
eip55/address->checksum)
|
||||
(let [account (cond-> (update account :address
|
||||
eip55/address->checksum)
|
||||
type
|
||||
(update :type keyword))]
|
||||
;; if the account is the default wallet we
|
||||
|
@ -316,7 +315,8 @@
|
|||
{:method "permissions_getDappPermissions"
|
||||
:on-success #(re-frame/dispatch [::initialize-dapp-permissions %])}
|
||||
{:method "settings_getSettings"
|
||||
:on-success #(re-frame/dispatch [::get-settings-callback %])}]}
|
||||
:on-success #(do (re-frame/dispatch [::get-settings-callback %])
|
||||
(re-frame/dispatch [:init-root :chat-stack]))}]}
|
||||
(notifications/load-notification-preferences)
|
||||
(when save-password?
|
||||
(keychain/save-user-password key-uid password))
|
||||
|
@ -329,10 +329,14 @@
|
|||
first-account? (and creating?
|
||||
(empty? multiaccounts))]
|
||||
(fx/merge cofx
|
||||
{:db (-> db
|
||||
(dissoc :multiaccounts/login)
|
||||
(assoc-in [:multiaccount :multiaccounts/first-account] first-account?))
|
||||
:dispatch-later [{:ms 2000 :dispatch [::initialize-wallet accounts nil nil (:recovered multiaccount) true]}]}
|
||||
{:db (-> db
|
||||
(dissoc :multiaccounts/login)
|
||||
(assoc-in [:multiaccount :multiaccounts/first-account] first-account?))
|
||||
:init-root-fx :onboarding-notification
|
||||
:dispatch-later [{:ms 2000 :dispatch [::initialize-wallet
|
||||
accounts nil nil
|
||||
(or (get db :recovered-account?) (:recovered multiaccount))
|
||||
true]}]}
|
||||
(finish-keycard-setup)
|
||||
(transport/start-messenger)
|
||||
(chat.loading/initialize-chats)
|
||||
|
@ -398,17 +402,15 @@
|
|||
;; the keychain (save-password), this is not very explicit and we should probably
|
||||
;; make it clearer
|
||||
(fx/defn open-login
|
||||
[{:keys [db] :as cofx} override-multiaccount]
|
||||
(fx/merge cofx
|
||||
{:db (-> db
|
||||
(update :multiaccounts/login
|
||||
merge
|
||||
override-multiaccount)
|
||||
(update :multiaccounts/login
|
||||
dissoc
|
||||
:error
|
||||
:password))}
|
||||
(keychain/get-auth-method (:key-uid override-multiaccount))))
|
||||
[{:keys [db]} override-multiaccount]
|
||||
{:db (-> db
|
||||
(update :multiaccounts/login
|
||||
merge
|
||||
override-multiaccount)
|
||||
(update :multiaccounts/login
|
||||
dissoc
|
||||
:error
|
||||
:password))})
|
||||
|
||||
(fx/defn open-login-callback
|
||||
{:events [:multiaccounts.login.callback/get-user-password-success]}
|
||||
|
@ -422,8 +424,8 @@
|
|||
cofx
|
||||
{:db (update-in db [:multiaccounts/login] assoc
|
||||
:password password
|
||||
:save-password? true)}
|
||||
(navigation/navigate-to-cofx :intro-stack {:screen :progress})
|
||||
:save-password? true)
|
||||
:init-root-fx :progress}
|
||||
login)
|
||||
(fx/merge
|
||||
cofx
|
||||
|
@ -432,9 +434,9 @@
|
|||
(assoc-in [:keycard :pin :enter-step] :login)
|
||||
(assoc-in [:keycard :pin :status] nil)
|
||||
(assoc-in [:keycard :pin :login] []))})
|
||||
(if keycard-account?
|
||||
(navigation/navigate-to-cofx :intro-stack {:screen :keycard-login-pin})
|
||||
(navigation/navigate-to-cofx :intro-stack {:screen :login}))))))
|
||||
#(if keycard-account?
|
||||
{:init-root-with-component-fx [:multiaccounts-keycard :multiaccounts]}
|
||||
{:init-root-fx :multiaccounts})))))
|
||||
|
||||
(fx/defn get-credentials
|
||||
[{:keys [db] :as cofx} key-uid]
|
||||
|
@ -515,28 +517,27 @@
|
|||
(popover/show-popover {:view :disable-password-saving})))))))
|
||||
|
||||
(fx/defn welcome-lets-go
|
||||
{:events [::welcome-lets-go]}
|
||||
{:events [:welcome-lets-go]}
|
||||
[cofx]
|
||||
(let [first-account? (get-in cofx [:db :multiaccount :multiaccounts/first-account])]
|
||||
(fx/merge cofx
|
||||
{:init-root-fx :chat-stack}
|
||||
(when first-account?
|
||||
(acquisition/create))
|
||||
(if config/metrics-enabled?
|
||||
(navigation/navigate-to :anon-metrics-opt-in {})
|
||||
(navigation/navigate-reset {:index 0
|
||||
:routes [{:name :tabs}]})))))
|
||||
#(when config/metrics-enabled?
|
||||
{:dispatch [:navigate-to :anon-metrics-opt-in]}))))
|
||||
|
||||
(fx/defn multiaccount-selected
|
||||
{:events [:multiaccounts.login.ui/multiaccount-selected]}
|
||||
[{:keys [db] :as cofx} key-uid]
|
||||
;; We specifically pass a bunch of fields instead of the whole multiaccount
|
||||
;; as we want store some fields in multiaccount that are not here
|
||||
(let [multiaccount (get-in db [:multiaccounts/multiaccounts key-uid])]
|
||||
(let [multiaccount (get-in db [:multiaccounts/multiaccounts key-uid])
|
||||
keycard-multiaccount? (boolean (:keycard-pairing multiaccount))]
|
||||
(fx/merge
|
||||
cofx
|
||||
{:db (-> db
|
||||
(dissoc :intro-wizard :recovered-account?)
|
||||
(update :keycard dissoc :application-info))}
|
||||
{:db (update db :keycard dissoc :application-info)
|
||||
:rnn-navigate-to-fx (if keycard-multiaccount? :keycard-login-pin :login)}
|
||||
(open-login (select-keys multiaccount [:key-uid :name :public-key :identicon :images])))))
|
||||
|
||||
(fx/defn hide-keycard-banner
|
||||
|
|
|
@ -20,8 +20,6 @@
|
|||
(let [initial-cofx {:db {:auth-method keychain/auth-method-none
|
||||
:supported-biometric-auth true}}
|
||||
{:keys [db]} (login/save-password initial-cofx true)]
|
||||
(test/is (= :secure-with-biometric
|
||||
(get-in db [:popover/popover :view])))
|
||||
(test/is (= true (get-in db [:multiaccounts/login :save-password?])))
|
||||
(test/testing "enable biometric auth"
|
||||
(let [{:keys [db] :as res} (biometric/enable {:db db})]
|
||||
|
@ -46,30 +44,19 @@
|
|||
"uncheck save password")
|
||||
(let [initial-cofx {:db {:auth-method keychain/auth-method-none
|
||||
:supported-biometric-auth true}}
|
||||
{:keys [db]} (fx/merge
|
||||
initial-cofx
|
||||
(login/save-password true)
|
||||
(biometric/enable)
|
||||
(biometric/setup-done
|
||||
{:bioauth-success true
|
||||
:bioauth-message nil
|
||||
:bioauth-code nil})
|
||||
(login/save-password false))]
|
||||
{:keys [db]} (login/save-password (fx/merge
|
||||
initial-cofx
|
||||
(login/save-password true)
|
||||
(biometric/enable)
|
||||
(biometric/setup-done
|
||||
{:bioauth-success true
|
||||
:bioauth-message nil
|
||||
:bioauth-code nil}))
|
||||
false)]
|
||||
(test/is (= true (get-in db [:multiaccounts/login :save-password?])))
|
||||
;; case 2 from https://github.com/status-im/status-react/issues/9573
|
||||
(test/is (= keychain/auth-method-biometric-prepare (:auth-method db)))
|
||||
(test/testing "disable biometric"
|
||||
(let [{:keys [db]} (biometric/disable {:db db})]
|
||||
(test/is (= false (get-in db [:multiaccounts/login :save-password?])))
|
||||
(test/is (= keychain/auth-method-none) (:auth-method db))))))
|
||||
(test/testing (str "check save password, skip biometric auth"
|
||||
"uncheck save password, check again")
|
||||
(let [initial-cofx {:db {:auth-method keychain/auth-method-none
|
||||
:supported-biometric-auth true}}
|
||||
{:keys [db]} (fx/merge
|
||||
initial-cofx
|
||||
(login/save-password true)
|
||||
(login/save-password false)
|
||||
(login/save-password false))]
|
||||
;; case 3 from https://github.com/status-im/status-react/issues/9573
|
||||
(test/is (= :secure-with-biometric (get-in db [:popover/popover :view]))))))
|
||||
(test/is (= keychain/auth-method-none) (:auth-method db)))))))
|
|
@ -16,7 +16,8 @@
|
|||
(let [key-uid (get-in db [:multiaccount :key-uid])
|
||||
should-send-metrics? (get-in db [:multiaccount :anon-metrics/should-send?])]
|
||||
(fx/merge cofx
|
||||
{::logout nil
|
||||
{:init-root-fx :progress
|
||||
::logout nil
|
||||
::multiaccounts/webview-debug-changed false
|
||||
::disable-local-notifications nil
|
||||
:keychain/clear-user-password key-uid
|
||||
|
|
|
@ -52,7 +52,7 @@
|
|||
(if error
|
||||
{:utils/show-popup {:title (i18n/label :t/multiaccount-exists-title)
|
||||
:content (i18n/label :t/multiaccount-exists-title)
|
||||
:on-dismiss #(re-frame/dispatch [:navigate-to :multiaccounts])}}
|
||||
:on-dismiss #(re-frame/dispatch [:pop-to-root-tab :multiaccounts])}}
|
||||
(let [{:keys [key-uid] :as multiaccount} (get-in db [:intro-wizard :root-key])
|
||||
keycard-multiaccount? (boolean (get-in db [:multiaccounts/multiaccounts key-uid :keycard-pairing]))]
|
||||
(if keycard-multiaccount?
|
||||
|
@ -116,10 +116,10 @@
|
|||
:content (i18n/label :t/multiaccount-exists-content)
|
||||
:confirm-button-text (i18n/label :t/unlock)
|
||||
:on-accept #(do
|
||||
(re-frame/dispatch [:navigate-to :multiaccounts])
|
||||
(re-frame/dispatch [:pop-to-root-tab :multiaccounts])
|
||||
(re-frame/dispatch
|
||||
[:multiaccounts.login.ui/multiaccount-selected key-uid]))
|
||||
:on-cancel #(re-frame/dispatch [:navigate-to :multiaccounts])}})
|
||||
:on-cancel #(re-frame/dispatch [:pop-to-root-tab :multiaccounts])}})
|
||||
|
||||
(fx/defn on-import-multiaccount-success
|
||||
{:events [::import-multiaccount-success]}
|
||||
|
@ -130,8 +130,7 @@
|
|||
{:db (update db :intro-wizard
|
||||
assoc :root-key root-data
|
||||
:derived derived-data
|
||||
:step :recovery-success
|
||||
:forward-action :multiaccounts.recover/re-encrypt-pressed)}
|
||||
:step :recovery-success)}
|
||||
(when (existing-account? multiaccounts key-uid)
|
||||
(show-existing-multiaccount-alert key-uid))
|
||||
(navigation/navigate-to-cofx :recover-multiaccount-success nil))))
|
||||
|
@ -148,7 +147,6 @@
|
|||
:next-button-disabled? true
|
||||
:weak-password? true
|
||||
:encrypt-with-password? true
|
||||
:back-action :intro-wizard/navigate-back
|
||||
:forward-action :multiaccounts.recover/enter-phrase-next-pressed}
|
||||
:recovered-account? true)
|
||||
(update :keycard dissoc :flow))}
|
||||
|
@ -222,9 +220,8 @@
|
|||
;;TODO: fix circular dependency to remove dispatch here
|
||||
{:dispatch [:recovery.ui/keycard-option-pressed]}
|
||||
(fx/merge cofx
|
||||
{:db (update db :intro-wizard assoc :step :create-code
|
||||
:forward-action :multiaccounts.recover/enter-password-next-pressed)}
|
||||
(navigation/navigate-to-cofx :recover-multiaccount-enter-password nil)))))
|
||||
{:db (update db :intro-wizard assoc :step :create-code)}
|
||||
(navigation/navigate-to-cofx :create-password nil)))))
|
||||
|
||||
(fx/defn re-encrypt-pressed
|
||||
{:events [:multiaccounts.recover/re-encrypt-pressed]}
|
||||
|
@ -232,16 +229,15 @@
|
|||
(fx/merge cofx
|
||||
{:db (update db :intro-wizard
|
||||
assoc :step :select-key-storage
|
||||
:forward-action :multiaccounts.recover/select-storage-next-pressed
|
||||
:selected-storage-type :default)}
|
||||
(if (nfc/nfc-supported?)
|
||||
(navigation/navigate-to-cofx :recover-multiaccount-select-storage nil)
|
||||
(navigation/navigate-to-cofx :select-key-storage nil)
|
||||
(select-storage-next-pressed))))
|
||||
|
||||
(fx/defn confirm-password-next-button-pressed
|
||||
{:events [:multiaccounts.recover/enter-password-next-pressed]
|
||||
:interceptors [(re-frame/inject-cofx :random-guid-generator)]}
|
||||
[{:keys [db] :as cofx} {:keys [key-code]}]
|
||||
[cofx key-code]
|
||||
(store-multiaccount cofx key-code))
|
||||
|
||||
(fx/defn count-words
|
||||
|
|
|
@ -1,34 +1,7 @@
|
|||
(ns status-im.navigation
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[status-im.ui.screens.routing.core :as navigation]
|
||||
[taoensso.timbre :as log]
|
||||
[status-im.utils.fx :as fx]
|
||||
(:require [status-im.utils.fx :as fx]
|
||||
[status-im.anon-metrics.core :as anon-metrics]))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::navigate-to
|
||||
(fn [[view-id params]]
|
||||
(log/debug :navigate-to view-id params)
|
||||
(navigation/navigate-to (name view-id) params)))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::navigate-back
|
||||
(fn []
|
||||
(log/debug :navigate-back)
|
||||
(navigation/navigate-back)))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::navigate-reset
|
||||
(fn [config]
|
||||
(log/debug :navigate-reset config)
|
||||
(navigation/navigate-reset config)))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::navigate-replace
|
||||
(fn [[view-id params]]
|
||||
(log/debug :navigate-replace view-id params)
|
||||
(navigation/navigate-replace (name view-id) params)))
|
||||
|
||||
(defn- all-screens-params [db view screen-params]
|
||||
(cond-> db
|
||||
(and (seq screen-params) (:screen screen-params) (:params screen-params))
|
||||
|
@ -38,11 +11,11 @@
|
|||
(assoc-in [:navigation/screen-params view] screen-params)))
|
||||
|
||||
(fx/defn navigate-to-cofx
|
||||
[{:keys [db] :as cofx} go-to-view-id screen-params]
|
||||
[{:keys [db]} go-to-view-id screen-params]
|
||||
{:db
|
||||
(-> (assoc db :view-id go-to-view-id)
|
||||
(all-screens-params go-to-view-id screen-params))
|
||||
::navigate-to [go-to-view-id screen-params]
|
||||
:rnn-navigate-to-fx go-to-view-id
|
||||
;; simulate a navigate-to event so it can be captured be anon-metrics
|
||||
::anon-metrics/transform-and-log {:coeffects {:event [:navigate-to go-to-view-id screen-params]}}})
|
||||
|
||||
|
@ -54,19 +27,75 @@
|
|||
(fx/defn navigate-back
|
||||
{:events [:navigate-back]}
|
||||
[_]
|
||||
{::navigate-back nil})
|
||||
{:rnn-navigate-back-fx nil})
|
||||
|
||||
(fx/defn navigate-reset
|
||||
{:events [:navigate-reset]}
|
||||
[_ config]
|
||||
{::navigate-reset config})
|
||||
(fx/defn pop-to-root-tab
|
||||
{:events [:pop-to-root-tab]}
|
||||
[_ tab]
|
||||
{:rnn-pop-to-root-tab-fx tab})
|
||||
|
||||
(fx/defn set-stack-root
|
||||
{:events [:set-stack-root]}
|
||||
[_ stack root]
|
||||
{:set-stack-root-fx [stack root]})
|
||||
|
||||
(fx/defn change-tab
|
||||
{:events [:navigate-change-tab]}
|
||||
[_ tab]
|
||||
{:rnn-change-tab-fx tab})
|
||||
|
||||
(fx/defn navigate-replace
|
||||
{:events [:navigate-replace]
|
||||
{:events [:navigate-replace]
|
||||
:interceptors [anon-metrics/interceptor]}
|
||||
[{:keys [db]} go-to-view-id screen-params]
|
||||
(let [db (cond-> (assoc db :view-id go-to-view-id)
|
||||
(seq screen-params)
|
||||
(assoc-in [:navigation/screen-params go-to-view-id] screen-params))]
|
||||
{:db db
|
||||
::navigate-replace [go-to-view-id screen-params]}))
|
||||
{:db db
|
||||
:navigate-replace-fx go-to-view-id}))
|
||||
|
||||
(fx/defn open-modal
|
||||
{:events [:open-modal]}
|
||||
[{:keys [db]} comp screen-params]
|
||||
{:db (-> (assoc db :view-id comp)
|
||||
(all-screens-params comp screen-params))
|
||||
:open-modal-fx comp})
|
||||
|
||||
(fx/defn init-root
|
||||
{:events [:init-root]}
|
||||
[_ root-id]
|
||||
{:init-root-fx root-id})
|
||||
|
||||
(fx/defn init-root-with-component
|
||||
{:events [:init-root-with-component]}
|
||||
[_ root-id comp-id]
|
||||
{:init-root-with-component-fx [root-id comp-id]})
|
||||
|
||||
(fx/defn rnn-navigate-to
|
||||
{:events [:rnn-navigate-to]}
|
||||
[_ key]
|
||||
{:rnn-navigate-to-fx key})
|
||||
|
||||
(fx/defn rnn-navigate-back
|
||||
{:events [:rnn-navigate-back]}
|
||||
[_]
|
||||
{:rnn-navigate-back-fx nil})
|
||||
|
||||
(fx/defn change-tab-count
|
||||
{:events [:change-tab-count]}
|
||||
[_ tab cnt]
|
||||
{:rnn-change-tab-count-fx [tab cnt]})
|
||||
|
||||
(fx/defn hide-signing-sheet
|
||||
{:events [:hide-signing-sheet]}
|
||||
[_]
|
||||
{:rnn-hide-signing-sheet nil})
|
||||
|
||||
(fx/defn hide-select-acc-sheet
|
||||
{:events [:hide-select-acc-sheet]}
|
||||
[_]
|
||||
{:rnn-hide-select-acc-sheet nil})
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -0,0 +1,322 @@
|
|||
(ns status-im.navigation.core
|
||||
(:require
|
||||
[status-im.ui.components.colors :as colors]
|
||||
[re-frame.core :as re-frame]
|
||||
[status-im.ui.screens.views :as views]
|
||||
[status-im.utils.platform :as platform]
|
||||
[status-im.navigation.roots :as roots]
|
||||
["react-native-navigation" :refer (Navigation)]
|
||||
["react-native-gesture-handler" :refer (gestureHandlerRootHOC)]
|
||||
[status-im.ui.components.react :as react]
|
||||
[quo.components.text-input :as quo.text-input]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[quo.design-system.colors :as quo.colors]
|
||||
["react-native" :as rn]))
|
||||
|
||||
(def debug? ^boolean js/goog.DEBUG)
|
||||
|
||||
(def splash-screen (-> rn .-NativeModules .-SplashScreen))
|
||||
|
||||
(defonce root-comp-id (atom nil))
|
||||
(defonce root-id (atom nil))
|
||||
(defonce pushed-screen-id (atom nil))
|
||||
(defonce curr-modal (atom nil))
|
||||
(defonce modals (atom []))
|
||||
(defonce dissmissing (atom false))
|
||||
|
||||
;; REGISTER COMPONENT (LAZY)
|
||||
(defn reg-comp [key]
|
||||
(if-let [comp (get views/components (keyword key))]
|
||||
(.registerComponent Navigation key (fn [] (views/component comp)))
|
||||
(let [screen (views/screen key)]
|
||||
(.registerComponent Navigation key (fn [] (gestureHandlerRootHOC screen)) (fn [] screen)))))
|
||||
|
||||
(defonce rset-lazy-reg
|
||||
(.setLazyComponentRegistrator Navigation reg-comp))
|
||||
|
||||
;; PUSH SCREEN
|
||||
(defn navigate [comp]
|
||||
(let [{:keys [options]} (get views/screens comp)]
|
||||
(.push Navigation
|
||||
(name @root-comp-id)
|
||||
(clj->js {:component {:id comp
|
||||
:name comp
|
||||
:options (merge options
|
||||
(roots/status-bar-options)
|
||||
(roots/merge-top-bar (roots/topbar-options) options))}}))
|
||||
;;if we push the screen from modal, we want to dismiss all modals
|
||||
(when @curr-modal
|
||||
(reset! curr-modal false)
|
||||
(reset! modals [])
|
||||
(.dismissAllModals Navigation))))
|
||||
|
||||
;; OPEN MODAL
|
||||
(defn update-modal-topbar-options [options]
|
||||
(merge options
|
||||
(roots/merge-top-bar {:elevation 0
|
||||
:noBorder true
|
||||
:title {:color colors/black}
|
||||
:background {:color colors/white}
|
||||
:leftButtonColor colors/black
|
||||
:leftButtons {:id "dismiss-modal"
|
||||
:icon (icons/icon-source :main-icons/close)}}
|
||||
options)))
|
||||
|
||||
(defn open-modal [comp]
|
||||
(let [{:keys [options]} (get views/screens comp)]
|
||||
(if @dissmissing
|
||||
(reset! dissmissing comp)
|
||||
(do
|
||||
(println "SHOW MODAL" comp)
|
||||
(reset! curr-modal true)
|
||||
(swap! modals conj comp)
|
||||
(.showModal Navigation
|
||||
(clj->js {:stack {:children
|
||||
[{:component
|
||||
{:name comp
|
||||
:id comp
|
||||
:options (update-modal-topbar-options
|
||||
(merge (roots/status-bar-options)
|
||||
(roots/default-root)
|
||||
options))}}]}}))))))
|
||||
|
||||
(re-frame/reg-fx :open-modal-fx open-modal)
|
||||
|
||||
;; DISSMISS MODAL
|
||||
(defn dissmissModal []
|
||||
(println "dissmissModal" @modals)
|
||||
(reset! dissmissing true)
|
||||
(.dismissModal Navigation (name (last @modals))))
|
||||
|
||||
(defonce register-nav-button-reg
|
||||
(.registerNavigationButtonPressedListener
|
||||
(.events Navigation)
|
||||
(fn [^js evn]
|
||||
(let [id (.-buttonId evn)]
|
||||
(if (= "dismiss-modal" id)
|
||||
(do
|
||||
(when-let [event (get-in views/screens [(last @modals) :on-dissmiss])]
|
||||
(re-frame/dispatch event))
|
||||
(dissmissModal))
|
||||
(when-let [handler (get-in views/screens [(keyword id) :right-handler])]
|
||||
(handler)))))))
|
||||
|
||||
(defonce register-modal-reg
|
||||
(.registerModalDismissedListener
|
||||
(.events Navigation)
|
||||
(fn [_]
|
||||
(println "DismissedListener" @dissmissing @modals)
|
||||
(if (> (count @modals) 1)
|
||||
(let [new-modals (butlast @modals)]
|
||||
(reset! modals (vec new-modals))
|
||||
(re-frame/dispatch [:set :view-id (last new-modals)]))
|
||||
(do
|
||||
(reset! modals [])
|
||||
(reset! curr-modal false)
|
||||
(re-frame/dispatch [:set :view-id @pushed-screen-id])))
|
||||
|
||||
(let [comp @dissmissing]
|
||||
(reset! dissmissing false)
|
||||
(when (keyword? comp)
|
||||
(open-modal comp))))))
|
||||
|
||||
;; SCREEN DID APPEAR
|
||||
(defonce screen-appear-reg
|
||||
(.registerComponentDidAppearListener
|
||||
(.events Navigation)
|
||||
(fn [^js evn]
|
||||
(let [view-id (keyword (.-componentName evn))]
|
||||
(when-let [{:keys [on-focus]} (get views/screens view-id)]
|
||||
(when (and (not= view-id :bottom-sheet) (not= view-id :popover))
|
||||
(re-frame/dispatch [:set :view-id view-id])
|
||||
(when on-focus
|
||||
(re-frame/dispatch on-focus))
|
||||
(when-not @curr-modal
|
||||
(reset! pushed-screen-id view-id))))))))
|
||||
|
||||
;; SCREEN DID DISAPPEAR
|
||||
(defonce screen-disappear-reg
|
||||
(.registerComponentDidDisappearListener
|
||||
(.events Navigation)
|
||||
(fn [_]
|
||||
(doseq [[_ {:keys [ref value]}] @quo.text-input/text-input-refs]
|
||||
(.setNativeProps ^js ref (clj->js {:text value})))
|
||||
(doseq [[^js text-input default-value] @react/text-input-refs]
|
||||
(.setNativeProps text-input (clj->js {:text default-value}))))))
|
||||
|
||||
;; SET ROOT
|
||||
(re-frame/reg-fx
|
||||
:init-root-fx
|
||||
(fn [new-root-id]
|
||||
(reset! root-comp-id new-root-id)
|
||||
(reset! root-id @root-comp-id)
|
||||
(.setRoot Navigation (clj->js (get (roots/roots) new-root-id)))))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:init-root-with-component-fx
|
||||
(fn [[new-root-id new-root-comp-id]]
|
||||
(reset! root-comp-id new-root-comp-id)
|
||||
(reset! root-id @root-comp-id)
|
||||
(.setRoot Navigation (clj->js (get (roots/roots) new-root-id)))))
|
||||
|
||||
(defonce rset-app-launched
|
||||
(.registerAppLaunchedListener (.events Navigation)
|
||||
(fn []
|
||||
(when @root-id
|
||||
(reset! root-comp-id @root-id)
|
||||
(.setRoot Navigation (clj->js (get (roots/roots) @root-id))))
|
||||
(.hide ^js splash-screen))))
|
||||
|
||||
(defn get-screen-component [comp]
|
||||
(let [{:keys [options]} (get views/screens comp)]
|
||||
{:component {:id comp
|
||||
:name comp
|
||||
:options (merge options
|
||||
(roots/status-bar-options)
|
||||
(roots/merge-top-bar (roots/topbar-options) options))}}))
|
||||
|
||||
;; SET STACK ROOT
|
||||
(re-frame/reg-fx
|
||||
:set-stack-root-fx
|
||||
(fn [[stack comp]]
|
||||
(.setStackRoot Navigation
|
||||
(name stack)
|
||||
(clj->js (if (vector? comp)
|
||||
(mapv get-screen-component comp)
|
||||
(get-screen-component comp))))))
|
||||
|
||||
;; BOTTOM TABS
|
||||
(def tab-root-ids {0 :chat-stack
|
||||
1 :browser-stack
|
||||
2 :wallet-stack
|
||||
3 :status-stack
|
||||
4 :profile-stack})
|
||||
|
||||
(def tab-key-idx {:chat 0
|
||||
:browser 1
|
||||
:wallet 2
|
||||
:status 3
|
||||
:profile 4})
|
||||
|
||||
(re-frame/reg-fx
|
||||
:rnn-change-tab-fx
|
||||
(fn [tab]
|
||||
(reset! root-comp-id (get tab-root-ids (get tab-key-idx tab)))
|
||||
(.mergeOptions Navigation "tabs-stack" (clj->js {:bottomTabs {:currentTabIndex (get tab-key-idx tab)}}))))
|
||||
|
||||
;issue on ios https://github.com/wix/react-native-navigation/issues/7146
|
||||
(re-frame/reg-fx
|
||||
:rnn-change-tab-count-fx
|
||||
(fn [[tab cnt]]
|
||||
(.mergeOptions Navigation
|
||||
(name (get tab-root-ids (get tab-key-idx tab)))
|
||||
(clj->js {:bottomTab (cond
|
||||
(or (pos? cnt) (pos? (:other cnt)))
|
||||
(if (and (= :chat tab) platform/ios?)
|
||||
{:dotIndicator {:visible true}}
|
||||
{:badge (str (or (:other cnt) cnt)) :dotIndicator {:visible false}})
|
||||
(pos? (:public cnt))
|
||||
(if platform/ios?
|
||||
{:dotIndicator {:visible true}}
|
||||
{:badge nil :dotIndicator {:visible true}})
|
||||
:else
|
||||
(if (and (= :chat tab) platform/ios?)
|
||||
{:dotIndicator {:visible false}}
|
||||
{:dotIndicator {:visible false} :badge nil}))}))))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:rnn-pop-to-root-tab-fx
|
||||
(fn [comp]
|
||||
(.popToRoot Navigation (name comp))))
|
||||
|
||||
(defonce register-bottom-tab-reg
|
||||
(.registerBottomTabSelectedListener
|
||||
(.events Navigation)
|
||||
(fn [^js evn]
|
||||
(let [comp (get tab-root-ids (.-selectedTabIndex evn))]
|
||||
(when (and platform/android? (= @root-comp-id comp))
|
||||
(.popToRoot Navigation (name comp)))
|
||||
(reset! root-comp-id comp)))))
|
||||
|
||||
;; OVERLAY (Popover and bottom sheets)
|
||||
(defn dissmiss-overlay [comp]
|
||||
(.dismissOverlay Navigation comp))
|
||||
|
||||
(defn show-overlay [comp]
|
||||
(dissmiss-overlay comp)
|
||||
(.showOverlay Navigation
|
||||
(clj->js
|
||||
{:component {:name comp
|
||||
:id comp
|
||||
:options (merge (cond-> (roots/status-bar-options)
|
||||
(and platform/android? (not (colors/dark?)))
|
||||
(assoc-in [:statusBar :translucent] true))
|
||||
{:layout {:componentBackgroundColor (if platform/android?
|
||||
(:backdrop @quo.colors/theme)
|
||||
"transparent")}
|
||||
:overlay {:interceptTouchOutside true}})}})))
|
||||
|
||||
;; POPOVER
|
||||
(defonce popover-reg
|
||||
(.registerComponent Navigation
|
||||
"popover"
|
||||
(fn [] (gestureHandlerRootHOC views/popover-comp))
|
||||
(fn [] views/popover-comp)))
|
||||
|
||||
(re-frame/reg-fx :rnn-show-popover (fn [] (show-overlay "popover")))
|
||||
(re-frame/reg-fx :rnn-hide-popover (fn [] (dissmiss-overlay "popover")))
|
||||
|
||||
;; BOTTOM SHEETS
|
||||
(defonce bottom-sheet-reg
|
||||
(.registerComponent Navigation
|
||||
"bottom-sheet"
|
||||
(fn [] (gestureHandlerRootHOC views/sheet-comp))
|
||||
(fn [] views/sheet-comp)))
|
||||
|
||||
(re-frame/reg-fx :rnn-show-bottom-sheet (fn [] (show-overlay "bottom-sheet")))
|
||||
(re-frame/reg-fx :rnn-hide-bottom-sheet (fn [] (dissmiss-overlay "bottom-sheet")))
|
||||
|
||||
;; SIGNING
|
||||
|
||||
(defonce signing-sheet-reg
|
||||
(.registerComponent Navigation
|
||||
"signing-sheet"
|
||||
(fn [] (gestureHandlerRootHOC views/signing-comp))
|
||||
(fn [] views/signing-comp)))
|
||||
|
||||
(re-frame/reg-fx :rnn-show-signing-sheet (fn [] (show-overlay "signing-sheet")))
|
||||
(re-frame/reg-fx :rnn-hide-signing-sheet (fn [] (dissmiss-overlay "signing-sheet")))
|
||||
|
||||
;; Select account
|
||||
;; TODO why is this not a regular bottom sheet ?
|
||||
|
||||
(defonce select-acc-sheet-reg
|
||||
(.registerComponent Navigation
|
||||
"select-acc-sheet"
|
||||
(fn [] (gestureHandlerRootHOC views/select-acc-comp))
|
||||
(fn [] views/select-acc-comp)))
|
||||
|
||||
(re-frame/reg-fx :rnn-show-select-acc-sheet (fn [] (show-overlay "select-acc-sheet")))
|
||||
(re-frame/reg-fx :rnn-hide-select-acc-sheet (fn [] (dissmiss-overlay "select-acc-sheet")))
|
||||
|
||||
;; NAVIGATION
|
||||
|
||||
(re-frame/reg-fx
|
||||
:rnn-navigate-to-fx
|
||||
(fn [key]
|
||||
;;TODO WHY #{:home} ? we need to review all navigations to root screens home, wallet profile etc
|
||||
(when-not (#{:home} key)
|
||||
(navigate key))))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:rnn-navigate-back-fx
|
||||
(fn []
|
||||
(if @curr-modal
|
||||
(dissmissModal)
|
||||
(.pop Navigation (name @root-comp-id)))))
|
||||
|
||||
(re-frame/reg-fx
|
||||
:navigate-replace-fx
|
||||
(fn [view-id]
|
||||
(.pop Navigation (name @root-comp-id))
|
||||
(navigate view-id)))
|
|
@ -0,0 +1,171 @@
|
|||
(ns status-im.navigation.roots
|
||||
(:require [status-im.ui.components.colors :as colors]
|
||||
[status-im.utils.platform :as platform]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[status-im.ui.screens.views :as views]))
|
||||
|
||||
(defn status-bar-options []
|
||||
(if platform/android?
|
||||
{:navigationBar {:backgroundColor colors/white}
|
||||
:statusBar {:backgroundColor colors/white
|
||||
:style (if (colors/dark?) :light :dark)}}
|
||||
{:statusBar {:style (if (colors/dark?) :light :dark)}}))
|
||||
|
||||
(defn topbar-options []
|
||||
{:noBorder true
|
||||
:elevation 0
|
||||
:title {:color colors/black}
|
||||
:rightButtonColor colors/black
|
||||
:background {:color colors/white}
|
||||
:backButton {:icon (icons/icon-source :main-icons/arrow-left)
|
||||
:color colors/black}})
|
||||
|
||||
(defn bottom-tab-general [icon accessibility]
|
||||
(merge
|
||||
{:testID accessibility
|
||||
:accessibilityLabel accessibility
|
||||
:fontSize 11
|
||||
:icon (icons/icon-source icon)
|
||||
:badgeColor colors/blue
|
||||
:dotIndicator {:color colors/blue :visible false :size 10}
|
||||
:iconColor colors/gray :selectedIconColor colors/blue
|
||||
:textColor colors/gray :selectedTextColor colors/blue}
|
||||
(when platform/android?
|
||||
{:badge ""})))
|
||||
|
||||
(defn default-root []
|
||||
{:layout {:componentBackgroundColor colors/white
|
||||
:backgroundColor colors/white}})
|
||||
|
||||
(defn merge-top-bar [root-options options]
|
||||
(let [options (:topBar options)]
|
||||
{:topBar
|
||||
(merge root-options
|
||||
options
|
||||
(when (or (:title root-options) (:title options))
|
||||
{:title (merge (:title root-options) (:title options))})
|
||||
(when (or (:background root-options) (:background options))
|
||||
{:background (merge (:background root-options) (:background options))})
|
||||
(when (or (:backButton root-options) (:backButton options))
|
||||
{:backButton (merge (:backButton root-options) (:backButton options))})
|
||||
(when (or (:leftButtons root-options) (:leftButtons options))
|
||||
{:leftButtons (merge (:leftButtons root-options) (:leftButtons options))})
|
||||
(when (or (:rightButtons root-options) (:rightButtons options))
|
||||
{:rightButtons (merge (:rightButtons root-options) (:rightButtons options))}))}))
|
||||
|
||||
(defn get-screen-options [screen]
|
||||
(merge (get-in views/screens [screen :options])
|
||||
(status-bar-options)
|
||||
(merge-top-bar (topbar-options)
|
||||
(get-in views/screens [screen :options]))))
|
||||
|
||||
;;TODO problem here is that we have two places for screens, here and in screens ns, and we have handler in navigate
|
||||
(defn roots []
|
||||
;;TABS
|
||||
{:chat-stack
|
||||
{:root
|
||||
{:bottomTabs
|
||||
{:id :tabs-stack
|
||||
:options (merge (default-root)
|
||||
{:bottomTabs {:titleDisplayMode :alwaysHide
|
||||
:backgroundColor colors/white}})
|
||||
:children [;CHAT STACK
|
||||
{:stack {:id :chat-stack
|
||||
:children [{:component {:name :home
|
||||
:id :home
|
||||
:options (merge (status-bar-options)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}]
|
||||
:options {:bottomTab (bottom-tab-general :main-icons/message :home-tab-button)}}}
|
||||
;BROWSER STACK
|
||||
{:stack {:id :browser-stack
|
||||
:children [{:component {:name :empty-tab
|
||||
:id :empty-tab
|
||||
:options (merge (status-bar-options)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}]
|
||||
|
||||
:options {:bottomTab (bottom-tab-general :main-icons/browser :dapp-tab-button)}}}
|
||||
;WALLET STACK
|
||||
{:stack {:id :wallet-stack
|
||||
:children [{:component {:name :wallet
|
||||
:id :wallet
|
||||
:options (merge (status-bar-options)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}]
|
||||
:options {:bottomTab (bottom-tab-general :main-icons/wallet :wallet-tab-button)}}}
|
||||
;STATUS STACK
|
||||
{:stack {:id :status-stack
|
||||
:children [{:component {:name :status
|
||||
:id :status
|
||||
:options (merge (status-bar-options)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}]
|
||||
:options {:bottomTab (bottom-tab-general :main-icons/status :status-tab-button)}}}
|
||||
;PROFILE STACK
|
||||
{:stack {:id :profile-stack
|
||||
:children [{:component {:name :my-profile
|
||||
:id :my-profile
|
||||
:options (merge (status-bar-options)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}]
|
||||
:options {:bottomTab (bottom-tab-general :main-icons/user-profile :profile-tab-button)}}}]}}}
|
||||
|
||||
;;INTRO (onboarding carousel)
|
||||
:intro
|
||||
{:root {:stack {:children [{:component {:name :intro
|
||||
:id :intro
|
||||
:options (status-bar-options)}}]
|
||||
:options (merge (default-root)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}}
|
||||
|
||||
;; ONBOARDING
|
||||
:onboarding
|
||||
{:root {:stack {:id :onboarding
|
||||
:children [{:component {:name :get-your-keys
|
||||
:id :get-your-keys
|
||||
:options (status-bar-options)}}]
|
||||
:options (merge (default-root)
|
||||
{:topBar (assoc (topbar-options) :elevation 0 :noBorder true :animate false)})}}}
|
||||
|
||||
;;PROGRESS
|
||||
:progress
|
||||
{:root {:stack {:children [{:component {:name :progress
|
||||
:id :progress
|
||||
:options (status-bar-options)}}]
|
||||
:options (merge (default-root)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}}
|
||||
|
||||
;;LOGIN
|
||||
:multiaccounts
|
||||
{:root {:stack {:id :multiaccounts-stack
|
||||
:children [{:component {:name :multiaccounts
|
||||
:id :multiaccounts
|
||||
:options (get-screen-options :multiaccounts)}}
|
||||
{:component {:name :login
|
||||
:id :login
|
||||
:options (get-screen-options :login)}}]
|
||||
:options (merge (default-root)
|
||||
{:topBar (topbar-options)})}}}
|
||||
|
||||
:multiaccounts-keycard
|
||||
{:root {:stack {:id :multiaccounts-stack
|
||||
:children [{:component {:name :multiaccounts
|
||||
:id :multiaccounts
|
||||
:options (get-screen-options :multiaccounts)}}
|
||||
{:component {:name :keycard-login-pin
|
||||
:id :keycard-login-pin
|
||||
:options (get-screen-options :keycard-login-pin)}}]
|
||||
:options (merge (default-root)
|
||||
{:topBar (topbar-options)})}}}
|
||||
|
||||
;;WELCOME
|
||||
:welcome
|
||||
{:root {:stack {:children [{:component {:name :welcome
|
||||
:id :welcome
|
||||
:options (status-bar-options)}}]
|
||||
:options (merge (default-root)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}}
|
||||
|
||||
;;NOTIFICATIONS
|
||||
:onboarding-notification
|
||||
{:root {:stack {:children [{:component {:name :onboarding-notification
|
||||
:id :onboarding-notification
|
||||
:options (status-bar-options)}}]
|
||||
:options (merge (default-root)
|
||||
{:topBar (assoc (topbar-options) :visible false)})}}}})
|
|
@ -3,11 +3,19 @@
|
|||
|
||||
(fx/defn show-popover
|
||||
{:events [:show-popover]}
|
||||
[{:keys [db]} value]
|
||||
{:db (assoc db :popover/popover value)
|
||||
[_ value]
|
||||
{:rnn-show-popover nil
|
||||
;;TODO refactor popover just start animation on mount
|
||||
:dispatch-later [{:ms 250 :dispatch [:show-popover-db value]}]
|
||||
:dismiss-keyboard nil})
|
||||
|
||||
(fx/defn show-popover-db
|
||||
{:events [:show-popover-db]}
|
||||
[{:keys [db]} value]
|
||||
{:db (assoc db :popover/popover value)})
|
||||
|
||||
(fx/defn hide-popover
|
||||
{:events [:hide-popover]}
|
||||
[{:keys [db]}]
|
||||
{:db (dissoc db :popover/popover)})
|
||||
{:db (dissoc db :popover/popover)
|
||||
:rnn-hide-popover nil})
|
||||
|
|
|
@ -15,7 +15,7 @@
|
|||
[_ opts]
|
||||
{:request-permissions-fx
|
||||
{:permissions [:camera]
|
||||
:on-allowed #(re-frame/dispatch [:navigate-to :qr-scanner opts])
|
||||
:on-allowed #(re-frame/dispatch [:open-modal :qr-scanner opts])
|
||||
:on-denied (fn []
|
||||
(utils/set-timeout
|
||||
#(utils/show-popup (i18n/label :t/error)
|
||||
|
@ -59,19 +59,19 @@
|
|||
(let [own (new-chat.db/own-public-key? db public-key)]
|
||||
(cond
|
||||
(and public-key own)
|
||||
(navigation/navigate-to-cofx cofx :tabs {:screen :profile-stack
|
||||
:params {:screen :my-profile}})
|
||||
{:navigate-change-tab-fx :profile
|
||||
:pop-to-root-tab-fx :profile-stack}
|
||||
|
||||
(and public-key (not own))
|
||||
(fx/merge cofx
|
||||
{:db (assoc db :contacts/identity public-key)
|
||||
:dispatch [:navigate-to :profile]}
|
||||
:dispatch [:open-modal :profile]}
|
||||
(navigation/navigate-back))
|
||||
|
||||
:else
|
||||
{:utils/show-popup {:title (i18n/label :t/unable-to-read-this-code)
|
||||
:content (i18n/label :t/ens-name-not-found)
|
||||
:on-dismiss #(re-frame/dispatch [:navigate-to :home])}})))
|
||||
:on-dismiss #(re-frame/dispatch [:pop-to-root-tab :chat-stack])}})))
|
||||
|
||||
(fx/defn handle-eip681 [cofx data]
|
||||
(fx/merge cofx
|
||||
|
@ -89,7 +89,7 @@
|
|||
:browser (handle-browse cofx data)
|
||||
:eip681 (handle-eip681 cofx data)
|
||||
{:utils/show-popup {:title (i18n/label :t/unable-to-read-this-code)
|
||||
:on-dismiss #(re-frame/dispatch [:navigate-to :home])}}))
|
||||
:on-dismiss #(re-frame/dispatch [:pop-to-root-tab :chat-stack])}}))
|
||||
|
||||
(fx/defn on-scan
|
||||
{:events [::on-scan-success]}
|
||||
|
|
|
@ -13,7 +13,10 @@
|
|||
(defonce label (reagent/atom ""))
|
||||
|
||||
(defn reload []
|
||||
(when @timeout (js/clearTimeout @timeout))
|
||||
(reset! timeout (js/setTimeout #(reset! visible false) 500))
|
||||
(reset! warning? false)
|
||||
(reset! visible true)
|
||||
(reset! label "reloading UI")
|
||||
(re-frame/clear-subscription-cache!)
|
||||
(swap! cnt inc))
|
||||
|
@ -45,12 +48,7 @@
|
|||
(build-competed)))
|
||||
|
||||
(defn reload-view [_]
|
||||
(fn [cnt]
|
||||
(when @timeout (js/clearTimeout @timeout))
|
||||
(when (not= @cnt-prev cnt)
|
||||
(reset! cnt-prev cnt)
|
||||
(reset! visible true)
|
||||
(reset! timeout (js/setTimeout #(reset! visible false) 1000)))
|
||||
(fn []
|
||||
(when @visible
|
||||
[react/view {:pointerEvents :none
|
||||
:style {:position :absolute :top 0 :left 0 :right 0 :bottom 0
|
||||
|
|
|
@ -204,19 +204,21 @@
|
|||
(let [{:signing/keys [queue]} db
|
||||
{{:keys [gas gasPrice] :as tx-obj} :tx-obj {:keys [data typed? pinless?] :as message} :message :as tx} (last queue)
|
||||
keycard-multiaccount? (boolean (get-in db [:multiaccount :keycard-pairing]))
|
||||
wallet-set-up-passed? (get-in db [:multiaccount :wallet-set-up-passed?])
|
||||
updated-db (if wallet-set-up-passed? db (assoc db :popover/popover {:view :signing-phrase}))]
|
||||
wallet-set-up-passed? (get-in db [:multiaccount :wallet-set-up-passed?])]
|
||||
(if message
|
||||
(fx/merge
|
||||
cofx
|
||||
{:db (assoc updated-db
|
||||
{:db (assoc db
|
||||
:signing/queue (drop-last queue)
|
||||
:signing/tx tx
|
||||
:signing/sign {:type (cond pinless? :pinless
|
||||
keycard-multiaccount? :keycard
|
||||
:else :password)
|
||||
:formatted-data (if typed? (types/json->clj data) (ethereum/hex->text data))
|
||||
:keycard-step (when pinless? :connect)})}
|
||||
:keycard-step (when pinless? :connect)})
|
||||
:rnn-show-signing-sheet nil}
|
||||
#(when-not wallet-set-up-passed?
|
||||
{:dispatch-n [[:show-popover {:view :signing-phrase}]]})
|
||||
(when pinless?
|
||||
(keycard.card/start-nfc {:on-success #(re-frame/dispatch [:keycard.callback/start-nfc-success])
|
||||
:on-failure #(re-frame/dispatch [:keycard.callback/start-nfc-failure])})
|
||||
|
@ -225,10 +227,13 @@
|
|||
:on-completed #(re-frame/dispatch [:keycard/store-hash-and-sign-typed %])})))
|
||||
(fx/merge
|
||||
cofx
|
||||
{:db (assoc updated-db
|
||||
{:db (assoc db
|
||||
:signing/queue (drop-last queue)
|
||||
:signing/tx (prepare-tx updated-db tx))
|
||||
:signing/tx (prepare-tx db tx))
|
||||
:rnn-show-signing-sheet nil
|
||||
:dismiss-keyboard nil}
|
||||
#(when-not wallet-set-up-passed?
|
||||
{:dispatch-n [[:show-popover {:view :signing-phrase}]]})
|
||||
(prices/update-prices)
|
||||
#(when-not gas
|
||||
{:db (assoc-in (:db %) [:signing/edit-fee :gas-loading?] true)
|
||||
|
|
|
@ -137,7 +137,7 @@
|
|||
pack-contract (contracts/get-address db :status/sticker-pack)
|
||||
address (ethereum/default-address db)]
|
||||
(fx/merge cofx
|
||||
(navigation/navigate-to-cofx :stickers-pack-modal {:id id})
|
||||
(navigation/open-modal :stickers-pack {:id id})
|
||||
#(when (and contract-address (not pack))
|
||||
{:stickers/pack-data-fx [contract-address id]
|
||||
:stickers/owned-packs-fx [pack-contract address]})))))
|
||||
|
|
|
@ -80,6 +80,7 @@
|
|||
(reg-root-key-sub :connectivity/ui-status-properties :connectivity/ui-status-properties)
|
||||
(reg-root-key-sub :logged-in-since :logged-in-since)
|
||||
(reg-root-key-sub :link-previews-whitelist :link-previews-whitelist)
|
||||
(reg-root-key-sub :app-state :app-state)
|
||||
|
||||
;;NOTE this one is not related to ethereum network
|
||||
;; it is about cellular network/ wifi network
|
||||
|
@ -325,6 +326,13 @@
|
|||
(fn [db]
|
||||
(multiaccounts.model/logged-in? {:db db})))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:hide-screen?
|
||||
:<- [:app-state]
|
||||
:<- [:multiaccount]
|
||||
(fn [[state multiaccount]]
|
||||
(and (= state "inactive") (:preview-privacy? multiaccount))))
|
||||
|
||||
;; Intro wizard
|
||||
(re-frame/reg-sub
|
||||
:intro-wizard
|
||||
|
@ -334,12 +342,6 @@
|
|||
(assoc wizard-state
|
||||
:view-height height :view-width width)))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:intro-wizard/generate-key
|
||||
:<- [:intro-wizard]
|
||||
(fn [wizard-state]
|
||||
(select-keys wizard-state [:processing? :view-height])))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:intro-wizard/choose-key
|
||||
:<- [:intro-wizard]
|
||||
|
@ -350,19 +352,7 @@
|
|||
:intro-wizard/select-key-storage
|
||||
:<- [:intro-wizard]
|
||||
(fn [wizard-state]
|
||||
(merge (select-keys wizard-state [:selected-storage-type :view-height :recovering?])
|
||||
(if (:recovering? wizard-state)
|
||||
{:forward-action :multiaccounts.recover/select-storage-next-pressed}
|
||||
{:forward-action :intro-wizard/step-forward-pressed}))))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:intro-wizard/create-code
|
||||
:<- [:intro-wizard]
|
||||
(fn [wizard-state]
|
||||
(merge (select-keys wizard-state [:processing?])
|
||||
(if (:recovering? wizard-state)
|
||||
{:forward-action :multiaccounts.recover/enter-password-next-pressed}
|
||||
{:forward-action :intro-wizard/step-forward-pressed}))))
|
||||
(select-keys wizard-state [:selected-storage-type :recovering?])))
|
||||
|
||||
(re-frame/reg-sub
|
||||
:intro-wizard/enter-phrase
|
||||
|
|
|
@ -1,11 +1,7 @@
|
|||
(ns status-im.theme.core
|
||||
(:require [status-im.ui.components.status-bar.view :as status-bar]
|
||||
[status-im.ui.components.colors :as colors]
|
||||
[quo.theme :as quo-theme]
|
||||
["react-native-navigation-bar-color" :default changeNavigationBarColor]))
|
||||
(:require [status-im.ui.components.colors :as colors]
|
||||
[quo.theme :as quo-theme]))
|
||||
|
||||
(defn change-theme [theme]
|
||||
(quo-theme/set-theme theme)
|
||||
(colors/set-theme theme)
|
||||
(status-bar/set-status-bar nil)
|
||||
(changeNavigationBarColor colors/white (= theme :light)))
|
||||
(colors/set-theme theme))
|
||||
|
|
|
@ -3,7 +3,8 @@
|
|||
[reagent.core :as reagent]
|
||||
[status-im.ui.components.animation :as anim]
|
||||
[status-im.ui.components.colors :as colors]
|
||||
[status-im.ui.components.react :as react])
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.utils.platform :as platform])
|
||||
(:require-macros [status-im.utils.views :as views]))
|
||||
|
||||
(def back-listener (atom nil))
|
||||
|
@ -42,7 +43,7 @@
|
|||
:duration 500
|
||||
:useNativeDriver true})])))
|
||||
|
||||
(defn bottom-panel [_ render window-height]
|
||||
(defn bottom-panel [_ render window-height on-close]
|
||||
(let [bottom-anim-value (anim/create-value window-height)
|
||||
alpha-value (anim/create-value 0)
|
||||
clear-timeout (atom nil)
|
||||
|
@ -90,17 +91,23 @@
|
|||
:else
|
||||
(do (reset! clear-timeout (js/setTimeout #(reset! current-obj nil) 600))
|
||||
(hide-panel-anim bottom-anim-value alpha-value (- window-height))))))
|
||||
:reagent-render (fn []
|
||||
(when @current-obj
|
||||
[react/keyboard-avoiding-view {:style {:position :absolute :top 0 :bottom 0 :left 0 :right 0}}
|
||||
[react/view {:flex 1}
|
||||
[react/animated-view {:flex 1 :background-color colors/black-persist :opacity alpha-value}]
|
||||
[react/animated-view {:style {:position :absolute
|
||||
:transform [{:translateY bottom-anim-value}]
|
||||
:bottom 0 :left 0 :right 0}}
|
||||
[react/view {:flex 1}
|
||||
[render @current-obj]]]]]))})))
|
||||
:reagent-render (fn []
|
||||
(if @current-obj
|
||||
[react/keyboard-avoiding-view {:style {:position :absolute :top 0 :bottom 0 :left 0 :right 0}
|
||||
:ignore-offset true}
|
||||
|
||||
(views/defview animated-bottom-panel [val signing-view]
|
||||
[react/view {:flex 1}
|
||||
(when platform/ios?
|
||||
[react/animated-view {:flex 1 :background-color colors/black-persist :opacity alpha-value}])
|
||||
[react/animated-view {:style {:position :absolute
|
||||
:transform [{:translateY bottom-anim-value}]
|
||||
:bottom 0 :left 0 :right 0}}
|
||||
[react/view {:flex 1}
|
||||
[render @current-obj]]]]]
|
||||
;;TODO this is not great, improve!
|
||||
#(do (on-close)
|
||||
nil)))})))
|
||||
|
||||
(views/defview animated-bottom-panel [val signing-view on-close]
|
||||
(views/letsubs [{window-height :height} [:dimensions/window]]
|
||||
[bottom-panel (when val (select-keys val [:from :contact :amount :token :approve? :message :cancel? :hash])) signing-view window-height]))
|
||||
[bottom-panel (when val (select-keys val [:from :contact :amount :token :approve? :message :cancel? :hash])) signing-view window-height on-close]))
|
||||
|
|
|
@ -136,7 +136,7 @@
|
|||
{:title (i18n/label :t/settings)
|
||||
:accessibility-label "settings"
|
||||
:theme :accent
|
||||
:on-press #(hide-sheet-and-dispatch [:navigate-to :profile-stack {:screen :sync-settings}])
|
||||
:on-press #(hide-sheet-and-dispatch [:navigate-to :sync-settings])
|
||||
:icon :main-icons/settings}]
|
||||
(when mobile
|
||||
[:<>
|
||||
|
|
|
@ -84,7 +84,7 @@
|
|||
:on-success (fn [type data]
|
||||
(re-frame/dispatch [::get-reward-success address type data]))})
|
||||
accounts)}
|
||||
(navigation/navigate-to-cofx :referral-invite nil))))
|
||||
(navigation/open-modal :referral-invite nil))))
|
||||
|
||||
(re-frame/reg-fx
|
||||
::terms-and-conditions
|
||||
|
|
|
@ -9,7 +9,6 @@
|
|||
[quo.design-system.spacing :as spacing]
|
||||
[quo.design-system.colors :as colors]
|
||||
[status-im.ui.components.invite.style :as styles]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.ui.components.invite.events :as invite.events]
|
||||
[status-im.ui.components.invite.utils :refer [transform-tokens]]
|
||||
[quo.react-native :as rn]
|
||||
|
@ -210,10 +209,7 @@
|
|||
account (or @account* default-account)
|
||||
reward @(re-frame/subscribe [::invite.events/default-reward])
|
||||
starter-pack @(re-frame/subscribe [::invite.events/starter-pack])]
|
||||
[rn/view {:flex 1}
|
||||
[topbar/topbar {:modal? true
|
||||
:show-border? true
|
||||
:title (i18n/label :t/invite-friends)}]
|
||||
[:<>
|
||||
[rn/scroll-view {:flex 1}
|
||||
[reward-item reward :t/invite-reward-you-description]
|
||||
[friend-reward-item starter-pack :t/invite-reward-friend-description]
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
[react/safe-area-consumer
|
||||
(fn [insets]
|
||||
(let [vertical-offset (+ (oget insets "top")
|
||||
;; 10 is the margin-top for presentation modal
|
||||
10)]
|
||||
;; 20 is the margin-top for presentation modal
|
||||
20)]
|
||||
(reagent/as-element
|
||||
(into [react/keyboard-avoiding-view (merge props
|
||||
{:keyboard-vertical-offset vertical-offset})]
|
||||
(into [react/keyboard-avoiding-view (update props :keyboardVerticalOffset
|
||||
+ vertical-offset)]
|
||||
children))))]))
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
["react-native-safe-area-context" :as safe-area-context
|
||||
:refer (SafeAreaProvider SafeAreaInsetsContext)]
|
||||
["@react-native-community/clipboard" :default Clipboard]
|
||||
["react-native-linear-gradient" :default LinearGradient])
|
||||
["react-native-linear-gradient" :default LinearGradient]
|
||||
["react-native-navigation" :refer (Navigation)])
|
||||
(:require-macros [status-im.utils.views :as views]))
|
||||
|
||||
(def native-modules (.-NativeModules react-native))
|
||||
|
@ -22,8 +23,6 @@
|
|||
(def app-state (.-AppState react-native))
|
||||
(def view (reagent/adapt-react-class (.-View react-native)))
|
||||
|
||||
(def status-bar-class (.-StatusBar react-native))
|
||||
|
||||
(def scroll-view-class (reagent/adapt-react-class (.-ScrollView react-native)))
|
||||
(def keyboard-avoiding-view-class (reagent/adapt-react-class (.-KeyboardAvoidingView react-native)))
|
||||
|
||||
|
@ -227,10 +226,20 @@
|
|||
(.then clipboard-contents #(clbk %))))
|
||||
|
||||
;; KeyboardAvoidingView
|
||||
(def navigation-const (atom nil))
|
||||
|
||||
(.then (.constants Navigation)
|
||||
(fn [^js consts]
|
||||
(reset! navigation-const {:top-bar-height (.-topBarHeight consts)
|
||||
:bottom-tabs-height (.-bottomTabsHeight consts)
|
||||
:status-bar-height (.-statusBarHeight consts)})))
|
||||
|
||||
(defn keyboard-avoiding-view [props & children]
|
||||
(into [keyboard-avoiding-view-class
|
||||
(merge (when platform/ios? {:behavior :padding}) props)]
|
||||
(merge (when platform/ios? {:behavior :padding})
|
||||
(if (:ignore-offset props)
|
||||
props
|
||||
(update props :keyboardVerticalOffset + 44 (:status-bar-height @navigation-const))))]
|
||||
children))
|
||||
|
||||
(defn scroll-view [props & children]
|
||||
|
|
|
@ -1,23 +0,0 @@
|
|||
(ns status-im.ui.components.status-bar.styles
|
||||
(:require [status-im.ui.components.colors :as colors]
|
||||
[status-im.utils.styles :as styles]))
|
||||
|
||||
(defn- create-status-bar-style [{:keys [background-color bar-style translucent?]
|
||||
:or {bar-style "light-content"}}]
|
||||
{:background-color (if translucent? "transparent" background-color)
|
||||
:translucent translucent?
|
||||
:bar-style bar-style})
|
||||
|
||||
(styles/defn status-bar-default []
|
||||
{:ios (create-status-bar-style (when-not (colors/dark?)
|
||||
{:bar-style "dark-content"}))
|
||||
:android (create-status-bar-style (if (colors/dark?)
|
||||
{:translucent? true}
|
||||
{:translucent? true
|
||||
:bar-style "dark-content"}))})
|
||||
|
||||
(styles/defn status-bar-black []
|
||||
{:ios (create-status-bar-style nil)
|
||||
:android (create-status-bar-style (if (colors/dark?)
|
||||
{:translucent? true}
|
||||
{:background-color colors/black}))})
|
|
@ -1,51 +0,0 @@
|
|||
(ns status-im.ui.components.status-bar.view
|
||||
(:require [status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.status-bar.styles :as styles]
|
||||
[status-im.utils.platform :as platform]))
|
||||
|
||||
(def route->bar-type (merge {:qr-scanner {:type :black}
|
||||
:image-preview {:type :black}}
|
||||
(when platform/ios?
|
||||
{:new-chat {:type :black}
|
||||
:contact-toggle-list {:type :black}
|
||||
:new-group {:type :black}
|
||||
:anon-metrics-view-data {:type :black}
|
||||
:anon-metrics-learn-more {:type :black}
|
||||
:new-public-chat {:type :black}})))
|
||||
|
||||
;; TODO: Integrate into navigation
|
||||
(defn get-config [view-id]
|
||||
(get route->bar-type view-id {:type :main}))
|
||||
|
||||
(defn set-status-bar
|
||||
"If more than one `StatusBar` is rendered, the one which was mounted last will
|
||||
have higher priority
|
||||
https://facebook.github.io/react-native/docs/statusbar.html
|
||||
|
||||
This means that if we have more than one screen rendered at the same time
|
||||
(which happens due to bottom nav change), it might happen that the screen
|
||||
which was already rendered before will be reopened but the `StatusBar` from
|
||||
a different screen which still exists but is blurred will be applied.
|
||||
Thus we need to set props to `StatusBar` imperatively when a particular screen
|
||||
is shown. At the same time, the background of `StatusBar` should be rendered
|
||||
inside the screen in order to have better transitions between screens."
|
||||
[view-id]
|
||||
(let [{:keys [type]} (get-config view-id)
|
||||
{:keys [background-color bar-style hidden
|
||||
network-activity-indicator-visible
|
||||
translucent]}
|
||||
(case type
|
||||
:black (styles/status-bar-black)
|
||||
(styles/status-bar-default))]
|
||||
(when bar-style
|
||||
(.setBarStyle ^js react/status-bar-class (clj->js bar-style)) true)
|
||||
(when (and background-color platform/android?)
|
||||
(.setBackgroundColor ^js react/status-bar-class (clj->js background-color)))
|
||||
(when hidden
|
||||
(.setHidden ^js react/status-bar-class (clj->js hidden)))
|
||||
(when network-activity-indicator-visible
|
||||
(.setNetworkActivityIndicatorVisible
|
||||
^js react/status-bar-class
|
||||
(clj->js network-activity-indicator-visible)))
|
||||
(when translucent
|
||||
(.setTranslucent ^js react/status-bar-class (clj->js translucent)))))
|
|
@ -1,126 +1,25 @@
|
|||
(ns status-im.ui.components.tabbar.core
|
||||
(:require [oops.core :refer [oget]]
|
||||
[quo.gesture-handler :as gesture-handler]
|
||||
[re-frame.core :as re-frame]
|
||||
[reagent.core :as reagent]
|
||||
[cljs-bean.core :refer [bean]]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[quo.components.safe-area :as safe-area]
|
||||
[status-im.ui.screens.routing.core :as navigation]
|
||||
[quo.animated :as animated]
|
||||
[quo.react-native :as rn]
|
||||
[status-im.ui.components.badge :as badge]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.tabbar.styles :as tabs.styles]
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[status-im.utils.platform :as platform]))
|
||||
|
||||
(defn main-tab? [view-id]
|
||||
(contains?
|
||||
#{:chat-stack :browser-stack :wallet-stack :profile-stack :status-stack
|
||||
:status :home :wallet :empty-tab :my-profile :wallet-onboarding-setup}
|
||||
view-id))
|
||||
(defn get-height []
|
||||
(if platform/android?
|
||||
56
|
||||
(if platform/iphone-x?
|
||||
84
|
||||
50)))
|
||||
|
||||
(def tabs-list-data
|
||||
(->>
|
||||
[{:nav-stack :chat-stack
|
||||
:content {:title (i18n/label :t/chat)
|
||||
:icon :main-icons/message}
|
||||
:count-subscription :chats/unread-messages-number
|
||||
:accessibility-label :home-tab-button}
|
||||
{:nav-stack :browser-stack
|
||||
:content {:title (i18n/label :t/browser)
|
||||
:icon :main-icons/browser}
|
||||
:accessibility-label :dapp-tab-button}
|
||||
{:nav-stack :wallet-stack
|
||||
:content {:title (i18n/label :t/wallet)
|
||||
:icon :main-icons/wallet}
|
||||
:accessibility-label :wallet-tab-button}
|
||||
{:nav-stack :status-stack
|
||||
:content {:title (i18n/label :t/status)
|
||||
:icon :main-icons/status}
|
||||
:accessibility-label :status-tab-button}
|
||||
{:nav-stack :profile-stack
|
||||
:content {:title (i18n/label :t/profile)
|
||||
:icon :main-icons/user-profile}
|
||||
:count-subscription :get-profile-unread-messages-number
|
||||
:accessibility-label :profile-tab-button}]
|
||||
(remove nil?)
|
||||
(map-indexed vector)))
|
||||
(defn chat-tab []
|
||||
(let [count-subscription @(re-frame/subscribe [:chats/unread-messages-number])]
|
||||
(re-frame/dispatch [:change-tab-count :chat count-subscription])
|
||||
nil))
|
||||
|
||||
(defn tab []
|
||||
(fn [{:keys [icon label active? nav-stack on-press
|
||||
accessibility-label count-subscription]}]
|
||||
(let [count (when count-subscription @(re-frame/subscribe [count-subscription]))]
|
||||
[react/view {:style tabs.styles/touchable-container}
|
||||
[gesture-handler/touchable-without-feedback
|
||||
{:style {:height "100%"
|
||||
:width "100%"}
|
||||
:on-press on-press
|
||||
:accessibility-label accessibility-label}
|
||||
[react/view {:style tabs.styles/tab-container}
|
||||
[react/view {:style tabs.styles/icon-container}
|
||||
[icons/icon icon (tabs.styles/icon active?)]
|
||||
(when count
|
||||
(cond
|
||||
(or (pos? count) (pos? (:other count)))
|
||||
[react/view {:style (if (= nav-stack :chat-stack)
|
||||
tabs.styles/message-counter
|
||||
tabs.styles/counter)}
|
||||
[badge/message-counter (or (:other count) count) true]]
|
||||
(pos? (:public count))
|
||||
[react/view {:style (tabs.styles/counter-public-container)}
|
||||
[react/view {:style tabs.styles/counter-public
|
||||
:accessibility-label :public-unread-badge}]]))]
|
||||
[react/view {:style tabs.styles/tab-title-container}
|
||||
[react/text {:style (tabs.styles/tab-title active?)}
|
||||
label]]]]])))
|
||||
(defn profile-tab []
|
||||
(let [count-subscription @(re-frame/subscribe [:get-profile-unread-messages-number])]
|
||||
(re-frame/dispatch [:change-tab-count :profile count-subscription])
|
||||
nil))
|
||||
|
||||
(def tabs
|
||||
(reagent/adapt-react-class
|
||||
(fn [props]
|
||||
(let [{:keys [navigate index route popToTop]} (bean props)
|
||||
{:keys [keyboard-shown]
|
||||
:or {keyboard-shown false}} (when platform/android? (rn/use-keyboard))
|
||||
{:keys [bottom]} (safe-area/use-safe-area)
|
||||
animated-visible (animated/use-timing-transition
|
||||
(main-tab? (keyword route))
|
||||
{:duration 150})
|
||||
keyboard-visible (animated/use-timing-transition
|
||||
keyboard-shown
|
||||
{:duration 200})]
|
||||
(reagent/as-element
|
||||
[animated/view {:style (tabs.styles/tabs-wrapper keyboard-shown keyboard-visible)
|
||||
:pointer-events (if keyboard-shown "none" "auto")}
|
||||
[animated/view {:style (tabs.styles/space-handler bottom)
|
||||
:pointer-events "none"}]
|
||||
[animated/view {:style (tabs.styles/animated-container animated-visible bottom)}
|
||||
(for [[route-index
|
||||
{:keys [nav-stack accessibility-label count-subscription content]}]
|
||||
tabs-list-data
|
||||
:let [{:keys [icon title]} content]]
|
||||
^{:key nav-stack}
|
||||
[tab
|
||||
{:icon icon
|
||||
:label title
|
||||
:on-press #(if (= (str index) (str route-index))
|
||||
(popToTop)
|
||||
(navigate (name nav-stack)))
|
||||
:accessibility-label accessibility-label
|
||||
:count-subscription count-subscription
|
||||
:active? (= (str index) (str route-index))
|
||||
:nav-stack nav-stack}])]
|
||||
[react/view
|
||||
{:style (tabs.styles/ios-titles-cover bottom)}]])))))
|
||||
|
||||
(defn tabbar [props]
|
||||
(let [navigate (oget props "navigation" "navigate")
|
||||
pop-to-top (oget props "navigation" "popToTop")
|
||||
state (bean (oget props "state"))
|
||||
index (get state :index)]
|
||||
(reagent/as-element
|
||||
[tabs {:navigate navigate
|
||||
:state (oget props "state")
|
||||
:popToTop pop-to-top
|
||||
:route (navigation/get-active-route-name state)
|
||||
:index index}])))
|
||||
(defn tabs-counts-subscriptions []
|
||||
[:<>
|
||||
[chat-tab]
|
||||
[profile-tab]])
|
|
@ -1,116 +0,0 @@
|
|||
(ns status-im.ui.components.tabbar.styles
|
||||
(:require [quo.animated :as animated]
|
||||
[status-im.ui.components.colors :as colors]
|
||||
[status-im.utils.platform :as platform]))
|
||||
|
||||
(def tabs-height 52)
|
||||
|
||||
(def minimized-tabs-height 36)
|
||||
|
||||
(def tabs-diff (- tabs-height minimized-tabs-height))
|
||||
|
||||
(def counter
|
||||
{:right 0
|
||||
:top 0
|
||||
:position :absolute})
|
||||
|
||||
(defn counter-public-container []
|
||||
{:right 2
|
||||
:top 0
|
||||
:position :absolute
|
||||
:border-radius 8
|
||||
:width 16
|
||||
:height 16
|
||||
:justify-content :center
|
||||
:align-items :center
|
||||
:background-color colors/white})
|
||||
|
||||
(def counter-public
|
||||
{:background-color colors/blue
|
||||
:width 12
|
||||
:border-radius 6
|
||||
:height 12})
|
||||
|
||||
;; NOTE: Extra padding to allow badge width to be up to 42 (in case of 99+)
|
||||
;; 42 Max allowed width, 24 icon width as per spec, 16 left pos as per spec.
|
||||
(def ^:private message-counter-left (+ (/ (- 42 24) 2) 16))
|
||||
|
||||
(def message-counter
|
||||
{:left message-counter-left
|
||||
:bottom 6
|
||||
:position :absolute})
|
||||
|
||||
(def touchable-container
|
||||
{:flex 1
|
||||
:height tabs-height})
|
||||
|
||||
(def tab-container
|
||||
{:flex 1
|
||||
:height tabs-height
|
||||
:align-items :center
|
||||
:padding-top 6
|
||||
:padding-bottom 5})
|
||||
|
||||
(def icon-container
|
||||
{:height 24
|
||||
:width 42
|
||||
:align-items :center
|
||||
:justify-content :center})
|
||||
|
||||
(defn icon [active?]
|
||||
{:color (if active? colors/blue colors/gray)
|
||||
:height 24
|
||||
:width 24})
|
||||
|
||||
(def tab-title-container
|
||||
{:align-self :stretch
|
||||
:height 13
|
||||
:margin-top 4
|
||||
:align-items :center
|
||||
:justify-content :center})
|
||||
|
||||
(defn tab-title [active?]
|
||||
{:color (if active? colors/blue colors/gray)
|
||||
:line-height 13
|
||||
:font-size 11})
|
||||
|
||||
(defn animated-container [visible? inset]
|
||||
(merge
|
||||
{:flex-direction :row
|
||||
:background-color colors/white
|
||||
:position :absolute
|
||||
:left 0
|
||||
:right 0
|
||||
:height tabs-height
|
||||
:bottom inset
|
||||
:transform [{:translateY (animated/mix visible? tabs-diff 0)}]}
|
||||
(if platform/android?
|
||||
{:border-top-width 1
|
||||
:border-top-color colors/gray-lighter}
|
||||
{:shadow-radius 4
|
||||
:shadow-offset {:width 0 :height -5}
|
||||
:shadow-opacity 0.3
|
||||
:shadow-color (if (colors/dark?)
|
||||
"rgba(0, 0, 0, 0.75)"
|
||||
"rgba(0, 9, 26, 0.12)")})))
|
||||
|
||||
(defn ios-titles-cover [inset]
|
||||
{:background-color colors/white
|
||||
:position :absolute
|
||||
:height tabs-diff
|
||||
:align-self :stretch
|
||||
:bottom (- inset tabs-diff)
|
||||
:right 0
|
||||
:left 0})
|
||||
|
||||
(defn tabs-wrapper [keyboard visible]
|
||||
(merge {:padding-horizontal 8
|
||||
:left 0
|
||||
:right 0
|
||||
:bottom 0
|
||||
:transform [{:translateY (animated/mix visible 0 tabs-height)}]}
|
||||
(when keyboard
|
||||
{:position :absolute})))
|
||||
|
||||
(defn space-handler [inset]
|
||||
{:height (+ inset minimized-tabs-height)})
|
|
@ -5,40 +5,37 @@
|
|||
[status-im.ui.components.copyable-text :as copyable-text]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[quo.core :as quo]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.topbar :as topbar])
|
||||
[status-im.ui.components.react :as react])
|
||||
(:require-macros [status-im.utils.views :as views]))
|
||||
|
||||
(views/defview about-app []
|
||||
(views/letsubs [app-version [:get-app-short-version]
|
||||
node-version [:get-app-node-version]]
|
||||
[react/view {:flex 1 :background-color colors/white}
|
||||
[topbar/topbar {:title (i18n/label :t/about-app)}]
|
||||
[react/scroll-view
|
||||
[react/scroll-view
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/privacy-policy)
|
||||
:accessibility-label :privacy-policy
|
||||
:on-press
|
||||
#(re-frame/dispatch
|
||||
[:privacy-policy/privacy-policy-button-pressed])
|
||||
:chevron true}]
|
||||
[copyable-text/copyable-text-view
|
||||
{:copied-text app-version}
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:title (i18n/label :t/privacy-policy)
|
||||
:accessibility-label :privacy-policy
|
||||
:on-press
|
||||
#(re-frame/dispatch
|
||||
[:privacy-policy/privacy-policy-button-pressed])
|
||||
:chevron true}]
|
||||
[copyable-text/copyable-text-view
|
||||
{:copied-text app-version}
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:accessibility-label :app-version
|
||||
:title (i18n/label :t/version)
|
||||
:accessory :text
|
||||
:accessory-text app-version}]]
|
||||
[copyable-text/copyable-text-view
|
||||
{:copied-text node-version}
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:accessibility-label :node-version
|
||||
:title (i18n/label :t/node-version)
|
||||
:accessory :text
|
||||
:accessory-text node-version}]]]]))
|
||||
:accessibility-label :app-version
|
||||
:title (i18n/label :t/version)
|
||||
:accessory :text
|
||||
:accessory-text app-version}]]
|
||||
[copyable-text/copyable-text-view
|
||||
{:copied-text node-version}
|
||||
[quo/list-item
|
||||
{:size :small
|
||||
:accessibility-label :node-version
|
||||
:title (i18n/label :t/node-version)
|
||||
:accessory :text
|
||||
:accessory-text node-version}]]]))
|
||||
|
||||
(views/defview learn-more-sheet []
|
||||
(views/letsubs [{:keys [title content]} [:bottom-sheet/options]]
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
[status-im.ui.components.colors :as colors]
|
||||
[status-im.ui.components.react :as react]
|
||||
[quo.core :as quo]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.add-new.db :as db]
|
||||
[status-im.chat.models :as chat.models]
|
||||
[status-im.ui.components.icons.icons :as icons])
|
||||
|
@ -80,31 +79,28 @@
|
|||
(views/defview new-public-chat []
|
||||
(views/letsubs [topic [:public-group-topic]
|
||||
error [:public-chat.new/topic-error-message]]
|
||||
[react/view {:style {:flex 1}}
|
||||
[topbar/topbar {:title (i18n/label :t/new-public-group-chat)
|
||||
:modal? true}]
|
||||
[react/scroll-view {:style {:flex 1}}
|
||||
[react/view {:padding-horizontal 16}
|
||||
[react/view {:align-items :center :padding-vertical 8}
|
||||
[react/image {:source (:new-chat-header resources/ui)
|
||||
:style {:width 160 :height 160}}]]
|
||||
[react/text {:style {:text-align :center :margin-bottom 16 :line-height 22}}
|
||||
(i18n/label :t/public-chat-description)]
|
||||
[chat-name-input topic error]]
|
||||
[react/view {:margin-top 32}
|
||||
(for [[section chats] (chat.models/chats)]
|
||||
^{:key section}
|
||||
[react/view
|
||||
[react/view {:margin-right 16 :padding-left 16 :padding-vertical 3
|
||||
:border-bottom-width 1 :border-bottom-color colors/gray-lighter
|
||||
:border-top-width 1 :border-top-color colors/gray-lighter
|
||||
:border-right-width 1 :border-right-color colors/gray-lighter
|
||||
:border-bottom-right-radius 14 :border-top-right-radius 14}
|
||||
[quo/text {:weight :medium} section]]
|
||||
[react/view {:flex-direction :row :flex-wrap :wrap :margin-vertical 8 :padding-horizontal 16}
|
||||
(let [lang-topic (get-language-topic)
|
||||
chats (if (and (= section-featured section) lang-topic)
|
||||
(conj chats lang-topic)
|
||||
chats)]
|
||||
(for [chat chats]
|
||||
(render-topic chat)))]])]]]))
|
||||
[react/scroll-view {:style {:flex 1}}
|
||||
[react/view {:padding-horizontal 16}
|
||||
[react/view {:align-items :center :padding-vertical 8}
|
||||
[react/image {:source (:new-chat-header resources/ui)
|
||||
:style {:width 160 :height 160}}]]
|
||||
[react/text {:style {:text-align :center :margin-bottom 16 :line-height 22}}
|
||||
(i18n/label :t/public-chat-description)]
|
||||
[chat-name-input topic error]]
|
||||
[react/view {:margin-top 32}
|
||||
(for [[section chats] (chat.models/chats)]
|
||||
^{:key section}
|
||||
[react/view
|
||||
[react/view {:margin-right 16 :padding-left 16 :padding-vertical 3
|
||||
:border-bottom-width 1 :border-bottom-color colors/gray-lighter
|
||||
:border-top-width 1 :border-top-color colors/gray-lighter
|
||||
:border-right-width 1 :border-right-color colors/gray-lighter
|
||||
:border-bottom-right-radius 14 :border-top-right-radius 14}
|
||||
[quo/text {:weight :medium} section]]
|
||||
[react/view {:flex-direction :row :flex-wrap :wrap :margin-vertical 8 :padding-horizontal 16}
|
||||
(let [lang-topic (get-language-topic)
|
||||
chats (if (and (= section-featured section) lang-topic)
|
||||
(conj chats lang-topic)
|
||||
chats)]
|
||||
(for [chat chats]
|
||||
(render-topic chat)))]])]]))
|
||||
|
|
|
@ -4,9 +4,7 @@
|
|||
[quo.core :as quo]
|
||||
[status-im.utils.config :as config]
|
||||
[status-im.utils.platform :as platform]
|
||||
[status-im.ui.components.list.views :as list]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.topbar :as topbar])
|
||||
[status-im.ui.components.list.views :as list])
|
||||
(:require-macros [status-im.utils.views :as views]))
|
||||
|
||||
(defn- normal-mode-settings-data [{:keys [network-name
|
||||
|
@ -114,16 +112,14 @@
|
|||
communities-enabled? [:communities/enabled?]
|
||||
current-log-level [:log-level/current-log-level]
|
||||
current-fleet [:fleets/current-fleet]]
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar {:title (i18n/label :t/advanced)}]
|
||||
[list/flat-list
|
||||
{:data (flat-list-data
|
||||
{:network-name network-name
|
||||
:current-log-level current-log-level
|
||||
:communities-enabled? communities-enabled?
|
||||
:current-fleet current-fleet
|
||||
:dev-mode? false
|
||||
:waku-bloom-filter-mode waku-bloom-filter-mode
|
||||
:webview-debug webview-debug})
|
||||
:key-fn (fn [_ i] (str i))
|
||||
:render-fn render-item}]]))
|
||||
[list/flat-list
|
||||
{:data (flat-list-data
|
||||
{:network-name network-name
|
||||
:current-log-level current-log-level
|
||||
:communities-enabled? communities-enabled?
|
||||
:current-fleet current-fleet
|
||||
:dev-mode? false
|
||||
:waku-bloom-filter-mode waku-bloom-filter-mode
|
||||
:webview-debug webview-debug})
|
||||
:key-fn (fn [_ i] (str i))
|
||||
:render-fn render-item}]))
|
||||
|
|
|
@ -2,7 +2,6 @@
|
|||
(:require-macros [status-im.utils.views :as views])
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.react-native.resources :as resources]
|
||||
[quo.core :as quo]
|
||||
[status-im.ui.components.colors :as colors]
|
||||
|
@ -15,7 +14,10 @@
|
|||
|
||||
(defn button [label icon theme selected?]
|
||||
[react/touchable-highlight
|
||||
{:on-press #(re-frame/dispatch [:multiaccounts.ui/appearance-switched theme])}
|
||||
{:on-press #(do (re-frame/dispatch [:multiaccounts.ui/appearance-switched theme])
|
||||
(re-frame/dispatch [:init-root :chat-stack])
|
||||
(re-frame/dispatch [:navigate-change-tab :profile])
|
||||
(re-frame/dispatch [:navigate-to :appearance]))}
|
||||
[react/view (merge {:align-items :center :padding 8 :border-radius 20}
|
||||
(when selected?
|
||||
{:background-color colors/blue-light}))
|
||||
|
@ -25,8 +27,7 @@
|
|||
|
||||
(views/defview appearance []
|
||||
(views/letsubs [{:keys [appearance profile-pictures-visibility]} [:multiaccount]]
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar {:title (i18n/label :t/appearance)}]
|
||||
[:<>
|
||||
[quo/list-header (i18n/label :t/preference)]
|
||||
[react/view {:flex-direction :row :padding-horizontal 8
|
||||
:justify-content :space-between :margin-vertical 16}
|
||||
|
@ -51,9 +52,7 @@
|
|||
|
||||
(views/defview profile-pic []
|
||||
(views/letsubs [{:keys [profile-pictures-visibility]} [:multiaccount]]
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar {:title (i18n/label :t/show-profile-pictures)}]
|
||||
[react/view {:margin-top 8}
|
||||
[radio-item constants/profile-pictures-visibility-everyone profile-pictures-visibility]
|
||||
[radio-item constants/profile-pictures-visibility-contacts-only profile-pictures-visibility]
|
||||
[radio-item constants/profile-pictures-visibility-none profile-pictures-visibility]]]))
|
||||
[react/view {:margin-top 8}
|
||||
[radio-item constants/profile-pictures-visibility-everyone profile-pictures-visibility]
|
||||
[radio-item constants/profile-pictures-visibility-contacts-only profile-pictures-visibility]
|
||||
[radio-item constants/profile-pictures-visibility-none profile-pictures-visibility]]))
|
|
@ -28,7 +28,8 @@
|
|||
name (get-in manage-bootnode [:name :value])
|
||||
is-valid? (empty? validation-errors)
|
||||
invalid-url? (contains? validation-errors :url)]
|
||||
[react/keyboard-avoiding-view {:flex 1}
|
||||
[react/keyboard-avoiding-view {:style {:flex 1}
|
||||
:ignore-offset true}
|
||||
[topbar/topbar {:title (i18n/label (if id :t/bootnode-details :t/add-bootnode))}]
|
||||
[react/scroll-view {:keyboard-should-persist-taps :handled}
|
||||
[react/view styles/edit-bootnode-view
|
||||
|
|
|
@ -23,7 +23,7 @@
|
|||
(views/defview bootnodes-settings []
|
||||
(views/letsubs [bootnodes-enabled [:custom-bootnodes/enabled?]
|
||||
bootnodes [:custom-bootnodes/network-bootnodes]]
|
||||
[react/view {:flex 1}
|
||||
[:<>
|
||||
[topbar/topbar {:title (i18n/label :t/bootnodes-settings)
|
||||
:right-accessories
|
||||
[{:icon :main-icons/add
|
||||
|
|
|
@ -42,7 +42,7 @@
|
|||
:title (i18n/label :t/edit)
|
||||
:accessibility-label :edit-bookmark
|
||||
:icon :main-icons/edit
|
||||
:on-press #(hide-sheet-and-dispatch [:navigate-to :new-bookmark bookmark])}]
|
||||
:on-press #(hide-sheet-and-dispatch [:open-modal :new-bookmark bookmark])}]
|
||||
[quo/list-item
|
||||
{:theme :negative
|
||||
:title (i18n/label :t/delete)
|
||||
|
@ -112,7 +112,8 @@
|
|||
dapps-account [:dapps-account]
|
||||
url-text (atom nil)]
|
||||
(let [bookmarks (vals bookmarks)]
|
||||
[react/keyboard-avoiding-view {:style {:flex 1}}
|
||||
[react/keyboard-avoiding-view {:style {:flex 1}
|
||||
:ignore-offset true}
|
||||
[quo/text-input {:on-change-text #(reset! url-text %)
|
||||
:on-submit-editing #(re-frame/dispatch [:browser.ui/open-url @url-text])
|
||||
:placeholder (i18n/label :t/enter-url)
|
||||
|
|
|
@ -76,7 +76,10 @@
|
|||
:accessibility-label :open-chat
|
||||
:title (str "#" topic)
|
||||
:subtitle (i18n/label :t/open-chat)
|
||||
:on-press #(hide-sheet-and-dispatch [:chat.ui/start-public-chat topic {:navigation-reset? true}])
|
||||
:on-press #(do
|
||||
(re-frame/dispatch [:navigate-change-tab :chat])
|
||||
(re-frame/dispatch [:pop-to-root-tab :chat-stack])
|
||||
(hide-sheet-and-dispatch [:chat.ui/start-public-chat topic {:navigation-reset? true}]))
|
||||
:chevron true}]
|
||||
[components/separator]])
|
||||
(if connected?
|
||||
|
|
|
@ -89,10 +89,7 @@
|
|||
[chat-icon/custom-icon-view-list (:name dapps-account) (:color dapps-account) 32]]
|
||||
|
||||
[react/touchable-highlight
|
||||
{:on-press #(do
|
||||
(when empty-tab
|
||||
(re-frame/dispatch [:navigate-to :browser]))
|
||||
(re-frame/dispatch [:navigate-to :browser-tabs]))
|
||||
{:on-press #(re-frame/dispatch [:set-stack-root :browser-stack :browser-tabs])
|
||||
:accessibility-label :browser-open-tabs}
|
||||
[icons/icon :main-icons/tabs]]
|
||||
|
||||
|
|
|
@ -4,13 +4,12 @@
|
|||
[cljs-bean.core :as bean]
|
||||
[quo.design-system.colors :as colors]
|
||||
[status-im.ui.screens.chat.components.hooks :refer [use-keyboard-dimension]]
|
||||
[status-im.ui.components.tabbar.styles :as tabs.styles]
|
||||
[quo.react :as react]
|
||||
[quo.platform :as platform]
|
||||
[quo.react-native :as rn]
|
||||
[status-im.ui.components.tabbar.core :as tabbar]
|
||||
[quo.components.safe-area :refer [use-safe-area]]))
|
||||
|
||||
(def tabbar-height tabs.styles/minimized-tabs-height)
|
||||
(def duration 250)
|
||||
|
||||
(defn create-pan-responder [y pan-active]
|
||||
|
@ -52,8 +51,8 @@
|
|||
|
||||
visible (or has-panel (pos? keyboard-height))
|
||||
anim-visible (animated/use-value visible)
|
||||
kb-on-screen (if platform/android? 0 (* -1 (- keyboard-height bottom tabbar-height)))
|
||||
panel-on-screen (* -1 (- keyboard-max-height bottom tabbar-height))
|
||||
kb-on-screen (if platform/android? 0 (* -1 (- keyboard-height bottom (tabbar/get-height))))
|
||||
panel-on-screen (* -1 (- keyboard-max-height bottom (tabbar/get-height)))
|
||||
max-delta (min 0 (if has-panel panel-on-screen kb-on-screen))
|
||||
panel-height (* -1 max-delta)
|
||||
end-position (- keyboard-end-position (when has-panel keyboard-max-height))
|
||||
|
@ -117,7 +116,7 @@
|
|||
bar-height :height} (rn/use-layout)
|
||||
|
||||
visible has-panel
|
||||
panel-on-screen (* -1 (- keyboard-max-height bottom tabbar-height))
|
||||
panel-on-screen (* -1 (- keyboard-max-height bottom (tabbar/get-height)))
|
||||
max-delta (min 0 (if has-panel panel-on-screen 0))
|
||||
panel-height (* -1 max-delta)
|
||||
on-update (fn []
|
||||
|
|
|
@ -59,7 +59,7 @@
|
|||
:style {:margin-top 2}}
|
||||
(i18n/label :t/once-enabled-share-metadata)]]
|
||||
[quo/separator]
|
||||
[quo/button {:on-press #(re-frame/dispatch [:navigate-to :link-preview-settings])
|
||||
[quo/button {:on-press #(re-frame/dispatch [:open-modal :link-preview-settings])
|
||||
:type :secondary}
|
||||
(i18n/label :enable)]
|
||||
[quo/separator]
|
||||
|
|
|
@ -50,6 +50,3 @@
|
|||
(when (and group-chat (not invitation-admin) (not= chat-type constants/community-chat-type))
|
||||
[group-last-activity {:contacts contacts
|
||||
:public? public?}])]]))
|
||||
|
||||
(defn toolbar-content-view []
|
||||
[toolbar-content-view-inner @(re-frame/subscribe [:chats/current-chat])])
|
||||
|
|
|
@ -8,7 +8,6 @@
|
|||
[status-im.ui.components.icons.icons :as icons]
|
||||
[status-im.ui.components.list.views :as list]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.screens.chat.sheets :as sheets]
|
||||
[quo.animated :as animated]
|
||||
[quo.react-native :as rn]
|
||||
[status-im.ui.screens.chat.audio-message.views :as audio-message]
|
||||
|
@ -32,27 +31,7 @@
|
|||
[status-im.constants :as constants]
|
||||
[status-im.utils.platform :as platform]
|
||||
[status-im.utils.utils :as utils]
|
||||
[quo.design-system.colors :as quo.colors]))
|
||||
|
||||
(defn topbar []
|
||||
;;we don't use topbar component, because we want chat view as simple (fast) as possible
|
||||
[react/view {:height 56 :border-bottom-width 1 :border-bottom-color (:ui-01 @quo.colors/theme)}
|
||||
[react/touchable-highlight {:on-press-in #(re-frame/dispatch [:navigate-back])
|
||||
:accessibility-label :back-button
|
||||
:style {:height 56 :width 40 :align-items :center :justify-content :center
|
||||
:padding-left 16}}
|
||||
[icons/icon :main-icons/arrow-left]]
|
||||
[react/view {:flex 1 :left 52 :right 52 :top 0 :bottom 0 :position :absolute}
|
||||
[toolbar-content/toolbar-content-view]]
|
||||
[react/touchable-highlight {:on-press-in #(re-frame/dispatch [:bottom-sheet/show-sheet
|
||||
{:content (fn []
|
||||
[sheets/current-chat-actions])
|
||||
:height 256}])
|
||||
:accessibility-label :chat-menu-button
|
||||
:style {:right 0 :top 0 :bottom 0 :position :absolute
|
||||
:height 56 :width 40 :align-items :center :justify-content :center
|
||||
:padding-right 16}}
|
||||
[icons/icon :main-icons/more]]])
|
||||
[status-im.ui.screens.chat.sheets :as sheets]))
|
||||
|
||||
(defn invitation-requests [chat-id admins]
|
||||
(let [current-pk @(re-frame/subscribe [:multiaccount/public-key])
|
||||
|
@ -320,8 +299,18 @@
|
|||
:inverted (when platform/ios? true)
|
||||
:style (when platform/android? {:scaleY -1})})]))
|
||||
|
||||
(defn topbar-button []
|
||||
(re-frame/dispatch [:bottom-sheet/show-sheet
|
||||
{:content (fn []
|
||||
[sheets/current-chat-actions])
|
||||
:height 256}]))
|
||||
|
||||
(defn topbar []
|
||||
[toolbar-content/toolbar-content-view-inner @(re-frame/subscribe [:chats/current-chat])])
|
||||
|
||||
(defn chat []
|
||||
(let [bottom-space (reagent/atom 0)
|
||||
(let [curr-chat-id (:chat-id @(re-frame/subscribe [:chats/current-chat-chat-view]))
|
||||
bottom-space (reagent/atom 0)
|
||||
panel-space (reagent/atom 52)
|
||||
active-panel (reagent/atom nil)
|
||||
position-y (animated/value 0)
|
||||
|
@ -333,7 +322,8 @@
|
|||
set-active-panel (get-set-active-panel active-panel)
|
||||
on-close #(set-active-panel nil)]
|
||||
(reagent/create-class
|
||||
{:component-will-unmount #(re-frame/dispatch-sync [:close-chat])
|
||||
{:component-will-unmount #(re-frame/dispatch-sync [:close-chat curr-chat-id])
|
||||
:component-did-mount (fn [] (js/setTimeout #(re-frame/dispatch [:set :ignore-close-chat false]) 200))
|
||||
:reagent-render
|
||||
(fn []
|
||||
(let [{:keys [chat-id show-input? group-chat admins invitation-admin] :as chat}
|
||||
|
@ -341,7 +331,6 @@
|
|||
@(re-frame/subscribe [:chats/current-chat-chat-view])
|
||||
max-bottom-space (max @bottom-space @panel-space)]
|
||||
[:<>
|
||||
[topbar]
|
||||
[connectivity/loading-indicator]
|
||||
(when chat-id
|
||||
(if group-chat
|
||||
|
|
|
@ -6,8 +6,8 @@
|
|||
[clojure.string :as string]
|
||||
[status-im.communities.core :as communities]))
|
||||
|
||||
(defn view [route]
|
||||
(let [chat-id (get-in route [:route :params :chat-id])
|
||||
(defn view []
|
||||
(let [{:keys [chat-id]} (<sub [:get-screen-params])
|
||||
current-chat (<sub [:chat-by-id chat-id])
|
||||
{:keys [chat-name color description community-id]} current-chat
|
||||
{:keys [admin]} (<sub [:communities/community community-id])]
|
||||
|
|
|
@ -194,8 +194,8 @@
|
|||
[topbar/topbar {:title (i18n/label :t/not-found)}]
|
||||
[blank-page (i18n/label :t/community-info-not-found)]])
|
||||
|
||||
(defn community [route]
|
||||
(let [{:keys [community-id]} (get-in route [:route :params])
|
||||
(defn community []
|
||||
(let [{:keys [community-id]} (<sub [:get-screen-params])
|
||||
{:keys [id chats name images members permissions color joined can-request-access?
|
||||
can-join? requested-to-join-at admin]
|
||||
:as community} (<sub [:communities/community community-id])]
|
||||
|
|
|
@ -6,7 +6,6 @@
|
|||
[status-im.utils.handlers :refer [>evt <sub]]
|
||||
[status-im.communities.core :as communities]
|
||||
[status-im.ui.components.toolbar :as toolbar]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.utils.image :as utils.image]
|
||||
[quo.design-system.colors :as colors]
|
||||
[status-im.ui.components.react :as react]
|
||||
|
@ -161,8 +160,7 @@
|
|||
|
||||
(defn view []
|
||||
(let [{:keys [name description]} (<sub [:communities/create])]
|
||||
[rn/view {:style {:flex 1}}
|
||||
[topbar/topbar {:title (i18n/label :t/new-community-title)}]
|
||||
[:<>
|
||||
[form]
|
||||
[toolbar/toolbar
|
||||
{:show-border? true
|
||||
|
|
|
@ -5,7 +5,6 @@
|
|||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ui.components.toolbar :as toolbar]
|
||||
[status-im.communities.core :as communities]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.utils.debounce :as debounce]
|
||||
[status-im.utils.handlers :refer [>evt <sub]]
|
||||
[status-im.ui.screens.communities.create :as create]))
|
||||
|
@ -46,7 +45,6 @@
|
|||
(defn view []
|
||||
(let [{:keys [name description]} (<sub [:communities/create-channel])]
|
||||
[:<>
|
||||
[topbar/topbar {:title (i18n/label :t/create-channel-title)}]
|
||||
[form]
|
||||
[toolbar/toolbar
|
||||
{:show-border? true
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
(ns status-im.ui.screens.communities.edit
|
||||
(:require [status-im.ui.components.topbar :as topbar]
|
||||
[quo.core :as quo]
|
||||
(:require [quo.core :as quo]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ui.screens.communities.create :as community.create]
|
||||
[status-im.utils.handlers :refer [>evt <sub]]
|
||||
|
@ -10,7 +9,6 @@
|
|||
(defn edit []
|
||||
(let [{:keys [name description]} (<sub [:communities/create])]
|
||||
[:<>
|
||||
[topbar/topbar {:title (i18n/label :t/community-edit-title)}]
|
||||
[community.create/form]
|
||||
[toolbar/toolbar
|
||||
{:show-border? true
|
||||
|
|
|
@ -5,14 +5,12 @@
|
|||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.utils.handlers :refer [>evt]]
|
||||
[status-im.communities.core :as communities]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.ui.components.toolbar :as toolbar]))
|
||||
|
||||
(defn view []
|
||||
(let [community-key (reagent/atom "")]
|
||||
(fn []
|
||||
[rn/view {:style {:flex 1}}
|
||||
[topbar/topbar {:title (i18n/label :t/import-community-title)}]
|
||||
[:<>
|
||||
[rn/scroll-view {:style {:flex 1}
|
||||
:content-container-style {:padding 16}}
|
||||
[rn/view {:style {:padding-bottom 16
|
||||
|
|
|
@ -42,9 +42,9 @@
|
|||
(defn invite []
|
||||
(let [user-pk (reagent/atom "")
|
||||
contacts-selected (reagent/atom #{})]
|
||||
(fn [route]
|
||||
(fn []
|
||||
(let [contacts-data (<sub [:contacts/active])
|
||||
invite? (get-in route [:route :params :invite?])
|
||||
{:keys [invite?]} (<sub [:get-screen-params])
|
||||
{:keys [permissions
|
||||
can-manage-users?]} (<sub [:communities/edited-community])
|
||||
selected @contacts-selected
|
||||
|
|
|
@ -85,8 +85,8 @@
|
|||
:title (i18n/label :t/membership-requests)}]
|
||||
[quo/separator {:style {:margin-vertical 8}}]]))
|
||||
|
||||
(defn members [route]
|
||||
(let [{:keys [community-id]} (get-in route [:route :params])
|
||||
(defn members []
|
||||
(let [{:keys [community-id]} (<sub [:get-screen-params])
|
||||
my-public-key (<sub [:multiaccount/public-key])
|
||||
{:keys [members
|
||||
permissions
|
||||
|
@ -108,9 +108,9 @@
|
|||
:key-fn identity
|
||||
:render-fn render-member}]]))
|
||||
|
||||
(defn members-container [route]
|
||||
(defn members-container []
|
||||
(reagent/create-class
|
||||
{:display-name "community-members-view"
|
||||
:component-did-mount (fn []
|
||||
(communities/fetch-requests-to-join! (get-in route [:route :params :community-id])))
|
||||
(communities/fetch-requests-to-join! (get (<sub [:get-screen-params]) :community-id)))
|
||||
:reagent-render members}))
|
||||
|
|
|
@ -1,6 +1,5 @@
|
|||
(ns status-im.ui.screens.communities.membership
|
||||
(:require [quo.react-native :as rn]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.ui.components.toolbar :as toolbar]
|
||||
[quo.core :as quo]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
|
@ -36,7 +35,6 @@
|
|||
(defn membership []
|
||||
(let [{:keys [membership]} (<sub [:communities/create])]
|
||||
[:<>
|
||||
[topbar/topbar {:title (i18n/label :t/membership-title)}]
|
||||
[rn/scroll-view {}
|
||||
(doall
|
||||
(for [[id o] options]
|
||||
|
|
|
@ -14,8 +14,8 @@
|
|||
[quo.react-native :as rn]
|
||||
[clojure.string :as string]))
|
||||
|
||||
(defn management [route]
|
||||
(let [{:keys [community-id]} (get-in route [:route :params])
|
||||
(defn management []
|
||||
(let [{:keys [community-id]} (<sub [:get-screen-params])
|
||||
requests-to-join (<sub [:communities/requests-to-join-for-community community-id])
|
||||
community (<sub [:communities/community community-id])
|
||||
{:keys [color members permissions description name admin]} community
|
||||
|
@ -98,9 +98,9 @@
|
|||
:title (i18n/label :t/delete)
|
||||
:on-press #(>evt [::communities/delete-community community-id])}])]]]))
|
||||
|
||||
(defn management-container [route]
|
||||
(defn management-container []
|
||||
(reagent/create-class
|
||||
{:display-name "community-profile-view"
|
||||
:component-did-mount (fn []
|
||||
(communities/fetch-requests-to-join! (get-in route [:route :params :community-id])))
|
||||
(communities/fetch-requests-to-join! (get (<sub [:get-screen-params]) :community-id)))
|
||||
:reagent-render management}))
|
||||
|
|
|
@ -42,9 +42,9 @@
|
|||
:icon [chat-icon/contact-icon-contacts-tab
|
||||
(multiaccounts/displayed-photo member)]}]))
|
||||
|
||||
(defn requests-to-join [route]
|
||||
(defn requests-to-join []
|
||||
(fn []
|
||||
(let [{:keys [community-id]} (get-in route [:route :params])
|
||||
(let [{:keys [community-id]} (<sub [:get-screen-params])
|
||||
requests (<sub [:communities/requests-to-join-for-community community-id])
|
||||
{:keys [can-manage-users?]} (<sub [:communities/community community-id])]
|
||||
[:<>
|
||||
|
@ -56,9 +56,9 @@
|
|||
:key-fn :id
|
||||
:render-fn render-request}]])))
|
||||
|
||||
(defn requests-to-join-container [route]
|
||||
(defn requests-to-join-container []
|
||||
(reagent/create-class
|
||||
{:display-name "community-requests-to-join-view"
|
||||
:component-did-mount (fn []
|
||||
(communities/fetch-requests-to-join! (get-in route [:route :params :community-id])))
|
||||
(communities/fetch-requests-to-join! (get (<sub [:get-screen-params]) :community-id)))
|
||||
:reagent-render requests-to-join}))
|
||||
|
|
|
@ -122,9 +122,8 @@
|
|||
(defn communities []
|
||||
(let [communities (<sub [:communities/section-list])
|
||||
communities-enabled? (<sub [:communities/enabled?])]
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar (cond-> {:title (i18n/label :t/communities)
|
||||
:modal? true}
|
||||
[:<>
|
||||
[topbar/topbar (cond-> {:title (i18n/label :t/communities)}
|
||||
communities-enabled?
|
||||
(assoc :right-accessories [{:icon :main-icons/more
|
||||
:accessibility-label :chat-menu-button
|
||||
|
|
|
@ -7,8 +7,7 @@
|
|||
[status-im.ui.components.chat-icon.screen :as chat-icon.screen]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ui.components.invite.views :as invite]
|
||||
[quo.core :as quo]
|
||||
[status-im.ui.components.topbar :as topbar])
|
||||
[quo.core :as quo])
|
||||
(:require-macros [status-im.utils.views :refer [defview letsubs]]))
|
||||
|
||||
(defn contacts-list-item [{:keys [public-key] :as contact}]
|
||||
|
@ -27,49 +26,42 @@
|
|||
:theme :accent
|
||||
:title (i18n/label :t/add-new-contact)
|
||||
:accessibility-label :add-new-contact-button
|
||||
:on-press #(re-frame/dispatch [:navigate-to :new-contact])}])
|
||||
:on-press #(re-frame/dispatch [:open-modal :new-contact])}])
|
||||
|
||||
(defview contacts-list []
|
||||
(letsubs [blocked-contacts-count [:contacts/blocked-count]
|
||||
contacts [:contacts/active]]
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar {:title (i18n/label :t/contacts)}]
|
||||
[react/scroll-view {:flex 1}
|
||||
[add-new-contact]
|
||||
(when (pos? blocked-contacts-count)
|
||||
[react/view {:margin-vertical 16}
|
||||
[quo/list-item
|
||||
{:title (i18n/label :t/blocked-users)
|
||||
:icon :main-icons/cancel
|
||||
:theme :negative
|
||||
:accessibility-label :blocked-users-list-button
|
||||
:chevron true
|
||||
:accessory :text
|
||||
:accessory-text blocked-contacts-count
|
||||
:on-press #(re-frame/dispatch [:navigate-to :blocked-users-list])}]])
|
||||
(if (seq contacts)
|
||||
[list.views/flat-list
|
||||
{:data contacts
|
||||
:key-fn :address
|
||||
:render-fn contacts-list-item}]
|
||||
[react/view {:align-items :center
|
||||
:flex 1
|
||||
:justify-content :center}
|
||||
[react/text {:style {:color colors/gray :margin-vertical 24}}
|
||||
(i18n/label :t/you-dont-have-contacts)]
|
||||
[invite/button]])]]))
|
||||
[react/scroll-view {:flex 1}
|
||||
[add-new-contact]
|
||||
(when (pos? blocked-contacts-count)
|
||||
[react/view {:margin-vertical 16}
|
||||
[quo/list-item
|
||||
{:title (i18n/label :t/blocked-users)
|
||||
:icon :main-icons/cancel
|
||||
:theme :negative
|
||||
:accessibility-label :blocked-users-list-button
|
||||
:chevron true
|
||||
:accessory :text
|
||||
:accessory-text blocked-contacts-count
|
||||
:on-press #(re-frame/dispatch [:navigate-to :blocked-users-list])}]])
|
||||
(if (seq contacts)
|
||||
[list.views/flat-list
|
||||
{:data contacts
|
||||
:key-fn :address
|
||||
:render-fn contacts-list-item}]
|
||||
[react/view {:align-items :center
|
||||
:flex 1
|
||||
:justify-content :center}
|
||||
[react/text {:style {:color colors/gray :margin-vertical 24}}
|
||||
(i18n/label :t/you-dont-have-contacts)]
|
||||
[invite/button]])]))
|
||||
|
||||
(defview blocked-users-list []
|
||||
(letsubs [blocked-contacts [:contacts/blocked]]
|
||||
[react/view {:flex 1
|
||||
:background-color colors/white}
|
||||
[topbar/topbar {:title (i18n/label :t/blocked-users)}]
|
||||
[react/scroll-view {:style {:background-color colors/white
|
||||
:padding-vertical 8}}
|
||||
[list.views/flat-list
|
||||
{:data blocked-contacts
|
||||
:key-fn :address
|
||||
:render-fn contacts-list-item
|
||||
:default-separator? true
|
||||
:enableEmptySections true
|
||||
:keyboardShouldPersistTaps :always}]]]))
|
||||
[list.views/flat-list
|
||||
{:data blocked-contacts
|
||||
:key-fn :address
|
||||
:render-fn contacts-list-item
|
||||
:default-separator? true
|
||||
:enableEmptySections true
|
||||
:keyboardShouldPersistTaps :always}]))
|
||||
|
|
|
@ -2,12 +2,10 @@
|
|||
(:require-macros [status-im.utils.views :as views])
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[reagent.core :as reagent]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[status-im.ui.components.list.views :as list]
|
||||
[status-im.ui.screens.currency-settings.styles :as styles]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.ui.components.search-input.view :as search-input]))
|
||||
|
||||
(defonce search-active? (reagent/atom false))
|
||||
|
@ -29,8 +27,7 @@
|
|||
{:component-will-unmount #(do
|
||||
(re-frame/dispatch [:search/currency-filter-changed nil])
|
||||
(reset! search-active? false))}
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar {:title (i18n/label :t/main-currency)}]
|
||||
[:<>
|
||||
[react/view {:flex 1}
|
||||
[react/view {:padding-horizontal 16
|
||||
:padding-vertical 10}
|
||||
|
|
|
@ -33,17 +33,15 @@
|
|||
|
||||
(views/defview dapps-permissions []
|
||||
(views/letsubs [permissions [:dapps/permissions]]
|
||||
[react/view {:flex 1 :background-color colors/white}
|
||||
[topbar/topbar {:title (i18n/label :t/dapps-permissions)}]
|
||||
[list/flat-list
|
||||
{:data (vec (map prepare-items (vals permissions)))
|
||||
:key-fn (fn [_ i] (str i))
|
||||
:render-fn quo/list-item}]]))
|
||||
[list/flat-list
|
||||
{:data (vec (map prepare-items (vals permissions)))
|
||||
:key-fn (fn [_ i] (str i))
|
||||
:render-fn quo/list-item}]))
|
||||
|
||||
(views/defview manage []
|
||||
(views/letsubs [{:keys [dapp permissions]} [:get-screen-params]
|
||||
{:keys [name]} [:dapps-account]]
|
||||
[react/view {:flex 1 :background-color colors/white}
|
||||
[:<>
|
||||
[topbar/topbar {:title dapp}]
|
||||
[list/flat-list
|
||||
{:data (vec (map (prepare-items-manage name) permissions))
|
||||
|
|
|
@ -4,8 +4,7 @@
|
|||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.constants :as constants]
|
||||
[quo.core :as quo]
|
||||
[re-frame.core :as re-frame]
|
||||
[status-im.ui.components.topbar :as topbar]))
|
||||
[re-frame.core :as re-frame]))
|
||||
|
||||
(def titles {constants/one-day (i18n/label :t/one-day)
|
||||
constants/three-days (i18n/label :t/three-days)
|
||||
|
@ -21,10 +20,8 @@
|
|||
|
||||
(views/defview default-sync-period-settings []
|
||||
(views/letsubs [{:keys [default-sync-period]} [:multiaccount]]
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar {:title (i18n/label :t/default-sync-period)}]
|
||||
[react/view {:margin-top 8}
|
||||
[radio-item constants/one-day default-sync-period]
|
||||
[radio-item constants/three-days default-sync-period]
|
||||
[radio-item constants/one-week default-sync-period]
|
||||
[radio-item constants/one-month default-sync-period]]]))
|
||||
[react/view {:margin-top 8}
|
||||
[radio-item constants/one-day default-sync-period]
|
||||
[radio-item constants/three-days default-sync-period]
|
||||
[radio-item constants/one-week default-sync-period]
|
||||
[radio-item constants/one-month default-sync-period]]))
|
||||
|
|
|
@ -79,9 +79,6 @@
|
|||
:main-icons/username)
|
||||
{:color colors/white-persist}]])
|
||||
|
||||
(defn- toolbar []
|
||||
[topbar/topbar {:title (i18n/label :t/ens-your-username)}])
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;; SEARCH SCREEN
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -207,7 +204,6 @@
|
|||
(views/letsubs [{:keys [state custom-domain? username]}
|
||||
[:ens/search-screen]]
|
||||
[react/keyboard-avoiding-view {:flex 1}
|
||||
[toolbar]
|
||||
[react/scroll-view {:style {:flex 1}
|
||||
;;NOTE required so that switching custom-domain
|
||||
;;works on first tap and persists keyboard
|
||||
|
@ -282,7 +278,6 @@
|
|||
chain amount-label sufficient-funds?]}
|
||||
@(re-frame/subscribe [:ens/checkout-screen])]
|
||||
[react/keyboard-avoiding-view {:flex 1}
|
||||
[toolbar]
|
||||
[react/scroll-view {:style {:flex 1}}
|
||||
[react/view {:style {:flex 1
|
||||
:align-items :center
|
||||
|
@ -381,7 +376,6 @@
|
|||
(views/defview confirmation []
|
||||
(views/letsubs [{:keys [state username]} [:ens/confirmation-screen]]
|
||||
[react/keyboard-avoiding-view {:flex 1}
|
||||
[toolbar]
|
||||
[react/view {:style {:flex 1
|
||||
:align-items :center
|
||||
:justify-content :center}}
|
||||
|
@ -423,7 +417,6 @@
|
|||
(views/defview terms []
|
||||
(views/letsubs [{:keys [contract]} [:get-screen-params :ens-terms]]
|
||||
[react/scroll-view {:style {:flex 1}}
|
||||
[topbar/topbar {:title (i18n/label :t/ens-terms-registration)}]
|
||||
[react/view {:style {:height 136 :background-color colors/gray-lighter :justify-content :center :align-items :center}}
|
||||
[react/text {:style {:text-align :center :typography :header :letter-spacing -0.275}}
|
||||
(i18n/label :t/ens-terms-header)]]
|
||||
|
@ -683,7 +676,6 @@
|
|||
(views/defview main []
|
||||
(views/letsubs [{:keys [names multiaccount show? registrations]} [:ens.main/screen]]
|
||||
[react/keyboard-avoiding-view {:style {:flex 1}}
|
||||
[topbar/topbar {:title (i18n/label :t/ens-usernames)}]
|
||||
(if (or (seq names) registrations)
|
||||
[registered names multiaccount show? registrations]
|
||||
[welcome])]))
|
||||
|
|
|
@ -1,11 +1,9 @@
|
|||
(ns status-im.ui.screens.fleet-settings.views
|
||||
(:require [re-frame.core :as re-frame]
|
||||
[status-im.node.core :as node]
|
||||
[status-im.i18n.i18n :as i18n]
|
||||
[status-im.ui.components.icons.icons :as icons]
|
||||
[status-im.ui.components.list.views :as list]
|
||||
[status-im.ui.components.react :as react]
|
||||
[status-im.ui.components.topbar :as topbar]
|
||||
[status-im.ui.screens.fleet-settings.styles :as styles])
|
||||
(:require-macros [status-im.utils.views :as views]))
|
||||
|
||||
|
@ -34,11 +32,8 @@
|
|||
(views/defview fleet-settings []
|
||||
(views/letsubs [custom-fleets [:fleets/custom-fleets]
|
||||
current-fleet [:fleets/current-fleet]]
|
||||
[react/view {:flex 1}
|
||||
[topbar/topbar {:title (i18n/label :t/fleet-settings)}]
|
||||
[react/view styles/wrapper
|
||||
[list/flat-list {:data (fleets custom-fleets)
|
||||
:default-separator? false
|
||||
:key-fn identity
|
||||
:render-data (name current-fleet)
|
||||
:render-fn render-row}]]]))
|
||||
[list/flat-list {:data (fleets custom-fleets)
|
||||
:default-separator? false
|
||||
:key-fn identity
|
||||
:render-data (name current-fleet)
|
||||
:render-fn render-row}]))
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue