diff --git a/.bundle/config b/.bundle/config new file mode 100644 index 000000000..848943bb5 --- /dev/null +++ b/.bundle/config @@ -0,0 +1,2 @@ +BUNDLE_PATH: "vendor/bundle" +BUNDLE_FORCE_RUBY_PLATFORM: 1 diff --git a/.flowconfig b/.flowconfig index b274ad1d6..3782e447c 100644 --- a/.flowconfig +++ b/.flowconfig @@ -8,13 +8,11 @@ ; Ignore polyfills node_modules/react-native/Libraries/polyfills/.* -; These should not be required directly -; require from fbjs/lib instead: require('fbjs/lib/warning') -node_modules/warning/.* - ; Flow doesn't support platforms .*/Libraries/Utilities/LoadingView.js +.*/node_modules/resolve/test/resolver/malformed_package_json/package\.json$ + [untyped] .*/node_modules/@react-native-community/cli/.*/.* @@ -27,8 +25,9 @@ node_modules/react-native/flow/ [options] emoji=true -esproposal.optional_chaining=enable -esproposal.nullish_coalescing=enable +exact_by_default=true + +format.bracket_spacing=false module.file_ext=.js module.file_ext=.json @@ -44,10 +43,6 @@ suppress_type=$FlowFixMe suppress_type=$FlowFixMeProps suppress_type=$FlowFixMeState -suppress_comment=\\(.\\|\n\\)*\\$FlowFixMe\\($\\|[^(]\\|(\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\) -suppress_comment=\\(.\\|\n\\)*\\$FlowIssue\\((\\(\\)? *\\(site=[a-z,_]*react_native\\(_ios\\)?_\\(oss\\|fb\\)[a-z,_]*\\)?)\\)?:? #[0-9]+ -suppress_comment=\\(.\\|\n\\)*\\$FlowExpectedError - [lints] sketchy-null-number=warn sketchy-null-mixed=warn @@ -57,8 +52,6 @@ nonstrict-import=warn deprecated-type=warn unsafe-getters-setters=warn unnecessary-invariant=warn -signature-verification-failure=warn -deprecated-utility=error [strict] deprecated-type @@ -70,4 +63,4 @@ untyped-import untyped-type-import [version] -^0.122.0 +^0.182.0 diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index d42ff1835..000000000 --- a/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.pbxproj -text diff --git a/.gitignore b/.gitignore index a4e8927a4..5f100771c 100644 --- a/.gitignore +++ b/.gitignore @@ -20,6 +20,7 @@ DerivedData *.hmap *.ipa *.xcuserstate +ios/.xcode.env.local # Android/IntelliJ # @@ -28,6 +29,8 @@ build/ .gradle local.properties *.iml +*.hprof +.cxx/ # node.js # @@ -48,15 +51,17 @@ buck-out/ # For more information about the recommended setup visit: # https://docs.fastlane.tools/best-practices/source-control/ -*/fastlane/report.xml -*/fastlane/Preview.html -*/fastlane/screenshots +**/fastlane/report.xml +**/fastlane/Preview.html +**/fastlane/screenshots +**/fastlane/test_output # Bundle artifact *.jsbundle -# CocoaPods +# Ruby / CocoaPods /ios/Pods/ +/vendor/bundle/ config.js !src/screens/steem-connect/config.js diff --git a/.node-version b/.node-version new file mode 100644 index 000000000..b6a7d89c6 --- /dev/null +++ b/.node-version @@ -0,0 +1 @@ +16 diff --git a/.prettierrc.js b/.prettierrc.js index 5c4de1a4f..2b540746a 100644 --- a/.prettierrc.js +++ b/.prettierrc.js @@ -1,6 +1,7 @@ module.exports = { + arrowParens: 'avoid', + bracketSameLine: true, bracketSpacing: false, - jsxBracketSameLine: true, singleQuote: true, trailingComma: 'all', }; diff --git a/.ruby-version b/.ruby-version new file mode 100644 index 000000000..a603bb50a --- /dev/null +++ b/.ruby-version @@ -0,0 +1 @@ +2.7.5 diff --git a/App.js b/App.js index 24cf3cf8c..a3af93200 100644 --- a/App.js +++ b/App.js @@ -1,9 +1,8 @@ -// eslint-disable-next-line -import bugsnagInstance from './src/config/bugsnag'; +// // eslint-disable-next-line import App from './src/index'; if (__DEV__) { - import('./reactotron-config').then(() => console.log('Reactotron Configured')); + import('./reactotron-config').then(() => { console.log('Reactotron Configured')}); } export default App; diff --git a/Gemfile b/Gemfile new file mode 100644 index 000000000..5efda89f4 --- /dev/null +++ b/Gemfile @@ -0,0 +1,6 @@ +source 'https://rubygems.org' + +# You may use http://rbenv.org/ or https://rvm.io/ to install and use this version +ruby '2.7.5' + +gem 'cocoapods', '~> 1.11', '>= 1.11.2' diff --git a/android/app/build.gradle b/android/app/build.gradle index c13ffa11e..6ca065d58 100644 --- a/android/app/build.gradle +++ b/android/app/build.gradle @@ -3,6 +3,7 @@ apply plugin: 'com.google.gms.google-services' apply from: project(':react-native-config').projectDir.getPath() + "/dotenv.gradle" import com.android.build.OutputFile +import org.apache.tools.ant.taskdefs.condition.Os /** * The react.gradle file registers a task for each build variant (e.g. bundleDebugJsAndAssets @@ -121,6 +122,15 @@ def jscFlavor = 'org.webkit:android-jsc:+' * and the benefits of using Hermes will therefore be sharply reduced. */ def enableHermes = project.ext.react.get("enableHermes", false); + +/** + * Architectures to build native code for. + */ +def reactNativeArchitectures() { + def value = project.getProperties().get("reactNativeArchitectures") + return value ? value.split(",") : ["armeabi-v7a", "x86", "x86_64", "arm64-v8a"] +} + configurations.all { resolutionStrategy { force "com.facebook.soloader:soloader:0.9.0+" @@ -128,12 +138,9 @@ configurations.all { } } android { - compileSdkVersion rootProject.ext.compileSdkVersion + ndkVersion rootProject.ext.ndkVersion + compileSdkVersion rootProject.ext.compileSdkVersion - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } lintOptions { checkReleaseBuilds false @@ -155,17 +162,75 @@ android { missingDimensionStrategy 'store', 'play' missingDimensionStrategy 'react-native-camera', 'general' missingDimensionStrategy 'react-native-camera', 'mlkit' - + buildConfigField "boolean", "IS_NEW_ARCHITECTURE_ENABLED", isNewArchitectureEnabled().toString() + if (isNewArchitectureEnabled()) { + // We configure the CMake build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + cmake { + arguments "-DPROJECT_BUILD_DIR=$buildDir", + "-DREACT_ANDROID_DIR=$rootDir/../node_modules/react-native/ReactAndroid", + "-DREACT_ANDROID_BUILD_DIR=$rootDir/../node_modules/react-native/ReactAndroid/build", + "-DNODE_MODULES_DIR=$rootDir/../node_modules", + "-DANDROID_STL=c++_shared" + } + } + if (!enableSeparateBuildPerCPUArchitecture) { + ndk { + abiFilters (*reactNativeArchitectures()) + } + } + } } dexOptions { javaMaxHeapSize "9g" } + + if (isNewArchitectureEnabled()) { + // We configure the NDK build only if you decide to opt-in for the New Architecture. + externalNativeBuild { + cmake { + path "$projectDir/src/main/jni/CMakeLists.txt" + } + } + def reactAndroidProjectDir = project(':ReactAndroid').projectDir + def packageReactNdkDebugLibs = tasks.register("packageReactNdkDebugLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkDebugLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + def packageReactNdkReleaseLibs = tasks.register("packageReactNdkReleaseLibs", Copy) { + dependsOn(":ReactAndroid:packageReactNdkReleaseLibsForBuck") + from("$reactAndroidProjectDir/src/main/jni/prebuilt/lib") + into("$buildDir/react-ndk/exported") + } + afterEvaluate { + // If you wish to add a custom TurboModule or component locally, + // you should uncomment this line. + // preBuild.dependsOn("generateCodegenArtifactsFromSchema") + preDebugBuild.dependsOn(packageReactNdkDebugLibs) + preReleaseBuild.dependsOn(packageReactNdkReleaseLibs) + // Due to a bug inside AGP, we have to explicitly set a dependency + // between configureCMakeDebug* tasks and the preBuild tasks. + // This can be removed once this is solved: https://issuetracker.google.com/issues/207403732 + configureCMakeRelWithDebInfo.dependsOn(preReleaseBuild) + configureCMakeDebug.dependsOn(preDebugBuild) + reactNativeArchitectures().each { architecture -> + tasks.findByName("configureCMakeDebug[${architecture}]")?.configure { + dependsOn("preDebugBuild") + } + tasks.findByName("configureCMakeRelWithDebInfo[${architecture}]")?.configure { + dependsOn("preReleaseBuild") + } + } + } + } + splits { abi { reset() enable enableSeparateBuildPerCPUArchitecture universalApk false // If true, also generate a universal APK - include "armeabi-v7a", "x86", "arm64-v8a", "x86_64" + include (*reactNativeArchitectures()) } } signingConfigs { @@ -197,7 +262,7 @@ android { def abi = output.getFilter(OutputFile.ABI) if (abi != null) { // null for the universal-debug, universal-release variants output.versionCodeOverride = - versionCodes.get(abi) * 1048576 + defaultConfig.versionCode + defaultConfig.versionCode * 1000 + versionCodes.get(abi) } } } @@ -205,27 +270,47 @@ android { dependencies { implementation fileTree(dir: "libs", include: ["*.jar"]) + //noinspection GradleDynamicVersion implementation 'com.facebook.react:react-native:+' // From node_modules implementation 'androidx.appcompat:appcompat:1.1.0-rc01' implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0-alpha02' + implementation "androidx.core:core-splashscreen:1.0.0" implementation 'com.android.support:multidex:2.0.1' implementation project(':react-native-pager-view') implementation 'com.getkeepsafe.relinker:relinker:1.4.4' if (enableHermes) { - def hermesPath = "../../node_modules/hermes-engine/android/"; - debugImplementation files(hermesPath + "hermes-debug.aar") - releaseImplementation files(hermesPath + "hermes-release.aar") + //noinspection GradleDynamicVersion + implementation("com.facebook.react:hermes-engine:+") { // From node_modules + exclude group:'com.facebook.fbjni' + } } else { implementation jscFlavor } } +if (isNewArchitectureEnabled()) { + // If new architecture is enabled, we let you build RN from source + // Otherwise we fallback to a prebuilt .aar bundled in the NPM package. + // This will be applied to all the imported transtitive dependency. + configurations.all { + resolutionStrategy.dependencySubstitution { + substitute(module("com.facebook.react:react-native")) + .using(project(":ReactAndroid")) + .because("On New Architecture we're building React Native from source") + substitute(module("com.facebook.react:hermes-engine")) + .using(project(":ReactAndroid:hermes-engine")) + .because("On New Architecture we're building Hermes from source") + } + } +} + + // Run this once to be able to run the application with BUCK // puts all compile dependencies into folder libs for BUCK to use task copyDownloadableDepsToLibs(type: Copy) { - from configurations.compile + from configurations.implementation into 'libs' } @@ -238,3 +323,11 @@ bugsnag { uploadReactNativeMappings = true overwrite = true } + +def isNewArchitectureEnabled() { + // To opt-in for the New Architecture, you can either: + // - Set `newArchEnabled` to true inside the `gradle.properties` file + // - Invoke gradle with `-newArchEnabled=true` + // - Set an environment variable `ORG_GRADLE_PROJECT_newArchEnabled=true` + return project.hasProperty("newArchEnabled") && project.newArchEnabled == "true" +} diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro index 889cc8b91..0ef709f33 100644 --- a/android/app/proguard-rules.pro +++ b/android/app/proguard-rules.pro @@ -11,3 +11,6 @@ # -keep class com.facebook.hermes.unicode.** { *; } # -keep class com.facebook.jni.** { *; } + +# -keep class com.swmansion.reanimated.** { *; } +# -keep class com.facebook.react.turbomodule.** { *; } diff --git a/android/app/src/debug/AndroidManifest.xml b/android/app/src/debug/AndroidManifest.xml index fa26aa56e..4b185bc15 100644 --- a/android/app/src/debug/AndroidManifest.xml +++ b/android/app/src/debug/AndroidManifest.xml @@ -4,5 +4,10 @@ - + + + diff --git a/android/app/src/debug/java/app/esteem/mobile/android/ReactNativeFlipper.java b/android/app/src/debug/java/app/esteem/mobile/android/ReactNativeFlipper.java new file mode 100644 index 000000000..6a3a750ce --- /dev/null +++ b/android/app/src/debug/java/app/esteem/mobile/android/ReactNativeFlipper.java @@ -0,0 +1,73 @@ +/** + * Copyright (c) Meta Platforms, Inc. and affiliates. + * + *

This source code is licensed under the MIT license found in the LICENSE file in the root + * directory of this source tree. + */ +package app.esteem.mobile.android; + +// import android.content.Context; +// import com.facebook.flipper.android.AndroidFlipperClient; +// import com.facebook.flipper.android.utils.FlipperUtils; +// import com.facebook.flipper.core.FlipperClient; +// import com.facebook.flipper.plugins.crashreporter.CrashReporterPlugin; +// import com.facebook.flipper.plugins.databases.DatabasesFlipperPlugin; +// import com.facebook.flipper.plugins.fresco.FrescoFlipperPlugin; +// import com.facebook.flipper.plugins.inspector.DescriptorMapping; +// import com.facebook.flipper.plugins.inspector.InspectorFlipperPlugin; +// import com.facebook.flipper.plugins.network.FlipperOkhttpInterceptor; +// import com.facebook.flipper.plugins.network.NetworkFlipperPlugin; +// import com.facebook.flipper.plugins.react.ReactFlipperPlugin; +// import com.facebook.flipper.plugins.sharedpreferences.SharedPreferencesFlipperPlugin; +// import com.facebook.react.ReactInstanceEventListener; +// import com.facebook.react.ReactInstanceManager; +// import com.facebook.react.bridge.ReactContext; +// import com.facebook.react.modules.network.NetworkingModule; +// import okhttp3.OkHttpClient; + +public class ReactNativeFlipper { +// public static void initializeFlipper(Context context, ReactInstanceManager reactInstanceManager) { +// if (FlipperUtils.shouldEnableFlipper(context)) { +// final FlipperClient client = AndroidFlipperClient.getInstance(context); + +// client.addPlugin(new InspectorFlipperPlugin(context, DescriptorMapping.withDefaults())); +// client.addPlugin(new ReactFlipperPlugin()); +// client.addPlugin(new DatabasesFlipperPlugin(context)); +// client.addPlugin(new SharedPreferencesFlipperPlugin(context)); +// client.addPlugin(CrashReporterPlugin.getInstance()); + +// NetworkFlipperPlugin networkFlipperPlugin = new NetworkFlipperPlugin(); +// NetworkingModule.setCustomClientBuilder( +// new NetworkingModule.CustomClientBuilder() { +// @Override +// public void apply(OkHttpClient.Builder builder) { +// builder.addNetworkInterceptor(new FlipperOkhttpInterceptor(networkFlipperPlugin)); +// } +// }); +// client.addPlugin(networkFlipperPlugin); +// client.start(); + +// // Fresco Plugin needs to ensure that ImagePipelineFactory is initialized +// // Hence we run if after all native modules have been initialized +// ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); +// if (reactContext == null) { +// reactInstanceManager.addReactInstanceEventListener( +// new ReactInstanceEventListener() { +// @Override +// public void onReactContextInitialized(ReactContext reactContext) { +// reactInstanceManager.removeReactInstanceEventListener(this); +// reactContext.runOnNativeModulesQueueThread( +// new Runnable() { +// @Override +// public void run() { +// client.addPlugin(new FrescoFlipperPlugin()); +// } +// }); +// } +// }); +// } else { +// client.addPlugin(new FrescoFlipperPlugin()); +// } +// } +// } +} \ No newline at end of file diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index 11c02ea16..8255be4ce 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -1,4 +1,5 @@ @@ -27,27 +28,21 @@ android:icon="@mipmap/ic_launcher" android:allowBackup="false" android:largeHeap="true" - android:theme="@style/AppTheme"> - - - - - - - - + android:theme="@style/BootTheme"> - + + + + + + @@ -155,7 +150,6 @@ - @@ -165,6 +159,10 @@ + diff --git a/android/app/src/main/java/app/esteem/SplashActivity.java b/android/app/src/main/java/app/esteem/SplashActivity.java deleted file mode 100644 index 596927d2a..000000000 --- a/android/app/src/main/java/app/esteem/SplashActivity.java +++ /dev/null @@ -1,26 +0,0 @@ -package app.esteem.mobile.android; - -import android.content.Intent; -import android.os.Bundle; -import androidx.appcompat.app.AppCompatActivity; - -public class SplashActivity extends AppCompatActivity { - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(null); //https://stackoverflow.com/questions/57709742/unable-to-instantiate-fragment-com-swmansion-rnscreens-screen - - Intent intent = new Intent(this, MainActivity.class); - - //workaround for getInitialNotification and onNotificationOpenedApp returning null always - //TOOD: use react-native-bootsplash instead of react-native-splash-screen as recommended by firebase - //firebase issue ref: https://github.com/invertase/react-native-firebase/issues/3469 - //ecency project card ref: https://github.com/orgs/ecency/projects/2#card-85455956 - Bundle extras = getIntent().getExtras(); - if (extras != null) { - intent.putExtras(extras); - } - - startActivity(intent); - finish(); - } -} diff --git a/android/app/src/main/java/app/esteem/mobile/android/MainActivity.java b/android/app/src/main/java/app/esteem/mobile/android/MainActivity.java index c11cb4566..962ee93c8 100644 --- a/android/app/src/main/java/app/esteem/mobile/android/MainActivity.java +++ b/android/app/src/main/java/app/esteem/mobile/android/MainActivity.java @@ -3,11 +3,10 @@ package app.esteem.mobile.android; import com.facebook.react.ReactActivity; import com.facebook.react.ReactActivityDelegate; import com.facebook.react.ReactRootView; -import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView; import android.content.Intent; import android.content.res.Configuration; -import org.devio.rn.splashscreen.SplashScreen; import android.os.Bundle; +import com.zoontek.rnbootsplash.RNBootSplash; public class MainActivity extends ReactActivity { /** @@ -21,12 +20,7 @@ public class MainActivity extends ReactActivity { @Override protected ReactActivityDelegate createReactActivityDelegate() { - return new ReactActivityDelegate(this, getMainComponentName()) { - @Override - protected ReactRootView createRootView() { - return new RNGestureHandlerEnabledRootView(MainActivity.this); - } - }; + return new MainActivityDelegate(this, getMainComponentName()); } @Override @@ -37,9 +31,10 @@ public class MainActivity extends ReactActivity { @Override protected void onCreate(Bundle savedInstanceState) { + RNBootSplash.init(this); // <- initialize the splash screen super.onCreate(null); //https://stackoverflow.com/questions/57709742/unable-to-instantiate-fragment-com-swmansion-rnscreens-screen - SplashScreen.show(this); } + //native side reference: https://github.com/facebook/react-native/issues/28823#issuecomment-642032481 @Override public void onConfigurationChanged(Configuration newConfig) { @@ -47,5 +42,28 @@ public class MainActivity extends ReactActivity { getReactInstanceManager().onConfigurationChanged(this, newConfig); Intent intent = new Intent("onConfigurationChanged"); intent.putExtra("newConfig", newConfig); - this.sendBroadcast(intent); } + this.sendBroadcast(intent); + } + + + public static class MainActivityDelegate extends ReactActivityDelegate { + public MainActivityDelegate(ReactActivity activity, String mainComponentName) { + super(activity, mainComponentName); + } + + @Override + protected ReactRootView createRootView() { + ReactRootView reactRootView = new ReactRootView(getContext()); + // If you opted-in for the New Architecture, we enable the Fabric Renderer. + reactRootView.setIsFabric(BuildConfig.IS_NEW_ARCHITECTURE_ENABLED); + return reactRootView; + } + + @Override + protected boolean isConcurrentRootEnabled() { + // If you opted-in for the New Architecture, we enable Concurrent Root (i.e. React 18). + // More on this on https://reactjs.org/blog/2022/03/29/react-v18.html + return BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; + } + } } diff --git a/android/app/src/main/java/app/esteem/mobile/android/MainApplication.java b/android/app/src/main/java/app/esteem/mobile/android/MainApplication.java index db1b7e2cd..e82c509b3 100644 --- a/android/app/src/main/java/app/esteem/mobile/android/MainApplication.java +++ b/android/app/src/main/java/app/esteem/mobile/android/MainApplication.java @@ -8,7 +8,9 @@ import com.facebook.react.ReactApplication; import com.facebook.react.ReactInstanceManager; import com.facebook.react.ReactNativeHost; import com.facebook.react.ReactPackage; +import com.facebook.react.config.ReactFeatureFlags; import com.facebook.soloader.SoLoader; +import app.esteem.mobile.android.newarchitecture.MainApplicationReactNativeHost; import androidx.multidex.MultiDexApplication; import com.getkeepsafe.relinker.ReLinker; import com.bugsnag.android.Bugsnag; @@ -22,8 +24,14 @@ import com.reactnativepagerview.PagerViewPackage; import java.lang.reflect.InvocationTargetException; import java.util.List; +import com.facebook.react.bridge.JSIModulePackage; +import com.swmansion.reanimated.ReanimatedJSIModulePackage; + public class MainApplication extends MultiDexApplication implements ReactApplication { + private final ReactNativeHost mNewArchitectureNativeHost = + new MainApplicationReactNativeHost(this); + private final ReactNativeHost mReactNativeHost = new ReactNativeHost(this) { @Override public boolean getUseDeveloperSupport() { @@ -45,11 +53,20 @@ public class MainApplication extends MultiDexApplication implements ReactApplica protected String getJSMainModuleName() { return "index"; } + + @Override + protected JSIModulePackage getJSIModulePackage() { + return new ReanimatedJSIModulePackage(); + } }; @Override public ReactNativeHost getReactNativeHost() { - return mReactNativeHost; + if (BuildConfig.IS_NEW_ARCHITECTURE_ENABLED) { + return mNewArchitectureNativeHost; + } else { + return mReactNativeHost; + } } @Override @@ -60,6 +77,9 @@ public class MainApplication extends MultiDexApplication implements ReactApplica ReLinker.loadLibrary(this, "bugsnag-plugin-android-anr"); // Start bugsnag Bugsnag.start(this /* app context */); + + // If you opted-in for the New Architecture, we enable the TurboModule system + ReactFeatureFlags.useTurboModules = BuildConfig.IS_NEW_ARCHITECTURE_ENABLED; SoLoader.init(this, /* native exopackage */ false); // Uncomment below line to Debug Webview // WebView.setWebContentsDebuggingEnabled(true); diff --git a/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/MainApplicationReactNativeHost.java b/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/MainApplicationReactNativeHost.java new file mode 100644 index 000000000..a1904f609 --- /dev/null +++ b/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/MainApplicationReactNativeHost.java @@ -0,0 +1,116 @@ +package app.esteem.mobile.android.newarchitecture; + +import android.app.Application; +import androidx.annotation.NonNull; +import com.facebook.react.PackageList; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.ReactNativeHost; +import com.facebook.react.ReactPackage; +import com.facebook.react.ReactPackageTurboModuleManagerDelegate; +import com.facebook.react.bridge.JSIModulePackage; +import com.facebook.react.bridge.JSIModuleProvider; +import com.facebook.react.bridge.JSIModuleSpec; +import com.facebook.react.bridge.JSIModuleType; +import com.facebook.react.bridge.JavaScriptContextHolder; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.UIManager; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.react.fabric.CoreComponentsRegistry; +import com.facebook.react.fabric.FabricJSIModuleProvider; +import com.facebook.react.fabric.ReactNativeConfig; +import com.facebook.react.uimanager.ViewManagerRegistry; +import app.esteem.mobile.android.BuildConfig; +import app.esteem.mobile.android.newarchitecture.components.MainComponentsRegistry; +import app.esteem.mobile.android.newarchitecture.modules.MainApplicationTurboModuleManagerDelegate; +import java.util.ArrayList; +import java.util.List; + +/** + * A {@link ReactNativeHost} that helps you load everything needed for the New Architecture, both + * TurboModule delegates and the Fabric Renderer. + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +public class MainApplicationReactNativeHost extends ReactNativeHost { + public MainApplicationReactNativeHost(Application application) { + super(application); + } + + @Override + public boolean getUseDeveloperSupport() { + return BuildConfig.DEBUG; + } + + @Override + protected List getPackages() { + List packages = new PackageList(this).getPackages(); + // Packages that cannot be autolinked yet can be added manually here, for example: + // packages.add(new MyReactNativePackage()); + // TurboModules must also be loaded here providing a valid TurboReactPackage implementation: + // packages.add(new TurboReactPackage() { ... }); + // If you have custom Fabric Components, their ViewManagers should also be loaded here + // inside a ReactPackage. + return packages; + } + + @Override + protected String getJSMainModuleName() { + return "index"; + } + + @NonNull + @Override + protected ReactPackageTurboModuleManagerDelegate.Builder + getReactPackageTurboModuleManagerDelegateBuilder() { + // Here we provide the ReactPackageTurboModuleManagerDelegate Builder. This is necessary + // for the new architecture and to use TurboModules correctly. + return new MainApplicationTurboModuleManagerDelegate.Builder(); + } + + @Override + protected JSIModulePackage getJSIModulePackage() { + return new JSIModulePackage() { + @Override + public List getJSIModules( + final ReactApplicationContext reactApplicationContext, + final JavaScriptContextHolder jsContext) { + final List specs = new ArrayList<>(); + + // Here we provide a new JSIModuleSpec that will be responsible of providing the + // custom Fabric Components. + specs.add( + new JSIModuleSpec() { + @Override + public JSIModuleType getJSIModuleType() { + return JSIModuleType.UIManager; + } + + @Override + public JSIModuleProvider getJSIModuleProvider() { + final ComponentFactory componentFactory = new ComponentFactory(); + CoreComponentsRegistry.register(componentFactory); + + // Here we register a Components Registry. + // The one that is generated with the template contains no components + // and just provides you the one from React Native core. + MainComponentsRegistry.register(componentFactory); + + final ReactInstanceManager reactInstanceManager = getReactInstanceManager(); + + ViewManagerRegistry viewManagerRegistry = + new ViewManagerRegistry( + reactInstanceManager.getOrCreateViewManagers(reactApplicationContext)); + + return new FabricJSIModuleProvider( + reactApplicationContext, + componentFactory, + ReactNativeConfig.DEFAULT_CONFIG, + viewManagerRegistry); + } + }); + return specs; + } + }; + } +} diff --git a/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/components/MainComponentsRegistry.java b/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/components/MainComponentsRegistry.java new file mode 100644 index 000000000..8d0e1125c --- /dev/null +++ b/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/components/MainComponentsRegistry.java @@ -0,0 +1,36 @@ +package app.esteem.mobile.android.newarchitecture.components; + +import com.facebook.jni.HybridData; +import com.facebook.proguard.annotations.DoNotStrip; +import com.facebook.react.fabric.ComponentFactory; +import com.facebook.soloader.SoLoader; + +/** + * Class responsible to load the custom Fabric Components. This class has native methods and needs a + * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ + * folder for you). + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +@DoNotStrip +public class MainComponentsRegistry { + static { + SoLoader.loadLibrary("fabricjni"); + } + + @DoNotStrip private final HybridData mHybridData; + + @DoNotStrip + private native HybridData initHybrid(ComponentFactory componentFactory); + + @DoNotStrip + private MainComponentsRegistry(ComponentFactory componentFactory) { + mHybridData = initHybrid(componentFactory); + } + + @DoNotStrip + public static MainComponentsRegistry register(ComponentFactory componentFactory) { + return new MainComponentsRegistry(componentFactory); + } +} diff --git a/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java b/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java new file mode 100644 index 000000000..1c706f3b4 --- /dev/null +++ b/android/app/src/main/java/app/esteem/mobile/android/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate.java @@ -0,0 +1,48 @@ +package app.esteem.mobile.android.newarchitecture.modules; + +import com.facebook.jni.HybridData; +import com.facebook.react.ReactPackage; +import com.facebook.react.ReactPackageTurboModuleManagerDelegate; +import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.soloader.SoLoader; +import java.util.List; + +/** + * Class responsible to load the TurboModules. This class has native methods and needs a + * corresponding C++ implementation/header file to work correctly (already placed inside the jni/ + * folder for you). + * + *

Please note that this class is used ONLY if you opt-in for the New Architecture (see the + * `newArchEnabled` property). Is ignored otherwise. + */ +public class MainApplicationTurboModuleManagerDelegate + extends ReactPackageTurboModuleManagerDelegate { + + private static volatile boolean sIsSoLibraryLoaded; + + protected MainApplicationTurboModuleManagerDelegate( + ReactApplicationContext reactApplicationContext, List packages) { + super(reactApplicationContext, packages); + } + + protected native HybridData initHybrid(); + + native boolean canCreateTurboModule(String moduleName); + + public static class Builder extends ReactPackageTurboModuleManagerDelegate.Builder { + protected MainApplicationTurboModuleManagerDelegate build( + ReactApplicationContext context, List packages) { + return new MainApplicationTurboModuleManagerDelegate(context, packages); + } + } + + @Override + protected synchronized void maybeLoadOtherSoLibraries() { + if (!sIsSoLibraryLoaded) { + // If you change the name of your application .so file in the Android.mk file, + // make sure you update the name here as well. + SoLoader.loadLibrary("rndiffapp_appmodules"); + sIsSoLibraryLoaded = true; + } + } +} diff --git a/android/app/src/main/jni/CMakeLists.txt b/android/app/src/main/jni/CMakeLists.txt new file mode 100644 index 000000000..6e63f482b --- /dev/null +++ b/android/app/src/main/jni/CMakeLists.txt @@ -0,0 +1,7 @@ +cmake_minimum_required(VERSION 3.13) + +# Define the library name here. +project(rndiffapp_appmodules) + +# This file includes all the necessary to let you build your application with the New Architecture. +include(${REACT_ANDROID_DIR}/cmake-utils/ReactNative-application.cmake) diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.cpp b/android/app/src/main/jni/MainApplicationModuleProvider.cpp new file mode 100644 index 000000000..26162dd87 --- /dev/null +++ b/android/app/src/main/jni/MainApplicationModuleProvider.cpp @@ -0,0 +1,32 @@ +#include "MainApplicationModuleProvider.h" + +#include +#include + +namespace facebook { +namespace react { + +std::shared_ptr MainApplicationModuleProvider( + const std::string &moduleName, + const JavaTurboModule::InitParams ¶ms) { + // Here you can provide your own module provider for TurboModules coming from + // either your application or from external libraries. The approach to follow + // is similar to the following (for a library called `samplelibrary`: + // + // auto module = samplelibrary_ModuleProvider(moduleName, params); + // if (module != nullptr) { + // return module; + // } + // return rncore_ModuleProvider(moduleName, params); + + // Module providers autolinked by RN CLI + auto rncli_module = rncli_ModuleProvider(moduleName, params); + if (rncli_module != nullptr) { + return rncli_module; + } + + return rncore_ModuleProvider(moduleName, params); +} + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationModuleProvider.h b/android/app/src/main/jni/MainApplicationModuleProvider.h new file mode 100644 index 000000000..b38ccf53f --- /dev/null +++ b/android/app/src/main/jni/MainApplicationModuleProvider.h @@ -0,0 +1,16 @@ +#pragma once + +#include +#include + +#include + +namespace facebook { +namespace react { + +std::shared_ptr MainApplicationModuleProvider( + const std::string &moduleName, + const JavaTurboModule::InitParams ¶ms); + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp new file mode 100644 index 000000000..5fd688c50 --- /dev/null +++ b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.cpp @@ -0,0 +1,45 @@ +#include "MainApplicationTurboModuleManagerDelegate.h" +#include "MainApplicationModuleProvider.h" + +namespace facebook { +namespace react { + +jni::local_ref +MainApplicationTurboModuleManagerDelegate::initHybrid( + jni::alias_ref) { + return makeCxxInstance(); +} + +void MainApplicationTurboModuleManagerDelegate::registerNatives() { + registerHybrid({ + makeNativeMethod( + "initHybrid", MainApplicationTurboModuleManagerDelegate::initHybrid), + makeNativeMethod( + "canCreateTurboModule", + MainApplicationTurboModuleManagerDelegate::canCreateTurboModule), + }); +} + +std::shared_ptr +MainApplicationTurboModuleManagerDelegate::getTurboModule( + const std::string &name, + const std::shared_ptr &jsInvoker) { + // Not implemented yet: provide pure-C++ NativeModules here. + return nullptr; +} + +std::shared_ptr +MainApplicationTurboModuleManagerDelegate::getTurboModule( + const std::string &name, + const JavaTurboModule::InitParams ¶ms) { + return MainApplicationModuleProvider(name, params); +} + +bool MainApplicationTurboModuleManagerDelegate::canCreateTurboModule( + const std::string &name) { + return getTurboModule(name, nullptr) != nullptr || + getTurboModule(name, {.moduleName = name}) != nullptr; +} + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h new file mode 100644 index 000000000..4e78f469f --- /dev/null +++ b/android/app/src/main/jni/MainApplicationTurboModuleManagerDelegate.h @@ -0,0 +1,38 @@ +#include +#include + +#include +#include + +namespace facebook { +namespace react { + +class MainApplicationTurboModuleManagerDelegate + : public jni::HybridClass< + MainApplicationTurboModuleManagerDelegate, + TurboModuleManagerDelegate> { + public: + // Adapt it to the package you used for your Java class. + static constexpr auto kJavaDescriptor = + "Lapp/esteem/mobile/android/newarchitecture/modules/MainApplicationTurboModuleManagerDelegate;"; + + static jni::local_ref initHybrid(jni::alias_ref); + + static void registerNatives(); + + std::shared_ptr getTurboModule( + const std::string &name, + const std::shared_ptr &jsInvoker) override; + std::shared_ptr getTurboModule( + const std::string &name, + const JavaTurboModule::InitParams ¶ms) override; + + /** + * Test-only method. Allows user to verify whether a TurboModule can be + * created by instances of this class. + */ + bool canCreateTurboModule(const std::string &name); +}; + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainComponentsRegistry.cpp b/android/app/src/main/jni/MainComponentsRegistry.cpp new file mode 100644 index 000000000..54f598a48 --- /dev/null +++ b/android/app/src/main/jni/MainComponentsRegistry.cpp @@ -0,0 +1,65 @@ +#include "MainComponentsRegistry.h" + +#include +#include +#include +#include +#include + +namespace facebook { +namespace react { + +MainComponentsRegistry::MainComponentsRegistry(ComponentFactory *delegate) {} + +std::shared_ptr +MainComponentsRegistry::sharedProviderRegistry() { + auto providerRegistry = CoreComponentsRegistry::sharedProviderRegistry(); + + // Autolinked providers registered by RN CLI + rncli_registerProviders(providerRegistry); + + // Custom Fabric Components go here. You can register custom + // components coming from your App or from 3rd party libraries here. + // + // providerRegistry->add(concreteComponentDescriptorProvider< + // AocViewerComponentDescriptor>()); + return providerRegistry; +} + +jni::local_ref +MainComponentsRegistry::initHybrid( + jni::alias_ref, + ComponentFactory *delegate) { + auto instance = makeCxxInstance(delegate); + + auto buildRegistryFunction = + [](EventDispatcher::Weak const &eventDispatcher, + ContextContainer::Shared const &contextContainer) + -> ComponentDescriptorRegistry::Shared { + auto registry = MainComponentsRegistry::sharedProviderRegistry() + ->createComponentDescriptorRegistry( + {eventDispatcher, contextContainer}); + + auto mutableRegistry = + std::const_pointer_cast(registry); + + mutableRegistry->setFallbackComponentDescriptor( + std::make_shared( + ComponentDescriptorParameters{ + eventDispatcher, contextContainer, nullptr})); + + return registry; + }; + + delegate->buildRegistryFunction = buildRegistryFunction; + return instance; +} + +void MainComponentsRegistry::registerNatives() { + registerHybrid({ + makeNativeMethod("initHybrid", MainComponentsRegistry::initHybrid), + }); +} + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/MainComponentsRegistry.h b/android/app/src/main/jni/MainComponentsRegistry.h new file mode 100644 index 000000000..eaa16573e --- /dev/null +++ b/android/app/src/main/jni/MainComponentsRegistry.h @@ -0,0 +1,32 @@ +#pragma once + +#include +#include +#include +#include + +namespace facebook { +namespace react { + +class MainComponentsRegistry + : public facebook::jni::HybridClass { + public: + // Adapt it to the package you used for your Java class. + constexpr static auto kJavaDescriptor = + "Lapp/esteem/mobile/android/newarchitecture/components/MainComponentsRegistry;"; + + static void registerNatives(); + + MainComponentsRegistry(ComponentFactory *delegate); + + private: + static std::shared_ptr + sharedProviderRegistry(); + + static jni::local_ref initHybrid( + jni::alias_ref, + ComponentFactory *delegate); +}; + +} // namespace react +} // namespace facebook diff --git a/android/app/src/main/jni/OnLoad.cpp b/android/app/src/main/jni/OnLoad.cpp new file mode 100644 index 000000000..c569b6e86 --- /dev/null +++ b/android/app/src/main/jni/OnLoad.cpp @@ -0,0 +1,11 @@ +#include +#include "MainApplicationTurboModuleManagerDelegate.h" +#include "MainComponentsRegistry.h" + +JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *) { + return facebook::jni::initialize(vm, [] { + facebook::react::MainApplicationTurboModuleManagerDelegate:: + registerNatives(); + facebook::react::MainComponentsRegistry::registerNatives(); + }); +} diff --git a/android/app/src/main/res/drawable-hdpi/launch_screen.png b/android/app/src/main/res/drawable-hdpi/launch_screen.png deleted file mode 100644 index 2a9c4a5fe..000000000 Binary files a/android/app/src/main/res/drawable-hdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-hdpi/launch_screen.png b/android/app/src/main/res/drawable-land-hdpi/launch_screen.png deleted file mode 100644 index 19db35d90..000000000 Binary files a/android/app/src/main/res/drawable-land-hdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-ldpi/launch_screen.png b/android/app/src/main/res/drawable-land-ldpi/launch_screen.png deleted file mode 100644 index 71d73a984..000000000 Binary files a/android/app/src/main/res/drawable-land-ldpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-mdpi/launch_screen.png b/android/app/src/main/res/drawable-land-mdpi/launch_screen.png deleted file mode 100644 index 8409b1781..000000000 Binary files a/android/app/src/main/res/drawable-land-mdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-xhdpi/launch_screen.png b/android/app/src/main/res/drawable-land-xhdpi/launch_screen.png deleted file mode 100644 index 1d5226a91..000000000 Binary files a/android/app/src/main/res/drawable-land-xhdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-xxhdpi/launch_screen.png b/android/app/src/main/res/drawable-land-xxhdpi/launch_screen.png deleted file mode 100644 index 34823d1c9..000000000 Binary files a/android/app/src/main/res/drawable-land-xxhdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land-xxxhdpi/launch_screen.png b/android/app/src/main/res/drawable-land-xxxhdpi/launch_screen.png deleted file mode 100644 index f60b7355e..000000000 Binary files a/android/app/src/main/res/drawable-land-xxxhdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-land/launch_screen.png b/android/app/src/main/res/drawable-land/launch_screen.png deleted file mode 100644 index 19db35d90..000000000 Binary files a/android/app/src/main/res/drawable-land/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-ldpi/launch_screen.png b/android/app/src/main/res/drawable-ldpi/launch_screen.png deleted file mode 100644 index 324090a10..000000000 Binary files a/android/app/src/main/res/drawable-ldpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-mdpi/launch_screen.png b/android/app/src/main/res/drawable-mdpi/launch_screen.png deleted file mode 100644 index bcbfe814b..000000000 Binary files a/android/app/src/main/res/drawable-mdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xhdpi/launch_screen.png b/android/app/src/main/res/drawable-xhdpi/launch_screen.png deleted file mode 100644 index fcdbf4025..000000000 Binary files a/android/app/src/main/res/drawable-xhdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxhdpi/launch_screen.png b/android/app/src/main/res/drawable-xxhdpi/launch_screen.png deleted file mode 100644 index 629cbd80c..000000000 Binary files a/android/app/src/main/res/drawable-xxhdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png b/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png deleted file mode 100644 index db0de6f11..000000000 Binary files a/android/app/src/main/res/drawable-xxxhdpi/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/background_splash.xml b/android/app/src/main/res/drawable/background_splash.xml index bce71fc13..01af0e819 100644 --- a/android/app/src/main/res/drawable/background_splash.xml +++ b/android/app/src/main/res/drawable/background_splash.xml @@ -1,9 +1,6 @@ - - diff --git a/android/app/src/main/res/drawable/launch_screen.png b/android/app/src/main/res/drawable/launch_screen.png deleted file mode 100644 index 5cce54b5a..000000000 Binary files a/android/app/src/main/res/drawable/launch_screen.png and /dev/null differ diff --git a/android/app/src/main/res/drawable/rn_edit_text_material.xml b/android/app/src/main/res/drawable/rn_edit_text_material.xml new file mode 100644 index 000000000..f35d99620 --- /dev/null +++ b/android/app/src/main/res/drawable/rn_edit_text_material.xml @@ -0,0 +1,36 @@ + + + + + + + + + + + diff --git a/android/app/src/main/res/layout/launch_screen.xml b/android/app/src/main/res/layout/launch_screen.xml deleted file mode 100644 index a8d4f5375..000000000 --- a/android/app/src/main/res/layout/launch_screen.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - diff --git a/android/app/src/main/res/values-night/colors.xml b/android/app/src/main/res/values-night/colors.xml new file mode 100644 index 000000000..62c646a6f --- /dev/null +++ b/android/app/src/main/res/values-night/colors.xml @@ -0,0 +1,8 @@ + + + #1e2835 + #1e2835 + #ffffff + #1e2835 + #1e2835 + diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 2a3a376e3..a787c80c8 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -1,9 +1,9 @@ - - - diff --git a/android/build.gradle b/android/build.gradle index a139a8bdb..2dd12835c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -14,22 +14,32 @@ def getNpmVersionArray() { // major [0], minor [1], patch [2] buildscript { ext { - buildToolsVersion = "30.0.2" - minSdkVersion = 21 - compileSdkVersion = 30 - targetSdkVersion = 30 + buildToolsVersion = "31.0.0" + minSdkVersion = 23 + compileSdkVersion = 33 + targetSdkVersion = 33 googlePlayServicesVisionVersion = "17.0.2" googlePlayServicesVersion = "16.+" firebaseVersion = "17.3.4" + kotlinVersion = "1.6.0" + if (System.properties['os.arch'] == "aarch64") { + // For M1 Users we need to use the NDK 24 which added support for aarch64 + ndkVersion = "24.0.8215888" + } else { + // Otherwise we default to the side-by-side NDK version from AGP. + ndkVersion = "21.4.7075529" + } } repositories { google() mavenCentral() } dependencies { - classpath('com.android.tools.build:gradle:4.1.0') + classpath("com.android.tools.build:gradle:7.2.1") classpath 'com.google.gms:google-services:4.3.10' - classpath 'com.bugsnag:bugsnag-android-gradle-plugin:5.+' + classpath("com.facebook.react:react-native-gradle-plugin") + classpath("de.undercouch:gradle-download-task:5.0.1") + classpath 'com.bugsnag:bugsnag-android-gradle-plugin:7.+' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files } @@ -38,7 +48,6 @@ buildscript { allprojects { repositories { google() - mavenCentral() mavenLocal() maven { // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm @@ -51,19 +60,11 @@ allprojects { maven { url "https://www.jitpack.io" } - - //TODO: remove when replacement for selective groups is available - //the jcenter will be accessible as read-only indefinitely so we should be - //good for now with these selective packages as they are not available off of - //jCenter - jcenter() { + mavenCentral { + // We don't want to fetch react-native from Maven Central as there are + // older versions over there. content { - // these groups only available in jcenter otherwise we don't want to rely on jcenter. - includeGroup("com.facebook.yoga") - includeGroup("com.facebook.fbjni") - includeGroup("com.henninghall.android") - includeModule("com.yqritc", "android-scalablevideoview") - includeModule("com.wei.android.lib", "fingerprintidentify") + excludeGroup "com.facebook.react" } } } diff --git a/android/gradle.properties b/android/gradle.properties index 17c855935..9fbae44b0 100644 --- a/android/gradle.properties +++ b/android/gradle.properties @@ -9,8 +9,8 @@ # Specifies the JVM arguments used for the daemon process. # The setting is particularly useful for tweaking memory settings. -# Default value: -Xmx10248m -XX:MaxPermSize=256m -# org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 +# Default value: -Xmx512m -XX:MaxMetaspaceSize=256m +org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m # When configured, Gradle will run in incubating parallel mode. # This option should only be used with decoupled projects. More details, visit @@ -23,4 +23,18 @@ android.useAndroidX=true # Automatically convert third-party libraries to use AndroidX android.enableJetifier=true -org.gradle.jvmargs=-Xmx10248m + +# Version of flipper SDK to use with React Native +FLIPPER_VERSION=0.125.0 + +# Use this property to specify which architecture you want to build. +# You can also override it from the CLI using +# ./gradlew -PreactNativeArchitectures=x86_64 +reactNativeArchitectures=armeabi-v7a,arm64-v8a,x86,x86_64 + +# Use this property to enable support to the new architecture. +# This will allow you to use TurboModules and the Fabric render in +# your application. You should enable this flag either if you want +# to write custom TurboModules/Fabric components OR use libraries that +# are providing them. +newArchEnabled=false \ No newline at end of file diff --git a/android/gradle/wrapper/gradle-wrapper.jar b/android/gradle/wrapper/gradle-wrapper.jar index 5c2d1cf01..41d9927a4 100644 Binary files a/android/gradle/wrapper/gradle-wrapper.jar and b/android/gradle/wrapper/gradle-wrapper.jar differ diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties index 1f3fdbc52..8fad3f5a9 100644 --- a/android/gradle/wrapper/gradle-wrapper.properties +++ b/android/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.5.1-all.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/android/gradlew b/android/gradlew index 87695647e..da3db3449 100755 --- a/android/gradlew +++ b/android/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,41 +17,82 @@ # ############################################################################## -## -## Gradle start up script for UN*X -## +# +# Gradle start up script for POSIX generated by Gradle. +# +# Important for running: +# +# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is +# noncompliant, but you have some other compliant shell such as ksh or +# bash, then to run this script, type that shell name before the whole +# command line, like: +# +# ksh Gradle +# +# Busybox and similar reduced shells will NOT work, because this script +# requires all of these POSIX shell features: +# * functions; +# * expansions «$var», «${var}», «${var:-default}», «${var+SET}», +# «${var#prefix}», «${var%suffix}», and «$( cmd )»; +# * compound commands having a testable exit status, especially «case»; +# * various built-in commands including «command», «set», and «ulimit». +# +# Important for patching: +# +# (2) This script targets any POSIX shell, so it avoids extensions provided +# by Bash, Ksh, etc; in particular arrays are avoided. +# +# The "traditional" practice of packing multiple parameters into a +# space-separated string is a well documented source of bugs and security +# problems, so this is (mostly) avoided, by progressively accumulating +# options in "$@", and eventually passing that to Java. +# +# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS, +# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly; +# see the in-line comments for details. +# +# There are tweaks for specific operating systems such as AIX, CygWin, +# Darwin, MinGW, and NonStop. +# +# (3) This script is generated from the Groovy template +# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt +# within the Gradle project. +# +# You can find Gradle at https://github.com/gradle/gradle/. +# ############################################################################## # Attempt to set APP_HOME + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit APP_NAME="Gradle" -APP_BASE_NAME=`basename "$0"` +APP_BASE_NAME=${0##*/} # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo @@ -65,30 +106,23 @@ cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -97,7 +131,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi else - JAVACMD="java" + JAVACMD=java which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the @@ -105,80 +139,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi -fi - -# For Darwin, add options to specify how the application appears in the dock -if $darwin; then - GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\"" -fi - -# For Cygwin or MSYS, switch paths to Windows format before running java -if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then - APP_HOME=`cygpath --path --mixed "$APP_HOME"` - CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` - JAVACMD=`cygpath --unix "$JAVACMD"` - - # We build the pattern for arguments to be converted via cygpath - ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` - SEP="" - for dir in $ROOTDIRSRAW ; do - ROOTDIRS="$ROOTDIRS$SEP$dir" - SEP="|" - done - OURCYGPATTERN="(^($ROOTDIRS))" - # Add a user-defined pattern to the cygpath arguments - if [ "$GRADLE_CYGPATTERN" != "" ] ; then - OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)" - fi - # Now convert the arguments - kludge to limit ourselves to /bin/sh - i=0 - for arg in "$@" ; do - CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` - CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option - - if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition - eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` - else - eval `echo args$i`="\"$arg\"" - fi - i=`expr $i + 1` - done - case $i in - 0) set -- ;; - 1) set -- "$args0" ;; - 2) set -- "$args0" "$args1" ;; - 3) set -- "$args0" "$args1" "$args2" ;; - 4) set -- "$args0" "$args1" "$args2" "$args3" ;; - 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; - 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; - 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; - 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; - 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" esac fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=`save "$@"` +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # Now convert the arguments - kludge to limit ourselves to /bin/sh + for arg do + if + case $arg in #( + -*) false ;; # don't mess with options #( + /?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath + [ -e "$t" ] ;; #( + *) false ;; + esac + then + arg=$( cygpath --path --ignore --mixed "$arg" ) + fi + # Roll the args list around exactly as many times as the number of + # args, so each arg winds up back in the position where it started, but + # possibly modified. + # + # NB: a `for` loop captures its iteration list before it begins, so + # changing the positional parameters here affects neither the number of + # iterations, nor the values presented in `arg`. + shift # remove old arg + set -- "$@" "$arg" # push replacement arg + done + +fi + +# Collect all arguments for the java command; +# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of +# shell script including quotes and variable substitutions, so put them in +# double quotes to make sure that they get re-expanded; and +# * put everything else in single quotes, so that it's not re-expanded. +set -- \ + "-Dorg.gradle.appname=$APP_BASE_NAME" \ + -classpath "$CLASSPATH" \ + org.gradle.wrapper.GradleWrapperMain \ + "$@" +# Use "xargs" to parse quoted args. +# +# With -n1 it outputs one arg per line, with the quotes and backslashes removed. +# +# In Bash we could simply go: +# +# readarray ARGS < <( xargs -n1 <<<"$var" ) && +# set -- "${ARGS[@]}" "$@" +# +# but POSIX shell has neither arrays nor command substitution, so instead we +# post-process each arg (as a line of input to sed) to backslash-escape any +# character that might be a shell metacharacter, then use eval to reverse +# that process (while maintaining the separation between arguments), and wrap +# the whole thing up as a single "set" statement. +# +# This will of course break if any of these variables contains a newline or +# an unmatched quote. +# + +eval "set -- $( + printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" | + xargs -n1 | + sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' | + tr '\n' ' ' + )" '"$@"' + + exec "$JAVACMD" "$@" diff --git a/android/gradlew.bat b/android/gradlew.bat index c86d88fbc..0ae449ec6 100644 --- a/android/gradlew.bat +++ b/android/gradlew.bat @@ -40,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -54,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -64,28 +64,13 @@ echo location of your Java installation. goto fail -:init -@rem Get command-line arguments, handling Windows variants - -if not "%OS%" == "Windows_NT" goto win9xME_args - -:win9xME_args -@rem Slurp the command line arguments. -set CMD_LINE_ARGS= -set _SKIP=2 - -:win9xME_args_slurp -if "x%~1" == "x" goto execute - -set CMD_LINE_ARGS=%* - :execute @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar @rem Execute Gradle -"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% +"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %* :end @rem End local scope for the variables with windows NT shell diff --git a/android/settings.gradle b/android/settings.gradle index f723b425d..5aa74e15d 100644 --- a/android/settings.gradle +++ b/android/settings.gradle @@ -3,3 +3,10 @@ apply from: file("../node_modules/@react-native-community/cli-platform-android/n include ':react-native-pager-view' project(':react-native-pager-view').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-pager-view/android') include ':app' +includeBuild('../node_modules/react-native-gradle-plugin') +if (settings.hasProperty("newArchEnabled") && settings.newArchEnabled == "true") { + include(":ReactAndroid") + project(":ReactAndroid").projectDir = file('../node_modules/react-native/ReactAndroid') + include(":ReactAndroid:hermes-engine") + project(":ReactAndroid:hermes-engine").projectDir = file('../node_modules/react-native/ReactAndroid/hermes-engine') +} \ No newline at end of file diff --git a/appcenter-pre-build.sh b/appcenter-pre-build.sh index f249a75d2..ff6269ad9 100644 --- a/appcenter-pre-build.sh +++ b/appcenter-pre-build.sh @@ -62,8 +62,6 @@ printf "\n.env created with contents:\n" cat .env printf "\nEND OF .env\n" -npx jetify - cd ios && pod install && cd .. cd android && ./gradlew clean && cd .. diff --git a/babel.config.js b/babel.config.js index 2b8ca7616..9d8961daa 100644 --- a/babel.config.js +++ b/babel.config.js @@ -5,6 +5,9 @@ module.exports = (api) => { if (babelEnv !== 'development') { plugins.push(['transform-remove-console', { exclude: ['error', 'warn'] }]); } + + //Reanimated should be last plugin added in babel + plugins.push(['react-native-reanimated/plugin']); return { presets: ['module:metro-react-native-babel-preset'], sourceMaps: true, diff --git a/index.js b/index.js index b23b34c52..bb2418f0a 100644 --- a/index.js +++ b/index.js @@ -3,14 +3,13 @@ import AppCenter from 'appcenter'; import { name as appName } from './app.json'; import 'core-js'; import 'intl'; -import 'intl/locale-data/jsonp/en-US' +import 'intl/locale-data/jsonp/en-US'; // set check frequency options const EcencyApp = require('./App').default; AppCenter.setLogLevel(AppCenter.LogLevel.VERBOSE); - // TODO Remove ignoreLogs when referenced issue is fixed properly // ref: https://github.com/ecency/ecency-mobile/issues/2466 // ignore warnings diff --git a/ios/.xcode.env b/ios/.xcode.env new file mode 100644 index 000000000..3d5782c71 --- /dev/null +++ b/ios/.xcode.env @@ -0,0 +1,11 @@ +# This `.xcode.env` file is versioned and is used to source the environment +# used when running script phases inside Xcode. +# To customize your local environment, you can create an `.xcode.env.local` +# file that is not versioned. + +# NODE_BINARY variable contains the PATH to the node executable. +# +# Customize the NODE_BINARY variable here. +# For example, to use nvm with brew, add the following line +# . "$(brew --prefix nvm)/nvm.sh" --no-use +export NODE_BINARY=$(command -v node) diff --git a/ios/Ecency-tvOS/Info.plist b/ios/Ecency-tvOS/Info.plist deleted file mode 100644 index 49df4a53f..000000000 --- a/ios/Ecency-tvOS/Info.plist +++ /dev/null @@ -1,53 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - $(PRODUCT_BUNDLE_IDENTIFIER) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - APPL - CFBundleShortVersionString - 3.0.35 - CFBundleSignature - ???? - CFBundleVersion - 2814 - LSRequiresIPhoneOS - - NSAppTransportSecurity - - NSExceptionDomains - - localhost - - NSExceptionAllowsInsecureHTTPLoads - - - - - NSLocationWhenInUseUsageDescription - - UILaunchStoryboardName - LaunchScreen - UIRequiredDeviceCapabilities - - armv7 - - UISupportedInterfaceOrientations - - UIInterfaceOrientationPortrait - UIInterfaceOrientationLandscapeLeft - UIInterfaceOrientationLandscapeRight - - UIViewControllerBasedStatusBarAppearance - - - diff --git a/ios/Ecency-tvOSTests/Info.plist b/ios/Ecency-tvOSTests/Info.plist deleted file mode 100644 index 57d15929e..000000000 --- a/ios/Ecency-tvOSTests/Info.plist +++ /dev/null @@ -1,24 +0,0 @@ - - - - - CFBundleDevelopmentRegion - en - CFBundleExecutable - $(EXECUTABLE_NAME) - CFBundleIdentifier - org.reactjs.native.example.$(PRODUCT_NAME:rfc1034identifier) - CFBundleInfoDictionaryVersion - 6.0 - CFBundleName - $(PRODUCT_NAME) - CFBundlePackageType - BNDL - CFBundleShortVersionString - 3.0.35 - CFBundleSignature - ???? - CFBundleVersion - 2814 - - diff --git a/ios/Ecency.xcodeproj/project.pbxproj b/ios/Ecency.xcodeproj/project.pbxproj index decc85785..498dd23ac 100644 --- a/ios/Ecency.xcodeproj/project.pbxproj +++ b/ios/Ecency.xcodeproj/project.pbxproj @@ -3,7 +3,7 @@ archiveVersion = 1; classes = { }; - objectVersion = 46; + objectVersion = 52; objects = { /* Begin PBXBuildFile section */ @@ -14,29 +14,27 @@ 0516471224D2C513005DE9C5 /* eshare.appex in Embed App Extensions */ = {isa = PBXBuildFile; fileRef = 0516470824D2C513005DE9C5 /* eshare.appex */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 053EA30026B2B9920082FEB9 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053EA2FF26B2B9920082FEB9 /* File.swift */; }; 053EA30326B2BA150082FEB9 /* File.swift in Sources */ = {isa = PBXBuildFile; fileRef = 053EA30226B2BA150082FEB9 /* File.swift */; }; - 05B6C49024C306CE00B7FA60 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 05B6C49224C306CE00B7FA60 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 05B6C49424C306CE00B7FA60 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 58190B3B23294814000EA0E1 /* StoreKit.framework */; }; 05B6C49724C306CE00B7FA60 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; - 05B6C49824C306CE00B7FA60 /* LaunchScreen.xib in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB11A68108700A75B9A /* LaunchScreen.xib */; }; 05B6C4A724C306CE00B7FA60 /* AppCenter-Config.plist in Resources */ = {isa = PBXBuildFile; fileRef = 588019232355C26B008397D1 /* AppCenter-Config.plist */; }; + 06844A5529119F05002FCC34 /* BootSplash.storyboard in Resources */ = {isa = PBXBuildFile; fileRef = 06844A5429119F05002FCC34 /* BootSplash.storyboard */; }; + 06F72CA3290B2159003392F3 /* AppDelegate.mm in Sources */ = {isa = PBXBuildFile; fileRef = 06F72CA2290B2159003392F3 /* AppDelegate.mm */; }; + 06F72CA6290B2D7F003392F3 /* hermes.xcframework in Frameworks */ = {isa = PBXBuildFile; fileRef = 06F72CA5290B2D7F003392F3 /* hermes.xcframework */; }; + 070D165EE2426D3BFD0F009C /* libPods-Ecency.a in Frameworks */ = {isa = PBXBuildFile; fileRef = A20A4091C647F3817494D39A /* libPods-Ecency.a */; }; 1CD0B89E258019B600A7D78E /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 1CD0B89B258019B600A7D78E /* GoogleService-Info.plist */; }; - 28690EFF0237323FA236F48E /* libPods-Ecency.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 06C668B81E466F826D826B29 /* libPods-Ecency.a */; }; - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB01A68108700A75B9A /* AppDelegate.m */; }; 2D02E4BD1E0B4A84006451C7 /* Images.xcassets in Resources */ = {isa = PBXBuildFile; fileRef = 13B07FB51A68108700A75B9A /* Images.xcassets */; }; 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */ = {isa = PBXBuildFile; fileRef = 13B07FB71A68108700A75B9A /* main.m */; }; 2DCD954D1E0B4F2C00145EB5 /* EcencyTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 00E356F21AD99517003FC87E /* EcencyTests.m */; }; 2E340255E74B48D8AF5B650C /* Sansation_Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5ADE4B4B75DF437495E202D4 /* Sansation_Regular.ttf */; }; - 33A1EDC04D608E3970D05020 /* libPods-Ecency-tvOS.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E8168654822431B99C822D1E /* libPods-Ecency-tvOS.a */; }; 58F9BCC624793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; }; 58F9BCC724793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; }; 58F9BCC824793C61004F0790 /* GoogleService-Info.plist in Resources */ = {isa = PBXBuildFile; fileRef = 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */; }; - 7B84583BFA7117928FDAB8E4 /* libPods-Ecency-tvOSTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 510D76908C41FEE9FFD5BFC0 /* libPods-Ecency-tvOSTests.a */; }; 7C8D083700274C80BADEB3D6 /* Sansation_Bold.ttf in Resources */ = {isa = PBXBuildFile; fileRef = F1D77AE9F7B24CF19834052B /* Sansation_Bold.ttf */; }; 89D99F65314A416290F8D921 /* Roboto.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 64F2A611E6EF486C8D3FB82C /* Roboto.ttf */; }; 92082305364D41A4A673F950 /* RobotoMono-Regular.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 5795D1B1C55E46FF96CC4AED /* RobotoMono-Regular.ttf */; }; A57EE8B63D4948F0A05218E3 /* rubicon-icon-font.ttf in Resources */ = {isa = PBXBuildFile; fileRef = 65F56948860941D6BA55779F /* rubicon-icon-font.ttf */; }; - FDF1297AF3F287FCC211E31D /* libPods-Ecency-EcencyTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = C3196C4659CAC6C7C77AEC7A /* libPods-Ecency-EcencyTests.a */; }; + C6D3A31559F1FD5C4F294757 /* libPods-Ecency-EcencyTests.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 37F260E8D694207BB3BD565F /* libPods-Ecency-EcencyTests.a */; }; /* End PBXBuildFile section */ /* Begin PBXContainerItemProxy section */ @@ -100,26 +98,25 @@ 053EA30226B2BA150082FEB9 /* File.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = File.swift; sourceTree = ""; }; 05A14D162518B03000EB7509 /* Ecency-Bridging-Header.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = "Ecency-Bridging-Header.h"; sourceTree = ""; }; 05B6C4B724C306CE00B7FA60 /* Ecency.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = Ecency.app; sourceTree = BUILT_PRODUCTS_DIR; }; - 06C668B81E466F826D826B29 /* libPods-Ecency.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Ecency.a"; sourceTree = BUILT_PRODUCTS_DIR; }; + 06844A5429119F05002FCC34 /* BootSplash.storyboard */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = file.storyboard; name = BootSplash.storyboard; path = Ecency/BootSplash.storyboard; sourceTree = ""; }; + 06F72CA2290B2159003392F3 /* AppDelegate.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; name = AppDelegate.mm; path = Ecency/AppDelegate.mm; sourceTree = ""; }; + 06F72CA5290B2D7F003392F3 /* hermes.xcframework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.xcframework; name = hermes.xcframework; path = "Pods/hermes-engine/destroot/Library/Frameworks/universal/hermes.xcframework"; sourceTree = ""; }; 112758B0BBF9458381CE41FD /* FontAwesome.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome.ttf"; sourceTree = ""; }; 11CAB2F9B4B7425ABCAB4007 /* Foundation.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Foundation.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Foundation.ttf"; sourceTree = ""; }; 13B07FAF1A68108700A75B9A /* AppDelegate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = AppDelegate.h; path = Ecency/AppDelegate.h; sourceTree = ""; }; - 13B07FB01A68108700A75B9A /* AppDelegate.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = AppDelegate.m; path = Ecency/AppDelegate.m; sourceTree = ""; }; - 13B07FB21A68108700A75B9A /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/LaunchScreen.xib; sourceTree = ""; }; 13B07FB51A68108700A75B9A /* Images.xcassets */ = {isa = PBXFileReference; lastKnownFileType = folder.assetcatalog; name = Images.xcassets; path = Ecency/Images.xcassets; sourceTree = ""; }; 13B07FB61A68108700A75B9A /* Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; name = Info.plist; path = Ecency/Info.plist; sourceTree = ""; }; 13B07FB71A68108700A75B9A /* main.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = main.m; path = Ecency/main.m; sourceTree = ""; }; 1CD0B89B258019B600A7D78E /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; - 216F9707AFD64AC617233E7D /* Pods-Ecency-tvOS.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-tvOS.debug.xcconfig"; path = "Target Support Files/Pods-Ecency-tvOS/Pods-Ecency-tvOS.debug.xcconfig"; sourceTree = ""; }; + 21BEC84F5B56E6AB5B3AC205 /* Pods-Ecency-EcencyTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-EcencyTests.debug.xcconfig"; path = "Target Support Files/Pods-Ecency-EcencyTests/Pods-Ecency-EcencyTests.debug.xcconfig"; sourceTree = ""; }; 22F5F05A06E142C2B41A4D38 /* MaterialCommunityIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialCommunityIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialCommunityIcons.ttf"; sourceTree = ""; }; 263FA8C0EF21473FAAAD3EDD /* MaterialIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = MaterialIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/MaterialIcons.ttf"; sourceTree = ""; }; 2D02E47B1E0B4A5D006451C7 /* Ecency-tvOS.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = "Ecency-tvOS.app"; sourceTree = BUILT_PRODUCTS_DIR; }; 2D02E4901E0B4A5D006451C7 /* Ecency-tvOSTests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "Ecency-tvOSTests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; }; 34E88D888DD444F8B285363C /* SimpleLineIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = SimpleLineIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/SimpleLineIcons.ttf"; sourceTree = ""; }; + 37F260E8D694207BB3BD565F /* libPods-Ecency-EcencyTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Ecency-EcencyTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 420ABF9795564845A0963C27 /* Feather.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Feather.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Feather.ttf"; sourceTree = ""; }; - 4358E0DDF21A7AD3ED95F877 /* Pods-Ecency-tvOS.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-tvOS.release.xcconfig"; path = "Target Support Files/Pods-Ecency-tvOS/Pods-Ecency-tvOS.release.xcconfig"; sourceTree = ""; }; 4EB466C53BAE4EDC904357B3 /* FontAwesome5_Solid.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Solid.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Solid.ttf"; sourceTree = ""; }; - 510D76908C41FEE9FFD5BFC0 /* libPods-Ecency-tvOSTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Ecency-tvOSTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; 5795D1B1C55E46FF96CC4AED /* RobotoMono-Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "RobotoMono-Regular.ttf"; path = "../src/assets/fonts/RobotoMono-Regular.ttf"; sourceTree = ""; }; 58190B3B23294814000EA0E1 /* StoreKit.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = StoreKit.framework; path = System/Library/Frameworks/StoreKit.framework; sourceTree = SDKROOT; }; 58190B3D23294823000EA0E1 /* Ecency.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; name = Ecency.entitlements; path = Ecency/Ecency.entitlements; sourceTree = ""; }; @@ -130,9 +127,9 @@ 58F6300F2350580B0017C953 /* libRealmJS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; path = libRealmJS.a; sourceTree = BUILT_PRODUCTS_DIR; }; 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.xml; path = "GoogleService-Info.plist"; sourceTree = ""; }; 5ADE4B4B75DF437495E202D4 /* Sansation_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Sansation_Regular.ttf; path = ../src/assets/fonts/Sansation_Regular.ttf; sourceTree = ""; }; + 6498844345D56B253AAA8F39 /* Pods-Ecency-EcencyTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-EcencyTests.release.xcconfig"; path = "Target Support Files/Pods-Ecency-EcencyTests/Pods-Ecency-EcencyTests.release.xcconfig"; sourceTree = ""; }; 64F2A611E6EF486C8D3FB82C /* Roboto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Roboto.ttf; path = ../src/assets/fonts/Roboto.ttf; sourceTree = ""; }; 65F56948860941D6BA55779F /* rubicon-icon-font.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "rubicon-icon-font.ttf"; path = "../src/assets/fonts/rubicon-icon-font.ttf"; sourceTree = ""; }; - 6D4FF1221037B5D88CA03C8F /* Pods-Ecency.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency.release.xcconfig"; path = "Target Support Files/Pods-Ecency/Pods-Ecency.release.xcconfig"; sourceTree = ""; }; 6D935B44FB5A4CF3BF4D01DF /* Ionicons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Ionicons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Ionicons.ttf"; sourceTree = ""; }; 7900A87FFF214846B5FE0430 /* Roboto-medium.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = "Roboto-medium.ttf"; path = "../src/assets/fonts/Roboto-medium.ttf"; sourceTree = ""; }; 93B182C6FFA44610AB188D7C /* Entypo.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Entypo.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Entypo.ttf"; sourceTree = ""; }; @@ -140,15 +137,11 @@ 980BC9BC0D3B4AC69645C842 /* Zocial.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Zocial.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Zocial.ttf"; sourceTree = ""; }; 98D3D7C3AF354BF0987A2BFA /* Fontisto.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Fontisto.ttf; path = "../node_modules/react-native-vector-icons/Fonts/Fontisto.ttf"; sourceTree = ""; }; 9BC08A790166415B9BB3F5CF /* FontAwesome5_Regular.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Regular.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Regular.ttf"; sourceTree = ""; }; - 9FB1E2845897A58F19F68685 /* Pods-Ecency.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency.debug.xcconfig"; path = "Target Support Files/Pods-Ecency/Pods-Ecency.debug.xcconfig"; sourceTree = ""; }; + A20A4091C647F3817494D39A /* libPods-Ecency.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Ecency.a"; sourceTree = BUILT_PRODUCTS_DIR; }; A239FC84622A4A9CA7950ED9 /* EvilIcons.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = EvilIcons.ttf; path = "../node_modules/react-native-vector-icons/Fonts/EvilIcons.ttf"; sourceTree = ""; }; - A5582F69AA5100D8FE578391 /* Pods-Ecency-tvOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-tvOSTests.release.xcconfig"; path = "Target Support Files/Pods-Ecency-tvOSTests/Pods-Ecency-tvOSTests.release.xcconfig"; sourceTree = ""; }; + A8B66235268E2F5BF51B546A /* Pods-Ecency.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency.release.xcconfig"; path = "Target Support Files/Pods-Ecency/Pods-Ecency.release.xcconfig"; sourceTree = ""; }; + B82B279CA78F6126E7A2514E /* Pods-Ecency.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency.debug.xcconfig"; path = "Target Support Files/Pods-Ecency/Pods-Ecency.debug.xcconfig"; sourceTree = ""; }; BB1093ACCD904E2883413214 /* FontAwesome5_Brands.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = FontAwesome5_Brands.ttf; path = "../node_modules/react-native-vector-icons/Fonts/FontAwesome5_Brands.ttf"; sourceTree = ""; }; - C3196C4659CAC6C7C77AEC7A /* libPods-Ecency-EcencyTests.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Ecency-EcencyTests.a"; sourceTree = BUILT_PRODUCTS_DIR; }; - CD181F1A31C1283DD7DD02E5 /* Pods-Ecency-EcencyTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-EcencyTests.release.xcconfig"; path = "Target Support Files/Pods-Ecency-EcencyTests/Pods-Ecency-EcencyTests.release.xcconfig"; sourceTree = ""; }; - CF3FDE4A45484091EBE305DF /* Pods-Ecency-tvOSTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-tvOSTests.debug.xcconfig"; path = "Target Support Files/Pods-Ecency-tvOSTests/Pods-Ecency-tvOSTests.debug.xcconfig"; sourceTree = ""; }; - DD550C31DE5DDEF4DACA6626 /* Pods-Ecency-EcencyTests.debug.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-Ecency-EcencyTests.debug.xcconfig"; path = "Target Support Files/Pods-Ecency-EcencyTests/Pods-Ecency-EcencyTests.debug.xcconfig"; sourceTree = ""; }; - E8168654822431B99C822D1E /* libPods-Ecency-tvOS.a */ = {isa = PBXFileReference; explicitFileType = archive.ar; includeInIndex = 0; path = "libPods-Ecency-tvOS.a"; sourceTree = BUILT_PRODUCTS_DIR; }; ED297162215061F000B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = System/Library/Frameworks/JavaScriptCore.framework; sourceTree = SDKROOT; }; ED2971642150620600B7C4FE /* JavaScriptCore.framework */ = {isa = PBXFileReference; lastKnownFileType = wrapper.framework; name = JavaScriptCore.framework; path = Platforms/AppleTVOS.platform/Developer/SDKs/AppleTVOS12.0.sdk/System/Library/Frameworks/JavaScriptCore.framework; sourceTree = DEVELOPER_DIR; }; F1D77AE9F7B24CF19834052B /* Sansation_Bold.ttf */ = {isa = PBXFileReference; explicitFileType = undefined; fileEncoding = 9; includeInIndex = 0; lastKnownFileType = unknown; name = Sansation_Bold.ttf; path = ../src/assets/fonts/Sansation_Bold.ttf; sourceTree = ""; }; @@ -159,7 +152,7 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - FDF1297AF3F287FCC211E31D /* libPods-Ecency-EcencyTests.a in Frameworks */, + C6D3A31559F1FD5C4F294757 /* libPods-Ecency-EcencyTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -174,8 +167,9 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( + 06F72CA6290B2D7F003392F3 /* hermes.xcframework in Frameworks */, 05B6C49424C306CE00B7FA60 /* StoreKit.framework in Frameworks */, - 28690EFF0237323FA236F48E /* libPods-Ecency.a in Frameworks */, + 070D165EE2426D3BFD0F009C /* libPods-Ecency.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -183,7 +177,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 33A1EDC04D608E3970D05020 /* libPods-Ecency-tvOS.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -191,7 +184,6 @@ isa = PBXFrameworksBuildPhase; buildActionMask = 2147483647; files = ( - 7B84583BFA7117928FDAB8E4 /* libPods-Ecency-tvOSTests.a in Frameworks */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -231,16 +223,16 @@ 13B07FAE1A68108700A75B9A /* Ecency */ = { isa = PBXGroup; children = ( + 06844A5429119F05002FCC34 /* BootSplash.storyboard */, + 06F72CA2290B2159003392F3 /* AppDelegate.mm */, 58C9F50B24CE084600A026DD /* EcencyDebug.entitlements */, 58F9BCC224793C61004F0790 /* GoogleService-Info.plist */, 58190B3D23294823000EA0E1 /* Ecency.entitlements */, 008F07F21AC5B25A0029DE68 /* main.jsbundle */, 13B07FAF1A68108700A75B9A /* AppDelegate.h */, - 13B07FB01A68108700A75B9A /* AppDelegate.m */, 053EA2FF26B2B9920082FEB9 /* File.swift */, 13B07FB51A68108700A75B9A /* Images.xcassets */, 13B07FB61A68108700A75B9A /* Info.plist */, - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */, 13B07FB71A68108700A75B9A /* main.m */, 05A14D162518B03000EB7509 /* Ecency-Bridging-Header.h */, ); @@ -250,14 +242,10 @@ 258E34A3BDFFFBF80D598187 /* Pods */ = { isa = PBXGroup; children = ( - 9FB1E2845897A58F19F68685 /* Pods-Ecency.debug.xcconfig */, - 6D4FF1221037B5D88CA03C8F /* Pods-Ecency.release.xcconfig */, - DD550C31DE5DDEF4DACA6626 /* Pods-Ecency-EcencyTests.debug.xcconfig */, - CD181F1A31C1283DD7DD02E5 /* Pods-Ecency-EcencyTests.release.xcconfig */, - 216F9707AFD64AC617233E7D /* Pods-Ecency-tvOS.debug.xcconfig */, - 4358E0DDF21A7AD3ED95F877 /* Pods-Ecency-tvOS.release.xcconfig */, - CF3FDE4A45484091EBE305DF /* Pods-Ecency-tvOSTests.debug.xcconfig */, - A5582F69AA5100D8FE578391 /* Pods-Ecency-tvOSTests.release.xcconfig */, + B82B279CA78F6126E7A2514E /* Pods-Ecency.debug.xcconfig */, + A8B66235268E2F5BF51B546A /* Pods-Ecency.release.xcconfig */, + 21BEC84F5B56E6AB5B3AC205 /* Pods-Ecency-EcencyTests.debug.xcconfig */, + 6498844345D56B253AAA8F39 /* Pods-Ecency-EcencyTests.release.xcconfig */, ); path = Pods; sourceTree = ""; @@ -265,15 +253,14 @@ 2D16E6871FA4F8E400B85C8A /* Frameworks */ = { isa = PBXGroup; children = ( + 06F72CA5290B2D7F003392F3 /* hermes.xcframework */, 58F6300F2350580B0017C953 /* libRealmJS.a */, 58190B4723294D1D000EA0E1 /* libreact-native-config.a */, 58190B3B23294814000EA0E1 /* StoreKit.framework */, ED297162215061F000B7C4FE /* JavaScriptCore.framework */, ED2971642150620600B7C4FE /* JavaScriptCore.framework */, - 06C668B81E466F826D826B29 /* libPods-Ecency.a */, - C3196C4659CAC6C7C77AEC7A /* libPods-Ecency-EcencyTests.a */, - E8168654822431B99C822D1E /* libPods-Ecency-tvOS.a */, - 510D76908C41FEE9FFD5BFC0 /* libPods-Ecency-tvOSTests.a */, + A20A4091C647F3817494D39A /* libPods-Ecency.a */, + 37F260E8D694207BB3BD565F /* libPods-Ecency-EcencyTests.a */, ); name = Frameworks; sourceTree = ""; @@ -370,11 +357,11 @@ isa = PBXNativeTarget; buildConfigurationList = 00E357021AD99517003FC87E /* Build configuration list for PBXNativeTarget "EcencyTests" */; buildPhases = ( - 1A9191B632AA69F982AB95D8 /* [CP] Check Pods Manifest.lock */, + C1B6F173290C712E69580A42 /* [CP] Check Pods Manifest.lock */, 00E356EA1AD99517003FC87E /* Sources */, 00E356EB1AD99517003FC87E /* Frameworks */, 00E356EC1AD99517003FC87E /* Resources */, - D642CAC124B876CB94A2EF0E /* [CP] Copy Pods Resources */, + A3EFFA92567F2239E41A4CC9 /* [CP] Copy Pods Resources */, ); buildRules = ( ); @@ -406,7 +393,7 @@ isa = PBXNativeTarget; buildConfigurationList = 05B6C4B424C306CE00B7FA60 /* Build configuration list for PBXNativeTarget "Ecency" */; buildPhases = ( - A64AC64BEBDBA3179D463E28 /* [CP] Check Pods Manifest.lock */, + C1E66453001DDA757DB92E91 /* [CP] Check Pods Manifest.lock */, 05B6C48E24C306CE00B7FA60 /* Start Packager */, 05B6C48F24C306CE00B7FA60 /* Sources */, 05B6C49324C306CE00B7FA60 /* Frameworks */, @@ -415,8 +402,8 @@ 58C9F50524CE017800A026DD /* Embed App Extensions */, 05BAAAEE25BF43F80072EA01 /* ShellScript */, 3D1F6693773C4541A695BB3C /* Upload source maps to Bugsnag */, - 0BB3F32762980D1299479B70 /* [CP] Copy Pods Resources */, - 54073F7F1A9231975C216F33 /* [CP-User] [RNFB] Core Configuration */, + 1176D7594CFCC98BD864C2C0 /* [CP] Copy Pods Resources */, + C690FE879278A17D0AE1C6BF /* [CP-User] [RNFB] Core Configuration */, ); buildRules = ( ); @@ -432,7 +419,6 @@ isa = PBXNativeTarget; buildConfigurationList = 2D02E4BA1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Ecency-tvOS" */; buildPhases = ( - ACE060BFE09104C3F29D1AC1 /* [CP] Check Pods Manifest.lock */, FD10A7F122414F3F0027D42C /* Start Packager */, 2D02E4771E0B4A5D006451C7 /* Sources */, 2D02E4781E0B4A5D006451C7 /* Frameworks */, @@ -451,7 +437,6 @@ isa = PBXNativeTarget; buildConfigurationList = 2D02E4BB1E0B4A5E006451C7 /* Build configuration list for PBXNativeTarget "Ecency-tvOSTests" */; buildPhases = ( - F6063ED7890CE325C9C4992E /* [CP] Check Pods Manifest.lock */, 57F4EECD4004FE3420E6DF92 /* Bundle React Native Code And Images */, 2D02E48C1E0B4A5D006451C7 /* Sources */, 2D02E48D1E0B4A5D006451C7 /* Frameworks */, @@ -573,11 +558,11 @@ buildActionMask = 2147483647; files = ( 05B6C49724C306CE00B7FA60 /* Images.xcassets in Resources */, - 05B6C49824C306CE00B7FA60 /* LaunchScreen.xib in Resources */, 1CD0B89E258019B600A7D78E /* GoogleService-Info.plist in Resources */, 05B6C4A724C306CE00B7FA60 /* AppCenter-Config.plist in Resources */, 021526F0AF8A45FCB60C9C56 /* Roboto-medium.ttf in Resources */, 89D99F65314A416290F8D921 /* Roboto.ttf in Resources */, + 06844A5529119F05002FCC34 /* BootSplash.storyboard in Resources */, 92082305364D41A4A673F950 /* RobotoMono-Regular.ttf in Resources */, A57EE8B63D4948F0A05218E3 /* rubicon-icon-font.ttf in Resources */, 7C8D083700274C80BADEB3D6 /* Sansation_Bold.ttf in Resources */, @@ -655,7 +640,7 @@ shellPath = /bin/sh; shellScript = "# Type a script or drag a script file from your workspace to insert its path.\n"; }; - 0BB3F32762980D1299479B70 /* [CP] Copy Pods Resources */ = { + 1176D7594CFCC98BD864C2C0 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -709,28 +694,6 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Ecency/Pods-Ecency-resources.sh\"\n"; showEnvVarsInLog = 0; }; - 1A9191B632AA69F982AB95D8 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Ecency-EcencyTests-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; 3D1F6693773C4541A695BB3C /* Upload source maps to Bugsnag */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -745,19 +708,6 @@ shellPath = /bin/sh; shellScript = "SOURCE_MAP=\"$TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\" ../node_modules/@bugsnag/react-native/bugsnag-react-native-xcode.sh"; }; - 54073F7F1A9231975C216F33 /* [CP-User] [RNFB] Core Configuration */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputPaths = ( - "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", - ); - name = "[CP-User] [RNFB] Core Configuration"; - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; - }; 57F4EECD4004FE3420E6DF92 /* Bundle React Native Code And Images */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -772,51 +722,7 @@ shellPath = /bin/sh; shellScript = "export EXTRA_PACKAGER_ARGS=\"--sourcemap-output $TMPDIR/$(md5 -qs \"$CONFIGURATION_BUILD_DIR\")-main.jsbundle.map\"\nexport EXTRA_PACKAGER_ARGS=\"--sourcemap-output $CONFIGURATION_BUILD_DIR/$UNLOCALIZED_RESOURCES_FOLDER_PATH/main.jsbundle.map\"\nexport NODE_BINARY=node\n../node_modules/react-native/scripts/react-native-xcode.sh"; }; - A64AC64BEBDBA3179D463E28 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Ecency-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - ACE060BFE09104C3F29D1AC1 /* [CP] Check Pods Manifest.lock */ = { - isa = PBXShellScriptBuildPhase; - buildActionMask = 2147483647; - files = ( - ); - inputFileListPaths = ( - ); - inputPaths = ( - "${PODS_PODFILE_DIR_PATH}/Podfile.lock", - "${PODS_ROOT}/Manifest.lock", - ); - name = "[CP] Check Pods Manifest.lock"; - outputFileListPaths = ( - ); - outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Ecency-tvOS-checkManifestLockResult.txt", - ); - runOnlyForDeploymentPostprocessing = 0; - shellPath = /bin/sh; - shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; - showEnvVarsInLog = 0; - }; - D642CAC124B876CB94A2EF0E /* [CP] Copy Pods Resources */ = { + A3EFFA92567F2239E41A4CC9 /* [CP] Copy Pods Resources */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -870,7 +776,7 @@ shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Ecency-EcencyTests/Pods-Ecency-EcencyTests-resources.sh\"\n"; showEnvVarsInLog = 0; }; - F6063ED7890CE325C9C4992E /* [CP] Check Pods Manifest.lock */ = { + C1B6F173290C712E69580A42 /* [CP] Check Pods Manifest.lock */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; files = ( @@ -885,13 +791,48 @@ outputFileListPaths = ( ); outputPaths = ( - "$(DERIVED_FILE_DIR)/Pods-Ecency-tvOSTests-checkManifestLockResult.txt", + "$(DERIVED_FILE_DIR)/Pods-Ecency-EcencyTests-checkManifestLockResult.txt", ); runOnlyForDeploymentPostprocessing = 0; shellPath = /bin/sh; shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; showEnvVarsInLog = 0; }; + C1E66453001DDA757DB92E91 /* [CP] Check Pods Manifest.lock */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputFileListPaths = ( + ); + inputPaths = ( + "${PODS_PODFILE_DIR_PATH}/Podfile.lock", + "${PODS_ROOT}/Manifest.lock", + ); + name = "[CP] Check Pods Manifest.lock"; + outputFileListPaths = ( + ); + outputPaths = ( + "$(DERIVED_FILE_DIR)/Pods-Ecency-checkManifestLockResult.txt", + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n"; + showEnvVarsInLog = 0; + }; + C690FE879278A17D0AE1C6BF /* [CP-User] [RNFB] Core Configuration */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + "$(BUILT_PRODUCTS_DIR)/$(INFOPLIST_PATH)", + ); + name = "[CP-User] [RNFB] Core Configuration"; + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "#!/usr/bin/env bash\n#\n# Copyright (c) 2016-present Invertase Limited & Contributors\n#\n# Licensed under the Apache License, Version 2.0 (the \"License\");\n# you may not use this library except in compliance with the License.\n# You may obtain a copy of the License at\n#\n# http://www.apache.org/licenses/LICENSE-2.0\n#\n# Unless required by applicable law or agreed to in writing, software\n# distributed under the License is distributed on an \"AS IS\" BASIS,\n# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n# See the License for the specific language governing permissions and\n# limitations under the License.\n#\nset -e\n\n_MAX_LOOKUPS=2;\n_SEARCH_RESULT=''\n_RN_ROOT_EXISTS=''\n_CURRENT_LOOKUPS=1\n_JSON_ROOT=\"'react-native'\"\n_JSON_FILE_NAME='firebase.json'\n_JSON_OUTPUT_BASE64='e30=' # { }\n_CURRENT_SEARCH_DIR=${PROJECT_DIR}\n_PLIST_BUDDY=/usr/libexec/PlistBuddy\n_TARGET_PLIST=\"${BUILT_PRODUCTS_DIR}/${INFOPLIST_PATH}\"\n_DSYM_PLIST=\"${DWARF_DSYM_FOLDER_PATH}/${DWARF_DSYM_FILE_NAME}/Contents/Info.plist\"\n\n# plist arrays\n_PLIST_ENTRY_KEYS=()\n_PLIST_ENTRY_TYPES=()\n_PLIST_ENTRY_VALUES=()\n\nfunction setPlistValue {\n echo \"info: setting plist entry '$1' of type '$2' in file '$4'\"\n ${_PLIST_BUDDY} -c \"Add :$1 $2 '$3'\" $4 || echo \"info: '$1' already exists\"\n}\n\nfunction getFirebaseJsonKeyValue () {\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$1'); puts output[$_JSON_ROOT]['$2']\"\n else\n echo \"\"\n fi;\n}\n\nfunction jsonBoolToYesNo () {\n if [[ $1 == \"false\" ]]; then\n echo \"NO\"\n elif [[ $1 == \"true\" ]]; then\n echo \"YES\"\n else echo \"NO\"\n fi\n}\n\necho \"info: -> RNFB build script started\"\necho \"info: 1) Locating ${_JSON_FILE_NAME} file:\"\n\nif [[ -z ${_CURRENT_SEARCH_DIR} ]]; then\n _CURRENT_SEARCH_DIR=$(pwd)\nfi;\n\nwhile true; do\n _CURRENT_SEARCH_DIR=$(dirname \"$_CURRENT_SEARCH_DIR\")\n if [[ \"$_CURRENT_SEARCH_DIR\" == \"/\" ]] || [[ ${_CURRENT_LOOKUPS} -gt ${_MAX_LOOKUPS} ]]; then break; fi;\n echo \"info: ($_CURRENT_LOOKUPS of $_MAX_LOOKUPS) Searching in '$_CURRENT_SEARCH_DIR' for a ${_JSON_FILE_NAME} file.\"\n _SEARCH_RESULT=$(find \"$_CURRENT_SEARCH_DIR\" -maxdepth 2 -name ${_JSON_FILE_NAME} -print | /usr/bin/head -n 1)\n if [[ ${_SEARCH_RESULT} ]]; then\n echo \"info: ${_JSON_FILE_NAME} found at $_SEARCH_RESULT\"\n break;\n fi;\n _CURRENT_LOOKUPS=$((_CURRENT_LOOKUPS+1))\ndone\n\nif [[ ${_SEARCH_RESULT} ]]; then\n _JSON_OUTPUT_RAW=$(cat \"${_SEARCH_RESULT}\")\n _RN_ROOT_EXISTS=$(ruby -e \"require 'rubygems';require 'json'; output=JSON.parse('$_JSON_OUTPUT_RAW'); puts output[$_JSON_ROOT]\" || echo '')\n\n if [[ ${_RN_ROOT_EXISTS} ]]; then\n if ! python3 --version >/dev/null 2>&1; then echo \"python3 not found, firebase.json file processing error.\" && exit 1; fi\n _JSON_OUTPUT_BASE64=$(python3 -c 'import json,sys,base64;print(base64.b64encode(bytes(json.dumps(json.loads(open('\"'${_SEARCH_RESULT}'\"', '\"'rb'\"').read())['${_JSON_ROOT}']), '\"'utf-8'\"')).decode())' || echo \"e30=\")\n fi\n\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n\n # config.app_data_collection_default_enabled\n _APP_DATA_COLLECTION_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_data_collection_default_enabled\")\n if [[ $_APP_DATA_COLLECTION_ENABLED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseDataCollectionDefaultEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_DATA_COLLECTION_ENABLED\")\")\n fi\n\n # config.analytics_auto_collection_enabled\n _ANALYTICS_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_auto_collection_enabled\")\n if [[ $_ANALYTICS_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_COLLECTION\")\")\n fi\n\n # config.analytics_collection_deactivated\n _ANALYTICS_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_collection_deactivated\")\n if [[ $_ANALYTICS_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"FIREBASE_ANALYTICS_COLLECTION_DEACTIVATED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_DEACTIVATED\")\")\n fi\n\n # config.analytics_idfv_collection_enabled\n _ANALYTICS_IDFV_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_idfv_collection_enabled\")\n if [[ $_ANALYTICS_IDFV_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_IDFV_COLLECTION_ENABLED\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_IDFV_COLLECTION\")\")\n fi\n\n # config.analytics_default_allow_ad_personalization_signals\n _ANALYTICS_PERSONALIZATION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"analytics_default_allow_ad_personalization_signals\")\n if [[ $_ANALYTICS_PERSONALIZATION ]]; then\n _PLIST_ENTRY_KEYS+=(\"GOOGLE_ANALYTICS_DEFAULT_ALLOW_AD_PERSONALIZATION_SIGNALS\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_PERSONALIZATION\")\")\n fi\n\n # config.google_analytics_automatic_screen_reporting_enabled\n _ANALYTICS_AUTO_SCREEN_REPORTING=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"google_analytics_automatic_screen_reporting_enabled\")\n if [[ $_ANALYTICS_AUTO_SCREEN_REPORTING ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAutomaticScreenReportingEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_ANALYTICS_AUTO_SCREEN_REPORTING\")\")\n fi\n\n # config.perf_auto_collection_enabled\n _PERF_AUTO_COLLECTION=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_auto_collection_enabled\")\n if [[ $_PERF_AUTO_COLLECTION ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_enabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_AUTO_COLLECTION\")\")\n fi\n\n # config.perf_collection_deactivated\n _PERF_DEACTIVATED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"perf_collection_deactivated\")\n if [[ $_PERF_DEACTIVATED ]]; then\n _PLIST_ENTRY_KEYS+=(\"firebase_performance_collection_deactivated\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_PERF_DEACTIVATED\")\")\n fi\n\n # config.messaging_auto_init_enabled\n _MESSAGING_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"messaging_auto_init_enabled\")\n if [[ $_MESSAGING_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseMessagingAutoInitEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_MESSAGING_AUTO_INIT\")\")\n fi\n\n # config.in_app_messaging_auto_colllection_enabled\n _FIAM_AUTO_INIT=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"in_app_messaging_auto_collection_enabled\")\n if [[ $_FIAM_AUTO_INIT ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseInAppMessagingAutomaticDataCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_FIAM_AUTO_INIT\")\")\n fi\n\n # config.app_check_token_auto_refresh\n _APP_CHECK_TOKEN_AUTO_REFRESH=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"app_check_token_auto_refresh\")\n if [[ $_APP_CHECK_TOKEN_AUTO_REFRESH ]]; then\n _PLIST_ENTRY_KEYS+=(\"FirebaseAppCheckTokenAutoRefreshEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"$(jsonBoolToYesNo \"$_APP_CHECK_TOKEN_AUTO_REFRESH\")\")\n fi\n\n # config.crashlytics_disable_auto_disabler - undocumented for now - mainly for debugging, document if becomes useful\n _CRASHLYTICS_AUTO_DISABLE_ENABLED=$(getFirebaseJsonKeyValue \"$_JSON_OUTPUT_RAW\" \"crashlytics_disable_auto_disabler\")\n if [[ $_CRASHLYTICS_AUTO_DISABLE_ENABLED == \"true\" ]]; then\n echo \"Disabled Crashlytics auto disabler.\" # do nothing\n else\n _PLIST_ENTRY_KEYS+=(\"FirebaseCrashlyticsCollectionEnabled\")\n _PLIST_ENTRY_TYPES+=(\"bool\")\n _PLIST_ENTRY_VALUES+=(\"NO\")\n fi\nelse\n _PLIST_ENTRY_KEYS+=(\"firebase_json_raw\")\n _PLIST_ENTRY_TYPES+=(\"string\")\n _PLIST_ENTRY_VALUES+=(\"$_JSON_OUTPUT_BASE64\")\n echo \"warning: A firebase.json file was not found, whilst this file is optional it is recommended to include it to configure firebase services in React Native Firebase.\"\nfi;\n\necho \"info: 2) Injecting Info.plist entries: \"\n\n# Log out the keys we're adding\nfor i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n echo \" -> $i) ${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\"\ndone\n\nfor plist in \"${_TARGET_PLIST}\" \"${_DSYM_PLIST}\" ; do\n if [[ -f \"${plist}\" ]]; then\n\n # paths with spaces break the call to setPlistValue. temporarily modify\n # the shell internal field separator variable (IFS), which normally\n # includes spaces, to consist only of line breaks\n oldifs=$IFS\n IFS=\"\n\"\n\n for i in \"${!_PLIST_ENTRY_KEYS[@]}\"; do\n setPlistValue \"${_PLIST_ENTRY_KEYS[$i]}\" \"${_PLIST_ENTRY_TYPES[$i]}\" \"${_PLIST_ENTRY_VALUES[$i]}\" \"${plist}\"\n done\n\n # restore the original internal field separator value\n IFS=$oldifs\n else\n echo \"warning: A Info.plist build output file was not found (${plist})\"\n fi\ndone\n\necho \"info: <- RNFB build script finished\"\n"; + }; FD10A7F122414F3F0027D42C /* Start Packager */ = { isa = PBXShellScriptBuildPhase; buildActionMask = 2147483647; @@ -935,8 +876,8 @@ isa = PBXSourcesBuildPhase; buildActionMask = 2147483647; files = ( - 05B6C49024C306CE00B7FA60 /* AppDelegate.m in Sources */, 053EA30026B2B9920082FEB9 /* File.swift in Sources */, + 06F72CA3290B2159003392F3 /* AppDelegate.mm in Sources */, 05B6C49224C306CE00B7FA60 /* main.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; @@ -946,7 +887,6 @@ buildActionMask = 2147483647; files = ( 2D02E4BF1E0B4AB3006451C7 /* main.m in Sources */, - 2D02E4BC1E0B4A80006451C7 /* AppDelegate.m in Sources */, ); runOnlyForDeploymentPostprocessing = 0; }; @@ -982,21 +922,12 @@ name = MainInterface.storyboard; sourceTree = ""; }; - 13B07FB11A68108700A75B9A /* LaunchScreen.xib */ = { - isa = PBXVariantGroup; - children = ( - 13B07FB21A68108700A75B9A /* Base */, - ); - name = LaunchScreen.xib; - path = Ecency; - sourceTree = ""; - }; /* End PBXVariantGroup section */ /* Begin XCBuildConfiguration section */ 00E356F61AD99517003FC87E /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = DD550C31DE5DDEF4DACA6626 /* Pods-Ecency-EcencyTests.debug.xcconfig */; + baseConfigurationReference = 21BEC84F5B56E6AB5B3AC205 /* Pods-Ecency-EcencyTests.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -1011,7 +942,11 @@ ); INFOPLIST_FILE = EcencyTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); OTHER_LDFLAGS = ( "-ObjC", "-lc++", @@ -1029,7 +964,7 @@ }; 00E356F71AD99517003FC87E /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CD181F1A31C1283DD7DD02E5 /* Pods-Ecency-EcencyTests.release.xcconfig */; + baseConfigurationReference = 6498844345D56B253AAA8F39 /* Pods-Ecency-EcencyTests.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; BUNDLE_LOADER = "$(TEST_HOST)"; @@ -1041,7 +976,11 @@ "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = arm64; INFOPLIST_FILE = EcencyTests/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); ONLY_ACTIVE_ARCH = NO; OTHER_LDFLAGS = ( "-ObjC", @@ -1075,7 +1014,11 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = eshare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 3.0.0; MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; MTL_FAST_MATH = YES; @@ -1108,14 +1051,19 @@ GCC_C_LANGUAGE_STANDARD = gnu11; INFOPLIST_FILE = eshare/Info.plist; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @executable_path/../../Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@executable_path/../../Frameworks", + ); MARKETING_VERSION = 3.0.0; MTL_FAST_MATH = YES; PRODUCT_BUNDLE_IDENTIFIER = app.esteem.mobile.ios.eshare; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = "extension-dev"; SKIP_INSTALL = YES; - SWIFT_OPTIMIZATION_LEVEL = "-Owholemodule"; + SWIFT_COMPILATION_MODE = wholemodule; + SWIFT_OPTIMIZATION_LEVEL = "-O"; SWIFT_VERSION = 5.0; TARGETED_DEVICE_FAMILY = "1,2"; }; @@ -1123,7 +1071,7 @@ }; 05B6C4B524C306CE00B7FA60 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 9FB1E2845897A58F19F68685 /* Pods-Ecency.debug.xcconfig */; + baseConfigurationReference = B82B279CA78F6126E7A2514E /* Pods-Ecency.debug.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1183,7 +1131,10 @@ ); INFOPLIST_FILE = "$(SRCROOT)/Ecency/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 3.0.2; OTHER_LDFLAGS = ( "$(inherited)", @@ -1203,7 +1154,7 @@ }; 05B6C4B624C306CE00B7FA60 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 6D4FF1221037B5D88CA03C8F /* Pods-Ecency.release.xcconfig */; + baseConfigurationReference = A8B66235268E2F5BF51B546A /* Pods-Ecency.release.xcconfig */; buildSettings = { ALWAYS_EMBED_SWIFT_STANDARD_LIBRARIES = YES; ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; @@ -1262,7 +1213,10 @@ ); INFOPLIST_FILE = "$(SRCROOT)/Ecency/Info.plist"; IPHONEOS_DEPLOYMENT_TARGET = 12.0; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); MARKETING_VERSION = 3.0.2; OTHER_LDFLAGS = ( "$(inherited)", @@ -1281,7 +1235,6 @@ }; 2D02E4971E0B4A5E006451C7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 216F9707AFD64AC617233E7D /* Pods-Ecency-tvOS.debug.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; @@ -1293,7 +1246,10 @@ ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Ecency-tvOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1309,7 +1265,6 @@ }; 2D02E4981E0B4A5E006451C7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = 4358E0DDF21A7AD3ED95F877 /* Pods-Ecency-tvOS.release.xcconfig */; buildSettings = { ASSETCATALOG_COMPILER_APPICON_NAME = "App Icon & Top Shelf Image"; ASSETCATALOG_COMPILER_LAUNCHIMAGE_NAME = LaunchImage; @@ -1321,7 +1276,10 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Ecency-tvOS/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1337,7 +1295,6 @@ }; 2D02E4991E0B4A5E006451C7 /* Debug */ = { isa = XCBuildConfiguration; - baseConfigurationReference = CF3FDE4A45484091EBE305DF /* Pods-Ecency-tvOSTests.debug.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1348,7 +1305,11 @@ ENABLE_TESTABILITY = YES; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Ecency-tvOSTests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1364,7 +1325,6 @@ }; 2D02E49A1E0B4A5E006451C7 /* Release */ = { isa = XCBuildConfiguration; - baseConfigurationReference = A5582F69AA5100D8FE578391 /* Pods-Ecency-tvOSTests.release.xcconfig */; buildSettings = { BUNDLE_LOADER = "$(TEST_HOST)"; CLANG_ANALYZER_NONNULL = YES; @@ -1375,7 +1335,11 @@ DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; GCC_NO_COMMON_BLOCKS = YES; INFOPLIST_FILE = "Ecency-tvOSTests/Info.plist"; - LD_RUNPATH_SEARCH_PATHS = "$(inherited) @executable_path/Frameworks @loader_path/Frameworks"; + LD_RUNPATH_SEARCH_PATHS = ( + "$(inherited)", + "@executable_path/Frameworks", + "@loader_path/Frameworks", + ); OTHER_LDFLAGS = ( "$(inherited)", "-ObjC", @@ -1394,7 +1358,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -1423,6 +1387,7 @@ COPY_PHASE_STRIP = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; ENABLE_TESTABILITY = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_DYNAMIC_NO_PIC = NO; GCC_NO_COMMON_BLOCKS = YES; @@ -1441,6 +1406,7 @@ IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = YES; ONLY_ACTIVE_ARCH = YES; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_VERSION = 4.0; }; @@ -1451,7 +1417,7 @@ buildSettings = { ALWAYS_SEARCH_USER_PATHS = NO; CLANG_ANALYZER_LOCALIZABILITY_NONLOCALIZED = YES; - CLANG_CXX_LANGUAGE_STANDARD = "gnu++0x"; + CLANG_CXX_LANGUAGE_STANDARD = "c++17"; CLANG_CXX_LIBRARY = "libc++"; CLANG_ENABLE_MODULES = YES; CLANG_ENABLE_OBJC_ARC = YES; @@ -1480,6 +1446,7 @@ COPY_PHASE_STRIP = YES; ENABLE_NS_ASSERTIONS = NO; ENABLE_STRICT_OBJC_MSGSEND = YES; + "EXCLUDED_ARCHS[sdk=iphonesimulator*]" = i386; GCC_C_LANGUAGE_STANDARD = gnu99; GCC_NO_COMMON_BLOCKS = YES; GCC_WARN_64_TO_32_BIT_CONVERSION = YES; @@ -1490,6 +1457,7 @@ GCC_WARN_UNUSED_VARIABLE = YES; IPHONEOS_DEPLOYMENT_TARGET = 12.0; MTL_ENABLE_DEBUG_INFO = NO; + REACT_NATIVE_PATH = "${PODS_ROOT}/../../node_modules/react-native"; SDKROOT = iphoneos; SWIFT_COMPILATION_MODE = wholemodule; SWIFT_VERSION = 4.0; diff --git a/ios/Ecency.xcodeproj/xcshareddata/xcschemes/Ecency-tvOS.xcscheme b/ios/Ecency.xcodeproj/xcshareddata/xcschemes/Ecency-tvOS.xcscheme deleted file mode 100644 index b6e03febe..000000000 --- a/ios/Ecency.xcodeproj/xcshareddata/xcschemes/Ecency-tvOS.xcscheme +++ /dev/null @@ -1,125 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/Ecency/AppDelegate.m b/ios/Ecency/AppDelegate.m deleted file mode 100644 index 33770fada..000000000 --- a/ios/Ecency/AppDelegate.m +++ /dev/null @@ -1,68 +0,0 @@ -#import "AppDelegate.h" -#import "RNSplashScreen.h" - -#import -#import -#import -#import -#import -#import - -#import -#import -#import -#import -#import "Orientation.h" - -@implementation AppDelegate - -- (BOOL)application:(UIApplication *)application - openURL:(NSURL *)url - options:(NSDictionary *)options -{ - return [RCTLinkingManager application:application openURL:url options:options]; -} - - -- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity - restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler -{ - return [RCTLinkingManager application:application - continueUserActivity:userActivity - restorationHandler:restorationHandler]; -} - -- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions -{ - if ([FIRApp defaultApp] == nil) { - [FIRApp configure]; - } - [AppCenterReactNative register]; - [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true]; - [AppCenterReactNativeCrashes registerWithAutomaticProcessing]; - [Bugsnag start]; - RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; - RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge - moduleName:@"Ecency" - initialProperties:nil]; - - rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1]; - - self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; - UIViewController *rootViewController = [UIViewController new]; - rootViewController.view = rootView; - self.window.rootViewController = rootViewController; - [self.window makeKeyAndVisible]; - [RNSplashScreen show]; - return YES; -} - -- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge -{ - return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index" fallbackResource:nil]; -} - -- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { - return [Orientation getOrientation]; -} -@end diff --git a/ios/Ecency/AppDelegate.mm b/ios/Ecency/AppDelegate.mm new file mode 100644 index 000000000..fcfcc6e6a --- /dev/null +++ b/ios/Ecency/AppDelegate.mm @@ -0,0 +1,176 @@ +#import "AppDelegate.h" + +#import +#import +#import +#import +#import + +#import +#import +#import + +#import +#import +#import "RNBootSplash.h" +#import "Orientation.h" + +#if RCT_NEW_ARCH_ENABLED +#import +#import +#import +#import +#import +#import + +#import + +static NSString *const kRNConcurrentRoot = @"concurrentRoot"; + +@interface AppDelegate () { + RCTTurboModuleManager *_turboModuleManager; + RCTSurfacePresenterBridgeAdapter *_bridgeAdapter; + std::shared_ptr _reactNativeConfig; + facebook::react::ContextContainer::Shared _contextContainer; +} +@end +#endif + +@implementation AppDelegate + + +- (BOOL)application:(UIApplication *)application + openURL:(NSURL *)url + options:(NSDictionary *)options +{ + return [RCTLinkingManager application:application openURL:url options:options]; +} + + +- (BOOL)application:(UIApplication *)application continueUserActivity:(nonnull NSUserActivity *)userActivity + restorationHandler:(nonnull void (^)(NSArray> * _Nullable))restorationHandler +{ + return [RCTLinkingManager application:application + continueUserActivity:userActivity + restorationHandler:restorationHandler]; +} + + +- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions +{ + RCTAppSetupPrepareApp(application); + + RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions]; + +#if RCT_NEW_ARCH_ENABLED + _contextContainer = std::make_shared(); + _reactNativeConfig = std::make_shared(); + _contextContainer->insert("ReactNativeConfig", _reactNativeConfig); + _bridgeAdapter = [[RCTSurfacePresenterBridgeAdapter alloc] initWithBridge:bridge contextContainer:_contextContainer]; + bridge.surfacePresenter = _bridgeAdapter.surfacePresenter; +#endif + + NSDictionary *initProps = [self prepareInitialProps]; + UIView *rootView = RCTAppSetupDefaultRootView(bridge, @"Ecency", initProps); + + if (@available(iOS 13.0, *)) { + rootView.backgroundColor = [UIColor systemBackgroundColor]; + } else { + rootView.backgroundColor = [UIColor whiteColor]; + } + + self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds]; + UIViewController *rootViewController = [UIViewController new]; + rootViewController.view = rootView; + self.window.rootViewController = rootViewController; + [self.window makeKeyAndVisible]; + + //third party initiations + if ([FIRApp defaultApp] == nil) { + [FIRApp configure]; + } + [AppCenterReactNative register]; + [AppCenterReactNativeAnalytics registerWithInitiallyEnabled:true]; + [AppCenterReactNativeCrashes registerWithAutomaticProcessing]; + [RNBootSplash initWithStoryboard:@"BootSplash" rootView:rootView]; + [Bugsnag start]; + + return YES; +} + +/// This method controls whether the `concurrentRoot`feature of React18 is turned on or off. +/// +/// @see: https://reactjs.org/blog/2022/03/29/react-v18.html +/// @note: This requires to be rendering on Fabric (i.e. on the New Architecture). +/// @return: `true` if the `concurrentRoot` feture is enabled. Otherwise, it returns `false`. +- (BOOL)concurrentRootEnabled +{ + // Switch this bool to turn on and off the concurrent root + return true; +} + +- (NSDictionary *)prepareInitialProps +{ + NSMutableDictionary *initProps = [NSMutableDictionary new]; + +#ifdef RCT_NEW_ARCH_ENABLED + initProps[kRNConcurrentRoot] = @([self concurrentRootEnabled]); +#endif + + return initProps; +} + +- (NSURL *)sourceURLForBridge:(RCTBridge *)bridge +{ +#if DEBUG + return [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index"]; +#else + return [[NSBundle mainBundle] URLForResource:@"main" withExtension:@"jsbundle"]; +#endif +} + + +- (UIInterfaceOrientationMask)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window { + return [Orientation getOrientation]; +} + +#if RCT_NEW_ARCH_ENABLED + +#pragma mark - RCTCxxBridgeDelegate + +- (std::unique_ptr)jsExecutorFactoryForBridge:(RCTBridge *)bridge +{ + _turboModuleManager = [[RCTTurboModuleManager alloc] initWithBridge:bridge + delegate:self + jsInvoker:bridge.jsCallInvoker]; + return RCTAppSetupDefaultJsExecutorFactory(bridge, _turboModuleManager); +} + +#pragma mark RCTTurboModuleManagerDelegate + +- (Class)getModuleClassFromName:(const char *)name +{ + return RCTCoreModulesClassProvider(name); +} + +- (std::shared_ptr)getTurboModule:(const std::string &)name + jsInvoker:(std::shared_ptr)jsInvoker +{ + return nullptr; +} + +- (std::shared_ptr)getTurboModule:(const std::string &)name + initParams: + (const facebook::react::ObjCTurboModule::InitParams &)params +{ + return nullptr; +} + +- (id)getModuleInstanceFromClass:(Class)moduleClass +{ + return RCTAppSetupDefaultModuleFromClass(moduleClass); +} + +#endif + +@end diff --git a/ios/Ecency/Base.lproj/LaunchScreen.xib b/ios/Ecency/Base.lproj/LaunchScreen.xib deleted file mode 100644 index 9296b97a7..000000000 --- a/ios/Ecency/Base.lproj/LaunchScreen.xib +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/ios/Ecency/BootSplash.storyboard b/ios/Ecency/BootSplash.storyboard new file mode 100644 index 000000000..960102920 --- /dev/null +++ b/ios/Ecency/BootSplash.storyboard @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/Contents.json b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/Contents.json new file mode 100644 index 000000000..570652dfd --- /dev/null +++ b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images": [ + { + "idiom": "universal", + "filename": "bootsplash_logo.png", + "scale": "1x" + }, + { + "idiom": "universal", + "filename": "bootsplash_logo@2x.png", + "scale": "2x" + }, + { + "idiom": "universal", + "filename": "bootsplash_logo@3x.png", + "scale": "3x" + } + ], + "info": { + "version": 1, + "author": "xcode" + } +} diff --git a/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png new file mode 100644 index 000000000..85fab2912 Binary files /dev/null and b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo.png differ diff --git a/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png new file mode 100644 index 000000000..ecfb37bf0 Binary files /dev/null and b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@2x.png differ diff --git a/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png new file mode 100644 index 000000000..e7a9345fe Binary files /dev/null and b/ios/Ecency/Images.xcassets/BootSplashLogo.imageset/bootsplash_logo@3x.png differ diff --git a/ios/Ecency/Info.plist b/ios/Ecency/Info.plist index bd31ff2e3..8bba57ea1 100644 --- a/ios/Ecency/Info.plist +++ b/ios/Ecency/Info.plist @@ -44,8 +44,6 @@ NSAppTransportSecurity - NSAllowsArbitraryLoads - NSExceptionDomains hivesigner.com @@ -68,8 +66,6 @@ To get accurate location for sharing NSLocationWhenInUseUsageDescription To choose and share current location - NSMainNibFile - LaunchScreen NSMicrophoneUsageDescription To share recording or video, microphone access is required NSPhotoLibraryAddUsageDescription @@ -107,7 +103,9 @@ remote-notification UILaunchStoryboardName - LaunchScreen + BootSplash + UIMainStoryboardFile + BootSplash UIRequiredDeviceCapabilities armv7 diff --git a/ios/Ecency/main.m b/ios/Ecency/main.m index b1df44b95..d645c7246 100644 --- a/ios/Ecency/main.m +++ b/ios/Ecency/main.m @@ -2,7 +2,8 @@ #import "AppDelegate.h" -int main(int argc, char * argv[]) { +int main(int argc, char *argv[]) +{ @autoreleasepool { return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class])); } diff --git a/ios/EcencyTests/EcencyTests.m b/ios/EcencyTests/EcencyTests.m index d9d392423..52df2f7d3 100644 --- a/ios/EcencyTests/EcencyTests.m +++ b/ios/EcencyTests/EcencyTests.m @@ -13,7 +13,7 @@ @implementation EcencyTests -- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL(^)(UIView *view))test +- (BOOL)findSubviewInView:(UIView *)view matching:(BOOL (^)(UIView *view))test { if (test(view)) { return YES; @@ -34,23 +34,25 @@ __block NSString *redboxError = nil; #ifdef DEBUG - RCTSetLogFunction(^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { - if (level >= RCTLogLevelError) { - redboxError = message; - } - }); + RCTSetLogFunction( + ^(RCTLogLevel level, RCTLogSource source, NSString *fileName, NSNumber *lineNumber, NSString *message) { + if (level >= RCTLogLevelError) { + redboxError = message; + } + }); #endif while ([date timeIntervalSinceNow] > 0 && !foundElement && !redboxError) { [[NSRunLoop mainRunLoop] runMode:NSDefaultRunLoopMode beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; [[NSRunLoop mainRunLoop] runMode:NSRunLoopCommonModes beforeDate:[NSDate dateWithTimeIntervalSinceNow:0.1]]; - foundElement = [self findSubviewInView:vc.view matching:^BOOL(UIView *view) { - if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { - return YES; - } - return NO; - }]; + foundElement = [self findSubviewInView:vc.view + matching:^BOOL(UIView *view) { + if ([view.accessibilityLabel isEqualToString:TEXT_TO_LOOK_FOR]) { + return YES; + } + return NO; + }]; } #ifdef DEBUG @@ -61,5 +63,4 @@ XCTAssertTrue(foundElement, @"Couldn't find element with text '%@' in %d seconds", TEXT_TO_LOOK_FOR, TIMEOUT_SECONDS); } - @end diff --git a/ios/Podfile b/ios/Podfile index 7b0abc2d3..505cbd377 100644 --- a/ios/Podfile +++ b/ios/Podfile @@ -1,37 +1,60 @@ require_relative '../node_modules/react-native/scripts/react_native_pods' require_relative '../node_modules/@react-native-community/cli-platform-ios/native_modules' -platform :ios, '12.0' +platform :ios, '12.4' +install! 'cocoapods', :deterministic_uuids => false target 'Ecency' do config = use_native_modules! + + # Flags change depending on the env values. + flags = get_default_flags() + permissions_path = '../node_modules/react-native-permissions/ios' pod 'Permission-Camera', :path => "#{permissions_path}/Camera" # Pods for Ecency - use_react_native!(:path => config["reactNativePath"]) + use_react_native!( + :path => config[:reactNativePath], + # Hermes is now enabled by default. Disable by setting this flag to false. + # Upcoming versions of React Native may rely on get_default_flags(), but + # we make it explicit here to aid in the React Native upgrade process. + :hermes_enabled => true, + :fabric_enabled => flags[:fabric_enabled], + # Enables Flipper. + # + # Note that if you have use_frameworks! enabled, Flipper will not work and + # you should disable the next line. + :flipper_configuration => FlipperConfiguration.disabled, + # An absolute path to your application root. + :app_path => "#{Pod::Config.instance.installation_root}/.." + ) target 'EcencyTests' do inherit! :complete # Pods for testing end + post_install do |installer| + react_native_post_install( + installer, + # Set `mac_catalyst_enabled` to `true` in order to apply patches + # necessary for Mac Catalyst builds + :mac_catalyst_enabled => false + ) + __apply_Xcode_12_5_M1_post_install_workaround(installer) installer.pods_project.targets.each do |target| target.build_configurations.each do |config| config.build_settings["ONLY_ACTIVE_ARCH"] = "NO" end + if target.name == 'TcpSockets' + source_files = target.source_build_phase.files + gcd_async_socket = source_files[0] #First file in build phases is GCDAsyncSocket.m, chage index if not the case + puts "Deleting source file #{gcd_async_socket.inspect} from target #{target.inspect}." + source_files.delete gcd_async_socket + end end end end - -target 'Ecency-tvOS' do - # Pods for Ecency-tvOS - - target 'Ecency-tvOSTests' do - inherit! :search_paths - # Pods for testing - end - -end diff --git a/ios/Podfile.lock b/ios/Podfile.lock index f2e128db4..ccc75725c 100644 --- a/ios/Podfile.lock +++ b/ios/Podfile.lock @@ -1,36 +1,37 @@ PODS: - - appcenter-analytics (4.1.0): + - appcenter-analytics (4.4.5): - AppCenter/Analytics (~> 4.0) - AppCenterReactNativeShared (~> 4.0) - React-Core - - appcenter-core (4.1.0): + - appcenter-core (4.4.5): - AppCenterReactNativeShared (~> 4.0) - React-Core - - appcenter-crashes (4.1.0): + - appcenter-crashes (4.4.5): - AppCenter/Crashes (~> 4.0) - AppCenterReactNativeShared (~> 4.0) - React-Core - - AppCenter/Analytics (4.2.0): + - AppCenter/Analytics (4.4.3): - AppCenter/Core - - AppCenter/Core (4.2.0) - - AppCenter/Crashes (4.2.0): + - AppCenter/Core (4.4.3) + - AppCenter/Crashes (4.4.3): - AppCenter/Core - - AppCenterReactNativeShared (4.2.0): - - AppCenter/Core (= 4.2.0) - - boost-for-react-native (1.63.0) - - BugsnagReactNative (7.11.0): + - AppCenterReactNativeShared (4.4.5): + - AppCenter/Core (= 4.4.3) + - boost (1.76.0) + - BugsnagReactNative (7.18.0): - React-Core - - BVLinearGradient (2.5.6): - - React + - BVLinearGradient (2.6.2): + - React-Core + - CocoaAsyncSocket (7.6.5) - DoubleConversion (1.1.6) - - FBLazyVector (0.63.4) - - FBReactNativeSpec (0.63.4): - - Folly (= 2020.01.13.00) - - RCTRequired (= 0.63.4) - - RCTTypeSafety (= 0.63.4) - - React-Core (= 0.63.4) - - React-jsi (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) + - FBLazyVector (0.70.3) + - FBReactNativeSpec (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.70.3) + - RCTTypeSafety (= 0.70.3) + - React-Core (= 0.70.3) + - React-jsi (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) - Firebase/Analytics (8.15.0): - Firebase/Core - Firebase/Core (8.15.0): @@ -87,15 +88,7 @@ PODS: - GoogleUtilities/Reachability (~> 7.7) - GoogleUtilities/UserDefaults (~> 7.7) - nanopb (~> 2.30908.0) - - Folly (2020.01.13.00): - - boost-for-react-native - - DoubleConversion - - Folly/Default (= 2020.01.13.00) - - glog - - Folly/Default (2020.01.13.00): - - boost-for-react-native - - DoubleConversion - - glog + - fmt (6.2.1) - glog (0.3.5) - GoogleAppMeasurement (8.15.0): - GoogleAppMeasurement/AdIdSupport (= 8.15.0) @@ -117,7 +110,7 @@ PODS: - GoogleUtilities/Network (~> 7.7) - "GoogleUtilities/NSData+zlib (~> 7.7)" - nanopb (~> 2.30908.0) - - GoogleDataTransport (9.1.4): + - GoogleDataTransport (9.2.0): - GoogleUtilities/Environment (~> 7.7) - nanopb (< 2.30910.0, >= 2.30908.0) - PromisesObjC (< 3.0, >= 1.2) @@ -140,193 +133,255 @@ PODS: - GoogleUtilities/Logger - GoogleUtilities/UserDefaults (7.7.0): - GoogleUtilities/Logger - - libwebp (1.2.0): - - libwebp/demux (= 1.2.0) - - libwebp/mux (= 1.2.0) - - libwebp/webp (= 1.2.0) - - libwebp/demux (1.2.0): + - hermes-engine (0.70.3) + - libevent (2.1.12) + - libwebp (1.2.3): + - libwebp/demux (= 1.2.3) + - libwebp/mux (= 1.2.3) + - libwebp/webp (= 1.2.3) + - libwebp/demux (1.2.3): - libwebp/webp - - libwebp/mux (1.2.0): + - libwebp/mux (1.2.3): - libwebp/demux - - libwebp/webp (1.2.0) - - lottie-ios (3.2.3) - - lottie-react-native (5.1.3): - - lottie-ios (~> 3.2.3) + - libwebp/webp (1.2.3) + - lottie-ios (3.4.0) + - lottie-react-native (5.1.4): + - lottie-ios (~> 3.4.0) - React-Core - nanopb (2.30908.0): - nanopb/decode (= 2.30908.0) - nanopb/encode (= 2.30908.0) - nanopb/decode (2.30908.0) - nanopb/encode (2.30908.0) - - Permission-Camera (3.3.0): + - Permission-Camera (3.6.1): - RNPermissions - - PromisesObjC (2.1.0) - - RCTRequired (0.63.4) - - RCTTypeSafety (0.63.4): - - FBLazyVector (= 0.63.4) - - Folly (= 2020.01.13.00) - - RCTRequired (= 0.63.4) - - React-Core (= 0.63.4) - - React (0.63.4): - - React-Core (= 0.63.4) - - React-Core/DevSupport (= 0.63.4) - - React-Core/RCTWebSocket (= 0.63.4) - - React-RCTActionSheet (= 0.63.4) - - React-RCTAnimation (= 0.63.4) - - React-RCTBlob (= 0.63.4) - - React-RCTImage (= 0.63.4) - - React-RCTLinking (= 0.63.4) - - React-RCTNetwork (= 0.63.4) - - React-RCTSettings (= 0.63.4) - - React-RCTText (= 0.63.4) - - React-RCTVibration (= 0.63.4) - - React-callinvoker (0.63.4) - - React-Core (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default (= 0.63.4) - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/CoreModulesHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/Default (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/DevSupport (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default (= 0.63.4) - - React-Core/RCTWebSocket (= 0.63.4) - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - React-jsinspector (= 0.63.4) - - Yoga - - React-Core/RCTActionSheetHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTAnimationHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTBlobHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTImageHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTLinkingHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTNetworkHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTSettingsHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTTextHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTVibrationHeaders (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-Core/RCTWebSocket (0.63.4): - - Folly (= 2020.01.13.00) - - glog - - React-Core/Default (= 0.63.4) - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsiexecutor (= 0.63.4) - - Yoga - - React-CoreModules (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.4) - - React-Core/CoreModulesHeaders (= 0.63.4) - - React-jsi (= 0.63.4) - - React-RCTImage (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - React-cxxreact (0.63.4): - - boost-for-react-native (= 1.63.0) + - PromisesObjC (2.1.1) + - RCT-Folly (2021.07.22.00): + - boost - DoubleConversion - - Folly (= 2020.01.13.00) + - fmt (~> 6.2.1) - glog - - React-callinvoker (= 0.63.4) - - React-jsinspector (= 0.63.4) - - React-jsi (0.63.4): - - boost-for-react-native (= 1.63.0) + - RCT-Folly/Default (= 2021.07.22.00) + - RCT-Folly/Default (2021.07.22.00): + - boost - DoubleConversion - - Folly (= 2020.01.13.00) + - fmt (~> 6.2.1) - glog - - React-jsi/Default (= 0.63.4) - - React-jsi/Default (0.63.4): - - boost-for-react-native (= 1.63.0) + - RCT-Folly/Futures (2021.07.22.00): + - boost - DoubleConversion - - Folly (= 2020.01.13.00) + - fmt (~> 6.2.1) - glog - - React-jsiexecutor (0.63.4): + - libevent + - RCTRequired (0.70.3) + - RCTTypeSafety (0.70.3): + - FBLazyVector (= 0.70.3) + - RCTRequired (= 0.70.3) + - React-Core (= 0.70.3) + - React (0.70.3): + - React-Core (= 0.70.3) + - React-Core/DevSupport (= 0.70.3) + - React-Core/RCTWebSocket (= 0.70.3) + - React-RCTActionSheet (= 0.70.3) + - React-RCTAnimation (= 0.70.3) + - React-RCTBlob (= 0.70.3) + - React-RCTImage (= 0.70.3) + - React-RCTLinking (= 0.70.3) + - React-RCTNetwork (= 0.70.3) + - React-RCTSettings (= 0.70.3) + - React-RCTText (= 0.70.3) + - React-RCTVibration (= 0.70.3) + - React-bridging (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - React-jsi (= 0.70.3) + - React-callinvoker (0.70.3) + - React-Codegen (0.70.3): + - FBReactNativeSpec (= 0.70.3) + - RCT-Folly (= 2021.07.22.00) + - RCTRequired (= 0.70.3) + - RCTTypeSafety (= 0.70.3) + - React-Core (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-Core (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.70.3) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/CoreModulesHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/Default (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/DevSupport (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.70.3) + - React-Core/RCTWebSocket (= 0.70.3) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-jsinspector (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTActionSheetHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTAnimationHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTBlobHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTImageHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTLinkingHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTNetworkHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTSettingsHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTTextHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTVibrationHeaders (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-Core/RCTWebSocket (0.70.3): + - glog + - RCT-Folly (= 2021.07.22.00) + - React-Core/Default (= 0.70.3) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-perflogger (= 0.70.3) + - Yoga + - React-CoreModules (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.3) + - React-Codegen (= 0.70.3) + - React-Core/CoreModulesHeaders (= 0.70.3) + - React-jsi (= 0.70.3) + - React-RCTImage (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-cxxreact (0.70.3): + - boost (= 1.76.0) - DoubleConversion - - Folly (= 2020.01.13.00) - glog - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) - - React-jsinspector (0.63.4) + - RCT-Folly (= 2021.07.22.00) + - React-callinvoker (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsinspector (= 0.70.3) + - React-logger (= 0.70.3) + - React-perflogger (= 0.70.3) + - React-runtimeexecutor (= 0.70.3) + - React-hermes (0.70.3): + - DoubleConversion + - glog + - hermes-engine + - RCT-Folly (= 2021.07.22.00) + - RCT-Folly/Futures (= 2021.07.22.00) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-jsiexecutor (= 0.70.3) + - React-jsinspector (= 0.70.3) + - React-perflogger (= 0.70.3) + - React-jsi (0.70.3): + - boost (= 1.76.0) + - DoubleConversion + - glog + - RCT-Folly (= 2021.07.22.00) + - React-jsi/Default (= 0.70.3) + - React-jsi/Default (0.70.3): + - boost (= 1.76.0) + - DoubleConversion + - glog + - RCT-Folly (= 2021.07.22.00) + - React-jsiexecutor (0.70.3): + - DoubleConversion + - glog + - RCT-Folly (= 2021.07.22.00) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-perflogger (= 0.70.3) + - React-jsinspector (0.70.3) + - React-logger (0.70.3): + - glog - react-native-camera (4.2.1): - React-Core - react-native-camera/RCT (= 4.2.1) @@ -337,130 +392,143 @@ PODS: - React-Core - react-native-cameraroll (1.8.1): - React - - react-native-config (1.4.2): - - react-native-config/App (= 1.4.2) - - react-native-config/App (1.4.2): + - react-native-config (1.4.11): + - react-native-config/App (= 1.4.11) + - react-native-config/App (1.4.11): - React-Core - - react-native-date-picker (4.2.0): + - react-native-date-picker (4.2.5): - React-Core - react-native-fingerprint-scanner (6.0.0): - React - - react-native-netinfo (5.9.10): + - react-native-netinfo (9.3.5): - React-Core - - react-native-orientation-locker (1.4.0): + - react-native-orientation-locker (1.5.0): - React-Core - react-native-randombytes (3.6.1): - React-Core - - react-native-receive-sharing-intent (1.0.4): - - React - - react-native-restart (0.0.23): + - react-native-receive-sharing-intent (2.0.0): - React-Core - - react-native-safe-area-context (3.4.1): + - react-native-render-html (6.3.4): - React-Core - - react-native-splash-screen (3.3.0): + - react-native-restart (0.0.24): + - React-Core + - react-native-safe-area-context (4.4.1): + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-Core + - ReactCommon/turbomodule/core + - react-native-udp (4.1.5): + - CocoaAsyncSocket - React-Core - - react-native-udp (2.7.0): - - React - react-native-version-number (0.3.6): - React - - react-native-video (5.2.0): + - react-native-video (5.2.1): - React-Core - - react-native-video/Video (= 5.2.0) - - react-native-video/Video (5.2.0): + - react-native-video/Video (= 5.2.1) + - react-native-video/Video (5.2.1): - React-Core - - react-native-webview (11.17.1): + - react-native-webview (11.23.1): - React-Core - - React-RCTActionSheet (0.63.4): - - React-Core/RCTActionSheetHeaders (= 0.63.4) - - React-RCTAnimation (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.4) - - React-Core/RCTAnimationHeaders (= 0.63.4) - - React-jsi (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - React-RCTBlob (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - Folly (= 2020.01.13.00) - - React-Core/RCTBlobHeaders (= 0.63.4) - - React-Core/RCTWebSocket (= 0.63.4) - - React-jsi (= 0.63.4) - - React-RCTNetwork (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - React-RCTImage (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.4) - - React-Core/RCTImageHeaders (= 0.63.4) - - React-jsi (= 0.63.4) - - React-RCTNetwork (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - React-RCTLinking (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - React-Core/RCTLinkingHeaders (= 0.63.4) - - React-jsi (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - React-RCTNetwork (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.4) - - React-Core/RCTNetworkHeaders (= 0.63.4) - - React-jsi (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - React-RCTSettings (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - Folly (= 2020.01.13.00) - - RCTTypeSafety (= 0.63.4) - - React-Core/RCTSettingsHeaders (= 0.63.4) - - React-jsi (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - React-RCTText (0.63.4): - - React-Core/RCTTextHeaders (= 0.63.4) - - React-RCTVibration (0.63.4): - - FBReactNativeSpec (= 0.63.4) - - Folly (= 2020.01.13.00) - - React-Core/RCTVibrationHeaders (= 0.63.4) - - React-jsi (= 0.63.4) - - ReactCommon/turbomodule/core (= 0.63.4) - - ReactCommon/turbomodule/core (0.63.4): + - React-perflogger (0.70.3) + - React-RCTActionSheet (0.70.3): + - React-Core/RCTActionSheetHeaders (= 0.70.3) + - React-RCTAnimation (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.3) + - React-Codegen (= 0.70.3) + - React-Core/RCTAnimationHeaders (= 0.70.3) + - React-jsi (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-RCTBlob (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.70.3) + - React-Core/RCTBlobHeaders (= 0.70.3) + - React-Core/RCTWebSocket (= 0.70.3) + - React-jsi (= 0.70.3) + - React-RCTNetwork (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-RCTImage (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.3) + - React-Codegen (= 0.70.3) + - React-Core/RCTImageHeaders (= 0.70.3) + - React-jsi (= 0.70.3) + - React-RCTNetwork (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-RCTLinking (0.70.3): + - React-Codegen (= 0.70.3) + - React-Core/RCTLinkingHeaders (= 0.70.3) + - React-jsi (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-RCTNetwork (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.3) + - React-Codegen (= 0.70.3) + - React-Core/RCTNetworkHeaders (= 0.70.3) + - React-jsi (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-RCTSettings (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - RCTTypeSafety (= 0.70.3) + - React-Codegen (= 0.70.3) + - React-Core/RCTSettingsHeaders (= 0.70.3) + - React-jsi (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-RCTText (0.70.3): + - React-Core/RCTTextHeaders (= 0.70.3) + - React-RCTVibration (0.70.3): + - RCT-Folly (= 2021.07.22.00) + - React-Codegen (= 0.70.3) + - React-Core/RCTVibrationHeaders (= 0.70.3) + - React-jsi (= 0.70.3) + - ReactCommon/turbomodule/core (= 0.70.3) + - React-runtimeexecutor (0.70.3): + - React-jsi (= 0.70.3) + - ReactCommon/turbomodule/core (0.70.3): - DoubleConversion - - Folly (= 2020.01.13.00) - glog - - React-callinvoker (= 0.63.4) - - React-Core (= 0.63.4) - - React-cxxreact (= 0.63.4) - - React-jsi (= 0.63.4) + - RCT-Folly (= 2021.07.22.00) + - React-bridging (= 0.70.3) + - React-callinvoker (= 0.70.3) + - React-Core (= 0.70.3) + - React-cxxreact (= 0.70.3) + - React-jsi (= 0.70.3) + - React-logger (= 0.70.3) + - React-perflogger (= 0.70.3) - rn-fetch-blob (0.12.0): - React-Core - - RNCAsyncStorage (1.12.1): + - RNBootSplash (4.3.2): - React-Core - - RNCClipboard (1.8.5): + - RNCAsyncStorage (1.17.10): - React-Core - - RNCPushNotificationIOS (1.8.0): + - RNCClipboard (1.11.1): + - React-Core + - RNCPushNotificationIOS (1.10.1): - React-Core - RNDeviceInfo (10.2.1): - React-Core - - RNFastImage (8.3.4): + - RNFastImage (8.6.1): - React-Core - - SDWebImage (~> 5.8) - - SDWebImageWebPCoder (~> 0.6.1) - - RNFBAnalytics (14.9.4): + - SDWebImage (~> 5.11.1) + - SDWebImageWebPCoder (~> 0.8.4) + - RNFBAnalytics (14.12.0): - Firebase/Analytics (= 8.15.0) - React-Core - RNFBApp - - RNFBApp (14.9.4): + - RNFBApp (14.12.0): - Firebase/CoreOnly (= 8.15.0) - React-Core - - RNFBDynamicLinks (14.9.4): + - RNFBDynamicLinks (14.12.0): - Firebase/DynamicLinks (= 8.15.0) - GoogleUtilities/AppDelegateSwizzler - React-Core - RNFBApp - - RNFBMessaging (14.9.4): + - RNFBMessaging (14.12.0): - Firebase/Messaging (= 8.15.0) - React-Core - RNFBApp - - RNGestureHandler (1.10.3): + - RNGestureHandler (2.8.0): - React-Core - RNIap (7.5.6): - React-Core @@ -473,58 +541,94 @@ PODS: - React-Core - React-RCTImage - TOCropViewController + - RNNotifee (7.0.4): + - React-Core + - RNNotifee/NotifeeCore (= 7.0.4) + - RNNotifee/NotifeeCore (7.0.4): + - React-Core - RNOS (1.2.6): - React - - RNPermissions (3.3.0): + - RNPermissions (3.6.1): - React-Core - - RNReanimated (1.13.2): + - RNReanimated (2.11.0): + - DoubleConversion + - FBLazyVector + - FBReactNativeSpec + - glog + - RCT-Folly + - RCTRequired + - RCTTypeSafety + - React-callinvoker - React-Core - - RNScreens (3.13.1): + - 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 + - ReactCommon/turbomodule/core + - Yoga + - RNScreens (3.14.0): - React-Core - React-RCTImage - - RNSVG (12.1.1): - - React + - RNSVG (12.4.4): + - React-Core - RNVectorIcons (6.7.0): - React - SDWebImage (5.11.1): - SDWebImage/Core (= 5.11.1) - SDWebImage/Core (5.11.1) - - SDWebImageWebPCoder (0.6.1): + - SDWebImageWebPCoder (0.8.5): - libwebp (~> 1.0) - - SDWebImage/Core (~> 5.7) + - SDWebImage/Core (~> 5.10) - TcpSockets (4.0.0): - React - - TOCropViewController (2.6.0) - - toolbar-android (0.1.0-rc.2): + - TOCropViewController (2.6.1) + - toolbar-android (0.2.1): - React - Yoga (1.14.0) DEPENDENCIES: - - appcenter-analytics (from `../node_modules/appcenter-analytics/ios`) - - appcenter-core (from `../node_modules/appcenter/ios`) - - appcenter-crashes (from `../node_modules/appcenter-crashes/ios`) + - appcenter-analytics (from `../node_modules/appcenter-analytics`) + - appcenter-core (from `../node_modules/appcenter`) + - appcenter-crashes (from `../node_modules/appcenter-crashes`) + - boost (from `../node_modules/react-native/third-party-podspecs/boost.podspec`) - "BugsnagReactNative (from `../node_modules/@bugsnag/react-native`)" - BVLinearGradient (from `../node_modules/react-native-linear-gradient`) - DoubleConversion (from `../node_modules/react-native/third-party-podspecs/DoubleConversion.podspec`) - FBLazyVector (from `../node_modules/react-native/Libraries/FBLazyVector`) - - FBReactNativeSpec (from `../node_modules/react-native/Libraries/FBReactNativeSpec`) - - Folly (from `../node_modules/react-native/third-party-podspecs/Folly.podspec`) + - FBReactNativeSpec (from `../node_modules/react-native/React/FBReactNativeSpec`) - glog (from `../node_modules/react-native/third-party-podspecs/glog.podspec`) + - hermes-engine (from `../node_modules/react-native/sdks/hermes/hermes-engine.podspec`) + - libevent (~> 2.1.12) - lottie-ios (from `../node_modules/lottie-ios`) - lottie-react-native (from `../node_modules/lottie-react-native`) - Permission-Camera (from `../node_modules/react-native-permissions/ios/Camera`) + - RCT-Folly (from `../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec`) - RCTRequired (from `../node_modules/react-native/Libraries/RCTRequired`) - RCTTypeSafety (from `../node_modules/react-native/Libraries/TypeSafety`) - React (from `../node_modules/react-native/`) + - React-bridging (from `../node_modules/react-native/ReactCommon`) - React-callinvoker (from `../node_modules/react-native/ReactCommon/callinvoker`) + - React-Codegen (from `build/generated/ios`) - React-Core (from `../node_modules/react-native/`) - - React-Core/DevSupport (from `../node_modules/react-native/`) - React-Core/RCTWebSocket (from `../node_modules/react-native/`) - React-CoreModules (from `../node_modules/react-native/React/CoreModules`) - React-cxxreact (from `../node_modules/react-native/ReactCommon/cxxreact`) + - React-hermes (from `../node_modules/react-native/ReactCommon/hermes`) - React-jsi (from `../node_modules/react-native/ReactCommon/jsi`) - React-jsiexecutor (from `../node_modules/react-native/ReactCommon/jsiexecutor`) - React-jsinspector (from `../node_modules/react-native/ReactCommon/jsinspector`) + - React-logger (from `../node_modules/react-native/ReactCommon/logger`) - react-native-camera (from `../node_modules/react-native-camera`) - "react-native-cameraroll (from `../node_modules/@react-native-community/cameraroll`)" - react-native-config (from `../node_modules/react-native-config`) @@ -534,13 +638,14 @@ DEPENDENCIES: - react-native-orientation-locker (from `../node_modules/react-native-orientation-locker`) - react-native-randombytes (from `../node_modules/react-native-randombytes`) - react-native-receive-sharing-intent (from `../node_modules/react-native-receive-sharing-intent`) + - react-native-render-html (from `../node_modules/react-native-render-html`) - react-native-restart (from `../node_modules/react-native-restart`) - react-native-safe-area-context (from `../node_modules/react-native-safe-area-context`) - - react-native-splash-screen (from `../node_modules/react-native-splash-screen`) - react-native-udp (from `../node_modules/react-native-udp`) - react-native-version-number (from `../node_modules/react-native-version-number`) - react-native-video (from `../node_modules/react-native-video`) - react-native-webview (from `../node_modules/react-native-webview`) + - React-perflogger (from `../node_modules/react-native/ReactCommon/reactperflogger`) - React-RCTActionSheet (from `../node_modules/react-native/Libraries/ActionSheetIOS`) - React-RCTAnimation (from `../node_modules/react-native/Libraries/NativeAnimation`) - React-RCTBlob (from `../node_modules/react-native/Libraries/Blob`) @@ -550,9 +655,11 @@ DEPENDENCIES: - React-RCTSettings (from `../node_modules/react-native/Libraries/Settings`) - React-RCTText (from `../node_modules/react-native/Libraries/Text`) - React-RCTVibration (from `../node_modules/react-native/Libraries/Vibration`) + - React-runtimeexecutor (from `../node_modules/react-native/ReactCommon/runtimeexecutor`) - ReactCommon/turbomodule/core (from `../node_modules/react-native/ReactCommon`) - rn-fetch-blob (from `../node_modules/rn-fetch-blob`) - - "RNCAsyncStorage (from `../node_modules/@react-native-community/async-storage`)" + - RNBootSplash (from `../node_modules/react-native-bootsplash`) + - "RNCAsyncStorage (from `../node_modules/@react-native-async-storage/async-storage`)" - "RNCClipboard (from `../node_modules/@react-native-clipboard/clipboard`)" - "RNCPushNotificationIOS (from `../node_modules/@react-native-community/push-notification-ios`)" - RNDeviceInfo (from `../node_modules/react-native-device-info`) @@ -564,6 +671,7 @@ DEPENDENCIES: - RNGestureHandler (from `../node_modules/react-native-gesture-handler`) - RNIap (from `../node_modules/react-native-iap`) - RNImageCropPicker (from `../node_modules/react-native-image-crop-picker`) + - "RNNotifee (from `../node_modules/@notifee/react-native`)" - RNOS (from `../node_modules/react-native-os`) - RNPermissions (from `../node_modules/react-native-permissions`) - RNReanimated (from `../node_modules/react-native-reanimated`) @@ -578,7 +686,7 @@ SPEC REPOS: trunk: - AppCenter - AppCenterReactNativeShared - - boost-for-react-native + - CocoaAsyncSocket - Firebase - FirebaseAnalytics - FirebaseCore @@ -586,9 +694,11 @@ SPEC REPOS: - FirebaseDynamicLinks - FirebaseInstallations - FirebaseMessaging + - fmt - GoogleAppMeasurement - GoogleDataTransport - GoogleUtilities + - libevent - libwebp - nanopb - PromisesObjC @@ -598,11 +708,13 @@ SPEC REPOS: EXTERNAL SOURCES: appcenter-analytics: - :path: "../node_modules/appcenter-analytics/ios" + :path: "../node_modules/appcenter-analytics" appcenter-core: - :path: "../node_modules/appcenter/ios" + :path: "../node_modules/appcenter" appcenter-crashes: - :path: "../node_modules/appcenter-crashes/ios" + :path: "../node_modules/appcenter-crashes" + boost: + :podspec: "../node_modules/react-native/third-party-podspecs/boost.podspec" BugsnagReactNative: :path: "../node_modules/@bugsnag/react-native" BVLinearGradient: @@ -612,37 +724,47 @@ EXTERNAL SOURCES: FBLazyVector: :path: "../node_modules/react-native/Libraries/FBLazyVector" FBReactNativeSpec: - :path: "../node_modules/react-native/Libraries/FBReactNativeSpec" - Folly: - :podspec: "../node_modules/react-native/third-party-podspecs/Folly.podspec" + :path: "../node_modules/react-native/React/FBReactNativeSpec" glog: :podspec: "../node_modules/react-native/third-party-podspecs/glog.podspec" + hermes-engine: + :podspec: "../node_modules/react-native/sdks/hermes/hermes-engine.podspec" lottie-ios: :path: "../node_modules/lottie-ios" lottie-react-native: :path: "../node_modules/lottie-react-native" Permission-Camera: :path: "../node_modules/react-native-permissions/ios/Camera" + RCT-Folly: + :podspec: "../node_modules/react-native/third-party-podspecs/RCT-Folly.podspec" RCTRequired: :path: "../node_modules/react-native/Libraries/RCTRequired" RCTTypeSafety: :path: "../node_modules/react-native/Libraries/TypeSafety" React: :path: "../node_modules/react-native/" + React-bridging: + :path: "../node_modules/react-native/ReactCommon" React-callinvoker: :path: "../node_modules/react-native/ReactCommon/callinvoker" + React-Codegen: + :path: build/generated/ios React-Core: :path: "../node_modules/react-native/" React-CoreModules: :path: "../node_modules/react-native/React/CoreModules" React-cxxreact: :path: "../node_modules/react-native/ReactCommon/cxxreact" + React-hermes: + :path: "../node_modules/react-native/ReactCommon/hermes" React-jsi: :path: "../node_modules/react-native/ReactCommon/jsi" React-jsiexecutor: :path: "../node_modules/react-native/ReactCommon/jsiexecutor" React-jsinspector: :path: "../node_modules/react-native/ReactCommon/jsinspector" + React-logger: + :path: "../node_modules/react-native/ReactCommon/logger" react-native-camera: :path: "../node_modules/react-native-camera" react-native-cameraroll: @@ -661,12 +783,12 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-randombytes" react-native-receive-sharing-intent: :path: "../node_modules/react-native-receive-sharing-intent" + react-native-render-html: + :path: "../node_modules/react-native-render-html" react-native-restart: :path: "../node_modules/react-native-restart" react-native-safe-area-context: :path: "../node_modules/react-native-safe-area-context" - react-native-splash-screen: - :path: "../node_modules/react-native-splash-screen" react-native-udp: :path: "../node_modules/react-native-udp" react-native-version-number: @@ -675,6 +797,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-video" react-native-webview: :path: "../node_modules/react-native-webview" + React-perflogger: + :path: "../node_modules/react-native/ReactCommon/reactperflogger" React-RCTActionSheet: :path: "../node_modules/react-native/Libraries/ActionSheetIOS" React-RCTAnimation: @@ -693,12 +817,16 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/Libraries/Text" React-RCTVibration: :path: "../node_modules/react-native/Libraries/Vibration" + React-runtimeexecutor: + :path: "../node_modules/react-native/ReactCommon/runtimeexecutor" ReactCommon: :path: "../node_modules/react-native/ReactCommon" rn-fetch-blob: :path: "../node_modules/rn-fetch-blob" + RNBootSplash: + :path: "../node_modules/react-native-bootsplash" RNCAsyncStorage: - :path: "../node_modules/@react-native-community/async-storage" + :path: "../node_modules/@react-native-async-storage/async-storage" RNCClipboard: :path: "../node_modules/@react-native-clipboard/clipboard" RNCPushNotificationIOS: @@ -721,6 +849,8 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native-iap" RNImageCropPicker: :path: "../node_modules/react-native-image-crop-picker" + RNNotifee: + :path: "../node_modules/@notifee/react-native" RNOS: :path: "../node_modules/react-native-os" RNPermissions: @@ -741,17 +871,18 @@ EXTERNAL SOURCES: :path: "../node_modules/react-native/ReactCommon/yoga" SPEC CHECKSUMS: - AppCenter: 87ef6eefd8ade4df59e88951288587429f3dd2a5 - appcenter-analytics: aa074250b2cb182d6f7d67d9c236dd4606673ab5 - appcenter-core: c97920e79eba2321a262d3733cb2a6f1097db539 - appcenter-crashes: 804ae51c5d1742ce20fdb6a68b3d06208a404ad5 - AppCenterReactNativeShared: ef370308277adf71ec1586798b196e4cc35335ea - boost-for-react-native: 39c7adb57c4e60d6c5479dd8623128eb5b3f0f2c - BugsnagReactNative: a96bc039e0e4ec317a8b331714393d836ca60557 - BVLinearGradient: e3aad03778a456d77928f594a649e96995f1c872 - DoubleConversion: cde416483dac037923206447da6e1454df403714 - FBLazyVector: 3bb422f41b18121b71783a905c10e58606f7dc3e - FBReactNativeSpec: f2c97f2529dd79c083355182cc158c9f98f4bd6e + AppCenter: 3fd04aa1b166e16fdb03ec81dabe488aece83fbd + appcenter-analytics: 1aea9ada8922d2e2df3e069a28eda21157c9d30d + appcenter-core: c593b2e4ac28d6a21b6a217c4a5e6b3de7b0b00f + appcenter-crashes: d9ae1c9296974c1c433600fa2f320e0ba1f12bdf + AppCenterReactNativeShared: f395caeabde0dc3a11609dbcb737d0f14cd40e79 + boost: a7c83b31436843459a1961bfd74b96033dc77234 + BugsnagReactNative: 90db2ee1ae4e7b04c56ce0bd00c098c818fc1ee7 + BVLinearGradient: 34a999fda29036898a09c6a6b728b0b4189e1a44 + CocoaAsyncSocket: 065fd1e645c7abab64f7a6a2007a48038fdc6a99 + DoubleConversion: 831926d9b8bf8166fd87886c4abab286c2422662 + FBLazyVector: 3b313c3fb52b597f7a9b430798e6367d2b9f07e5 + FBReactNativeSpec: 99a7ecb7e9665d96f2fea706b0844e2f3117f381 Firebase: 5f8193dff4b5b7c5d5ef72ae54bb76c08e2b841d FirebaseAnalytics: 7761cbadb00a717d8d0939363eb46041526474fa FirebaseCore: 5743c5785c074a794d35f2fff7ecc254a91e08b1 @@ -759,79 +890,90 @@ SPEC CHECKSUMS: FirebaseDynamicLinks: 1dc816ef789c5adac6fede0b46d11478175c70e4 FirebaseInstallations: 40bd9054049b2eae9a2c38ef1c3dd213df3605cd FirebaseMessaging: 5e5118a2383b3531e730d974680954c679ca0a13 - Folly: b73c3869541e86821df3c387eb0af5f65addfab4 - glog: 40a13f7840415b9a77023fbcae0f1e6f43192af3 + fmt: ff9d55029c625d3757ed641535fd4a75fedc7ce9 + glog: 85ecdd10ee8d8ec362ef519a6a45ff9aa27b2e85 GoogleAppMeasurement: 4c19f031220c72464d460c9daa1fb5d1acce958e - GoogleDataTransport: 5fffe35792f8b96ec8d6775f5eccd83c998d5a3b + GoogleDataTransport: 1c8145da7117bd68bbbed00cf304edb6a24de00f GoogleUtilities: e0913149f6b0625b553d70dae12b49fc62914fd1 - libwebp: e90b9c01d99205d03b6bb8f2c8c415e5a4ef66f0 - lottie-ios: c058aeafa76daa4cf64d773554bccc8385d0150e - lottie-react-native: a501112fa980529ccb80b9f3ee117a7f98c6af3a + hermes-engine: bb344d89a0d14c2c91ad357480a79698bb80e186 + libevent: 4049cae6c81cdb3654a443be001fb9bdceff7913 + libwebp: 60305b2e989864154bd9be3d772730f08fc6a59c + lottie-ios: 69495122151a378fdc7d1bb4c5930347e37baf1f + lottie-react-native: b702fab740cdb952a8e2354713d3beda63ff97b0 nanopb: a0ba3315591a9ae0a16a309ee504766e90db0c96 - Permission-Camera: 597646618d1edcc055a3f660844c2ee6de8e0596 - PromisesObjC: 99b6f43f9e1044bd87a95a60beff28c2c44ddb72 - RCTRequired: 082f10cd3f905d6c124597fd1c14f6f2655ff65e - RCTTypeSafety: 8c9c544ecbf20337d069e4ae7fd9a377aadf504b - React: b0a957a2c44da4113b0c4c9853d8387f8e64e615 - React-callinvoker: c3f44dd3cb195b6aa46621fff95ded79d59043fe - React-Core: d3b2a1ac9a2c13c3bcde712d9281fc1c8a5b315b - React-CoreModules: 0581ff36cb797da0943d424f69e7098e43e9be60 - React-cxxreact: c1480d4fda5720086c90df537ee7d285d4c57ac3 - React-jsi: a0418934cf48f25b485631deb27c64dc40fb4c31 - React-jsiexecutor: 93bd528844ad21dc07aab1c67cb10abae6df6949 - React-jsinspector: 58aef7155bc9a9683f5b60b35eccea8722a4f53a + Permission-Camera: bf6791b17c7f614b6826019fcfdcc286d3a107f6 + PromisesObjC: ab77feca74fa2823e7af4249b8326368e61014cb + RCT-Folly: 0080d0a6ebf2577475bda044aa59e2ca1f909cda + RCTRequired: 5cf7e7d2f12699724b59f90350257a422eaa9492 + RCTTypeSafety: 3f3ead9673d1ab8bb1aea85b0894ab3220f8f06e + React: 30a333798d1fcf595e8a4108bbaa0f125a655f4a + React-bridging: 92396c03ab446756ddfb7a8e2baff3bcf19eec7d + React-callinvoker: bb66a41b41fa0b7c5f3cc626693a63c9ea0d6252 + React-Codegen: a2a944a9688fae870be0a2ecdca37284034b25c2 + React-Core: a689b4d1bd13e15915a05c9918c2b01df96cd811 + React-CoreModules: d262214db6b704b042bc5c0735b06c346a371d7f + React-cxxreact: 81d5bf256313bf96cb925eb0e654103291161a17 + React-hermes: 1c35cbfbdc7a888c3a1aa05e6d0ca004d92c923c + React-jsi: 7f99dc3055bec9a0eeb4230f8b6ac873514c8421 + React-jsiexecutor: 7e2e1772ef7b97168c880eeaf3749d8c145ffd6e + React-jsinspector: 0553c9fe7218e1f127be070bd5a4d2fc19fb8190 + React-logger: cffcc09e8aba8a3014be8d18da7f922802e9f19e react-native-camera: 3eae183c1d111103963f3dd913b65d01aef8110f react-native-cameraroll: e2917a5e62da9f10c3d525e157e25e694d2d6dfa - react-native-config: c98128a72bc2c3a1ca72caec0b021f0fa944aa29 - react-native-date-picker: d83ab9cccbc497642a93fdca783ae76ecd6b17b6 + react-native-config: bcafda5b4c51491ee1b0e1d0c4e3905bc7b56c1b + react-native-date-picker: 55193347d8d0f40948f441ffd4e5db6f0a8fbe13 react-native-fingerprint-scanner: ac6656f18c8e45a7459302b84da41a44ad96dbbe - react-native-netinfo: 30fb89fa913c342be82a887b56e96be6d71201dd - react-native-orientation-locker: 2da91e5391971dace445495821c899c111dcad7a + react-native-netinfo: 85b2a435c4d3705c08b0c42ff2d6ef6b9622ea0a + react-native-orientation-locker: 851f6510d8046ea2f14aa169b1e01fcd309a94ba react-native-randombytes: 421f1c7d48c0af8dbcd471b0324393ebf8fe7846 - react-native-receive-sharing-intent: feba0a332a07977549a85aa58b496eb44368366a - react-native-restart: aaad36f3ed7031daac3565f4a79d67e4f3884a50 - react-native-safe-area-context: 9e40fb181dac02619414ba1294d6c2a807056ab9 - react-native-splash-screen: 4312f786b13a81b5169ef346d76d33bc0c6dc457 - react-native-udp: ff9d13e523f2b58e6bc5d4d32321ac60671b5dc9 + react-native-receive-sharing-intent: 62ab28c50e6ae56d32b9e841d7452091312a0bc7 + react-native-render-html: 984dfe2294163d04bf5fe25d7c9f122e60e05ebe + react-native-restart: 45c8dca02491980f2958595333cbccd6877cb57e + react-native-safe-area-context: 99b24a0c5acd0d5dcac2b1a7f18c49ea317be99a + react-native-udp: 8864b1211857e9d8224ae5cbaf8580970fb99de1 react-native-version-number: b415bbec6a13f2df62bf978e85bc0d699462f37f - react-native-video: a4c2635d0802f983594b7057e1bce8f442f0ad28 - react-native-webview: 162b6453d074e0b1c7025242bb7a939b6f72b9e7 - React-RCTActionSheet: 89a0ca9f4a06c1f93c26067af074ccdce0f40336 - React-RCTAnimation: 1bde3ecc0c104c55df246eda516e0deb03c4e49b - React-RCTBlob: a97d378b527740cc667e03ebfa183a75231ab0f0 - React-RCTImage: c1b1f2d3f43a4a528c8946d6092384b5c880d2f0 - React-RCTLinking: 35ae4ab9dc0410d1fcbdce4d7623194a27214fb2 - React-RCTNetwork: 29ec2696f8d8cfff7331fac83d3e893c95ef43ae - React-RCTSettings: 60f0691bba2074ef394f95d4c2265ec284e0a46a - React-RCTText: 5c51df3f08cb9dedc6e790161195d12bac06101c - React-RCTVibration: ae4f914cfe8de7d4de95ae1ea6cc8f6315d73d9d - ReactCommon: 73d79c7039f473b76db6ff7c6b159c478acbbb3b + react-native-video: c26780b224543c62d5e1b2a7244a5cd1b50e8253 + react-native-webview: d33e2db8925d090871ffeb232dfa50cb3a727581 + React-perflogger: 082b4293f0b3914ff41da35a6c06ac4490fcbcc8 + React-RCTActionSheet: 83da3030deb5dea54b398129f56540a44e64d3ae + React-RCTAnimation: bac3a4f4c0436554d9f7fbb1352a0cdcb1fb0f1c + React-RCTBlob: d2c8830ac6b4d55d5624469829fe6d0ef1d534d1 + React-RCTImage: 26ad032b09f90ae5d2283ec19f0c455c444c8189 + React-RCTLinking: 4a8d16586df11fff515a6c52ff51a02c47a20499 + React-RCTNetwork: 843fc75a70f0b5760de0bf59468585f41209bcf0 + React-RCTSettings: 54e59255f94462951b45f84c3f81aedc27cf8615 + React-RCTText: c32e2a60827bd232b2bc95941b9926ccf1c2be4c + React-RCTVibration: b9a58ffdd18446f43d493a4b0ecd603ee86be847 + React-runtimeexecutor: e9b1f9310158a1e265bcdfdfd8c62d6174b947a2 + ReactCommon: 01064177e66d652192c661de899b1076da962fd9 rn-fetch-blob: f065bb7ab7fb48dd002629f8bdcb0336602d3cba - RNCAsyncStorage: b03032fdbdb725bea0bd9e5ec5a7272865ae7398 - RNCClipboard: cc054ad1e8a33d2a74cd13e565588b4ca928d8fd - RNCPushNotificationIOS: 61a7c72bd1ebad3568025957d001e0f0e7b32191 + RNBootSplash: 5f346163977573d6b2aeba1b25df9d2245c0d73c + RNCAsyncStorage: 0c357f3156fcb16c8589ede67cc036330b6698ca + RNCClipboard: 2834e1c4af68697089cdd455ee4a4cdd198fa7dd + RNCPushNotificationIOS: 87b8d16d3ede4532745e05b03c42cff33a36cc45 RNDeviceInfo: c31137f22ee779fe3931d1a8d60cc1af80ef4077 - RNFastImage: d4870d58f5936111c56218dbd7fcfc18e65b58ff - RNFBAnalytics: 58ff0fbce5a6b40de01b3ff0bdf3d613798a9e3e - RNFBApp: bef4ec5a6d31a3da9bf285379d0c4857c6b7313e - RNFBDynamicLinks: b603b10774e583bd8b4bf2fbab15afd8b1ce6894 - RNFBMessaging: bb601451343f61ea26c5806690b4aa62a06aa054 - RNGestureHandler: a479ebd5ed4221a810967000735517df0d2db211 + RNFastImage: 3207b9eb17c2425d574ca40db35185db6e324f4e + RNFBAnalytics: ea1421b49a0bf5e5bb7274df4a330713d0e85d2e + RNFBApp: e4439717c23252458da2b41b81b4b475c86f90c4 + RNFBDynamicLinks: 538840f6e3f58511f857d15df1bc25ed655dc283 + RNFBMessaging: 40dac204b4197a2661dec5be964780c6ec39bf65 + RNGestureHandler: 62232ba8f562f7dea5ba1b3383494eb5bf97a4d3 RNIap: d248609d1b8937e63bd904e865c318e9b1457eff RNImageCropPicker: 08ba3a2e2f4f8833d606f01906c371e382c4dea9 + RNNotifee: dcb2593127f40945c4ee5fc09f61d71bbd00b9cf RNOS: 6f2f9a70895bbbfbdad7196abd952e7b01d45027 - RNPermissions: bcd846e8f5a7f39e921cc7ca7172e2de0e698b6f - RNReanimated: e03f7425cb7a38dcf1b644d680d1bfc91c3337ad - RNScreens: 40a2cb40a02a609938137a1e0acfbf8fc9eebf19 - RNSVG: 551acb6562324b1d52a4e0758f7ca0ec234e278f + RNPermissions: dcdb7b99796bbeda6975a6e79ad519c41b251b1c + RNReanimated: 26c85a645e1b0e187d05918fbd5a33446406e7bf + RNScreens: 4830eb40e0793b38849965cd27f4f3a7d7bc65c1 + RNSVG: ecd661f380a07ba690c9c5929c475a44f432d674 RNVectorIcons: 368d6d8b8301224e5ffb6254191f4f8876c2be0d SDWebImage: a7f831e1a65eb5e285e3fb046a23fcfbf08e696d - SDWebImageWebPCoder: d0dac55073088d24b2ac1b191a71a8f8d0adac21 + SDWebImageWebPCoder: 908b83b6adda48effe7667cd2b7f78c897e5111d TcpSockets: 4ef55305239923b343ed0a378b1fac188b1373b0 - TOCropViewController: 3105367e808b7d3d886a74ff59bf4804e7d3ab38 - toolbar-android: 85f3ef4d691469f2d304e7dee4bca013aa1ba1ff - Yoga: 4bd86afe9883422a7c4028c00e34790f560923d6 + TOCropViewController: edfd4f25713d56905ad1e0b9f5be3fbe0f59c863 + toolbar-android: 2a73856e98b750d7e71ce4644d3f41cc98211719 + Yoga: 2ed968a4f060a92834227c036279f2736de0fce3 -PODFILE CHECKSUM: 0282022703ad578ab2d9afbf3147ba3b373b4311 +PODFILE CHECKSUM: 349fd1005f5ffc6e775051d22702d58ab1632517 COCOAPODS: 1.11.3 diff --git a/package.json b/package.json index bc7349a70..59a56aa49 100644 --- a/package.json +++ b/package.json @@ -24,9 +24,10 @@ "bump-patch": "npm version patch --no-git-tag-version", "bump-minor": "npm version minor --no-git-tag-version", "bump-major": "npm version major --no-git-tag-version", - "postinstall": "node_modules/.bin/rn-nodeify --install --hack --yarn && cd ios && pod install" + "postinstall": "npx patch-package && node_modules/.bin/rn-nodeify --install --hack --yarn && cd ios && pod install" }, "dependencies": { + "@babel/preset-typescript": "^7.16.7", "@babel/runtime": "^7.5.5", "@bugsnag/react-native": "^7.11.0", "@ecency/render-helper": "^2.2.18", @@ -37,29 +38,31 @@ "@hiveio/dhive": "^1.0.1", "@native-html/iframe-plugin": "^2.6.1", "@native-html/table-plugin": "^5.3.1", + "@notifee/react-native": "^7.0.4", + "@react-native-async-storage/async-storage": "^1.17.10", "@react-native-clipboard/clipboard": "^1.8.5", - "@react-native-community/async-storage": "^1.11.0", "@react-native-community/cameraroll": "^1.3.0", "@react-native-community/cli-platform-ios": "^4.10.1", - "@react-native-community/netinfo": "^5.3.3", + "@react-native-community/netinfo": "^9.3.5", "@react-native-community/push-notification-ios": "^1.2.0", - "@react-native-community/toolbar-android": "^0.1.0-rc.2", + "@react-native-community/toolbar-android": "^0.2.1", "@react-native-firebase/analytics": "^14.9.4", "@react-native-firebase/app": "^14.9.4", "@react-native-firebase/dynamic-links": "^14.9.4", "@react-native-firebase/messaging": "^14.9.4", "@react-navigation/bottom-tabs": "^6.3.2", "@react-navigation/drawer": "^6.4.3", - "@react-navigation/native": "^6.0.11", + "@react-navigation/native": "^6.0.13", "@react-navigation/native-stack": "^6.7.0", "@react-navigation/stack": "^6.2.2", + "@reduxjs/toolkit": "^1.8.6", "@tanstack/query-async-storage-persister": "^4.3.9", "@tanstack/react-query": "^4.3.9", "@tanstack/react-query-persist-client": "^4.3.9", "@tradle/react-native-http": "^2.0.0", - "appcenter": "^4.1.0", - "appcenter-analytics": "^4.1.0", - "appcenter-crashes": "^4.1.0", + "appcenter": "4.4.5", + "appcenter-analytics": "4.4.5", + "appcenter-crashes": "4.4.5", "assert": "^1.1.1", "axios": "^0.21.2", "browserify-zlib": "~0.1.4", @@ -70,6 +73,7 @@ "core-js": "3.6.4", "crypto-js": "^3.1.9-1", "currency-symbol-map": "^4.0.4", + "deprecated-react-native-prop-types": "^2.3.0", "diff-match-patch": "^1.0.5", "dns.js": "^1.0.1", "domain-browser": "^1.1.1", @@ -79,20 +83,22 @@ "intl": "^1.2.5", "jsc-android": "^241213.1.0", "lodash": "^4.17.13", - "lottie-ios": "3.2.3", + "lottie-ios": "3.4.0", "lottie-react-native": "^5.1.3", "moment": "^2.29.2", "path-browserify": "0.0.0", "process": "^0.11.0", "punycode": "^1.2.4", + "qs": "^6.11.0", "querystring-es3": "~0.2.0", - "react": "16.13.1", + "react": "18.1.0", "react-intl": "^3.9.2", - "react-native": "0.63.4", + "react-native": "0.70.3", "react-native-actions-sheet": "^0.6.1", "react-native-actionsheet": "ecency/react-native-actionsheet", "react-native-animatable": "^1.3.3", "react-native-autoheight-webview": "^1.5.8", + "react-native-bootsplash": "^4.3.2", "react-native-camera": "^4.2.1", "react-native-chart-kit": "^6.11.0", "react-native-config": "luggit/react-native-config#master", @@ -103,7 +109,7 @@ "react-native-extended-stylesheet": "^0.10.0", "react-native-fast-image": "^8.3.2", "react-native-fingerprint-scanner": "hieuvp/react-native-fingerprint-scanner", - "react-native-gesture-handler": "^1.9.0", + "react-native-gesture-handler": "^2.8.0", "react-native-highlight-words": "^1.0.1", "react-native-iap": "^7.5.6", "react-native-image-crop-picker": "^0.35.2", @@ -113,34 +119,32 @@ "react-native-level-fs": "^3.0.0", "react-native-linear-gradient": "^2.4.2", "react-native-media-controls": "^2.3.0", - "react-native-modal": "11.5.6", + "react-native-modal": "13.0.1", "react-native-modal-dropdown": "^1.0.2", "react-native-modal-popover": "^2.1.0", "react-native-modal-translucent": "^5.0.0", "react-native-navigation-bar-color": "^1.0.0", "react-native-orientation-locker": "^1.4.0", - "react-native-os": "^1.0.1", + "react-native-os": "^1.2.6", "react-native-permissions": "^3.3.0", "react-native-portalize": "^1.0.7", "react-native-progress": "^5.0.0", - "react-native-push-notification": "^7.3.1", "react-native-qrcode-scanner": "^1.5.5", "react-native-qrcode-svg": "^6.0.3", "react-native-randombytes": "^3.6.1", - "react-native-reanimated": "^1", - "react-native-receive-sharing-intent": "ecency/react-native-receive-sharing-intent", + "react-native-reanimated": "^2.4.1", + "react-native-receive-sharing-intent": "^2.0.0", "react-native-render-html": "^6.0.5", - "react-native-restart": "^0.0.23", - "react-native-safe-area-context": "^3.4.1", - "react-native-screens": "3.13.1", + "react-native-restart": "^0.0.24", + "react-native-safe-area-context": "^4.4.1", + "react-native-screens": "3.14.0", "react-native-scrollable-tab-view": "ecency/react-native-scrollable-tab-view", "react-native-slider": "^0.11.0", "react-native-snap-carousel": "^3.8.0", - "react-native-splash-screen": "^3.3.0", "react-native-svg": "^12.1.1", "react-native-swiper": "^1.6.0-rc.3", "react-native-tcp": "^4.0.0", - "react-native-udp": "^2.1.0", + "react-native-udp": "^4.1.4", "react-native-unique-id": "^2.0.0", "react-native-vector-icons": "^6.6.0", "react-native-version": "^4.0.0", @@ -149,18 +153,18 @@ "react-native-webview": "^11.17.1", "react-native-youtube-iframe": "^2.1.1", "react-navigation-redux-helpers": "^4.0.1", - "react-redux": "^7.1.1", + "react-redux": "^8.0.4", + "reactotron-react-native": "^5.0.3", "readable-stream": "1.0.33", - "redux": "^4.0.4", "redux-persist": "^6.0.0", + "redux-persist-filesystem-storage": "^4.1.0", "redux-promise": "^0.6.0", - "redux-thunk": "^2.3.0", "rn-fetch-blob": "^0.12.0", "rn-placeholder": "^1.3.2", "rtl-detect": "^1.0.4", "speakingurl": "^14.0.1", "stacktrace-parser": "0.1.4", - "stream-browserify": "^1.0.0", + "stream-browserify": "^3.0.0", "string_decoder": "~0.10.25", "timers-browserify": "^1.0.1", "tty-browserify": "0.0.0", @@ -169,16 +173,16 @@ "vm-browserify": "0.0.4" }, "devDependencies": { - "@babel/core": "^7.8.4", + "@babel/core": "^7.12.9", "@babel/helper-environment-visitor": "^7.16.7", - "@babel/runtime": "^7.8.4", + "@babel/runtime": "^7.12.5", "@bugsnag/source-maps": "^2.2.0", - "@react-native-community/eslint-config": "^1.1.0", + "@react-native-community/eslint-config": "^2.0.0", "@types/react-redux": "^7.1.16", "babel-eslint": "^10.0.1", - "babel-jest": "^25.1.0", + "babel-jest": "^26.6.3", "babel-plugin-transform-remove-console": "^6.9.4", - "eslint": "5.16.0", + "eslint": "^7.32.0", "eslint-config-airbnb": "^17.1.0", "eslint-config-prettier": "^6.7.0", "eslint-plugin-eslint-comments": "^3.1.1", @@ -190,16 +194,14 @@ "eslint-plugin-react-hooks": "^2.3.0", "eslint-plugin-react-native": "^3.7.0", "husky": "^3.1.0", - "jest": "^25.1.0", - "jetifier": "^1.6.3", + "jest": "^26.6.3", "lint-staged": "^7.2.0", - "metro-react-native-babel-preset": "^0.60.0", + "metro-react-native-babel-preset": "0.72.3", "prettier": "^2.0.2", "prettier-eslint": "^9.0.1", - "react-test-renderer": "16.13.1", - "reactotron-react-native": "^5.0.0", + "react-native-codegen": "^0.0.13", + "react-test-renderer": "18.1.0", "reactotron-redux": "^3.1.3", - "redux-devtools-extension": "^2.13.5", "rn-nodeify": "^10.3.0" }, "lint-staged": { diff --git a/patches/@esteemapp+react-native-multi-slider+1.1.0.patch b/patches/@esteemapp+react-native-multi-slider+1.1.0.patch new file mode 100644 index 000000000..c93685637 --- /dev/null +++ b/patches/@esteemapp+react-native-multi-slider+1.1.0.patch @@ -0,0 +1,84 @@ +diff --git a/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/android/build.gradle b/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/android/build.gradle +index cd8664f..77169be 100644 +--- a/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/android/build.gradle ++++ b/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/android/build.gradle +@@ -10,7 +10,7 @@ buildscript { + } + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + dependencies { + classpath 'com.android.tools.build:gradle:3.2.0' +@@ -24,7 +24,7 @@ allprojects { + repositories { + google() + mavenLocal() +- jcenter() ++ mavenCentral() //patched + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" +diff --git a/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/package.json b/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/package.json +index d878530..61f12f2 100644 +--- a/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/package.json ++++ b/node_modules/@esteemapp/react-native-multi-slider/examples/Basic/package.json +@@ -19,5 +19,57 @@ + }, + "jest": { + "preset": "react-native" ++ }, ++ "react-native": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ }, ++ "browser": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false + } + } diff --git a/patches/@esteemapp+react-native-slider+0.12.0.patch b/patches/@esteemapp+react-native-slider+0.12.0.patch new file mode 100644 index 000000000..eee38365c --- /dev/null +++ b/patches/@esteemapp+react-native-slider+0.12.0.patch @@ -0,0 +1,30 @@ +diff --git a/node_modules/@esteemapp/react-native-slider/lib/Slider.js b/node_modules/@esteemapp/react-native-slider/lib/Slider.js +index 8e2eb9e..7a1630c 100644 +--- a/node_modules/@esteemapp/react-native-slider/lib/Slider.js ++++ b/node_modules/@esteemapp/react-native-slider/lib/Slider.js +@@ -1 +1 @@ +-var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _interopRequireWildcard=require("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _react=_interopRequireWildcard(require("react"));var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _jsxFileName="/Users/f/pjs/react-native-slider/src/Slider.js";function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i=this.x&&y>=this.y&&x<=this.x+this.width&&y<=this.y+this.height;};var DEFAULT_ANIMATION_CONFIGS={spring:{friction:7,tension:100},timing:{duration:150,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),delay:0}};var Slider=function(_PureComponent){(0,_inherits2.default)(Slider,_PureComponent);function Slider(_props){var _this;(0,_classCallCheck2.default)(this,Slider);_this=(0,_possibleConstructorReturn2.default)(this,(0,_getPrototypeOf2.default)(Slider).call(this,_props));_this._handleStartShouldSetPanResponder=function(e){return _this._thumbHitTest(e);};_this._handlePanResponderGrant=function(){_this._previousLeft=_this._getThumbLeft(_this._getCurrentValue());_this._fireChangeEvent('onSlidingStart');};_this._handlePanResponderMove=function(e,gestureState){if(_this.props.disabled){return;}_this._setCurrentValue(_this._getValue(gestureState));_this._fireChangeEvent('onValueChange');};_this._handlePanResponderEnd=function(e,gestureState){if(_this.props.disabled){return;}_this._setCurrentValue(_this._getValue(gestureState));_this._fireChangeEvent('onSlidingComplete');};_this._measureContainer=function(x){_this._handleMeasure('containerSize',x);};_this._measureTrack=function(x){_this._handleMeasure('trackSize',x);};_this._measureThumb=function(x){_this._handleMeasure('thumbSize',x);};_this._handleMeasure=function(name,x){var _x$nativeEvent$layout=x.nativeEvent.layout,width=_x$nativeEvent$layout.width,height=_x$nativeEvent$layout.height;var size={width:width,height:height};var storeName="_"+name;var currentSize=_this[storeName];if(currentSize&&width===currentSize.width&&height===currentSize.height){return;}_this[storeName]=size;if(_this._containerSize&&_this._trackSize&&_this._thumbSize){_this.setState({containerSize:_this._containerSize,trackSize:_this._trackSize,thumbSize:_this._thumbSize,allMeasured:true});}};_this._getRatio=function(value){return(value-_this.props.minimumValue)/(_this.props.maximumValue-_this.props.minimumValue);};_this._getThumbLeft=function(value){var nonRtlRatio=_this._getRatio(value);var ratio=_reactNative.I18nManager.isRTL?1-nonRtlRatio:nonRtlRatio;return ratio*(_this.state.containerSize.width-_this.state.thumbSize.width);};_this._getValue=function(gestureState){var length=_this.state.containerSize.width-_this.state.thumbSize.width;var thumbLeft=_this._previousLeft+gestureState.dx;var nonRtlRatio=thumbLeft/length;var ratio=_reactNative.I18nManager.isRTL?1-nonRtlRatio:nonRtlRatio;if(_this.props.step){return Math.max(_this.props.minimumValue,Math.min(_this.props.maximumValue,_this.props.minimumValue+Math.round(ratio*(_this.props.maximumValue-_this.props.minimumValue)/_this.props.step)*_this.props.step));}return Math.max(_this.props.minimumValue,Math.min(_this.props.maximumValue,ratio*(_this.props.maximumValue-_this.props.minimumValue)+_this.props.minimumValue));};_this._getCurrentValue=function(){return _this.state.value.__getValue();};_this._setCurrentValue=function(value){_this.state.value.setValue(value);};_this._setCurrentValueAnimated=function(value){var animationType=_this.props.animationType;var animationConfig=(0,_extends2.default)({},DEFAULT_ANIMATION_CONFIGS[animationType],_this.props.animationConfig,{toValue:value});_reactNative.Animated[animationType](_this.state.value,animationConfig).start();};_this._fireChangeEvent=function(event){if(_this.props[event]){_this.props[event](_this._getCurrentValue());}};_this._getTouchOverflowSize=function(){var state=_this.state;var props=_this.props;var size={};if(state.allMeasured===true){size.width=Math.max(0,props.thumbTouchSize.width-state.thumbSize.width);size.height=Math.max(0,props.thumbTouchSize.height-state.containerSize.height);}return size;};_this._getTouchOverflowStyle=function(){var _this$_getTouchOverfl=_this._getTouchOverflowSize(),width=_this$_getTouchOverfl.width,height=_this$_getTouchOverfl.height;var touchOverflowStyle={};if(width!==undefined&&height!==undefined){var verticalMargin=-height/2;touchOverflowStyle.marginTop=verticalMargin;touchOverflowStyle.marginBottom=verticalMargin;var horizontalMargin=-width/2;touchOverflowStyle.marginLeft=horizontalMargin;touchOverflowStyle.marginRight=horizontalMargin;}if(_this.props.debugTouchArea===true){touchOverflowStyle.backgroundColor='orange';touchOverflowStyle.opacity=0.5;}return touchOverflowStyle;};_this._thumbHitTest=function(e){var nativeEvent=e.nativeEvent;var thumbTouchRect=_this._getThumbTouchRect();return thumbTouchRect.containsPoint(nativeEvent.locationX,nativeEvent.locationY);};_this._getThumbTouchRect=function(){var state=_this.state;var props=_this.props;var touchOverflowSize=_this._getTouchOverflowSize();return new Rect(touchOverflowSize.width/2+_this._getThumbLeft(_this._getCurrentValue())+(state.thumbSize.width-props.thumbTouchSize.width)/2,touchOverflowSize.height/2+(state.containerSize.height-props.thumbTouchSize.height)/2,props.thumbTouchSize.width,props.thumbTouchSize.height);};_this._renderDebugThumbTouchRect=function(thumbLeft){var thumbTouchRect=_this._getThumbTouchRect();var positionStyle={left:thumbLeft,top:thumbTouchRect.y,width:thumbTouchRect.width,height:thumbTouchRect.height};return _react.default.createElement(_reactNative.Animated.View,{style:[defaultStyles.debugThumbTouchArea,positionStyle],pointerEvents:"none",__source:{fileName:_jsxFileName,lineNumber:552}});};_this._renderThumbImage=function(){var thumbImage=_this.props.thumbImage;if(!thumbImage)return;return _react.default.createElement(_reactNative.Image,{source:thumbImage,__source:{fileName:_jsxFileName,lineNumber:564}});};_this.state={containerSize:{width:0,height:0},trackSize:{width:0,height:0},thumbSize:{width:0,height:0},allMeasured:false,value:new _reactNative.Animated.Value(_props.value)};_this._panResponder=_reactNative.PanResponder.create({onStartShouldSetPanResponder:_this._handleStartShouldSetPanResponder,onMoveShouldSetPanResponder:_this._handleMoveShouldSetPanResponder,onPanResponderGrant:_this._handlePanResponderGrant,onPanResponderMove:_this._handlePanResponderMove,onPanResponderRelease:_this._handlePanResponderEnd,onPanResponderTerminationRequest:_this._handlePanResponderRequestEnd,onPanResponderTerminate:_this._handlePanResponderEnd});return _this;}(0,_createClass2.default)(Slider,[{key:"componentDidUpdate",value:function componentDidUpdate(_ref){var value=_ref.value;if(this.props.value!==value){if(this.props.animateTransitions){this._setCurrentValueAnimated(this.props.value);}else{this._setCurrentValue(this.props.value);}}}},{key:"render",value:function render(){var _this$props=this.props,minimumValue=_this$props.minimumValue,maximumValue=_this$props.maximumValue,minimumTrackTintColor=_this$props.minimumTrackTintColor,maximumTrackTintColor=_this$props.maximumTrackTintColor,thumbTintColor=_this$props.thumbTintColor,thumbImage=_this$props.thumbImage,styles=_this$props.styles,style=_this$props.style,trackStyle=_this$props.trackStyle,thumbStyle=_this$props.thumbStyle,debugTouchArea=_this$props.debugTouchArea,onValueChange=_this$props.onValueChange,thumbTouchSize=_this$props.thumbTouchSize,animationType=_this$props.animationType,animateTransitions=_this$props.animateTransitions,other=(0,_objectWithoutProperties2.default)(_this$props,["minimumValue","maximumValue","minimumTrackTintColor","maximumTrackTintColor","thumbTintColor","thumbImage","styles","style","trackStyle","thumbStyle","debugTouchArea","onValueChange","thumbTouchSize","animationType","animateTransitions"]);var _this$state=this.state,value=_this$state.value,containerSize=_this$state.containerSize,trackSize=_this$state.trackSize,thumbSize=_this$state.thumbSize,allMeasured=_this$state.allMeasured;var mainStyles=styles||defaultStyles;var thumbLeft=value.interpolate({inputRange:[minimumValue,maximumValue],outputRange:_reactNative.I18nManager.isRTL?[0,-(containerSize.width-thumbSize.width)]:[0,containerSize.width-thumbSize.width]});var minimumTrackWidth=value.interpolate({inputRange:[minimumValue,maximumValue],outputRange:[0,containerSize.width-thumbSize.width]});var valueVisibleStyle={};if(!allMeasured){valueVisibleStyle.opacity=0;}var minimumTrackStyle=_objectSpread({position:'absolute',width:_reactNative.Animated.add(minimumTrackWidth,thumbSize.width/2),backgroundColor:minimumTrackTintColor},valueVisibleStyle);var touchOverflowStyle=this._getTouchOverflowStyle();return _react.default.createElement(_reactNative.View,(0,_extends2.default)({},other,{style:[mainStyles.container,style],onLayout:this._measureContainer,__source:{fileName:_jsxFileName,lineNumber:270}}),_react.default.createElement(_reactNative.View,{style:[{backgroundColor:maximumTrackTintColor},mainStyles.track,trackStyle],renderToHardwareTextureAndroid:true,onLayout:this._measureTrack,__source:{fileName:_jsxFileName,lineNumber:275}}),_react.default.createElement(_reactNative.Animated.View,{renderToHardwareTextureAndroid:true,style:[mainStyles.track,trackStyle,minimumTrackStyle],__source:{fileName:_jsxFileName,lineNumber:284}}),_react.default.createElement(_reactNative.Animated.View,{onLayout:this._measureThumb,renderToHardwareTextureAndroid:true,style:[{backgroundColor:thumbTintColor},mainStyles.thumb,thumbStyle,_objectSpread({transform:[{translateX:thumbLeft},{translateY:0}]},valueVisibleStyle)],__source:{fileName:_jsxFileName,lineNumber:288}},this._renderThumbImage()),_react.default.createElement(_reactNative.View,(0,_extends2.default)({renderToHardwareTextureAndroid:true,style:[defaultStyles.touchArea,touchOverflowStyle]},this._panResponder.panHandlers,{__source:{fileName:_jsxFileName,lineNumber:303}}),debugTouchArea===true&&this._renderDebugThumbTouchRect(minimumTrackWidth)));}},{key:"_getPropsForComponentUpdate",value:function _getPropsForComponentUpdate(props){var value=props.value,onValueChange=props.onValueChange,onSlidingStart=props.onSlidingStart,onSlidingComplete=props.onSlidingComplete,style=props.style,trackStyle=props.trackStyle,thumbStyle=props.thumbStyle,otherProps=(0,_objectWithoutProperties2.default)(props,["value","onValueChange","onSlidingStart","onSlidingComplete","style","trackStyle","thumbStyle"]);return otherProps;}},{key:"_handleMoveShouldSetPanResponder",value:function _handleMoveShouldSetPanResponder(){return false;}},{key:"_handlePanResponderRequestEnd",value:function _handlePanResponderRequestEnd(e,gestureState){return false;}}]);return Slider;}(_react.PureComponent);exports.default=Slider;Slider.propTypes={value:_propTypes.default.number,disabled:_propTypes.default.bool,minimumValue:_propTypes.default.number,maximumValue:_propTypes.default.number,step:_propTypes.default.number,minimumTrackTintColor:_propTypes.default.string,maximumTrackTintColor:_propTypes.default.string,thumbTintColor:_propTypes.default.string,thumbTouchSize:_propTypes.default.shape({width:_propTypes.default.number,height:_propTypes.default.number}),onValueChange:_propTypes.default.func,onSlidingStart:_propTypes.default.func,onSlidingComplete:_propTypes.default.func,style:_reactNative.ViewPropTypes.style,trackStyle:_reactNative.ViewPropTypes.style,thumbStyle:_reactNative.ViewPropTypes.style,thumbImage:_reactNative.Image.propTypes.source,debugTouchArea:_propTypes.default.bool,animateTransitions:_propTypes.default.bool,animationType:_propTypes.default.oneOf(['spring','timing']),animationConfig:_propTypes.default.object};Slider.defaultProps={value:0,minimumValue:0,maximumValue:1,step:0,minimumTrackTintColor:'#3f3f3f',maximumTrackTintColor:'#b3b3b3',thumbTintColor:'#343434',thumbTouchSize:{width:40,height:40},debugTouchArea:false,animationType:'timing'};var defaultStyles=_reactNative.StyleSheet.create({container:{height:40,justifyContent:'center'},track:{height:TRACK_SIZE,borderRadius:TRACK_SIZE/2},thumb:{position:'absolute',width:THUMB_SIZE,height:THUMB_SIZE,borderRadius:THUMB_SIZE/2},touchArea:{position:'absolute',backgroundColor:'transparent',top:0,left:0,right:0,bottom:0},debugThumbTouchArea:{position:'absolute',backgroundColor:'green',opacity:0.5}}); +\ No newline at end of file ++var _interopRequireDefault=require("@babel/runtime/helpers/interopRequireDefault");var _interopRequireWildcard=require("@babel/runtime/helpers/interopRequireWildcard");Object.defineProperty(exports,"__esModule",{value:true});exports.default=void 0;var _defineProperty2=_interopRequireDefault(require("@babel/runtime/helpers/defineProperty"));var _objectWithoutProperties2=_interopRequireDefault(require("@babel/runtime/helpers/objectWithoutProperties"));var _extends2=_interopRequireDefault(require("@babel/runtime/helpers/extends"));var _classCallCheck2=_interopRequireDefault(require("@babel/runtime/helpers/classCallCheck"));var _createClass2=_interopRequireDefault(require("@babel/runtime/helpers/createClass"));var _possibleConstructorReturn2=_interopRequireDefault(require("@babel/runtime/helpers/possibleConstructorReturn"));var _getPrototypeOf2=_interopRequireDefault(require("@babel/runtime/helpers/getPrototypeOf"));var _inherits2=_interopRequireDefault(require("@babel/runtime/helpers/inherits"));var _react=_interopRequireWildcard(require("react"));var _depPropTypes=require("deprecated-react-native-prop-types");var _reactNative=require("react-native");var _propTypes=_interopRequireDefault(require("prop-types"));var _jsxFileName="/Users/f/pjs/react-native-slider/src/Slider.js";function ownKeys(object,enumerableOnly){var keys=Object.keys(object);if(Object.getOwnPropertySymbols){var symbols=Object.getOwnPropertySymbols(object);if(enumerableOnly)symbols=symbols.filter(function(sym){return Object.getOwnPropertyDescriptor(object,sym).enumerable;});keys.push.apply(keys,symbols);}return keys;}function _objectSpread(target){for(var i=1;i=this.x&&y>=this.y&&x<=this.x+this.width&&y<=this.y+this.height;};var DEFAULT_ANIMATION_CONFIGS={spring:{friction:7,tension:100},timing:{duration:150,easing:_reactNative.Easing.inOut(_reactNative.Easing.ease),delay:0}};var Slider=function(_PureComponent){(0,_inherits2.default)(Slider,_PureComponent);function Slider(_props){var _this;(0,_classCallCheck2.default)(this,Slider);_this=(0,_possibleConstructorReturn2.default)(this,(0,_getPrototypeOf2.default)(Slider).call(this,_props));_this._handleStartShouldSetPanResponder=function(e){return _this._thumbHitTest(e);};_this._handlePanResponderGrant=function(){_this._previousLeft=_this._getThumbLeft(_this._getCurrentValue());_this._fireChangeEvent('onSlidingStart');};_this._handlePanResponderMove=function(e,gestureState){if(_this.props.disabled){return;}_this._setCurrentValue(_this._getValue(gestureState));_this._fireChangeEvent('onValueChange');};_this._handlePanResponderEnd=function(e,gestureState){if(_this.props.disabled){return;}_this._setCurrentValue(_this._getValue(gestureState));_this._fireChangeEvent('onSlidingComplete');};_this._measureContainer=function(x){_this._handleMeasure('containerSize',x);};_this._measureTrack=function(x){_this._handleMeasure('trackSize',x);};_this._measureThumb=function(x){_this._handleMeasure('thumbSize',x);};_this._handleMeasure=function(name,x){var _x$nativeEvent$layout=x.nativeEvent.layout,width=_x$nativeEvent$layout.width,height=_x$nativeEvent$layout.height;var size={width:width,height:height};var storeName="_"+name;var currentSize=_this[storeName];if(currentSize&&width===currentSize.width&&height===currentSize.height){return;}_this[storeName]=size;if(_this._containerSize&&_this._trackSize&&_this._thumbSize){_this.setState({containerSize:_this._containerSize,trackSize:_this._trackSize,thumbSize:_this._thumbSize,allMeasured:true});}};_this._getRatio=function(value){return(value-_this.props.minimumValue)/(_this.props.maximumValue-_this.props.minimumValue);};_this._getThumbLeft=function(value){var nonRtlRatio=_this._getRatio(value);var ratio=_reactNative.I18nManager.isRTL?1-nonRtlRatio:nonRtlRatio;return ratio*(_this.state.containerSize.width-_this.state.thumbSize.width);};_this._getValue=function(gestureState){var length=_this.state.containerSize.width-_this.state.thumbSize.width;var thumbLeft=_this._previousLeft+gestureState.dx;var nonRtlRatio=thumbLeft/length;var ratio=_reactNative.I18nManager.isRTL?1-nonRtlRatio:nonRtlRatio;if(_this.props.step){return Math.max(_this.props.minimumValue,Math.min(_this.props.maximumValue,_this.props.minimumValue+Math.round(ratio*(_this.props.maximumValue-_this.props.minimumValue)/_this.props.step)*_this.props.step));}return Math.max(_this.props.minimumValue,Math.min(_this.props.maximumValue,ratio*(_this.props.maximumValue-_this.props.minimumValue)+_this.props.minimumValue));};_this._getCurrentValue=function(){return _this.state.value.__getValue();};_this._setCurrentValue=function(value){_this.state.value.setValue(value);};_this._setCurrentValueAnimated=function(value){var animationType=_this.props.animationType;var animationConfig=(0,_extends2.default)({},DEFAULT_ANIMATION_CONFIGS[animationType],_this.props.animationConfig,{toValue:value});_reactNative.Animated[animationType](_this.state.value,animationConfig).start();};_this._fireChangeEvent=function(event){if(_this.props[event]){_this.props[event](_this._getCurrentValue());}};_this._getTouchOverflowSize=function(){var state=_this.state;var props=_this.props;var size={};if(state.allMeasured===true){size.width=Math.max(0,props.thumbTouchSize.width-state.thumbSize.width);size.height=Math.max(0,props.thumbTouchSize.height-state.containerSize.height);}return size;};_this._getTouchOverflowStyle=function(){var _this$_getTouchOverfl=_this._getTouchOverflowSize(),width=_this$_getTouchOverfl.width,height=_this$_getTouchOverfl.height;var touchOverflowStyle={};if(width!==undefined&&height!==undefined){var verticalMargin=-height/2;touchOverflowStyle.marginTop=verticalMargin;touchOverflowStyle.marginBottom=verticalMargin;var horizontalMargin=-width/2;touchOverflowStyle.marginLeft=horizontalMargin;touchOverflowStyle.marginRight=horizontalMargin;}if(_this.props.debugTouchArea===true){touchOverflowStyle.backgroundColor='orange';touchOverflowStyle.opacity=0.5;}return touchOverflowStyle;};_this._thumbHitTest=function(e){var nativeEvent=e.nativeEvent;var thumbTouchRect=_this._getThumbTouchRect();return thumbTouchRect.containsPoint(nativeEvent.locationX,nativeEvent.locationY);};_this._getThumbTouchRect=function(){var state=_this.state;var props=_this.props;var touchOverflowSize=_this._getTouchOverflowSize();return new Rect(touchOverflowSize.width/2+_this._getThumbLeft(_this._getCurrentValue())+(state.thumbSize.width-props.thumbTouchSize.width)/2,touchOverflowSize.height/2+(state.containerSize.height-props.thumbTouchSize.height)/2,props.thumbTouchSize.width,props.thumbTouchSize.height);};_this._renderDebugThumbTouchRect=function(thumbLeft){var thumbTouchRect=_this._getThumbTouchRect();var positionStyle={left:thumbLeft,top:thumbTouchRect.y,width:thumbTouchRect.width,height:thumbTouchRect.height};return _react.default.createElement(_reactNative.Animated.View,{style:[defaultStyles.debugThumbTouchArea,positionStyle],pointerEvents:"none",__source:{fileName:_jsxFileName,lineNumber:552}});};_this._renderThumbImage=function(){var thumbImage=_this.props.thumbImage;if(!thumbImage)return;return _react.default.createElement(_reactNative.Image,{source:thumbImage,__source:{fileName:_jsxFileName,lineNumber:564}});};_this.state={containerSize:{width:0,height:0},trackSize:{width:0,height:0},thumbSize:{width:0,height:0},allMeasured:false,value:new _reactNative.Animated.Value(_props.value)};_this._panResponder=_reactNative.PanResponder.create({onStartShouldSetPanResponder:_this._handleStartShouldSetPanResponder,onMoveShouldSetPanResponder:_this._handleMoveShouldSetPanResponder,onPanResponderGrant:_this._handlePanResponderGrant,onPanResponderMove:_this._handlePanResponderMove,onPanResponderRelease:_this._handlePanResponderEnd,onPanResponderTerminationRequest:_this._handlePanResponderRequestEnd,onPanResponderTerminate:_this._handlePanResponderEnd});return _this;}(0,_createClass2.default)(Slider,[{key:"componentDidUpdate",value:function componentDidUpdate(_ref){var value=_ref.value;if(this.props.value!==value){if(this.props.animateTransitions){this._setCurrentValueAnimated(this.props.value);}else{this._setCurrentValue(this.props.value);}}}},{key:"render",value:function render(){var _this$props=this.props,minimumValue=_this$props.minimumValue,maximumValue=_this$props.maximumValue,minimumTrackTintColor=_this$props.minimumTrackTintColor,maximumTrackTintColor=_this$props.maximumTrackTintColor,thumbTintColor=_this$props.thumbTintColor,thumbImage=_this$props.thumbImage,styles=_this$props.styles,style=_this$props.style,trackStyle=_this$props.trackStyle,thumbStyle=_this$props.thumbStyle,debugTouchArea=_this$props.debugTouchArea,onValueChange=_this$props.onValueChange,thumbTouchSize=_this$props.thumbTouchSize,animationType=_this$props.animationType,animateTransitions=_this$props.animateTransitions,other=(0,_objectWithoutProperties2.default)(_this$props,["minimumValue","maximumValue","minimumTrackTintColor","maximumTrackTintColor","thumbTintColor","thumbImage","styles","style","trackStyle","thumbStyle","debugTouchArea","onValueChange","thumbTouchSize","animationType","animateTransitions"]);var _this$state=this.state,value=_this$state.value,containerSize=_this$state.containerSize,trackSize=_this$state.trackSize,thumbSize=_this$state.thumbSize,allMeasured=_this$state.allMeasured;var mainStyles=styles||defaultStyles;var thumbLeft=value.interpolate({inputRange:[minimumValue,maximumValue],outputRange:_reactNative.I18nManager.isRTL?[0,-(containerSize.width-thumbSize.width)]:[0,containerSize.width-thumbSize.width]});var minimumTrackWidth=value.interpolate({inputRange:[minimumValue,maximumValue],outputRange:[0,containerSize.width-thumbSize.width]});var valueVisibleStyle={};if(!allMeasured){valueVisibleStyle.opacity=0;}var minimumTrackStyle=_objectSpread({position:'absolute',width:_reactNative.Animated.add(minimumTrackWidth,thumbSize.width/2),backgroundColor:minimumTrackTintColor},valueVisibleStyle);var touchOverflowStyle=this._getTouchOverflowStyle();return _react.default.createElement(_reactNative.View,(0,_extends2.default)({},other,{style:[mainStyles.container,style],onLayout:this._measureContainer,__source:{fileName:_jsxFileName,lineNumber:270}}),_react.default.createElement(_reactNative.View,{style:[{backgroundColor:maximumTrackTintColor},mainStyles.track,trackStyle],renderToHardwareTextureAndroid:true,onLayout:this._measureTrack,__source:{fileName:_jsxFileName,lineNumber:275}}),_react.default.createElement(_reactNative.Animated.View,{renderToHardwareTextureAndroid:true,style:[mainStyles.track,trackStyle,minimumTrackStyle],__source:{fileName:_jsxFileName,lineNumber:284}}),_react.default.createElement(_reactNative.Animated.View,{onLayout:this._measureThumb,renderToHardwareTextureAndroid:true,style:[{backgroundColor:thumbTintColor},mainStyles.thumb,thumbStyle,_objectSpread({transform:[{translateX:thumbLeft},{translateY:0}]},valueVisibleStyle)],__source:{fileName:_jsxFileName,lineNumber:288}},this._renderThumbImage()),_react.default.createElement(_reactNative.View,(0,_extends2.default)({renderToHardwareTextureAndroid:true,style:[defaultStyles.touchArea,touchOverflowStyle]},this._panResponder.panHandlers,{__source:{fileName:_jsxFileName,lineNumber:303}}),debugTouchArea===true&&this._renderDebugThumbTouchRect(minimumTrackWidth)));}},{key:"_getPropsForComponentUpdate",value:function _getPropsForComponentUpdate(props){var value=props.value,onValueChange=props.onValueChange,onSlidingStart=props.onSlidingStart,onSlidingComplete=props.onSlidingComplete,style=props.style,trackStyle=props.trackStyle,thumbStyle=props.thumbStyle,otherProps=(0,_objectWithoutProperties2.default)(props,["value","onValueChange","onSlidingStart","onSlidingComplete","style","trackStyle","thumbStyle"]);return otherProps;}},{key:"_handleMoveShouldSetPanResponder",value:function _handleMoveShouldSetPanResponder(){return false;}},{key:"_handlePanResponderRequestEnd",value:function _handlePanResponderRequestEnd(e,gestureState){return false;}}]);return Slider;}(_react.PureComponent);exports.default=Slider;Slider.propTypes={value:_propTypes.default.number,disabled:_propTypes.default.bool,minimumValue:_propTypes.default.number,maximumValue:_propTypes.default.number,step:_propTypes.default.number,minimumTrackTintColor:_propTypes.default.string,maximumTrackTintColor:_propTypes.default.string,thumbTintColor:_propTypes.default.string,thumbTouchSize:_propTypes.default.shape({width:_propTypes.default.number,height:_propTypes.default.number}),onValueChange:_propTypes.default.func,onSlidingStart:_propTypes.default.func,onSlidingComplete:_propTypes.default.func,style:_reactNative.ViewPropTypes.style,trackStyle:_reactNative.ViewPropTypes.style,thumbStyle:_reactNative.ViewPropTypes.style,thumbImage:_depPropTypes.ImagePropTypes.source,debugTouchArea:_propTypes.default.bool,animateTransitions:_propTypes.default.bool,animationType:_propTypes.default.oneOf(['spring','timing']),animationConfig:_propTypes.default.object};Slider.defaultProps={value:0,minimumValue:0,maximumValue:1,step:0,minimumTrackTintColor:'#3f3f3f',maximumTrackTintColor:'#b3b3b3',thumbTintColor:'#343434',thumbTouchSize:{width:40,height:40},debugTouchArea:false,animationType:'timing'};var defaultStyles=_reactNative.StyleSheet.create({container:{height:40,justifyContent:'center'},track:{height:TRACK_SIZE,borderRadius:TRACK_SIZE/2},thumb:{position:'absolute',width:THUMB_SIZE,height:THUMB_SIZE,borderRadius:THUMB_SIZE/2},touchArea:{position:'absolute',backgroundColor:'transparent',top:0,left:0,right:0,bottom:0},debugThumbTouchArea:{position:'absolute',backgroundColor:'green',opacity:0.5}}); +\ No newline at end of file +diff --git a/node_modules/@esteemapp/react-native-slider/src/Slider.js b/node_modules/@esteemapp/react-native-slider/src/Slider.js +index 62a724f..7733ac9 100644 +--- a/node_modules/@esteemapp/react-native-slider/src/Slider.js ++++ b/node_modules/@esteemapp/react-native-slider/src/Slider.js +@@ -12,6 +12,7 @@ import { + } from 'react-native'; + + import PropTypes from 'prop-types'; ++import { ImagePropTypes } from 'deprecated-react-native-prop-types'; + + const TRACK_SIZE = 4; + const THUMB_SIZE = 20; +@@ -146,7 +147,7 @@ export default class Slider extends PureComponent { + /** + * Sets an image for the thumb. + */ +- thumbImage: Image.propTypes.source, ++ thumbImage: ImagePropTypes.source, + + /** + * Set this to true to visually see the thumb touch rect in green. diff --git a/patches/@react-native-community+async-storage+1.5.0.patch b/patches/@react-native-community+async-storage+1.5.0.patch new file mode 100644 index 000000000..257b3c964 --- /dev/null +++ b/patches/@react-native-community+async-storage+1.5.0.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/@react-native-community/async-storage/android/build.gradle b/node_modules/@react-native-community/async-storage/android/build.gradle +index a0f2770..22072f9 100644 +--- a/node_modules/@react-native-community/async-storage/android/build.gradle ++++ b/node_modules/@react-native-community/async-storage/android/build.gradle +@@ -2,7 +2,7 @@ + buildscript { + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + + dependencies { diff --git a/patches/@react-native-community+cameraroll+1.8.1.patch b/patches/@react-native-community+cameraroll+1.8.1.patch new file mode 100644 index 000000000..d73297c0e --- /dev/null +++ b/patches/@react-native-community+cameraroll+1.8.1.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/@react-native-community/cameraroll/android/build.gradle b/node_modules/@react-native-community/cameraroll/android/build.gradle +index 5582c37..55c446d 100644 +--- a/node_modules/@react-native-community/cameraroll/android/build.gradle ++++ b/node_modules/@react-native-community/cameraroll/android/build.gradle +@@ -2,7 +2,7 @@ + buildscript { + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + + dependencies { +@@ -32,7 +32,7 @@ android { + + repositories { + google() +- jcenter() ++ mavenCentral() //patched + mavenCentral() + } + diff --git a/patches/@react-native-community+push-notification-ios+1.10.1.patch b/patches/@react-native-community+push-notification-ios+1.10.1.patch new file mode 100644 index 000000000..171fe7c9c --- /dev/null +++ b/patches/@react-native-community+push-notification-ios+1.10.1.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/@react-native-community/push-notification-ios/android/build.gradle b/node_modules/@react-native-community/push-notification-ios/android/build.gradle +index 3231b29..c956229 100644 +--- a/node_modules/@react-native-community/push-notification-ios/android/build.gradle ++++ b/node_modules/@react-native-community/push-notification-ios/android/build.gradle +@@ -10,7 +10,7 @@ buildscript { + } + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + dependencies { + classpath 'com.android.tools.build:gradle:3.2.1' +@@ -24,7 +24,7 @@ allprojects { + repositories { + mavenLocal() + google() +- jcenter() ++ mavenCentral() //patched + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" diff --git a/patches/@react-native-community+toolbar-android+0.2.1.patch b/patches/@react-native-community+toolbar-android+0.2.1.patch new file mode 100644 index 000000000..4900782d5 --- /dev/null +++ b/patches/@react-native-community+toolbar-android+0.2.1.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/@react-native-community/toolbar-android/android/build.gradle b/node_modules/@react-native-community/toolbar-android/android/build.gradle +index e414765..3c432e8 100644 +--- a/node_modules/@react-native-community/toolbar-android/android/build.gradle ++++ b/node_modules/@react-native-community/toolbar-android/android/build.gradle +@@ -2,7 +2,7 @@ + buildscript { + repositories { + google() +- jcenter() ++ mavenCentral() + } + + dependencies { diff --git a/patches/lottie-react-native+5.1.4.patch b/patches/lottie-react-native+5.1.4.patch new file mode 100644 index 000000000..f5791f71c --- /dev/null +++ b/patches/lottie-react-native+5.1.4.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/lottie-react-native/build.gradle b/node_modules/lottie-react-native/build.gradle +index 184fdbf..9228bb0 100644 +--- a/node_modules/lottie-react-native/build.gradle ++++ b/node_modules/lottie-react-native/build.gradle +@@ -3,7 +3,7 @@ + buildscript { + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + dependencies { + classpath 'com.android.tools.build:gradle:7.0.0' +@@ -14,7 +14,7 @@ allprojects { + repositories { + mavenLocal() + google() +- jcenter() ++ mavenCentral() //patched + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url("$rootDir/node_modules/react-native/android") diff --git a/patches/react-native+0.70.3.patch b/patches/react-native+0.70.3.patch new file mode 100644 index 000000000..8aa3089d0 --- /dev/null +++ b/patches/react-native+0.70.3.patch @@ -0,0 +1,155 @@ +diff --git a/node_modules/react-native/index.js b/node_modules/react-native/index.js +index d59ba34..7ae53ac 100644 +--- a/node_modules/react-native/index.js ++++ b/node_modules/react-native/index.js +@@ -435,32 +435,40 @@ module.exports = { + }, + // Deprecated Prop Types + get ColorPropType(): $FlowFixMe { +- invariant( +- false, +- 'ColorPropType has been removed from React Native. Migrate to ' + +- "ColorPropType exported from 'deprecated-react-native-prop-types'.", +- ); ++ //TODO: remove patch after migrating all instances of ViewPropTypes to deprecated-react-native-props-types ++ // invariant( ++ // false, ++ // 'ColorPropType has been removed from React Native. Migrate to ' + ++ // "ColorPropType exported from 'deprecated-react-native-prop-types'.", ++ // ); ++ return require('deprecated-react-native-prop-types').ColorPropType; + }, + get EdgeInsetsPropType(): $FlowFixMe { +- invariant( +- false, +- 'EdgeInsetsPropType has been removed from React Native. Migrate to ' + +- "EdgeInsetsPropType exported from 'deprecated-react-native-prop-types'.", +- ); ++ //TODO: remove patch after migrating all instances of ViewPropTypes to deprecated-react-native-props-types ++ // invariant( ++ // false, ++ // 'EdgeInsetsPropType has been removed from React Native. Migrate to ' + ++ // "EdgeInsetsPropType exported from 'deprecated-react-native-prop-types'.", ++ // ); ++ return require('deprecated-react-native-prop-types').EdgeInsetsPropType; + }, + get PointPropType(): $FlowFixMe { +- invariant( +- false, +- 'PointPropType has been removed from React Native. Migrate to ' + +- "PointPropType exported from 'deprecated-react-native-prop-types'.", +- ); ++ //TODO: remove patch after migrating all instances of ViewPropTypes to deprecated-react-native-props-types ++ // invariant( ++ // false, ++ // 'PointPropType has been removed from React Native. Migrate to ' + ++ // "PointPropType exported from 'deprecated-react-native-prop-types'.", ++ // ); ++ return require('deprecated-react-native-prop-types').PointPropType; + }, + get ViewPropTypes(): $FlowFixMe { +- invariant( +- false, +- 'ViewPropTypes has been removed from React Native. Migrate to ' + +- "ViewPropTypes exported from 'deprecated-react-native-prop-types'.", +- ); ++ //TODO: remove patch after migrating all instances of ViewPropTypes to deprecated-react-native-props-types ++ // invariant( ++ // false, ++ // 'ViewPropTypes has been removed from React Native. Migrate to ' + ++ // "ViewPropTypes exported from 'deprecated-react-native-prop-types'.", ++ // ); ++ return require('deprecated-react-native-prop-types').ViewPropTypes; + }, + }; + +diff --git a/node_modules/react-native/sdks/hermes/hermes-engine.podspec b/node_modules/react-native/sdks/hermes/hermes-engine.podspec +new file mode 100644 +index 0000000..8d331e0 +--- /dev/null ++++ b/node_modules/react-native/sdks/hermes/hermes-engine.podspec +@@ -0,0 +1,84 @@ ++# Copyright (c) Meta Platforms, Inc. and affiliates. ++# ++# This source code is licensed under the MIT license found in the ++# LICENSE file in the root directory of this source tree. ++ ++require "json" ++require "open3" ++ ++# sdks/hermesc/osx-bin/ImportHermesc.cmake ++import_hermesc_file=File.join(__dir__, "..", "hermesc", "osx-bin", "ImportHermesc.cmake") ++ ++# package.json ++package_file = File.join(__dir__, "..", "..", "package.json") ++package = JSON.parse(File.read(package_file)) ++version = package['version'] ++ ++# We need to check the current git branch/remote to verify if ++# we're on a React Native release branch to actually build Hermes. ++currentbranch, err = Open3.capture3("git rev-parse --abbrev-ref HEAD") ++currentremote, err = Open3.capture3("git config --get remote.origin.url") ++ ++source = {} ++git = "https://github.com/facebook/hermes.git" ++ ++if ENV.has_key?('HERMES_ENGINE_TARBALL_PATH') ++ Pod::UI.puts '[Hermes] Using pre-built Hermes binaries from local path.' if Object.const_defined?("Pod::UI") ++ source[:http] = "file://#{ENV['HERMES_ENGINE_TARBALL_PATH']}" ++elsif version == '1000.0.0' ++ Pod::UI.puts '[Hermes] Hermes needs to be compiled, installing hermes-engine may take a while...'.yellow if Object.const_defined?("Pod::UI") ++ source[:git] = git ++ source[:commit] = `git ls-remote https://github.com/facebook/hermes main | cut -f 1`.strip ++elsif currentremote.strip.end_with?("facebook/react-native.git") and currentbranch.strip.end_with?("-stable") ++ Pod::UI.puts '[Hermes] Detected that you are on a React Native release branch, building Hermes from source...'.yellow if Object.const_defined?("Pod::UI") ++ hermestag_file = File.join(__dir__, "..", ".hermesversion") ++ hermestag = File.read(hermestag_file).strip ++ source[:git] = git ++ source[:tag] = hermestag ++else ++ source[:http] = "https://github.com/facebook/react-native/releases/download/v#{version}/hermes-runtime-darwin-v#{version}.tar.gz" ++end ++ ++module HermesHelper ++ # BUILD_TYPE = :debug ++ BUILD_TYPE = :release ++end ++ ++Pod::Spec.new do |spec| ++ spec.name = "hermes-engine" ++ spec.version = version ++ spec.summary = "Hermes is a small and lightweight JavaScript engine optimized for running React Native." ++ spec.description = "Hermes is a JavaScript engine optimized for fast start-up of React Native apps. It features ahead-of-time static optimization and compact bytecode." ++ spec.homepage = "https://hermesengine.dev" ++ spec.license = package["license"] ++ spec.author = "Facebook" ++ spec.source = source ++ spec.platforms = { :osx => "10.13", :ios => "12.4" } ++ ++ spec.preserve_paths = ["destroot/bin/*"].concat(HermesHelper::BUILD_TYPE == :debug ? ["**/*.{h,c,cpp}"] : []) ++ spec.source_files = "destroot/include/**/*.h" ++ spec.header_mappings_dir = "destroot/include" ++ ++ spec.ios.vendored_frameworks = "destroot/Library/Frameworks/universal/hermes.xcframework" ++ spec.osx.vendored_frameworks = "destroot/Library/Frameworks/macosx/hermes.framework" ++ ++ spec.xcconfig = { "CLANG_CXX_LANGUAGE_STANDARD" => "c++17", "CLANG_CXX_LIBRARY" => "compiler-default", "GCC_PREPROCESSOR_DEFINITIONS" => "HERMES_ENABLE_DEBUGGER=1" } ++ ++ if source[:git] then ++ spec.prepare_command = <<-EOS ++ # When true, debug build will be used. ++ # See `build-apple-framework.sh` for details ++ DEBUG=#{HermesHelper::BUILD_TYPE == :debug} ++ ++ # Set HERMES_OVERRIDE_HERMESC_PATH if pre-built HermesC is available ++ #{File.exist?(import_hermesc_file) ? "export HERMES_OVERRIDE_HERMESC_PATH=#{import_hermesc_file}" : ""} ++ #{File.exist?(import_hermesc_file) ? "echo \"Overriding HermesC path...\"" : ""} ++ ++ # Build iOS framework ++ ./utils/build-ios-framework.sh ++ ++ # Build Mac framework ++ ./utils/build-mac-framework.sh ++ EOS ++ end ++end diff --git a/patches/react-native-camera+4.2.1.patch b/patches/react-native-camera+4.2.1.patch new file mode 100644 index 000000000..f6a231fc0 --- /dev/null +++ b/patches/react-native-camera+4.2.1.patch @@ -0,0 +1,20 @@ +diff --git a/node_modules/react-native-camera/android/build.gradle b/node_modules/react-native-camera/android/build.gradle +index 4aed495..fc83d00 100644 +--- a/node_modules/react-native-camera/android/build.gradle ++++ b/node_modules/react-native-camera/android/build.gradle +@@ -10,7 +10,6 @@ buildscript { + repositories { + google() + mavenCentral() +- jcenter() + } + + dependencies { +@@ -56,7 +55,6 @@ android { + + repositories { + google() +- jcenter() + mavenCentral() + maven { url "https://jitpack.io" } + maven { diff --git a/patches/react-native-config+1.4.11.patch b/patches/react-native-config+1.4.11.patch new file mode 100644 index 000000000..75bb60a45 --- /dev/null +++ b/patches/react-native-config+1.4.11.patch @@ -0,0 +1,84 @@ +diff --git a/node_modules/react-native-config/Example/android/build.gradle b/node_modules/react-native-config/Example/android/build.gradle +index 50dcb4c..b331665 100644 +--- a/node_modules/react-native-config/Example/android/build.gradle ++++ b/node_modules/react-native-config/Example/android/build.gradle +@@ -9,7 +9,7 @@ buildscript { + } + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + dependencies { + classpath("com.android.tools.build:gradle:4.1.0") +@@ -32,7 +32,7 @@ allprojects { + } + + google() +- jcenter() ++ mavenCentral() //patched + maven { url 'https://www.jitpack.io' } + } + } +diff --git a/node_modules/react-native-config/Example/package.json b/node_modules/react-native-config/Example/package.json +index c444c38..187e9b1 100644 +--- a/node_modules/react-native-config/Example/package.json ++++ b/node_modules/react-native-config/Example/package.json +@@ -34,5 +34,57 @@ + }, + "jest": { + "preset": "react-native" ++ }, ++ "react-native": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ }, ++ "browser": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false + } + } diff --git a/patches/react-native-fingerprint-scanner+6.0.0.patch b/patches/react-native-fingerprint-scanner+6.0.0.patch new file mode 100644 index 000000000..86506d2a5 --- /dev/null +++ b/patches/react-native-fingerprint-scanner+6.0.0.patch @@ -0,0 +1,3943 @@ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/.transforms/0dfb7722d725ac2c66a2a738a6ccb5d1/results.bin b/node_modules/react-native-fingerprint-scanner/android/build/.transforms/0dfb7722d725ac2c66a2a738a6ccb5d1/results.bin +new file mode 100644 +index 0000000..0d259dd +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/.transforms/0dfb7722d725ac2c66a2a738a6ccb5d1/results.bin +@@ -0,0 +1 @@ ++o/classes +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/.transforms/0dfb7722d725ac2c66a2a738a6ccb5d1/transformed/classes/classes.dex b/node_modules/react-native-fingerprint-scanner/android/build/.transforms/0dfb7722d725ac2c66a2a738a6ccb5d1/transformed/classes/classes.dex +new file mode 100644 +index 0000000..fe19743 +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/.transforms/0dfb7722d725ac2c66a2a738a6ccb5d1/transformed/classes/classes.dex differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/generated/source/buildConfig/debug/com/hieuvp/fingerprint/BuildConfig.java b/node_modules/react-native-fingerprint-scanner/android/build/generated/source/buildConfig/debug/com/hieuvp/fingerprint/BuildConfig.java +new file mode 100644 +index 0000000..95d8361 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/generated/source/buildConfig/debug/com/hieuvp/fingerprint/BuildConfig.java +@@ -0,0 +1,10 @@ ++/** ++ * Automatically generated file. DO NOT MODIFY ++ */ ++package com.hieuvp.fingerprint; ++ ++public final class BuildConfig { ++ public static final boolean DEBUG = Boolean.parseBoolean("true"); ++ public static final String LIBRARY_PACKAGE_NAME = "com.hieuvp.fingerprint"; ++ public static final String BUILD_TYPE = "debug"; ++} +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +new file mode 100644 +index 0000000..9428c53 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +@@ -0,0 +1,14 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +new file mode 100644 +index 0000000..5f9259d +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +@@ -0,0 +1,18 @@ ++{ ++ "version": 3, ++ "artifactType": { ++ "type": "AAPT_FRIENDLY_MERGED_MANIFESTS", ++ "kind": "Directory" ++ }, ++ "applicationId": "com.hieuvp.fingerprint", ++ "variantName": "debug", ++ "elements": [ ++ { ++ "type": "SINGLE", ++ "filters": [], ++ "attributes": [], ++ "outputFile": "AndroidManifest.xml" ++ } ++ ], ++ "elementType": "File" ++} +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aar_metadata/debug/aar-metadata.properties b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +new file mode 100644 +index 0000000..8c9c699 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +@@ -0,0 +1,4 @@ ++aarFormatVersion=1.0 ++aarMetadataVersion=1.0 ++minCompileSdk=1 ++minAndroidGradlePluginVersion=1.0.0 +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +new file mode 100644 +index 0000000..9e26dfe +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +@@ -0,0 +1 @@ ++{} +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_library_classes_jar/debug/classes.jar b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +new file mode 100644 +index 0000000..c457a64 +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_library_classes_jar/debug/classes.jar differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_r_class_jar/debug/R.jar b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_r_class_jar/debug/R.jar +new file mode 100644 +index 0000000..b7c5c7f +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_r_class_jar/debug/R.jar differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_symbol_list/debug/R.txt b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_symbol_list/debug/R.txt +new file mode 100644 +index 0000000..e54204b +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/compile_symbol_list/debug/R.txt +@@ -0,0 +1,2043 @@ ++int anim abc_fade_in 0x0 ++int anim abc_fade_out 0x0 ++int anim abc_grow_fade_in_from_bottom 0x0 ++int anim abc_popup_enter 0x0 ++int anim abc_popup_exit 0x0 ++int anim abc_shrink_fade_out_from_bottom 0x0 ++int anim abc_slide_in_bottom 0x0 ++int anim abc_slide_in_top 0x0 ++int anim abc_slide_out_bottom 0x0 ++int anim abc_slide_out_top 0x0 ++int anim abc_tooltip_enter 0x0 ++int anim abc_tooltip_exit 0x0 ++int anim btn_checkbox_to_checked_box_inner_merged_animation 0x0 ++int anim btn_checkbox_to_checked_box_outer_merged_animation 0x0 ++int anim btn_checkbox_to_checked_icon_null_animation 0x0 ++int anim btn_checkbox_to_unchecked_box_inner_merged_animation 0x0 ++int anim btn_checkbox_to_unchecked_check_path_merged_animation 0x0 ++int anim btn_checkbox_to_unchecked_icon_null_animation 0x0 ++int anim btn_radio_to_off_mtrl_dot_group_animation 0x0 ++int anim btn_radio_to_off_mtrl_ring_outer_animation 0x0 ++int anim btn_radio_to_off_mtrl_ring_outer_path_animation 0x0 ++int anim btn_radio_to_on_mtrl_dot_group_animation 0x0 ++int anim btn_radio_to_on_mtrl_ring_outer_animation 0x0 ++int anim btn_radio_to_on_mtrl_ring_outer_path_animation 0x0 ++int anim catalyst_fade_in 0x0 ++int anim catalyst_fade_out 0x0 ++int anim catalyst_push_up_in 0x0 ++int anim catalyst_push_up_out 0x0 ++int anim catalyst_slide_down 0x0 ++int anim catalyst_slide_up 0x0 ++int anim fragment_close_enter 0x0 ++int anim fragment_close_exit 0x0 ++int anim fragment_fade_enter 0x0 ++int anim fragment_fade_exit 0x0 ++int anim fragment_fast_out_extra_slow_in 0x0 ++int anim fragment_open_enter 0x0 ++int anim fragment_open_exit 0x0 ++int animator fragment_close_enter 0x0 ++int animator fragment_close_exit 0x0 ++int animator fragment_fade_enter 0x0 ++int animator fragment_fade_exit 0x0 ++int animator fragment_open_enter 0x0 ++int animator fragment_open_exit 0x0 ++int array assume_strong_biometrics_models 0x0 ++int array crypto_fingerprint_fallback_prefixes 0x0 ++int array crypto_fingerprint_fallback_vendors 0x0 ++int array delay_showing_prompt_models 0x0 ++int array hide_fingerprint_instantly_prefixes 0x0 ++int attr actionBarDivider 0x0 ++int attr actionBarItemBackground 0x0 ++int attr actionBarPopupTheme 0x0 ++int attr actionBarSize 0x0 ++int attr actionBarSplitStyle 0x0 ++int attr actionBarStyle 0x0 ++int attr actionBarTabBarStyle 0x0 ++int attr actionBarTabStyle 0x0 ++int attr actionBarTabTextStyle 0x0 ++int attr actionBarTheme 0x0 ++int attr actionBarWidgetTheme 0x0 ++int attr actionButtonStyle 0x0 ++int attr actionDropDownStyle 0x0 ++int attr actionLayout 0x0 ++int attr actionMenuTextAppearance 0x0 ++int attr actionMenuTextColor 0x0 ++int attr actionModeBackground 0x0 ++int attr actionModeCloseButtonStyle 0x0 ++int attr actionModeCloseContentDescription 0x0 ++int attr actionModeCloseDrawable 0x0 ++int attr actionModeCopyDrawable 0x0 ++int attr actionModeCutDrawable 0x0 ++int attr actionModeFindDrawable 0x0 ++int attr actionModePasteDrawable 0x0 ++int attr actionModePopupWindowStyle 0x0 ++int attr actionModeSelectAllDrawable 0x0 ++int attr actionModeShareDrawable 0x0 ++int attr actionModeSplitBackground 0x0 ++int attr actionModeStyle 0x0 ++int attr actionModeTheme 0x0 ++int attr actionModeWebSearchDrawable 0x0 ++int attr actionOverflowButtonStyle 0x0 ++int attr actionOverflowMenuStyle 0x0 ++int attr actionProviderClass 0x0 ++int attr actionViewClass 0x0 ++int attr activityChooserViewStyle 0x0 ++int attr actualImageResource 0x0 ++int attr actualImageScaleType 0x0 ++int attr actualImageUri 0x0 ++int attr alertDialogButtonGroupStyle 0x0 ++int attr alertDialogCenterButtons 0x0 ++int attr alertDialogStyle 0x0 ++int attr alertDialogTheme 0x0 ++int attr allowStacking 0x0 ++int attr alpha 0x0 ++int attr alphabeticModifiers 0x0 ++int attr arrowHeadLength 0x0 ++int attr arrowShaftLength 0x0 ++int attr autoCompleteTextViewStyle 0x0 ++int attr autoSizeMaxTextSize 0x0 ++int attr autoSizeMinTextSize 0x0 ++int attr autoSizePresetSizes 0x0 ++int attr autoSizeStepGranularity 0x0 ++int attr autoSizeTextType 0x0 ++int attr autofillInlineSuggestionChip 0x0 ++int attr autofillInlineSuggestionEndIconStyle 0x0 ++int attr autofillInlineSuggestionStartIconStyle 0x0 ++int attr autofillInlineSuggestionSubtitle 0x0 ++int attr autofillInlineSuggestionTitle 0x0 ++int attr background 0x0 ++int attr backgroundImage 0x0 ++int attr backgroundSplit 0x0 ++int attr backgroundStacked 0x0 ++int attr backgroundTint 0x0 ++int attr backgroundTintMode 0x0 ++int attr barLength 0x0 ++int attr borderlessButtonStyle 0x0 ++int attr buttonBarButtonStyle 0x0 ++int attr buttonBarNegativeButtonStyle 0x0 ++int attr buttonBarNeutralButtonStyle 0x0 ++int attr buttonBarPositiveButtonStyle 0x0 ++int attr buttonBarStyle 0x0 ++int attr buttonCompat 0x0 ++int attr buttonGravity 0x0 ++int attr buttonIconDimen 0x0 ++int attr buttonPanelSideLayout 0x0 ++int attr buttonStyle 0x0 ++int attr buttonStyleSmall 0x0 ++int attr buttonTint 0x0 ++int attr buttonTintMode 0x0 ++int attr checkMarkCompat 0x0 ++int attr checkMarkTint 0x0 ++int attr checkMarkTintMode 0x0 ++int attr checkboxStyle 0x0 ++int attr checkedTextViewStyle 0x0 ++int attr closeIcon 0x0 ++int attr closeItemLayout 0x0 ++int attr collapseContentDescription 0x0 ++int attr collapseIcon 0x0 ++int attr color 0x0 ++int attr colorAccent 0x0 ++int attr colorBackgroundFloating 0x0 ++int attr colorButtonNormal 0x0 ++int attr colorControlActivated 0x0 ++int attr colorControlHighlight 0x0 ++int attr colorControlNormal 0x0 ++int attr colorError 0x0 ++int attr colorPrimary 0x0 ++int attr colorPrimaryDark 0x0 ++int attr colorSwitchThumbNormal 0x0 ++int attr commitIcon 0x0 ++int attr contentDescription 0x0 ++int attr contentInsetEnd 0x0 ++int attr contentInsetEndWithActions 0x0 ++int attr contentInsetLeft 0x0 ++int attr contentInsetRight 0x0 ++int attr contentInsetStart 0x0 ++int attr contentInsetStartWithNavigation 0x0 ++int attr controlBackground 0x0 ++int attr coordinatorLayoutStyle 0x0 ++int attr customNavigationLayout 0x0 ++int attr defaultQueryHint 0x0 ++int attr dialogCornerRadius 0x0 ++int attr dialogPreferredPadding 0x0 ++int attr dialogTheme 0x0 ++int attr displayOptions 0x0 ++int attr divider 0x0 ++int attr dividerHorizontal 0x0 ++int attr dividerPadding 0x0 ++int attr dividerVertical 0x0 ++int attr drawableBottomCompat 0x0 ++int attr drawableEndCompat 0x0 ++int attr drawableLeftCompat 0x0 ++int attr drawableRightCompat 0x0 ++int attr drawableSize 0x0 ++int attr drawableStartCompat 0x0 ++int attr drawableTint 0x0 ++int attr drawableTintMode 0x0 ++int attr drawableTopCompat 0x0 ++int attr drawerArrowStyle 0x0 ++int attr dropDownListViewStyle 0x0 ++int attr dropdownListPreferredItemHeight 0x0 ++int attr editTextBackground 0x0 ++int attr editTextColor 0x0 ++int attr editTextStyle 0x0 ++int attr elevation 0x0 ++int attr emojiCompatEnabled 0x0 ++int attr expandActivityOverflowButtonDrawable 0x0 ++int attr fadeDuration 0x0 ++int attr failureImage 0x0 ++int attr failureImageScaleType 0x0 ++int attr firstBaselineToTopHeight 0x0 ++int attr font 0x0 ++int attr fontFamily 0x0 ++int attr fontProviderAuthority 0x0 ++int attr fontProviderCerts 0x0 ++int attr fontProviderFetchStrategy 0x0 ++int attr fontProviderFetchTimeout 0x0 ++int attr fontProviderPackage 0x0 ++int attr fontProviderQuery 0x0 ++int attr fontProviderSystemFontFamily 0x0 ++int attr fontStyle 0x0 ++int attr fontVariationSettings 0x0 ++int attr fontWeight 0x0 ++int attr gapBetweenBars 0x0 ++int attr goIcon 0x0 ++int attr height 0x0 ++int attr hideOnContentScroll 0x0 ++int attr homeAsUpIndicator 0x0 ++int attr homeLayout 0x0 ++int attr icon 0x0 ++int attr iconTint 0x0 ++int attr iconTintMode 0x0 ++int attr iconifiedByDefault 0x0 ++int attr imageButtonStyle 0x0 ++int attr indeterminateProgressStyle 0x0 ++int attr initialActivityCount 0x0 ++int attr isAutofillInlineSuggestionTheme 0x0 ++int attr isLightTheme 0x0 ++int attr itemPadding 0x0 ++int attr keylines 0x0 ++int attr lStar 0x0 ++int attr lastBaselineToBottomHeight 0x0 ++int attr layout 0x0 ++int attr layout_anchor 0x0 ++int attr layout_anchorGravity 0x0 ++int attr layout_behavior 0x0 ++int attr layout_dodgeInsetEdges 0x0 ++int attr layout_insetEdge 0x0 ++int attr layout_keyline 0x0 ++int attr lineHeight 0x0 ++int attr listChoiceBackgroundIndicator 0x0 ++int attr listChoiceIndicatorMultipleAnimated 0x0 ++int attr listChoiceIndicatorSingleAnimated 0x0 ++int attr listDividerAlertDialog 0x0 ++int attr listItemLayout 0x0 ++int attr listLayout 0x0 ++int attr listMenuViewStyle 0x0 ++int attr listPopupWindowStyle 0x0 ++int attr listPreferredItemHeight 0x0 ++int attr listPreferredItemHeightLarge 0x0 ++int attr listPreferredItemHeightSmall 0x0 ++int attr listPreferredItemPaddingEnd 0x0 ++int attr listPreferredItemPaddingLeft 0x0 ++int attr listPreferredItemPaddingRight 0x0 ++int attr listPreferredItemPaddingStart 0x0 ++int attr logo 0x0 ++int attr logoDescription 0x0 ++int attr maxButtonHeight 0x0 ++int attr measureWithLargestChild 0x0 ++int attr menu 0x0 ++int attr multiChoiceItemLayout 0x0 ++int attr navigationContentDescription 0x0 ++int attr navigationIcon 0x0 ++int attr navigationMode 0x0 ++int attr nestedScrollViewStyle 0x0 ++int attr numericModifiers 0x0 ++int attr overlapAnchor 0x0 ++int attr overlayImage 0x0 ++int attr paddingBottomNoButtons 0x0 ++int attr paddingEnd 0x0 ++int attr paddingStart 0x0 ++int attr paddingTopNoTitle 0x0 ++int attr panelBackground 0x0 ++int attr panelMenuListTheme 0x0 ++int attr panelMenuListWidth 0x0 ++int attr placeholderImage 0x0 ++int attr placeholderImageScaleType 0x0 ++int attr popupMenuStyle 0x0 ++int attr popupTheme 0x0 ++int attr popupWindowStyle 0x0 ++int attr preserveIconSpacing 0x0 ++int attr pressedStateOverlayImage 0x0 ++int attr progressBarAutoRotateInterval 0x0 ++int attr progressBarImage 0x0 ++int attr progressBarImageScaleType 0x0 ++int attr progressBarPadding 0x0 ++int attr progressBarStyle 0x0 ++int attr queryBackground 0x0 ++int attr queryHint 0x0 ++int attr queryPatterns 0x0 ++int attr radioButtonStyle 0x0 ++int attr ratingBarStyle 0x0 ++int attr ratingBarStyleIndicator 0x0 ++int attr ratingBarStyleSmall 0x0 ++int attr retryImage 0x0 ++int attr retryImageScaleType 0x0 ++int attr roundAsCircle 0x0 ++int attr roundBottomEnd 0x0 ++int attr roundBottomLeft 0x0 ++int attr roundBottomRight 0x0 ++int attr roundBottomStart 0x0 ++int attr roundTopEnd 0x0 ++int attr roundTopLeft 0x0 ++int attr roundTopRight 0x0 ++int attr roundTopStart 0x0 ++int attr roundWithOverlayColor 0x0 ++int attr roundedCornerRadius 0x0 ++int attr roundingBorderColor 0x0 ++int attr roundingBorderPadding 0x0 ++int attr roundingBorderWidth 0x0 ++int attr searchHintIcon 0x0 ++int attr searchIcon 0x0 ++int attr searchViewStyle 0x0 ++int attr seekBarStyle 0x0 ++int attr selectableItemBackground 0x0 ++int attr selectableItemBackgroundBorderless 0x0 ++int attr shortcutMatchRequired 0x0 ++int attr showAsAction 0x0 ++int attr showDividers 0x0 ++int attr showText 0x0 ++int attr showTitle 0x0 ++int attr singleChoiceItemLayout 0x0 ++int attr spinBars 0x0 ++int attr spinnerDropDownItemStyle 0x0 ++int attr spinnerStyle 0x0 ++int attr splitTrack 0x0 ++int attr srcCompat 0x0 ++int attr state_above_anchor 0x0 ++int attr statusBarBackground 0x0 ++int attr subMenuArrow 0x0 ++int attr submitBackground 0x0 ++int attr subtitle 0x0 ++int attr subtitleTextAppearance 0x0 ++int attr subtitleTextColor 0x0 ++int attr subtitleTextStyle 0x0 ++int attr suggestionRowLayout 0x0 ++int attr switchMinWidth 0x0 ++int attr switchPadding 0x0 ++int attr switchStyle 0x0 ++int attr switchTextAppearance 0x0 ++int attr textAllCaps 0x0 ++int attr textAppearanceLargePopupMenu 0x0 ++int attr textAppearanceListItem 0x0 ++int attr textAppearanceListItemSecondary 0x0 ++int attr textAppearanceListItemSmall 0x0 ++int attr textAppearancePopupMenuHeader 0x0 ++int attr textAppearanceSearchResultSubtitle 0x0 ++int attr textAppearanceSearchResultTitle 0x0 ++int attr textAppearanceSmallPopupMenu 0x0 ++int attr textColorAlertDialogListItem 0x0 ++int attr textColorSearchUrl 0x0 ++int attr textLocale 0x0 ++int attr theme 0x0 ++int attr thickness 0x0 ++int attr thumbTextPadding 0x0 ++int attr thumbTint 0x0 ++int attr thumbTintMode 0x0 ++int attr tickMark 0x0 ++int attr tickMarkTint 0x0 ++int attr tickMarkTintMode 0x0 ++int attr tint 0x0 ++int attr tintMode 0x0 ++int attr title 0x0 ++int attr titleMargin 0x0 ++int attr titleMarginBottom 0x0 ++int attr titleMarginEnd 0x0 ++int attr titleMarginStart 0x0 ++int attr titleMarginTop 0x0 ++int attr titleMargins 0x0 ++int attr titleTextAppearance 0x0 ++int attr titleTextColor 0x0 ++int attr titleTextStyle 0x0 ++int attr toolbarNavigationButtonStyle 0x0 ++int attr toolbarStyle 0x0 ++int attr tooltipForegroundColor 0x0 ++int attr tooltipFrameBackground 0x0 ++int attr tooltipText 0x0 ++int attr track 0x0 ++int attr trackTint 0x0 ++int attr trackTintMode 0x0 ++int attr ttcIndex 0x0 ++int attr viewAspectRatio 0x0 ++int attr viewInflaterClass 0x0 ++int attr voiceIcon 0x0 ++int attr windowActionBar 0x0 ++int attr windowActionBarOverlay 0x0 ++int attr windowActionModeOverlay 0x0 ++int attr windowFixedHeightMajor 0x0 ++int attr windowFixedHeightMinor 0x0 ++int attr windowFixedWidthMajor 0x0 ++int attr windowFixedWidthMinor 0x0 ++int attr windowMinWidthMajor 0x0 ++int attr windowMinWidthMinor 0x0 ++int attr windowNoTitle 0x0 ++int bool abc_action_bar_embed_tabs 0x0 ++int bool abc_allow_stacked_button_bar 0x0 ++int bool abc_config_actionMenuItemAllCaps 0x0 ++int color abc_background_cache_hint_selector_material_dark 0x0 ++int color abc_background_cache_hint_selector_material_light 0x0 ++int color abc_btn_colored_borderless_text_material 0x0 ++int color abc_btn_colored_text_material 0x0 ++int color abc_color_highlight_material 0x0 ++int color abc_decor_view_status_guard 0x0 ++int color abc_decor_view_status_guard_light 0x0 ++int color abc_hint_foreground_material_dark 0x0 ++int color abc_hint_foreground_material_light 0x0 ++int color abc_input_method_navigation_guard 0x0 ++int color abc_primary_text_disable_only_material_dark 0x0 ++int color abc_primary_text_disable_only_material_light 0x0 ++int color abc_primary_text_material_dark 0x0 ++int color abc_primary_text_material_light 0x0 ++int color abc_search_url_text 0x0 ++int color abc_search_url_text_normal 0x0 ++int color abc_search_url_text_pressed 0x0 ++int color abc_search_url_text_selected 0x0 ++int color abc_secondary_text_material_dark 0x0 ++int color abc_secondary_text_material_light 0x0 ++int color abc_tint_btn_checkable 0x0 ++int color abc_tint_default 0x0 ++int color abc_tint_edittext 0x0 ++int color abc_tint_seek_thumb 0x0 ++int color abc_tint_spinner 0x0 ++int color abc_tint_switch_track 0x0 ++int color accent_material_dark 0x0 ++int color accent_material_light 0x0 ++int color androidx_core_ripple_material_light 0x0 ++int color androidx_core_secondary_text_default_material_light 0x0 ++int color background_floating_material_dark 0x0 ++int color background_floating_material_light 0x0 ++int color background_material_dark 0x0 ++int color background_material_light 0x0 ++int color biometric_error_color 0x0 ++int color bright_foreground_disabled_material_dark 0x0 ++int color bright_foreground_disabled_material_light 0x0 ++int color bright_foreground_inverse_material_dark 0x0 ++int color bright_foreground_inverse_material_light 0x0 ++int color bright_foreground_material_dark 0x0 ++int color bright_foreground_material_light 0x0 ++int color button_material_dark 0x0 ++int color button_material_light 0x0 ++int color catalyst_logbox_background 0x0 ++int color catalyst_redbox_background 0x0 ++int color dim_foreground_disabled_material_dark 0x0 ++int color dim_foreground_disabled_material_light 0x0 ++int color dim_foreground_material_dark 0x0 ++int color dim_foreground_material_light 0x0 ++int color error_color_material_dark 0x0 ++int color error_color_material_light 0x0 ++int color foreground_material_dark 0x0 ++int color foreground_material_light 0x0 ++int color highlighted_text_material_dark 0x0 ++int color highlighted_text_material_light 0x0 ++int color material_blue_grey_800 0x0 ++int color material_blue_grey_900 0x0 ++int color material_blue_grey_950 0x0 ++int color material_deep_teal_200 0x0 ++int color material_deep_teal_500 0x0 ++int color material_grey_100 0x0 ++int color material_grey_300 0x0 ++int color material_grey_50 0x0 ++int color material_grey_600 0x0 ++int color material_grey_800 0x0 ++int color material_grey_850 0x0 ++int color material_grey_900 0x0 ++int color notification_action_color_filter 0x0 ++int color notification_icon_bg_color 0x0 ++int color primary_dark_material_dark 0x0 ++int color primary_dark_material_light 0x0 ++int color primary_material_dark 0x0 ++int color primary_material_light 0x0 ++int color primary_text_default_material_dark 0x0 ++int color primary_text_default_material_light 0x0 ++int color primary_text_disabled_material_dark 0x0 ++int color primary_text_disabled_material_light 0x0 ++int color ripple_material_dark 0x0 ++int color ripple_material_light 0x0 ++int color secondary_text_default_material_dark 0x0 ++int color secondary_text_default_material_light 0x0 ++int color secondary_text_disabled_material_dark 0x0 ++int color secondary_text_disabled_material_light 0x0 ++int color switch_thumb_disabled_material_dark 0x0 ++int color switch_thumb_disabled_material_light 0x0 ++int color switch_thumb_material_dark 0x0 ++int color switch_thumb_material_light 0x0 ++int color switch_thumb_normal_material_dark 0x0 ++int color switch_thumb_normal_material_light 0x0 ++int color tooltip_background_dark 0x0 ++int color tooltip_background_light 0x0 ++int dimen abc_action_bar_content_inset_material 0x0 ++int dimen abc_action_bar_content_inset_with_nav 0x0 ++int dimen abc_action_bar_default_height_material 0x0 ++int dimen abc_action_bar_default_padding_end_material 0x0 ++int dimen abc_action_bar_default_padding_start_material 0x0 ++int dimen abc_action_bar_elevation_material 0x0 ++int dimen abc_action_bar_icon_vertical_padding_material 0x0 ++int dimen abc_action_bar_overflow_padding_end_material 0x0 ++int dimen abc_action_bar_overflow_padding_start_material 0x0 ++int dimen abc_action_bar_stacked_max_height 0x0 ++int dimen abc_action_bar_stacked_tab_max_width 0x0 ++int dimen abc_action_bar_subtitle_bottom_margin_material 0x0 ++int dimen abc_action_bar_subtitle_top_margin_material 0x0 ++int dimen abc_action_button_min_height_material 0x0 ++int dimen abc_action_button_min_width_material 0x0 ++int dimen abc_action_button_min_width_overflow_material 0x0 ++int dimen abc_alert_dialog_button_bar_height 0x0 ++int dimen abc_alert_dialog_button_dimen 0x0 ++int dimen abc_button_inset_horizontal_material 0x0 ++int dimen abc_button_inset_vertical_material 0x0 ++int dimen abc_button_padding_horizontal_material 0x0 ++int dimen abc_button_padding_vertical_material 0x0 ++int dimen abc_cascading_menus_min_smallest_width 0x0 ++int dimen abc_config_prefDialogWidth 0x0 ++int dimen abc_control_corner_material 0x0 ++int dimen abc_control_inset_material 0x0 ++int dimen abc_control_padding_material 0x0 ++int dimen abc_dialog_corner_radius_material 0x0 ++int dimen abc_dialog_fixed_height_major 0x0 ++int dimen abc_dialog_fixed_height_minor 0x0 ++int dimen abc_dialog_fixed_width_major 0x0 ++int dimen abc_dialog_fixed_width_minor 0x0 ++int dimen abc_dialog_list_padding_bottom_no_buttons 0x0 ++int dimen abc_dialog_list_padding_top_no_title 0x0 ++int dimen abc_dialog_min_width_major 0x0 ++int dimen abc_dialog_min_width_minor 0x0 ++int dimen abc_dialog_padding_material 0x0 ++int dimen abc_dialog_padding_top_material 0x0 ++int dimen abc_dialog_title_divider_material 0x0 ++int dimen abc_disabled_alpha_material_dark 0x0 ++int dimen abc_disabled_alpha_material_light 0x0 ++int dimen abc_dropdownitem_icon_width 0x0 ++int dimen abc_dropdownitem_text_padding_left 0x0 ++int dimen abc_dropdownitem_text_padding_right 0x0 ++int dimen abc_edit_text_inset_bottom_material 0x0 ++int dimen abc_edit_text_inset_horizontal_material 0x0 ++int dimen abc_edit_text_inset_top_material 0x0 ++int dimen abc_floating_window_z 0x0 ++int dimen abc_list_item_height_large_material 0x0 ++int dimen abc_list_item_height_material 0x0 ++int dimen abc_list_item_height_small_material 0x0 ++int dimen abc_list_item_padding_horizontal_material 0x0 ++int dimen abc_panel_menu_list_width 0x0 ++int dimen abc_progress_bar_height_material 0x0 ++int dimen abc_search_view_preferred_height 0x0 ++int dimen abc_search_view_preferred_width 0x0 ++int dimen abc_seekbar_track_background_height_material 0x0 ++int dimen abc_seekbar_track_progress_height_material 0x0 ++int dimen abc_select_dialog_padding_start_material 0x0 ++int dimen abc_star_big 0x0 ++int dimen abc_star_medium 0x0 ++int dimen abc_star_small 0x0 ++int dimen abc_switch_padding 0x0 ++int dimen abc_text_size_body_1_material 0x0 ++int dimen abc_text_size_body_2_material 0x0 ++int dimen abc_text_size_button_material 0x0 ++int dimen abc_text_size_caption_material 0x0 ++int dimen abc_text_size_display_1_material 0x0 ++int dimen abc_text_size_display_2_material 0x0 ++int dimen abc_text_size_display_3_material 0x0 ++int dimen abc_text_size_display_4_material 0x0 ++int dimen abc_text_size_headline_material 0x0 ++int dimen abc_text_size_large_material 0x0 ++int dimen abc_text_size_medium_material 0x0 ++int dimen abc_text_size_menu_header_material 0x0 ++int dimen abc_text_size_menu_material 0x0 ++int dimen abc_text_size_small_material 0x0 ++int dimen abc_text_size_subhead_material 0x0 ++int dimen abc_text_size_subtitle_material_toolbar 0x0 ++int dimen abc_text_size_title_material 0x0 ++int dimen abc_text_size_title_material_toolbar 0x0 ++int dimen autofill_inline_suggestion_icon_size 0x0 ++int dimen compat_button_inset_horizontal_material 0x0 ++int dimen compat_button_inset_vertical_material 0x0 ++int dimen compat_button_padding_horizontal_material 0x0 ++int dimen compat_button_padding_vertical_material 0x0 ++int dimen compat_control_corner_material 0x0 ++int dimen compat_notification_large_icon_max_height 0x0 ++int dimen compat_notification_large_icon_max_width 0x0 ++int dimen disabled_alpha_material_dark 0x0 ++int dimen disabled_alpha_material_light 0x0 ++int dimen fingerprint_icon_size 0x0 ++int dimen highlight_alpha_material_colored 0x0 ++int dimen highlight_alpha_material_dark 0x0 ++int dimen highlight_alpha_material_light 0x0 ++int dimen hint_alpha_material_dark 0x0 ++int dimen hint_alpha_material_light 0x0 ++int dimen hint_pressed_alpha_material_dark 0x0 ++int dimen hint_pressed_alpha_material_light 0x0 ++int dimen notification_action_icon_size 0x0 ++int dimen notification_action_text_size 0x0 ++int dimen notification_big_circle_margin 0x0 ++int dimen notification_content_margin_start 0x0 ++int dimen notification_large_icon_height 0x0 ++int dimen notification_large_icon_width 0x0 ++int dimen notification_main_column_padding_top 0x0 ++int dimen notification_media_narrow_margin 0x0 ++int dimen notification_right_icon_size 0x0 ++int dimen notification_right_side_padding_top 0x0 ++int dimen notification_small_icon_background_padding 0x0 ++int dimen notification_small_icon_size_as_large 0x0 ++int dimen notification_subtext_size 0x0 ++int dimen notification_top_pad 0x0 ++int dimen notification_top_pad_large_text 0x0 ++int dimen tooltip_corner_radius 0x0 ++int dimen tooltip_horizontal_padding 0x0 ++int dimen tooltip_margin 0x0 ++int dimen tooltip_precise_anchor_extra_offset 0x0 ++int dimen tooltip_precise_anchor_threshold 0x0 ++int dimen tooltip_vertical_padding 0x0 ++int dimen tooltip_y_offset_non_touch 0x0 ++int dimen tooltip_y_offset_touch 0x0 ++int drawable abc_ab_share_pack_mtrl_alpha 0x0 ++int drawable abc_action_bar_item_background_material 0x0 ++int drawable abc_btn_borderless_material 0x0 ++int drawable abc_btn_check_material 0x0 ++int drawable abc_btn_check_material_anim 0x0 ++int drawable abc_btn_check_to_on_mtrl_000 0x0 ++int drawable abc_btn_check_to_on_mtrl_015 0x0 ++int drawable abc_btn_colored_material 0x0 ++int drawable abc_btn_default_mtrl_shape 0x0 ++int drawable abc_btn_radio_material 0x0 ++int drawable abc_btn_radio_material_anim 0x0 ++int drawable abc_btn_radio_to_on_mtrl_000 0x0 ++int drawable abc_btn_radio_to_on_mtrl_015 0x0 ++int drawable abc_btn_switch_to_on_mtrl_00001 0x0 ++int drawable abc_btn_switch_to_on_mtrl_00012 0x0 ++int drawable abc_cab_background_internal_bg 0x0 ++int drawable abc_cab_background_top_material 0x0 ++int drawable abc_cab_background_top_mtrl_alpha 0x0 ++int drawable abc_control_background_material 0x0 ++int drawable abc_dialog_material_background 0x0 ++int drawable abc_edit_text_material 0x0 ++int drawable abc_ic_ab_back_material 0x0 ++int drawable abc_ic_arrow_drop_right_black_24dp 0x0 ++int drawable abc_ic_clear_material 0x0 ++int drawable abc_ic_commit_search_api_mtrl_alpha 0x0 ++int drawable abc_ic_go_search_api_material 0x0 ++int drawable abc_ic_menu_copy_mtrl_am_alpha 0x0 ++int drawable abc_ic_menu_cut_mtrl_alpha 0x0 ++int drawable abc_ic_menu_overflow_material 0x0 ++int drawable abc_ic_menu_paste_mtrl_am_alpha 0x0 ++int drawable abc_ic_menu_selectall_mtrl_alpha 0x0 ++int drawable abc_ic_menu_share_mtrl_alpha 0x0 ++int drawable abc_ic_search_api_material 0x0 ++int drawable abc_ic_star_black_16dp 0x0 ++int drawable abc_ic_star_black_36dp 0x0 ++int drawable abc_ic_star_black_48dp 0x0 ++int drawable abc_ic_star_half_black_16dp 0x0 ++int drawable abc_ic_star_half_black_36dp 0x0 ++int drawable abc_ic_star_half_black_48dp 0x0 ++int drawable abc_ic_voice_search_api_material 0x0 ++int drawable abc_item_background_holo_dark 0x0 ++int drawable abc_item_background_holo_light 0x0 ++int drawable abc_list_divider_material 0x0 ++int drawable abc_list_divider_mtrl_alpha 0x0 ++int drawable abc_list_focused_holo 0x0 ++int drawable abc_list_longpressed_holo 0x0 ++int drawable abc_list_pressed_holo_dark 0x0 ++int drawable abc_list_pressed_holo_light 0x0 ++int drawable abc_list_selector_background_transition_holo_dark 0x0 ++int drawable abc_list_selector_background_transition_holo_light 0x0 ++int drawable abc_list_selector_disabled_holo_dark 0x0 ++int drawable abc_list_selector_disabled_holo_light 0x0 ++int drawable abc_list_selector_holo_dark 0x0 ++int drawable abc_list_selector_holo_light 0x0 ++int drawable abc_menu_hardkey_panel_mtrl_mult 0x0 ++int drawable abc_popup_background_mtrl_mult 0x0 ++int drawable abc_ratingbar_indicator_material 0x0 ++int drawable abc_ratingbar_material 0x0 ++int drawable abc_ratingbar_small_material 0x0 ++int drawable abc_scrubber_control_off_mtrl_alpha 0x0 ++int drawable abc_scrubber_control_to_pressed_mtrl_000 0x0 ++int drawable abc_scrubber_control_to_pressed_mtrl_005 0x0 ++int drawable abc_scrubber_primary_mtrl_alpha 0x0 ++int drawable abc_scrubber_track_mtrl_alpha 0x0 ++int drawable abc_seekbar_thumb_material 0x0 ++int drawable abc_seekbar_tick_mark_material 0x0 ++int drawable abc_seekbar_track_material 0x0 ++int drawable abc_spinner_mtrl_am_alpha 0x0 ++int drawable abc_spinner_textfield_background_material 0x0 ++int drawable abc_star_black_48dp 0x0 ++int drawable abc_star_half_black_48dp 0x0 ++int drawable abc_switch_thumb_material 0x0 ++int drawable abc_switch_track_mtrl_alpha 0x0 ++int drawable abc_tab_indicator_material 0x0 ++int drawable abc_tab_indicator_mtrl_alpha 0x0 ++int drawable abc_text_cursor_material 0x0 ++int drawable abc_text_select_handle_left_mtrl 0x0 ++int drawable abc_text_select_handle_left_mtrl_dark 0x0 ++int drawable abc_text_select_handle_left_mtrl_light 0x0 ++int drawable abc_text_select_handle_middle_mtrl 0x0 ++int drawable abc_text_select_handle_middle_mtrl_dark 0x0 ++int drawable abc_text_select_handle_middle_mtrl_light 0x0 ++int drawable abc_text_select_handle_right_mtrl 0x0 ++int drawable abc_text_select_handle_right_mtrl_dark 0x0 ++int drawable abc_text_select_handle_right_mtrl_light 0x0 ++int drawable abc_textfield_activated_mtrl_alpha 0x0 ++int drawable abc_textfield_default_mtrl_alpha 0x0 ++int drawable abc_textfield_search_activated_mtrl_alpha 0x0 ++int drawable abc_textfield_search_default_mtrl_alpha 0x0 ++int drawable abc_textfield_search_material 0x0 ++int drawable abc_vector_test 0x0 ++int drawable autofill_inline_suggestion_chip_background 0x0 ++int drawable btn_checkbox_checked_mtrl 0x0 ++int drawable btn_checkbox_checked_to_unchecked_mtrl_animation 0x0 ++int drawable btn_checkbox_unchecked_mtrl 0x0 ++int drawable btn_checkbox_unchecked_to_checked_mtrl_animation 0x0 ++int drawable btn_radio_off_mtrl 0x0 ++int drawable btn_radio_off_to_on_mtrl_animation 0x0 ++int drawable btn_radio_on_mtrl 0x0 ++int drawable btn_radio_on_to_off_mtrl_animation 0x0 ++int drawable fingerprint_dialog_error 0x0 ++int drawable fingerprint_dialog_fp_icon 0x0 ++int drawable notification_action_background 0x0 ++int drawable notification_bg 0x0 ++int drawable notification_bg_low 0x0 ++int drawable notification_bg_low_normal 0x0 ++int drawable notification_bg_low_pressed 0x0 ++int drawable notification_bg_normal 0x0 ++int drawable notification_bg_normal_pressed 0x0 ++int drawable notification_icon_background 0x0 ++int drawable notification_template_icon_bg 0x0 ++int drawable notification_template_icon_low_bg 0x0 ++int drawable notification_tile_bg 0x0 ++int drawable notify_panel_notification_icon_bg 0x0 ++int drawable redbox_top_border_background 0x0 ++int drawable test_level_drawable 0x0 ++int drawable tooltip_frame_dark 0x0 ++int drawable tooltip_frame_light 0x0 ++int id accessibility_action_clickable_span 0x0 ++int id accessibility_actions 0x0 ++int id accessibility_collection 0x0 ++int id accessibility_collection_item 0x0 ++int id accessibility_custom_action_0 0x0 ++int id accessibility_custom_action_1 0x0 ++int id accessibility_custom_action_10 0x0 ++int id accessibility_custom_action_11 0x0 ++int id accessibility_custom_action_12 0x0 ++int id accessibility_custom_action_13 0x0 ++int id accessibility_custom_action_14 0x0 ++int id accessibility_custom_action_15 0x0 ++int id accessibility_custom_action_16 0x0 ++int id accessibility_custom_action_17 0x0 ++int id accessibility_custom_action_18 0x0 ++int id accessibility_custom_action_19 0x0 ++int id accessibility_custom_action_2 0x0 ++int id accessibility_custom_action_20 0x0 ++int id accessibility_custom_action_21 0x0 ++int id accessibility_custom_action_22 0x0 ++int id accessibility_custom_action_23 0x0 ++int id accessibility_custom_action_24 0x0 ++int id accessibility_custom_action_25 0x0 ++int id accessibility_custom_action_26 0x0 ++int id accessibility_custom_action_27 0x0 ++int id accessibility_custom_action_28 0x0 ++int id accessibility_custom_action_29 0x0 ++int id accessibility_custom_action_3 0x0 ++int id accessibility_custom_action_30 0x0 ++int id accessibility_custom_action_31 0x0 ++int id accessibility_custom_action_4 0x0 ++int id accessibility_custom_action_5 0x0 ++int id accessibility_custom_action_6 0x0 ++int id accessibility_custom_action_7 0x0 ++int id accessibility_custom_action_8 0x0 ++int id accessibility_custom_action_9 0x0 ++int id accessibility_hint 0x0 ++int id accessibility_label 0x0 ++int id accessibility_links 0x0 ++int id accessibility_role 0x0 ++int id accessibility_state 0x0 ++int id accessibility_value 0x0 ++int id action_bar 0x0 ++int id action_bar_activity_content 0x0 ++int id action_bar_container 0x0 ++int id action_bar_root 0x0 ++int id action_bar_spinner 0x0 ++int id action_bar_subtitle 0x0 ++int id action_bar_title 0x0 ++int id action_container 0x0 ++int id action_context_bar 0x0 ++int id action_divider 0x0 ++int id action_image 0x0 ++int id action_menu_divider 0x0 ++int id action_menu_presenter 0x0 ++int id action_mode_bar 0x0 ++int id action_mode_bar_stub 0x0 ++int id action_mode_close_button 0x0 ++int id action_text 0x0 ++int id actions 0x0 ++int id activity_chooser_view_content 0x0 ++int id add 0x0 ++int id alertTitle 0x0 ++int id async 0x0 ++int id autofill_inline_suggestion_end_icon 0x0 ++int id autofill_inline_suggestion_start_icon 0x0 ++int id autofill_inline_suggestion_subtitle 0x0 ++int id autofill_inline_suggestion_title 0x0 ++int id blocking 0x0 ++int id bottom 0x0 ++int id buttonPanel 0x0 ++int id catalyst_redbox_title 0x0 ++int id center 0x0 ++int id centerCrop 0x0 ++int id centerInside 0x0 ++int id checkbox 0x0 ++int id checked 0x0 ++int id chronometer 0x0 ++int id content 0x0 ++int id contentPanel 0x0 ++int id custom 0x0 ++int id customPanel 0x0 ++int id decor_content_parent 0x0 ++int id default_activity_button 0x0 ++int id dialog_button 0x0 ++int id edit_query 0x0 ++int id end 0x0 ++int id expand_activities_button 0x0 ++int id expanded_menu 0x0 ++int id fingerprint_description 0x0 ++int id fingerprint_error 0x0 ++int id fingerprint_icon 0x0 ++int id fingerprint_subtitle 0x0 ++int id fitBottomStart 0x0 ++int id fitCenter 0x0 ++int id fitEnd 0x0 ++int id fitStart 0x0 ++int id fitXY 0x0 ++int id focusCrop 0x0 ++int id forever 0x0 ++int id fps_text 0x0 ++int id fragment_container_view_tag 0x0 ++int id group_divider 0x0 ++int id home 0x0 ++int id icon 0x0 ++int id icon_group 0x0 ++int id image 0x0 ++int id info 0x0 ++int id italic 0x0 ++int id item1 0x0 ++int id item2 0x0 ++int id item3 0x0 ++int id item4 0x0 ++int id labelled_by 0x0 ++int id left 0x0 ++int id line1 0x0 ++int id line3 0x0 ++int id listMode 0x0 ++int id list_item 0x0 ++int id message 0x0 ++int id multiply 0x0 ++int id none 0x0 ++int id normal 0x0 ++int id notification_background 0x0 ++int id notification_main_column 0x0 ++int id notification_main_column_container 0x0 ++int id off 0x0 ++int id on 0x0 ++int id parentPanel 0x0 ++int id pointer_enter 0x0 ++int id pointer_enter_capture 0x0 ++int id pointer_leave 0x0 ++int id pointer_leave_capture 0x0 ++int id pointer_move 0x0 ++int id pointer_move_capture 0x0 ++int id progress_circular 0x0 ++int id progress_horizontal 0x0 ++int id radio 0x0 ++int id react_test_id 0x0 ++int id right 0x0 ++int id right_icon 0x0 ++int id right_side 0x0 ++int id rn_frame_file 0x0 ++int id rn_frame_method 0x0 ++int id rn_redbox_dismiss_button 0x0 ++int id rn_redbox_line_separator 0x0 ++int id rn_redbox_loading_indicator 0x0 ++int id rn_redbox_reload_button 0x0 ++int id rn_redbox_report_button 0x0 ++int id rn_redbox_report_label 0x0 ++int id rn_redbox_stack 0x0 ++int id screen 0x0 ++int id scrollIndicatorDown 0x0 ++int id scrollIndicatorUp 0x0 ++int id scrollView 0x0 ++int id search_badge 0x0 ++int id search_bar 0x0 ++int id search_button 0x0 ++int id search_close_btn 0x0 ++int id search_edit_frame 0x0 ++int id search_go_btn 0x0 ++int id search_mag_icon 0x0 ++int id search_plate 0x0 ++int id search_src_text 0x0 ++int id search_voice_btn 0x0 ++int id select_dialog_listview 0x0 ++int id shortcut 0x0 ++int id spacer 0x0 ++int id special_effects_controller_view_tag 0x0 ++int id split_action_bar 0x0 ++int id src_atop 0x0 ++int id src_in 0x0 ++int id src_over 0x0 ++int id start 0x0 ++int id submenuarrow 0x0 ++int id submit_area 0x0 ++int id tabMode 0x0 ++int id tag_accessibility_actions 0x0 ++int id tag_accessibility_clickable_spans 0x0 ++int id tag_accessibility_heading 0x0 ++int id tag_accessibility_pane_title 0x0 ++int id tag_on_apply_window_listener 0x0 ++int id tag_on_receive_content_listener 0x0 ++int id tag_on_receive_content_mime_types 0x0 ++int id tag_screen_reader_focusable 0x0 ++int id tag_state_description 0x0 ++int id tag_transition_group 0x0 ++int id tag_unhandled_key_event_manager 0x0 ++int id tag_unhandled_key_listeners 0x0 ++int id tag_window_insets_animation_callback 0x0 ++int id text 0x0 ++int id text2 0x0 ++int id textSpacerNoButtons 0x0 ++int id textSpacerNoTitle 0x0 ++int id time 0x0 ++int id title 0x0 ++int id titleDividerNoCustom 0x0 ++int id title_template 0x0 ++int id top 0x0 ++int id topPanel 0x0 ++int id unchecked 0x0 ++int id uniform 0x0 ++int id up 0x0 ++int id view_tag_instance_handle 0x0 ++int id view_tag_native_id 0x0 ++int id view_tree_lifecycle_owner 0x0 ++int id view_tree_saved_state_registry_owner 0x0 ++int id view_tree_view_model_store_owner 0x0 ++int id visible_removing_fragment_view_tag 0x0 ++int id wrap_content 0x0 ++int integer abc_config_activityDefaultDur 0x0 ++int integer abc_config_activityShortDur 0x0 ++int integer cancel_button_image_alpha 0x0 ++int integer config_tooltipAnimTime 0x0 ++int integer react_native_dev_server_port 0x0 ++int integer react_native_inspector_proxy_port 0x0 ++int integer status_bar_notification_info_maxnum 0x0 ++int interpolator btn_checkbox_checked_mtrl_animation_interpolator_0 0x0 ++int interpolator btn_checkbox_checked_mtrl_animation_interpolator_1 0x0 ++int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0 0x0 ++int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1 0x0 ++int interpolator btn_radio_to_off_mtrl_animation_interpolator_0 0x0 ++int interpolator btn_radio_to_on_mtrl_animation_interpolator_0 0x0 ++int interpolator fast_out_slow_in 0x0 ++int layout abc_action_bar_title_item 0x0 ++int layout abc_action_bar_up_container 0x0 ++int layout abc_action_menu_item_layout 0x0 ++int layout abc_action_menu_layout 0x0 ++int layout abc_action_mode_bar 0x0 ++int layout abc_action_mode_close_item_material 0x0 ++int layout abc_activity_chooser_view 0x0 ++int layout abc_activity_chooser_view_list_item 0x0 ++int layout abc_alert_dialog_button_bar_material 0x0 ++int layout abc_alert_dialog_material 0x0 ++int layout abc_alert_dialog_title_material 0x0 ++int layout abc_cascading_menu_item_layout 0x0 ++int layout abc_dialog_title_material 0x0 ++int layout abc_expanded_menu_layout 0x0 ++int layout abc_list_menu_item_checkbox 0x0 ++int layout abc_list_menu_item_icon 0x0 ++int layout abc_list_menu_item_layout 0x0 ++int layout abc_list_menu_item_radio 0x0 ++int layout abc_popup_menu_header_item_layout 0x0 ++int layout abc_popup_menu_item_layout 0x0 ++int layout abc_screen_content_include 0x0 ++int layout abc_screen_simple 0x0 ++int layout abc_screen_simple_overlay_action_mode 0x0 ++int layout abc_screen_toolbar 0x0 ++int layout abc_search_dropdown_item_icons_2line 0x0 ++int layout abc_search_view 0x0 ++int layout abc_select_dialog_material 0x0 ++int layout abc_tooltip 0x0 ++int layout autofill_inline_suggestion 0x0 ++int layout custom_dialog 0x0 ++int layout dev_loading_view 0x0 ++int layout fingerprint_dialog_layout 0x0 ++int layout fps_view 0x0 ++int layout notification_action 0x0 ++int layout notification_action_tombstone 0x0 ++int layout notification_template_custom_big 0x0 ++int layout notification_template_icon_group 0x0 ++int layout notification_template_part_chronometer 0x0 ++int layout notification_template_part_time 0x0 ++int layout redbox_item_frame 0x0 ++int layout redbox_item_title 0x0 ++int layout redbox_view 0x0 ++int layout select_dialog_item_material 0x0 ++int layout select_dialog_multichoice_material 0x0 ++int layout select_dialog_singlechoice_material 0x0 ++int layout support_simple_spinner_dropdown_item 0x0 ++int menu example_menu 0x0 ++int menu example_menu2 0x0 ++int string abc_action_bar_home_description 0x0 ++int string abc_action_bar_up_description 0x0 ++int string abc_action_menu_overflow_description 0x0 ++int string abc_action_mode_done 0x0 ++int string abc_activity_chooser_view_see_all 0x0 ++int string abc_activitychooserview_choose_application 0x0 ++int string abc_capital_off 0x0 ++int string abc_capital_on 0x0 ++int string abc_font_family_body_1_material 0x0 ++int string abc_font_family_body_2_material 0x0 ++int string abc_font_family_button_material 0x0 ++int string abc_font_family_caption_material 0x0 ++int string abc_font_family_display_1_material 0x0 ++int string abc_font_family_display_2_material 0x0 ++int string abc_font_family_display_3_material 0x0 ++int string abc_font_family_display_4_material 0x0 ++int string abc_font_family_headline_material 0x0 ++int string abc_font_family_menu_material 0x0 ++int string abc_font_family_subhead_material 0x0 ++int string abc_font_family_title_material 0x0 ++int string abc_menu_alt_shortcut_label 0x0 ++int string abc_menu_ctrl_shortcut_label 0x0 ++int string abc_menu_delete_shortcut_label 0x0 ++int string abc_menu_enter_shortcut_label 0x0 ++int string abc_menu_function_shortcut_label 0x0 ++int string abc_menu_meta_shortcut_label 0x0 ++int string abc_menu_shift_shortcut_label 0x0 ++int string abc_menu_space_shortcut_label 0x0 ++int string abc_menu_sym_shortcut_label 0x0 ++int string abc_prepend_shortcut_label 0x0 ++int string abc_search_hint 0x0 ++int string abc_searchview_description_clear 0x0 ++int string abc_searchview_description_query 0x0 ++int string abc_searchview_description_search 0x0 ++int string abc_searchview_description_submit 0x0 ++int string abc_searchview_description_voice 0x0 ++int string abc_shareactionprovider_share_with 0x0 ++int string abc_shareactionprovider_share_with_application 0x0 ++int string abc_toolbar_collapse_description 0x0 ++int string alert_description 0x0 ++int string catalyst_change_bundle_location 0x0 ++int string catalyst_copy_button 0x0 ++int string catalyst_debug 0x0 ++int string catalyst_debug_chrome 0x0 ++int string catalyst_debug_chrome_stop 0x0 ++int string catalyst_debug_connecting 0x0 ++int string catalyst_debug_error 0x0 ++int string catalyst_debug_open 0x0 ++int string catalyst_debug_stop 0x0 ++int string catalyst_devtools_open 0x0 ++int string catalyst_dismiss_button 0x0 ++int string catalyst_heap_capture 0x0 ++int string catalyst_hot_reloading 0x0 ++int string catalyst_hot_reloading_auto_disable 0x0 ++int string catalyst_hot_reloading_auto_enable 0x0 ++int string catalyst_hot_reloading_stop 0x0 ++int string catalyst_inspector 0x0 ++int string catalyst_inspector_stop 0x0 ++int string catalyst_loading_from_url 0x0 ++int string catalyst_open_flipper_error 0x0 ++int string catalyst_perf_monitor 0x0 ++int string catalyst_perf_monitor_stop 0x0 ++int string catalyst_reload 0x0 ++int string catalyst_reload_button 0x0 ++int string catalyst_reload_error 0x0 ++int string catalyst_report_button 0x0 ++int string catalyst_sample_profiler_disable 0x0 ++int string catalyst_sample_profiler_enable 0x0 ++int string catalyst_settings 0x0 ++int string catalyst_settings_title 0x0 ++int string combobox_description 0x0 ++int string confirm_device_credential_password 0x0 ++int string default_error_msg 0x0 ++int string fingerprint_dialog_touch_sensor 0x0 ++int string fingerprint_error_hw_not_available 0x0 ++int string fingerprint_error_hw_not_present 0x0 ++int string fingerprint_error_lockout 0x0 ++int string fingerprint_error_no_fingerprints 0x0 ++int string fingerprint_error_user_canceled 0x0 ++int string fingerprint_not_recognized 0x0 ++int string generic_error_no_device_credential 0x0 ++int string generic_error_no_keyguard 0x0 ++int string generic_error_user_canceled 0x0 ++int string header_description 0x0 ++int string image_description 0x0 ++int string imagebutton_description 0x0 ++int string link_description 0x0 ++int string menu_description 0x0 ++int string menubar_description 0x0 ++int string menuitem_description 0x0 ++int string progressbar_description 0x0 ++int string radiogroup_description 0x0 ++int string rn_tab_description 0x0 ++int string scrollbar_description 0x0 ++int string search_menu_title 0x0 ++int string spinbutton_description 0x0 ++int string state_busy_description 0x0 ++int string state_collapsed_description 0x0 ++int string state_expanded_description 0x0 ++int string state_mixed_description 0x0 ++int string state_off_description 0x0 ++int string state_on_description 0x0 ++int string state_unselected_description 0x0 ++int string status_bar_notification_info_overflow 0x0 ++int string summary_description 0x0 ++int string tablist_description 0x0 ++int string timer_description 0x0 ++int string toolbar_description 0x0 ++int style AlertDialog_AppCompat 0x0 ++int style AlertDialog_AppCompat_Light 0x0 ++int style Animation_AppCompat_Dialog 0x0 ++int style Animation_AppCompat_DropDownUp 0x0 ++int style Animation_AppCompat_Tooltip 0x0 ++int style Animation_Catalyst_LogBox 0x0 ++int style Animation_Catalyst_RedBox 0x0 ++int style Base_AlertDialog_AppCompat 0x0 ++int style Base_AlertDialog_AppCompat_Light 0x0 ++int style Base_Animation_AppCompat_Dialog 0x0 ++int style Base_Animation_AppCompat_DropDownUp 0x0 ++int style Base_Animation_AppCompat_Tooltip 0x0 ++int style Base_DialogWindowTitleBackground_AppCompat 0x0 ++int style Base_DialogWindowTitle_AppCompat 0x0 ++int style Base_TextAppearance_AppCompat 0x0 ++int style Base_TextAppearance_AppCompat_Body1 0x0 ++int style Base_TextAppearance_AppCompat_Body2 0x0 ++int style Base_TextAppearance_AppCompat_Button 0x0 ++int style Base_TextAppearance_AppCompat_Caption 0x0 ++int style Base_TextAppearance_AppCompat_Display1 0x0 ++int style Base_TextAppearance_AppCompat_Display2 0x0 ++int style Base_TextAppearance_AppCompat_Display3 0x0 ++int style Base_TextAppearance_AppCompat_Display4 0x0 ++int style Base_TextAppearance_AppCompat_Headline 0x0 ++int style Base_TextAppearance_AppCompat_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Large 0x0 ++int style Base_TextAppearance_AppCompat_Large_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 ++int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 ++int style Base_TextAppearance_AppCompat_Medium 0x0 ++int style Base_TextAppearance_AppCompat_Medium_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Menu 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult_Title 0x0 ++int style Base_TextAppearance_AppCompat_Small 0x0 ++int style Base_TextAppearance_AppCompat_Small_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Subhead 0x0 ++int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Title 0x0 ++int style Base_TextAppearance_AppCompat_Title_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Tooltip 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Switch 0x0 ++int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 ++int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 ++int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 ++int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 ++int style Base_ThemeOverlay_AppCompat 0x0 ++int style Base_ThemeOverlay_AppCompat_ActionBar 0x0 ++int style Base_ThemeOverlay_AppCompat_Dark 0x0 ++int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x0 ++int style Base_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x0 ++int style Base_ThemeOverlay_AppCompat_Light 0x0 ++int style Base_Theme_AppCompat 0x0 ++int style Base_Theme_AppCompat_CompactMenu 0x0 ++int style Base_Theme_AppCompat_Dialog 0x0 ++int style Base_Theme_AppCompat_DialogWhenLarge 0x0 ++int style Base_Theme_AppCompat_Dialog_Alert 0x0 ++int style Base_Theme_AppCompat_Dialog_FixedSize 0x0 ++int style Base_Theme_AppCompat_Dialog_MinWidth 0x0 ++int style Base_Theme_AppCompat_Light 0x0 ++int style Base_Theme_AppCompat_Light_DarkActionBar 0x0 ++int style Base_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_Alert 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x0 ++int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_V21_Theme_AppCompat 0x0 ++int style Base_V21_Theme_AppCompat_Dialog 0x0 ++int style Base_V21_Theme_AppCompat_Light 0x0 ++int style Base_V21_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_V22_Theme_AppCompat 0x0 ++int style Base_V22_Theme_AppCompat_Light 0x0 ++int style Base_V23_Theme_AppCompat 0x0 ++int style Base_V23_Theme_AppCompat_Light 0x0 ++int style Base_V26_Theme_AppCompat 0x0 ++int style Base_V26_Theme_AppCompat_Light 0x0 ++int style Base_V26_Widget_AppCompat_Toolbar 0x0 ++int style Base_V28_Theme_AppCompat 0x0 ++int style Base_V28_Theme_AppCompat_Light 0x0 ++int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_V7_Theme_AppCompat 0x0 ++int style Base_V7_Theme_AppCompat_Dialog 0x0 ++int style Base_V7_Theme_AppCompat_Light 0x0 ++int style Base_V7_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Base_V7_Widget_AppCompat_EditText 0x0 ++int style Base_V7_Widget_AppCompat_Toolbar 0x0 ++int style Base_Widget_AppCompat_ActionBar 0x0 ++int style Base_Widget_AppCompat_ActionBar_Solid 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabBar 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabText 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabView 0x0 ++int style Base_Widget_AppCompat_ActionButton 0x0 ++int style Base_Widget_AppCompat_ActionButton_CloseMode 0x0 ++int style Base_Widget_AppCompat_ActionButton_Overflow 0x0 ++int style Base_Widget_AppCompat_ActionMode 0x0 ++int style Base_Widget_AppCompat_ActivityChooserView 0x0 ++int style Base_Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Base_Widget_AppCompat_Button 0x0 ++int style Base_Widget_AppCompat_ButtonBar 0x0 ++int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x0 ++int style Base_Widget_AppCompat_Button_Borderless 0x0 ++int style Base_Widget_AppCompat_Button_Borderless_Colored 0x0 ++int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 ++int style Base_Widget_AppCompat_Button_Colored 0x0 ++int style Base_Widget_AppCompat_Button_Small 0x0 ++int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x0 ++int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x0 ++int style Base_Widget_AppCompat_CompoundButton_Switch 0x0 ++int style Base_Widget_AppCompat_DrawerArrowToggle 0x0 ++int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x0 ++int style Base_Widget_AppCompat_DropDownItem_Spinner 0x0 ++int style Base_Widget_AppCompat_EditText 0x0 ++int style Base_Widget_AppCompat_ImageButton 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x0 ++int style Base_Widget_AppCompat_Light_PopupMenu 0x0 ++int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x0 ++int style Base_Widget_AppCompat_ListMenuView 0x0 ++int style Base_Widget_AppCompat_ListPopupWindow 0x0 ++int style Base_Widget_AppCompat_ListView 0x0 ++int style Base_Widget_AppCompat_ListView_DropDown 0x0 ++int style Base_Widget_AppCompat_ListView_Menu 0x0 ++int style Base_Widget_AppCompat_PopupMenu 0x0 ++int style Base_Widget_AppCompat_PopupMenu_Overflow 0x0 ++int style Base_Widget_AppCompat_PopupWindow 0x0 ++int style Base_Widget_AppCompat_ProgressBar 0x0 ++int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x0 ++int style Base_Widget_AppCompat_RatingBar 0x0 ++int style Base_Widget_AppCompat_RatingBar_Indicator 0x0 ++int style Base_Widget_AppCompat_RatingBar_Small 0x0 ++int style Base_Widget_AppCompat_SearchView 0x0 ++int style Base_Widget_AppCompat_SearchView_ActionBar 0x0 ++int style Base_Widget_AppCompat_SeekBar 0x0 ++int style Base_Widget_AppCompat_SeekBar_Discrete 0x0 ++int style Base_Widget_AppCompat_Spinner 0x0 ++int style Base_Widget_AppCompat_Spinner_Underlined 0x0 ++int style Base_Widget_AppCompat_TextView 0x0 ++int style Base_Widget_AppCompat_TextView_SpinnerItem 0x0 ++int style Base_Widget_AppCompat_Toolbar 0x0 ++int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x0 ++int style CalendarDatePickerDialog 0x0 ++int style CalendarDatePickerStyle 0x0 ++int style DialogAnimationFade 0x0 ++int style DialogAnimationSlide 0x0 ++int style Platform_AppCompat 0x0 ++int style Platform_AppCompat_Light 0x0 ++int style Platform_ThemeOverlay_AppCompat 0x0 ++int style Platform_ThemeOverlay_AppCompat_Dark 0x0 ++int style Platform_ThemeOverlay_AppCompat_Light 0x0 ++int style Platform_V21_AppCompat 0x0 ++int style Platform_V21_AppCompat_Light 0x0 ++int style Platform_V25_AppCompat 0x0 ++int style Platform_V25_AppCompat_Light 0x0 ++int style Platform_Widget_AppCompat_Spinner 0x0 ++int style RtlOverlay_DialogWindowTitle_AppCompat 0x0 ++int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x0 ++int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title 0x0 ++int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x0 ++int style RtlUnderlay_Widget_AppCompat_ActionButton 0x0 ++int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x0 ++int style SpinnerDatePickerDialog 0x0 ++int style SpinnerDatePickerStyle 0x0 ++int style TextAppearance_AppCompat 0x0 ++int style TextAppearance_AppCompat_Body1 0x0 ++int style TextAppearance_AppCompat_Body2 0x0 ++int style TextAppearance_AppCompat_Button 0x0 ++int style TextAppearance_AppCompat_Caption 0x0 ++int style TextAppearance_AppCompat_Display1 0x0 ++int style TextAppearance_AppCompat_Display2 0x0 ++int style TextAppearance_AppCompat_Display3 0x0 ++int style TextAppearance_AppCompat_Display4 0x0 ++int style TextAppearance_AppCompat_Headline 0x0 ++int style TextAppearance_AppCompat_Inverse 0x0 ++int style TextAppearance_AppCompat_Large 0x0 ++int style TextAppearance_AppCompat_Large_Inverse 0x0 ++int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x0 ++int style TextAppearance_AppCompat_Light_SearchResult_Title 0x0 ++int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 ++int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 ++int style TextAppearance_AppCompat_Medium 0x0 ++int style TextAppearance_AppCompat_Medium_Inverse 0x0 ++int style TextAppearance_AppCompat_Menu 0x0 ++int style TextAppearance_AppCompat_SearchResult_Subtitle 0x0 ++int style TextAppearance_AppCompat_SearchResult_Title 0x0 ++int style TextAppearance_AppCompat_Small 0x0 ++int style TextAppearance_AppCompat_Small_Inverse 0x0 ++int style TextAppearance_AppCompat_Subhead 0x0 ++int style TextAppearance_AppCompat_Subhead_Inverse 0x0 ++int style TextAppearance_AppCompat_Title 0x0 ++int style TextAppearance_AppCompat_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Tooltip 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_Button 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Colored 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_DropDownItem 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 ++int style TextAppearance_AppCompat_Widget_Switch 0x0 ++int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 ++int style TextAppearance_Compat_Notification 0x0 ++int style TextAppearance_Compat_Notification_Info 0x0 ++int style TextAppearance_Compat_Notification_Line2 0x0 ++int style TextAppearance_Compat_Notification_Time 0x0 ++int style TextAppearance_Compat_Notification_Title 0x0 ++int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 ++int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 ++int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 ++int style Theme 0x0 ++int style ThemeOverlay_AppCompat 0x0 ++int style ThemeOverlay_AppCompat_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_Dark 0x0 ++int style ThemeOverlay_AppCompat_Dark_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_DayNight 0x0 ++int style ThemeOverlay_AppCompat_DayNight_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_Dialog 0x0 ++int style ThemeOverlay_AppCompat_Dialog_Alert 0x0 ++int style ThemeOverlay_AppCompat_Light 0x0 ++int style Theme_AppCompat 0x0 ++int style Theme_AppCompat_CompactMenu 0x0 ++int style Theme_AppCompat_DayNight 0x0 ++int style Theme_AppCompat_DayNight_DarkActionBar 0x0 ++int style Theme_AppCompat_DayNight_Dialog 0x0 ++int style Theme_AppCompat_DayNight_DialogWhenLarge 0x0 ++int style Theme_AppCompat_DayNight_Dialog_Alert 0x0 ++int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_DayNight_NoActionBar 0x0 ++int style Theme_AppCompat_Dialog 0x0 ++int style Theme_AppCompat_DialogWhenLarge 0x0 ++int style Theme_AppCompat_Dialog_Alert 0x0 ++int style Theme_AppCompat_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_Empty 0x0 ++int style Theme_AppCompat_Light 0x0 ++int style Theme_AppCompat_Light_DarkActionBar 0x0 ++int style Theme_AppCompat_Light_Dialog 0x0 ++int style Theme_AppCompat_Light_DialogWhenLarge 0x0 ++int style Theme_AppCompat_Light_Dialog_Alert 0x0 ++int style Theme_AppCompat_Light_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_Light_NoActionBar 0x0 ++int style Theme_AppCompat_NoActionBar 0x0 ++int style Theme_AutofillInlineSuggestion 0x0 ++int style Theme_Catalyst 0x0 ++int style Theme_Catalyst_LogBox 0x0 ++int style Theme_Catalyst_RedBox 0x0 ++int style Theme_FullScreenDialog 0x0 ++int style Theme_FullScreenDialogAnimatedFade 0x0 ++int style Theme_FullScreenDialogAnimatedSlide 0x0 ++int style Theme_ReactNative_AppCompat_Light 0x0 ++int style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen 0x0 ++int style Widget_AppCompat_ActionBar 0x0 ++int style Widget_AppCompat_ActionBar_Solid 0x0 ++int style Widget_AppCompat_ActionBar_TabBar 0x0 ++int style Widget_AppCompat_ActionBar_TabText 0x0 ++int style Widget_AppCompat_ActionBar_TabView 0x0 ++int style Widget_AppCompat_ActionButton 0x0 ++int style Widget_AppCompat_ActionButton_CloseMode 0x0 ++int style Widget_AppCompat_ActionButton_Overflow 0x0 ++int style Widget_AppCompat_ActionMode 0x0 ++int style Widget_AppCompat_ActivityChooserView 0x0 ++int style Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Widget_AppCompat_Button 0x0 ++int style Widget_AppCompat_ButtonBar 0x0 ++int style Widget_AppCompat_ButtonBar_AlertDialog 0x0 ++int style Widget_AppCompat_Button_Borderless 0x0 ++int style Widget_AppCompat_Button_Borderless_Colored 0x0 ++int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 ++int style Widget_AppCompat_Button_Colored 0x0 ++int style Widget_AppCompat_Button_Small 0x0 ++int style Widget_AppCompat_CompoundButton_CheckBox 0x0 ++int style Widget_AppCompat_CompoundButton_RadioButton 0x0 ++int style Widget_AppCompat_CompoundButton_Switch 0x0 ++int style Widget_AppCompat_DrawerArrowToggle 0x0 ++int style Widget_AppCompat_DropDownItem_Spinner 0x0 ++int style Widget_AppCompat_EditText 0x0 ++int style Widget_AppCompat_ImageButton 0x0 ++int style Widget_AppCompat_Light_ActionBar 0x0 ++int style Widget_AppCompat_Light_ActionBar_Solid 0x0 ++int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabBar 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabText 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabView 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionButton 0x0 ++int style Widget_AppCompat_Light_ActionButton_CloseMode 0x0 ++int style Widget_AppCompat_Light_ActionButton_Overflow 0x0 ++int style Widget_AppCompat_Light_ActionMode_Inverse 0x0 ++int style Widget_AppCompat_Light_ActivityChooserView 0x0 ++int style Widget_AppCompat_Light_AutoCompleteTextView 0x0 ++int style Widget_AppCompat_Light_DropDownItem_Spinner 0x0 ++int style Widget_AppCompat_Light_ListPopupWindow 0x0 ++int style Widget_AppCompat_Light_ListView_DropDown 0x0 ++int style Widget_AppCompat_Light_PopupMenu 0x0 ++int style Widget_AppCompat_Light_PopupMenu_Overflow 0x0 ++int style Widget_AppCompat_Light_SearchView 0x0 ++int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x0 ++int style Widget_AppCompat_ListMenuView 0x0 ++int style Widget_AppCompat_ListPopupWindow 0x0 ++int style Widget_AppCompat_ListView 0x0 ++int style Widget_AppCompat_ListView_DropDown 0x0 ++int style Widget_AppCompat_ListView_Menu 0x0 ++int style Widget_AppCompat_PopupMenu 0x0 ++int style Widget_AppCompat_PopupMenu_Overflow 0x0 ++int style Widget_AppCompat_PopupWindow 0x0 ++int style Widget_AppCompat_ProgressBar 0x0 ++int style Widget_AppCompat_ProgressBar_Horizontal 0x0 ++int style Widget_AppCompat_RatingBar 0x0 ++int style Widget_AppCompat_RatingBar_Indicator 0x0 ++int style Widget_AppCompat_RatingBar_Small 0x0 ++int style Widget_AppCompat_SearchView 0x0 ++int style Widget_AppCompat_SearchView_ActionBar 0x0 ++int style Widget_AppCompat_SeekBar 0x0 ++int style Widget_AppCompat_SeekBar_Discrete 0x0 ++int style Widget_AppCompat_Spinner 0x0 ++int style Widget_AppCompat_Spinner_DropDown 0x0 ++int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x0 ++int style Widget_AppCompat_Spinner_Underlined 0x0 ++int style Widget_AppCompat_TextView 0x0 ++int style Widget_AppCompat_TextView_SpinnerItem 0x0 ++int style Widget_AppCompat_Toolbar 0x0 ++int style Widget_AppCompat_Toolbar_Button_Navigation 0x0 ++int style Widget_Autofill 0x0 ++int style Widget_Autofill_InlineSuggestionChip 0x0 ++int style Widget_Autofill_InlineSuggestionEndIconStyle 0x0 ++int style Widget_Autofill_InlineSuggestionStartIconStyle 0x0 ++int style Widget_Autofill_InlineSuggestionSubtitle 0x0 ++int style Widget_Autofill_InlineSuggestionTitle 0x0 ++int style Widget_Compat_NotificationActionContainer 0x0 ++int style Widget_Compat_NotificationActionText 0x0 ++int style Widget_Support_CoordinatorLayout 0x0 ++int style redboxButton 0x0 ++int[] styleable ActionBar { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable ActionBar_background 0 ++int styleable ActionBar_backgroundSplit 1 ++int styleable ActionBar_backgroundStacked 2 ++int styleable ActionBar_contentInsetEnd 3 ++int styleable ActionBar_contentInsetEndWithActions 4 ++int styleable ActionBar_contentInsetLeft 5 ++int styleable ActionBar_contentInsetRight 6 ++int styleable ActionBar_contentInsetStart 7 ++int styleable ActionBar_contentInsetStartWithNavigation 8 ++int styleable ActionBar_customNavigationLayout 9 ++int styleable ActionBar_displayOptions 10 ++int styleable ActionBar_divider 11 ++int styleable ActionBar_elevation 12 ++int styleable ActionBar_height 13 ++int styleable ActionBar_hideOnContentScroll 14 ++int styleable ActionBar_homeAsUpIndicator 15 ++int styleable ActionBar_homeLayout 16 ++int styleable ActionBar_icon 17 ++int styleable ActionBar_indeterminateProgressStyle 18 ++int styleable ActionBar_itemPadding 19 ++int styleable ActionBar_logo 20 ++int styleable ActionBar_navigationMode 21 ++int styleable ActionBar_popupTheme 22 ++int styleable ActionBar_progressBarPadding 23 ++int styleable ActionBar_progressBarStyle 24 ++int styleable ActionBar_subtitle 25 ++int styleable ActionBar_subtitleTextStyle 26 ++int styleable ActionBar_title 27 ++int styleable ActionBar_titleTextStyle 28 ++int[] styleable ActionBarLayout { 0x10100b3 } ++int styleable ActionBarLayout_android_layout_gravity 0 ++int[] styleable ActionMenuItemView { 0x101013f } ++int styleable ActionMenuItemView_android_minWidth 0 ++int[] styleable ActionMenuView { } ++int[] styleable ActionMode { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable ActionMode_background 0 ++int styleable ActionMode_backgroundSplit 1 ++int styleable ActionMode_closeItemLayout 2 ++int styleable ActionMode_height 3 ++int styleable ActionMode_subtitleTextStyle 4 ++int styleable ActionMode_titleTextStyle 5 ++int[] styleable ActivityChooserView { 0x0, 0x0 } ++int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0 ++int styleable ActivityChooserView_initialActivityCount 1 ++int[] styleable AlertDialog { 0x10100f2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AlertDialog_android_layout 0 ++int styleable AlertDialog_buttonIconDimen 1 ++int styleable AlertDialog_buttonPanelSideLayout 2 ++int styleable AlertDialog_listItemLayout 3 ++int styleable AlertDialog_listLayout 4 ++int styleable AlertDialog_multiChoiceItemLayout 5 ++int styleable AlertDialog_showTitle 6 ++int styleable AlertDialog_singleChoiceItemLayout 7 ++int[] styleable AnimatedStateListDrawableCompat { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } ++int styleable AnimatedStateListDrawableCompat_android_constantSize 0 ++int styleable AnimatedStateListDrawableCompat_android_dither 1 ++int styleable AnimatedStateListDrawableCompat_android_enterFadeDuration 2 ++int styleable AnimatedStateListDrawableCompat_android_exitFadeDuration 3 ++int styleable AnimatedStateListDrawableCompat_android_variablePadding 4 ++int styleable AnimatedStateListDrawableCompat_android_visible 5 ++int[] styleable AnimatedStateListDrawableItem { 0x1010199, 0x10100d0 } ++int styleable AnimatedStateListDrawableItem_android_drawable 0 ++int styleable AnimatedStateListDrawableItem_android_id 1 ++int[] styleable AnimatedStateListDrawableTransition { 0x1010199, 0x101044a, 0x101044b, 0x1010449 } ++int styleable AnimatedStateListDrawableTransition_android_drawable 0 ++int styleable AnimatedStateListDrawableTransition_android_fromId 1 ++int styleable AnimatedStateListDrawableTransition_android_reversible 2 ++int styleable AnimatedStateListDrawableTransition_android_toId 3 ++int[] styleable AppCompatEmojiHelper { } ++int[] styleable AppCompatImageView { 0x1010119, 0x0, 0x0, 0x0 } ++int styleable AppCompatImageView_android_src 0 ++int styleable AppCompatImageView_srcCompat 1 ++int styleable AppCompatImageView_tint 2 ++int styleable AppCompatImageView_tintMode 3 ++int[] styleable AppCompatSeekBar { 0x1010142, 0x0, 0x0, 0x0 } ++int styleable AppCompatSeekBar_android_thumb 0 ++int styleable AppCompatSeekBar_tickMark 1 ++int styleable AppCompatSeekBar_tickMarkTint 2 ++int styleable AppCompatSeekBar_tickMarkTintMode 3 ++int[] styleable AppCompatTextHelper { 0x101016e, 0x1010393, 0x101016f, 0x1010170, 0x1010392, 0x101016d, 0x1010034 } ++int styleable AppCompatTextHelper_android_drawableBottom 0 ++int styleable AppCompatTextHelper_android_drawableEnd 1 ++int styleable AppCompatTextHelper_android_drawableLeft 2 ++int styleable AppCompatTextHelper_android_drawableRight 3 ++int styleable AppCompatTextHelper_android_drawableStart 4 ++int styleable AppCompatTextHelper_android_drawableTop 5 ++int styleable AppCompatTextHelper_android_textAppearance 6 ++int[] styleable AppCompatTextView { 0x1010034, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AppCompatTextView_android_textAppearance 0 ++int styleable AppCompatTextView_autoSizeMaxTextSize 1 ++int styleable AppCompatTextView_autoSizeMinTextSize 2 ++int styleable AppCompatTextView_autoSizePresetSizes 3 ++int styleable AppCompatTextView_autoSizeStepGranularity 4 ++int styleable AppCompatTextView_autoSizeTextType 5 ++int styleable AppCompatTextView_drawableBottomCompat 6 ++int styleable AppCompatTextView_drawableEndCompat 7 ++int styleable AppCompatTextView_drawableLeftCompat 8 ++int styleable AppCompatTextView_drawableRightCompat 9 ++int styleable AppCompatTextView_drawableStartCompat 10 ++int styleable AppCompatTextView_drawableTint 11 ++int styleable AppCompatTextView_drawableTintMode 12 ++int styleable AppCompatTextView_drawableTopCompat 13 ++int styleable AppCompatTextView_emojiCompatEnabled 14 ++int styleable AppCompatTextView_firstBaselineToTopHeight 15 ++int styleable AppCompatTextView_fontFamily 16 ++int styleable AppCompatTextView_fontVariationSettings 17 ++int styleable AppCompatTextView_lastBaselineToBottomHeight 18 ++int styleable AppCompatTextView_lineHeight 19 ++int styleable AppCompatTextView_textAllCaps 20 ++int styleable AppCompatTextView_textLocale 21 ++int[] styleable AppCompatTheme { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10100ae, 0x1010057, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AppCompatTheme_actionBarDivider 0 ++int styleable AppCompatTheme_actionBarItemBackground 1 ++int styleable AppCompatTheme_actionBarPopupTheme 2 ++int styleable AppCompatTheme_actionBarSize 3 ++int styleable AppCompatTheme_actionBarSplitStyle 4 ++int styleable AppCompatTheme_actionBarStyle 5 ++int styleable AppCompatTheme_actionBarTabBarStyle 6 ++int styleable AppCompatTheme_actionBarTabStyle 7 ++int styleable AppCompatTheme_actionBarTabTextStyle 8 ++int styleable AppCompatTheme_actionBarTheme 9 ++int styleable AppCompatTheme_actionBarWidgetTheme 10 ++int styleable AppCompatTheme_actionButtonStyle 11 ++int styleable AppCompatTheme_actionDropDownStyle 12 ++int styleable AppCompatTheme_actionMenuTextAppearance 13 ++int styleable AppCompatTheme_actionMenuTextColor 14 ++int styleable AppCompatTheme_actionModeBackground 15 ++int styleable AppCompatTheme_actionModeCloseButtonStyle 16 ++int styleable AppCompatTheme_actionModeCloseContentDescription 17 ++int styleable AppCompatTheme_actionModeCloseDrawable 18 ++int styleable AppCompatTheme_actionModeCopyDrawable 19 ++int styleable AppCompatTheme_actionModeCutDrawable 20 ++int styleable AppCompatTheme_actionModeFindDrawable 21 ++int styleable AppCompatTheme_actionModePasteDrawable 22 ++int styleable AppCompatTheme_actionModePopupWindowStyle 23 ++int styleable AppCompatTheme_actionModeSelectAllDrawable 24 ++int styleable AppCompatTheme_actionModeShareDrawable 25 ++int styleable AppCompatTheme_actionModeSplitBackground 26 ++int styleable AppCompatTheme_actionModeStyle 27 ++int styleable AppCompatTheme_actionModeTheme 28 ++int styleable AppCompatTheme_actionModeWebSearchDrawable 29 ++int styleable AppCompatTheme_actionOverflowButtonStyle 30 ++int styleable AppCompatTheme_actionOverflowMenuStyle 31 ++int styleable AppCompatTheme_activityChooserViewStyle 32 ++int styleable AppCompatTheme_alertDialogButtonGroupStyle 33 ++int styleable AppCompatTheme_alertDialogCenterButtons 34 ++int styleable AppCompatTheme_alertDialogStyle 35 ++int styleable AppCompatTheme_alertDialogTheme 36 ++int styleable AppCompatTheme_android_windowAnimationStyle 37 ++int styleable AppCompatTheme_android_windowIsFloating 38 ++int styleable AppCompatTheme_autoCompleteTextViewStyle 39 ++int styleable AppCompatTheme_borderlessButtonStyle 40 ++int styleable AppCompatTheme_buttonBarButtonStyle 41 ++int styleable AppCompatTheme_buttonBarNegativeButtonStyle 42 ++int styleable AppCompatTheme_buttonBarNeutralButtonStyle 43 ++int styleable AppCompatTheme_buttonBarPositiveButtonStyle 44 ++int styleable AppCompatTheme_buttonBarStyle 45 ++int styleable AppCompatTheme_buttonStyle 46 ++int styleable AppCompatTheme_buttonStyleSmall 47 ++int styleable AppCompatTheme_checkboxStyle 48 ++int styleable AppCompatTheme_checkedTextViewStyle 49 ++int styleable AppCompatTheme_colorAccent 50 ++int styleable AppCompatTheme_colorBackgroundFloating 51 ++int styleable AppCompatTheme_colorButtonNormal 52 ++int styleable AppCompatTheme_colorControlActivated 53 ++int styleable AppCompatTheme_colorControlHighlight 54 ++int styleable AppCompatTheme_colorControlNormal 55 ++int styleable AppCompatTheme_colorError 56 ++int styleable AppCompatTheme_colorPrimary 57 ++int styleable AppCompatTheme_colorPrimaryDark 58 ++int styleable AppCompatTheme_colorSwitchThumbNormal 59 ++int styleable AppCompatTheme_controlBackground 60 ++int styleable AppCompatTheme_dialogCornerRadius 61 ++int styleable AppCompatTheme_dialogPreferredPadding 62 ++int styleable AppCompatTheme_dialogTheme 63 ++int styleable AppCompatTheme_dividerHorizontal 64 ++int styleable AppCompatTheme_dividerVertical 65 ++int styleable AppCompatTheme_dropDownListViewStyle 66 ++int styleable AppCompatTheme_dropdownListPreferredItemHeight 67 ++int styleable AppCompatTheme_editTextBackground 68 ++int styleable AppCompatTheme_editTextColor 69 ++int styleable AppCompatTheme_editTextStyle 70 ++int styleable AppCompatTheme_homeAsUpIndicator 71 ++int styleable AppCompatTheme_imageButtonStyle 72 ++int styleable AppCompatTheme_listChoiceBackgroundIndicator 73 ++int styleable AppCompatTheme_listChoiceIndicatorMultipleAnimated 74 ++int styleable AppCompatTheme_listChoiceIndicatorSingleAnimated 75 ++int styleable AppCompatTheme_listDividerAlertDialog 76 ++int styleable AppCompatTheme_listMenuViewStyle 77 ++int styleable AppCompatTheme_listPopupWindowStyle 78 ++int styleable AppCompatTheme_listPreferredItemHeight 79 ++int styleable AppCompatTheme_listPreferredItemHeightLarge 80 ++int styleable AppCompatTheme_listPreferredItemHeightSmall 81 ++int styleable AppCompatTheme_listPreferredItemPaddingEnd 82 ++int styleable AppCompatTheme_listPreferredItemPaddingLeft 83 ++int styleable AppCompatTheme_listPreferredItemPaddingRight 84 ++int styleable AppCompatTheme_listPreferredItemPaddingStart 85 ++int styleable AppCompatTheme_panelBackground 86 ++int styleable AppCompatTheme_panelMenuListTheme 87 ++int styleable AppCompatTheme_panelMenuListWidth 88 ++int styleable AppCompatTheme_popupMenuStyle 89 ++int styleable AppCompatTheme_popupWindowStyle 90 ++int styleable AppCompatTheme_radioButtonStyle 91 ++int styleable AppCompatTheme_ratingBarStyle 92 ++int styleable AppCompatTheme_ratingBarStyleIndicator 93 ++int styleable AppCompatTheme_ratingBarStyleSmall 94 ++int styleable AppCompatTheme_searchViewStyle 95 ++int styleable AppCompatTheme_seekBarStyle 96 ++int styleable AppCompatTheme_selectableItemBackground 97 ++int styleable AppCompatTheme_selectableItemBackgroundBorderless 98 ++int styleable AppCompatTheme_spinnerDropDownItemStyle 99 ++int styleable AppCompatTheme_spinnerStyle 100 ++int styleable AppCompatTheme_switchStyle 101 ++int styleable AppCompatTheme_textAppearanceLargePopupMenu 102 ++int styleable AppCompatTheme_textAppearanceListItem 103 ++int styleable AppCompatTheme_textAppearanceListItemSecondary 104 ++int styleable AppCompatTheme_textAppearanceListItemSmall 105 ++int styleable AppCompatTheme_textAppearancePopupMenuHeader 106 ++int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 107 ++int styleable AppCompatTheme_textAppearanceSearchResultTitle 108 ++int styleable AppCompatTheme_textAppearanceSmallPopupMenu 109 ++int styleable AppCompatTheme_textColorAlertDialogListItem 110 ++int styleable AppCompatTheme_textColorSearchUrl 111 ++int styleable AppCompatTheme_toolbarNavigationButtonStyle 112 ++int styleable AppCompatTheme_toolbarStyle 113 ++int styleable AppCompatTheme_tooltipForegroundColor 114 ++int styleable AppCompatTheme_tooltipFrameBackground 115 ++int styleable AppCompatTheme_viewInflaterClass 116 ++int styleable AppCompatTheme_windowActionBar 117 ++int styleable AppCompatTheme_windowActionBarOverlay 118 ++int styleable AppCompatTheme_windowActionModeOverlay 119 ++int styleable AppCompatTheme_windowFixedHeightMajor 120 ++int styleable AppCompatTheme_windowFixedHeightMinor 121 ++int styleable AppCompatTheme_windowFixedWidthMajor 122 ++int styleable AppCompatTheme_windowFixedWidthMinor 123 ++int styleable AppCompatTheme_windowMinWidthMajor 124 ++int styleable AppCompatTheme_windowMinWidthMinor 125 ++int styleable AppCompatTheme_windowNoTitle 126 ++int[] styleable Autofill_InlineSuggestion { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionChip 0 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionEndIconStyle 1 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionStartIconStyle 2 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionSubtitle 3 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionTitle 4 ++int styleable Autofill_InlineSuggestion_isAutofillInlineSuggestionTheme 5 ++int[] styleable ButtonBarLayout { 0x0 } ++int styleable ButtonBarLayout_allowStacking 0 ++int[] styleable Capability { 0x0, 0x0 } ++int styleable Capability_queryPatterns 0 ++int styleable Capability_shortcutMatchRequired 1 ++int[] styleable CheckedTextView { 0x1010108, 0x0, 0x0, 0x0 } ++int styleable CheckedTextView_android_checkMark 0 ++int styleable CheckedTextView_checkMarkCompat 1 ++int styleable CheckedTextView_checkMarkTint 2 ++int styleable CheckedTextView_checkMarkTintMode 3 ++int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5, 0x1010647, 0x0 } ++int styleable ColorStateListItem_alpha 0 ++int styleable ColorStateListItem_android_alpha 1 ++int styleable ColorStateListItem_android_color 2 ++int styleable ColorStateListItem_android_lStar 3 ++int styleable ColorStateListItem_lStar 4 ++int[] styleable CompoundButton { 0x1010107, 0x0, 0x0, 0x0 } ++int styleable CompoundButton_android_button 0 ++int styleable CompoundButton_buttonCompat 1 ++int styleable CompoundButton_buttonTint 2 ++int styleable CompoundButton_buttonTintMode 3 ++int[] styleable CoordinatorLayout { 0x0, 0x0 } ++int styleable CoordinatorLayout_keylines 0 ++int styleable CoordinatorLayout_statusBarBackground 1 ++int[] styleable CoordinatorLayout_Layout { 0x10100b3, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable CoordinatorLayout_Layout_android_layout_gravity 0 ++int styleable CoordinatorLayout_Layout_layout_anchor 1 ++int styleable CoordinatorLayout_Layout_layout_anchorGravity 2 ++int styleable CoordinatorLayout_Layout_layout_behavior 3 ++int styleable CoordinatorLayout_Layout_layout_dodgeInsetEdges 4 ++int styleable CoordinatorLayout_Layout_layout_insetEdge 5 ++int styleable CoordinatorLayout_Layout_layout_keyline 6 ++int[] styleable DrawerArrowToggle { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable DrawerArrowToggle_arrowHeadLength 0 ++int styleable DrawerArrowToggle_arrowShaftLength 1 ++int styleable DrawerArrowToggle_barLength 2 ++int styleable DrawerArrowToggle_color 3 ++int styleable DrawerArrowToggle_drawableSize 4 ++int styleable DrawerArrowToggle_gapBetweenBars 5 ++int styleable DrawerArrowToggle_spinBars 6 ++int styleable DrawerArrowToggle_thickness 7 ++int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable FontFamily_fontProviderAuthority 0 ++int styleable FontFamily_fontProviderCerts 1 ++int styleable FontFamily_fontProviderFetchStrategy 2 ++int styleable FontFamily_fontProviderFetchTimeout 3 ++int styleable FontFamily_fontProviderPackage 4 ++int styleable FontFamily_fontProviderQuery 5 ++int styleable FontFamily_fontProviderSystemFontFamily 6 ++int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable FontFamilyFont_android_font 0 ++int styleable FontFamilyFont_android_fontStyle 1 ++int styleable FontFamilyFont_android_fontVariationSettings 2 ++int styleable FontFamilyFont_android_fontWeight 3 ++int styleable FontFamilyFont_android_ttcIndex 4 ++int styleable FontFamilyFont_font 5 ++int styleable FontFamilyFont_fontStyle 6 ++int styleable FontFamilyFont_fontVariationSettings 7 ++int styleable FontFamilyFont_fontWeight 8 ++int styleable FontFamilyFont_ttcIndex 9 ++int[] styleable Fragment { 0x10100d0, 0x1010003, 0x10100d1 } ++int styleable Fragment_android_id 0 ++int styleable Fragment_android_name 1 ++int styleable Fragment_android_tag 2 ++int[] styleable FragmentContainerView { 0x1010003, 0x10100d1 } ++int styleable FragmentContainerView_android_name 0 ++int styleable FragmentContainerView_android_tag 1 ++int[] styleable GenericDraweeHierarchy { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable GenericDraweeHierarchy_actualImageScaleType 0 ++int styleable GenericDraweeHierarchy_backgroundImage 1 ++int styleable GenericDraweeHierarchy_fadeDuration 2 ++int styleable GenericDraweeHierarchy_failureImage 3 ++int styleable GenericDraweeHierarchy_failureImageScaleType 4 ++int styleable GenericDraweeHierarchy_overlayImage 5 ++int styleable GenericDraweeHierarchy_placeholderImage 6 ++int styleable GenericDraweeHierarchy_placeholderImageScaleType 7 ++int styleable GenericDraweeHierarchy_pressedStateOverlayImage 8 ++int styleable GenericDraweeHierarchy_progressBarAutoRotateInterval 9 ++int styleable GenericDraweeHierarchy_progressBarImage 10 ++int styleable GenericDraweeHierarchy_progressBarImageScaleType 11 ++int styleable GenericDraweeHierarchy_retryImage 12 ++int styleable GenericDraweeHierarchy_retryImageScaleType 13 ++int styleable GenericDraweeHierarchy_roundAsCircle 14 ++int styleable GenericDraweeHierarchy_roundBottomEnd 15 ++int styleable GenericDraweeHierarchy_roundBottomLeft 16 ++int styleable GenericDraweeHierarchy_roundBottomRight 17 ++int styleable GenericDraweeHierarchy_roundBottomStart 18 ++int styleable GenericDraweeHierarchy_roundTopEnd 19 ++int styleable GenericDraweeHierarchy_roundTopLeft 20 ++int styleable GenericDraweeHierarchy_roundTopRight 21 ++int styleable GenericDraweeHierarchy_roundTopStart 22 ++int styleable GenericDraweeHierarchy_roundWithOverlayColor 23 ++int styleable GenericDraweeHierarchy_roundedCornerRadius 24 ++int styleable GenericDraweeHierarchy_roundingBorderColor 25 ++int styleable GenericDraweeHierarchy_roundingBorderPadding 26 ++int styleable GenericDraweeHierarchy_roundingBorderWidth 27 ++int styleable GenericDraweeHierarchy_viewAspectRatio 28 ++int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } ++int styleable GradientColor_android_centerColor 0 ++int styleable GradientColor_android_centerX 1 ++int styleable GradientColor_android_centerY 2 ++int styleable GradientColor_android_endColor 3 ++int styleable GradientColor_android_endX 4 ++int styleable GradientColor_android_endY 5 ++int styleable GradientColor_android_gradientRadius 6 ++int styleable GradientColor_android_startColor 7 ++int styleable GradientColor_android_startX 8 ++int styleable GradientColor_android_startY 9 ++int styleable GradientColor_android_tileMode 10 ++int styleable GradientColor_android_type 11 ++int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } ++int styleable GradientColorItem_android_color 0 ++int styleable GradientColorItem_android_offset 1 ++int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x0, 0x0, 0x0, 0x0 } ++int styleable LinearLayoutCompat_android_baselineAligned 0 ++int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1 ++int styleable LinearLayoutCompat_android_gravity 2 ++int styleable LinearLayoutCompat_android_orientation 3 ++int styleable LinearLayoutCompat_android_weightSum 4 ++int styleable LinearLayoutCompat_divider 5 ++int styleable LinearLayoutCompat_dividerPadding 6 ++int styleable LinearLayoutCompat_measureWithLargestChild 7 ++int styleable LinearLayoutCompat_showDividers 8 ++int[] styleable LinearLayoutCompat_Layout { 0x10100b3, 0x10100f5, 0x1010181, 0x10100f4 } ++int styleable LinearLayoutCompat_Layout_android_layout_gravity 0 ++int styleable LinearLayoutCompat_Layout_android_layout_height 1 ++int styleable LinearLayoutCompat_Layout_android_layout_weight 2 ++int styleable LinearLayoutCompat_Layout_android_layout_width 3 ++int[] styleable ListPopupWindow { 0x10102ac, 0x10102ad } ++int styleable ListPopupWindow_android_dropDownHorizontalOffset 0 ++int styleable ListPopupWindow_android_dropDownVerticalOffset 1 ++int[] styleable MenuGroup { 0x10101e0, 0x101000e, 0x10100d0, 0x10101de, 0x10101df, 0x1010194 } ++int styleable MenuGroup_android_checkableBehavior 0 ++int styleable MenuGroup_android_enabled 1 ++int styleable MenuGroup_android_id 2 ++int styleable MenuGroup_android_menuCategory 3 ++int styleable MenuGroup_android_orderInCategory 4 ++int styleable MenuGroup_android_visible 5 ++int[] styleable MenuItem { 0x0, 0x0, 0x0, 0x0, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable MenuItem_actionLayout 0 ++int styleable MenuItem_actionProviderClass 1 ++int styleable MenuItem_actionViewClass 2 ++int styleable MenuItem_alphabeticModifiers 3 ++int styleable MenuItem_android_alphabeticShortcut 4 ++int styleable MenuItem_android_checkable 5 ++int styleable MenuItem_android_checked 6 ++int styleable MenuItem_android_enabled 7 ++int styleable MenuItem_android_icon 8 ++int styleable MenuItem_android_id 9 ++int styleable MenuItem_android_menuCategory 10 ++int styleable MenuItem_android_numericShortcut 11 ++int styleable MenuItem_android_onClick 12 ++int styleable MenuItem_android_orderInCategory 13 ++int styleable MenuItem_android_title 14 ++int styleable MenuItem_android_titleCondensed 15 ++int styleable MenuItem_android_visible 16 ++int styleable MenuItem_contentDescription 17 ++int styleable MenuItem_iconTint 18 ++int styleable MenuItem_iconTintMode 19 ++int styleable MenuItem_numericModifiers 20 ++int styleable MenuItem_showAsAction 21 ++int styleable MenuItem_tooltipText 22 ++int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x0, 0x0 } ++int styleable MenuView_android_headerBackground 0 ++int styleable MenuView_android_horizontalDivider 1 ++int styleable MenuView_android_itemBackground 2 ++int styleable MenuView_android_itemIconDisabledAlpha 3 ++int styleable MenuView_android_itemTextAppearance 4 ++int styleable MenuView_android_verticalDivider 5 ++int styleable MenuView_android_windowAnimationStyle 6 ++int styleable MenuView_preserveIconSpacing 7 ++int styleable MenuView_subMenuArrow 8 ++int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x0 } ++int styleable PopupWindow_android_popupAnimationStyle 0 ++int styleable PopupWindow_android_popupBackground 1 ++int styleable PopupWindow_overlapAnchor 2 ++int[] styleable PopupWindowBackgroundState { 0x0 } ++int styleable PopupWindowBackgroundState_state_above_anchor 0 ++int[] styleable RecycleListView { 0x0, 0x0 } ++int styleable RecycleListView_paddingBottomNoButtons 0 ++int styleable RecycleListView_paddingTopNoTitle 1 ++int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SearchView_android_focusable 0 ++int styleable SearchView_android_imeOptions 1 ++int styleable SearchView_android_inputType 2 ++int styleable SearchView_android_maxWidth 3 ++int styleable SearchView_closeIcon 4 ++int styleable SearchView_commitIcon 5 ++int styleable SearchView_defaultQueryHint 6 ++int styleable SearchView_goIcon 7 ++int styleable SearchView_iconifiedByDefault 8 ++int styleable SearchView_layout 9 ++int styleable SearchView_queryBackground 10 ++int styleable SearchView_queryHint 11 ++int styleable SearchView_searchHintIcon 12 ++int styleable SearchView_searchIcon 13 ++int styleable SearchView_submitBackground 14 ++int styleable SearchView_suggestionRowLayout 15 ++int styleable SearchView_voiceIcon 16 ++int[] styleable SimpleDraweeView { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SimpleDraweeView_actualImageResource 0 ++int styleable SimpleDraweeView_actualImageScaleType 1 ++int styleable SimpleDraweeView_actualImageUri 2 ++int styleable SimpleDraweeView_backgroundImage 3 ++int styleable SimpleDraweeView_fadeDuration 4 ++int styleable SimpleDraweeView_failureImage 5 ++int styleable SimpleDraweeView_failureImageScaleType 6 ++int styleable SimpleDraweeView_overlayImage 7 ++int styleable SimpleDraweeView_placeholderImage 8 ++int styleable SimpleDraweeView_placeholderImageScaleType 9 ++int styleable SimpleDraweeView_pressedStateOverlayImage 10 ++int styleable SimpleDraweeView_progressBarAutoRotateInterval 11 ++int styleable SimpleDraweeView_progressBarImage 12 ++int styleable SimpleDraweeView_progressBarImageScaleType 13 ++int styleable SimpleDraweeView_retryImage 14 ++int styleable SimpleDraweeView_retryImageScaleType 15 ++int styleable SimpleDraweeView_roundAsCircle 16 ++int styleable SimpleDraweeView_roundBottomEnd 17 ++int styleable SimpleDraweeView_roundBottomLeft 18 ++int styleable SimpleDraweeView_roundBottomRight 19 ++int styleable SimpleDraweeView_roundBottomStart 20 ++int styleable SimpleDraweeView_roundTopEnd 21 ++int styleable SimpleDraweeView_roundTopLeft 22 ++int styleable SimpleDraweeView_roundTopRight 23 ++int styleable SimpleDraweeView_roundTopStart 24 ++int styleable SimpleDraweeView_roundWithOverlayColor 25 ++int styleable SimpleDraweeView_roundedCornerRadius 26 ++int styleable SimpleDraweeView_roundingBorderColor 27 ++int styleable SimpleDraweeView_roundingBorderPadding 28 ++int styleable SimpleDraweeView_roundingBorderWidth 29 ++int styleable SimpleDraweeView_viewAspectRatio 30 ++int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x0 } ++int styleable Spinner_android_dropDownWidth 0 ++int styleable Spinner_android_entries 1 ++int styleable Spinner_android_popupBackground 2 ++int styleable Spinner_android_prompt 3 ++int styleable Spinner_popupTheme 4 ++int[] styleable StateListDrawable { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } ++int styleable StateListDrawable_android_constantSize 0 ++int styleable StateListDrawable_android_dither 1 ++int styleable StateListDrawable_android_enterFadeDuration 2 ++int styleable StateListDrawable_android_exitFadeDuration 3 ++int styleable StateListDrawable_android_variablePadding 4 ++int styleable StateListDrawable_android_visible 5 ++int[] styleable StateListDrawableItem { 0x1010199 } ++int styleable StateListDrawableItem_android_drawable 0 ++int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SwitchCompat_android_textOff 0 ++int styleable SwitchCompat_android_textOn 1 ++int styleable SwitchCompat_android_thumb 2 ++int styleable SwitchCompat_showText 3 ++int styleable SwitchCompat_splitTrack 4 ++int styleable SwitchCompat_switchMinWidth 5 ++int styleable SwitchCompat_switchPadding 6 ++int styleable SwitchCompat_switchTextAppearance 7 ++int styleable SwitchCompat_thumbTextPadding 8 ++int styleable SwitchCompat_thumbTint 9 ++int styleable SwitchCompat_thumbTintMode 10 ++int styleable SwitchCompat_track 11 ++int styleable SwitchCompat_trackTint 12 ++int styleable SwitchCompat_trackTintMode 13 ++int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010585, 0x1010095, 0x1010097, 0x1010096, 0x0, 0x0, 0x0, 0x0 } ++int styleable TextAppearance_android_fontFamily 0 ++int styleable TextAppearance_android_shadowColor 1 ++int styleable TextAppearance_android_shadowDx 2 ++int styleable TextAppearance_android_shadowDy 3 ++int styleable TextAppearance_android_shadowRadius 4 ++int styleable TextAppearance_android_textColor 5 ++int styleable TextAppearance_android_textColorHint 6 ++int styleable TextAppearance_android_textColorLink 7 ++int styleable TextAppearance_android_textFontWeight 8 ++int styleable TextAppearance_android_textSize 9 ++int styleable TextAppearance_android_textStyle 10 ++int styleable TextAppearance_android_typeface 11 ++int styleable TextAppearance_fontFamily 12 ++int styleable TextAppearance_fontVariationSettings 13 ++int styleable TextAppearance_textAllCaps 14 ++int styleable TextAppearance_textLocale 15 ++int[] styleable Toolbar { 0x10100af, 0x1010140, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable Toolbar_android_gravity 0 ++int styleable Toolbar_android_minHeight 1 ++int styleable Toolbar_buttonGravity 2 ++int styleable Toolbar_collapseContentDescription 3 ++int styleable Toolbar_collapseIcon 4 ++int styleable Toolbar_contentInsetEnd 5 ++int styleable Toolbar_contentInsetEndWithActions 6 ++int styleable Toolbar_contentInsetLeft 7 ++int styleable Toolbar_contentInsetRight 8 ++int styleable Toolbar_contentInsetStart 9 ++int styleable Toolbar_contentInsetStartWithNavigation 10 ++int styleable Toolbar_logo 11 ++int styleable Toolbar_logoDescription 12 ++int styleable Toolbar_maxButtonHeight 13 ++int styleable Toolbar_menu 14 ++int styleable Toolbar_navigationContentDescription 15 ++int styleable Toolbar_navigationIcon 16 ++int styleable Toolbar_popupTheme 17 ++int styleable Toolbar_subtitle 18 ++int styleable Toolbar_subtitleTextAppearance 19 ++int styleable Toolbar_subtitleTextColor 20 ++int styleable Toolbar_title 21 ++int styleable Toolbar_titleMargin 22 ++int styleable Toolbar_titleMarginBottom 23 ++int styleable Toolbar_titleMarginEnd 24 ++int styleable Toolbar_titleMarginStart 25 ++int styleable Toolbar_titleMarginTop 26 ++int styleable Toolbar_titleMargins 27 ++int styleable Toolbar_titleTextAppearance 28 ++int styleable Toolbar_titleTextColor 29 ++int[] styleable View { 0x10100da, 0x1010000, 0x0, 0x0, 0x0 } ++int styleable View_android_focusable 0 ++int styleable View_android_theme 1 ++int styleable View_paddingEnd 2 ++int styleable View_paddingStart 3 ++int styleable View_theme 4 ++int[] styleable ViewBackgroundHelper { 0x10100d4, 0x0, 0x0 } ++int styleable ViewBackgroundHelper_android_background 0 ++int styleable ViewBackgroundHelper_backgroundTint 1 ++int styleable ViewBackgroundHelper_backgroundTintMode 2 ++int[] styleable ViewStubCompat { 0x10100d0, 0x10100f3, 0x10100f2 } ++int styleable ViewStubCompat_android_id 0 ++int styleable ViewStubCompat_android_inflatedId 1 ++int styleable ViewStubCompat_android_layout 2 ++int xml rn_dev_preferences 0x0 +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +new file mode 100644 +index 0000000..ba3d646 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +@@ -0,0 +1 @@ ++#Mon Oct 24 18:34:25 PKT 2022 +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +new file mode 100644 +index 0000000..35bd856 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +@@ -0,0 +1,2 @@ ++ ++ +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +new file mode 100644 +index 0000000..bf793fc +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +@@ -0,0 +1,2 @@ ++ ++ +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/mergeDebugShaders/merger.xml b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +new file mode 100644 +index 0000000..5740775 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +@@ -0,0 +1,2 @@ ++ ++ +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/packageDebugAssets/merger.xml b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/packageDebugAssets/merger.xml +new file mode 100644 +index 0000000..a9e8e2e +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/incremental/packageDebugAssets/merger.xml +@@ -0,0 +1,2 @@ ++ ++ +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/BuildConfig.class b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/BuildConfig.class +new file mode 100644 +index 0000000..6997ffc +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/BuildConfig.class differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$1.class b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$1.class +new file mode 100644 +index 0000000..150c99d +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$1.class differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$2.class b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$2.class +new file mode 100644 +index 0000000..663f4b0 +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$2.class differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$3.class b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$3.class +new file mode 100644 +index 0000000..aa57b03 +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$3.class differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$AuthCallback.class b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$AuthCallback.class +new file mode 100644 +index 0000000..94530f4 +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule$AuthCallback.class differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule.class b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule.class +new file mode 100644 +index 0000000..0eec67e +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerModule.class differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerPackage.class b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerPackage.class +new file mode 100644 +index 0000000..20b1b03 +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/javac/debug/classes/com/hieuvp/fingerprint/ReactNativeFingerprintScannerPackage.class differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/local_only_symbol_list/debug/R-def.txt b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +new file mode 100644 +index 0000000..78ac5b8 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +@@ -0,0 +1,2 @@ ++R_DEF: Internal format may change without notice ++local +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +new file mode 100644 +index 0000000..2261fce +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +@@ -0,0 +1,24 @@ ++1 ++2 ++4 ++5 /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++7 android:targetSdkVersion="31" /> ++7-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++8 ++9 ++9-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:3:5-74 ++9-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:3:22-71 ++10 ++10-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:4:5-71 ++10-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:4:22-69 ++11 ++11-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:5:5-91 ++11-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:5:22-88 ++12 ++12-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:6:5-7:104 ++12-->/Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:7:9-101 ++13 ++14 +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +new file mode 100644 +index 0000000..9428c53 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +@@ -0,0 +1,14 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/navigation_json/debug/navigation.json b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/navigation_json/debug/navigation.json +new file mode 100644 +index 0000000..0637a08 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/navigation_json/debug/navigation.json +@@ -0,0 +1 @@ ++[] +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/packaged_manifests/debug/output-metadata.json b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/packaged_manifests/debug/output-metadata.json +new file mode 100644 +index 0000000..6046760 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/packaged_manifests/debug/output-metadata.json +@@ -0,0 +1,18 @@ ++{ ++ "version": 3, ++ "artifactType": { ++ "type": "PACKAGED_MANIFESTS", ++ "kind": "Directory" ++ }, ++ "applicationId": "com.hieuvp.fingerprint", ++ "variantName": "debug", ++ "elements": [ ++ { ++ "type": "SINGLE", ++ "filters": [], ++ "attributes": [], ++ "outputFile": "../../merged_manifest/debug/AndroidManifest.xml" ++ } ++ ], ++ "elementType": "File" ++} +\ No newline at end of file +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +new file mode 100644 +index 0000000..528336a +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar differ +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +new file mode 100644 +index 0000000..b04a647 +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +@@ -0,0 +1,1527 @@ ++com.hieuvp.fingerprint ++anim abc_fade_in ++anim abc_fade_out ++anim abc_grow_fade_in_from_bottom ++anim abc_popup_enter ++anim abc_popup_exit ++anim abc_shrink_fade_out_from_bottom ++anim abc_slide_in_bottom ++anim abc_slide_in_top ++anim abc_slide_out_bottom ++anim abc_slide_out_top ++anim abc_tooltip_enter ++anim abc_tooltip_exit ++anim btn_checkbox_to_checked_box_inner_merged_animation ++anim btn_checkbox_to_checked_box_outer_merged_animation ++anim btn_checkbox_to_checked_icon_null_animation ++anim btn_checkbox_to_unchecked_box_inner_merged_animation ++anim btn_checkbox_to_unchecked_check_path_merged_animation ++anim btn_checkbox_to_unchecked_icon_null_animation ++anim btn_radio_to_off_mtrl_dot_group_animation ++anim btn_radio_to_off_mtrl_ring_outer_animation ++anim btn_radio_to_off_mtrl_ring_outer_path_animation ++anim btn_radio_to_on_mtrl_dot_group_animation ++anim btn_radio_to_on_mtrl_ring_outer_animation ++anim btn_radio_to_on_mtrl_ring_outer_path_animation ++anim catalyst_fade_in ++anim catalyst_fade_out ++anim catalyst_push_up_in ++anim catalyst_push_up_out ++anim catalyst_slide_down ++anim catalyst_slide_up ++anim fragment_close_enter ++anim fragment_close_exit ++anim fragment_fade_enter ++anim fragment_fade_exit ++anim fragment_fast_out_extra_slow_in ++anim fragment_open_enter ++anim fragment_open_exit ++animator fragment_close_enter ++animator fragment_close_exit ++animator fragment_fade_enter ++animator fragment_fade_exit ++animator fragment_open_enter ++animator fragment_open_exit ++array assume_strong_biometrics_models ++array crypto_fingerprint_fallback_prefixes ++array crypto_fingerprint_fallback_vendors ++array delay_showing_prompt_models ++array hide_fingerprint_instantly_prefixes ++attr actionBarDivider ++attr actionBarItemBackground ++attr actionBarPopupTheme ++attr actionBarSize ++attr actionBarSplitStyle ++attr actionBarStyle ++attr actionBarTabBarStyle ++attr actionBarTabStyle ++attr actionBarTabTextStyle ++attr actionBarTheme ++attr actionBarWidgetTheme ++attr actionButtonStyle ++attr actionDropDownStyle ++attr actionLayout ++attr actionMenuTextAppearance ++attr actionMenuTextColor ++attr actionModeBackground ++attr actionModeCloseButtonStyle ++attr actionModeCloseContentDescription ++attr actionModeCloseDrawable ++attr actionModeCopyDrawable ++attr actionModeCutDrawable ++attr actionModeFindDrawable ++attr actionModePasteDrawable ++attr actionModePopupWindowStyle ++attr actionModeSelectAllDrawable ++attr actionModeShareDrawable ++attr actionModeSplitBackground ++attr actionModeStyle ++attr actionModeTheme ++attr actionModeWebSearchDrawable ++attr actionOverflowButtonStyle ++attr actionOverflowMenuStyle ++attr actionProviderClass ++attr actionViewClass ++attr activityChooserViewStyle ++attr actualImageResource ++attr actualImageScaleType ++attr actualImageUri ++attr alertDialogButtonGroupStyle ++attr alertDialogCenterButtons ++attr alertDialogStyle ++attr alertDialogTheme ++attr allowStacking ++attr alpha ++attr alphabeticModifiers ++attr arrowHeadLength ++attr arrowShaftLength ++attr autoCompleteTextViewStyle ++attr autoSizeMaxTextSize ++attr autoSizeMinTextSize ++attr autoSizePresetSizes ++attr autoSizeStepGranularity ++attr autoSizeTextType ++attr autofillInlineSuggestionChip ++attr autofillInlineSuggestionEndIconStyle ++attr autofillInlineSuggestionStartIconStyle ++attr autofillInlineSuggestionSubtitle ++attr autofillInlineSuggestionTitle ++attr background ++attr backgroundImage ++attr backgroundSplit ++attr backgroundStacked ++attr backgroundTint ++attr backgroundTintMode ++attr barLength ++attr borderlessButtonStyle ++attr buttonBarButtonStyle ++attr buttonBarNegativeButtonStyle ++attr buttonBarNeutralButtonStyle ++attr buttonBarPositiveButtonStyle ++attr buttonBarStyle ++attr buttonCompat ++attr buttonGravity ++attr buttonIconDimen ++attr buttonPanelSideLayout ++attr buttonStyle ++attr buttonStyleSmall ++attr buttonTint ++attr buttonTintMode ++attr checkMarkCompat ++attr checkMarkTint ++attr checkMarkTintMode ++attr checkboxStyle ++attr checkedTextViewStyle ++attr closeIcon ++attr closeItemLayout ++attr collapseContentDescription ++attr collapseIcon ++attr color ++attr colorAccent ++attr colorBackgroundFloating ++attr colorButtonNormal ++attr colorControlActivated ++attr colorControlHighlight ++attr colorControlNormal ++attr colorError ++attr colorPrimary ++attr colorPrimaryDark ++attr colorSwitchThumbNormal ++attr commitIcon ++attr contentDescription ++attr contentInsetEnd ++attr contentInsetEndWithActions ++attr contentInsetLeft ++attr contentInsetRight ++attr contentInsetStart ++attr contentInsetStartWithNavigation ++attr controlBackground ++attr coordinatorLayoutStyle ++attr customNavigationLayout ++attr defaultQueryHint ++attr dialogCornerRadius ++attr dialogPreferredPadding ++attr dialogTheme ++attr displayOptions ++attr divider ++attr dividerHorizontal ++attr dividerPadding ++attr dividerVertical ++attr drawableBottomCompat ++attr drawableEndCompat ++attr drawableLeftCompat ++attr drawableRightCompat ++attr drawableSize ++attr drawableStartCompat ++attr drawableTint ++attr drawableTintMode ++attr drawableTopCompat ++attr drawerArrowStyle ++attr dropDownListViewStyle ++attr dropdownListPreferredItemHeight ++attr editTextBackground ++attr editTextColor ++attr editTextStyle ++attr elevation ++attr emojiCompatEnabled ++attr expandActivityOverflowButtonDrawable ++attr fadeDuration ++attr failureImage ++attr failureImageScaleType ++attr firstBaselineToTopHeight ++attr font ++attr fontFamily ++attr fontProviderAuthority ++attr fontProviderCerts ++attr fontProviderFetchStrategy ++attr fontProviderFetchTimeout ++attr fontProviderPackage ++attr fontProviderQuery ++attr fontProviderSystemFontFamily ++attr fontStyle ++attr fontVariationSettings ++attr fontWeight ++attr gapBetweenBars ++attr goIcon ++attr height ++attr hideOnContentScroll ++attr homeAsUpIndicator ++attr homeLayout ++attr icon ++attr iconTint ++attr iconTintMode ++attr iconifiedByDefault ++attr imageButtonStyle ++attr indeterminateProgressStyle ++attr initialActivityCount ++attr isAutofillInlineSuggestionTheme ++attr isLightTheme ++attr itemPadding ++attr keylines ++attr lStar ++attr lastBaselineToBottomHeight ++attr layout ++attr layout_anchor ++attr layout_anchorGravity ++attr layout_behavior ++attr layout_dodgeInsetEdges ++attr layout_insetEdge ++attr layout_keyline ++attr lineHeight ++attr listChoiceBackgroundIndicator ++attr listChoiceIndicatorMultipleAnimated ++attr listChoiceIndicatorSingleAnimated ++attr listDividerAlertDialog ++attr listItemLayout ++attr listLayout ++attr listMenuViewStyle ++attr listPopupWindowStyle ++attr listPreferredItemHeight ++attr listPreferredItemHeightLarge ++attr listPreferredItemHeightSmall ++attr listPreferredItemPaddingEnd ++attr listPreferredItemPaddingLeft ++attr listPreferredItemPaddingRight ++attr listPreferredItemPaddingStart ++attr logo ++attr logoDescription ++attr maxButtonHeight ++attr measureWithLargestChild ++attr menu ++attr multiChoiceItemLayout ++attr navigationContentDescription ++attr navigationIcon ++attr navigationMode ++attr nestedScrollViewStyle ++attr numericModifiers ++attr overlapAnchor ++attr overlayImage ++attr paddingBottomNoButtons ++attr paddingEnd ++attr paddingStart ++attr paddingTopNoTitle ++attr panelBackground ++attr panelMenuListTheme ++attr panelMenuListWidth ++attr placeholderImage ++attr placeholderImageScaleType ++attr popupMenuStyle ++attr popupTheme ++attr popupWindowStyle ++attr preserveIconSpacing ++attr pressedStateOverlayImage ++attr progressBarAutoRotateInterval ++attr progressBarImage ++attr progressBarImageScaleType ++attr progressBarPadding ++attr progressBarStyle ++attr queryBackground ++attr queryHint ++attr queryPatterns ++attr radioButtonStyle ++attr ratingBarStyle ++attr ratingBarStyleIndicator ++attr ratingBarStyleSmall ++attr retryImage ++attr retryImageScaleType ++attr roundAsCircle ++attr roundBottomEnd ++attr roundBottomLeft ++attr roundBottomRight ++attr roundBottomStart ++attr roundTopEnd ++attr roundTopLeft ++attr roundTopRight ++attr roundTopStart ++attr roundWithOverlayColor ++attr roundedCornerRadius ++attr roundingBorderColor ++attr roundingBorderPadding ++attr roundingBorderWidth ++attr searchHintIcon ++attr searchIcon ++attr searchViewStyle ++attr seekBarStyle ++attr selectableItemBackground ++attr selectableItemBackgroundBorderless ++attr shortcutMatchRequired ++attr showAsAction ++attr showDividers ++attr showText ++attr showTitle ++attr singleChoiceItemLayout ++attr spinBars ++attr spinnerDropDownItemStyle ++attr spinnerStyle ++attr splitTrack ++attr srcCompat ++attr state_above_anchor ++attr statusBarBackground ++attr subMenuArrow ++attr submitBackground ++attr subtitle ++attr subtitleTextAppearance ++attr subtitleTextColor ++attr subtitleTextStyle ++attr suggestionRowLayout ++attr switchMinWidth ++attr switchPadding ++attr switchStyle ++attr switchTextAppearance ++attr textAllCaps ++attr textAppearanceLargePopupMenu ++attr textAppearanceListItem ++attr textAppearanceListItemSecondary ++attr textAppearanceListItemSmall ++attr textAppearancePopupMenuHeader ++attr textAppearanceSearchResultSubtitle ++attr textAppearanceSearchResultTitle ++attr textAppearanceSmallPopupMenu ++attr textColorAlertDialogListItem ++attr textColorSearchUrl ++attr textLocale ++attr theme ++attr thickness ++attr thumbTextPadding ++attr thumbTint ++attr thumbTintMode ++attr tickMark ++attr tickMarkTint ++attr tickMarkTintMode ++attr tint ++attr tintMode ++attr title ++attr titleMargin ++attr titleMarginBottom ++attr titleMarginEnd ++attr titleMarginStart ++attr titleMarginTop ++attr titleMargins ++attr titleTextAppearance ++attr titleTextColor ++attr titleTextStyle ++attr toolbarNavigationButtonStyle ++attr toolbarStyle ++attr tooltipForegroundColor ++attr tooltipFrameBackground ++attr tooltipText ++attr track ++attr trackTint ++attr trackTintMode ++attr ttcIndex ++attr viewAspectRatio ++attr viewInflaterClass ++attr voiceIcon ++attr windowActionBar ++attr windowActionBarOverlay ++attr windowActionModeOverlay ++attr windowFixedHeightMajor ++attr windowFixedHeightMinor ++attr windowFixedWidthMajor ++attr windowFixedWidthMinor ++attr windowMinWidthMajor ++attr windowMinWidthMinor ++attr windowNoTitle ++bool abc_action_bar_embed_tabs ++bool abc_allow_stacked_button_bar ++bool abc_config_actionMenuItemAllCaps ++color abc_background_cache_hint_selector_material_dark ++color abc_background_cache_hint_selector_material_light ++color abc_btn_colored_borderless_text_material ++color abc_btn_colored_text_material ++color abc_color_highlight_material ++color abc_decor_view_status_guard ++color abc_decor_view_status_guard_light ++color abc_hint_foreground_material_dark ++color abc_hint_foreground_material_light ++color abc_input_method_navigation_guard ++color abc_primary_text_disable_only_material_dark ++color abc_primary_text_disable_only_material_light ++color abc_primary_text_material_dark ++color abc_primary_text_material_light ++color abc_search_url_text ++color abc_search_url_text_normal ++color abc_search_url_text_pressed ++color abc_search_url_text_selected ++color abc_secondary_text_material_dark ++color abc_secondary_text_material_light ++color abc_tint_btn_checkable ++color abc_tint_default ++color abc_tint_edittext ++color abc_tint_seek_thumb ++color abc_tint_spinner ++color abc_tint_switch_track ++color accent_material_dark ++color accent_material_light ++color androidx_core_ripple_material_light ++color androidx_core_secondary_text_default_material_light ++color background_floating_material_dark ++color background_floating_material_light ++color background_material_dark ++color background_material_light ++color biometric_error_color ++color bright_foreground_disabled_material_dark ++color bright_foreground_disabled_material_light ++color bright_foreground_inverse_material_dark ++color bright_foreground_inverse_material_light ++color bright_foreground_material_dark ++color bright_foreground_material_light ++color button_material_dark ++color button_material_light ++color catalyst_logbox_background ++color catalyst_redbox_background ++color dim_foreground_disabled_material_dark ++color dim_foreground_disabled_material_light ++color dim_foreground_material_dark ++color dim_foreground_material_light ++color error_color_material_dark ++color error_color_material_light ++color foreground_material_dark ++color foreground_material_light ++color highlighted_text_material_dark ++color highlighted_text_material_light ++color material_blue_grey_800 ++color material_blue_grey_900 ++color material_blue_grey_950 ++color material_deep_teal_200 ++color material_deep_teal_500 ++color material_grey_100 ++color material_grey_300 ++color material_grey_50 ++color material_grey_600 ++color material_grey_800 ++color material_grey_850 ++color material_grey_900 ++color notification_action_color_filter ++color notification_icon_bg_color ++color primary_dark_material_dark ++color primary_dark_material_light ++color primary_material_dark ++color primary_material_light ++color primary_text_default_material_dark ++color primary_text_default_material_light ++color primary_text_disabled_material_dark ++color primary_text_disabled_material_light ++color ripple_material_dark ++color ripple_material_light ++color secondary_text_default_material_dark ++color secondary_text_default_material_light ++color secondary_text_disabled_material_dark ++color secondary_text_disabled_material_light ++color switch_thumb_disabled_material_dark ++color switch_thumb_disabled_material_light ++color switch_thumb_material_dark ++color switch_thumb_material_light ++color switch_thumb_normal_material_dark ++color switch_thumb_normal_material_light ++color tooltip_background_dark ++color tooltip_background_light ++dimen abc_action_bar_content_inset_material ++dimen abc_action_bar_content_inset_with_nav ++dimen abc_action_bar_default_height_material ++dimen abc_action_bar_default_padding_end_material ++dimen abc_action_bar_default_padding_start_material ++dimen abc_action_bar_elevation_material ++dimen abc_action_bar_icon_vertical_padding_material ++dimen abc_action_bar_overflow_padding_end_material ++dimen abc_action_bar_overflow_padding_start_material ++dimen abc_action_bar_stacked_max_height ++dimen abc_action_bar_stacked_tab_max_width ++dimen abc_action_bar_subtitle_bottom_margin_material ++dimen abc_action_bar_subtitle_top_margin_material ++dimen abc_action_button_min_height_material ++dimen abc_action_button_min_width_material ++dimen abc_action_button_min_width_overflow_material ++dimen abc_alert_dialog_button_bar_height ++dimen abc_alert_dialog_button_dimen ++dimen abc_button_inset_horizontal_material ++dimen abc_button_inset_vertical_material ++dimen abc_button_padding_horizontal_material ++dimen abc_button_padding_vertical_material ++dimen abc_cascading_menus_min_smallest_width ++dimen abc_config_prefDialogWidth ++dimen abc_control_corner_material ++dimen abc_control_inset_material ++dimen abc_control_padding_material ++dimen abc_dialog_corner_radius_material ++dimen abc_dialog_fixed_height_major ++dimen abc_dialog_fixed_height_minor ++dimen abc_dialog_fixed_width_major ++dimen abc_dialog_fixed_width_minor ++dimen abc_dialog_list_padding_bottom_no_buttons ++dimen abc_dialog_list_padding_top_no_title ++dimen abc_dialog_min_width_major ++dimen abc_dialog_min_width_minor ++dimen abc_dialog_padding_material ++dimen abc_dialog_padding_top_material ++dimen abc_dialog_title_divider_material ++dimen abc_disabled_alpha_material_dark ++dimen abc_disabled_alpha_material_light ++dimen abc_dropdownitem_icon_width ++dimen abc_dropdownitem_text_padding_left ++dimen abc_dropdownitem_text_padding_right ++dimen abc_edit_text_inset_bottom_material ++dimen abc_edit_text_inset_horizontal_material ++dimen abc_edit_text_inset_top_material ++dimen abc_floating_window_z ++dimen abc_list_item_height_large_material ++dimen abc_list_item_height_material ++dimen abc_list_item_height_small_material ++dimen abc_list_item_padding_horizontal_material ++dimen abc_panel_menu_list_width ++dimen abc_progress_bar_height_material ++dimen abc_search_view_preferred_height ++dimen abc_search_view_preferred_width ++dimen abc_seekbar_track_background_height_material ++dimen abc_seekbar_track_progress_height_material ++dimen abc_select_dialog_padding_start_material ++dimen abc_star_big ++dimen abc_star_medium ++dimen abc_star_small ++dimen abc_switch_padding ++dimen abc_text_size_body_1_material ++dimen abc_text_size_body_2_material ++dimen abc_text_size_button_material ++dimen abc_text_size_caption_material ++dimen abc_text_size_display_1_material ++dimen abc_text_size_display_2_material ++dimen abc_text_size_display_3_material ++dimen abc_text_size_display_4_material ++dimen abc_text_size_headline_material ++dimen abc_text_size_large_material ++dimen abc_text_size_medium_material ++dimen abc_text_size_menu_header_material ++dimen abc_text_size_menu_material ++dimen abc_text_size_small_material ++dimen abc_text_size_subhead_material ++dimen abc_text_size_subtitle_material_toolbar ++dimen abc_text_size_title_material ++dimen abc_text_size_title_material_toolbar ++dimen autofill_inline_suggestion_icon_size ++dimen compat_button_inset_horizontal_material ++dimen compat_button_inset_vertical_material ++dimen compat_button_padding_horizontal_material ++dimen compat_button_padding_vertical_material ++dimen compat_control_corner_material ++dimen compat_notification_large_icon_max_height ++dimen compat_notification_large_icon_max_width ++dimen disabled_alpha_material_dark ++dimen disabled_alpha_material_light ++dimen fingerprint_icon_size ++dimen highlight_alpha_material_colored ++dimen highlight_alpha_material_dark ++dimen highlight_alpha_material_light ++dimen hint_alpha_material_dark ++dimen hint_alpha_material_light ++dimen hint_pressed_alpha_material_dark ++dimen hint_pressed_alpha_material_light ++dimen notification_action_icon_size ++dimen notification_action_text_size ++dimen notification_big_circle_margin ++dimen notification_content_margin_start ++dimen notification_large_icon_height ++dimen notification_large_icon_width ++dimen notification_main_column_padding_top ++dimen notification_media_narrow_margin ++dimen notification_right_icon_size ++dimen notification_right_side_padding_top ++dimen notification_small_icon_background_padding ++dimen notification_small_icon_size_as_large ++dimen notification_subtext_size ++dimen notification_top_pad ++dimen notification_top_pad_large_text ++dimen tooltip_corner_radius ++dimen tooltip_horizontal_padding ++dimen tooltip_margin ++dimen tooltip_precise_anchor_extra_offset ++dimen tooltip_precise_anchor_threshold ++dimen tooltip_vertical_padding ++dimen tooltip_y_offset_non_touch ++dimen tooltip_y_offset_touch ++drawable abc_ab_share_pack_mtrl_alpha ++drawable abc_action_bar_item_background_material ++drawable abc_btn_borderless_material ++drawable abc_btn_check_material ++drawable abc_btn_check_material_anim ++drawable abc_btn_check_to_on_mtrl_000 ++drawable abc_btn_check_to_on_mtrl_015 ++drawable abc_btn_colored_material ++drawable abc_btn_default_mtrl_shape ++drawable abc_btn_radio_material ++drawable abc_btn_radio_material_anim ++drawable abc_btn_radio_to_on_mtrl_000 ++drawable abc_btn_radio_to_on_mtrl_015 ++drawable abc_btn_switch_to_on_mtrl_00001 ++drawable abc_btn_switch_to_on_mtrl_00012 ++drawable abc_cab_background_internal_bg ++drawable abc_cab_background_top_material ++drawable abc_cab_background_top_mtrl_alpha ++drawable abc_control_background_material ++drawable abc_dialog_material_background ++drawable abc_edit_text_material ++drawable abc_ic_ab_back_material ++drawable abc_ic_arrow_drop_right_black_24dp ++drawable abc_ic_clear_material ++drawable abc_ic_commit_search_api_mtrl_alpha ++drawable abc_ic_go_search_api_material ++drawable abc_ic_menu_copy_mtrl_am_alpha ++drawable abc_ic_menu_cut_mtrl_alpha ++drawable abc_ic_menu_overflow_material ++drawable abc_ic_menu_paste_mtrl_am_alpha ++drawable abc_ic_menu_selectall_mtrl_alpha ++drawable abc_ic_menu_share_mtrl_alpha ++drawable abc_ic_search_api_material ++drawable abc_ic_star_black_16dp ++drawable abc_ic_star_black_36dp ++drawable abc_ic_star_black_48dp ++drawable abc_ic_star_half_black_16dp ++drawable abc_ic_star_half_black_36dp ++drawable abc_ic_star_half_black_48dp ++drawable abc_ic_voice_search_api_material ++drawable abc_item_background_holo_dark ++drawable abc_item_background_holo_light ++drawable abc_list_divider_material ++drawable abc_list_divider_mtrl_alpha ++drawable abc_list_focused_holo ++drawable abc_list_longpressed_holo ++drawable abc_list_pressed_holo_dark ++drawable abc_list_pressed_holo_light ++drawable abc_list_selector_background_transition_holo_dark ++drawable abc_list_selector_background_transition_holo_light ++drawable abc_list_selector_disabled_holo_dark ++drawable abc_list_selector_disabled_holo_light ++drawable abc_list_selector_holo_dark ++drawable abc_list_selector_holo_light ++drawable abc_menu_hardkey_panel_mtrl_mult ++drawable abc_popup_background_mtrl_mult ++drawable abc_ratingbar_indicator_material ++drawable abc_ratingbar_material ++drawable abc_ratingbar_small_material ++drawable abc_scrubber_control_off_mtrl_alpha ++drawable abc_scrubber_control_to_pressed_mtrl_000 ++drawable abc_scrubber_control_to_pressed_mtrl_005 ++drawable abc_scrubber_primary_mtrl_alpha ++drawable abc_scrubber_track_mtrl_alpha ++drawable abc_seekbar_thumb_material ++drawable abc_seekbar_tick_mark_material ++drawable abc_seekbar_track_material ++drawable abc_spinner_mtrl_am_alpha ++drawable abc_spinner_textfield_background_material ++drawable abc_star_black_48dp ++drawable abc_star_half_black_48dp ++drawable abc_switch_thumb_material ++drawable abc_switch_track_mtrl_alpha ++drawable abc_tab_indicator_material ++drawable abc_tab_indicator_mtrl_alpha ++drawable abc_text_cursor_material ++drawable abc_text_select_handle_left_mtrl ++drawable abc_text_select_handle_left_mtrl_dark ++drawable abc_text_select_handle_left_mtrl_light ++drawable abc_text_select_handle_middle_mtrl ++drawable abc_text_select_handle_middle_mtrl_dark ++drawable abc_text_select_handle_middle_mtrl_light ++drawable abc_text_select_handle_right_mtrl ++drawable abc_text_select_handle_right_mtrl_dark ++drawable abc_text_select_handle_right_mtrl_light ++drawable abc_textfield_activated_mtrl_alpha ++drawable abc_textfield_default_mtrl_alpha ++drawable abc_textfield_search_activated_mtrl_alpha ++drawable abc_textfield_search_default_mtrl_alpha ++drawable abc_textfield_search_material ++drawable abc_vector_test ++drawable autofill_inline_suggestion_chip_background ++drawable btn_checkbox_checked_mtrl ++drawable btn_checkbox_checked_to_unchecked_mtrl_animation ++drawable btn_checkbox_unchecked_mtrl ++drawable btn_checkbox_unchecked_to_checked_mtrl_animation ++drawable btn_radio_off_mtrl ++drawable btn_radio_off_to_on_mtrl_animation ++drawable btn_radio_on_mtrl ++drawable btn_radio_on_to_off_mtrl_animation ++drawable fingerprint_dialog_error ++drawable fingerprint_dialog_fp_icon ++drawable notification_action_background ++drawable notification_bg ++drawable notification_bg_low ++drawable notification_bg_low_normal ++drawable notification_bg_low_pressed ++drawable notification_bg_normal ++drawable notification_bg_normal_pressed ++drawable notification_icon_background ++drawable notification_template_icon_bg ++drawable notification_template_icon_low_bg ++drawable notification_tile_bg ++drawable notify_panel_notification_icon_bg ++drawable redbox_top_border_background ++drawable test_level_drawable ++drawable tooltip_frame_dark ++drawable tooltip_frame_light ++id accessibility_action_clickable_span ++id accessibility_actions ++id accessibility_collection ++id accessibility_collection_item ++id accessibility_custom_action_0 ++id accessibility_custom_action_1 ++id accessibility_custom_action_10 ++id accessibility_custom_action_11 ++id accessibility_custom_action_12 ++id accessibility_custom_action_13 ++id accessibility_custom_action_14 ++id accessibility_custom_action_15 ++id accessibility_custom_action_16 ++id accessibility_custom_action_17 ++id accessibility_custom_action_18 ++id accessibility_custom_action_19 ++id accessibility_custom_action_2 ++id accessibility_custom_action_20 ++id accessibility_custom_action_21 ++id accessibility_custom_action_22 ++id accessibility_custom_action_23 ++id accessibility_custom_action_24 ++id accessibility_custom_action_25 ++id accessibility_custom_action_26 ++id accessibility_custom_action_27 ++id accessibility_custom_action_28 ++id accessibility_custom_action_29 ++id accessibility_custom_action_3 ++id accessibility_custom_action_30 ++id accessibility_custom_action_31 ++id accessibility_custom_action_4 ++id accessibility_custom_action_5 ++id accessibility_custom_action_6 ++id accessibility_custom_action_7 ++id accessibility_custom_action_8 ++id accessibility_custom_action_9 ++id accessibility_hint ++id accessibility_label ++id accessibility_links ++id accessibility_role ++id accessibility_state ++id accessibility_value ++id action_bar ++id action_bar_activity_content ++id action_bar_container ++id action_bar_root ++id action_bar_spinner ++id action_bar_subtitle ++id action_bar_title ++id action_container ++id action_context_bar ++id action_divider ++id action_image ++id action_menu_divider ++id action_menu_presenter ++id action_mode_bar ++id action_mode_bar_stub ++id action_mode_close_button ++id action_text ++id actions ++id activity_chooser_view_content ++id add ++id alertTitle ++id async ++id autofill_inline_suggestion_end_icon ++id autofill_inline_suggestion_start_icon ++id autofill_inline_suggestion_subtitle ++id autofill_inline_suggestion_title ++id blocking ++id bottom ++id buttonPanel ++id catalyst_redbox_title ++id center ++id centerCrop ++id centerInside ++id checkbox ++id checked ++id chronometer ++id content ++id contentPanel ++id custom ++id customPanel ++id decor_content_parent ++id default_activity_button ++id dialog_button ++id edit_query ++id end ++id expand_activities_button ++id expanded_menu ++id fingerprint_description ++id fingerprint_error ++id fingerprint_icon ++id fingerprint_subtitle ++id fitBottomStart ++id fitCenter ++id fitEnd ++id fitStart ++id fitXY ++id focusCrop ++id forever ++id fps_text ++id fragment_container_view_tag ++id group_divider ++id home ++id icon ++id icon_group ++id image ++id info ++id italic ++id item1 ++id item2 ++id item3 ++id item4 ++id labelled_by ++id left ++id line1 ++id line3 ++id listMode ++id list_item ++id message ++id multiply ++id none ++id normal ++id notification_background ++id notification_main_column ++id notification_main_column_container ++id off ++id on ++id parentPanel ++id pointer_enter ++id pointer_enter_capture ++id pointer_leave ++id pointer_leave_capture ++id pointer_move ++id pointer_move_capture ++id progress_circular ++id progress_horizontal ++id radio ++id react_test_id ++id right ++id right_icon ++id right_side ++id rn_frame_file ++id rn_frame_method ++id rn_redbox_dismiss_button ++id rn_redbox_line_separator ++id rn_redbox_loading_indicator ++id rn_redbox_reload_button ++id rn_redbox_report_button ++id rn_redbox_report_label ++id rn_redbox_stack ++id screen ++id scrollIndicatorDown ++id scrollIndicatorUp ++id scrollView ++id search_badge ++id search_bar ++id search_button ++id search_close_btn ++id search_edit_frame ++id search_go_btn ++id search_mag_icon ++id search_plate ++id search_src_text ++id search_voice_btn ++id select_dialog_listview ++id shortcut ++id spacer ++id special_effects_controller_view_tag ++id split_action_bar ++id src_atop ++id src_in ++id src_over ++id start ++id submenuarrow ++id submit_area ++id tabMode ++id tag_accessibility_actions ++id tag_accessibility_clickable_spans ++id tag_accessibility_heading ++id tag_accessibility_pane_title ++id tag_on_apply_window_listener ++id tag_on_receive_content_listener ++id tag_on_receive_content_mime_types ++id tag_screen_reader_focusable ++id tag_state_description ++id tag_transition_group ++id tag_unhandled_key_event_manager ++id tag_unhandled_key_listeners ++id tag_window_insets_animation_callback ++id text ++id text2 ++id textSpacerNoButtons ++id textSpacerNoTitle ++id time ++id title ++id titleDividerNoCustom ++id title_template ++id top ++id topPanel ++id unchecked ++id uniform ++id up ++id view_tag_instance_handle ++id view_tag_native_id ++id view_tree_lifecycle_owner ++id view_tree_saved_state_registry_owner ++id view_tree_view_model_store_owner ++id visible_removing_fragment_view_tag ++id wrap_content ++integer abc_config_activityDefaultDur ++integer abc_config_activityShortDur ++integer cancel_button_image_alpha ++integer config_tooltipAnimTime ++integer react_native_dev_server_port ++integer react_native_inspector_proxy_port ++integer status_bar_notification_info_maxnum ++interpolator btn_checkbox_checked_mtrl_animation_interpolator_0 ++interpolator btn_checkbox_checked_mtrl_animation_interpolator_1 ++interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0 ++interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1 ++interpolator btn_radio_to_off_mtrl_animation_interpolator_0 ++interpolator btn_radio_to_on_mtrl_animation_interpolator_0 ++interpolator fast_out_slow_in ++layout abc_action_bar_title_item ++layout abc_action_bar_up_container ++layout abc_action_menu_item_layout ++layout abc_action_menu_layout ++layout abc_action_mode_bar ++layout abc_action_mode_close_item_material ++layout abc_activity_chooser_view ++layout abc_activity_chooser_view_list_item ++layout abc_alert_dialog_button_bar_material ++layout abc_alert_dialog_material ++layout abc_alert_dialog_title_material ++layout abc_cascading_menu_item_layout ++layout abc_dialog_title_material ++layout abc_expanded_menu_layout ++layout abc_list_menu_item_checkbox ++layout abc_list_menu_item_icon ++layout abc_list_menu_item_layout ++layout abc_list_menu_item_radio ++layout abc_popup_menu_header_item_layout ++layout abc_popup_menu_item_layout ++layout abc_screen_content_include ++layout abc_screen_simple ++layout abc_screen_simple_overlay_action_mode ++layout abc_screen_toolbar ++layout abc_search_dropdown_item_icons_2line ++layout abc_search_view ++layout abc_select_dialog_material ++layout abc_tooltip ++layout autofill_inline_suggestion ++layout custom_dialog ++layout dev_loading_view ++layout fingerprint_dialog_layout ++layout fps_view ++layout notification_action ++layout notification_action_tombstone ++layout notification_template_custom_big ++layout notification_template_icon_group ++layout notification_template_part_chronometer ++layout notification_template_part_time ++layout redbox_item_frame ++layout redbox_item_title ++layout redbox_view ++layout select_dialog_item_material ++layout select_dialog_multichoice_material ++layout select_dialog_singlechoice_material ++layout support_simple_spinner_dropdown_item ++menu example_menu ++menu example_menu2 ++string abc_action_bar_home_description ++string abc_action_bar_up_description ++string abc_action_menu_overflow_description ++string abc_action_mode_done ++string abc_activity_chooser_view_see_all ++string abc_activitychooserview_choose_application ++string abc_capital_off ++string abc_capital_on ++string abc_font_family_body_1_material ++string abc_font_family_body_2_material ++string abc_font_family_button_material ++string abc_font_family_caption_material ++string abc_font_family_display_1_material ++string abc_font_family_display_2_material ++string abc_font_family_display_3_material ++string abc_font_family_display_4_material ++string abc_font_family_headline_material ++string abc_font_family_menu_material ++string abc_font_family_subhead_material ++string abc_font_family_title_material ++string abc_menu_alt_shortcut_label ++string abc_menu_ctrl_shortcut_label ++string abc_menu_delete_shortcut_label ++string abc_menu_enter_shortcut_label ++string abc_menu_function_shortcut_label ++string abc_menu_meta_shortcut_label ++string abc_menu_shift_shortcut_label ++string abc_menu_space_shortcut_label ++string abc_menu_sym_shortcut_label ++string abc_prepend_shortcut_label ++string abc_search_hint ++string abc_searchview_description_clear ++string abc_searchview_description_query ++string abc_searchview_description_search ++string abc_searchview_description_submit ++string abc_searchview_description_voice ++string abc_shareactionprovider_share_with ++string abc_shareactionprovider_share_with_application ++string abc_toolbar_collapse_description ++string alert_description ++string catalyst_change_bundle_location ++string catalyst_copy_button ++string catalyst_debug ++string catalyst_debug_chrome ++string catalyst_debug_chrome_stop ++string catalyst_debug_connecting ++string catalyst_debug_error ++string catalyst_debug_open ++string catalyst_debug_stop ++string catalyst_devtools_open ++string catalyst_dismiss_button ++string catalyst_heap_capture ++string catalyst_hot_reloading ++string catalyst_hot_reloading_auto_disable ++string catalyst_hot_reloading_auto_enable ++string catalyst_hot_reloading_stop ++string catalyst_inspector ++string catalyst_inspector_stop ++string catalyst_loading_from_url ++string catalyst_open_flipper_error ++string catalyst_perf_monitor ++string catalyst_perf_monitor_stop ++string catalyst_reload ++string catalyst_reload_button ++string catalyst_reload_error ++string catalyst_report_button ++string catalyst_sample_profiler_disable ++string catalyst_sample_profiler_enable ++string catalyst_settings ++string catalyst_settings_title ++string combobox_description ++string confirm_device_credential_password ++string default_error_msg ++string fingerprint_dialog_touch_sensor ++string fingerprint_error_hw_not_available ++string fingerprint_error_hw_not_present ++string fingerprint_error_lockout ++string fingerprint_error_no_fingerprints ++string fingerprint_error_user_canceled ++string fingerprint_not_recognized ++string generic_error_no_device_credential ++string generic_error_no_keyguard ++string generic_error_user_canceled ++string header_description ++string image_description ++string imagebutton_description ++string link_description ++string menu_description ++string menubar_description ++string menuitem_description ++string progressbar_description ++string radiogroup_description ++string rn_tab_description ++string scrollbar_description ++string search_menu_title ++string spinbutton_description ++string state_busy_description ++string state_collapsed_description ++string state_expanded_description ++string state_mixed_description ++string state_off_description ++string state_on_description ++string state_unselected_description ++string status_bar_notification_info_overflow ++string summary_description ++string tablist_description ++string timer_description ++string toolbar_description ++style AlertDialog_AppCompat ++style AlertDialog_AppCompat_Light ++style Animation_AppCompat_Dialog ++style Animation_AppCompat_DropDownUp ++style Animation_AppCompat_Tooltip ++style Animation_Catalyst_LogBox ++style Animation_Catalyst_RedBox ++style Base_AlertDialog_AppCompat ++style Base_AlertDialog_AppCompat_Light ++style Base_Animation_AppCompat_Dialog ++style Base_Animation_AppCompat_DropDownUp ++style Base_Animation_AppCompat_Tooltip ++style Base_DialogWindowTitleBackground_AppCompat ++style Base_DialogWindowTitle_AppCompat ++style Base_TextAppearance_AppCompat ++style Base_TextAppearance_AppCompat_Body1 ++style Base_TextAppearance_AppCompat_Body2 ++style Base_TextAppearance_AppCompat_Button ++style Base_TextAppearance_AppCompat_Caption ++style Base_TextAppearance_AppCompat_Display1 ++style Base_TextAppearance_AppCompat_Display2 ++style Base_TextAppearance_AppCompat_Display3 ++style Base_TextAppearance_AppCompat_Display4 ++style Base_TextAppearance_AppCompat_Headline ++style Base_TextAppearance_AppCompat_Inverse ++style Base_TextAppearance_AppCompat_Large ++style Base_TextAppearance_AppCompat_Large_Inverse ++style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large ++style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small ++style Base_TextAppearance_AppCompat_Medium ++style Base_TextAppearance_AppCompat_Medium_Inverse ++style Base_TextAppearance_AppCompat_Menu ++style Base_TextAppearance_AppCompat_SearchResult ++style Base_TextAppearance_AppCompat_SearchResult_Subtitle ++style Base_TextAppearance_AppCompat_SearchResult_Title ++style Base_TextAppearance_AppCompat_Small ++style Base_TextAppearance_AppCompat_Small_Inverse ++style Base_TextAppearance_AppCompat_Subhead ++style Base_TextAppearance_AppCompat_Subhead_Inverse ++style Base_TextAppearance_AppCompat_Title ++style Base_TextAppearance_AppCompat_Title_Inverse ++style Base_TextAppearance_AppCompat_Tooltip ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Title ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse ++style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle ++style Base_TextAppearance_AppCompat_Widget_ActionMode_Title ++style Base_TextAppearance_AppCompat_Widget_Button ++style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored ++style Base_TextAppearance_AppCompat_Widget_Button_Colored ++style Base_TextAppearance_AppCompat_Widget_Button_Inverse ++style Base_TextAppearance_AppCompat_Widget_DropDownItem ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small ++style Base_TextAppearance_AppCompat_Widget_Switch ++style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem ++style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item ++style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle ++style Base_TextAppearance_Widget_AppCompat_Toolbar_Title ++style Base_ThemeOverlay_AppCompat ++style Base_ThemeOverlay_AppCompat_ActionBar ++style Base_ThemeOverlay_AppCompat_Dark ++style Base_ThemeOverlay_AppCompat_Dark_ActionBar ++style Base_ThemeOverlay_AppCompat_Dialog ++style Base_ThemeOverlay_AppCompat_Dialog_Alert ++style Base_ThemeOverlay_AppCompat_Light ++style Base_Theme_AppCompat ++style Base_Theme_AppCompat_CompactMenu ++style Base_Theme_AppCompat_Dialog ++style Base_Theme_AppCompat_DialogWhenLarge ++style Base_Theme_AppCompat_Dialog_Alert ++style Base_Theme_AppCompat_Dialog_FixedSize ++style Base_Theme_AppCompat_Dialog_MinWidth ++style Base_Theme_AppCompat_Light ++style Base_Theme_AppCompat_Light_DarkActionBar ++style Base_Theme_AppCompat_Light_Dialog ++style Base_Theme_AppCompat_Light_DialogWhenLarge ++style Base_Theme_AppCompat_Light_Dialog_Alert ++style Base_Theme_AppCompat_Light_Dialog_FixedSize ++style Base_Theme_AppCompat_Light_Dialog_MinWidth ++style Base_V21_ThemeOverlay_AppCompat_Dialog ++style Base_V21_Theme_AppCompat ++style Base_V21_Theme_AppCompat_Dialog ++style Base_V21_Theme_AppCompat_Light ++style Base_V21_Theme_AppCompat_Light_Dialog ++style Base_V22_Theme_AppCompat ++style Base_V22_Theme_AppCompat_Light ++style Base_V23_Theme_AppCompat ++style Base_V23_Theme_AppCompat_Light ++style Base_V26_Theme_AppCompat ++style Base_V26_Theme_AppCompat_Light ++style Base_V26_Widget_AppCompat_Toolbar ++style Base_V28_Theme_AppCompat ++style Base_V28_Theme_AppCompat_Light ++style Base_V7_ThemeOverlay_AppCompat_Dialog ++style Base_V7_Theme_AppCompat ++style Base_V7_Theme_AppCompat_Dialog ++style Base_V7_Theme_AppCompat_Light ++style Base_V7_Theme_AppCompat_Light_Dialog ++style Base_V7_Widget_AppCompat_AutoCompleteTextView ++style Base_V7_Widget_AppCompat_EditText ++style Base_V7_Widget_AppCompat_Toolbar ++style Base_Widget_AppCompat_ActionBar ++style Base_Widget_AppCompat_ActionBar_Solid ++style Base_Widget_AppCompat_ActionBar_TabBar ++style Base_Widget_AppCompat_ActionBar_TabText ++style Base_Widget_AppCompat_ActionBar_TabView ++style Base_Widget_AppCompat_ActionButton ++style Base_Widget_AppCompat_ActionButton_CloseMode ++style Base_Widget_AppCompat_ActionButton_Overflow ++style Base_Widget_AppCompat_ActionMode ++style Base_Widget_AppCompat_ActivityChooserView ++style Base_Widget_AppCompat_AutoCompleteTextView ++style Base_Widget_AppCompat_Button ++style Base_Widget_AppCompat_ButtonBar ++style Base_Widget_AppCompat_ButtonBar_AlertDialog ++style Base_Widget_AppCompat_Button_Borderless ++style Base_Widget_AppCompat_Button_Borderless_Colored ++style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog ++style Base_Widget_AppCompat_Button_Colored ++style Base_Widget_AppCompat_Button_Small ++style Base_Widget_AppCompat_CompoundButton_CheckBox ++style Base_Widget_AppCompat_CompoundButton_RadioButton ++style Base_Widget_AppCompat_CompoundButton_Switch ++style Base_Widget_AppCompat_DrawerArrowToggle ++style Base_Widget_AppCompat_DrawerArrowToggle_Common ++style Base_Widget_AppCompat_DropDownItem_Spinner ++style Base_Widget_AppCompat_EditText ++style Base_Widget_AppCompat_ImageButton ++style Base_Widget_AppCompat_Light_ActionBar ++style Base_Widget_AppCompat_Light_ActionBar_Solid ++style Base_Widget_AppCompat_Light_ActionBar_TabBar ++style Base_Widget_AppCompat_Light_ActionBar_TabText ++style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse ++style Base_Widget_AppCompat_Light_ActionBar_TabView ++style Base_Widget_AppCompat_Light_PopupMenu ++style Base_Widget_AppCompat_Light_PopupMenu_Overflow ++style Base_Widget_AppCompat_ListMenuView ++style Base_Widget_AppCompat_ListPopupWindow ++style Base_Widget_AppCompat_ListView ++style Base_Widget_AppCompat_ListView_DropDown ++style Base_Widget_AppCompat_ListView_Menu ++style Base_Widget_AppCompat_PopupMenu ++style Base_Widget_AppCompat_PopupMenu_Overflow ++style Base_Widget_AppCompat_PopupWindow ++style Base_Widget_AppCompat_ProgressBar ++style Base_Widget_AppCompat_ProgressBar_Horizontal ++style Base_Widget_AppCompat_RatingBar ++style Base_Widget_AppCompat_RatingBar_Indicator ++style Base_Widget_AppCompat_RatingBar_Small ++style Base_Widget_AppCompat_SearchView ++style Base_Widget_AppCompat_SearchView_ActionBar ++style Base_Widget_AppCompat_SeekBar ++style Base_Widget_AppCompat_SeekBar_Discrete ++style Base_Widget_AppCompat_Spinner ++style Base_Widget_AppCompat_Spinner_Underlined ++style Base_Widget_AppCompat_TextView ++style Base_Widget_AppCompat_TextView_SpinnerItem ++style Base_Widget_AppCompat_Toolbar ++style Base_Widget_AppCompat_Toolbar_Button_Navigation ++style CalendarDatePickerDialog ++style CalendarDatePickerStyle ++style DialogAnimationFade ++style DialogAnimationSlide ++style Platform_AppCompat ++style Platform_AppCompat_Light ++style Platform_ThemeOverlay_AppCompat ++style Platform_ThemeOverlay_AppCompat_Dark ++style Platform_ThemeOverlay_AppCompat_Light ++style Platform_V21_AppCompat ++style Platform_V21_AppCompat_Light ++style Platform_V25_AppCompat ++style Platform_V25_AppCompat_Light ++style Platform_Widget_AppCompat_Spinner ++style RtlOverlay_DialogWindowTitle_AppCompat ++style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem ++style RtlOverlay_Widget_AppCompat_DialogTitle_Icon ++style RtlOverlay_Widget_AppCompat_PopupMenuItem ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title ++style RtlOverlay_Widget_AppCompat_SearchView_MagIcon ++style RtlOverlay_Widget_AppCompat_Search_DropDown ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Query ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Text ++style RtlUnderlay_Widget_AppCompat_ActionButton ++style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow ++style SpinnerDatePickerDialog ++style SpinnerDatePickerStyle ++style TextAppearance_AppCompat ++style TextAppearance_AppCompat_Body1 ++style TextAppearance_AppCompat_Body2 ++style TextAppearance_AppCompat_Button ++style TextAppearance_AppCompat_Caption ++style TextAppearance_AppCompat_Display1 ++style TextAppearance_AppCompat_Display2 ++style TextAppearance_AppCompat_Display3 ++style TextAppearance_AppCompat_Display4 ++style TextAppearance_AppCompat_Headline ++style TextAppearance_AppCompat_Inverse ++style TextAppearance_AppCompat_Large ++style TextAppearance_AppCompat_Large_Inverse ++style TextAppearance_AppCompat_Light_SearchResult_Subtitle ++style TextAppearance_AppCompat_Light_SearchResult_Title ++style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large ++style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small ++style TextAppearance_AppCompat_Medium ++style TextAppearance_AppCompat_Medium_Inverse ++style TextAppearance_AppCompat_Menu ++style TextAppearance_AppCompat_SearchResult_Subtitle ++style TextAppearance_AppCompat_SearchResult_Title ++style TextAppearance_AppCompat_Small ++style TextAppearance_AppCompat_Small_Inverse ++style TextAppearance_AppCompat_Subhead ++style TextAppearance_AppCompat_Subhead_Inverse ++style TextAppearance_AppCompat_Title ++style TextAppearance_AppCompat_Title_Inverse ++style TextAppearance_AppCompat_Tooltip ++style TextAppearance_AppCompat_Widget_ActionBar_Menu ++style TextAppearance_AppCompat_Widget_ActionBar_Subtitle ++style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse ++style TextAppearance_AppCompat_Widget_ActionBar_Title ++style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse ++style TextAppearance_AppCompat_Widget_ActionMode_Subtitle ++style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse ++style TextAppearance_AppCompat_Widget_ActionMode_Title ++style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse ++style TextAppearance_AppCompat_Widget_Button ++style TextAppearance_AppCompat_Widget_Button_Borderless_Colored ++style TextAppearance_AppCompat_Widget_Button_Colored ++style TextAppearance_AppCompat_Widget_Button_Inverse ++style TextAppearance_AppCompat_Widget_DropDownItem ++style TextAppearance_AppCompat_Widget_PopupMenu_Header ++style TextAppearance_AppCompat_Widget_PopupMenu_Large ++style TextAppearance_AppCompat_Widget_PopupMenu_Small ++style TextAppearance_AppCompat_Widget_Switch ++style TextAppearance_AppCompat_Widget_TextView_SpinnerItem ++style TextAppearance_Compat_Notification ++style TextAppearance_Compat_Notification_Info ++style TextAppearance_Compat_Notification_Line2 ++style TextAppearance_Compat_Notification_Time ++style TextAppearance_Compat_Notification_Title ++style TextAppearance_Widget_AppCompat_ExpandedMenu_Item ++style TextAppearance_Widget_AppCompat_Toolbar_Subtitle ++style TextAppearance_Widget_AppCompat_Toolbar_Title ++style Theme ++style ThemeOverlay_AppCompat ++style ThemeOverlay_AppCompat_ActionBar ++style ThemeOverlay_AppCompat_Dark ++style ThemeOverlay_AppCompat_Dark_ActionBar ++style ThemeOverlay_AppCompat_DayNight ++style ThemeOverlay_AppCompat_DayNight_ActionBar ++style ThemeOverlay_AppCompat_Dialog ++style ThemeOverlay_AppCompat_Dialog_Alert ++style ThemeOverlay_AppCompat_Light ++style Theme_AppCompat ++style Theme_AppCompat_CompactMenu ++style Theme_AppCompat_DayNight ++style Theme_AppCompat_DayNight_DarkActionBar ++style Theme_AppCompat_DayNight_Dialog ++style Theme_AppCompat_DayNight_DialogWhenLarge ++style Theme_AppCompat_DayNight_Dialog_Alert ++style Theme_AppCompat_DayNight_Dialog_MinWidth ++style Theme_AppCompat_DayNight_NoActionBar ++style Theme_AppCompat_Dialog ++style Theme_AppCompat_DialogWhenLarge ++style Theme_AppCompat_Dialog_Alert ++style Theme_AppCompat_Dialog_MinWidth ++style Theme_AppCompat_Empty ++style Theme_AppCompat_Light ++style Theme_AppCompat_Light_DarkActionBar ++style Theme_AppCompat_Light_Dialog ++style Theme_AppCompat_Light_DialogWhenLarge ++style Theme_AppCompat_Light_Dialog_Alert ++style Theme_AppCompat_Light_Dialog_MinWidth ++style Theme_AppCompat_Light_NoActionBar ++style Theme_AppCompat_NoActionBar ++style Theme_AutofillInlineSuggestion ++style Theme_Catalyst ++style Theme_Catalyst_LogBox ++style Theme_Catalyst_RedBox ++style Theme_FullScreenDialog ++style Theme_FullScreenDialogAnimatedFade ++style Theme_FullScreenDialogAnimatedSlide ++style Theme_ReactNative_AppCompat_Light ++style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen ++style Widget_AppCompat_ActionBar ++style Widget_AppCompat_ActionBar_Solid ++style Widget_AppCompat_ActionBar_TabBar ++style Widget_AppCompat_ActionBar_TabText ++style Widget_AppCompat_ActionBar_TabView ++style Widget_AppCompat_ActionButton ++style Widget_AppCompat_ActionButton_CloseMode ++style Widget_AppCompat_ActionButton_Overflow ++style Widget_AppCompat_ActionMode ++style Widget_AppCompat_ActivityChooserView ++style Widget_AppCompat_AutoCompleteTextView ++style Widget_AppCompat_Button ++style Widget_AppCompat_ButtonBar ++style Widget_AppCompat_ButtonBar_AlertDialog ++style Widget_AppCompat_Button_Borderless ++style Widget_AppCompat_Button_Borderless_Colored ++style Widget_AppCompat_Button_ButtonBar_AlertDialog ++style Widget_AppCompat_Button_Colored ++style Widget_AppCompat_Button_Small ++style Widget_AppCompat_CompoundButton_CheckBox ++style Widget_AppCompat_CompoundButton_RadioButton ++style Widget_AppCompat_CompoundButton_Switch ++style Widget_AppCompat_DrawerArrowToggle ++style Widget_AppCompat_DropDownItem_Spinner ++style Widget_AppCompat_EditText ++style Widget_AppCompat_ImageButton ++style Widget_AppCompat_Light_ActionBar ++style Widget_AppCompat_Light_ActionBar_Solid ++style Widget_AppCompat_Light_ActionBar_Solid_Inverse ++style Widget_AppCompat_Light_ActionBar_TabBar ++style Widget_AppCompat_Light_ActionBar_TabBar_Inverse ++style Widget_AppCompat_Light_ActionBar_TabText ++style Widget_AppCompat_Light_ActionBar_TabText_Inverse ++style Widget_AppCompat_Light_ActionBar_TabView ++style Widget_AppCompat_Light_ActionBar_TabView_Inverse ++style Widget_AppCompat_Light_ActionButton ++style Widget_AppCompat_Light_ActionButton_CloseMode ++style Widget_AppCompat_Light_ActionButton_Overflow ++style Widget_AppCompat_Light_ActionMode_Inverse ++style Widget_AppCompat_Light_ActivityChooserView ++style Widget_AppCompat_Light_AutoCompleteTextView ++style Widget_AppCompat_Light_DropDownItem_Spinner ++style Widget_AppCompat_Light_ListPopupWindow ++style Widget_AppCompat_Light_ListView_DropDown ++style Widget_AppCompat_Light_PopupMenu ++style Widget_AppCompat_Light_PopupMenu_Overflow ++style Widget_AppCompat_Light_SearchView ++style Widget_AppCompat_Light_Spinner_DropDown_ActionBar ++style Widget_AppCompat_ListMenuView ++style Widget_AppCompat_ListPopupWindow ++style Widget_AppCompat_ListView ++style Widget_AppCompat_ListView_DropDown ++style Widget_AppCompat_ListView_Menu ++style Widget_AppCompat_PopupMenu ++style Widget_AppCompat_PopupMenu_Overflow ++style Widget_AppCompat_PopupWindow ++style Widget_AppCompat_ProgressBar ++style Widget_AppCompat_ProgressBar_Horizontal ++style Widget_AppCompat_RatingBar ++style Widget_AppCompat_RatingBar_Indicator ++style Widget_AppCompat_RatingBar_Small ++style Widget_AppCompat_SearchView ++style Widget_AppCompat_SearchView_ActionBar ++style Widget_AppCompat_SeekBar ++style Widget_AppCompat_SeekBar_Discrete ++style Widget_AppCompat_Spinner ++style Widget_AppCompat_Spinner_DropDown ++style Widget_AppCompat_Spinner_DropDown_ActionBar ++style Widget_AppCompat_Spinner_Underlined ++style Widget_AppCompat_TextView ++style Widget_AppCompat_TextView_SpinnerItem ++style Widget_AppCompat_Toolbar ++style Widget_AppCompat_Toolbar_Button_Navigation ++style Widget_Autofill ++style Widget_Autofill_InlineSuggestionChip ++style Widget_Autofill_InlineSuggestionEndIconStyle ++style Widget_Autofill_InlineSuggestionStartIconStyle ++style Widget_Autofill_InlineSuggestionSubtitle ++style Widget_Autofill_InlineSuggestionTitle ++style Widget_Compat_NotificationActionContainer ++style Widget_Compat_NotificationActionText ++style Widget_Support_CoordinatorLayout ++style redboxButton ++styleable ActionBar background backgroundSplit backgroundStacked contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation customNavigationLayout displayOptions divider elevation height hideOnContentScroll homeAsUpIndicator homeLayout icon indeterminateProgressStyle itemPadding logo navigationMode popupTheme progressBarPadding progressBarStyle subtitle subtitleTextStyle title titleTextStyle ++styleable ActionBarLayout android_layout_gravity ++styleable ActionMenuItemView android_minWidth ++styleable ActionMenuView ++styleable ActionMode background backgroundSplit closeItemLayout height subtitleTextStyle titleTextStyle ++styleable ActivityChooserView expandActivityOverflowButtonDrawable initialActivityCount ++styleable AlertDialog android_layout buttonIconDimen buttonPanelSideLayout listItemLayout listLayout multiChoiceItemLayout showTitle singleChoiceItemLayout ++styleable AnimatedStateListDrawableCompat android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible ++styleable AnimatedStateListDrawableItem android_drawable android_id ++styleable AnimatedStateListDrawableTransition android_drawable android_fromId android_reversible android_toId ++styleable AppCompatEmojiHelper ++styleable AppCompatImageView android_src srcCompat tint tintMode ++styleable AppCompatSeekBar android_thumb tickMark tickMarkTint tickMarkTintMode ++styleable AppCompatTextHelper android_drawableBottom android_drawableEnd android_drawableLeft android_drawableRight android_drawableStart android_drawableTop android_textAppearance ++styleable AppCompatTextView android_textAppearance autoSizeMaxTextSize autoSizeMinTextSize autoSizePresetSizes autoSizeStepGranularity autoSizeTextType drawableBottomCompat drawableEndCompat drawableLeftCompat drawableRightCompat drawableStartCompat drawableTint drawableTintMode drawableTopCompat emojiCompatEnabled firstBaselineToTopHeight fontFamily fontVariationSettings lastBaselineToBottomHeight lineHeight textAllCaps textLocale ++styleable AppCompatTheme actionBarDivider actionBarItemBackground actionBarPopupTheme actionBarSize actionBarSplitStyle actionBarStyle actionBarTabBarStyle actionBarTabStyle actionBarTabTextStyle actionBarTheme actionBarWidgetTheme actionButtonStyle actionDropDownStyle actionMenuTextAppearance actionMenuTextColor actionModeBackground actionModeCloseButtonStyle actionModeCloseContentDescription actionModeCloseDrawable actionModeCopyDrawable actionModeCutDrawable actionModeFindDrawable actionModePasteDrawable actionModePopupWindowStyle actionModeSelectAllDrawable actionModeShareDrawable actionModeSplitBackground actionModeStyle actionModeTheme actionModeWebSearchDrawable actionOverflowButtonStyle actionOverflowMenuStyle activityChooserViewStyle alertDialogButtonGroupStyle alertDialogCenterButtons alertDialogStyle alertDialogTheme android_windowAnimationStyle android_windowIsFloating autoCompleteTextViewStyle borderlessButtonStyle buttonBarButtonStyle buttonBarNegativeButtonStyle buttonBarNeutralButtonStyle buttonBarPositiveButtonStyle buttonBarStyle buttonStyle buttonStyleSmall checkboxStyle checkedTextViewStyle colorAccent colorBackgroundFloating colorButtonNormal colorControlActivated colorControlHighlight colorControlNormal colorError colorPrimary colorPrimaryDark colorSwitchThumbNormal controlBackground dialogCornerRadius dialogPreferredPadding dialogTheme dividerHorizontal dividerVertical dropDownListViewStyle dropdownListPreferredItemHeight editTextBackground editTextColor editTextStyle homeAsUpIndicator imageButtonStyle listChoiceBackgroundIndicator listChoiceIndicatorMultipleAnimated listChoiceIndicatorSingleAnimated listDividerAlertDialog listMenuViewStyle listPopupWindowStyle listPreferredItemHeight listPreferredItemHeightLarge listPreferredItemHeightSmall listPreferredItemPaddingEnd listPreferredItemPaddingLeft listPreferredItemPaddingRight listPreferredItemPaddingStart panelBackground panelMenuListTheme panelMenuListWidth popupMenuStyle popupWindowStyle radioButtonStyle ratingBarStyle ratingBarStyleIndicator ratingBarStyleSmall searchViewStyle seekBarStyle selectableItemBackground selectableItemBackgroundBorderless spinnerDropDownItemStyle spinnerStyle switchStyle textAppearanceLargePopupMenu textAppearanceListItem textAppearanceListItemSecondary textAppearanceListItemSmall textAppearancePopupMenuHeader textAppearanceSearchResultSubtitle textAppearanceSearchResultTitle textAppearanceSmallPopupMenu textColorAlertDialogListItem textColorSearchUrl toolbarNavigationButtonStyle toolbarStyle tooltipForegroundColor tooltipFrameBackground viewInflaterClass windowActionBar windowActionBarOverlay windowActionModeOverlay windowFixedHeightMajor windowFixedHeightMinor windowFixedWidthMajor windowFixedWidthMinor windowMinWidthMajor windowMinWidthMinor windowNoTitle ++styleable Autofill_InlineSuggestion autofillInlineSuggestionChip autofillInlineSuggestionEndIconStyle autofillInlineSuggestionStartIconStyle autofillInlineSuggestionSubtitle autofillInlineSuggestionTitle isAutofillInlineSuggestionTheme ++styleable ButtonBarLayout allowStacking ++styleable Capability queryPatterns shortcutMatchRequired ++styleable CheckedTextView android_checkMark checkMarkCompat checkMarkTint checkMarkTintMode ++styleable ColorStateListItem alpha android_alpha android_color android_lStar lStar ++styleable CompoundButton android_button buttonCompat buttonTint buttonTintMode ++styleable CoordinatorLayout keylines statusBarBackground ++styleable CoordinatorLayout_Layout android_layout_gravity layout_anchor layout_anchorGravity layout_behavior layout_dodgeInsetEdges layout_insetEdge layout_keyline ++styleable DrawerArrowToggle arrowHeadLength arrowShaftLength barLength color drawableSize gapBetweenBars spinBars thickness ++styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery fontProviderSystemFontFamily ++styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex ++styleable Fragment android_id android_name android_tag ++styleable FragmentContainerView android_name android_tag ++styleable GenericDraweeHierarchy actualImageScaleType backgroundImage fadeDuration failureImage failureImageScaleType overlayImage placeholderImage placeholderImageScaleType pressedStateOverlayImage progressBarAutoRotateInterval progressBarImage progressBarImageScaleType retryImage retryImageScaleType roundAsCircle roundBottomEnd roundBottomLeft roundBottomRight roundBottomStart roundTopEnd roundTopLeft roundTopRight roundTopStart roundWithOverlayColor roundedCornerRadius roundingBorderColor roundingBorderPadding roundingBorderWidth viewAspectRatio ++styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type ++styleable GradientColorItem android_color android_offset ++styleable LinearLayoutCompat android_baselineAligned android_baselineAlignedChildIndex android_gravity android_orientation android_weightSum divider dividerPadding measureWithLargestChild showDividers ++styleable LinearLayoutCompat_Layout android_layout_gravity android_layout_height android_layout_weight android_layout_width ++styleable ListPopupWindow android_dropDownHorizontalOffset android_dropDownVerticalOffset ++styleable MenuGroup android_checkableBehavior android_enabled android_id android_menuCategory android_orderInCategory android_visible ++styleable MenuItem actionLayout actionProviderClass actionViewClass alphabeticModifiers android_alphabeticShortcut android_checkable android_checked android_enabled android_icon android_id android_menuCategory android_numericShortcut android_onClick android_orderInCategory android_title android_titleCondensed android_visible contentDescription iconTint iconTintMode numericModifiers showAsAction tooltipText ++styleable MenuView android_headerBackground android_horizontalDivider android_itemBackground android_itemIconDisabledAlpha android_itemTextAppearance android_verticalDivider android_windowAnimationStyle preserveIconSpacing subMenuArrow ++styleable PopupWindow android_popupAnimationStyle android_popupBackground overlapAnchor ++styleable PopupWindowBackgroundState state_above_anchor ++styleable RecycleListView paddingBottomNoButtons paddingTopNoTitle ++styleable SearchView android_focusable android_imeOptions android_inputType android_maxWidth closeIcon commitIcon defaultQueryHint goIcon iconifiedByDefault layout queryBackground queryHint searchHintIcon searchIcon submitBackground suggestionRowLayout voiceIcon ++styleable SimpleDraweeView actualImageResource actualImageScaleType actualImageUri backgroundImage fadeDuration failureImage failureImageScaleType overlayImage placeholderImage placeholderImageScaleType pressedStateOverlayImage progressBarAutoRotateInterval progressBarImage progressBarImageScaleType retryImage retryImageScaleType roundAsCircle roundBottomEnd roundBottomLeft roundBottomRight roundBottomStart roundTopEnd roundTopLeft roundTopRight roundTopStart roundWithOverlayColor roundedCornerRadius roundingBorderColor roundingBorderPadding roundingBorderWidth viewAspectRatio ++styleable Spinner android_dropDownWidth android_entries android_popupBackground android_prompt popupTheme ++styleable StateListDrawable android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible ++styleable StateListDrawableItem android_drawable ++styleable SwitchCompat android_textOff android_textOn android_thumb showText splitTrack switchMinWidth switchPadding switchTextAppearance thumbTextPadding thumbTint thumbTintMode track trackTint trackTintMode ++styleable TextAppearance android_fontFamily android_shadowColor android_shadowDx android_shadowDy android_shadowRadius android_textColor android_textColorHint android_textColorLink android_textFontWeight android_textSize android_textStyle android_typeface fontFamily fontVariationSettings textAllCaps textLocale ++styleable Toolbar android_gravity android_minHeight buttonGravity collapseContentDescription collapseIcon contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation logo logoDescription maxButtonHeight menu navigationContentDescription navigationIcon popupTheme subtitle subtitleTextAppearance subtitleTextColor title titleMargin titleMarginBottom titleMarginEnd titleMarginStart titleMarginTop titleMargins titleTextAppearance titleTextColor ++styleable View android_focusable android_theme paddingEnd paddingStart theme ++styleable ViewBackgroundHelper android_background backgroundTint backgroundTintMode ++styleable ViewStubCompat android_id android_inflatedId android_layout ++xml rn_dev_preferences +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/outputs/logs/manifest-merger-debug-report.txt b/node_modules/react-native-fingerprint-scanner/android/build/outputs/logs/manifest-merger-debug-report.txt +new file mode 100644 +index 0000000..5834e7f +--- /dev/null ++++ b/node_modules/react-native-fingerprint-scanner/android/build/outputs/logs/manifest-merger-debug-report.txt +@@ -0,0 +1,41 @@ ++-- Merging decision tree log --- ++manifest ++ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:1:1-8:12 ++INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:1:1-8:12 ++INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:1:1-8:12 ++ package ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:2:5-37 ++ INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ xmlns:android ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:1:11-69 ++uses-permission#android.permission.USE_FINGERPRINT ++ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:3:5-74 ++ android:name ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:3:22-71 ++uses-permission#android.permission.USE_BIOMETRIC ++ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:4:5-71 ++ android:name ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:4:22-69 ++uses-permission#com.fingerprints.service.ACCESS_FINGERPRINT_MANAGER ++ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:5:5-91 ++ android:name ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:5:22-88 ++uses-permission#com.samsung.android.providers.context.permission.WRITE_USE_APP_FEATURE_SURVEY ++ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:6:5-7:104 ++ android:name ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml:7:9-101 ++uses-sdk ++INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml reason: use-sdk injection requested ++INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ android:targetSdkVersion ++ INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ android:minSdkVersion ++ INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ ADDED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml ++ INJECTED from /Users/noumantahir/ReactNativeProjects/ecency-mobile/node_modules/react-native-fingerprint-scanner/android/src/main/AndroidManifest.xml +diff --git a/node_modules/react-native-fingerprint-scanner/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/node_modules/react-native-fingerprint-scanner/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +new file mode 100644 +index 0000000..e34b4f1 +Binary files /dev/null and b/node_modules/react-native-fingerprint-scanner/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin differ +diff --git a/node_modules/react-native-fingerprint-scanner/examples/src/Application.container.js b/node_modules/react-native-fingerprint-scanner/examples/src/Application.container.js +index 181f1d2..74b00ea 100644 +--- a/node_modules/react-native-fingerprint-scanner/examples/src/Application.container.js ++++ b/node_modules/react-native-fingerprint-scanner/examples/src/Application.container.js +@@ -31,13 +31,15 @@ class Application extends Component { + }; + + componentDidMount() { +- AppState.addEventListener('change', this.handleAppStateChange); ++ this.appStateSub = AppState.addEventListener('change', this.handleAppStateChange); + // Get initial fingerprint enrolled + this.detectFingerprintAvailable(); + } + + componentWillUnmount() { +- AppState.removeEventListener('change', this.handleAppStateChange); ++ if(this.appStateSub){ ++ this.appStateSub.remove() ++ } + } + + detectFingerprintAvailable = () => { +diff --git a/node_modules/react-native-fingerprint-scanner/examples/src/ShakingText.component.js b/node_modules/react-native-fingerprint-scanner/examples/src/ShakingText.component.js +index 19cb20f..1403e65 100644 +--- a/node_modules/react-native-fingerprint-scanner/examples/src/ShakingText.component.js ++++ b/node_modules/react-native-fingerprint-scanner/examples/src/ShakingText.component.js +@@ -5,6 +5,8 @@ import { + Text + } from 'react-native'; + ++import { TextPropTypes } from 'deprecated-react-native-prop-types'; ++ + class ShakingText extends Component { + + componentWillMount() { +@@ -54,7 +56,7 @@ ShakingText.propTypes = { + PropTypes.arrayOf(PropTypes.node), + PropTypes.node + ]), +- style: Text.propTypes.style, ++ style: TextPropTypes.style, + }; + + export default ShakingText; diff --git a/patches/react-native-highlight-words+1.0.1.patch b/patches/react-native-highlight-words+1.0.1.patch new file mode 100644 index 000000000..d7ebe7c5c --- /dev/null +++ b/patches/react-native-highlight-words+1.0.1.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/react-native-highlight-words/index.js b/node_modules/react-native-highlight-words/index.js +index e15cc90..15f0b34 100644 +--- a/node_modules/react-native-highlight-words/index.js ++++ b/node_modules/react-native-highlight-words/index.js +@@ -2,14 +2,15 @@ import React from 'react'; + import {Text} from 'react-native'; + import {findAll} from 'highlight-words-core'; + import PropTypes from 'prop-types'; ++import { TextPropTypes } from 'deprecated-react-native-prop-types'; + + Highlighter.propTypes = { + autoEscape: PropTypes.bool, +- highlightStyle: Text.propTypes.style, ++ highlightStyle: TextPropTypes.style, + searchWords: PropTypes.arrayOf(PropTypes.string).isRequired, + textToHighlight: PropTypes.string.isRequired, + sanitize: PropTypes.func, +- style: Text.propTypes.style ++ style: TextPropTypes.style + }; + + /** diff --git a/patches/react-native-iap+7.5.6.patch b/patches/react-native-iap+7.5.6.patch new file mode 100644 index 000000000..ef8b52333 --- /dev/null +++ b/patches/react-native-iap+7.5.6.patch @@ -0,0 +1,13 @@ +diff --git a/node_modules/react-native-iap/android/build.gradle b/node_modules/react-native-iap/android/build.gradle +index 98fb247..00423e1 100644 +--- a/node_modules/react-native-iap/android/build.gradle ++++ b/node_modules/react-native-iap/android/build.gradle +@@ -55,7 +55,7 @@ android { + repositories { + google() + mavenCentral() +- jcenter() ++ mavenCentral() //patched + } + + dependencies { diff --git a/patches/react-native-modal-dropdown+1.0.2.patch b/patches/react-native-modal-dropdown+1.0.2.patch new file mode 100644 index 000000000..82ab97974 --- /dev/null +++ b/patches/react-native-modal-dropdown+1.0.2.patch @@ -0,0 +1,148 @@ +diff --git a/node_modules/react-native-modal-dropdown/example/android/build.gradle b/node_modules/react-native-modal-dropdown/example/android/build.gradle +index eed9972..61bdb60 100644 +--- a/node_modules/react-native-modal-dropdown/example/android/build.gradle ++++ b/node_modules/react-native-modal-dropdown/example/android/build.gradle +@@ -2,7 +2,7 @@ + + buildscript { + repositories { +- jcenter() ++ mavenCentral() //patched + } + dependencies { + classpath 'com.android.tools.build:gradle:2.2.3' +@@ -15,7 +15,7 @@ buildscript { + allprojects { + repositories { + mavenLocal() +- jcenter() ++ mavenCentral() //patched + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" +diff --git a/node_modules/react-native-modal-dropdown/example/package.json b/node_modules/react-native-modal-dropdown/example/package.json +index f6a90bf..c193d34 100644 +--- a/node_modules/react-native-modal-dropdown/example/package.json ++++ b/node_modules/react-native-modal-dropdown/example/package.json +@@ -13,5 +13,57 @@ + "scripts": { + "start": "node node_modules/react-native/local-cli/cli.js start" + }, +- "private": true ++ "private": true, ++ "react-native": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ }, ++ "browser": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ } + } +diff --git a/node_modules/react-native-modal-dropdown/expo-example/package.json b/node_modules/react-native-modal-dropdown/expo-example/package.json +index a2e74a6..ec044ab 100644 +--- a/node_modules/react-native-modal-dropdown/expo-example/package.json ++++ b/node_modules/react-native-modal-dropdown/expo-example/package.json +@@ -17,5 +17,57 @@ + "@babel/core": "^7.8.6", + "babel-preset-expo": "~8.1.0" + }, +- "private": true ++ "private": true, ++ "react-native": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ }, ++ "browser": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ } + } diff --git a/patches/react-native-modal-popover+2.1.0.patch b/patches/react-native-modal-popover+2.1.0.patch new file mode 100644 index 000000000..825e5681f --- /dev/null +++ b/patches/react-native-modal-popover+2.1.0.patch @@ -0,0 +1,161 @@ +diff --git a/node_modules/react-native-modal-popover/lib/Popover.js b/node_modules/react-native-modal-popover/lib/Popover.js +index ddd7fb2..742105f 100644 +--- a/node_modules/react-native-modal-popover/lib/Popover.js ++++ b/node_modules/react-native-modal-popover/lib/Popover.js +@@ -203,10 +203,12 @@ class Popover extends React.PureComponent { + this.onOrientationChange(); + } + componentDidMount() { +- react_native_1.Dimensions.addEventListener('change', this.onOrientationChange); ++ this.eventSub = react_native_1.Dimensions.addEventListener('change', this.onOrientationChange); + } + componentWillUnmount() { +- react_native_1.Dimensions.removeEventListener('change', this.onOrientationChange); ++ if(this.eventSub){ ++ this.eventSub.remove(); ++ } + } + UNSAFE_componentWillReceiveProps(nextProps) { + const willBeVisible = nextProps.visible; +diff --git a/node_modules/react-native-modal-popover/lib/PopoverController.js b/node_modules/react-native-modal-popover/lib/PopoverController.js +index 005c07f..71e84f4 100644 +--- a/node_modules/react-native-modal-popover/lib/PopoverController.js ++++ b/node_modules/react-native-modal-popover/lib/PopoverController.js +@@ -62,10 +62,12 @@ class PopoverController extends React.PureComponent { + this.closePopover = () => this.setState({ showPopover: false }); + } + componentDidMount() { +- react_native_1.Dimensions.addEventListener('change', this.onOrientationChange); ++ this.eventSub = react_native_1.Dimensions.addEventListener('change', this.onOrientationChange); + } + componentWillUnmount() { +- react_native_1.Dimensions.removeEventListener('change', this.onOrientationChange); ++ if(this.eventSub){ ++ this.eventSub.remove(); ++ } + } + render() { + return this.props.children({ +diff --git a/node_modules/react-native-modal-popover/lib/PopoverTouchable.js b/node_modules/react-native-modal-popover/lib/PopoverTouchable.js +index 09c205f..4291920 100644 +--- a/node_modules/react-native-modal-popover/lib/PopoverTouchable.js ++++ b/node_modules/react-native-modal-popover/lib/PopoverTouchable.js +@@ -58,10 +58,12 @@ class PopoverTouchable extends React.PureComponent { + }; + } + componentDidMount() { +- react_native_1.Dimensions.addEventListener('change', this.onOrientationChange); ++ this.eventSub = react_native_1.Dimensions.addEventListener('change', this.onOrientationChange); + } + componentWillUnmount() { +- react_native_1.Dimensions.removeEventListener('change', this.onOrientationChange); ++ if(this.eventSub){ ++ this.eventSub.remove(); ++ } + } + render() { + const children = React.Children.toArray(this.props.children); +diff --git a/node_modules/react-native-modal-popover/lib/usePopover.js b/node_modules/react-native-modal-popover/lib/usePopover.js +index 75cc72a..a2ce0cd 100644 +--- a/node_modules/react-native-modal-popover/lib/usePopover.js ++++ b/node_modules/react-native-modal-popover/lib/usePopover.js +@@ -45,9 +45,11 @@ function usePopover(calculateStatusBar = false) { + requestAnimationFrame(openPopover); + } + }; +- react_native_1.Dimensions.addEventListener('change', onOrientationChange); ++ const eventSub = react_native_1.Dimensions.addEventListener('change', onOrientationChange); + return () => { +- react_native_1.Dimensions.removeEventListener('change', onOrientationChange); ++ if(eventSub){ ++ eventSub.remove(); ++ } + }; + }, [showPopover, openPopover]); + return result; +diff --git a/node_modules/react-native-modal-popover/src/Popover.tsx b/node_modules/react-native-modal-popover/src/Popover.tsx +index 87a449c..fb288e2 100644 +--- a/node_modules/react-native-modal-popover/src/Popover.tsx ++++ b/node_modules/react-native-modal-popover/src/Popover.tsx +@@ -171,11 +171,13 @@ export class Popover extends React.PureComponent { + } + + componentDidMount() { +- Dimensions.addEventListener('change', this.onOrientationChange); ++ this.eventSub = Dimensions.addEventListener('change', this.onOrientationChange); + } + + componentWillUnmount() { +- Dimensions.removeEventListener('change', this.onOrientationChange); ++ if(this.eventSub){ ++ this.eventSub.remove() ++ } + } + + private computeGeometry = ( +diff --git a/node_modules/react-native-modal-popover/src/PopoverController.tsx b/node_modules/react-native-modal-popover/src/PopoverController.tsx +index a5e6e32..6d50cd8 100644 +--- a/node_modules/react-native-modal-popover/src/PopoverController.tsx ++++ b/node_modules/react-native-modal-popover/src/PopoverController.tsx +@@ -39,11 +39,13 @@ export class PopoverController extends React.PureComponent { + }; + + componentDidMount() { +- Dimensions.addEventListener('change', this.onOrientationChange); ++ this.eventSub = Dimensions.addEventListener('change', this.onOrientationChange); + } + + componentWillUnmount() { +- Dimensions.removeEventListener('change', this.onOrientationChange); ++ if(this.eventSub){ ++ this.eventSub.remove(); ++ } + } + + private onOrientationChange = () => { +diff --git a/node_modules/react-native-modal-popover/src/PopoverTouchable.tsx b/node_modules/react-native-modal-popover/src/PopoverTouchable.tsx +index cbb7526..a43caf5 100644 +--- a/node_modules/react-native-modal-popover/src/PopoverTouchable.tsx ++++ b/node_modules/react-native-modal-popover/src/PopoverTouchable.tsx +@@ -18,6 +18,7 @@ export interface State { + } + + export class PopoverTouchable extends React.PureComponent { ++ + static propTypes = { + onPopoverDisplayed: PropTypes.func, + }; +@@ -33,11 +34,13 @@ export class PopoverTouchable extends React.PureComponent { + } + + componentDidMount() { +- Dimensions.addEventListener('change', this.onOrientationChange); ++ this.eventSub = Dimensions.addEventListener('change', this.onOrientationChange); + } + + componentWillUnmount() { +- Dimensions.removeEventListener('change', this.onOrientationChange); ++ if(this.eventSub){ ++ this.eventSub.remove(); ++ } + } + + private onOrientationChange = () => { +diff --git a/node_modules/react-native-modal-popover/src/usePopover.ts b/node_modules/react-native-modal-popover/src/usePopover.ts +index 2d05b78..7e68dbf 100644 +--- a/node_modules/react-native-modal-popover/src/usePopover.ts ++++ b/node_modules/react-native-modal-popover/src/usePopover.ts +@@ -78,9 +78,11 @@ export function usePopover(calculateStatusBar = false): UsePopoverHook { + requestAnimationFrame(openPopover); + } + }; +- Dimensions.addEventListener('change', onOrientationChange); ++ const eventSub = Dimensions.addEventListener('change', onOrientationChange); + return () => { +- Dimensions.removeEventListener('change', onOrientationChange); ++ if(eventSub){ ++ eventSub.remove(); ++ } + }; + }, [showPopover, openPopover]); + diff --git a/patches/react-native-navigation-bar-color+1.0.0.patch b/patches/react-native-navigation-bar-color+1.0.0.patch new file mode 100644 index 000000000..df4bf0990 --- /dev/null +++ b/patches/react-native-navigation-bar-color+1.0.0.patch @@ -0,0 +1,12 @@ +diff --git a/node_modules/react-native-navigation-bar-color/android/build.gradle b/node_modules/react-native-navigation-bar-color/android/build.gradle +index 24026a4..b1f1d05 100644 +--- a/node_modules/react-native-navigation-bar-color/android/build.gradle ++++ b/node_modules/react-native-navigation-bar-color/android/build.gradle +@@ -1,6 +1,6 @@ + buildscript { + repositories { +- jcenter() ++ mavenCentral() //patched + } + + dependencies { diff --git a/patches/react-native-os+1.2.6.patch b/patches/react-native-os+1.2.6.patch new file mode 100644 index 000000000..e9deb81f9 --- /dev/null +++ b/patches/react-native-os+1.2.6.patch @@ -0,0 +1,20 @@ +diff --git a/node_modules/react-native-os/android/build.gradle b/node_modules/react-native-os/android/build.gradle +index 7055b60..af9f183 100644 +--- a/node_modules/react-native-os/android/build.gradle ++++ b/node_modules/react-native-os/android/build.gradle +@@ -4,7 +4,7 @@ def safeExtGet(prop, fallback) { + + buildscript { + repositories { +- jcenter() ++ mavenCentral() //patched + } + + dependencies { +@@ -44,5 +44,5 @@ repositories { + } + + dependencies { +- compile 'com.facebook.react:react-native:+' ++ implementation 'com.facebook.react:react-native:+' + } diff --git a/patches/react-native-pager-view+5.4.25.patch b/patches/react-native-pager-view+5.4.25.patch new file mode 100644 index 000000000..f72a00f3a --- /dev/null +++ b/patches/react-native-pager-view+5.4.25.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/react-native-pager-view/android/build.gradle b/node_modules/react-native-pager-view/android/build.gradle +index 260b52f..e929c19 100644 +--- a/node_modules/react-native-pager-view/android/build.gradle ++++ b/node_modules/react-native-pager-view/android/build.gradle +@@ -4,7 +4,7 @@ buildscript { + + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + + dependencies { +@@ -51,7 +51,7 @@ android { + + repositories { + mavenCentral() +- jcenter() ++ mavenCentral() //patched + google() + + def found = false diff --git a/patches/react-native-randombytes+3.6.1.patch b/patches/react-native-randombytes+3.6.1.patch new file mode 100644 index 000000000..194ba74ea --- /dev/null +++ b/patches/react-native-randombytes+3.6.1.patch @@ -0,0 +1,20 @@ +diff --git a/node_modules/react-native-randombytes/build.gradle b/node_modules/react-native-randombytes/build.gradle +index cfc3084..76e05a9 100644 +--- a/node_modules/react-native-randombytes/build.gradle ++++ b/node_modules/react-native-randombytes/build.gradle +@@ -1,6 +1,6 @@ + buildscript { + repositories { +- jcenter() ++ mavenCentral() //patched + } + dependencies { + classpath 'com.android.tools.build:gradle:1.3.0' +@@ -13,6 +13,6 @@ buildscript { + allprojects { + repositories { + mavenLocal() +- jcenter() ++ mavenCentral() //patched + } + } diff --git a/patches/react-native-receive-sharing-intent+2.0.0.patch b/patches/react-native-receive-sharing-intent+2.0.0.patch new file mode 100644 index 000000000..72d9b6fa2 --- /dev/null +++ b/patches/react-native-receive-sharing-intent+2.0.0.patch @@ -0,0 +1,71 @@ +diff --git a/node_modules/react-native-receive-sharing-intent/android/build.gradle b/node_modules/react-native-receive-sharing-intent/android/build.gradle +index 02cc8f2..6adbabd 100644 +--- a/node_modules/react-native-receive-sharing-intent/android/build.gradle ++++ b/node_modules/react-native-receive-sharing-intent/android/build.gradle +@@ -4,7 +4,7 @@ buildscript { + + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + + dependencies { +@@ -52,7 +52,6 @@ android { + + repositories { + mavenCentral() +- jcenter() + google() + + def found = false +diff --git a/node_modules/react-native-receive-sharing-intent/android/src/main/java/com/reactnativereceivesharingintent/ReceiveSharingIntentModule.java b/node_modules/react-native-receive-sharing-intent/android/src/main/java/com/reactnativereceivesharingintent/ReceiveSharingIntentModule.java +index f752144..c9be5d2 100644 +--- a/node_modules/react-native-receive-sharing-intent/android/src/main/java/com/reactnativereceivesharingintent/ReceiveSharingIntentModule.java ++++ b/node_modules/react-native-receive-sharing-intent/android/src/main/java/com/reactnativereceivesharingintent/ReceiveSharingIntentModule.java +@@ -18,18 +18,21 @@ public class ReceiveSharingIntentModule extends ReactContextBaseJavaModule { + + private final ReactApplicationContext reactContext; + private ReceiveSharingIntentHelper receiveSharingIntentHelper; ++ private Intent oldIntent; + + public ReceiveSharingIntentModule(ReactApplicationContext reactContext) { + super(reactContext); + this.reactContext = reactContext; + Application applicationContext = (Application) reactContext.getApplicationContext(); + receiveSharingIntentHelper = new ReceiveSharingIntentHelper(applicationContext); ++ + } + + + protected void onNewIntent(Intent intent) { + Activity mActivity = getCurrentActivity(); + if(mActivity == null) { return; } ++ oldIntent = mActivity.getIntent(); + mActivity.setIntent(intent); + } + +@@ -40,7 +43,9 @@ public class ReceiveSharingIntentModule extends ReactContextBaseJavaModule { + if(mActivity == null) { return; } + Intent intent = mActivity.getIntent(); + receiveSharingIntentHelper.sendFileNames(reactContext, intent, promise); +- mActivity.setIntent(null); ++ if (oldIntent != null) { ++ mActivity.setIntent(oldIntent); ++ } + } + + @ReactMethod +diff --git a/node_modules/react-native-receive-sharing-intent/src/ReceiveSharingIntent.ts b/node_modules/react-native-receive-sharing-intent/src/ReceiveSharingIntent.ts +index 735c191..91dab4b 100644 +--- a/node_modules/react-native-receive-sharing-intent/src/ReceiveSharingIntent.ts ++++ b/node_modules/react-native-receive-sharing-intent/src/ReceiveSharingIntent.ts +@@ -33,7 +33,7 @@ class ReceiveSharingIntentModule implements IReceiveSharingIntent { + } + + clearReceivedFiles(){ +- this.isClear = true; ++ ReceiveSharingIntent.clearFileNames(); + } + + diff --git a/patches/react-native-scrollable-tab-view+1.1.0.patch b/patches/react-native-scrollable-tab-view+1.1.0.patch new file mode 100644 index 000000000..83cb9f1cb --- /dev/null +++ b/patches/react-native-scrollable-tab-view+1.1.0.patch @@ -0,0 +1,171 @@ +diff --git a/node_modules/react-native-scrollable-tab-view/DefaultTabBar.js b/node_modules/react-native-scrollable-tab-view/DefaultTabBar.js +index da58b52..c16e40b 100644 +--- a/node_modules/react-native-scrollable-tab-view/DefaultTabBar.js ++++ b/node_modules/react-native-scrollable-tab-view/DefaultTabBar.js +@@ -1,6 +1,7 @@ + const React = require('react'); + const { ViewPropTypes } = ReactNative = require('react-native'); + const PropTypes = require('prop-types'); ++const { TextPropTypes } = require('deprecated-react-native-prop-types'); + const createReactClass = require('create-react-class'); + const { + StyleSheet, +@@ -18,7 +19,7 @@ const DefaultTabBar = createReactClass({ + backgroundColor: PropTypes.string, + activeTextColor: PropTypes.string, + inactiveTextColor: PropTypes.string, +- textStyle: Text.propTypes.style, ++ textStyle: TextPropTypes.style, + tabStyle: ViewPropTypes.style, + renderTab: PropTypes.func, + underlineStyle: ViewPropTypes.style, +diff --git a/node_modules/react-native-scrollable-tab-view/Example/android/build.gradle b/node_modules/react-native-scrollable-tab-view/Example/android/build.gradle +index eed9972..61bdb60 100644 +--- a/node_modules/react-native-scrollable-tab-view/Example/android/build.gradle ++++ b/node_modules/react-native-scrollable-tab-view/Example/android/build.gradle +@@ -2,7 +2,7 @@ + + buildscript { + repositories { +- jcenter() ++ mavenCentral() //patched + } + dependencies { + classpath 'com.android.tools.build:gradle:2.2.3' +@@ -15,7 +15,7 @@ buildscript { + allprojects { + repositories { + mavenLocal() +- jcenter() ++ mavenCentral() //patched + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" +diff --git a/node_modules/react-native-scrollable-tab-view/Example/package.json b/node_modules/react-native-scrollable-tab-view/Example/package.json +index 43348c7..3b037c0 100644 +--- a/node_modules/react-native-scrollable-tab-view/Example/package.json ++++ b/node_modules/react-native-scrollable-tab-view/Example/package.json +@@ -1,26 +1,78 @@ + { +- "name": "Example", +- "version": "0.0.1", +- "private": true, +- "scripts": { +- "start": "node node_modules/react-native/local-cli/cli.js start", +- "test": "jest" +- }, +- "dependencies": { +- "create-react-class": "^15.6.2", +- "react": "16.0.0", +- "react-native": "0.48.4", +- "react-native-scrollable-tab-view": "file:../", +- "react-native-vector-icons": "^4.4.0", +- "react-navigation": "^1.0.0-beta.13" +- }, +- "devDependencies": { +- "babel-jest": "21.2.0", +- "babel-preset-react-native": "4.0.0", +- "jest": "21.2.1", +- "react-test-renderer": "16.0.0" +- }, +- "jest": { +- "preset": "react-native" +- } ++ "name": "Example", ++ "version": "0.0.1", ++ "private": true, ++ "scripts": { ++ "start": "node node_modules/react-native/local-cli/cli.js start", ++ "test": "jest" ++ }, ++ "dependencies": { ++ "create-react-class": "^15.6.2", ++ "react": "16.0.0", ++ "react-native": "0.48.4", ++ "react-native-scrollable-tab-view": "file:../", ++ "react-native-vector-icons": "^4.4.0", ++ "react-navigation": "^1.0.0-beta.13" ++ }, ++ "devDependencies": { ++ "babel-jest": "21.2.0", ++ "babel-preset-react-native": "4.0.0", ++ "jest": "21.2.1", ++ "react-test-renderer": "16.0.0" ++ }, ++ "jest": { ++ "preset": "react-native" ++ }, ++ "react-native": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ }, ++ "browser": { ++ "zlib": "browserify-zlib", ++ "console": "console-browserify", ++ "constants": "constants-browserify", ++ "crypto": "react-native-crypto", ++ "dns": "dns.js", ++ "net": "react-native-tcp", ++ "domain": "domain-browser", ++ "http": "@tradle/react-native-http", ++ "https": "https-browserify", ++ "os": "react-native-os", ++ "path": "path-browserify", ++ "querystring": "querystring-es3", ++ "fs": "react-native-level-fs", ++ "_stream_transform": "readable-stream/transform", ++ "_stream_readable": "readable-stream/readable", ++ "_stream_writable": "readable-stream/writable", ++ "_stream_duplex": "readable-stream/duplex", ++ "_stream_passthrough": "readable-stream/passthrough", ++ "dgram": "react-native-udp", ++ "stream": "stream-browserify", ++ "timers": "timers-browserify", ++ "tty": "tty-browserify", ++ "vm": "vm-browserify", ++ "tls": false ++ } + } +diff --git a/node_modules/react-native-scrollable-tab-view/ScrollableTabBar.js b/node_modules/react-native-scrollable-tab-view/ScrollableTabBar.js +index 1500b2d..0be6fea 100644 +--- a/node_modules/react-native-scrollable-tab-view/ScrollableTabBar.js ++++ b/node_modules/react-native-scrollable-tab-view/ScrollableTabBar.js +@@ -1,6 +1,7 @@ + const React = require('react'); + const { ViewPropTypes } = ReactNative = require('react-native'); + const PropTypes = require('prop-types'); ++const { TextPropTypes } = require('deprecated-react-native-prop-types'); + const createReactClass = require('create-react-class'); + const { + View, +@@ -27,7 +28,7 @@ const ScrollableTabBar = createReactClass({ + style: ViewPropTypes.style, + tabStyle: ViewPropTypes.style, + tabsContainerStyle: ViewPropTypes.style, +- textStyle: Text.propTypes.style, ++ textStyle: TextPropTypes.style, + renderTab: PropTypes.func, + underlineStyle: ViewPropTypes.style, + onScroll: PropTypes.func, diff --git a/patches/react-native-slider+0.11.0.patch b/patches/react-native-slider+0.11.0.patch new file mode 100644 index 000000000..ce4877615 --- /dev/null +++ b/patches/react-native-slider+0.11.0.patch @@ -0,0 +1,42 @@ +diff --git a/node_modules/react-native-slider/lib/Slider.js b/node_modules/react-native-slider/lib/Slider.js +index c640410..fbba022 100644 +--- a/node_modules/react-native-slider/lib/Slider.js ++++ b/node_modules/react-native-slider/lib/Slider.js +@@ -5,6 +5,7 @@ var _react=require("react");var _react2=_interopRequireDefault(_react); + + + var _reactNative=require("react-native"); ++var _depPropTypes=require("deprecated-react-native-prop-types"); + + + +@@ -555,7 +556,7 @@ return false;}}]);return Slider;}(_react.PureComponent);Slider.propTypes={ /** + * The style applied to the thumb. + */thumbStyle:_reactNative.ViewPropTypes.style, /** + * Sets an image for the thumb. +- */thumbImage:_reactNative.Image.propTypes.source, /** ++ */thumbImage:_depPropTypes.ImagePropTypes.source, /** + * Set this to true to visually see the thumb touch rect in green. + */debugTouchArea:_propTypes2.default.bool, /** + * Set to true to animate values with default 'timing' animation type +diff --git a/node_modules/react-native-slider/src/Slider.js b/node_modules/react-native-slider/src/Slider.js +index 37deee5..db33538 100644 +--- a/node_modules/react-native-slider/src/Slider.js ++++ b/node_modules/react-native-slider/src/Slider.js +@@ -15,6 +15,7 @@ import { + } from "react-native"; + + import PropTypes from 'prop-types'; ++import { ImagePropTypes } from 'deprecated-react-native-prop-types'; + + var TRACK_SIZE = 4; + var THUMB_SIZE = 20; +@@ -146,7 +147,7 @@ export default class Slider extends PureComponent { + /** + * Sets an image for the thumb. + */ +- thumbImage: Image.propTypes.source, ++ thumbImage: ImagePropTypes.source, + + /** + * Set this to true to visually see the thumb touch rect in green. diff --git a/patches/react-native-tcp+4.0.0.patch b/patches/react-native-tcp+4.0.0.patch new file mode 100644 index 000000000..9f3662391 --- /dev/null +++ b/patches/react-native-tcp+4.0.0.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/react-native-tcp/android/build.gradle b/node_modules/react-native-tcp/android/build.gradle +index c582eb7..8e7c4c4 100644 +--- a/node_modules/react-native-tcp/android/build.gradle ++++ b/node_modules/react-native-tcp/android/build.gradle +@@ -4,7 +4,7 @@ def safeExtGet(prop, fallback) { + + buildscript { + repositories { +- jcenter() ++ mavenCentral() //patched + } + + dependencies { +@@ -44,6 +44,6 @@ repositories { + } + + dependencies { +- compile 'com.facebook.react:react-native:+' +- compile 'com.koushikdutta.async:androidasync:2.1.6' ++ implementation 'com.facebook.react:react-native:+' ++ implementation 'com.koushikdutta.async:androidasync:2.1.6' + } diff --git a/patches/react-native-vector-icons+6.7.0.patch b/patches/react-native-vector-icons+6.7.0.patch new file mode 100644 index 000000000..1c8fda048 --- /dev/null +++ b/patches/react-native-vector-icons+6.7.0.patch @@ -0,0 +1,22 @@ +diff --git a/node_modules/react-native-vector-icons/android/build.gradle b/node_modules/react-native-vector-icons/android/build.gradle +index 7a686f2..ea53690 100755 +--- a/node_modules/react-native-vector-icons/android/build.gradle ++++ b/node_modules/react-native-vector-icons/android/build.gradle +@@ -5,7 +5,7 @@ buildscript { + if (project == rootProject) { + repositories { + google() +- jcenter() ++ mavenCentral() //patched + } + + dependencies { +@@ -38,7 +38,7 @@ android { + repositories { + mavenLocal() + google() +- jcenter() ++ mavenCentral() //patched + maven { + // All of React Native (JS, Obj-C sources, Android binaries) is installed from npm + url "$rootDir/../node_modules/react-native/android" diff --git a/patches/rn-fetch-blob+0.12.0.patch b/patches/rn-fetch-blob+0.12.0.patch new file mode 100644 index 000000000..d2cac4c0c --- /dev/null +++ b/patches/rn-fetch-blob+0.12.0.patch @@ -0,0 +1,4091 @@ +diff --git a/node_modules/rn-fetch-blob/android/build.gradle b/node_modules/rn-fetch-blob/android/build.gradle +index a4ca7a4..f2b5b7e 100644 +--- a/node_modules/rn-fetch-blob/android/build.gradle ++++ b/node_modules/rn-fetch-blob/android/build.gradle +@@ -6,13 +6,12 @@ def safeExtGet(prop, fallback) { + + repositories { + mavenCentral() +- jcenter() + google() + } + + buildscript { + repositories { +- jcenter() ++ mavenCentral() + google() + } + dependencies { +diff --git a/node_modules/rn-fetch-blob/android/build/.transforms/04e44b0fa2a8d5b33b5f30448973328c/results.bin b/node_modules/rn-fetch-blob/android/build/.transforms/04e44b0fa2a8d5b33b5f30448973328c/results.bin +new file mode 100644 +index 0000000..0d259dd +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/.transforms/04e44b0fa2a8d5b33b5f30448973328c/results.bin +@@ -0,0 +1 @@ ++o/classes +diff --git a/node_modules/rn-fetch-blob/android/build/.transforms/04e44b0fa2a8d5b33b5f30448973328c/transformed/classes/classes.dex b/node_modules/rn-fetch-blob/android/build/.transforms/04e44b0fa2a8d5b33b5f30448973328c/transformed/classes/classes.dex +new file mode 100644 +index 0000000..d75d970 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/.transforms/04e44b0fa2a8d5b33b5f30448973328c/transformed/classes/classes.dex differ +diff --git a/node_modules/rn-fetch-blob/android/build/generated/source/buildConfig/debug/com/RNFetchBlob/BuildConfig.java b/node_modules/rn-fetch-blob/android/build/generated/source/buildConfig/debug/com/RNFetchBlob/BuildConfig.java +new file mode 100644 +index 0000000..af19780 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/generated/source/buildConfig/debug/com/RNFetchBlob/BuildConfig.java +@@ -0,0 +1,10 @@ ++/** ++ * Automatically generated file. DO NOT MODIFY ++ */ ++package com.RNFetchBlob; ++ ++public final class BuildConfig { ++ public static final boolean DEBUG = Boolean.parseBoolean("true"); ++ public static final String LIBRARY_PACKAGE_NAME = "com.RNFetchBlob"; ++ public static final String BUILD_TYPE = "debug"; ++} +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml b/node_modules/rn-fetch-blob/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +new file mode 100644 +index 0000000..9cc5843 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/AndroidManifest.xml +@@ -0,0 +1,45 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json b/node_modules/rn-fetch-blob/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +new file mode 100644 +index 0000000..faf009b +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/aapt_friendly_merged_manifests/debug/aapt/output-metadata.json +@@ -0,0 +1,18 @@ ++{ ++ "version": 3, ++ "artifactType": { ++ "type": "AAPT_FRIENDLY_MERGED_MANIFESTS", ++ "kind": "Directory" ++ }, ++ "applicationId": "com.RNFetchBlob", ++ "variantName": "debug", ++ "elements": [ ++ { ++ "type": "SINGLE", ++ "filters": [], ++ "attributes": [], ++ "outputFile": "AndroidManifest.xml" ++ } ++ ], ++ "elementType": "File" ++} +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/aar_metadata/debug/aar-metadata.properties b/node_modules/rn-fetch-blob/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +new file mode 100644 +index 0000000..8c9c699 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/aar_metadata/debug/aar-metadata.properties +@@ -0,0 +1,4 @@ ++aarFormatVersion=1.0 ++aarMetadataVersion=1.0 ++minCompileSdk=1 ++minAndroidGradlePluginVersion=1.0.0 +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json b/node_modules/rn-fetch-blob/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +new file mode 100644 +index 0000000..9e26dfe +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/annotation_processor_list/debug/annotationProcessors.json +@@ -0,0 +1 @@ ++{} +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/compile_library_classes_jar/debug/classes.jar b/node_modules/rn-fetch-blob/android/build/intermediates/compile_library_classes_jar/debug/classes.jar +new file mode 100644 +index 0000000..3a06320 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/compile_library_classes_jar/debug/classes.jar differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/compile_r_class_jar/debug/R.jar b/node_modules/rn-fetch-blob/android/build/intermediates/compile_r_class_jar/debug/R.jar +new file mode 100644 +index 0000000..0d57633 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/compile_r_class_jar/debug/R.jar differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/compile_symbol_list/debug/R.txt b/node_modules/rn-fetch-blob/android/build/intermediates/compile_symbol_list/debug/R.txt +new file mode 100644 +index 0000000..1cc6629 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/compile_symbol_list/debug/R.txt +@@ -0,0 +1,1960 @@ ++int anim abc_fade_in 0x0 ++int anim abc_fade_out 0x0 ++int anim abc_grow_fade_in_from_bottom 0x0 ++int anim abc_popup_enter 0x0 ++int anim abc_popup_exit 0x0 ++int anim abc_shrink_fade_out_from_bottom 0x0 ++int anim abc_slide_in_bottom 0x0 ++int anim abc_slide_in_top 0x0 ++int anim abc_slide_out_bottom 0x0 ++int anim abc_slide_out_top 0x0 ++int anim abc_tooltip_enter 0x0 ++int anim abc_tooltip_exit 0x0 ++int anim btn_checkbox_to_checked_box_inner_merged_animation 0x0 ++int anim btn_checkbox_to_checked_box_outer_merged_animation 0x0 ++int anim btn_checkbox_to_checked_icon_null_animation 0x0 ++int anim btn_checkbox_to_unchecked_box_inner_merged_animation 0x0 ++int anim btn_checkbox_to_unchecked_check_path_merged_animation 0x0 ++int anim btn_checkbox_to_unchecked_icon_null_animation 0x0 ++int anim btn_radio_to_off_mtrl_dot_group_animation 0x0 ++int anim btn_radio_to_off_mtrl_ring_outer_animation 0x0 ++int anim btn_radio_to_off_mtrl_ring_outer_path_animation 0x0 ++int anim btn_radio_to_on_mtrl_dot_group_animation 0x0 ++int anim btn_radio_to_on_mtrl_ring_outer_animation 0x0 ++int anim btn_radio_to_on_mtrl_ring_outer_path_animation 0x0 ++int anim catalyst_fade_in 0x0 ++int anim catalyst_fade_out 0x0 ++int anim catalyst_push_up_in 0x0 ++int anim catalyst_push_up_out 0x0 ++int anim catalyst_slide_down 0x0 ++int anim catalyst_slide_up 0x0 ++int anim fragment_fast_out_extra_slow_in 0x0 ++int animator fragment_close_enter 0x0 ++int animator fragment_close_exit 0x0 ++int animator fragment_fade_enter 0x0 ++int animator fragment_fade_exit 0x0 ++int animator fragment_open_enter 0x0 ++int animator fragment_open_exit 0x0 ++int attr actionBarDivider 0x0 ++int attr actionBarItemBackground 0x0 ++int attr actionBarPopupTheme 0x0 ++int attr actionBarSize 0x0 ++int attr actionBarSplitStyle 0x0 ++int attr actionBarStyle 0x0 ++int attr actionBarTabBarStyle 0x0 ++int attr actionBarTabStyle 0x0 ++int attr actionBarTabTextStyle 0x0 ++int attr actionBarTheme 0x0 ++int attr actionBarWidgetTheme 0x0 ++int attr actionButtonStyle 0x0 ++int attr actionDropDownStyle 0x0 ++int attr actionLayout 0x0 ++int attr actionMenuTextAppearance 0x0 ++int attr actionMenuTextColor 0x0 ++int attr actionModeBackground 0x0 ++int attr actionModeCloseButtonStyle 0x0 ++int attr actionModeCloseContentDescription 0x0 ++int attr actionModeCloseDrawable 0x0 ++int attr actionModeCopyDrawable 0x0 ++int attr actionModeCutDrawable 0x0 ++int attr actionModeFindDrawable 0x0 ++int attr actionModePasteDrawable 0x0 ++int attr actionModePopupWindowStyle 0x0 ++int attr actionModeSelectAllDrawable 0x0 ++int attr actionModeShareDrawable 0x0 ++int attr actionModeSplitBackground 0x0 ++int attr actionModeStyle 0x0 ++int attr actionModeTheme 0x0 ++int attr actionModeWebSearchDrawable 0x0 ++int attr actionOverflowButtonStyle 0x0 ++int attr actionOverflowMenuStyle 0x0 ++int attr actionProviderClass 0x0 ++int attr actionViewClass 0x0 ++int attr activityChooserViewStyle 0x0 ++int attr actualImageResource 0x0 ++int attr actualImageScaleType 0x0 ++int attr actualImageUri 0x0 ++int attr alertDialogButtonGroupStyle 0x0 ++int attr alertDialogCenterButtons 0x0 ++int attr alertDialogStyle 0x0 ++int attr alertDialogTheme 0x0 ++int attr allowStacking 0x0 ++int attr alpha 0x0 ++int attr alphabeticModifiers 0x0 ++int attr arrowHeadLength 0x0 ++int attr arrowShaftLength 0x0 ++int attr autoCompleteTextViewStyle 0x0 ++int attr autoSizeMaxTextSize 0x0 ++int attr autoSizeMinTextSize 0x0 ++int attr autoSizePresetSizes 0x0 ++int attr autoSizeStepGranularity 0x0 ++int attr autoSizeTextType 0x0 ++int attr autofillInlineSuggestionChip 0x0 ++int attr autofillInlineSuggestionEndIconStyle 0x0 ++int attr autofillInlineSuggestionStartIconStyle 0x0 ++int attr autofillInlineSuggestionSubtitle 0x0 ++int attr autofillInlineSuggestionTitle 0x0 ++int attr background 0x0 ++int attr backgroundImage 0x0 ++int attr backgroundSplit 0x0 ++int attr backgroundStacked 0x0 ++int attr backgroundTint 0x0 ++int attr backgroundTintMode 0x0 ++int attr barLength 0x0 ++int attr borderlessButtonStyle 0x0 ++int attr buttonBarButtonStyle 0x0 ++int attr buttonBarNegativeButtonStyle 0x0 ++int attr buttonBarNeutralButtonStyle 0x0 ++int attr buttonBarPositiveButtonStyle 0x0 ++int attr buttonBarStyle 0x0 ++int attr buttonCompat 0x0 ++int attr buttonGravity 0x0 ++int attr buttonIconDimen 0x0 ++int attr buttonPanelSideLayout 0x0 ++int attr buttonStyle 0x0 ++int attr buttonStyleSmall 0x0 ++int attr buttonTint 0x0 ++int attr buttonTintMode 0x0 ++int attr checkMarkCompat 0x0 ++int attr checkMarkTint 0x0 ++int attr checkMarkTintMode 0x0 ++int attr checkboxStyle 0x0 ++int attr checkedTextViewStyle 0x0 ++int attr closeIcon 0x0 ++int attr closeItemLayout 0x0 ++int attr collapseContentDescription 0x0 ++int attr collapseIcon 0x0 ++int attr color 0x0 ++int attr colorAccent 0x0 ++int attr colorBackgroundFloating 0x0 ++int attr colorButtonNormal 0x0 ++int attr colorControlActivated 0x0 ++int attr colorControlHighlight 0x0 ++int attr colorControlNormal 0x0 ++int attr colorError 0x0 ++int attr colorPrimary 0x0 ++int attr colorPrimaryDark 0x0 ++int attr colorSwitchThumbNormal 0x0 ++int attr commitIcon 0x0 ++int attr contentDescription 0x0 ++int attr contentInsetEnd 0x0 ++int attr contentInsetEndWithActions 0x0 ++int attr contentInsetLeft 0x0 ++int attr contentInsetRight 0x0 ++int attr contentInsetStart 0x0 ++int attr contentInsetStartWithNavigation 0x0 ++int attr controlBackground 0x0 ++int attr customNavigationLayout 0x0 ++int attr defaultQueryHint 0x0 ++int attr dialogCornerRadius 0x0 ++int attr dialogPreferredPadding 0x0 ++int attr dialogTheme 0x0 ++int attr displayOptions 0x0 ++int attr divider 0x0 ++int attr dividerHorizontal 0x0 ++int attr dividerPadding 0x0 ++int attr dividerVertical 0x0 ++int attr drawableBottomCompat 0x0 ++int attr drawableEndCompat 0x0 ++int attr drawableLeftCompat 0x0 ++int attr drawableRightCompat 0x0 ++int attr drawableSize 0x0 ++int attr drawableStartCompat 0x0 ++int attr drawableTint 0x0 ++int attr drawableTintMode 0x0 ++int attr drawableTopCompat 0x0 ++int attr drawerArrowStyle 0x0 ++int attr dropDownListViewStyle 0x0 ++int attr dropdownListPreferredItemHeight 0x0 ++int attr editTextBackground 0x0 ++int attr editTextColor 0x0 ++int attr editTextStyle 0x0 ++int attr elevation 0x0 ++int attr emojiCompatEnabled 0x0 ++int attr expandActivityOverflowButtonDrawable 0x0 ++int attr fadeDuration 0x0 ++int attr failureImage 0x0 ++int attr failureImageScaleType 0x0 ++int attr firstBaselineToTopHeight 0x0 ++int attr font 0x0 ++int attr fontFamily 0x0 ++int attr fontProviderAuthority 0x0 ++int attr fontProviderCerts 0x0 ++int attr fontProviderFetchStrategy 0x0 ++int attr fontProviderFetchTimeout 0x0 ++int attr fontProviderPackage 0x0 ++int attr fontProviderQuery 0x0 ++int attr fontProviderSystemFontFamily 0x0 ++int attr fontStyle 0x0 ++int attr fontVariationSettings 0x0 ++int attr fontWeight 0x0 ++int attr gapBetweenBars 0x0 ++int attr goIcon 0x0 ++int attr height 0x0 ++int attr hideOnContentScroll 0x0 ++int attr homeAsUpIndicator 0x0 ++int attr homeLayout 0x0 ++int attr icon 0x0 ++int attr iconTint 0x0 ++int attr iconTintMode 0x0 ++int attr iconifiedByDefault 0x0 ++int attr imageButtonStyle 0x0 ++int attr indeterminateProgressStyle 0x0 ++int attr initialActivityCount 0x0 ++int attr isAutofillInlineSuggestionTheme 0x0 ++int attr isLightTheme 0x0 ++int attr itemPadding 0x0 ++int attr lStar 0x0 ++int attr lastBaselineToBottomHeight 0x0 ++int attr layout 0x0 ++int attr lineHeight 0x0 ++int attr listChoiceBackgroundIndicator 0x0 ++int attr listChoiceIndicatorMultipleAnimated 0x0 ++int attr listChoiceIndicatorSingleAnimated 0x0 ++int attr listDividerAlertDialog 0x0 ++int attr listItemLayout 0x0 ++int attr listLayout 0x0 ++int attr listMenuViewStyle 0x0 ++int attr listPopupWindowStyle 0x0 ++int attr listPreferredItemHeight 0x0 ++int attr listPreferredItemHeightLarge 0x0 ++int attr listPreferredItemHeightSmall 0x0 ++int attr listPreferredItemPaddingEnd 0x0 ++int attr listPreferredItemPaddingLeft 0x0 ++int attr listPreferredItemPaddingRight 0x0 ++int attr listPreferredItemPaddingStart 0x0 ++int attr logo 0x0 ++int attr logoDescription 0x0 ++int attr maxButtonHeight 0x0 ++int attr measureWithLargestChild 0x0 ++int attr menu 0x0 ++int attr multiChoiceItemLayout 0x0 ++int attr navigationContentDescription 0x0 ++int attr navigationIcon 0x0 ++int attr navigationMode 0x0 ++int attr nestedScrollViewStyle 0x0 ++int attr numericModifiers 0x0 ++int attr overlapAnchor 0x0 ++int attr overlayImage 0x0 ++int attr paddingBottomNoButtons 0x0 ++int attr paddingEnd 0x0 ++int attr paddingStart 0x0 ++int attr paddingTopNoTitle 0x0 ++int attr panelBackground 0x0 ++int attr panelMenuListTheme 0x0 ++int attr panelMenuListWidth 0x0 ++int attr placeholderImage 0x0 ++int attr placeholderImageScaleType 0x0 ++int attr popupMenuStyle 0x0 ++int attr popupTheme 0x0 ++int attr popupWindowStyle 0x0 ++int attr preserveIconSpacing 0x0 ++int attr pressedStateOverlayImage 0x0 ++int attr progressBarAutoRotateInterval 0x0 ++int attr progressBarImage 0x0 ++int attr progressBarImageScaleType 0x0 ++int attr progressBarPadding 0x0 ++int attr progressBarStyle 0x0 ++int attr queryBackground 0x0 ++int attr queryHint 0x0 ++int attr queryPatterns 0x0 ++int attr radioButtonStyle 0x0 ++int attr ratingBarStyle 0x0 ++int attr ratingBarStyleIndicator 0x0 ++int attr ratingBarStyleSmall 0x0 ++int attr retryImage 0x0 ++int attr retryImageScaleType 0x0 ++int attr roundAsCircle 0x0 ++int attr roundBottomEnd 0x0 ++int attr roundBottomLeft 0x0 ++int attr roundBottomRight 0x0 ++int attr roundBottomStart 0x0 ++int attr roundTopEnd 0x0 ++int attr roundTopLeft 0x0 ++int attr roundTopRight 0x0 ++int attr roundTopStart 0x0 ++int attr roundWithOverlayColor 0x0 ++int attr roundedCornerRadius 0x0 ++int attr roundingBorderColor 0x0 ++int attr roundingBorderPadding 0x0 ++int attr roundingBorderWidth 0x0 ++int attr searchHintIcon 0x0 ++int attr searchIcon 0x0 ++int attr searchViewStyle 0x0 ++int attr seekBarStyle 0x0 ++int attr selectableItemBackground 0x0 ++int attr selectableItemBackgroundBorderless 0x0 ++int attr shortcutMatchRequired 0x0 ++int attr showAsAction 0x0 ++int attr showDividers 0x0 ++int attr showText 0x0 ++int attr showTitle 0x0 ++int attr singleChoiceItemLayout 0x0 ++int attr spinBars 0x0 ++int attr spinnerDropDownItemStyle 0x0 ++int attr spinnerStyle 0x0 ++int attr splitTrack 0x0 ++int attr srcCompat 0x0 ++int attr state_above_anchor 0x0 ++int attr subMenuArrow 0x0 ++int attr submitBackground 0x0 ++int attr subtitle 0x0 ++int attr subtitleTextAppearance 0x0 ++int attr subtitleTextColor 0x0 ++int attr subtitleTextStyle 0x0 ++int attr suggestionRowLayout 0x0 ++int attr switchMinWidth 0x0 ++int attr switchPadding 0x0 ++int attr switchStyle 0x0 ++int attr switchTextAppearance 0x0 ++int attr textAllCaps 0x0 ++int attr textAppearanceLargePopupMenu 0x0 ++int attr textAppearanceListItem 0x0 ++int attr textAppearanceListItemSecondary 0x0 ++int attr textAppearanceListItemSmall 0x0 ++int attr textAppearancePopupMenuHeader 0x0 ++int attr textAppearanceSearchResultSubtitle 0x0 ++int attr textAppearanceSearchResultTitle 0x0 ++int attr textAppearanceSmallPopupMenu 0x0 ++int attr textColorAlertDialogListItem 0x0 ++int attr textColorSearchUrl 0x0 ++int attr textLocale 0x0 ++int attr theme 0x0 ++int attr thickness 0x0 ++int attr thumbTextPadding 0x0 ++int attr thumbTint 0x0 ++int attr thumbTintMode 0x0 ++int attr tickMark 0x0 ++int attr tickMarkTint 0x0 ++int attr tickMarkTintMode 0x0 ++int attr tint 0x0 ++int attr tintMode 0x0 ++int attr title 0x0 ++int attr titleMargin 0x0 ++int attr titleMarginBottom 0x0 ++int attr titleMarginEnd 0x0 ++int attr titleMarginStart 0x0 ++int attr titleMarginTop 0x0 ++int attr titleMargins 0x0 ++int attr titleTextAppearance 0x0 ++int attr titleTextColor 0x0 ++int attr titleTextStyle 0x0 ++int attr toolbarNavigationButtonStyle 0x0 ++int attr toolbarStyle 0x0 ++int attr tooltipForegroundColor 0x0 ++int attr tooltipFrameBackground 0x0 ++int attr tooltipText 0x0 ++int attr track 0x0 ++int attr trackTint 0x0 ++int attr trackTintMode 0x0 ++int attr ttcIndex 0x0 ++int attr viewAspectRatio 0x0 ++int attr viewInflaterClass 0x0 ++int attr voiceIcon 0x0 ++int attr windowActionBar 0x0 ++int attr windowActionBarOverlay 0x0 ++int attr windowActionModeOverlay 0x0 ++int attr windowFixedHeightMajor 0x0 ++int attr windowFixedHeightMinor 0x0 ++int attr windowFixedWidthMajor 0x0 ++int attr windowFixedWidthMinor 0x0 ++int attr windowMinWidthMajor 0x0 ++int attr windowMinWidthMinor 0x0 ++int attr windowNoTitle 0x0 ++int bool abc_action_bar_embed_tabs 0x0 ++int bool abc_config_actionMenuItemAllCaps 0x0 ++int color abc_background_cache_hint_selector_material_dark 0x0 ++int color abc_background_cache_hint_selector_material_light 0x0 ++int color abc_btn_colored_borderless_text_material 0x0 ++int color abc_btn_colored_text_material 0x0 ++int color abc_color_highlight_material 0x0 ++int color abc_decor_view_status_guard 0x0 ++int color abc_decor_view_status_guard_light 0x0 ++int color abc_hint_foreground_material_dark 0x0 ++int color abc_hint_foreground_material_light 0x0 ++int color abc_primary_text_disable_only_material_dark 0x0 ++int color abc_primary_text_disable_only_material_light 0x0 ++int color abc_primary_text_material_dark 0x0 ++int color abc_primary_text_material_light 0x0 ++int color abc_search_url_text 0x0 ++int color abc_search_url_text_normal 0x0 ++int color abc_search_url_text_pressed 0x0 ++int color abc_search_url_text_selected 0x0 ++int color abc_secondary_text_material_dark 0x0 ++int color abc_secondary_text_material_light 0x0 ++int color abc_tint_btn_checkable 0x0 ++int color abc_tint_default 0x0 ++int color abc_tint_edittext 0x0 ++int color abc_tint_seek_thumb 0x0 ++int color abc_tint_spinner 0x0 ++int color abc_tint_switch_track 0x0 ++int color accent_material_dark 0x0 ++int color accent_material_light 0x0 ++int color androidx_core_ripple_material_light 0x0 ++int color androidx_core_secondary_text_default_material_light 0x0 ++int color background_floating_material_dark 0x0 ++int color background_floating_material_light 0x0 ++int color background_material_dark 0x0 ++int color background_material_light 0x0 ++int color bright_foreground_disabled_material_dark 0x0 ++int color bright_foreground_disabled_material_light 0x0 ++int color bright_foreground_inverse_material_dark 0x0 ++int color bright_foreground_inverse_material_light 0x0 ++int color bright_foreground_material_dark 0x0 ++int color bright_foreground_material_light 0x0 ++int color button_material_dark 0x0 ++int color button_material_light 0x0 ++int color catalyst_logbox_background 0x0 ++int color catalyst_redbox_background 0x0 ++int color dim_foreground_disabled_material_dark 0x0 ++int color dim_foreground_disabled_material_light 0x0 ++int color dim_foreground_material_dark 0x0 ++int color dim_foreground_material_light 0x0 ++int color error_color_material_dark 0x0 ++int color error_color_material_light 0x0 ++int color foreground_material_dark 0x0 ++int color foreground_material_light 0x0 ++int color highlighted_text_material_dark 0x0 ++int color highlighted_text_material_light 0x0 ++int color material_blue_grey_800 0x0 ++int color material_blue_grey_900 0x0 ++int color material_blue_grey_950 0x0 ++int color material_deep_teal_200 0x0 ++int color material_deep_teal_500 0x0 ++int color material_grey_100 0x0 ++int color material_grey_300 0x0 ++int color material_grey_50 0x0 ++int color material_grey_600 0x0 ++int color material_grey_800 0x0 ++int color material_grey_850 0x0 ++int color material_grey_900 0x0 ++int color notification_action_color_filter 0x0 ++int color notification_icon_bg_color 0x0 ++int color primary_dark_material_dark 0x0 ++int color primary_dark_material_light 0x0 ++int color primary_material_dark 0x0 ++int color primary_material_light 0x0 ++int color primary_text_default_material_dark 0x0 ++int color primary_text_default_material_light 0x0 ++int color primary_text_disabled_material_dark 0x0 ++int color primary_text_disabled_material_light 0x0 ++int color ripple_material_dark 0x0 ++int color ripple_material_light 0x0 ++int color secondary_text_default_material_dark 0x0 ++int color secondary_text_default_material_light 0x0 ++int color secondary_text_disabled_material_dark 0x0 ++int color secondary_text_disabled_material_light 0x0 ++int color switch_thumb_disabled_material_dark 0x0 ++int color switch_thumb_disabled_material_light 0x0 ++int color switch_thumb_material_dark 0x0 ++int color switch_thumb_material_light 0x0 ++int color switch_thumb_normal_material_dark 0x0 ++int color switch_thumb_normal_material_light 0x0 ++int color tooltip_background_dark 0x0 ++int color tooltip_background_light 0x0 ++int dimen abc_action_bar_content_inset_material 0x0 ++int dimen abc_action_bar_content_inset_with_nav 0x0 ++int dimen abc_action_bar_default_height_material 0x0 ++int dimen abc_action_bar_default_padding_end_material 0x0 ++int dimen abc_action_bar_default_padding_start_material 0x0 ++int dimen abc_action_bar_elevation_material 0x0 ++int dimen abc_action_bar_icon_vertical_padding_material 0x0 ++int dimen abc_action_bar_overflow_padding_end_material 0x0 ++int dimen abc_action_bar_overflow_padding_start_material 0x0 ++int dimen abc_action_bar_stacked_max_height 0x0 ++int dimen abc_action_bar_stacked_tab_max_width 0x0 ++int dimen abc_action_bar_subtitle_bottom_margin_material 0x0 ++int dimen abc_action_bar_subtitle_top_margin_material 0x0 ++int dimen abc_action_button_min_height_material 0x0 ++int dimen abc_action_button_min_width_material 0x0 ++int dimen abc_action_button_min_width_overflow_material 0x0 ++int dimen abc_alert_dialog_button_bar_height 0x0 ++int dimen abc_alert_dialog_button_dimen 0x0 ++int dimen abc_button_inset_horizontal_material 0x0 ++int dimen abc_button_inset_vertical_material 0x0 ++int dimen abc_button_padding_horizontal_material 0x0 ++int dimen abc_button_padding_vertical_material 0x0 ++int dimen abc_cascading_menus_min_smallest_width 0x0 ++int dimen abc_config_prefDialogWidth 0x0 ++int dimen abc_control_corner_material 0x0 ++int dimen abc_control_inset_material 0x0 ++int dimen abc_control_padding_material 0x0 ++int dimen abc_dialog_corner_radius_material 0x0 ++int dimen abc_dialog_fixed_height_major 0x0 ++int dimen abc_dialog_fixed_height_minor 0x0 ++int dimen abc_dialog_fixed_width_major 0x0 ++int dimen abc_dialog_fixed_width_minor 0x0 ++int dimen abc_dialog_list_padding_bottom_no_buttons 0x0 ++int dimen abc_dialog_list_padding_top_no_title 0x0 ++int dimen abc_dialog_min_width_major 0x0 ++int dimen abc_dialog_min_width_minor 0x0 ++int dimen abc_dialog_padding_material 0x0 ++int dimen abc_dialog_padding_top_material 0x0 ++int dimen abc_dialog_title_divider_material 0x0 ++int dimen abc_disabled_alpha_material_dark 0x0 ++int dimen abc_disabled_alpha_material_light 0x0 ++int dimen abc_dropdownitem_icon_width 0x0 ++int dimen abc_dropdownitem_text_padding_left 0x0 ++int dimen abc_dropdownitem_text_padding_right 0x0 ++int dimen abc_edit_text_inset_bottom_material 0x0 ++int dimen abc_edit_text_inset_horizontal_material 0x0 ++int dimen abc_edit_text_inset_top_material 0x0 ++int dimen abc_floating_window_z 0x0 ++int dimen abc_list_item_height_large_material 0x0 ++int dimen abc_list_item_height_material 0x0 ++int dimen abc_list_item_height_small_material 0x0 ++int dimen abc_list_item_padding_horizontal_material 0x0 ++int dimen abc_panel_menu_list_width 0x0 ++int dimen abc_progress_bar_height_material 0x0 ++int dimen abc_search_view_preferred_height 0x0 ++int dimen abc_search_view_preferred_width 0x0 ++int dimen abc_seekbar_track_background_height_material 0x0 ++int dimen abc_seekbar_track_progress_height_material 0x0 ++int dimen abc_select_dialog_padding_start_material 0x0 ++int dimen abc_star_big 0x0 ++int dimen abc_star_medium 0x0 ++int dimen abc_star_small 0x0 ++int dimen abc_switch_padding 0x0 ++int dimen abc_text_size_body_1_material 0x0 ++int dimen abc_text_size_body_2_material 0x0 ++int dimen abc_text_size_button_material 0x0 ++int dimen abc_text_size_caption_material 0x0 ++int dimen abc_text_size_display_1_material 0x0 ++int dimen abc_text_size_display_2_material 0x0 ++int dimen abc_text_size_display_3_material 0x0 ++int dimen abc_text_size_display_4_material 0x0 ++int dimen abc_text_size_headline_material 0x0 ++int dimen abc_text_size_large_material 0x0 ++int dimen abc_text_size_medium_material 0x0 ++int dimen abc_text_size_menu_header_material 0x0 ++int dimen abc_text_size_menu_material 0x0 ++int dimen abc_text_size_small_material 0x0 ++int dimen abc_text_size_subhead_material 0x0 ++int dimen abc_text_size_subtitle_material_toolbar 0x0 ++int dimen abc_text_size_title_material 0x0 ++int dimen abc_text_size_title_material_toolbar 0x0 ++int dimen autofill_inline_suggestion_icon_size 0x0 ++int dimen compat_button_inset_horizontal_material 0x0 ++int dimen compat_button_inset_vertical_material 0x0 ++int dimen compat_button_padding_horizontal_material 0x0 ++int dimen compat_button_padding_vertical_material 0x0 ++int dimen compat_control_corner_material 0x0 ++int dimen compat_notification_large_icon_max_height 0x0 ++int dimen compat_notification_large_icon_max_width 0x0 ++int dimen disabled_alpha_material_dark 0x0 ++int dimen disabled_alpha_material_light 0x0 ++int dimen highlight_alpha_material_colored 0x0 ++int dimen highlight_alpha_material_dark 0x0 ++int dimen highlight_alpha_material_light 0x0 ++int dimen hint_alpha_material_dark 0x0 ++int dimen hint_alpha_material_light 0x0 ++int dimen hint_pressed_alpha_material_dark 0x0 ++int dimen hint_pressed_alpha_material_light 0x0 ++int dimen notification_action_icon_size 0x0 ++int dimen notification_action_text_size 0x0 ++int dimen notification_big_circle_margin 0x0 ++int dimen notification_content_margin_start 0x0 ++int dimen notification_large_icon_height 0x0 ++int dimen notification_large_icon_width 0x0 ++int dimen notification_main_column_padding_top 0x0 ++int dimen notification_media_narrow_margin 0x0 ++int dimen notification_right_icon_size 0x0 ++int dimen notification_right_side_padding_top 0x0 ++int dimen notification_small_icon_background_padding 0x0 ++int dimen notification_small_icon_size_as_large 0x0 ++int dimen notification_subtext_size 0x0 ++int dimen notification_top_pad 0x0 ++int dimen notification_top_pad_large_text 0x0 ++int dimen tooltip_corner_radius 0x0 ++int dimen tooltip_horizontal_padding 0x0 ++int dimen tooltip_margin 0x0 ++int dimen tooltip_precise_anchor_extra_offset 0x0 ++int dimen tooltip_precise_anchor_threshold 0x0 ++int dimen tooltip_vertical_padding 0x0 ++int dimen tooltip_y_offset_non_touch 0x0 ++int dimen tooltip_y_offset_touch 0x0 ++int drawable abc_ab_share_pack_mtrl_alpha 0x0 ++int drawable abc_action_bar_item_background_material 0x0 ++int drawable abc_btn_borderless_material 0x0 ++int drawable abc_btn_check_material 0x0 ++int drawable abc_btn_check_material_anim 0x0 ++int drawable abc_btn_check_to_on_mtrl_000 0x0 ++int drawable abc_btn_check_to_on_mtrl_015 0x0 ++int drawable abc_btn_colored_material 0x0 ++int drawable abc_btn_default_mtrl_shape 0x0 ++int drawable abc_btn_radio_material 0x0 ++int drawable abc_btn_radio_material_anim 0x0 ++int drawable abc_btn_radio_to_on_mtrl_000 0x0 ++int drawable abc_btn_radio_to_on_mtrl_015 0x0 ++int drawable abc_btn_switch_to_on_mtrl_00001 0x0 ++int drawable abc_btn_switch_to_on_mtrl_00012 0x0 ++int drawable abc_cab_background_internal_bg 0x0 ++int drawable abc_cab_background_top_material 0x0 ++int drawable abc_cab_background_top_mtrl_alpha 0x0 ++int drawable abc_control_background_material 0x0 ++int drawable abc_dialog_material_background 0x0 ++int drawable abc_edit_text_material 0x0 ++int drawable abc_ic_ab_back_material 0x0 ++int drawable abc_ic_arrow_drop_right_black_24dp 0x0 ++int drawable abc_ic_clear_material 0x0 ++int drawable abc_ic_commit_search_api_mtrl_alpha 0x0 ++int drawable abc_ic_go_search_api_material 0x0 ++int drawable abc_ic_menu_copy_mtrl_am_alpha 0x0 ++int drawable abc_ic_menu_cut_mtrl_alpha 0x0 ++int drawable abc_ic_menu_overflow_material 0x0 ++int drawable abc_ic_menu_paste_mtrl_am_alpha 0x0 ++int drawable abc_ic_menu_selectall_mtrl_alpha 0x0 ++int drawable abc_ic_menu_share_mtrl_alpha 0x0 ++int drawable abc_ic_search_api_material 0x0 ++int drawable abc_ic_voice_search_api_material 0x0 ++int drawable abc_item_background_holo_dark 0x0 ++int drawable abc_item_background_holo_light 0x0 ++int drawable abc_list_divider_material 0x0 ++int drawable abc_list_divider_mtrl_alpha 0x0 ++int drawable abc_list_focused_holo 0x0 ++int drawable abc_list_longpressed_holo 0x0 ++int drawable abc_list_pressed_holo_dark 0x0 ++int drawable abc_list_pressed_holo_light 0x0 ++int drawable abc_list_selector_background_transition_holo_dark 0x0 ++int drawable abc_list_selector_background_transition_holo_light 0x0 ++int drawable abc_list_selector_disabled_holo_dark 0x0 ++int drawable abc_list_selector_disabled_holo_light 0x0 ++int drawable abc_list_selector_holo_dark 0x0 ++int drawable abc_list_selector_holo_light 0x0 ++int drawable abc_menu_hardkey_panel_mtrl_mult 0x0 ++int drawable abc_popup_background_mtrl_mult 0x0 ++int drawable abc_ratingbar_indicator_material 0x0 ++int drawable abc_ratingbar_material 0x0 ++int drawable abc_ratingbar_small_material 0x0 ++int drawable abc_scrubber_control_off_mtrl_alpha 0x0 ++int drawable abc_scrubber_control_to_pressed_mtrl_000 0x0 ++int drawable abc_scrubber_control_to_pressed_mtrl_005 0x0 ++int drawable abc_scrubber_primary_mtrl_alpha 0x0 ++int drawable abc_scrubber_track_mtrl_alpha 0x0 ++int drawable abc_seekbar_thumb_material 0x0 ++int drawable abc_seekbar_tick_mark_material 0x0 ++int drawable abc_seekbar_track_material 0x0 ++int drawable abc_spinner_mtrl_am_alpha 0x0 ++int drawable abc_spinner_textfield_background_material 0x0 ++int drawable abc_star_black_48dp 0x0 ++int drawable abc_star_half_black_48dp 0x0 ++int drawable abc_switch_thumb_material 0x0 ++int drawable abc_switch_track_mtrl_alpha 0x0 ++int drawable abc_tab_indicator_material 0x0 ++int drawable abc_tab_indicator_mtrl_alpha 0x0 ++int drawable abc_text_cursor_material 0x0 ++int drawable abc_text_select_handle_left_mtrl 0x0 ++int drawable abc_text_select_handle_middle_mtrl 0x0 ++int drawable abc_text_select_handle_right_mtrl 0x0 ++int drawable abc_textfield_activated_mtrl_alpha 0x0 ++int drawable abc_textfield_default_mtrl_alpha 0x0 ++int drawable abc_textfield_search_activated_mtrl_alpha 0x0 ++int drawable abc_textfield_search_default_mtrl_alpha 0x0 ++int drawable abc_textfield_search_material 0x0 ++int drawable abc_vector_test 0x0 ++int drawable autofill_inline_suggestion_chip_background 0x0 ++int drawable btn_checkbox_checked_mtrl 0x0 ++int drawable btn_checkbox_checked_to_unchecked_mtrl_animation 0x0 ++int drawable btn_checkbox_unchecked_mtrl 0x0 ++int drawable btn_checkbox_unchecked_to_checked_mtrl_animation 0x0 ++int drawable btn_radio_off_mtrl 0x0 ++int drawable btn_radio_off_to_on_mtrl_animation 0x0 ++int drawable btn_radio_on_mtrl 0x0 ++int drawable btn_radio_on_to_off_mtrl_animation 0x0 ++int drawable notification_action_background 0x0 ++int drawable notification_bg 0x0 ++int drawable notification_bg_low 0x0 ++int drawable notification_bg_low_normal 0x0 ++int drawable notification_bg_low_pressed 0x0 ++int drawable notification_bg_normal 0x0 ++int drawable notification_bg_normal_pressed 0x0 ++int drawable notification_icon_background 0x0 ++int drawable notification_template_icon_bg 0x0 ++int drawable notification_template_icon_low_bg 0x0 ++int drawable notification_tile_bg 0x0 ++int drawable notify_panel_notification_icon_bg 0x0 ++int drawable redbox_top_border_background 0x0 ++int drawable test_level_drawable 0x0 ++int drawable tooltip_frame_dark 0x0 ++int drawable tooltip_frame_light 0x0 ++int id accessibility_action_clickable_span 0x0 ++int id accessibility_actions 0x0 ++int id accessibility_collection 0x0 ++int id accessibility_collection_item 0x0 ++int id accessibility_custom_action_0 0x0 ++int id accessibility_custom_action_1 0x0 ++int id accessibility_custom_action_10 0x0 ++int id accessibility_custom_action_11 0x0 ++int id accessibility_custom_action_12 0x0 ++int id accessibility_custom_action_13 0x0 ++int id accessibility_custom_action_14 0x0 ++int id accessibility_custom_action_15 0x0 ++int id accessibility_custom_action_16 0x0 ++int id accessibility_custom_action_17 0x0 ++int id accessibility_custom_action_18 0x0 ++int id accessibility_custom_action_19 0x0 ++int id accessibility_custom_action_2 0x0 ++int id accessibility_custom_action_20 0x0 ++int id accessibility_custom_action_21 0x0 ++int id accessibility_custom_action_22 0x0 ++int id accessibility_custom_action_23 0x0 ++int id accessibility_custom_action_24 0x0 ++int id accessibility_custom_action_25 0x0 ++int id accessibility_custom_action_26 0x0 ++int id accessibility_custom_action_27 0x0 ++int id accessibility_custom_action_28 0x0 ++int id accessibility_custom_action_29 0x0 ++int id accessibility_custom_action_3 0x0 ++int id accessibility_custom_action_30 0x0 ++int id accessibility_custom_action_31 0x0 ++int id accessibility_custom_action_4 0x0 ++int id accessibility_custom_action_5 0x0 ++int id accessibility_custom_action_6 0x0 ++int id accessibility_custom_action_7 0x0 ++int id accessibility_custom_action_8 0x0 ++int id accessibility_custom_action_9 0x0 ++int id accessibility_hint 0x0 ++int id accessibility_label 0x0 ++int id accessibility_links 0x0 ++int id accessibility_role 0x0 ++int id accessibility_state 0x0 ++int id accessibility_value 0x0 ++int id action_bar 0x0 ++int id action_bar_activity_content 0x0 ++int id action_bar_container 0x0 ++int id action_bar_root 0x0 ++int id action_bar_spinner 0x0 ++int id action_bar_subtitle 0x0 ++int id action_bar_title 0x0 ++int id action_container 0x0 ++int id action_context_bar 0x0 ++int id action_divider 0x0 ++int id action_image 0x0 ++int id action_menu_divider 0x0 ++int id action_menu_presenter 0x0 ++int id action_mode_bar 0x0 ++int id action_mode_bar_stub 0x0 ++int id action_mode_close_button 0x0 ++int id action_text 0x0 ++int id actions 0x0 ++int id activity_chooser_view_content 0x0 ++int id add 0x0 ++int id alertTitle 0x0 ++int id async 0x0 ++int id autofill_inline_suggestion_end_icon 0x0 ++int id autofill_inline_suggestion_start_icon 0x0 ++int id autofill_inline_suggestion_subtitle 0x0 ++int id autofill_inline_suggestion_title 0x0 ++int id blocking 0x0 ++int id buttonPanel 0x0 ++int id catalyst_redbox_title 0x0 ++int id center 0x0 ++int id centerCrop 0x0 ++int id centerInside 0x0 ++int id checkbox 0x0 ++int id checked 0x0 ++int id chronometer 0x0 ++int id content 0x0 ++int id contentPanel 0x0 ++int id custom 0x0 ++int id customPanel 0x0 ++int id decor_content_parent 0x0 ++int id default_activity_button 0x0 ++int id dialog_button 0x0 ++int id edit_query 0x0 ++int id expand_activities_button 0x0 ++int id expanded_menu 0x0 ++int id fitBottomStart 0x0 ++int id fitCenter 0x0 ++int id fitEnd 0x0 ++int id fitStart 0x0 ++int id fitXY 0x0 ++int id focusCrop 0x0 ++int id forever 0x0 ++int id fps_text 0x0 ++int id fragment_container_view_tag 0x0 ++int id group_divider 0x0 ++int id home 0x0 ++int id icon 0x0 ++int id icon_group 0x0 ++int id image 0x0 ++int id info 0x0 ++int id italic 0x0 ++int id item1 0x0 ++int id item2 0x0 ++int id item3 0x0 ++int id item4 0x0 ++int id labelled_by 0x0 ++int id line1 0x0 ++int id line3 0x0 ++int id listMode 0x0 ++int id list_item 0x0 ++int id message 0x0 ++int id multiply 0x0 ++int id none 0x0 ++int id normal 0x0 ++int id notification_background 0x0 ++int id notification_main_column 0x0 ++int id notification_main_column_container 0x0 ++int id off 0x0 ++int id on 0x0 ++int id parentPanel 0x0 ++int id pointer_enter 0x0 ++int id pointer_enter_capture 0x0 ++int id pointer_leave 0x0 ++int id pointer_leave_capture 0x0 ++int id pointer_move 0x0 ++int id pointer_move_capture 0x0 ++int id progress_circular 0x0 ++int id progress_horizontal 0x0 ++int id radio 0x0 ++int id react_test_id 0x0 ++int id right_icon 0x0 ++int id right_side 0x0 ++int id rn_frame_file 0x0 ++int id rn_frame_method 0x0 ++int id rn_redbox_dismiss_button 0x0 ++int id rn_redbox_line_separator 0x0 ++int id rn_redbox_loading_indicator 0x0 ++int id rn_redbox_reload_button 0x0 ++int id rn_redbox_report_button 0x0 ++int id rn_redbox_report_label 0x0 ++int id rn_redbox_stack 0x0 ++int id screen 0x0 ++int id scrollIndicatorDown 0x0 ++int id scrollIndicatorUp 0x0 ++int id scrollView 0x0 ++int id search_badge 0x0 ++int id search_bar 0x0 ++int id search_button 0x0 ++int id search_close_btn 0x0 ++int id search_edit_frame 0x0 ++int id search_go_btn 0x0 ++int id search_mag_icon 0x0 ++int id search_plate 0x0 ++int id search_src_text 0x0 ++int id search_voice_btn 0x0 ++int id select_dialog_listview 0x0 ++int id shortcut 0x0 ++int id spacer 0x0 ++int id special_effects_controller_view_tag 0x0 ++int id split_action_bar 0x0 ++int id src_atop 0x0 ++int id src_in 0x0 ++int id src_over 0x0 ++int id submenuarrow 0x0 ++int id submit_area 0x0 ++int id tabMode 0x0 ++int id tag_accessibility_actions 0x0 ++int id tag_accessibility_clickable_spans 0x0 ++int id tag_accessibility_heading 0x0 ++int id tag_accessibility_pane_title 0x0 ++int id tag_on_apply_window_listener 0x0 ++int id tag_on_receive_content_listener 0x0 ++int id tag_on_receive_content_mime_types 0x0 ++int id tag_screen_reader_focusable 0x0 ++int id tag_state_description 0x0 ++int id tag_transition_group 0x0 ++int id tag_unhandled_key_event_manager 0x0 ++int id tag_unhandled_key_listeners 0x0 ++int id tag_window_insets_animation_callback 0x0 ++int id text 0x0 ++int id text2 0x0 ++int id textSpacerNoButtons 0x0 ++int id textSpacerNoTitle 0x0 ++int id time 0x0 ++int id title 0x0 ++int id titleDividerNoCustom 0x0 ++int id title_template 0x0 ++int id topPanel 0x0 ++int id unchecked 0x0 ++int id uniform 0x0 ++int id up 0x0 ++int id view_tag_instance_handle 0x0 ++int id view_tag_native_id 0x0 ++int id view_tree_lifecycle_owner 0x0 ++int id view_tree_saved_state_registry_owner 0x0 ++int id view_tree_view_model_store_owner 0x0 ++int id visible_removing_fragment_view_tag 0x0 ++int id wrap_content 0x0 ++int integer abc_config_activityDefaultDur 0x0 ++int integer abc_config_activityShortDur 0x0 ++int integer cancel_button_image_alpha 0x0 ++int integer config_tooltipAnimTime 0x0 ++int integer react_native_dev_server_port 0x0 ++int integer react_native_inspector_proxy_port 0x0 ++int integer status_bar_notification_info_maxnum 0x0 ++int interpolator btn_checkbox_checked_mtrl_animation_interpolator_0 0x0 ++int interpolator btn_checkbox_checked_mtrl_animation_interpolator_1 0x0 ++int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0 0x0 ++int interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1 0x0 ++int interpolator btn_radio_to_off_mtrl_animation_interpolator_0 0x0 ++int interpolator btn_radio_to_on_mtrl_animation_interpolator_0 0x0 ++int interpolator fast_out_slow_in 0x0 ++int layout abc_action_bar_title_item 0x0 ++int layout abc_action_bar_up_container 0x0 ++int layout abc_action_menu_item_layout 0x0 ++int layout abc_action_menu_layout 0x0 ++int layout abc_action_mode_bar 0x0 ++int layout abc_action_mode_close_item_material 0x0 ++int layout abc_activity_chooser_view 0x0 ++int layout abc_activity_chooser_view_list_item 0x0 ++int layout abc_alert_dialog_button_bar_material 0x0 ++int layout abc_alert_dialog_material 0x0 ++int layout abc_alert_dialog_title_material 0x0 ++int layout abc_cascading_menu_item_layout 0x0 ++int layout abc_dialog_title_material 0x0 ++int layout abc_expanded_menu_layout 0x0 ++int layout abc_list_menu_item_checkbox 0x0 ++int layout abc_list_menu_item_icon 0x0 ++int layout abc_list_menu_item_layout 0x0 ++int layout abc_list_menu_item_radio 0x0 ++int layout abc_popup_menu_header_item_layout 0x0 ++int layout abc_popup_menu_item_layout 0x0 ++int layout abc_screen_content_include 0x0 ++int layout abc_screen_simple 0x0 ++int layout abc_screen_simple_overlay_action_mode 0x0 ++int layout abc_screen_toolbar 0x0 ++int layout abc_search_dropdown_item_icons_2line 0x0 ++int layout abc_search_view 0x0 ++int layout abc_select_dialog_material 0x0 ++int layout abc_tooltip 0x0 ++int layout autofill_inline_suggestion 0x0 ++int layout custom_dialog 0x0 ++int layout dev_loading_view 0x0 ++int layout fps_view 0x0 ++int layout notification_action 0x0 ++int layout notification_action_tombstone 0x0 ++int layout notification_template_custom_big 0x0 ++int layout notification_template_icon_group 0x0 ++int layout notification_template_part_chronometer 0x0 ++int layout notification_template_part_time 0x0 ++int layout redbox_item_frame 0x0 ++int layout redbox_item_title 0x0 ++int layout redbox_view 0x0 ++int layout select_dialog_item_material 0x0 ++int layout select_dialog_multichoice_material 0x0 ++int layout select_dialog_singlechoice_material 0x0 ++int layout support_simple_spinner_dropdown_item 0x0 ++int menu example_menu 0x0 ++int menu example_menu2 0x0 ++int string abc_action_bar_home_description 0x0 ++int string abc_action_bar_up_description 0x0 ++int string abc_action_menu_overflow_description 0x0 ++int string abc_action_mode_done 0x0 ++int string abc_activity_chooser_view_see_all 0x0 ++int string abc_activitychooserview_choose_application 0x0 ++int string abc_capital_off 0x0 ++int string abc_capital_on 0x0 ++int string abc_menu_alt_shortcut_label 0x0 ++int string abc_menu_ctrl_shortcut_label 0x0 ++int string abc_menu_delete_shortcut_label 0x0 ++int string abc_menu_enter_shortcut_label 0x0 ++int string abc_menu_function_shortcut_label 0x0 ++int string abc_menu_meta_shortcut_label 0x0 ++int string abc_menu_shift_shortcut_label 0x0 ++int string abc_menu_space_shortcut_label 0x0 ++int string abc_menu_sym_shortcut_label 0x0 ++int string abc_prepend_shortcut_label 0x0 ++int string abc_search_hint 0x0 ++int string abc_searchview_description_clear 0x0 ++int string abc_searchview_description_query 0x0 ++int string abc_searchview_description_search 0x0 ++int string abc_searchview_description_submit 0x0 ++int string abc_searchview_description_voice 0x0 ++int string abc_shareactionprovider_share_with 0x0 ++int string abc_shareactionprovider_share_with_application 0x0 ++int string abc_toolbar_collapse_description 0x0 ++int string alert_description 0x0 ++int string app_name 0x0 ++int string catalyst_change_bundle_location 0x0 ++int string catalyst_copy_button 0x0 ++int string catalyst_debug 0x0 ++int string catalyst_debug_chrome 0x0 ++int string catalyst_debug_chrome_stop 0x0 ++int string catalyst_debug_connecting 0x0 ++int string catalyst_debug_error 0x0 ++int string catalyst_debug_open 0x0 ++int string catalyst_debug_stop 0x0 ++int string catalyst_devtools_open 0x0 ++int string catalyst_dismiss_button 0x0 ++int string catalyst_heap_capture 0x0 ++int string catalyst_hot_reloading 0x0 ++int string catalyst_hot_reloading_auto_disable 0x0 ++int string catalyst_hot_reloading_auto_enable 0x0 ++int string catalyst_hot_reloading_stop 0x0 ++int string catalyst_inspector 0x0 ++int string catalyst_inspector_stop 0x0 ++int string catalyst_loading_from_url 0x0 ++int string catalyst_open_flipper_error 0x0 ++int string catalyst_perf_monitor 0x0 ++int string catalyst_perf_monitor_stop 0x0 ++int string catalyst_reload 0x0 ++int string catalyst_reload_button 0x0 ++int string catalyst_reload_error 0x0 ++int string catalyst_report_button 0x0 ++int string catalyst_sample_profiler_disable 0x0 ++int string catalyst_sample_profiler_enable 0x0 ++int string catalyst_settings 0x0 ++int string catalyst_settings_title 0x0 ++int string combobox_description 0x0 ++int string header_description 0x0 ++int string image_description 0x0 ++int string imagebutton_description 0x0 ++int string link_description 0x0 ++int string menu_description 0x0 ++int string menubar_description 0x0 ++int string menuitem_description 0x0 ++int string progressbar_description 0x0 ++int string radiogroup_description 0x0 ++int string rn_tab_description 0x0 ++int string scrollbar_description 0x0 ++int string search_menu_title 0x0 ++int string spinbutton_description 0x0 ++int string state_busy_description 0x0 ++int string state_collapsed_description 0x0 ++int string state_expanded_description 0x0 ++int string state_mixed_description 0x0 ++int string state_off_description 0x0 ++int string state_on_description 0x0 ++int string state_unselected_description 0x0 ++int string status_bar_notification_info_overflow 0x0 ++int string summary_description 0x0 ++int string tablist_description 0x0 ++int string timer_description 0x0 ++int string toolbar_description 0x0 ++int style AlertDialog_AppCompat 0x0 ++int style AlertDialog_AppCompat_Light 0x0 ++int style Animation_AppCompat_Dialog 0x0 ++int style Animation_AppCompat_DropDownUp 0x0 ++int style Animation_AppCompat_Tooltip 0x0 ++int style Animation_Catalyst_LogBox 0x0 ++int style Animation_Catalyst_RedBox 0x0 ++int style Base_AlertDialog_AppCompat 0x0 ++int style Base_AlertDialog_AppCompat_Light 0x0 ++int style Base_Animation_AppCompat_Dialog 0x0 ++int style Base_Animation_AppCompat_DropDownUp 0x0 ++int style Base_Animation_AppCompat_Tooltip 0x0 ++int style Base_DialogWindowTitleBackground_AppCompat 0x0 ++int style Base_DialogWindowTitle_AppCompat 0x0 ++int style Base_TextAppearance_AppCompat 0x0 ++int style Base_TextAppearance_AppCompat_Body1 0x0 ++int style Base_TextAppearance_AppCompat_Body2 0x0 ++int style Base_TextAppearance_AppCompat_Button 0x0 ++int style Base_TextAppearance_AppCompat_Caption 0x0 ++int style Base_TextAppearance_AppCompat_Display1 0x0 ++int style Base_TextAppearance_AppCompat_Display2 0x0 ++int style Base_TextAppearance_AppCompat_Display3 0x0 ++int style Base_TextAppearance_AppCompat_Display4 0x0 ++int style Base_TextAppearance_AppCompat_Headline 0x0 ++int style Base_TextAppearance_AppCompat_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Large 0x0 ++int style Base_TextAppearance_AppCompat_Large_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 ++int style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 ++int style Base_TextAppearance_AppCompat_Medium 0x0 ++int style Base_TextAppearance_AppCompat_Medium_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Menu 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_SearchResult_Title 0x0 ++int style Base_TextAppearance_AppCompat_Small 0x0 ++int style Base_TextAppearance_AppCompat_Small_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Subhead 0x0 ++int style Base_TextAppearance_AppCompat_Subhead_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Title 0x0 ++int style Base_TextAppearance_AppCompat_Title_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Tooltip 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 ++int style Base_TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Colored 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Button_Inverse 0x0 ++int style Base_TextAppearance_AppCompat_Widget_DropDownItem 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 ++int style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 ++int style Base_TextAppearance_AppCompat_Widget_Switch 0x0 ++int style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 ++int style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 ++int style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 ++int style Base_TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 ++int style Base_ThemeOverlay_AppCompat 0x0 ++int style Base_ThemeOverlay_AppCompat_ActionBar 0x0 ++int style Base_ThemeOverlay_AppCompat_Dark 0x0 ++int style Base_ThemeOverlay_AppCompat_Dark_ActionBar 0x0 ++int style Base_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_ThemeOverlay_AppCompat_Dialog_Alert 0x0 ++int style Base_ThemeOverlay_AppCompat_Light 0x0 ++int style Base_Theme_AppCompat 0x0 ++int style Base_Theme_AppCompat_CompactMenu 0x0 ++int style Base_Theme_AppCompat_Dialog 0x0 ++int style Base_Theme_AppCompat_DialogWhenLarge 0x0 ++int style Base_Theme_AppCompat_Dialog_Alert 0x0 ++int style Base_Theme_AppCompat_Dialog_FixedSize 0x0 ++int style Base_Theme_AppCompat_Dialog_MinWidth 0x0 ++int style Base_Theme_AppCompat_Light 0x0 ++int style Base_Theme_AppCompat_Light_DarkActionBar 0x0 ++int style Base_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_Theme_AppCompat_Light_DialogWhenLarge 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_Alert 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_FixedSize 0x0 ++int style Base_Theme_AppCompat_Light_Dialog_MinWidth 0x0 ++int style Base_V21_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_V21_Theme_AppCompat 0x0 ++int style Base_V21_Theme_AppCompat_Dialog 0x0 ++int style Base_V21_Theme_AppCompat_Light 0x0 ++int style Base_V21_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_V22_Theme_AppCompat 0x0 ++int style Base_V22_Theme_AppCompat_Light 0x0 ++int style Base_V23_Theme_AppCompat 0x0 ++int style Base_V23_Theme_AppCompat_Light 0x0 ++int style Base_V26_Theme_AppCompat 0x0 ++int style Base_V26_Theme_AppCompat_Light 0x0 ++int style Base_V26_Widget_AppCompat_Toolbar 0x0 ++int style Base_V28_Theme_AppCompat 0x0 ++int style Base_V28_Theme_AppCompat_Light 0x0 ++int style Base_V7_ThemeOverlay_AppCompat_Dialog 0x0 ++int style Base_V7_Theme_AppCompat 0x0 ++int style Base_V7_Theme_AppCompat_Dialog 0x0 ++int style Base_V7_Theme_AppCompat_Light 0x0 ++int style Base_V7_Theme_AppCompat_Light_Dialog 0x0 ++int style Base_V7_Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Base_V7_Widget_AppCompat_EditText 0x0 ++int style Base_V7_Widget_AppCompat_Toolbar 0x0 ++int style Base_Widget_AppCompat_ActionBar 0x0 ++int style Base_Widget_AppCompat_ActionBar_Solid 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabBar 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabText 0x0 ++int style Base_Widget_AppCompat_ActionBar_TabView 0x0 ++int style Base_Widget_AppCompat_ActionButton 0x0 ++int style Base_Widget_AppCompat_ActionButton_CloseMode 0x0 ++int style Base_Widget_AppCompat_ActionButton_Overflow 0x0 ++int style Base_Widget_AppCompat_ActionMode 0x0 ++int style Base_Widget_AppCompat_ActivityChooserView 0x0 ++int style Base_Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Base_Widget_AppCompat_Button 0x0 ++int style Base_Widget_AppCompat_ButtonBar 0x0 ++int style Base_Widget_AppCompat_ButtonBar_AlertDialog 0x0 ++int style Base_Widget_AppCompat_Button_Borderless 0x0 ++int style Base_Widget_AppCompat_Button_Borderless_Colored 0x0 ++int style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 ++int style Base_Widget_AppCompat_Button_Colored 0x0 ++int style Base_Widget_AppCompat_Button_Small 0x0 ++int style Base_Widget_AppCompat_CompoundButton_CheckBox 0x0 ++int style Base_Widget_AppCompat_CompoundButton_RadioButton 0x0 ++int style Base_Widget_AppCompat_CompoundButton_Switch 0x0 ++int style Base_Widget_AppCompat_DrawerArrowToggle 0x0 ++int style Base_Widget_AppCompat_DrawerArrowToggle_Common 0x0 ++int style Base_Widget_AppCompat_DropDownItem_Spinner 0x0 ++int style Base_Widget_AppCompat_EditText 0x0 ++int style Base_Widget_AppCompat_ImageButton 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_Solid 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabBar 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabText 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 ++int style Base_Widget_AppCompat_Light_ActionBar_TabView 0x0 ++int style Base_Widget_AppCompat_Light_PopupMenu 0x0 ++int style Base_Widget_AppCompat_Light_PopupMenu_Overflow 0x0 ++int style Base_Widget_AppCompat_ListMenuView 0x0 ++int style Base_Widget_AppCompat_ListPopupWindow 0x0 ++int style Base_Widget_AppCompat_ListView 0x0 ++int style Base_Widget_AppCompat_ListView_DropDown 0x0 ++int style Base_Widget_AppCompat_ListView_Menu 0x0 ++int style Base_Widget_AppCompat_PopupMenu 0x0 ++int style Base_Widget_AppCompat_PopupMenu_Overflow 0x0 ++int style Base_Widget_AppCompat_PopupWindow 0x0 ++int style Base_Widget_AppCompat_ProgressBar 0x0 ++int style Base_Widget_AppCompat_ProgressBar_Horizontal 0x0 ++int style Base_Widget_AppCompat_RatingBar 0x0 ++int style Base_Widget_AppCompat_RatingBar_Indicator 0x0 ++int style Base_Widget_AppCompat_RatingBar_Small 0x0 ++int style Base_Widget_AppCompat_SearchView 0x0 ++int style Base_Widget_AppCompat_SearchView_ActionBar 0x0 ++int style Base_Widget_AppCompat_SeekBar 0x0 ++int style Base_Widget_AppCompat_SeekBar_Discrete 0x0 ++int style Base_Widget_AppCompat_Spinner 0x0 ++int style Base_Widget_AppCompat_Spinner_Underlined 0x0 ++int style Base_Widget_AppCompat_TextView 0x0 ++int style Base_Widget_AppCompat_TextView_SpinnerItem 0x0 ++int style Base_Widget_AppCompat_Toolbar 0x0 ++int style Base_Widget_AppCompat_Toolbar_Button_Navigation 0x0 ++int style CalendarDatePickerDialog 0x0 ++int style CalendarDatePickerStyle 0x0 ++int style DialogAnimationFade 0x0 ++int style DialogAnimationSlide 0x0 ++int style Platform_AppCompat 0x0 ++int style Platform_AppCompat_Light 0x0 ++int style Platform_ThemeOverlay_AppCompat 0x0 ++int style Platform_ThemeOverlay_AppCompat_Dark 0x0 ++int style Platform_ThemeOverlay_AppCompat_Light 0x0 ++int style Platform_V21_AppCompat 0x0 ++int style Platform_V21_AppCompat_Light 0x0 ++int style Platform_V25_AppCompat 0x0 ++int style Platform_V25_AppCompat_Light 0x0 ++int style Platform_Widget_AppCompat_Spinner 0x0 ++int style RtlOverlay_DialogWindowTitle_AppCompat 0x0 ++int style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem 0x0 ++int style RtlOverlay_Widget_AppCompat_DialogTitle_Icon 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text 0x0 ++int style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title 0x0 ++int style RtlOverlay_Widget_AppCompat_SearchView_MagIcon 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Query 0x0 ++int style RtlOverlay_Widget_AppCompat_Search_DropDown_Text 0x0 ++int style RtlUnderlay_Widget_AppCompat_ActionButton 0x0 ++int style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow 0x0 ++int style SpinnerDatePickerDialog 0x0 ++int style SpinnerDatePickerStyle 0x0 ++int style TextAppearance_AppCompat 0x0 ++int style TextAppearance_AppCompat_Body1 0x0 ++int style TextAppearance_AppCompat_Body2 0x0 ++int style TextAppearance_AppCompat_Button 0x0 ++int style TextAppearance_AppCompat_Caption 0x0 ++int style TextAppearance_AppCompat_Display1 0x0 ++int style TextAppearance_AppCompat_Display2 0x0 ++int style TextAppearance_AppCompat_Display3 0x0 ++int style TextAppearance_AppCompat_Display4 0x0 ++int style TextAppearance_AppCompat_Headline 0x0 ++int style TextAppearance_AppCompat_Inverse 0x0 ++int style TextAppearance_AppCompat_Large 0x0 ++int style TextAppearance_AppCompat_Large_Inverse 0x0 ++int style TextAppearance_AppCompat_Light_SearchResult_Subtitle 0x0 ++int style TextAppearance_AppCompat_Light_SearchResult_Title 0x0 ++int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large 0x0 ++int style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small 0x0 ++int style TextAppearance_AppCompat_Medium 0x0 ++int style TextAppearance_AppCompat_Medium_Inverse 0x0 ++int style TextAppearance_AppCompat_Menu 0x0 ++int style TextAppearance_AppCompat_SearchResult_Subtitle 0x0 ++int style TextAppearance_AppCompat_SearchResult_Title 0x0 ++int style TextAppearance_AppCompat_Small 0x0 ++int style TextAppearance_AppCompat_Small_Inverse 0x0 ++int style TextAppearance_AppCompat_Subhead 0x0 ++int style TextAppearance_AppCompat_Subhead_Inverse 0x0 ++int style TextAppearance_AppCompat_Title 0x0 ++int style TextAppearance_AppCompat_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Tooltip 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Menu 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Title 0x0 ++int style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Title 0x0 ++int style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_Button 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Borderless_Colored 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Colored 0x0 ++int style TextAppearance_AppCompat_Widget_Button_Inverse 0x0 ++int style TextAppearance_AppCompat_Widget_DropDownItem 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Header 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Large 0x0 ++int style TextAppearance_AppCompat_Widget_PopupMenu_Small 0x0 ++int style TextAppearance_AppCompat_Widget_Switch 0x0 ++int style TextAppearance_AppCompat_Widget_TextView_SpinnerItem 0x0 ++int style TextAppearance_Compat_Notification 0x0 ++int style TextAppearance_Compat_Notification_Info 0x0 ++int style TextAppearance_Compat_Notification_Line2 0x0 ++int style TextAppearance_Compat_Notification_Time 0x0 ++int style TextAppearance_Compat_Notification_Title 0x0 ++int style TextAppearance_Widget_AppCompat_ExpandedMenu_Item 0x0 ++int style TextAppearance_Widget_AppCompat_Toolbar_Subtitle 0x0 ++int style TextAppearance_Widget_AppCompat_Toolbar_Title 0x0 ++int style Theme 0x0 ++int style ThemeOverlay_AppCompat 0x0 ++int style ThemeOverlay_AppCompat_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_Dark 0x0 ++int style ThemeOverlay_AppCompat_Dark_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_DayNight 0x0 ++int style ThemeOverlay_AppCompat_DayNight_ActionBar 0x0 ++int style ThemeOverlay_AppCompat_Dialog 0x0 ++int style ThemeOverlay_AppCompat_Dialog_Alert 0x0 ++int style ThemeOverlay_AppCompat_Light 0x0 ++int style Theme_AppCompat 0x0 ++int style Theme_AppCompat_CompactMenu 0x0 ++int style Theme_AppCompat_DayNight 0x0 ++int style Theme_AppCompat_DayNight_DarkActionBar 0x0 ++int style Theme_AppCompat_DayNight_Dialog 0x0 ++int style Theme_AppCompat_DayNight_DialogWhenLarge 0x0 ++int style Theme_AppCompat_DayNight_Dialog_Alert 0x0 ++int style Theme_AppCompat_DayNight_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_DayNight_NoActionBar 0x0 ++int style Theme_AppCompat_Dialog 0x0 ++int style Theme_AppCompat_DialogWhenLarge 0x0 ++int style Theme_AppCompat_Dialog_Alert 0x0 ++int style Theme_AppCompat_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_Empty 0x0 ++int style Theme_AppCompat_Light 0x0 ++int style Theme_AppCompat_Light_DarkActionBar 0x0 ++int style Theme_AppCompat_Light_Dialog 0x0 ++int style Theme_AppCompat_Light_DialogWhenLarge 0x0 ++int style Theme_AppCompat_Light_Dialog_Alert 0x0 ++int style Theme_AppCompat_Light_Dialog_MinWidth 0x0 ++int style Theme_AppCompat_Light_NoActionBar 0x0 ++int style Theme_AppCompat_NoActionBar 0x0 ++int style Theme_AutofillInlineSuggestion 0x0 ++int style Theme_Catalyst 0x0 ++int style Theme_Catalyst_LogBox 0x0 ++int style Theme_Catalyst_RedBox 0x0 ++int style Theme_FullScreenDialog 0x0 ++int style Theme_FullScreenDialogAnimatedFade 0x0 ++int style Theme_FullScreenDialogAnimatedSlide 0x0 ++int style Theme_ReactNative_AppCompat_Light 0x0 ++int style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen 0x0 ++int style Widget_AppCompat_ActionBar 0x0 ++int style Widget_AppCompat_ActionBar_Solid 0x0 ++int style Widget_AppCompat_ActionBar_TabBar 0x0 ++int style Widget_AppCompat_ActionBar_TabText 0x0 ++int style Widget_AppCompat_ActionBar_TabView 0x0 ++int style Widget_AppCompat_ActionButton 0x0 ++int style Widget_AppCompat_ActionButton_CloseMode 0x0 ++int style Widget_AppCompat_ActionButton_Overflow 0x0 ++int style Widget_AppCompat_ActionMode 0x0 ++int style Widget_AppCompat_ActivityChooserView 0x0 ++int style Widget_AppCompat_AutoCompleteTextView 0x0 ++int style Widget_AppCompat_Button 0x0 ++int style Widget_AppCompat_ButtonBar 0x0 ++int style Widget_AppCompat_ButtonBar_AlertDialog 0x0 ++int style Widget_AppCompat_Button_Borderless 0x0 ++int style Widget_AppCompat_Button_Borderless_Colored 0x0 ++int style Widget_AppCompat_Button_ButtonBar_AlertDialog 0x0 ++int style Widget_AppCompat_Button_Colored 0x0 ++int style Widget_AppCompat_Button_Small 0x0 ++int style Widget_AppCompat_CompoundButton_CheckBox 0x0 ++int style Widget_AppCompat_CompoundButton_RadioButton 0x0 ++int style Widget_AppCompat_CompoundButton_Switch 0x0 ++int style Widget_AppCompat_DrawerArrowToggle 0x0 ++int style Widget_AppCompat_DropDownItem_Spinner 0x0 ++int style Widget_AppCompat_EditText 0x0 ++int style Widget_AppCompat_ImageButton 0x0 ++int style Widget_AppCompat_Light_ActionBar 0x0 ++int style Widget_AppCompat_Light_ActionBar_Solid 0x0 ++int style Widget_AppCompat_Light_ActionBar_Solid_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabBar 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabBar_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabText 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabText_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabView 0x0 ++int style Widget_AppCompat_Light_ActionBar_TabView_Inverse 0x0 ++int style Widget_AppCompat_Light_ActionButton 0x0 ++int style Widget_AppCompat_Light_ActionButton_CloseMode 0x0 ++int style Widget_AppCompat_Light_ActionButton_Overflow 0x0 ++int style Widget_AppCompat_Light_ActionMode_Inverse 0x0 ++int style Widget_AppCompat_Light_ActivityChooserView 0x0 ++int style Widget_AppCompat_Light_AutoCompleteTextView 0x0 ++int style Widget_AppCompat_Light_DropDownItem_Spinner 0x0 ++int style Widget_AppCompat_Light_ListPopupWindow 0x0 ++int style Widget_AppCompat_Light_ListView_DropDown 0x0 ++int style Widget_AppCompat_Light_PopupMenu 0x0 ++int style Widget_AppCompat_Light_PopupMenu_Overflow 0x0 ++int style Widget_AppCompat_Light_SearchView 0x0 ++int style Widget_AppCompat_Light_Spinner_DropDown_ActionBar 0x0 ++int style Widget_AppCompat_ListMenuView 0x0 ++int style Widget_AppCompat_ListPopupWindow 0x0 ++int style Widget_AppCompat_ListView 0x0 ++int style Widget_AppCompat_ListView_DropDown 0x0 ++int style Widget_AppCompat_ListView_Menu 0x0 ++int style Widget_AppCompat_PopupMenu 0x0 ++int style Widget_AppCompat_PopupMenu_Overflow 0x0 ++int style Widget_AppCompat_PopupWindow 0x0 ++int style Widget_AppCompat_ProgressBar 0x0 ++int style Widget_AppCompat_ProgressBar_Horizontal 0x0 ++int style Widget_AppCompat_RatingBar 0x0 ++int style Widget_AppCompat_RatingBar_Indicator 0x0 ++int style Widget_AppCompat_RatingBar_Small 0x0 ++int style Widget_AppCompat_SearchView 0x0 ++int style Widget_AppCompat_SearchView_ActionBar 0x0 ++int style Widget_AppCompat_SeekBar 0x0 ++int style Widget_AppCompat_SeekBar_Discrete 0x0 ++int style Widget_AppCompat_Spinner 0x0 ++int style Widget_AppCompat_Spinner_DropDown 0x0 ++int style Widget_AppCompat_Spinner_DropDown_ActionBar 0x0 ++int style Widget_AppCompat_Spinner_Underlined 0x0 ++int style Widget_AppCompat_TextView 0x0 ++int style Widget_AppCompat_TextView_SpinnerItem 0x0 ++int style Widget_AppCompat_Toolbar 0x0 ++int style Widget_AppCompat_Toolbar_Button_Navigation 0x0 ++int style Widget_Autofill 0x0 ++int style Widget_Autofill_InlineSuggestionChip 0x0 ++int style Widget_Autofill_InlineSuggestionEndIconStyle 0x0 ++int style Widget_Autofill_InlineSuggestionStartIconStyle 0x0 ++int style Widget_Autofill_InlineSuggestionSubtitle 0x0 ++int style Widget_Autofill_InlineSuggestionTitle 0x0 ++int style Widget_Compat_NotificationActionContainer 0x0 ++int style Widget_Compat_NotificationActionText 0x0 ++int style redboxButton 0x0 ++int[] styleable ActionBar { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable ActionBar_background 0 ++int styleable ActionBar_backgroundSplit 1 ++int styleable ActionBar_backgroundStacked 2 ++int styleable ActionBar_contentInsetEnd 3 ++int styleable ActionBar_contentInsetEndWithActions 4 ++int styleable ActionBar_contentInsetLeft 5 ++int styleable ActionBar_contentInsetRight 6 ++int styleable ActionBar_contentInsetStart 7 ++int styleable ActionBar_contentInsetStartWithNavigation 8 ++int styleable ActionBar_customNavigationLayout 9 ++int styleable ActionBar_displayOptions 10 ++int styleable ActionBar_divider 11 ++int styleable ActionBar_elevation 12 ++int styleable ActionBar_height 13 ++int styleable ActionBar_hideOnContentScroll 14 ++int styleable ActionBar_homeAsUpIndicator 15 ++int styleable ActionBar_homeLayout 16 ++int styleable ActionBar_icon 17 ++int styleable ActionBar_indeterminateProgressStyle 18 ++int styleable ActionBar_itemPadding 19 ++int styleable ActionBar_logo 20 ++int styleable ActionBar_navigationMode 21 ++int styleable ActionBar_popupTheme 22 ++int styleable ActionBar_progressBarPadding 23 ++int styleable ActionBar_progressBarStyle 24 ++int styleable ActionBar_subtitle 25 ++int styleable ActionBar_subtitleTextStyle 26 ++int styleable ActionBar_title 27 ++int styleable ActionBar_titleTextStyle 28 ++int[] styleable ActionBarLayout { 0x10100b3 } ++int styleable ActionBarLayout_android_layout_gravity 0 ++int[] styleable ActionMenuItemView { 0x101013f } ++int styleable ActionMenuItemView_android_minWidth 0 ++int[] styleable ActionMenuView { } ++int[] styleable ActionMode { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable ActionMode_background 0 ++int styleable ActionMode_backgroundSplit 1 ++int styleable ActionMode_closeItemLayout 2 ++int styleable ActionMode_height 3 ++int styleable ActionMode_subtitleTextStyle 4 ++int styleable ActionMode_titleTextStyle 5 ++int[] styleable ActivityChooserView { 0x0, 0x0 } ++int styleable ActivityChooserView_expandActivityOverflowButtonDrawable 0 ++int styleable ActivityChooserView_initialActivityCount 1 ++int[] styleable AlertDialog { 0x10100f2, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AlertDialog_android_layout 0 ++int styleable AlertDialog_buttonIconDimen 1 ++int styleable AlertDialog_buttonPanelSideLayout 2 ++int styleable AlertDialog_listItemLayout 3 ++int styleable AlertDialog_listLayout 4 ++int styleable AlertDialog_multiChoiceItemLayout 5 ++int styleable AlertDialog_showTitle 6 ++int styleable AlertDialog_singleChoiceItemLayout 7 ++int[] styleable AnimatedStateListDrawableCompat { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } ++int styleable AnimatedStateListDrawableCompat_android_constantSize 0 ++int styleable AnimatedStateListDrawableCompat_android_dither 1 ++int styleable AnimatedStateListDrawableCompat_android_enterFadeDuration 2 ++int styleable AnimatedStateListDrawableCompat_android_exitFadeDuration 3 ++int styleable AnimatedStateListDrawableCompat_android_variablePadding 4 ++int styleable AnimatedStateListDrawableCompat_android_visible 5 ++int[] styleable AnimatedStateListDrawableItem { 0x1010199, 0x10100d0 } ++int styleable AnimatedStateListDrawableItem_android_drawable 0 ++int styleable AnimatedStateListDrawableItem_android_id 1 ++int[] styleable AnimatedStateListDrawableTransition { 0x1010199, 0x101044a, 0x101044b, 0x1010449 } ++int styleable AnimatedStateListDrawableTransition_android_drawable 0 ++int styleable AnimatedStateListDrawableTransition_android_fromId 1 ++int styleable AnimatedStateListDrawableTransition_android_reversible 2 ++int styleable AnimatedStateListDrawableTransition_android_toId 3 ++int[] styleable AppCompatEmojiHelper { } ++int[] styleable AppCompatImageView { 0x1010119, 0x0, 0x0, 0x0 } ++int styleable AppCompatImageView_android_src 0 ++int styleable AppCompatImageView_srcCompat 1 ++int styleable AppCompatImageView_tint 2 ++int styleable AppCompatImageView_tintMode 3 ++int[] styleable AppCompatSeekBar { 0x1010142, 0x0, 0x0, 0x0 } ++int styleable AppCompatSeekBar_android_thumb 0 ++int styleable AppCompatSeekBar_tickMark 1 ++int styleable AppCompatSeekBar_tickMarkTint 2 ++int styleable AppCompatSeekBar_tickMarkTintMode 3 ++int[] styleable AppCompatTextHelper { 0x101016e, 0x1010393, 0x101016f, 0x1010170, 0x1010392, 0x101016d, 0x1010034 } ++int styleable AppCompatTextHelper_android_drawableBottom 0 ++int styleable AppCompatTextHelper_android_drawableEnd 1 ++int styleable AppCompatTextHelper_android_drawableLeft 2 ++int styleable AppCompatTextHelper_android_drawableRight 3 ++int styleable AppCompatTextHelper_android_drawableStart 4 ++int styleable AppCompatTextHelper_android_drawableTop 5 ++int styleable AppCompatTextHelper_android_textAppearance 6 ++int[] styleable AppCompatTextView { 0x1010034, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AppCompatTextView_android_textAppearance 0 ++int styleable AppCompatTextView_autoSizeMaxTextSize 1 ++int styleable AppCompatTextView_autoSizeMinTextSize 2 ++int styleable AppCompatTextView_autoSizePresetSizes 3 ++int styleable AppCompatTextView_autoSizeStepGranularity 4 ++int styleable AppCompatTextView_autoSizeTextType 5 ++int styleable AppCompatTextView_drawableBottomCompat 6 ++int styleable AppCompatTextView_drawableEndCompat 7 ++int styleable AppCompatTextView_drawableLeftCompat 8 ++int styleable AppCompatTextView_drawableRightCompat 9 ++int styleable AppCompatTextView_drawableStartCompat 10 ++int styleable AppCompatTextView_drawableTint 11 ++int styleable AppCompatTextView_drawableTintMode 12 ++int styleable AppCompatTextView_drawableTopCompat 13 ++int styleable AppCompatTextView_emojiCompatEnabled 14 ++int styleable AppCompatTextView_firstBaselineToTopHeight 15 ++int styleable AppCompatTextView_fontFamily 16 ++int styleable AppCompatTextView_fontVariationSettings 17 ++int styleable AppCompatTextView_lastBaselineToBottomHeight 18 ++int styleable AppCompatTextView_lineHeight 19 ++int styleable AppCompatTextView_textAllCaps 20 ++int styleable AppCompatTextView_textLocale 21 ++int[] styleable AppCompatTheme { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x10100ae, 0x1010057, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable AppCompatTheme_actionBarDivider 0 ++int styleable AppCompatTheme_actionBarItemBackground 1 ++int styleable AppCompatTheme_actionBarPopupTheme 2 ++int styleable AppCompatTheme_actionBarSize 3 ++int styleable AppCompatTheme_actionBarSplitStyle 4 ++int styleable AppCompatTheme_actionBarStyle 5 ++int styleable AppCompatTheme_actionBarTabBarStyle 6 ++int styleable AppCompatTheme_actionBarTabStyle 7 ++int styleable AppCompatTheme_actionBarTabTextStyle 8 ++int styleable AppCompatTheme_actionBarTheme 9 ++int styleable AppCompatTheme_actionBarWidgetTheme 10 ++int styleable AppCompatTheme_actionButtonStyle 11 ++int styleable AppCompatTheme_actionDropDownStyle 12 ++int styleable AppCompatTheme_actionMenuTextAppearance 13 ++int styleable AppCompatTheme_actionMenuTextColor 14 ++int styleable AppCompatTheme_actionModeBackground 15 ++int styleable AppCompatTheme_actionModeCloseButtonStyle 16 ++int styleable AppCompatTheme_actionModeCloseContentDescription 17 ++int styleable AppCompatTheme_actionModeCloseDrawable 18 ++int styleable AppCompatTheme_actionModeCopyDrawable 19 ++int styleable AppCompatTheme_actionModeCutDrawable 20 ++int styleable AppCompatTheme_actionModeFindDrawable 21 ++int styleable AppCompatTheme_actionModePasteDrawable 22 ++int styleable AppCompatTheme_actionModePopupWindowStyle 23 ++int styleable AppCompatTheme_actionModeSelectAllDrawable 24 ++int styleable AppCompatTheme_actionModeShareDrawable 25 ++int styleable AppCompatTheme_actionModeSplitBackground 26 ++int styleable AppCompatTheme_actionModeStyle 27 ++int styleable AppCompatTheme_actionModeTheme 28 ++int styleable AppCompatTheme_actionModeWebSearchDrawable 29 ++int styleable AppCompatTheme_actionOverflowButtonStyle 30 ++int styleable AppCompatTheme_actionOverflowMenuStyle 31 ++int styleable AppCompatTheme_activityChooserViewStyle 32 ++int styleable AppCompatTheme_alertDialogButtonGroupStyle 33 ++int styleable AppCompatTheme_alertDialogCenterButtons 34 ++int styleable AppCompatTheme_alertDialogStyle 35 ++int styleable AppCompatTheme_alertDialogTheme 36 ++int styleable AppCompatTheme_android_windowAnimationStyle 37 ++int styleable AppCompatTheme_android_windowIsFloating 38 ++int styleable AppCompatTheme_autoCompleteTextViewStyle 39 ++int styleable AppCompatTheme_borderlessButtonStyle 40 ++int styleable AppCompatTheme_buttonBarButtonStyle 41 ++int styleable AppCompatTheme_buttonBarNegativeButtonStyle 42 ++int styleable AppCompatTheme_buttonBarNeutralButtonStyle 43 ++int styleable AppCompatTheme_buttonBarPositiveButtonStyle 44 ++int styleable AppCompatTheme_buttonBarStyle 45 ++int styleable AppCompatTheme_buttonStyle 46 ++int styleable AppCompatTheme_buttonStyleSmall 47 ++int styleable AppCompatTheme_checkboxStyle 48 ++int styleable AppCompatTheme_checkedTextViewStyle 49 ++int styleable AppCompatTheme_colorAccent 50 ++int styleable AppCompatTheme_colorBackgroundFloating 51 ++int styleable AppCompatTheme_colorButtonNormal 52 ++int styleable AppCompatTheme_colorControlActivated 53 ++int styleable AppCompatTheme_colorControlHighlight 54 ++int styleable AppCompatTheme_colorControlNormal 55 ++int styleable AppCompatTheme_colorError 56 ++int styleable AppCompatTheme_colorPrimary 57 ++int styleable AppCompatTheme_colorPrimaryDark 58 ++int styleable AppCompatTheme_colorSwitchThumbNormal 59 ++int styleable AppCompatTheme_controlBackground 60 ++int styleable AppCompatTheme_dialogCornerRadius 61 ++int styleable AppCompatTheme_dialogPreferredPadding 62 ++int styleable AppCompatTheme_dialogTheme 63 ++int styleable AppCompatTheme_dividerHorizontal 64 ++int styleable AppCompatTheme_dividerVertical 65 ++int styleable AppCompatTheme_dropDownListViewStyle 66 ++int styleable AppCompatTheme_dropdownListPreferredItemHeight 67 ++int styleable AppCompatTheme_editTextBackground 68 ++int styleable AppCompatTheme_editTextColor 69 ++int styleable AppCompatTheme_editTextStyle 70 ++int styleable AppCompatTheme_homeAsUpIndicator 71 ++int styleable AppCompatTheme_imageButtonStyle 72 ++int styleable AppCompatTheme_listChoiceBackgroundIndicator 73 ++int styleable AppCompatTheme_listChoiceIndicatorMultipleAnimated 74 ++int styleable AppCompatTheme_listChoiceIndicatorSingleAnimated 75 ++int styleable AppCompatTheme_listDividerAlertDialog 76 ++int styleable AppCompatTheme_listMenuViewStyle 77 ++int styleable AppCompatTheme_listPopupWindowStyle 78 ++int styleable AppCompatTheme_listPreferredItemHeight 79 ++int styleable AppCompatTheme_listPreferredItemHeightLarge 80 ++int styleable AppCompatTheme_listPreferredItemHeightSmall 81 ++int styleable AppCompatTheme_listPreferredItemPaddingEnd 82 ++int styleable AppCompatTheme_listPreferredItemPaddingLeft 83 ++int styleable AppCompatTheme_listPreferredItemPaddingRight 84 ++int styleable AppCompatTheme_listPreferredItemPaddingStart 85 ++int styleable AppCompatTheme_panelBackground 86 ++int styleable AppCompatTheme_panelMenuListTheme 87 ++int styleable AppCompatTheme_panelMenuListWidth 88 ++int styleable AppCompatTheme_popupMenuStyle 89 ++int styleable AppCompatTheme_popupWindowStyle 90 ++int styleable AppCompatTheme_radioButtonStyle 91 ++int styleable AppCompatTheme_ratingBarStyle 92 ++int styleable AppCompatTheme_ratingBarStyleIndicator 93 ++int styleable AppCompatTheme_ratingBarStyleSmall 94 ++int styleable AppCompatTheme_searchViewStyle 95 ++int styleable AppCompatTheme_seekBarStyle 96 ++int styleable AppCompatTheme_selectableItemBackground 97 ++int styleable AppCompatTheme_selectableItemBackgroundBorderless 98 ++int styleable AppCompatTheme_spinnerDropDownItemStyle 99 ++int styleable AppCompatTheme_spinnerStyle 100 ++int styleable AppCompatTheme_switchStyle 101 ++int styleable AppCompatTheme_textAppearanceLargePopupMenu 102 ++int styleable AppCompatTheme_textAppearanceListItem 103 ++int styleable AppCompatTheme_textAppearanceListItemSecondary 104 ++int styleable AppCompatTheme_textAppearanceListItemSmall 105 ++int styleable AppCompatTheme_textAppearancePopupMenuHeader 106 ++int styleable AppCompatTheme_textAppearanceSearchResultSubtitle 107 ++int styleable AppCompatTheme_textAppearanceSearchResultTitle 108 ++int styleable AppCompatTheme_textAppearanceSmallPopupMenu 109 ++int styleable AppCompatTheme_textColorAlertDialogListItem 110 ++int styleable AppCompatTheme_textColorSearchUrl 111 ++int styleable AppCompatTheme_toolbarNavigationButtonStyle 112 ++int styleable AppCompatTheme_toolbarStyle 113 ++int styleable AppCompatTheme_tooltipForegroundColor 114 ++int styleable AppCompatTheme_tooltipFrameBackground 115 ++int styleable AppCompatTheme_viewInflaterClass 116 ++int styleable AppCompatTheme_windowActionBar 117 ++int styleable AppCompatTheme_windowActionBarOverlay 118 ++int styleable AppCompatTheme_windowActionModeOverlay 119 ++int styleable AppCompatTheme_windowFixedHeightMajor 120 ++int styleable AppCompatTheme_windowFixedHeightMinor 121 ++int styleable AppCompatTheme_windowFixedWidthMajor 122 ++int styleable AppCompatTheme_windowFixedWidthMinor 123 ++int styleable AppCompatTheme_windowMinWidthMajor 124 ++int styleable AppCompatTheme_windowMinWidthMinor 125 ++int styleable AppCompatTheme_windowNoTitle 126 ++int[] styleable Autofill_InlineSuggestion { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionChip 0 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionEndIconStyle 1 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionStartIconStyle 2 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionSubtitle 3 ++int styleable Autofill_InlineSuggestion_autofillInlineSuggestionTitle 4 ++int styleable Autofill_InlineSuggestion_isAutofillInlineSuggestionTheme 5 ++int[] styleable ButtonBarLayout { 0x0 } ++int styleable ButtonBarLayout_allowStacking 0 ++int[] styleable Capability { 0x0, 0x0 } ++int styleable Capability_queryPatterns 0 ++int styleable Capability_shortcutMatchRequired 1 ++int[] styleable CheckedTextView { 0x1010108, 0x0, 0x0, 0x0 } ++int styleable CheckedTextView_android_checkMark 0 ++int styleable CheckedTextView_checkMarkCompat 1 ++int styleable CheckedTextView_checkMarkTint 2 ++int styleable CheckedTextView_checkMarkTintMode 3 ++int[] styleable ColorStateListItem { 0x0, 0x101031f, 0x10101a5, 0x1010647, 0x0 } ++int styleable ColorStateListItem_alpha 0 ++int styleable ColorStateListItem_android_alpha 1 ++int styleable ColorStateListItem_android_color 2 ++int styleable ColorStateListItem_android_lStar 3 ++int styleable ColorStateListItem_lStar 4 ++int[] styleable CompoundButton { 0x1010107, 0x0, 0x0, 0x0 } ++int styleable CompoundButton_android_button 0 ++int styleable CompoundButton_buttonCompat 1 ++int styleable CompoundButton_buttonTint 2 ++int styleable CompoundButton_buttonTintMode 3 ++int[] styleable DrawerArrowToggle { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable DrawerArrowToggle_arrowHeadLength 0 ++int styleable DrawerArrowToggle_arrowShaftLength 1 ++int styleable DrawerArrowToggle_barLength 2 ++int styleable DrawerArrowToggle_color 3 ++int styleable DrawerArrowToggle_drawableSize 4 ++int styleable DrawerArrowToggle_gapBetweenBars 5 ++int styleable DrawerArrowToggle_spinBars 6 ++int styleable DrawerArrowToggle_thickness 7 ++int[] styleable FontFamily { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable FontFamily_fontProviderAuthority 0 ++int styleable FontFamily_fontProviderCerts 1 ++int styleable FontFamily_fontProviderFetchStrategy 2 ++int styleable FontFamily_fontProviderFetchTimeout 3 ++int styleable FontFamily_fontProviderPackage 4 ++int styleable FontFamily_fontProviderQuery 5 ++int styleable FontFamily_fontProviderSystemFontFamily 6 ++int[] styleable FontFamilyFont { 0x1010532, 0x101053f, 0x1010570, 0x1010533, 0x101056f, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable FontFamilyFont_android_font 0 ++int styleable FontFamilyFont_android_fontStyle 1 ++int styleable FontFamilyFont_android_fontVariationSettings 2 ++int styleable FontFamilyFont_android_fontWeight 3 ++int styleable FontFamilyFont_android_ttcIndex 4 ++int styleable FontFamilyFont_font 5 ++int styleable FontFamilyFont_fontStyle 6 ++int styleable FontFamilyFont_fontVariationSettings 7 ++int styleable FontFamilyFont_fontWeight 8 ++int styleable FontFamilyFont_ttcIndex 9 ++int[] styleable Fragment { 0x10100d0, 0x1010003, 0x10100d1 } ++int styleable Fragment_android_id 0 ++int styleable Fragment_android_name 1 ++int styleable Fragment_android_tag 2 ++int[] styleable FragmentContainerView { 0x1010003, 0x10100d1 } ++int styleable FragmentContainerView_android_name 0 ++int styleable FragmentContainerView_android_tag 1 ++int[] styleable GenericDraweeHierarchy { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable GenericDraweeHierarchy_actualImageScaleType 0 ++int styleable GenericDraweeHierarchy_backgroundImage 1 ++int styleable GenericDraweeHierarchy_fadeDuration 2 ++int styleable GenericDraweeHierarchy_failureImage 3 ++int styleable GenericDraweeHierarchy_failureImageScaleType 4 ++int styleable GenericDraweeHierarchy_overlayImage 5 ++int styleable GenericDraweeHierarchy_placeholderImage 6 ++int styleable GenericDraweeHierarchy_placeholderImageScaleType 7 ++int styleable GenericDraweeHierarchy_pressedStateOverlayImage 8 ++int styleable GenericDraweeHierarchy_progressBarAutoRotateInterval 9 ++int styleable GenericDraweeHierarchy_progressBarImage 10 ++int styleable GenericDraweeHierarchy_progressBarImageScaleType 11 ++int styleable GenericDraweeHierarchy_retryImage 12 ++int styleable GenericDraweeHierarchy_retryImageScaleType 13 ++int styleable GenericDraweeHierarchy_roundAsCircle 14 ++int styleable GenericDraweeHierarchy_roundBottomEnd 15 ++int styleable GenericDraweeHierarchy_roundBottomLeft 16 ++int styleable GenericDraweeHierarchy_roundBottomRight 17 ++int styleable GenericDraweeHierarchy_roundBottomStart 18 ++int styleable GenericDraweeHierarchy_roundTopEnd 19 ++int styleable GenericDraweeHierarchy_roundTopLeft 20 ++int styleable GenericDraweeHierarchy_roundTopRight 21 ++int styleable GenericDraweeHierarchy_roundTopStart 22 ++int styleable GenericDraweeHierarchy_roundWithOverlayColor 23 ++int styleable GenericDraweeHierarchy_roundedCornerRadius 24 ++int styleable GenericDraweeHierarchy_roundingBorderColor 25 ++int styleable GenericDraweeHierarchy_roundingBorderPadding 26 ++int styleable GenericDraweeHierarchy_roundingBorderWidth 27 ++int styleable GenericDraweeHierarchy_viewAspectRatio 28 ++int[] styleable GradientColor { 0x101020b, 0x10101a2, 0x10101a3, 0x101019e, 0x1010512, 0x1010513, 0x10101a4, 0x101019d, 0x1010510, 0x1010511, 0x1010201, 0x10101a1 } ++int styleable GradientColor_android_centerColor 0 ++int styleable GradientColor_android_centerX 1 ++int styleable GradientColor_android_centerY 2 ++int styleable GradientColor_android_endColor 3 ++int styleable GradientColor_android_endX 4 ++int styleable GradientColor_android_endY 5 ++int styleable GradientColor_android_gradientRadius 6 ++int styleable GradientColor_android_startColor 7 ++int styleable GradientColor_android_startX 8 ++int styleable GradientColor_android_startY 9 ++int styleable GradientColor_android_tileMode 10 ++int styleable GradientColor_android_type 11 ++int[] styleable GradientColorItem { 0x10101a5, 0x1010514 } ++int styleable GradientColorItem_android_color 0 ++int styleable GradientColorItem_android_offset 1 ++int[] styleable LinearLayoutCompat { 0x1010126, 0x1010127, 0x10100af, 0x10100c4, 0x1010128, 0x0, 0x0, 0x0, 0x0 } ++int styleable LinearLayoutCompat_android_baselineAligned 0 ++int styleable LinearLayoutCompat_android_baselineAlignedChildIndex 1 ++int styleable LinearLayoutCompat_android_gravity 2 ++int styleable LinearLayoutCompat_android_orientation 3 ++int styleable LinearLayoutCompat_android_weightSum 4 ++int styleable LinearLayoutCompat_divider 5 ++int styleable LinearLayoutCompat_dividerPadding 6 ++int styleable LinearLayoutCompat_measureWithLargestChild 7 ++int styleable LinearLayoutCompat_showDividers 8 ++int[] styleable LinearLayoutCompat_Layout { 0x10100b3, 0x10100f5, 0x1010181, 0x10100f4 } ++int styleable LinearLayoutCompat_Layout_android_layout_gravity 0 ++int styleable LinearLayoutCompat_Layout_android_layout_height 1 ++int styleable LinearLayoutCompat_Layout_android_layout_weight 2 ++int styleable LinearLayoutCompat_Layout_android_layout_width 3 ++int[] styleable ListPopupWindow { 0x10102ac, 0x10102ad } ++int styleable ListPopupWindow_android_dropDownHorizontalOffset 0 ++int styleable ListPopupWindow_android_dropDownVerticalOffset 1 ++int[] styleable MenuGroup { 0x10101e0, 0x101000e, 0x10100d0, 0x10101de, 0x10101df, 0x1010194 } ++int styleable MenuGroup_android_checkableBehavior 0 ++int styleable MenuGroup_android_enabled 1 ++int styleable MenuGroup_android_id 2 ++int styleable MenuGroup_android_menuCategory 3 ++int styleable MenuGroup_android_orderInCategory 4 ++int styleable MenuGroup_android_visible 5 ++int[] styleable MenuItem { 0x0, 0x0, 0x0, 0x0, 0x10101e3, 0x10101e5, 0x1010106, 0x101000e, 0x1010002, 0x10100d0, 0x10101de, 0x10101e4, 0x101026f, 0x10101df, 0x10101e1, 0x10101e2, 0x1010194, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable MenuItem_actionLayout 0 ++int styleable MenuItem_actionProviderClass 1 ++int styleable MenuItem_actionViewClass 2 ++int styleable MenuItem_alphabeticModifiers 3 ++int styleable MenuItem_android_alphabeticShortcut 4 ++int styleable MenuItem_android_checkable 5 ++int styleable MenuItem_android_checked 6 ++int styleable MenuItem_android_enabled 7 ++int styleable MenuItem_android_icon 8 ++int styleable MenuItem_android_id 9 ++int styleable MenuItem_android_menuCategory 10 ++int styleable MenuItem_android_numericShortcut 11 ++int styleable MenuItem_android_onClick 12 ++int styleable MenuItem_android_orderInCategory 13 ++int styleable MenuItem_android_title 14 ++int styleable MenuItem_android_titleCondensed 15 ++int styleable MenuItem_android_visible 16 ++int styleable MenuItem_contentDescription 17 ++int styleable MenuItem_iconTint 18 ++int styleable MenuItem_iconTintMode 19 ++int styleable MenuItem_numericModifiers 20 ++int styleable MenuItem_showAsAction 21 ++int styleable MenuItem_tooltipText 22 ++int[] styleable MenuView { 0x101012f, 0x101012d, 0x1010130, 0x1010131, 0x101012c, 0x101012e, 0x10100ae, 0x0, 0x0 } ++int styleable MenuView_android_headerBackground 0 ++int styleable MenuView_android_horizontalDivider 1 ++int styleable MenuView_android_itemBackground 2 ++int styleable MenuView_android_itemIconDisabledAlpha 3 ++int styleable MenuView_android_itemTextAppearance 4 ++int styleable MenuView_android_verticalDivider 5 ++int styleable MenuView_android_windowAnimationStyle 6 ++int styleable MenuView_preserveIconSpacing 7 ++int styleable MenuView_subMenuArrow 8 ++int[] styleable PopupWindow { 0x10102c9, 0x1010176, 0x0 } ++int styleable PopupWindow_android_popupAnimationStyle 0 ++int styleable PopupWindow_android_popupBackground 1 ++int styleable PopupWindow_overlapAnchor 2 ++int[] styleable PopupWindowBackgroundState { 0x0 } ++int styleable PopupWindowBackgroundState_state_above_anchor 0 ++int[] styleable RecycleListView { 0x0, 0x0 } ++int styleable RecycleListView_paddingBottomNoButtons 0 ++int styleable RecycleListView_paddingTopNoTitle 1 ++int[] styleable SearchView { 0x10100da, 0x1010264, 0x1010220, 0x101011f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SearchView_android_focusable 0 ++int styleable SearchView_android_imeOptions 1 ++int styleable SearchView_android_inputType 2 ++int styleable SearchView_android_maxWidth 3 ++int styleable SearchView_closeIcon 4 ++int styleable SearchView_commitIcon 5 ++int styleable SearchView_defaultQueryHint 6 ++int styleable SearchView_goIcon 7 ++int styleable SearchView_iconifiedByDefault 8 ++int styleable SearchView_layout 9 ++int styleable SearchView_queryBackground 10 ++int styleable SearchView_queryHint 11 ++int styleable SearchView_searchHintIcon 12 ++int styleable SearchView_searchIcon 13 ++int styleable SearchView_submitBackground 14 ++int styleable SearchView_suggestionRowLayout 15 ++int styleable SearchView_voiceIcon 16 ++int[] styleable SimpleDraweeView { 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SimpleDraweeView_actualImageResource 0 ++int styleable SimpleDraweeView_actualImageScaleType 1 ++int styleable SimpleDraweeView_actualImageUri 2 ++int styleable SimpleDraweeView_backgroundImage 3 ++int styleable SimpleDraweeView_fadeDuration 4 ++int styleable SimpleDraweeView_failureImage 5 ++int styleable SimpleDraweeView_failureImageScaleType 6 ++int styleable SimpleDraweeView_overlayImage 7 ++int styleable SimpleDraweeView_placeholderImage 8 ++int styleable SimpleDraweeView_placeholderImageScaleType 9 ++int styleable SimpleDraweeView_pressedStateOverlayImage 10 ++int styleable SimpleDraweeView_progressBarAutoRotateInterval 11 ++int styleable SimpleDraweeView_progressBarImage 12 ++int styleable SimpleDraweeView_progressBarImageScaleType 13 ++int styleable SimpleDraweeView_retryImage 14 ++int styleable SimpleDraweeView_retryImageScaleType 15 ++int styleable SimpleDraweeView_roundAsCircle 16 ++int styleable SimpleDraweeView_roundBottomEnd 17 ++int styleable SimpleDraweeView_roundBottomLeft 18 ++int styleable SimpleDraweeView_roundBottomRight 19 ++int styleable SimpleDraweeView_roundBottomStart 20 ++int styleable SimpleDraweeView_roundTopEnd 21 ++int styleable SimpleDraweeView_roundTopLeft 22 ++int styleable SimpleDraweeView_roundTopRight 23 ++int styleable SimpleDraweeView_roundTopStart 24 ++int styleable SimpleDraweeView_roundWithOverlayColor 25 ++int styleable SimpleDraweeView_roundedCornerRadius 26 ++int styleable SimpleDraweeView_roundingBorderColor 27 ++int styleable SimpleDraweeView_roundingBorderPadding 28 ++int styleable SimpleDraweeView_roundingBorderWidth 29 ++int styleable SimpleDraweeView_viewAspectRatio 30 ++int[] styleable Spinner { 0x1010262, 0x10100b2, 0x1010176, 0x101017b, 0x0 } ++int styleable Spinner_android_dropDownWidth 0 ++int styleable Spinner_android_entries 1 ++int styleable Spinner_android_popupBackground 2 ++int styleable Spinner_android_prompt 3 ++int styleable Spinner_popupTheme 4 ++int[] styleable StateListDrawable { 0x1010196, 0x101011c, 0x101030c, 0x101030d, 0x1010195, 0x1010194 } ++int styleable StateListDrawable_android_constantSize 0 ++int styleable StateListDrawable_android_dither 1 ++int styleable StateListDrawable_android_enterFadeDuration 2 ++int styleable StateListDrawable_android_exitFadeDuration 3 ++int styleable StateListDrawable_android_variablePadding 4 ++int styleable StateListDrawable_android_visible 5 ++int[] styleable StateListDrawableItem { 0x1010199 } ++int styleable StateListDrawableItem_android_drawable 0 ++int[] styleable SwitchCompat { 0x1010125, 0x1010124, 0x1010142, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable SwitchCompat_android_textOff 0 ++int styleable SwitchCompat_android_textOn 1 ++int styleable SwitchCompat_android_thumb 2 ++int styleable SwitchCompat_showText 3 ++int styleable SwitchCompat_splitTrack 4 ++int styleable SwitchCompat_switchMinWidth 5 ++int styleable SwitchCompat_switchPadding 6 ++int styleable SwitchCompat_switchTextAppearance 7 ++int styleable SwitchCompat_thumbTextPadding 8 ++int styleable SwitchCompat_thumbTint 9 ++int styleable SwitchCompat_thumbTintMode 10 ++int styleable SwitchCompat_track 11 ++int styleable SwitchCompat_trackTint 12 ++int styleable SwitchCompat_trackTintMode 13 ++int[] styleable TextAppearance { 0x10103ac, 0x1010161, 0x1010162, 0x1010163, 0x1010164, 0x1010098, 0x101009a, 0x101009b, 0x1010585, 0x1010095, 0x1010097, 0x1010096, 0x0, 0x0, 0x0, 0x0 } ++int styleable TextAppearance_android_fontFamily 0 ++int styleable TextAppearance_android_shadowColor 1 ++int styleable TextAppearance_android_shadowDx 2 ++int styleable TextAppearance_android_shadowDy 3 ++int styleable TextAppearance_android_shadowRadius 4 ++int styleable TextAppearance_android_textColor 5 ++int styleable TextAppearance_android_textColorHint 6 ++int styleable TextAppearance_android_textColorLink 7 ++int styleable TextAppearance_android_textFontWeight 8 ++int styleable TextAppearance_android_textSize 9 ++int styleable TextAppearance_android_textStyle 10 ++int styleable TextAppearance_android_typeface 11 ++int styleable TextAppearance_fontFamily 12 ++int styleable TextAppearance_fontVariationSettings 13 ++int styleable TextAppearance_textAllCaps 14 ++int styleable TextAppearance_textLocale 15 ++int[] styleable Toolbar { 0x10100af, 0x1010140, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0 } ++int styleable Toolbar_android_gravity 0 ++int styleable Toolbar_android_minHeight 1 ++int styleable Toolbar_buttonGravity 2 ++int styleable Toolbar_collapseContentDescription 3 ++int styleable Toolbar_collapseIcon 4 ++int styleable Toolbar_contentInsetEnd 5 ++int styleable Toolbar_contentInsetEndWithActions 6 ++int styleable Toolbar_contentInsetLeft 7 ++int styleable Toolbar_contentInsetRight 8 ++int styleable Toolbar_contentInsetStart 9 ++int styleable Toolbar_contentInsetStartWithNavigation 10 ++int styleable Toolbar_logo 11 ++int styleable Toolbar_logoDescription 12 ++int styleable Toolbar_maxButtonHeight 13 ++int styleable Toolbar_menu 14 ++int styleable Toolbar_navigationContentDescription 15 ++int styleable Toolbar_navigationIcon 16 ++int styleable Toolbar_popupTheme 17 ++int styleable Toolbar_subtitle 18 ++int styleable Toolbar_subtitleTextAppearance 19 ++int styleable Toolbar_subtitleTextColor 20 ++int styleable Toolbar_title 21 ++int styleable Toolbar_titleMargin 22 ++int styleable Toolbar_titleMarginBottom 23 ++int styleable Toolbar_titleMarginEnd 24 ++int styleable Toolbar_titleMarginStart 25 ++int styleable Toolbar_titleMarginTop 26 ++int styleable Toolbar_titleMargins 27 ++int styleable Toolbar_titleTextAppearance 28 ++int styleable Toolbar_titleTextColor 29 ++int[] styleable View { 0x10100da, 0x1010000, 0x0, 0x0, 0x0 } ++int styleable View_android_focusable 0 ++int styleable View_android_theme 1 ++int styleable View_paddingEnd 2 ++int styleable View_paddingStart 3 ++int styleable View_theme 4 ++int[] styleable ViewBackgroundHelper { 0x10100d4, 0x0, 0x0 } ++int styleable ViewBackgroundHelper_android_background 0 ++int styleable ViewBackgroundHelper_backgroundTint 1 ++int styleable ViewBackgroundHelper_backgroundTintMode 2 ++int[] styleable ViewStubCompat { 0x10100d0, 0x10100f3, 0x10100f2 } ++int styleable ViewStubCompat_android_id 0 ++int styleable ViewStubCompat_android_inflatedId 1 ++int styleable ViewStubCompat_android_layout 2 ++int xml provider_paths 0x0 ++int xml rn_dev_preferences 0x0 +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/compiled_local_resources/debug/out/xml_provider_paths.xml.flat b/node_modules/rn-fetch-blob/android/build/intermediates/compiled_local_resources/debug/out/xml_provider_paths.xml.flat +new file mode 100644 +index 0000000..b3eda9a +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/compiled_local_resources/debug/out/xml_provider_paths.xml.flat differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +new file mode 100644 +index 0000000..2777663 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/compile-file-map.properties +@@ -0,0 +1,2 @@ ++#Sun Oct 30 21:31:08 PKT 2022 ++com.RNFetchBlob.rn-fetch-blob-main-7\:/xml/provider_paths.xml=/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/build/intermediates/packaged_res/debug/xml/provider_paths.xml +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml +new file mode 100644 +index 0000000..26112b2 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/merged.dir/values/values.xml +@@ -0,0 +1,4 @@ ++ ++ ++ rn-fetch-blob ++ +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +new file mode 100644 +index 0000000..27ddd72 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/debug/packageDebugResources/merger.xml +@@ -0,0 +1,2 @@ ++ ++rn-fetch-blob +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +new file mode 100644 +index 0000000..d02bbf4 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/mergeDebugJniLibFolders/merger.xml +@@ -0,0 +1,2 @@ ++ ++ +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/incremental/mergeDebugShaders/merger.xml b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +new file mode 100644 +index 0000000..0a35526 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/mergeDebugShaders/merger.xml +@@ -0,0 +1,2 @@ ++ ++ +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/incremental/packageDebugAssets/merger.xml b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/packageDebugAssets/merger.xml +new file mode 100644 +index 0000000..69705ab +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/incremental/packageDebugAssets/merger.xml +@@ -0,0 +1,2 @@ ++ ++ +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/BuildConfig.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/BuildConfig.class +new file mode 100644 +index 0000000..abd8cdf +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/BuildConfig.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$1.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$1.class +new file mode 100644 +index 0000000..641fb92 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$1.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$10.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$10.class +new file mode 100644 +index 0000000..97ec6fe +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$10.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$11.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$11.class +new file mode 100644 +index 0000000..fa51fea +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$11.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$12.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$12.class +new file mode 100644 +index 0000000..0e73bfb +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$12.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$2.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$2.class +new file mode 100644 +index 0000000..fc1455b +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$2.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$3.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$3.class +new file mode 100644 +index 0000000..c79c5cd +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$3.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$4.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$4.class +new file mode 100644 +index 0000000..ff3070a +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$4.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$5.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$5.class +new file mode 100644 +index 0000000..5218481 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$5.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$6.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$6.class +new file mode 100644 +index 0000000..dc9e75b +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$6.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$7.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$7.class +new file mode 100644 +index 0000000..89c9328 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$7.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$8.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$8.class +new file mode 100644 +index 0000000..f64a8ae +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$8.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$9.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$9.class +new file mode 100644 +index 0000000..8f30fe6 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob$9.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob.class +new file mode 100644 +index 0000000..47cf15f +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlob.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody$1.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody$1.class +new file mode 100644 +index 0000000..8301ac4 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody$1.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody$FormField.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody$FormField.class +new file mode 100644 +index 0000000..cf940e6 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody$FormField.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody.class +new file mode 100644 +index 0000000..001bdc7 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobBody.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobConfig.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobConfig.class +new file mode 100644 +index 0000000..68f3e09 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobConfig.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobConst.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobConst.class +new file mode 100644 +index 0000000..108474c +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobConst.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$1.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$1.class +new file mode 100644 +index 0000000..6e0a426 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$1.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$2.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$2.class +new file mode 100644 +index 0000000..eddc9e0 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$2.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$3.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$3.class +new file mode 100644 +index 0000000..84e8462 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS$3.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS.class +new file mode 100644 +index 0000000..663433d +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobFS.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobPackage.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobPackage.class +new file mode 100644 +index 0000000..8847dc4 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobPackage.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobProgressConfig$ReportType.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobProgressConfig$ReportType.class +new file mode 100644 +index 0000000..3a0a0bd +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobProgressConfig$ReportType.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobProgressConfig.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobProgressConfig.class +new file mode 100644 +index 0000000..427722f +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobProgressConfig.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$1.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$1.class +new file mode 100644 +index 0000000..a158df9 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$1.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$2.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$2.class +new file mode 100644 +index 0000000..fa461ce +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$2.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$3.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$3.class +new file mode 100644 +index 0000000..1c49b88 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$3.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$4.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$4.class +new file mode 100644 +index 0000000..dfcb0e5 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$4.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$RequestType.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$RequestType.class +new file mode 100644 +index 0000000..a89b8b2 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$RequestType.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$ResponseFormat.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$ResponseFormat.class +new file mode 100644 +index 0000000..62025c6 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$ResponseFormat.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$ResponseType.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$ResponseType.class +new file mode 100644 +index 0000000..0ff8dc2 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq$ResponseType.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq.class +new file mode 100644 +index 0000000..983c710 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobReq.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils$1.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils$1.class +new file mode 100644 +index 0000000..e4c4db8 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils$1.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils$2.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils$2.class +new file mode 100644 +index 0000000..7af9224 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils$2.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils.class +new file mode 100644 +index 0000000..6a826a8 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/RNFetchBlobUtils.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobDefaultResp$ProgressReportingSource.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobDefaultResp$ProgressReportingSource.class +new file mode 100644 +index 0000000..560e4d4 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobDefaultResp$ProgressReportingSource.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobDefaultResp.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobDefaultResp.class +new file mode 100644 +index 0000000..abf67f0 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobDefaultResp.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp$1.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp$1.class +new file mode 100644 +index 0000000..c91edf3 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp$1.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp$ProgressReportingSource.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp$ProgressReportingSource.class +new file mode 100644 +index 0000000..dcec22c +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp$ProgressReportingSource.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp.class +new file mode 100644 +index 0000000..efc8199 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Response/RNFetchBlobFileResp.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Utils/FileProvider.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Utils/FileProvider.class +new file mode 100644 +index 0000000..3b42b6e +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Utils/FileProvider.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Utils/PathResolver.class b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Utils/PathResolver.class +new file mode 100644 +index 0000000..90d46ad +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/javac/debug/classes/com/RNFetchBlob/Utils/PathResolver.class differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/local_only_symbol_list/debug/R-def.txt b/node_modules/rn-fetch-blob/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +new file mode 100644 +index 0000000..1e08740 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/local_only_symbol_list/debug/R-def.txt +@@ -0,0 +1,4 @@ ++R_DEF: Internal format may change without notice ++local ++string app_name ++xml provider_paths +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt b/node_modules/rn-fetch-blob/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +new file mode 100644 +index 0000000..9b0ea3c +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/manifest_merge_blame_file/debug/manifest-merger-blame-debug-report.txt +@@ -0,0 +1,69 @@ ++1 ++2 ++4 ++5 /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++7 android:targetSdkVersion="33" /> ++7-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++8 ++9 ++10 ++10-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:5:5-73 ++10-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:5:22-70 ++11 ++12 ++13 ++13-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:8:5-67 ++13-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:8:22-64 ++14 ++15 ++19 ++19-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:12:5-68 ++19-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:12:22-65 ++20 ++21 ++25 ++25-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:16:5-79 ++25-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:16:22-76 ++26 ++27 ++28 ++28-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:19:5-76 ++28-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:19:22-73 ++29 ++30 ++31 ++31-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:22:5-81 ++31-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:22:22-78 ++32 ++33 ++33-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:24:5-35:19 ++33-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:24:18-50 ++34 /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:26:9-34:20 ++35 android:name="com.RNFetchBlob.Utils.FileProvider" ++35-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:27:13-62 ++36 android:authorities="${applicationId}.provider" ++36-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:28:13-60 ++37 android:exported="false" ++37-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:29:13-37 ++38 android:grantUriPermissions="true" > ++38-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:30:13-47 ++39 /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:31:13-33:58 ++40 android:name="android.support.FILE_PROVIDER_PATHS" ++40-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:32:17-67 ++41 android:resource="@xml/provider_paths" /> ++41-->/Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:33:17-55 ++42 ++43 ++44 ++45 +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml b/node_modules/rn-fetch-blob/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +new file mode 100644 +index 0000000..25c9b21 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/merged_manifest/debug/AndroidManifest.xml +@@ -0,0 +1,45 @@ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ ++ +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/navigation_json/debug/navigation.json b/node_modules/rn-fetch-blob/android/build/intermediates/navigation_json/debug/navigation.json +new file mode 100644 +index 0000000..0637a08 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/navigation_json/debug/navigation.json +@@ -0,0 +1 @@ ++[] +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/packaged_manifests/debug/output-metadata.json b/node_modules/rn-fetch-blob/android/build/intermediates/packaged_manifests/debug/output-metadata.json +new file mode 100644 +index 0000000..d56baa6 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/packaged_manifests/debug/output-metadata.json +@@ -0,0 +1,18 @@ ++{ ++ "version": 3, ++ "artifactType": { ++ "type": "PACKAGED_MANIFESTS", ++ "kind": "Directory" ++ }, ++ "applicationId": "com.RNFetchBlob", ++ "variantName": "debug", ++ "elements": [ ++ { ++ "type": "SINGLE", ++ "filters": [], ++ "attributes": [], ++ "outputFile": "../../merged_manifest/debug/AndroidManifest.xml" ++ } ++ ], ++ "elementType": "File" ++} +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/packaged_res/debug/values/values.xml b/node_modules/rn-fetch-blob/android/build/intermediates/packaged_res/debug/values/values.xml +new file mode 100644 +index 0000000..26112b2 +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/packaged_res/debug/values/values.xml +@@ -0,0 +1,4 @@ ++ ++ ++ rn-fetch-blob ++ +\ No newline at end of file +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/packaged_res/debug/xml/provider_paths.xml b/node_modules/rn-fetch-blob/android/build/intermediates/packaged_res/debug/xml/provider_paths.xml +new file mode 100644 +index 0000000..c38617d +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/packaged_res/debug/xml/provider_paths.xml +@@ -0,0 +1,12 @@ ++ ++ ++ ++ ++ ++ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar b/node_modules/rn-fetch-blob/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar +new file mode 100644 +index 0000000..eec4036 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/intermediates/runtime_library_classes_jar/debug/classes.jar differ +diff --git a/node_modules/rn-fetch-blob/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt b/node_modules/rn-fetch-blob/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +new file mode 100644 +index 0000000..067d8fc +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/intermediates/symbol_list_with_package_name/debug/package-aware-r.txt +@@ -0,0 +1,1453 @@ ++com.RNFetchBlob ++anim abc_fade_in ++anim abc_fade_out ++anim abc_grow_fade_in_from_bottom ++anim abc_popup_enter ++anim abc_popup_exit ++anim abc_shrink_fade_out_from_bottom ++anim abc_slide_in_bottom ++anim abc_slide_in_top ++anim abc_slide_out_bottom ++anim abc_slide_out_top ++anim abc_tooltip_enter ++anim abc_tooltip_exit ++anim btn_checkbox_to_checked_box_inner_merged_animation ++anim btn_checkbox_to_checked_box_outer_merged_animation ++anim btn_checkbox_to_checked_icon_null_animation ++anim btn_checkbox_to_unchecked_box_inner_merged_animation ++anim btn_checkbox_to_unchecked_check_path_merged_animation ++anim btn_checkbox_to_unchecked_icon_null_animation ++anim btn_radio_to_off_mtrl_dot_group_animation ++anim btn_radio_to_off_mtrl_ring_outer_animation ++anim btn_radio_to_off_mtrl_ring_outer_path_animation ++anim btn_radio_to_on_mtrl_dot_group_animation ++anim btn_radio_to_on_mtrl_ring_outer_animation ++anim btn_radio_to_on_mtrl_ring_outer_path_animation ++anim catalyst_fade_in ++anim catalyst_fade_out ++anim catalyst_push_up_in ++anim catalyst_push_up_out ++anim catalyst_slide_down ++anim catalyst_slide_up ++anim fragment_fast_out_extra_slow_in ++animator fragment_close_enter ++animator fragment_close_exit ++animator fragment_fade_enter ++animator fragment_fade_exit ++animator fragment_open_enter ++animator fragment_open_exit ++attr actionBarDivider ++attr actionBarItemBackground ++attr actionBarPopupTheme ++attr actionBarSize ++attr actionBarSplitStyle ++attr actionBarStyle ++attr actionBarTabBarStyle ++attr actionBarTabStyle ++attr actionBarTabTextStyle ++attr actionBarTheme ++attr actionBarWidgetTheme ++attr actionButtonStyle ++attr actionDropDownStyle ++attr actionLayout ++attr actionMenuTextAppearance ++attr actionMenuTextColor ++attr actionModeBackground ++attr actionModeCloseButtonStyle ++attr actionModeCloseContentDescription ++attr actionModeCloseDrawable ++attr actionModeCopyDrawable ++attr actionModeCutDrawable ++attr actionModeFindDrawable ++attr actionModePasteDrawable ++attr actionModePopupWindowStyle ++attr actionModeSelectAllDrawable ++attr actionModeShareDrawable ++attr actionModeSplitBackground ++attr actionModeStyle ++attr actionModeTheme ++attr actionModeWebSearchDrawable ++attr actionOverflowButtonStyle ++attr actionOverflowMenuStyle ++attr actionProviderClass ++attr actionViewClass ++attr activityChooserViewStyle ++attr actualImageResource ++attr actualImageScaleType ++attr actualImageUri ++attr alertDialogButtonGroupStyle ++attr alertDialogCenterButtons ++attr alertDialogStyle ++attr alertDialogTheme ++attr allowStacking ++attr alpha ++attr alphabeticModifiers ++attr arrowHeadLength ++attr arrowShaftLength ++attr autoCompleteTextViewStyle ++attr autoSizeMaxTextSize ++attr autoSizeMinTextSize ++attr autoSizePresetSizes ++attr autoSizeStepGranularity ++attr autoSizeTextType ++attr autofillInlineSuggestionChip ++attr autofillInlineSuggestionEndIconStyle ++attr autofillInlineSuggestionStartIconStyle ++attr autofillInlineSuggestionSubtitle ++attr autofillInlineSuggestionTitle ++attr background ++attr backgroundImage ++attr backgroundSplit ++attr backgroundStacked ++attr backgroundTint ++attr backgroundTintMode ++attr barLength ++attr borderlessButtonStyle ++attr buttonBarButtonStyle ++attr buttonBarNegativeButtonStyle ++attr buttonBarNeutralButtonStyle ++attr buttonBarPositiveButtonStyle ++attr buttonBarStyle ++attr buttonCompat ++attr buttonGravity ++attr buttonIconDimen ++attr buttonPanelSideLayout ++attr buttonStyle ++attr buttonStyleSmall ++attr buttonTint ++attr buttonTintMode ++attr checkMarkCompat ++attr checkMarkTint ++attr checkMarkTintMode ++attr checkboxStyle ++attr checkedTextViewStyle ++attr closeIcon ++attr closeItemLayout ++attr collapseContentDescription ++attr collapseIcon ++attr color ++attr colorAccent ++attr colorBackgroundFloating ++attr colorButtonNormal ++attr colorControlActivated ++attr colorControlHighlight ++attr colorControlNormal ++attr colorError ++attr colorPrimary ++attr colorPrimaryDark ++attr colorSwitchThumbNormal ++attr commitIcon ++attr contentDescription ++attr contentInsetEnd ++attr contentInsetEndWithActions ++attr contentInsetLeft ++attr contentInsetRight ++attr contentInsetStart ++attr contentInsetStartWithNavigation ++attr controlBackground ++attr customNavigationLayout ++attr defaultQueryHint ++attr dialogCornerRadius ++attr dialogPreferredPadding ++attr dialogTheme ++attr displayOptions ++attr divider ++attr dividerHorizontal ++attr dividerPadding ++attr dividerVertical ++attr drawableBottomCompat ++attr drawableEndCompat ++attr drawableLeftCompat ++attr drawableRightCompat ++attr drawableSize ++attr drawableStartCompat ++attr drawableTint ++attr drawableTintMode ++attr drawableTopCompat ++attr drawerArrowStyle ++attr dropDownListViewStyle ++attr dropdownListPreferredItemHeight ++attr editTextBackground ++attr editTextColor ++attr editTextStyle ++attr elevation ++attr emojiCompatEnabled ++attr expandActivityOverflowButtonDrawable ++attr fadeDuration ++attr failureImage ++attr failureImageScaleType ++attr firstBaselineToTopHeight ++attr font ++attr fontFamily ++attr fontProviderAuthority ++attr fontProviderCerts ++attr fontProviderFetchStrategy ++attr fontProviderFetchTimeout ++attr fontProviderPackage ++attr fontProviderQuery ++attr fontProviderSystemFontFamily ++attr fontStyle ++attr fontVariationSettings ++attr fontWeight ++attr gapBetweenBars ++attr goIcon ++attr height ++attr hideOnContentScroll ++attr homeAsUpIndicator ++attr homeLayout ++attr icon ++attr iconTint ++attr iconTintMode ++attr iconifiedByDefault ++attr imageButtonStyle ++attr indeterminateProgressStyle ++attr initialActivityCount ++attr isAutofillInlineSuggestionTheme ++attr isLightTheme ++attr itemPadding ++attr lStar ++attr lastBaselineToBottomHeight ++attr layout ++attr lineHeight ++attr listChoiceBackgroundIndicator ++attr listChoiceIndicatorMultipleAnimated ++attr listChoiceIndicatorSingleAnimated ++attr listDividerAlertDialog ++attr listItemLayout ++attr listLayout ++attr listMenuViewStyle ++attr listPopupWindowStyle ++attr listPreferredItemHeight ++attr listPreferredItemHeightLarge ++attr listPreferredItemHeightSmall ++attr listPreferredItemPaddingEnd ++attr listPreferredItemPaddingLeft ++attr listPreferredItemPaddingRight ++attr listPreferredItemPaddingStart ++attr logo ++attr logoDescription ++attr maxButtonHeight ++attr measureWithLargestChild ++attr menu ++attr multiChoiceItemLayout ++attr navigationContentDescription ++attr navigationIcon ++attr navigationMode ++attr nestedScrollViewStyle ++attr numericModifiers ++attr overlapAnchor ++attr overlayImage ++attr paddingBottomNoButtons ++attr paddingEnd ++attr paddingStart ++attr paddingTopNoTitle ++attr panelBackground ++attr panelMenuListTheme ++attr panelMenuListWidth ++attr placeholderImage ++attr placeholderImageScaleType ++attr popupMenuStyle ++attr popupTheme ++attr popupWindowStyle ++attr preserveIconSpacing ++attr pressedStateOverlayImage ++attr progressBarAutoRotateInterval ++attr progressBarImage ++attr progressBarImageScaleType ++attr progressBarPadding ++attr progressBarStyle ++attr queryBackground ++attr queryHint ++attr queryPatterns ++attr radioButtonStyle ++attr ratingBarStyle ++attr ratingBarStyleIndicator ++attr ratingBarStyleSmall ++attr retryImage ++attr retryImageScaleType ++attr roundAsCircle ++attr roundBottomEnd ++attr roundBottomLeft ++attr roundBottomRight ++attr roundBottomStart ++attr roundTopEnd ++attr roundTopLeft ++attr roundTopRight ++attr roundTopStart ++attr roundWithOverlayColor ++attr roundedCornerRadius ++attr roundingBorderColor ++attr roundingBorderPadding ++attr roundingBorderWidth ++attr searchHintIcon ++attr searchIcon ++attr searchViewStyle ++attr seekBarStyle ++attr selectableItemBackground ++attr selectableItemBackgroundBorderless ++attr shortcutMatchRequired ++attr showAsAction ++attr showDividers ++attr showText ++attr showTitle ++attr singleChoiceItemLayout ++attr spinBars ++attr spinnerDropDownItemStyle ++attr spinnerStyle ++attr splitTrack ++attr srcCompat ++attr state_above_anchor ++attr subMenuArrow ++attr submitBackground ++attr subtitle ++attr subtitleTextAppearance ++attr subtitleTextColor ++attr subtitleTextStyle ++attr suggestionRowLayout ++attr switchMinWidth ++attr switchPadding ++attr switchStyle ++attr switchTextAppearance ++attr textAllCaps ++attr textAppearanceLargePopupMenu ++attr textAppearanceListItem ++attr textAppearanceListItemSecondary ++attr textAppearanceListItemSmall ++attr textAppearancePopupMenuHeader ++attr textAppearanceSearchResultSubtitle ++attr textAppearanceSearchResultTitle ++attr textAppearanceSmallPopupMenu ++attr textColorAlertDialogListItem ++attr textColorSearchUrl ++attr textLocale ++attr theme ++attr thickness ++attr thumbTextPadding ++attr thumbTint ++attr thumbTintMode ++attr tickMark ++attr tickMarkTint ++attr tickMarkTintMode ++attr tint ++attr tintMode ++attr title ++attr titleMargin ++attr titleMarginBottom ++attr titleMarginEnd ++attr titleMarginStart ++attr titleMarginTop ++attr titleMargins ++attr titleTextAppearance ++attr titleTextColor ++attr titleTextStyle ++attr toolbarNavigationButtonStyle ++attr toolbarStyle ++attr tooltipForegroundColor ++attr tooltipFrameBackground ++attr tooltipText ++attr track ++attr trackTint ++attr trackTintMode ++attr ttcIndex ++attr viewAspectRatio ++attr viewInflaterClass ++attr voiceIcon ++attr windowActionBar ++attr windowActionBarOverlay ++attr windowActionModeOverlay ++attr windowFixedHeightMajor ++attr windowFixedHeightMinor ++attr windowFixedWidthMajor ++attr windowFixedWidthMinor ++attr windowMinWidthMajor ++attr windowMinWidthMinor ++attr windowNoTitle ++bool abc_action_bar_embed_tabs ++bool abc_config_actionMenuItemAllCaps ++color abc_background_cache_hint_selector_material_dark ++color abc_background_cache_hint_selector_material_light ++color abc_btn_colored_borderless_text_material ++color abc_btn_colored_text_material ++color abc_color_highlight_material ++color abc_decor_view_status_guard ++color abc_decor_view_status_guard_light ++color abc_hint_foreground_material_dark ++color abc_hint_foreground_material_light ++color abc_primary_text_disable_only_material_dark ++color abc_primary_text_disable_only_material_light ++color abc_primary_text_material_dark ++color abc_primary_text_material_light ++color abc_search_url_text ++color abc_search_url_text_normal ++color abc_search_url_text_pressed ++color abc_search_url_text_selected ++color abc_secondary_text_material_dark ++color abc_secondary_text_material_light ++color abc_tint_btn_checkable ++color abc_tint_default ++color abc_tint_edittext ++color abc_tint_seek_thumb ++color abc_tint_spinner ++color abc_tint_switch_track ++color accent_material_dark ++color accent_material_light ++color androidx_core_ripple_material_light ++color androidx_core_secondary_text_default_material_light ++color background_floating_material_dark ++color background_floating_material_light ++color background_material_dark ++color background_material_light ++color bright_foreground_disabled_material_dark ++color bright_foreground_disabled_material_light ++color bright_foreground_inverse_material_dark ++color bright_foreground_inverse_material_light ++color bright_foreground_material_dark ++color bright_foreground_material_light ++color button_material_dark ++color button_material_light ++color catalyst_logbox_background ++color catalyst_redbox_background ++color dim_foreground_disabled_material_dark ++color dim_foreground_disabled_material_light ++color dim_foreground_material_dark ++color dim_foreground_material_light ++color error_color_material_dark ++color error_color_material_light ++color foreground_material_dark ++color foreground_material_light ++color highlighted_text_material_dark ++color highlighted_text_material_light ++color material_blue_grey_800 ++color material_blue_grey_900 ++color material_blue_grey_950 ++color material_deep_teal_200 ++color material_deep_teal_500 ++color material_grey_100 ++color material_grey_300 ++color material_grey_50 ++color material_grey_600 ++color material_grey_800 ++color material_grey_850 ++color material_grey_900 ++color notification_action_color_filter ++color notification_icon_bg_color ++color primary_dark_material_dark ++color primary_dark_material_light ++color primary_material_dark ++color primary_material_light ++color primary_text_default_material_dark ++color primary_text_default_material_light ++color primary_text_disabled_material_dark ++color primary_text_disabled_material_light ++color ripple_material_dark ++color ripple_material_light ++color secondary_text_default_material_dark ++color secondary_text_default_material_light ++color secondary_text_disabled_material_dark ++color secondary_text_disabled_material_light ++color switch_thumb_disabled_material_dark ++color switch_thumb_disabled_material_light ++color switch_thumb_material_dark ++color switch_thumb_material_light ++color switch_thumb_normal_material_dark ++color switch_thumb_normal_material_light ++color tooltip_background_dark ++color tooltip_background_light ++dimen abc_action_bar_content_inset_material ++dimen abc_action_bar_content_inset_with_nav ++dimen abc_action_bar_default_height_material ++dimen abc_action_bar_default_padding_end_material ++dimen abc_action_bar_default_padding_start_material ++dimen abc_action_bar_elevation_material ++dimen abc_action_bar_icon_vertical_padding_material ++dimen abc_action_bar_overflow_padding_end_material ++dimen abc_action_bar_overflow_padding_start_material ++dimen abc_action_bar_stacked_max_height ++dimen abc_action_bar_stacked_tab_max_width ++dimen abc_action_bar_subtitle_bottom_margin_material ++dimen abc_action_bar_subtitle_top_margin_material ++dimen abc_action_button_min_height_material ++dimen abc_action_button_min_width_material ++dimen abc_action_button_min_width_overflow_material ++dimen abc_alert_dialog_button_bar_height ++dimen abc_alert_dialog_button_dimen ++dimen abc_button_inset_horizontal_material ++dimen abc_button_inset_vertical_material ++dimen abc_button_padding_horizontal_material ++dimen abc_button_padding_vertical_material ++dimen abc_cascading_menus_min_smallest_width ++dimen abc_config_prefDialogWidth ++dimen abc_control_corner_material ++dimen abc_control_inset_material ++dimen abc_control_padding_material ++dimen abc_dialog_corner_radius_material ++dimen abc_dialog_fixed_height_major ++dimen abc_dialog_fixed_height_minor ++dimen abc_dialog_fixed_width_major ++dimen abc_dialog_fixed_width_minor ++dimen abc_dialog_list_padding_bottom_no_buttons ++dimen abc_dialog_list_padding_top_no_title ++dimen abc_dialog_min_width_major ++dimen abc_dialog_min_width_minor ++dimen abc_dialog_padding_material ++dimen abc_dialog_padding_top_material ++dimen abc_dialog_title_divider_material ++dimen abc_disabled_alpha_material_dark ++dimen abc_disabled_alpha_material_light ++dimen abc_dropdownitem_icon_width ++dimen abc_dropdownitem_text_padding_left ++dimen abc_dropdownitem_text_padding_right ++dimen abc_edit_text_inset_bottom_material ++dimen abc_edit_text_inset_horizontal_material ++dimen abc_edit_text_inset_top_material ++dimen abc_floating_window_z ++dimen abc_list_item_height_large_material ++dimen abc_list_item_height_material ++dimen abc_list_item_height_small_material ++dimen abc_list_item_padding_horizontal_material ++dimen abc_panel_menu_list_width ++dimen abc_progress_bar_height_material ++dimen abc_search_view_preferred_height ++dimen abc_search_view_preferred_width ++dimen abc_seekbar_track_background_height_material ++dimen abc_seekbar_track_progress_height_material ++dimen abc_select_dialog_padding_start_material ++dimen abc_star_big ++dimen abc_star_medium ++dimen abc_star_small ++dimen abc_switch_padding ++dimen abc_text_size_body_1_material ++dimen abc_text_size_body_2_material ++dimen abc_text_size_button_material ++dimen abc_text_size_caption_material ++dimen abc_text_size_display_1_material ++dimen abc_text_size_display_2_material ++dimen abc_text_size_display_3_material ++dimen abc_text_size_display_4_material ++dimen abc_text_size_headline_material ++dimen abc_text_size_large_material ++dimen abc_text_size_medium_material ++dimen abc_text_size_menu_header_material ++dimen abc_text_size_menu_material ++dimen abc_text_size_small_material ++dimen abc_text_size_subhead_material ++dimen abc_text_size_subtitle_material_toolbar ++dimen abc_text_size_title_material ++dimen abc_text_size_title_material_toolbar ++dimen autofill_inline_suggestion_icon_size ++dimen compat_button_inset_horizontal_material ++dimen compat_button_inset_vertical_material ++dimen compat_button_padding_horizontal_material ++dimen compat_button_padding_vertical_material ++dimen compat_control_corner_material ++dimen compat_notification_large_icon_max_height ++dimen compat_notification_large_icon_max_width ++dimen disabled_alpha_material_dark ++dimen disabled_alpha_material_light ++dimen highlight_alpha_material_colored ++dimen highlight_alpha_material_dark ++dimen highlight_alpha_material_light ++dimen hint_alpha_material_dark ++dimen hint_alpha_material_light ++dimen hint_pressed_alpha_material_dark ++dimen hint_pressed_alpha_material_light ++dimen notification_action_icon_size ++dimen notification_action_text_size ++dimen notification_big_circle_margin ++dimen notification_content_margin_start ++dimen notification_large_icon_height ++dimen notification_large_icon_width ++dimen notification_main_column_padding_top ++dimen notification_media_narrow_margin ++dimen notification_right_icon_size ++dimen notification_right_side_padding_top ++dimen notification_small_icon_background_padding ++dimen notification_small_icon_size_as_large ++dimen notification_subtext_size ++dimen notification_top_pad ++dimen notification_top_pad_large_text ++dimen tooltip_corner_radius ++dimen tooltip_horizontal_padding ++dimen tooltip_margin ++dimen tooltip_precise_anchor_extra_offset ++dimen tooltip_precise_anchor_threshold ++dimen tooltip_vertical_padding ++dimen tooltip_y_offset_non_touch ++dimen tooltip_y_offset_touch ++drawable abc_ab_share_pack_mtrl_alpha ++drawable abc_action_bar_item_background_material ++drawable abc_btn_borderless_material ++drawable abc_btn_check_material ++drawable abc_btn_check_material_anim ++drawable abc_btn_check_to_on_mtrl_000 ++drawable abc_btn_check_to_on_mtrl_015 ++drawable abc_btn_colored_material ++drawable abc_btn_default_mtrl_shape ++drawable abc_btn_radio_material ++drawable abc_btn_radio_material_anim ++drawable abc_btn_radio_to_on_mtrl_000 ++drawable abc_btn_radio_to_on_mtrl_015 ++drawable abc_btn_switch_to_on_mtrl_00001 ++drawable abc_btn_switch_to_on_mtrl_00012 ++drawable abc_cab_background_internal_bg ++drawable abc_cab_background_top_material ++drawable abc_cab_background_top_mtrl_alpha ++drawable abc_control_background_material ++drawable abc_dialog_material_background ++drawable abc_edit_text_material ++drawable abc_ic_ab_back_material ++drawable abc_ic_arrow_drop_right_black_24dp ++drawable abc_ic_clear_material ++drawable abc_ic_commit_search_api_mtrl_alpha ++drawable abc_ic_go_search_api_material ++drawable abc_ic_menu_copy_mtrl_am_alpha ++drawable abc_ic_menu_cut_mtrl_alpha ++drawable abc_ic_menu_overflow_material ++drawable abc_ic_menu_paste_mtrl_am_alpha ++drawable abc_ic_menu_selectall_mtrl_alpha ++drawable abc_ic_menu_share_mtrl_alpha ++drawable abc_ic_search_api_material ++drawable abc_ic_voice_search_api_material ++drawable abc_item_background_holo_dark ++drawable abc_item_background_holo_light ++drawable abc_list_divider_material ++drawable abc_list_divider_mtrl_alpha ++drawable abc_list_focused_holo ++drawable abc_list_longpressed_holo ++drawable abc_list_pressed_holo_dark ++drawable abc_list_pressed_holo_light ++drawable abc_list_selector_background_transition_holo_dark ++drawable abc_list_selector_background_transition_holo_light ++drawable abc_list_selector_disabled_holo_dark ++drawable abc_list_selector_disabled_holo_light ++drawable abc_list_selector_holo_dark ++drawable abc_list_selector_holo_light ++drawable abc_menu_hardkey_panel_mtrl_mult ++drawable abc_popup_background_mtrl_mult ++drawable abc_ratingbar_indicator_material ++drawable abc_ratingbar_material ++drawable abc_ratingbar_small_material ++drawable abc_scrubber_control_off_mtrl_alpha ++drawable abc_scrubber_control_to_pressed_mtrl_000 ++drawable abc_scrubber_control_to_pressed_mtrl_005 ++drawable abc_scrubber_primary_mtrl_alpha ++drawable abc_scrubber_track_mtrl_alpha ++drawable abc_seekbar_thumb_material ++drawable abc_seekbar_tick_mark_material ++drawable abc_seekbar_track_material ++drawable abc_spinner_mtrl_am_alpha ++drawable abc_spinner_textfield_background_material ++drawable abc_star_black_48dp ++drawable abc_star_half_black_48dp ++drawable abc_switch_thumb_material ++drawable abc_switch_track_mtrl_alpha ++drawable abc_tab_indicator_material ++drawable abc_tab_indicator_mtrl_alpha ++drawable abc_text_cursor_material ++drawable abc_text_select_handle_left_mtrl ++drawable abc_text_select_handle_middle_mtrl ++drawable abc_text_select_handle_right_mtrl ++drawable abc_textfield_activated_mtrl_alpha ++drawable abc_textfield_default_mtrl_alpha ++drawable abc_textfield_search_activated_mtrl_alpha ++drawable abc_textfield_search_default_mtrl_alpha ++drawable abc_textfield_search_material ++drawable abc_vector_test ++drawable autofill_inline_suggestion_chip_background ++drawable btn_checkbox_checked_mtrl ++drawable btn_checkbox_checked_to_unchecked_mtrl_animation ++drawable btn_checkbox_unchecked_mtrl ++drawable btn_checkbox_unchecked_to_checked_mtrl_animation ++drawable btn_radio_off_mtrl ++drawable btn_radio_off_to_on_mtrl_animation ++drawable btn_radio_on_mtrl ++drawable btn_radio_on_to_off_mtrl_animation ++drawable notification_action_background ++drawable notification_bg ++drawable notification_bg_low ++drawable notification_bg_low_normal ++drawable notification_bg_low_pressed ++drawable notification_bg_normal ++drawable notification_bg_normal_pressed ++drawable notification_icon_background ++drawable notification_template_icon_bg ++drawable notification_template_icon_low_bg ++drawable notification_tile_bg ++drawable notify_panel_notification_icon_bg ++drawable redbox_top_border_background ++drawable test_level_drawable ++drawable tooltip_frame_dark ++drawable tooltip_frame_light ++id accessibility_action_clickable_span ++id accessibility_actions ++id accessibility_collection ++id accessibility_collection_item ++id accessibility_custom_action_0 ++id accessibility_custom_action_1 ++id accessibility_custom_action_10 ++id accessibility_custom_action_11 ++id accessibility_custom_action_12 ++id accessibility_custom_action_13 ++id accessibility_custom_action_14 ++id accessibility_custom_action_15 ++id accessibility_custom_action_16 ++id accessibility_custom_action_17 ++id accessibility_custom_action_18 ++id accessibility_custom_action_19 ++id accessibility_custom_action_2 ++id accessibility_custom_action_20 ++id accessibility_custom_action_21 ++id accessibility_custom_action_22 ++id accessibility_custom_action_23 ++id accessibility_custom_action_24 ++id accessibility_custom_action_25 ++id accessibility_custom_action_26 ++id accessibility_custom_action_27 ++id accessibility_custom_action_28 ++id accessibility_custom_action_29 ++id accessibility_custom_action_3 ++id accessibility_custom_action_30 ++id accessibility_custom_action_31 ++id accessibility_custom_action_4 ++id accessibility_custom_action_5 ++id accessibility_custom_action_6 ++id accessibility_custom_action_7 ++id accessibility_custom_action_8 ++id accessibility_custom_action_9 ++id accessibility_hint ++id accessibility_label ++id accessibility_links ++id accessibility_role ++id accessibility_state ++id accessibility_value ++id action_bar ++id action_bar_activity_content ++id action_bar_container ++id action_bar_root ++id action_bar_spinner ++id action_bar_subtitle ++id action_bar_title ++id action_container ++id action_context_bar ++id action_divider ++id action_image ++id action_menu_divider ++id action_menu_presenter ++id action_mode_bar ++id action_mode_bar_stub ++id action_mode_close_button ++id action_text ++id actions ++id activity_chooser_view_content ++id add ++id alertTitle ++id async ++id autofill_inline_suggestion_end_icon ++id autofill_inline_suggestion_start_icon ++id autofill_inline_suggestion_subtitle ++id autofill_inline_suggestion_title ++id blocking ++id buttonPanel ++id catalyst_redbox_title ++id center ++id centerCrop ++id centerInside ++id checkbox ++id checked ++id chronometer ++id content ++id contentPanel ++id custom ++id customPanel ++id decor_content_parent ++id default_activity_button ++id dialog_button ++id edit_query ++id expand_activities_button ++id expanded_menu ++id fitBottomStart ++id fitCenter ++id fitEnd ++id fitStart ++id fitXY ++id focusCrop ++id forever ++id fps_text ++id fragment_container_view_tag ++id group_divider ++id home ++id icon ++id icon_group ++id image ++id info ++id italic ++id item1 ++id item2 ++id item3 ++id item4 ++id labelled_by ++id line1 ++id line3 ++id listMode ++id list_item ++id message ++id multiply ++id none ++id normal ++id notification_background ++id notification_main_column ++id notification_main_column_container ++id off ++id on ++id parentPanel ++id pointer_enter ++id pointer_enter_capture ++id pointer_leave ++id pointer_leave_capture ++id pointer_move ++id pointer_move_capture ++id progress_circular ++id progress_horizontal ++id radio ++id react_test_id ++id right_icon ++id right_side ++id rn_frame_file ++id rn_frame_method ++id rn_redbox_dismiss_button ++id rn_redbox_line_separator ++id rn_redbox_loading_indicator ++id rn_redbox_reload_button ++id rn_redbox_report_button ++id rn_redbox_report_label ++id rn_redbox_stack ++id screen ++id scrollIndicatorDown ++id scrollIndicatorUp ++id scrollView ++id search_badge ++id search_bar ++id search_button ++id search_close_btn ++id search_edit_frame ++id search_go_btn ++id search_mag_icon ++id search_plate ++id search_src_text ++id search_voice_btn ++id select_dialog_listview ++id shortcut ++id spacer ++id special_effects_controller_view_tag ++id split_action_bar ++id src_atop ++id src_in ++id src_over ++id submenuarrow ++id submit_area ++id tabMode ++id tag_accessibility_actions ++id tag_accessibility_clickable_spans ++id tag_accessibility_heading ++id tag_accessibility_pane_title ++id tag_on_apply_window_listener ++id tag_on_receive_content_listener ++id tag_on_receive_content_mime_types ++id tag_screen_reader_focusable ++id tag_state_description ++id tag_transition_group ++id tag_unhandled_key_event_manager ++id tag_unhandled_key_listeners ++id tag_window_insets_animation_callback ++id text ++id text2 ++id textSpacerNoButtons ++id textSpacerNoTitle ++id time ++id title ++id titleDividerNoCustom ++id title_template ++id topPanel ++id unchecked ++id uniform ++id up ++id view_tag_instance_handle ++id view_tag_native_id ++id view_tree_lifecycle_owner ++id view_tree_saved_state_registry_owner ++id view_tree_view_model_store_owner ++id visible_removing_fragment_view_tag ++id wrap_content ++integer abc_config_activityDefaultDur ++integer abc_config_activityShortDur ++integer cancel_button_image_alpha ++integer config_tooltipAnimTime ++integer react_native_dev_server_port ++integer react_native_inspector_proxy_port ++integer status_bar_notification_info_maxnum ++interpolator btn_checkbox_checked_mtrl_animation_interpolator_0 ++interpolator btn_checkbox_checked_mtrl_animation_interpolator_1 ++interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_0 ++interpolator btn_checkbox_unchecked_mtrl_animation_interpolator_1 ++interpolator btn_radio_to_off_mtrl_animation_interpolator_0 ++interpolator btn_radio_to_on_mtrl_animation_interpolator_0 ++interpolator fast_out_slow_in ++layout abc_action_bar_title_item ++layout abc_action_bar_up_container ++layout abc_action_menu_item_layout ++layout abc_action_menu_layout ++layout abc_action_mode_bar ++layout abc_action_mode_close_item_material ++layout abc_activity_chooser_view ++layout abc_activity_chooser_view_list_item ++layout abc_alert_dialog_button_bar_material ++layout abc_alert_dialog_material ++layout abc_alert_dialog_title_material ++layout abc_cascading_menu_item_layout ++layout abc_dialog_title_material ++layout abc_expanded_menu_layout ++layout abc_list_menu_item_checkbox ++layout abc_list_menu_item_icon ++layout abc_list_menu_item_layout ++layout abc_list_menu_item_radio ++layout abc_popup_menu_header_item_layout ++layout abc_popup_menu_item_layout ++layout abc_screen_content_include ++layout abc_screen_simple ++layout abc_screen_simple_overlay_action_mode ++layout abc_screen_toolbar ++layout abc_search_dropdown_item_icons_2line ++layout abc_search_view ++layout abc_select_dialog_material ++layout abc_tooltip ++layout autofill_inline_suggestion ++layout custom_dialog ++layout dev_loading_view ++layout fps_view ++layout notification_action ++layout notification_action_tombstone ++layout notification_template_custom_big ++layout notification_template_icon_group ++layout notification_template_part_chronometer ++layout notification_template_part_time ++layout redbox_item_frame ++layout redbox_item_title ++layout redbox_view ++layout select_dialog_item_material ++layout select_dialog_multichoice_material ++layout select_dialog_singlechoice_material ++layout support_simple_spinner_dropdown_item ++menu example_menu ++menu example_menu2 ++string abc_action_bar_home_description ++string abc_action_bar_up_description ++string abc_action_menu_overflow_description ++string abc_action_mode_done ++string abc_activity_chooser_view_see_all ++string abc_activitychooserview_choose_application ++string abc_capital_off ++string abc_capital_on ++string abc_menu_alt_shortcut_label ++string abc_menu_ctrl_shortcut_label ++string abc_menu_delete_shortcut_label ++string abc_menu_enter_shortcut_label ++string abc_menu_function_shortcut_label ++string abc_menu_meta_shortcut_label ++string abc_menu_shift_shortcut_label ++string abc_menu_space_shortcut_label ++string abc_menu_sym_shortcut_label ++string abc_prepend_shortcut_label ++string abc_search_hint ++string abc_searchview_description_clear ++string abc_searchview_description_query ++string abc_searchview_description_search ++string abc_searchview_description_submit ++string abc_searchview_description_voice ++string abc_shareactionprovider_share_with ++string abc_shareactionprovider_share_with_application ++string abc_toolbar_collapse_description ++string alert_description ++string app_name ++string catalyst_change_bundle_location ++string catalyst_copy_button ++string catalyst_debug ++string catalyst_debug_chrome ++string catalyst_debug_chrome_stop ++string catalyst_debug_connecting ++string catalyst_debug_error ++string catalyst_debug_open ++string catalyst_debug_stop ++string catalyst_devtools_open ++string catalyst_dismiss_button ++string catalyst_heap_capture ++string catalyst_hot_reloading ++string catalyst_hot_reloading_auto_disable ++string catalyst_hot_reloading_auto_enable ++string catalyst_hot_reloading_stop ++string catalyst_inspector ++string catalyst_inspector_stop ++string catalyst_loading_from_url ++string catalyst_open_flipper_error ++string catalyst_perf_monitor ++string catalyst_perf_monitor_stop ++string catalyst_reload ++string catalyst_reload_button ++string catalyst_reload_error ++string catalyst_report_button ++string catalyst_sample_profiler_disable ++string catalyst_sample_profiler_enable ++string catalyst_settings ++string catalyst_settings_title ++string combobox_description ++string header_description ++string image_description ++string imagebutton_description ++string link_description ++string menu_description ++string menubar_description ++string menuitem_description ++string progressbar_description ++string radiogroup_description ++string rn_tab_description ++string scrollbar_description ++string search_menu_title ++string spinbutton_description ++string state_busy_description ++string state_collapsed_description ++string state_expanded_description ++string state_mixed_description ++string state_off_description ++string state_on_description ++string state_unselected_description ++string status_bar_notification_info_overflow ++string summary_description ++string tablist_description ++string timer_description ++string toolbar_description ++style AlertDialog_AppCompat ++style AlertDialog_AppCompat_Light ++style Animation_AppCompat_Dialog ++style Animation_AppCompat_DropDownUp ++style Animation_AppCompat_Tooltip ++style Animation_Catalyst_LogBox ++style Animation_Catalyst_RedBox ++style Base_AlertDialog_AppCompat ++style Base_AlertDialog_AppCompat_Light ++style Base_Animation_AppCompat_Dialog ++style Base_Animation_AppCompat_DropDownUp ++style Base_Animation_AppCompat_Tooltip ++style Base_DialogWindowTitleBackground_AppCompat ++style Base_DialogWindowTitle_AppCompat ++style Base_TextAppearance_AppCompat ++style Base_TextAppearance_AppCompat_Body1 ++style Base_TextAppearance_AppCompat_Body2 ++style Base_TextAppearance_AppCompat_Button ++style Base_TextAppearance_AppCompat_Caption ++style Base_TextAppearance_AppCompat_Display1 ++style Base_TextAppearance_AppCompat_Display2 ++style Base_TextAppearance_AppCompat_Display3 ++style Base_TextAppearance_AppCompat_Display4 ++style Base_TextAppearance_AppCompat_Headline ++style Base_TextAppearance_AppCompat_Inverse ++style Base_TextAppearance_AppCompat_Large ++style Base_TextAppearance_AppCompat_Large_Inverse ++style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Large ++style Base_TextAppearance_AppCompat_Light_Widget_PopupMenu_Small ++style Base_TextAppearance_AppCompat_Medium ++style Base_TextAppearance_AppCompat_Medium_Inverse ++style Base_TextAppearance_AppCompat_Menu ++style Base_TextAppearance_AppCompat_SearchResult ++style Base_TextAppearance_AppCompat_SearchResult_Subtitle ++style Base_TextAppearance_AppCompat_SearchResult_Title ++style Base_TextAppearance_AppCompat_Small ++style Base_TextAppearance_AppCompat_Small_Inverse ++style Base_TextAppearance_AppCompat_Subhead ++style Base_TextAppearance_AppCompat_Subhead_Inverse ++style Base_TextAppearance_AppCompat_Title ++style Base_TextAppearance_AppCompat_Title_Inverse ++style Base_TextAppearance_AppCompat_Tooltip ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Menu ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Title ++style Base_TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse ++style Base_TextAppearance_AppCompat_Widget_ActionMode_Subtitle ++style Base_TextAppearance_AppCompat_Widget_ActionMode_Title ++style Base_TextAppearance_AppCompat_Widget_Button ++style Base_TextAppearance_AppCompat_Widget_Button_Borderless_Colored ++style Base_TextAppearance_AppCompat_Widget_Button_Colored ++style Base_TextAppearance_AppCompat_Widget_Button_Inverse ++style Base_TextAppearance_AppCompat_Widget_DropDownItem ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Header ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Large ++style Base_TextAppearance_AppCompat_Widget_PopupMenu_Small ++style Base_TextAppearance_AppCompat_Widget_Switch ++style Base_TextAppearance_AppCompat_Widget_TextView_SpinnerItem ++style Base_TextAppearance_Widget_AppCompat_ExpandedMenu_Item ++style Base_TextAppearance_Widget_AppCompat_Toolbar_Subtitle ++style Base_TextAppearance_Widget_AppCompat_Toolbar_Title ++style Base_ThemeOverlay_AppCompat ++style Base_ThemeOverlay_AppCompat_ActionBar ++style Base_ThemeOverlay_AppCompat_Dark ++style Base_ThemeOverlay_AppCompat_Dark_ActionBar ++style Base_ThemeOverlay_AppCompat_Dialog ++style Base_ThemeOverlay_AppCompat_Dialog_Alert ++style Base_ThemeOverlay_AppCompat_Light ++style Base_Theme_AppCompat ++style Base_Theme_AppCompat_CompactMenu ++style Base_Theme_AppCompat_Dialog ++style Base_Theme_AppCompat_DialogWhenLarge ++style Base_Theme_AppCompat_Dialog_Alert ++style Base_Theme_AppCompat_Dialog_FixedSize ++style Base_Theme_AppCompat_Dialog_MinWidth ++style Base_Theme_AppCompat_Light ++style Base_Theme_AppCompat_Light_DarkActionBar ++style Base_Theme_AppCompat_Light_Dialog ++style Base_Theme_AppCompat_Light_DialogWhenLarge ++style Base_Theme_AppCompat_Light_Dialog_Alert ++style Base_Theme_AppCompat_Light_Dialog_FixedSize ++style Base_Theme_AppCompat_Light_Dialog_MinWidth ++style Base_V21_ThemeOverlay_AppCompat_Dialog ++style Base_V21_Theme_AppCompat ++style Base_V21_Theme_AppCompat_Dialog ++style Base_V21_Theme_AppCompat_Light ++style Base_V21_Theme_AppCompat_Light_Dialog ++style Base_V22_Theme_AppCompat ++style Base_V22_Theme_AppCompat_Light ++style Base_V23_Theme_AppCompat ++style Base_V23_Theme_AppCompat_Light ++style Base_V26_Theme_AppCompat ++style Base_V26_Theme_AppCompat_Light ++style Base_V26_Widget_AppCompat_Toolbar ++style Base_V28_Theme_AppCompat ++style Base_V28_Theme_AppCompat_Light ++style Base_V7_ThemeOverlay_AppCompat_Dialog ++style Base_V7_Theme_AppCompat ++style Base_V7_Theme_AppCompat_Dialog ++style Base_V7_Theme_AppCompat_Light ++style Base_V7_Theme_AppCompat_Light_Dialog ++style Base_V7_Widget_AppCompat_AutoCompleteTextView ++style Base_V7_Widget_AppCompat_EditText ++style Base_V7_Widget_AppCompat_Toolbar ++style Base_Widget_AppCompat_ActionBar ++style Base_Widget_AppCompat_ActionBar_Solid ++style Base_Widget_AppCompat_ActionBar_TabBar ++style Base_Widget_AppCompat_ActionBar_TabText ++style Base_Widget_AppCompat_ActionBar_TabView ++style Base_Widget_AppCompat_ActionButton ++style Base_Widget_AppCompat_ActionButton_CloseMode ++style Base_Widget_AppCompat_ActionButton_Overflow ++style Base_Widget_AppCompat_ActionMode ++style Base_Widget_AppCompat_ActivityChooserView ++style Base_Widget_AppCompat_AutoCompleteTextView ++style Base_Widget_AppCompat_Button ++style Base_Widget_AppCompat_ButtonBar ++style Base_Widget_AppCompat_ButtonBar_AlertDialog ++style Base_Widget_AppCompat_Button_Borderless ++style Base_Widget_AppCompat_Button_Borderless_Colored ++style Base_Widget_AppCompat_Button_ButtonBar_AlertDialog ++style Base_Widget_AppCompat_Button_Colored ++style Base_Widget_AppCompat_Button_Small ++style Base_Widget_AppCompat_CompoundButton_CheckBox ++style Base_Widget_AppCompat_CompoundButton_RadioButton ++style Base_Widget_AppCompat_CompoundButton_Switch ++style Base_Widget_AppCompat_DrawerArrowToggle ++style Base_Widget_AppCompat_DrawerArrowToggle_Common ++style Base_Widget_AppCompat_DropDownItem_Spinner ++style Base_Widget_AppCompat_EditText ++style Base_Widget_AppCompat_ImageButton ++style Base_Widget_AppCompat_Light_ActionBar ++style Base_Widget_AppCompat_Light_ActionBar_Solid ++style Base_Widget_AppCompat_Light_ActionBar_TabBar ++style Base_Widget_AppCompat_Light_ActionBar_TabText ++style Base_Widget_AppCompat_Light_ActionBar_TabText_Inverse ++style Base_Widget_AppCompat_Light_ActionBar_TabView ++style Base_Widget_AppCompat_Light_PopupMenu ++style Base_Widget_AppCompat_Light_PopupMenu_Overflow ++style Base_Widget_AppCompat_ListMenuView ++style Base_Widget_AppCompat_ListPopupWindow ++style Base_Widget_AppCompat_ListView ++style Base_Widget_AppCompat_ListView_DropDown ++style Base_Widget_AppCompat_ListView_Menu ++style Base_Widget_AppCompat_PopupMenu ++style Base_Widget_AppCompat_PopupMenu_Overflow ++style Base_Widget_AppCompat_PopupWindow ++style Base_Widget_AppCompat_ProgressBar ++style Base_Widget_AppCompat_ProgressBar_Horizontal ++style Base_Widget_AppCompat_RatingBar ++style Base_Widget_AppCompat_RatingBar_Indicator ++style Base_Widget_AppCompat_RatingBar_Small ++style Base_Widget_AppCompat_SearchView ++style Base_Widget_AppCompat_SearchView_ActionBar ++style Base_Widget_AppCompat_SeekBar ++style Base_Widget_AppCompat_SeekBar_Discrete ++style Base_Widget_AppCompat_Spinner ++style Base_Widget_AppCompat_Spinner_Underlined ++style Base_Widget_AppCompat_TextView ++style Base_Widget_AppCompat_TextView_SpinnerItem ++style Base_Widget_AppCompat_Toolbar ++style Base_Widget_AppCompat_Toolbar_Button_Navigation ++style CalendarDatePickerDialog ++style CalendarDatePickerStyle ++style DialogAnimationFade ++style DialogAnimationSlide ++style Platform_AppCompat ++style Platform_AppCompat_Light ++style Platform_ThemeOverlay_AppCompat ++style Platform_ThemeOverlay_AppCompat_Dark ++style Platform_ThemeOverlay_AppCompat_Light ++style Platform_V21_AppCompat ++style Platform_V21_AppCompat_Light ++style Platform_V25_AppCompat ++style Platform_V25_AppCompat_Light ++style Platform_Widget_AppCompat_Spinner ++style RtlOverlay_DialogWindowTitle_AppCompat ++style RtlOverlay_Widget_AppCompat_ActionBar_TitleItem ++style RtlOverlay_Widget_AppCompat_DialogTitle_Icon ++style RtlOverlay_Widget_AppCompat_PopupMenuItem ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_InternalGroup ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Shortcut ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_SubmenuArrow ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Text ++style RtlOverlay_Widget_AppCompat_PopupMenuItem_Title ++style RtlOverlay_Widget_AppCompat_SearchView_MagIcon ++style RtlOverlay_Widget_AppCompat_Search_DropDown ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon1 ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Icon2 ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Query ++style RtlOverlay_Widget_AppCompat_Search_DropDown_Text ++style RtlUnderlay_Widget_AppCompat_ActionButton ++style RtlUnderlay_Widget_AppCompat_ActionButton_Overflow ++style SpinnerDatePickerDialog ++style SpinnerDatePickerStyle ++style TextAppearance_AppCompat ++style TextAppearance_AppCompat_Body1 ++style TextAppearance_AppCompat_Body2 ++style TextAppearance_AppCompat_Button ++style TextAppearance_AppCompat_Caption ++style TextAppearance_AppCompat_Display1 ++style TextAppearance_AppCompat_Display2 ++style TextAppearance_AppCompat_Display3 ++style TextAppearance_AppCompat_Display4 ++style TextAppearance_AppCompat_Headline ++style TextAppearance_AppCompat_Inverse ++style TextAppearance_AppCompat_Large ++style TextAppearance_AppCompat_Large_Inverse ++style TextAppearance_AppCompat_Light_SearchResult_Subtitle ++style TextAppearance_AppCompat_Light_SearchResult_Title ++style TextAppearance_AppCompat_Light_Widget_PopupMenu_Large ++style TextAppearance_AppCompat_Light_Widget_PopupMenu_Small ++style TextAppearance_AppCompat_Medium ++style TextAppearance_AppCompat_Medium_Inverse ++style TextAppearance_AppCompat_Menu ++style TextAppearance_AppCompat_SearchResult_Subtitle ++style TextAppearance_AppCompat_SearchResult_Title ++style TextAppearance_AppCompat_Small ++style TextAppearance_AppCompat_Small_Inverse ++style TextAppearance_AppCompat_Subhead ++style TextAppearance_AppCompat_Subhead_Inverse ++style TextAppearance_AppCompat_Title ++style TextAppearance_AppCompat_Title_Inverse ++style TextAppearance_AppCompat_Tooltip ++style TextAppearance_AppCompat_Widget_ActionBar_Menu ++style TextAppearance_AppCompat_Widget_ActionBar_Subtitle ++style TextAppearance_AppCompat_Widget_ActionBar_Subtitle_Inverse ++style TextAppearance_AppCompat_Widget_ActionBar_Title ++style TextAppearance_AppCompat_Widget_ActionBar_Title_Inverse ++style TextAppearance_AppCompat_Widget_ActionMode_Subtitle ++style TextAppearance_AppCompat_Widget_ActionMode_Subtitle_Inverse ++style TextAppearance_AppCompat_Widget_ActionMode_Title ++style TextAppearance_AppCompat_Widget_ActionMode_Title_Inverse ++style TextAppearance_AppCompat_Widget_Button ++style TextAppearance_AppCompat_Widget_Button_Borderless_Colored ++style TextAppearance_AppCompat_Widget_Button_Colored ++style TextAppearance_AppCompat_Widget_Button_Inverse ++style TextAppearance_AppCompat_Widget_DropDownItem ++style TextAppearance_AppCompat_Widget_PopupMenu_Header ++style TextAppearance_AppCompat_Widget_PopupMenu_Large ++style TextAppearance_AppCompat_Widget_PopupMenu_Small ++style TextAppearance_AppCompat_Widget_Switch ++style TextAppearance_AppCompat_Widget_TextView_SpinnerItem ++style TextAppearance_Compat_Notification ++style TextAppearance_Compat_Notification_Info ++style TextAppearance_Compat_Notification_Line2 ++style TextAppearance_Compat_Notification_Time ++style TextAppearance_Compat_Notification_Title ++style TextAppearance_Widget_AppCompat_ExpandedMenu_Item ++style TextAppearance_Widget_AppCompat_Toolbar_Subtitle ++style TextAppearance_Widget_AppCompat_Toolbar_Title ++style Theme ++style ThemeOverlay_AppCompat ++style ThemeOverlay_AppCompat_ActionBar ++style ThemeOverlay_AppCompat_Dark ++style ThemeOverlay_AppCompat_Dark_ActionBar ++style ThemeOverlay_AppCompat_DayNight ++style ThemeOverlay_AppCompat_DayNight_ActionBar ++style ThemeOverlay_AppCompat_Dialog ++style ThemeOverlay_AppCompat_Dialog_Alert ++style ThemeOverlay_AppCompat_Light ++style Theme_AppCompat ++style Theme_AppCompat_CompactMenu ++style Theme_AppCompat_DayNight ++style Theme_AppCompat_DayNight_DarkActionBar ++style Theme_AppCompat_DayNight_Dialog ++style Theme_AppCompat_DayNight_DialogWhenLarge ++style Theme_AppCompat_DayNight_Dialog_Alert ++style Theme_AppCompat_DayNight_Dialog_MinWidth ++style Theme_AppCompat_DayNight_NoActionBar ++style Theme_AppCompat_Dialog ++style Theme_AppCompat_DialogWhenLarge ++style Theme_AppCompat_Dialog_Alert ++style Theme_AppCompat_Dialog_MinWidth ++style Theme_AppCompat_Empty ++style Theme_AppCompat_Light ++style Theme_AppCompat_Light_DarkActionBar ++style Theme_AppCompat_Light_Dialog ++style Theme_AppCompat_Light_DialogWhenLarge ++style Theme_AppCompat_Light_Dialog_Alert ++style Theme_AppCompat_Light_Dialog_MinWidth ++style Theme_AppCompat_Light_NoActionBar ++style Theme_AppCompat_NoActionBar ++style Theme_AutofillInlineSuggestion ++style Theme_Catalyst ++style Theme_Catalyst_LogBox ++style Theme_Catalyst_RedBox ++style Theme_FullScreenDialog ++style Theme_FullScreenDialogAnimatedFade ++style Theme_FullScreenDialogAnimatedSlide ++style Theme_ReactNative_AppCompat_Light ++style Theme_ReactNative_AppCompat_Light_NoActionBar_FullScreen ++style Widget_AppCompat_ActionBar ++style Widget_AppCompat_ActionBar_Solid ++style Widget_AppCompat_ActionBar_TabBar ++style Widget_AppCompat_ActionBar_TabText ++style Widget_AppCompat_ActionBar_TabView ++style Widget_AppCompat_ActionButton ++style Widget_AppCompat_ActionButton_CloseMode ++style Widget_AppCompat_ActionButton_Overflow ++style Widget_AppCompat_ActionMode ++style Widget_AppCompat_ActivityChooserView ++style Widget_AppCompat_AutoCompleteTextView ++style Widget_AppCompat_Button ++style Widget_AppCompat_ButtonBar ++style Widget_AppCompat_ButtonBar_AlertDialog ++style Widget_AppCompat_Button_Borderless ++style Widget_AppCompat_Button_Borderless_Colored ++style Widget_AppCompat_Button_ButtonBar_AlertDialog ++style Widget_AppCompat_Button_Colored ++style Widget_AppCompat_Button_Small ++style Widget_AppCompat_CompoundButton_CheckBox ++style Widget_AppCompat_CompoundButton_RadioButton ++style Widget_AppCompat_CompoundButton_Switch ++style Widget_AppCompat_DrawerArrowToggle ++style Widget_AppCompat_DropDownItem_Spinner ++style Widget_AppCompat_EditText ++style Widget_AppCompat_ImageButton ++style Widget_AppCompat_Light_ActionBar ++style Widget_AppCompat_Light_ActionBar_Solid ++style Widget_AppCompat_Light_ActionBar_Solid_Inverse ++style Widget_AppCompat_Light_ActionBar_TabBar ++style Widget_AppCompat_Light_ActionBar_TabBar_Inverse ++style Widget_AppCompat_Light_ActionBar_TabText ++style Widget_AppCompat_Light_ActionBar_TabText_Inverse ++style Widget_AppCompat_Light_ActionBar_TabView ++style Widget_AppCompat_Light_ActionBar_TabView_Inverse ++style Widget_AppCompat_Light_ActionButton ++style Widget_AppCompat_Light_ActionButton_CloseMode ++style Widget_AppCompat_Light_ActionButton_Overflow ++style Widget_AppCompat_Light_ActionMode_Inverse ++style Widget_AppCompat_Light_ActivityChooserView ++style Widget_AppCompat_Light_AutoCompleteTextView ++style Widget_AppCompat_Light_DropDownItem_Spinner ++style Widget_AppCompat_Light_ListPopupWindow ++style Widget_AppCompat_Light_ListView_DropDown ++style Widget_AppCompat_Light_PopupMenu ++style Widget_AppCompat_Light_PopupMenu_Overflow ++style Widget_AppCompat_Light_SearchView ++style Widget_AppCompat_Light_Spinner_DropDown_ActionBar ++style Widget_AppCompat_ListMenuView ++style Widget_AppCompat_ListPopupWindow ++style Widget_AppCompat_ListView ++style Widget_AppCompat_ListView_DropDown ++style Widget_AppCompat_ListView_Menu ++style Widget_AppCompat_PopupMenu ++style Widget_AppCompat_PopupMenu_Overflow ++style Widget_AppCompat_PopupWindow ++style Widget_AppCompat_ProgressBar ++style Widget_AppCompat_ProgressBar_Horizontal ++style Widget_AppCompat_RatingBar ++style Widget_AppCompat_RatingBar_Indicator ++style Widget_AppCompat_RatingBar_Small ++style Widget_AppCompat_SearchView ++style Widget_AppCompat_SearchView_ActionBar ++style Widget_AppCompat_SeekBar ++style Widget_AppCompat_SeekBar_Discrete ++style Widget_AppCompat_Spinner ++style Widget_AppCompat_Spinner_DropDown ++style Widget_AppCompat_Spinner_DropDown_ActionBar ++style Widget_AppCompat_Spinner_Underlined ++style Widget_AppCompat_TextView ++style Widget_AppCompat_TextView_SpinnerItem ++style Widget_AppCompat_Toolbar ++style Widget_AppCompat_Toolbar_Button_Navigation ++style Widget_Autofill ++style Widget_Autofill_InlineSuggestionChip ++style Widget_Autofill_InlineSuggestionEndIconStyle ++style Widget_Autofill_InlineSuggestionStartIconStyle ++style Widget_Autofill_InlineSuggestionSubtitle ++style Widget_Autofill_InlineSuggestionTitle ++style Widget_Compat_NotificationActionContainer ++style Widget_Compat_NotificationActionText ++style redboxButton ++styleable ActionBar background backgroundSplit backgroundStacked contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation customNavigationLayout displayOptions divider elevation height hideOnContentScroll homeAsUpIndicator homeLayout icon indeterminateProgressStyle itemPadding logo navigationMode popupTheme progressBarPadding progressBarStyle subtitle subtitleTextStyle title titleTextStyle ++styleable ActionBarLayout android_layout_gravity ++styleable ActionMenuItemView android_minWidth ++styleable ActionMenuView ++styleable ActionMode background backgroundSplit closeItemLayout height subtitleTextStyle titleTextStyle ++styleable ActivityChooserView expandActivityOverflowButtonDrawable initialActivityCount ++styleable AlertDialog android_layout buttonIconDimen buttonPanelSideLayout listItemLayout listLayout multiChoiceItemLayout showTitle singleChoiceItemLayout ++styleable AnimatedStateListDrawableCompat android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible ++styleable AnimatedStateListDrawableItem android_drawable android_id ++styleable AnimatedStateListDrawableTransition android_drawable android_fromId android_reversible android_toId ++styleable AppCompatEmojiHelper ++styleable AppCompatImageView android_src srcCompat tint tintMode ++styleable AppCompatSeekBar android_thumb tickMark tickMarkTint tickMarkTintMode ++styleable AppCompatTextHelper android_drawableBottom android_drawableEnd android_drawableLeft android_drawableRight android_drawableStart android_drawableTop android_textAppearance ++styleable AppCompatTextView android_textAppearance autoSizeMaxTextSize autoSizeMinTextSize autoSizePresetSizes autoSizeStepGranularity autoSizeTextType drawableBottomCompat drawableEndCompat drawableLeftCompat drawableRightCompat drawableStartCompat drawableTint drawableTintMode drawableTopCompat emojiCompatEnabled firstBaselineToTopHeight fontFamily fontVariationSettings lastBaselineToBottomHeight lineHeight textAllCaps textLocale ++styleable AppCompatTheme actionBarDivider actionBarItemBackground actionBarPopupTheme actionBarSize actionBarSplitStyle actionBarStyle actionBarTabBarStyle actionBarTabStyle actionBarTabTextStyle actionBarTheme actionBarWidgetTheme actionButtonStyle actionDropDownStyle actionMenuTextAppearance actionMenuTextColor actionModeBackground actionModeCloseButtonStyle actionModeCloseContentDescription actionModeCloseDrawable actionModeCopyDrawable actionModeCutDrawable actionModeFindDrawable actionModePasteDrawable actionModePopupWindowStyle actionModeSelectAllDrawable actionModeShareDrawable actionModeSplitBackground actionModeStyle actionModeTheme actionModeWebSearchDrawable actionOverflowButtonStyle actionOverflowMenuStyle activityChooserViewStyle alertDialogButtonGroupStyle alertDialogCenterButtons alertDialogStyle alertDialogTheme android_windowAnimationStyle android_windowIsFloating autoCompleteTextViewStyle borderlessButtonStyle buttonBarButtonStyle buttonBarNegativeButtonStyle buttonBarNeutralButtonStyle buttonBarPositiveButtonStyle buttonBarStyle buttonStyle buttonStyleSmall checkboxStyle checkedTextViewStyle colorAccent colorBackgroundFloating colorButtonNormal colorControlActivated colorControlHighlight colorControlNormal colorError colorPrimary colorPrimaryDark colorSwitchThumbNormal controlBackground dialogCornerRadius dialogPreferredPadding dialogTheme dividerHorizontal dividerVertical dropDownListViewStyle dropdownListPreferredItemHeight editTextBackground editTextColor editTextStyle homeAsUpIndicator imageButtonStyle listChoiceBackgroundIndicator listChoiceIndicatorMultipleAnimated listChoiceIndicatorSingleAnimated listDividerAlertDialog listMenuViewStyle listPopupWindowStyle listPreferredItemHeight listPreferredItemHeightLarge listPreferredItemHeightSmall listPreferredItemPaddingEnd listPreferredItemPaddingLeft listPreferredItemPaddingRight listPreferredItemPaddingStart panelBackground panelMenuListTheme panelMenuListWidth popupMenuStyle popupWindowStyle radioButtonStyle ratingBarStyle ratingBarStyleIndicator ratingBarStyleSmall searchViewStyle seekBarStyle selectableItemBackground selectableItemBackgroundBorderless spinnerDropDownItemStyle spinnerStyle switchStyle textAppearanceLargePopupMenu textAppearanceListItem textAppearanceListItemSecondary textAppearanceListItemSmall textAppearancePopupMenuHeader textAppearanceSearchResultSubtitle textAppearanceSearchResultTitle textAppearanceSmallPopupMenu textColorAlertDialogListItem textColorSearchUrl toolbarNavigationButtonStyle toolbarStyle tooltipForegroundColor tooltipFrameBackground viewInflaterClass windowActionBar windowActionBarOverlay windowActionModeOverlay windowFixedHeightMajor windowFixedHeightMinor windowFixedWidthMajor windowFixedWidthMinor windowMinWidthMajor windowMinWidthMinor windowNoTitle ++styleable Autofill_InlineSuggestion autofillInlineSuggestionChip autofillInlineSuggestionEndIconStyle autofillInlineSuggestionStartIconStyle autofillInlineSuggestionSubtitle autofillInlineSuggestionTitle isAutofillInlineSuggestionTheme ++styleable ButtonBarLayout allowStacking ++styleable Capability queryPatterns shortcutMatchRequired ++styleable CheckedTextView android_checkMark checkMarkCompat checkMarkTint checkMarkTintMode ++styleable ColorStateListItem alpha android_alpha android_color android_lStar lStar ++styleable CompoundButton android_button buttonCompat buttonTint buttonTintMode ++styleable DrawerArrowToggle arrowHeadLength arrowShaftLength barLength color drawableSize gapBetweenBars spinBars thickness ++styleable FontFamily fontProviderAuthority fontProviderCerts fontProviderFetchStrategy fontProviderFetchTimeout fontProviderPackage fontProviderQuery fontProviderSystemFontFamily ++styleable FontFamilyFont android_font android_fontStyle android_fontVariationSettings android_fontWeight android_ttcIndex font fontStyle fontVariationSettings fontWeight ttcIndex ++styleable Fragment android_id android_name android_tag ++styleable FragmentContainerView android_name android_tag ++styleable GenericDraweeHierarchy actualImageScaleType backgroundImage fadeDuration failureImage failureImageScaleType overlayImage placeholderImage placeholderImageScaleType pressedStateOverlayImage progressBarAutoRotateInterval progressBarImage progressBarImageScaleType retryImage retryImageScaleType roundAsCircle roundBottomEnd roundBottomLeft roundBottomRight roundBottomStart roundTopEnd roundTopLeft roundTopRight roundTopStart roundWithOverlayColor roundedCornerRadius roundingBorderColor roundingBorderPadding roundingBorderWidth viewAspectRatio ++styleable GradientColor android_centerColor android_centerX android_centerY android_endColor android_endX android_endY android_gradientRadius android_startColor android_startX android_startY android_tileMode android_type ++styleable GradientColorItem android_color android_offset ++styleable LinearLayoutCompat android_baselineAligned android_baselineAlignedChildIndex android_gravity android_orientation android_weightSum divider dividerPadding measureWithLargestChild showDividers ++styleable LinearLayoutCompat_Layout android_layout_gravity android_layout_height android_layout_weight android_layout_width ++styleable ListPopupWindow android_dropDownHorizontalOffset android_dropDownVerticalOffset ++styleable MenuGroup android_checkableBehavior android_enabled android_id android_menuCategory android_orderInCategory android_visible ++styleable MenuItem actionLayout actionProviderClass actionViewClass alphabeticModifiers android_alphabeticShortcut android_checkable android_checked android_enabled android_icon android_id android_menuCategory android_numericShortcut android_onClick android_orderInCategory android_title android_titleCondensed android_visible contentDescription iconTint iconTintMode numericModifiers showAsAction tooltipText ++styleable MenuView android_headerBackground android_horizontalDivider android_itemBackground android_itemIconDisabledAlpha android_itemTextAppearance android_verticalDivider android_windowAnimationStyle preserveIconSpacing subMenuArrow ++styleable PopupWindow android_popupAnimationStyle android_popupBackground overlapAnchor ++styleable PopupWindowBackgroundState state_above_anchor ++styleable RecycleListView paddingBottomNoButtons paddingTopNoTitle ++styleable SearchView android_focusable android_imeOptions android_inputType android_maxWidth closeIcon commitIcon defaultQueryHint goIcon iconifiedByDefault layout queryBackground queryHint searchHintIcon searchIcon submitBackground suggestionRowLayout voiceIcon ++styleable SimpleDraweeView actualImageResource actualImageScaleType actualImageUri backgroundImage fadeDuration failureImage failureImageScaleType overlayImage placeholderImage placeholderImageScaleType pressedStateOverlayImage progressBarAutoRotateInterval progressBarImage progressBarImageScaleType retryImage retryImageScaleType roundAsCircle roundBottomEnd roundBottomLeft roundBottomRight roundBottomStart roundTopEnd roundTopLeft roundTopRight roundTopStart roundWithOverlayColor roundedCornerRadius roundingBorderColor roundingBorderPadding roundingBorderWidth viewAspectRatio ++styleable Spinner android_dropDownWidth android_entries android_popupBackground android_prompt popupTheme ++styleable StateListDrawable android_constantSize android_dither android_enterFadeDuration android_exitFadeDuration android_variablePadding android_visible ++styleable StateListDrawableItem android_drawable ++styleable SwitchCompat android_textOff android_textOn android_thumb showText splitTrack switchMinWidth switchPadding switchTextAppearance thumbTextPadding thumbTint thumbTintMode track trackTint trackTintMode ++styleable TextAppearance android_fontFamily android_shadowColor android_shadowDx android_shadowDy android_shadowRadius android_textColor android_textColorHint android_textColorLink android_textFontWeight android_textSize android_textStyle android_typeface fontFamily fontVariationSettings textAllCaps textLocale ++styleable Toolbar android_gravity android_minHeight buttonGravity collapseContentDescription collapseIcon contentInsetEnd contentInsetEndWithActions contentInsetLeft contentInsetRight contentInsetStart contentInsetStartWithNavigation logo logoDescription maxButtonHeight menu navigationContentDescription navigationIcon popupTheme subtitle subtitleTextAppearance subtitleTextColor title titleMargin titleMarginBottom titleMarginEnd titleMarginStart titleMarginTop titleMargins titleTextAppearance titleTextColor ++styleable View android_focusable android_theme paddingEnd paddingStart theme ++styleable ViewBackgroundHelper android_background backgroundTint backgroundTintMode ++styleable ViewStubCompat android_id android_inflatedId android_layout ++xml provider_paths ++xml rn_dev_preferences +diff --git a/node_modules/rn-fetch-blob/android/build/outputs/logs/manifest-merger-debug-report.txt b/node_modules/rn-fetch-blob/android/build/outputs/logs/manifest-merger-debug-report.txt +new file mode 100644 +index 0000000..61287fd +--- /dev/null ++++ b/node_modules/rn-fetch-blob/android/build/outputs/logs/manifest-merger-debug-report.txt +@@ -0,0 +1,69 @@ ++-- Merging decision tree log --- ++manifest ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:1:1-37:12 ++INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:1:1-37:12 ++INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:1:1-37:12 ++ package ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:2:5-30 ++ INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ xmlns:android ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:1:11-69 ++uses-permission#com.android.vending.CHECK_LICENSE ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:5:5-73 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:5:22-70 ++uses-permission#android.permission.INTERNET ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:8:5-67 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:8:22-64 ++uses-permission#android.permission.WAKE_LOCK ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:12:5-68 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:12:22-65 ++uses-permission#android.permission.ACCESS_NETWORK_STATE ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:16:5-79 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:16:22-76 ++uses-permission#android.permission.ACCESS_WIFI_STATE ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:19:5-76 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:19:22-73 ++uses-permission#android.permission.WRITE_EXTERNAL_STORAGE ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:22:5-81 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:22:22-78 ++application ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:24:5-35:19 ++ android:label ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:24:18-50 ++provider#com.RNFetchBlob.Utils.FileProvider ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:26:9-34:20 ++ android:grantUriPermissions ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:30:13-47 ++ android:authorities ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:28:13-60 ++ android:exported ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:29:13-37 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:27:13-62 ++meta-data#android.support.FILE_PROVIDER_PATHS ++ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:31:13-33:58 ++ android:resource ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:33:17-55 ++ android:name ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml:32:17-67 ++uses-sdk ++INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml reason: use-sdk injection requested ++INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ android:targetSdkVersion ++ INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ android:minSdkVersion ++ INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ ADDED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml ++ INJECTED from /Users/noumantahir/Documents/ReactNativeProjects/ecency-mobile/node_modules/rn-fetch-blob/android/src/main/AndroidManifest.xml +diff --git a/node_modules/rn-fetch-blob/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin b/node_modules/rn-fetch-blob/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin +new file mode 100644 +index 0000000..cc8fe91 +Binary files /dev/null and b/node_modules/rn-fetch-blob/android/build/tmp/compileDebugJavaWithJavac/previous-compilation-data.bin differ diff --git a/reactotron-config.ts b/reactotron-config.ts index d90de9970..973ff4fce 100644 --- a/reactotron-config.ts +++ b/reactotron-config.ts @@ -1,14 +1,13 @@ -import AsyncStorage from '@react-native-community/async-storage' -import Reactotron from 'reactotron-react-native' -import { reactotronRedux } from 'reactotron-redux' +import AsyncStorage from '@react-native-async-storage/async-storage'; +import Reactotron from 'reactotron-react-native'; +import { reactotronRedux } from 'reactotron-redux'; -const reactotron = Reactotron - .setAsyncStorageHandler(AsyncStorage) // AsyncStorage would either come from `react-native` or `@react-native-community/async-storage` depending on where you get it from +const reactotron = Reactotron.setAsyncStorageHandler(AsyncStorage) // AsyncStorage would either come from `react-native` or `@react-native-community/async-storage` depending on where you get it from .configure({ - name: "Ecency" + name: 'Ecency', }) .useReactNative() // add all built-in react native plugins .use(reactotronRedux()) - .connect() // let's connect! + .connect(); // let's connect! -export default reactotron; \ No newline at end of file +export default reactotron; diff --git a/src/assets/ImageAssets.ts b/src/assets/ImageAssets.ts index 521460ffb..34079e037 100644 --- a/src/assets/ImageAssets.ts +++ b/src/assets/ImageAssets.ts @@ -1,3 +1,3 @@ export default { - writerMascot:require("./writer_mascot.png") -} \ No newline at end of file + writerMascot: require('./writer_mascot.png'), +}; diff --git a/src/components/accountsBottomSheet/container/accountsBottomSheetContainer.tsx b/src/components/accountsBottomSheet/container/accountsBottomSheetContainer.tsx index d3e665c4f..b8db2a5bb 100644 --- a/src/components/accountsBottomSheet/container/accountsBottomSheetContainer.tsx +++ b/src/components/accountsBottomSheet/container/accountsBottomSheetContainer.tsx @@ -1,12 +1,27 @@ import React, { useEffect, useRef, useState } from 'react'; import { useSelector, useDispatch } from 'react-redux'; +import { Alert } from 'react-native'; +import { useIntl } from 'react-intl'; import RootNavigation from '../../../navigation/rootNavigation'; import { removeOtherAccount, updateCurrentAccount } from '../../../redux/actions/accountAction'; -import { isPinCodeOpen, isRenderRequired, login, logout, logoutDone } from '../../../redux/actions/applicationActions'; +import { + isPinCodeOpen, + isRenderRequired, + login, + logout, + logoutDone, +} from '../../../redux/actions/applicationActions'; -import { getUserDataWithUsername, removeAllUserData, removePinCode, setAuthStatus, setExistUser, setPinCodeOpen } from '../../../realm/realm'; +import { + getUserDataWithUsername, + removeAllUserData, + removePinCode, + setAuthStatus, + setExistUser, + setPinCodeOpen, +} from '../../../realm/realm'; import { migrateToMasterKeyWithAccessToken, refreshSCToken, @@ -16,16 +31,14 @@ import { import AccountsBottomSheet from '../view/accountsBottomSheetView'; import { toggleAccountsBottomSheet } from '../../../redux/actions/uiAction'; -//Constants +// Constants import AUTH_TYPE from '../../../constants/authType'; import { getDigitPinCode, getMutes } from '../../../providers/hive/dhive'; import { setFeedPosts, setInitPosts } from '../../../redux/actions/postsAction'; -import { Alert } from 'react-native'; -import { useIntl } from 'react-intl'; import { useAppSelector } from '../../../hooks'; import { getUnreadNotificationCount } from '../../../providers/ecency/ecency'; import { decryptKey } from '../../../utils/crypto'; -import { getPointsSummary} from '../../../providers/ecency/ePoint'; +import { getPointsSummary } from '../../../providers/ecency/ePoint'; import { fetchSubscribedCommunities } from '../../../redux/actions/communitiesAction'; import { clearSubscribedCommunitiesCache } from '../../../redux/actions/cacheActions'; @@ -71,7 +84,6 @@ const AccountsBottomSheetContainer = ({ navigation }) => { dispatch(logout()); }; - const _handleSwitch = async (switchingAccount = {}) => { try { const accountData = accounts.filter( @@ -79,25 +91,29 @@ const AccountsBottomSheetContainer = ({ navigation }) => { )[0]; // if account data has persistet content use that first - //to avoid lag + // to avoid lag if (accountData.name) { accountData.username = accountData.name; dispatch(updateCurrentAccount(accountData)); } - //fetch upto data account data nd update current account; + // fetch upto data account data nd update current account; let _currentAccount = await switchAccount(accountData.username); const realmData = await getUserDataWithUsername(accountData.username); _currentAccount.username = _currentAccount.name; _currentAccount.local = realmData[0]; - //migreate account to use access token for master key auth type + // migreate account to use access token for master key auth type if (realmData[0].authType !== AUTH_TYPE.STEEM_CONNECT && realmData[0].accessToken === '') { - _currentAccount = await migrateToMasterKeyWithAccessToken(_currentAccount, realmData[0], pinHash); - } + _currentAccount = await migrateToMasterKeyWithAccessToken( + _currentAccount, + realmData[0], + pinHash, + ); + } - //refresh access token + // refresh access token const encryptedAccessToken = await refreshSCToken( _currentAccount.local, getDigitPinCode(pinHash), @@ -112,10 +128,8 @@ const AccountsBottomSheetContainer = ({ navigation }) => { dispatch(updateCurrentAccount(_currentAccount)); dispatch(clearSubscribedCommunitiesCache()); - dispatch(fetchSubscribedCommunities(_currentAccount.username)) - } - - catch(error){ + dispatch(fetchSubscribedCommunities(_currentAccount.username)); + } catch (error) { Alert.alert( intl.formatMessage({ id: 'alert.fail', diff --git a/src/components/accountsBottomSheet/view/accountsBottomSheetView.js b/src/components/accountsBottomSheet/view/accountsBottomSheetView.js index 4a0145196..e3e84a986 100644 --- a/src/components/accountsBottomSheet/view/accountsBottomSheetView.js +++ b/src/components/accountsBottomSheet/view/accountsBottomSheetView.js @@ -34,7 +34,7 @@ const AccountsBottomSheet = forwardRef( }, })); - //_handlePressAccountTile(item) + // _handlePressAccountTile(item) const _renderAccountTile = ({ item }) => ( switchAccount(item)}> diff --git a/src/components/actionModal/container/actionModalContainer.tsx b/src/components/actionModal/container/actionModalContainer.tsx index 2319e17ff..750f63a22 100644 --- a/src/components/actionModal/container/actionModalContainer.tsx +++ b/src/components/actionModal/container/actionModalContainer.tsx @@ -1,53 +1,44 @@ import React, { useEffect, useRef, useState } from 'react'; -import {AlertButton } from 'react-native'; +import { AlertButton } from 'react-native'; import { Source } from 'react-native-fast-image'; import { useSelector, useDispatch } from 'react-redux'; import { hideActionModal } from '../../../redux/actions/uiAction'; import ActionModalView, { ActionModalRef } from '../view/actionModalView'; export interface ActionModalData { - title:string, - body:string, - para?: string, - buttons:AlertButton[], - headerImage?:Source, - onClosed:()=>void, - headerContent?: React.ReactNode, + title: string; + body: string; + para?: string; + buttons: AlertButton[]; + headerImage?: Source; + onClosed: () => void; + headerContent?: React.ReactNode; } - const ActionModalContainer = ({ navigation }) => { const dispatch = useDispatch(); const actionModalRef = useRef(); const actionModalVisible = useSelector((state) => state.ui.actionModalVisible); - const actionModalData:ActionModalData = useSelector(state => state.ui.actionModalData) - + const actionModalData: ActionModalData = useSelector((state) => state.ui.actionModalData); + const [modalToken, setModalToken] = useState(0); useEffect(() => { if (actionModalVisible && actionModalVisible !== modalToken) { - actionModalRef.current?.showModal(); - setModalToken(actionModalVisible); + actionModalRef.current?.showModal(); + setModalToken(actionModalVisible); } }, [actionModalVisible]); - const _onClose = () => { - if(actionModalData.onClosed){ + if (actionModalData.onClosed) { actionModalData.onClosed(); } dispatch(hideActionModal()); }; - - return ( - - ); + return ; }; -export default ActionModalContainer; \ No newline at end of file +export default ActionModalContainer; diff --git a/src/components/actionModal/view/actionModalView.tsx b/src/components/actionModal/view/actionModalView.tsx index de2f45b0c..bec47ab92 100644 --- a/src/components/actionModal/view/actionModalView.tsx +++ b/src/components/actionModal/view/actionModalView.tsx @@ -1,130 +1,100 @@ import React, { forwardRef, useImperativeHandle, useRef } from 'react'; -import {View, Text} from 'react-native'; +import { View, Text } from 'react-native'; import FastImage from 'react-native-fast-image'; +import EStyleSheet from 'react-native-extended-stylesheet'; +import ActionSheet from 'react-native-actions-sheet'; import { TextButton } from '../../buttons'; import styles from './actionModalStyles'; import { ActionModalData } from '../container/actionModalContainer'; -import EStyleSheet from 'react-native-extended-stylesheet'; -import ActionSheet from 'react-native-actions-sheet'; - export interface ActionModalRef { - showModal:()=>void; - closeModal:()=>void; + showModal: () => void; + closeModal: () => void; } interface ActionModalViewProps { - onClose:()=>void; - data:ActionModalData; + onClose: () => void; + data: ActionModalData; } -const ActionModalView = ({onClose, data}: ActionModalViewProps, ref) => { +const ActionModalView = ({ onClose, data }: ActionModalViewProps, ref) => { + const sheetModalRef = useRef(); - const sheetModalRef = useRef(); + useImperativeHandle(ref, () => ({ + showModal: () => { + console.log('Showing action modal'); + sheetModalRef.current?.setModalVisible(true); + }, + closeModal() { + sheetModalRef.current?.setModalVisible(false); + }, + })); - useImperativeHandle(ref, () => ({ - showModal: () => { - console.log("Showing action modal") - sheetModalRef.current?.setModalVisible(true); - }, - closeModal() { - - sheetModalRef.current?.setModalVisible(false); - }, - })); + if (!data) { + return null; + } - if(!data){ - return null; - } + const { title, body, buttons, headerImage, para, headerContent } = data; - const { - title, - body, - buttons, - headerImage, - para, - headerContent - } = data; + const _renderContent = ( + + {headerContent && headerContent} + {headerImage && ( + + )} + + {title} + {!!body && ( + <> + {body} + {para} + + )} + - const _renderContent = ( - - { - headerContent && ( - headerContent - ) - } - { - headerImage && ( - - ) - } - - - {title} - {!!body && ( - <> - {body} - {para} - - )} - - - - - - - {buttons ? ( - buttons.map((props)=>( - { - sheetModalRef.current?.setModalVisible(false); - props.onPress(evn); - }} - style={styles.button} - textStyle={styles.btnText} - /> - )) - ):( - { - sheetModalRef.current?.setModalVisible(false); - }} - style={styles.button} - textStyle={styles.btnText} - /> - ) - } - - - ) + + {buttons ? ( + buttons.map((props) => ( + { + sheetModalRef.current?.setModalVisible(false); + props.onPress(evn); + }} + style={styles.button} + textStyle={styles.btnText} + /> + )) + ) : ( + { + sheetModalRef.current?.setModalVisible(false); + }} + style={styles.button} + textStyle={styles.btnText} + /> + )} + + + ); return ( - - - {_renderContent} - - + + {_renderContent} + ); }; export default forwardRef(ActionModalView); - - - diff --git a/src/components/atoms/index.ts b/src/components/atoms/index.ts index c27b8824d..fcca39246 100644 --- a/src/components/atoms/index.ts +++ b/src/components/atoms/index.ts @@ -1,2 +1,2 @@ export * from './optionsModal'; -export * from './progressBar' \ No newline at end of file +export * from './progressBar'; diff --git a/src/components/atoms/optionsModal/container/optionsModalContainer.tsx b/src/components/atoms/optionsModal/container/optionsModalContainer.tsx index d799ee94d..9db10b8e0 100644 --- a/src/components/atoms/optionsModal/container/optionsModalContainer.tsx +++ b/src/components/atoms/optionsModal/container/optionsModalContainer.tsx @@ -1,43 +1,33 @@ -import React, { forwardRef, useImperativeHandle, useRef, useEffect } from 'react' -import ActionSheet from 'react-native-actionsheet' +import React, { forwardRef, useImperativeHandle, useRef, useEffect } from 'react'; +import ActionSheet from 'react-native-actionsheet'; interface Props { - options:string[], - title:string, - cancelButtonIndex:number, - destructiveButtonIndex?:number, - onPress:(index:number)=>void + options: string[]; + title: string; + cancelButtonIndex: number; + destructiveButtonIndex?: number; + onPress: (index: number) => void; } -export const OptionsModal = forwardRef(({onPress, ...props}: Props, ref:any) => { - const actionSheetRef = useRef(); - const callbackRef = useRef(); +export const OptionsModal = forwardRef(({ onPress, ...props }: Props, ref: any) => { + const actionSheetRef = useRef(); + const callbackRef = useRef(); - useEffect(() => { - callbackRef.current = onPress; - }, [onPress]) + useEffect(() => { + callbackRef.current = onPress; + }, [onPress]); + useImperativeHandle(ref, () => ({ + show() { + if (actionSheetRef.current) { + actionSheetRef.current.show(); + } + }, + })); - useImperativeHandle( - ref, - () => ({ - show(){ - if(actionSheetRef.current){ - actionSheetRef.current.show() - } - } - }) - ) + const _onPress = (index: number) => { + callbackRef.current(index); + }; - const _onPress = (index:number) => { - callbackRef.current(index); - } - - return ( - - ) + return ; }); diff --git a/src/components/atoms/optionsModal/index.ts b/src/components/atoms/optionsModal/index.ts index 544af9020..9fb5f34e0 100644 --- a/src/components/atoms/optionsModal/index.ts +++ b/src/components/atoms/optionsModal/index.ts @@ -1 +1 @@ -export * from './container/optionsModalContainer'; \ No newline at end of file +export * from './container/optionsModalContainer'; diff --git a/src/components/atoms/progressBar/children/progresBarStyles.ts b/src/components/atoms/progressBar/children/progresBarStyles.ts index d9e17ae89..91c36720c 100644 --- a/src/components/atoms/progressBar/children/progresBarStyles.ts +++ b/src/components/atoms/progressBar/children/progresBarStyles.ts @@ -1,17 +1,17 @@ import EStyleSheet from 'react-native-extended-stylesheet'; export default EStyleSheet.create({ - container:{ - backgroundColor:'$primaryLightBackground', - flexDirection:'row', - borderRadius:16, - height:16, - alignSelf:'stretch', - marginHorizontal:8, - marginBottom:12, - }, - filled:{ - borderRadius:16, - backgroundColor:'$primaryBlue' - }, + container: { + backgroundColor: '$primaryLightBackground', + flexDirection: 'row', + borderRadius: 16, + height: 16, + alignSelf: 'stretch', + marginHorizontal: 8, + marginBottom: 12, + }, + filled: { + borderRadius: 16, + backgroundColor: '$primaryBlue', + }, }); diff --git a/src/components/atoms/progressBar/container/progressBar.tsx b/src/components/atoms/progressBar/container/progressBar.tsx index 0f95da0f4..d4c655ea2 100644 --- a/src/components/atoms/progressBar/container/progressBar.tsx +++ b/src/components/atoms/progressBar/container/progressBar.tsx @@ -1,20 +1,15 @@ import React from 'react'; -import { View } from "react-native" +import { View } from 'react-native'; import styles from '../children/progresBarStyles'; - - -export const ProgressBar = ({ - progress -}) => { - - const containerStyle = {...styles.container}; - const filledStyle = {...styles.filled, flex:progress}; - const unfilledStyle = {flex:100 - progress} - return ( - - - - - ) -} \ No newline at end of file +export const ProgressBar = ({ progress }) => { + const containerStyle = { ...styles.container }; + const filledStyle = { ...styles.filled, flex: progress }; + const unfilledStyle = { flex: 100 - progress }; + return ( + + + + + ); +}; diff --git a/src/components/atoms/progressBar/index.ts b/src/components/atoms/progressBar/index.ts index 5c592bd57..fcf7ef606 100644 --- a/src/components/atoms/progressBar/index.ts +++ b/src/components/atoms/progressBar/index.ts @@ -1 +1 @@ -export * from './container/progressBar'; \ No newline at end of file +export * from './container/progressBar'; diff --git a/src/components/autoHeightImage/autoHeightImage.tsx b/src/components/autoHeightImage/autoHeightImage.tsx index 9596e79bf..e41f1917e 100644 --- a/src/components/autoHeightImage/autoHeightImage.tsx +++ b/src/components/autoHeightImage/autoHeightImage.tsx @@ -1,63 +1,59 @@ -import React, { useEffect, useState } from "react"; -import { Image } from "react-native"; -import EStyleSheet from "react-native-extended-stylesheet"; -import FastImage from "react-native-fast-image"; -import { TouchableOpacity } from "react-native-gesture-handler"; +import React, { useEffect, useState } from 'react'; +import { Image } from 'react-native'; +import EStyleSheet from 'react-native-extended-stylesheet'; +import FastImage from 'react-native-fast-image'; +import { TouchableOpacity } from 'react-native-gesture-handler'; - interface AutoHeightImageProps { - contentWidth:number, - imgUrl:string, - isAnchored:boolean, - activeOpacity?:number, - onPress:()=>void, - } +interface AutoHeightImageProps { + contentWidth: number; + imgUrl: string; + isAnchored: boolean; + activeOpacity?: number; + onPress: () => void; +} +export const AutoHeightImage = ({ + contentWidth, + imgUrl, + isAnchored, + activeOpacity, + onPress, +}: AutoHeightImageProps) => { + const [imgWidth, setImgWidth] = useState(contentWidth); + const [imgHeight, setImgHeight] = useState(imgWidth * (9 / 16)); + const [onLoadCalled, setOnLoadCalled] = useState(false); - export const AutoHeightImage = ({ - contentWidth, - imgUrl, - isAnchored, - activeOpacity, - onPress - }:AutoHeightImageProps) => { + useEffect(() => { + _fetchImageBounds(); + }, []); + const _fetchImageBounds = () => { + Image.getSize(imgUrl, (width, height) => { + const newWidth = width < contentWidth ? width : contentWidth; + const newHeight = (height / width) * newWidth; + setImgHeight(newHeight); + setImgWidth(newWidth); + }); + }; - const [imgWidth, setImgWidth] = useState(contentWidth); - const [imgHeight, setImgHeight] = useState(imgWidth * (9/16)) - const [onLoadCalled, setOnLoadCalled] = useState(false); + const imgStyle = { + width: imgWidth - 10, + height: imgHeight, + backgroundColor: onLoadCalled ? 'transparent' : EStyleSheet.value('$primaryGray'), + }; - useEffect(() => { - _fetchImageBounds(); - }, []) + const _onLoad = () => { + setOnLoadCalled(true); + }; - const _fetchImageBounds = () => { - Image.getSize(imgUrl, (width, height)=>{ - const newWidth = width < contentWidth ? width : contentWidth; - const newHeight = (height / width) * newWidth; - setImgHeight(newHeight); - setImgWidth(newWidth); - }) - } - - const imgStyle = { - width:imgWidth - 10, - height:imgHeight, - backgroundColor: onLoadCalled ? 'transparent' : EStyleSheet.value('$primaryGray') - } - - const _onLoad = () => { - setOnLoadCalled(true); - } - - return ( - - - - - ) - } \ No newline at end of file + return ( + + + + ); +}; diff --git a/src/components/avatarHeader/avatarHeaderView.js b/src/components/avatarHeader/avatarHeaderView.js index 573dcd91a..ddaed7708 100644 --- a/src/components/avatarHeader/avatarHeaderView.js +++ b/src/components/avatarHeader/avatarHeaderView.js @@ -9,60 +9,55 @@ import { IconButton } from '../iconButton'; // Styles import styles from './avatarHeaderStyles'; -const AvatarHeader = ({ - username, - name, - reputation, - avatarUrl, - showImageUploadActions, - isUploading, -}) => () => { - const navigation = useNavigation(); +const AvatarHeader = + ({ username, name, reputation, avatarUrl, showImageUploadActions, isUploading }) => + () => { + const navigation = useNavigation(); - return ( - - - - - - - - - + return ( + + + + + + + + + - - {!!name && {name}} - {`@${username} (${reputation})`} + + {!!name && {name}} + {`@${username} (${reputation})`} + - - - - ); -}; + + + ); + }; export default AvatarHeader; diff --git a/src/components/basicHeader/container/basicHeaderContainer.tsx b/src/components/basicHeader/container/basicHeaderContainer.tsx index fe36b2a32..0e0089124 100644 --- a/src/components/basicHeader/container/basicHeaderContainer.tsx +++ b/src/components/basicHeader/container/basicHeaderContainer.tsx @@ -19,7 +19,7 @@ const BasicHeaderContainer = (props: BackHeaderProps) => { const isHideImages = useAppSelector((state) => state.application.hidePostsThumbnails); const _handleOnPressBackButton = () => { - const {isNewPost, handleOnBackPress } = props; + const { isNewPost, handleOnBackPress } = props; if (isNewPost) { navigation.navigate({ @@ -47,4 +47,4 @@ const BasicHeaderContainer = (props: BackHeaderProps) => { ); }; -export default BasicHeaderContainer; \ No newline at end of file +export default BasicHeaderContainer; diff --git a/src/components/basicHeader/view/basicHeaderView.tsx b/src/components/basicHeader/view/basicHeaderView.tsx index 260848583..da98a13af 100644 --- a/src/components/basicHeader/view/basicHeaderView.tsx +++ b/src/components/basicHeader/view/basicHeaderView.tsx @@ -3,6 +3,7 @@ import { View, Text, ActivityIndicator, SafeAreaView } from 'react-native'; import { injectIntl } from 'react-intl'; // Components +import EStyleSheet from 'react-native-extended-stylesheet'; import { TextButton } from '../..'; import { IconButton } from '../../iconButton'; import { DropdownButton } from '../../dropdownButton'; @@ -12,7 +13,6 @@ import { TextInput } from '../../textInput'; // Styles import styles from './basicHeaderStyles'; import { OptionsModal } from '../../atoms'; -import EStyleSheet from 'react-native-extended-stylesheet'; const BasicHeaderView = ({ disabled, @@ -48,11 +48,9 @@ const BasicHeaderView = ({ handleSettingsPress, backIconName, }) => { - const [isInputVisible, setIsInputVisible] = useState(false); const rewardMenuRef = useRef(null); - /** * * ACTION HANDLERS @@ -79,7 +77,6 @@ const BasicHeaderView = ({ handleOnSearch(value); }; - const _handleRewardMenuSelect = (index) => { let rewardType = 'default'; @@ -99,8 +96,6 @@ const BasicHeaderView = ({ } }; - - /** * * UI RENDERER @@ -206,7 +201,10 @@ const BasicHeaderView = ({ onPress={() => handleOnSaveButtonPress && handleOnSaveButtonPress()} /> ) : ( - + )} )} @@ -229,13 +227,15 @@ const BasicHeaderView = ({ text={rightButtonText} /> ) : ( - + )} )} - - ); }; diff --git a/src/components/basicUIElements/index.js b/src/components/basicUIElements/index.tsx similarity index 99% rename from src/components/basicUIElements/index.js rename to src/components/basicUIElements/index.tsx index 91f72be8f..b9503199d 100644 --- a/src/components/basicUIElements/index.js +++ b/src/components/basicUIElements/index.tsx @@ -13,7 +13,7 @@ import CommunityListItem from './view/communityListItem/communityListItem'; import Separator from './view/separator/separatorView'; import EmptyScreen from './view/emptyScreen/emptyScreenView'; -// Placeholders +// // Placeholders import ListItemPlaceHolder from './view/placeHolder/listItemPlaceHolderView'; import PostCardPlaceHolder from './view/placeHolder/postCardPlaceHolderView'; import PostPlaceHolder from './view/placeHolder/postPlaceHolderView'; diff --git a/src/components/basicUIElements/view/emptyScreen/emptyScreenView.tsx b/src/components/basicUIElements/view/emptyScreen/emptyScreenView.tsx index 90bb4b4e9..4b54d1a8e 100644 --- a/src/components/basicUIElements/view/emptyScreen/emptyScreenView.tsx +++ b/src/components/basicUIElements/view/emptyScreen/emptyScreenView.tsx @@ -7,18 +7,18 @@ import styles from './emptyScreenStyles'; import globalStyles from '../../../../globalStyles'; interface Props { - style?:ViewStyle; - textStyle?:TextStyle; - text?:string; + style?: ViewStyle; + textStyle?: TextStyle; + text?: string; } -const EmptyScreenView = ({ style, textStyle, text } : Props) => { +const EmptyScreenView = ({ style, textStyle, text }: Props) => { const intl = useIntl(); return ( { colorFilters={[ { keypath: 'comments', - color: color, + color, }, ]} /> diff --git a/src/components/basicUIElements/view/placeHolder/postCardPlaceHolderView.js b/src/components/basicUIElements/view/placeHolder/postCardPlaceHolderView.js index 3cf473c1a..f04a173dc 100644 --- a/src/components/basicUIElements/view/placeHolder/postCardPlaceHolderView.js +++ b/src/components/basicUIElements/view/placeHolder/postCardPlaceHolderView.js @@ -26,7 +26,7 @@ const PostCardPlaceHolder = () => { colorFilters={[ { keypath: 'postList', - color: color, + color, }, ]} /> diff --git a/src/components/basicUIElements/view/placeHolder/postPlaceHolderView.js b/src/components/basicUIElements/view/placeHolder/postPlaceHolderView.js index c160b00a0..2be22134f 100644 --- a/src/components/basicUIElements/view/placeHolder/postPlaceHolderView.js +++ b/src/components/basicUIElements/view/placeHolder/postPlaceHolderView.js @@ -22,7 +22,7 @@ const PostPlaceHolder = () => { colorFilters={[ { keypath: 'layer1', - color: color, + color, }, ]} /> diff --git a/src/components/basicUIElements/view/tag/tagView.js b/src/components/basicUIElements/view/tag/tagView.js index 4af3a751b..a52ecdf73 100644 --- a/src/components/basicUIElements/view/tag/tagView.js +++ b/src/components/basicUIElements/view/tag/tagView.js @@ -40,7 +40,7 @@ const Tag = ({ textStyle, ]} > - {`${prefix ? prefix : ''} ${label}${suffix ? suffix : ''}`} + {`${prefix || ''} ${label}${suffix || ''}`} {removeEnabled && ( { const _handleRightButtonPress = () => { - if(onPressRightText){ + if (onPressRightText) { const _data = {}; _data.following = username; - + onPressRightText(_data, isFollowing); } - }; return ( @@ -97,33 +96,32 @@ const UserListItem = ({ ) : ( - - {({ - openPopover, - closePopover, - popoverVisible, - setPopoverAnchor, - popoverAnchorRect, - }) => ( + {({ + openPopover, + closePopover, + popoverVisible, + setPopoverAnchor, + popoverAnchorRect, + }) => ( - { - if(rightTooltipText){ + if (rightTooltipText) { openPopover(); } - _handleRightButtonPress() - - }}> + _handleRightButtonPress(); + }} + > <> {rightText} @@ -138,15 +136,13 @@ const UserListItem = ({ visible={popoverVisible} onClose={closePopover} fromRect={popoverAnchorRect} - - supportedOrientations={['portrait', 'landscape']}> + supportedOrientations={['portrait', 'landscape']} + > {rightTooltipText} - )} + )} - - ))} diff --git a/src/components/beneficiaryModal/beneficiaryModalStyles.ts b/src/components/beneficiaryModal/beneficiaryModalStyles.ts index b55d89f9e..1d2343245 100644 --- a/src/components/beneficiaryModal/beneficiaryModalStyles.ts +++ b/src/components/beneficiaryModal/beneficiaryModalStyles.ts @@ -3,19 +3,19 @@ import EStyleSheet from 'react-native-extended-stylesheet'; export default EStyleSheet.create({ container: { flex: 1, - padding:16, + padding: 16, justifyContent: 'space-between', - backgroundColor:'$modalBackground', + backgroundColor: '$modalBackground', }, - bodyWrapper: { flex: 1, paddingTop: 20, paddingBottom:20}, + bodyWrapper: { flex: 1, paddingTop: 20, paddingBottom: 20 }, inputWrapper: { flexDirection: 'row', alignItems: 'center' }, text: { color: '$primaryBlack', marginBottom: 8 }, - weightInput: {width:80}, + weightInput: { width: 80 }, weightFormInput: { textAlign: 'center', color: '$primaryBlack' }, - weightFormInputWrapper: { marginTop: 8 }, - usernameInput: { flex:1, color: '$primaryBlack', marginLeft: 16 }, + weightFormInputWrapper: { marginTop: 8 }, + usernameInput: { flex: 1, color: '$primaryBlack', marginLeft: 16 }, usernameFormInputWrapper: { marginTop: 8 }, - footerWrapper: { paddingTop:16 }, + footerWrapper: { paddingTop: 16 }, saveButton: { width: 140, height: 44, diff --git a/src/components/beneficiarySelectionContent/beneficiarySelectionContent.tsx b/src/components/beneficiarySelectionContent/beneficiarySelectionContent.tsx index a7277df66..3ee0210d6 100644 --- a/src/components/beneficiarySelectionContent/beneficiarySelectionContent.tsx +++ b/src/components/beneficiarySelectionContent/beneficiarySelectionContent.tsx @@ -3,11 +3,11 @@ import { View, FlatList, Text, TouchableOpacity } from 'react-native'; import { useIntl } from 'react-intl'; import { isArray, debounce } from 'lodash'; -import styles from './styles'; import EStyleSheet from 'react-native-extended-stylesheet'; +import styles from './styles'; import { useAppDispatch, useAppSelector } from '../../hooks'; -import { BeneficiaryModal, CheckBox, FormInput, IconButton, TextButton } from '../../components'; +import { BeneficiaryModal, CheckBox, FormInput, IconButton, TextButton } from '..'; import { Beneficiary } from '../../redux/reducers/editorReducer'; import { lookupAccounts } from '../../providers/hive/dhive'; import { TEMP_BENEFICIARIES_ID } from '../../redux/constants/constants'; @@ -17,12 +17,11 @@ import { } from '../../redux/actions/editorActions'; interface BeneficiarySelectionContentProps { - draftId: string; setDisableDone: (value: boolean) => void; powerDown?: boolean; - label?:string; - labelStyle?:string; + label?: string; + labelStyle?: string; powerDownBeneficiaries?: Beneficiary[]; handleSaveBeneficiary?: (beneficiaries: Beneficiary[]) => void; handleRemoveBeneficiary?: (beneficiary: Beneficiary) => void; @@ -38,7 +37,6 @@ const BeneficiarySelectionContent = ({ handleSaveBeneficiary, handleRemoveBeneficiary, }: BeneficiarySelectionContentProps) => { - const intl = useIntl(); const dispatch = useAppDispatch(); @@ -76,7 +74,7 @@ const BeneficiarySelectionContent = ({ const readPowerDownBeneficiaries = () => { const tempBeneficiaries = [ { account: username, weight: 10000, autoPowerUp: false }, - ...powerDownBeneficiaries as Beneficiary[], + ...(powerDownBeneficiaries as Beneficiary[]), ]; if (isArray(tempBeneficiaries) && tempBeneficiaries.length > 0) { @@ -96,8 +94,11 @@ const BeneficiarySelectionContent = ({ const readTempBeneficiaries = async () => { if (beneficiariesMap) { const savedBeneficiareis = beneficiariesMap[draftId || TEMP_BENEFICIARIES_ID]; - const tempBeneficiaries = savedBeneficiareis && savedBeneficiareis.length ? [DEFAULT_BENEFICIARY, ...beneficiariesMap[draftId || TEMP_BENEFICIARIES_ID]] : [DEFAULT_BENEFICIARY]; - + const tempBeneficiaries = + savedBeneficiareis && savedBeneficiareis.length + ? [DEFAULT_BENEFICIARY, ...beneficiariesMap[draftId || TEMP_BENEFICIARIES_ID]] + : [DEFAULT_BENEFICIARY]; + if (isArray(tempBeneficiaries) && tempBeneficiaries.length > 0) { //weight correction algorithm. let othersWeight = 0; @@ -242,7 +243,7 @@ const BeneficiarySelectionContent = ({ onChange={(value) => _onWeightInputChange(value)} selectTextOnFocus={true} autoFocus={true} - returnKeyType={'next'} + returnKeyType="next" keyboardType="numeric" /> @@ -315,7 +316,7 @@ const BeneficiarySelectionContent = ({ beneficiaries[0].weight = beneficiaries[0].weight + item.weight; const removedBeneficiary = beneficiaries.splice(index, 1); setBeneficiaries([...beneficiaries]); - if(handleRemoveBeneficiary){ + if (handleRemoveBeneficiary) { handleRemoveBeneficiary(removedBeneficiary[0]); return; } @@ -364,7 +365,9 @@ const BeneficiarySelectionContent = ({ return ( - {label || intl.formatMessage({ id: 'editor.beneficiaries' })} + + {label || intl.formatMessage({ id: 'editor.beneficiaries' })} + { - + descriptors, +}: BottomTabBarProps) => { const dispatch = useDispatch(); - useEffect(()=>{ - dispatch(updateActiveBottomTab(routes[index].name)) - },[index]) - - + useEffect(() => { + dispatch(updateActiveBottomTab(routes[index].name)); + }, [index]); const _jumpTo = (route, isFocused) => { - - if(route.name === ROUTES.TABBAR.POST_BUTTON){ - navigation.navigate(ROUTES.SCREENS.EDITOR, {key: 'editor_post'}) + if (route.name === ROUTES.TABBAR.POST_BUTTON) { + navigation.navigate(ROUTES.SCREENS.EDITOR, { key: 'editor_post' }); return; } - const event = navigation.emit({ type: 'tabPress', target: route.key, canPreventDefault: true, - }) + }); - //TODO: also enable tap to scroll up feature + // TODO: also enable tap to scroll up feature if (!isFocused && !event.defaultPrevented) { navigation.navigate(route.name); } }; - - const _tabButtons = routes.map((route, idx) => { - const {tabBarActiveTintColor, tabBarInactiveTintColor} = descriptors[route.key].options + const { tabBarActiveTintColor, tabBarInactiveTintColor } = descriptors[route.key].options; const isFocused = index == idx; - const iconColor = isFocused ? tabBarActiveTintColor : tabBarInactiveTintColor + const iconColor = isFocused ? tabBarActiveTintColor : tabBarInactiveTintColor; - let _iconProps = { - iconType:"MaterialIcons", - style:{ padding: 15 }, - name:route.params.iconName, - color:iconColor, - size:scalePx(26), - } + const _iconProps = { + iconType: 'MaterialIcons', + style: { padding: 15 }, + name: route.params.iconName, + color: iconColor, + size: scalePx(26), + }; - let _tabBarIcon = + let _tabBarIcon = ; switch (route.name) { case ROUTES.TABBAR.NOTIFICATION: - _tabBarIcon = () + _tabBarIcon = ; break; case ROUTES.TABBAR.POST_BUTTON: - _iconProps.iconType = "MaterialCommunityIcons" - _tabBarIcon = + _iconProps.iconType = 'MaterialCommunityIcons'; + _tabBarIcon = ; break; } return ( - _jumpTo(route, isFocused)}> - {_tabBarIcon} - + _jumpTo(route, isFocused)}>{_tabBarIcon} - ) - }) + ); + }); - - return ( - - {_tabButtons} - - ); + return {_tabButtons}; }; export default BottomTabBarView; diff --git a/src/components/buttons/views/textButtonView.tsx b/src/components/buttons/views/textButtonView.tsx index 4dcd1d784..90f1efd2a 100644 --- a/src/components/buttons/views/textButtonView.tsx +++ b/src/components/buttons/views/textButtonView.tsx @@ -5,7 +5,11 @@ import styles from './textButtonStyles'; const TextButtonView = ({ text, onPress, style, textStyle, disabled }) => ( - onPress && onPress()}> + onPress && onPress()} + > {text} diff --git a/src/components/collapsibleCard/view/collapsibleCardStyles.js b/src/components/collapsibleCard/view/collapsibleCardStyles.js index f918edc72..0da04d3ac 100644 --- a/src/components/collapsibleCard/view/collapsibleCardStyles.js +++ b/src/components/collapsibleCard/view/collapsibleCardStyles.js @@ -4,7 +4,7 @@ export default EStyleSheet.create({ container: { flexDirection: 'column', backgroundColor: '$primaryBackgroundColor', - //marginTop: 8, + // marginTop: 8, overflow: 'hidden', }, containerWithBorder: { diff --git a/src/components/collapsibleCard/view/collapsibleCardView.js b/src/components/collapsibleCard/view/collapsibleCardView.js index b7ea00f5f..44cfc7f2c 100644 --- a/src/components/collapsibleCard/view/collapsibleCardView.js +++ b/src/components/collapsibleCard/view/collapsibleCardView.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import { View, TouchableHighlight } from 'react-native'; -import Animated, { Easing } from 'react-native-reanimated'; +import Animated, { EasingNode } from 'react-native-reanimated'; // Constants @@ -51,7 +51,7 @@ class CollapsibleCardView extends PureComponent { Animated.timing(this.anime.height, { toValue: this.anime.expanded ? this._getMinValue() : this._getMaxValue() + (moreHeight || 0), duration: 200, - easing: Easing.inOut(Easing.ease), + easing: EasingNode.inOut(EasingNode.ease), }).start(); this.anime.expanded = !this.anime.expanded; diff --git a/src/components/comment/view/commentView.tsx b/src/components/comment/view/commentView.tsx index 00f9b9d88..a32810256 100644 --- a/src/components/comment/view/commentView.tsx +++ b/src/components/comment/view/commentView.tsx @@ -4,6 +4,7 @@ import { useIntl } from 'react-intl'; import get from 'lodash/get'; import { View as AnimatedView } from 'react-native-animatable'; +import { useDispatch } from 'react-redux'; import { getTimeFromNow } from '../../../utils/time'; // Constants @@ -18,7 +19,6 @@ import { TextWithIcon } from '../../basicUIElements'; import styles from './commentStyles'; import { useAppSelector } from '../../../hooks'; import { OptionsModal } from '../../atoms'; -import { useDispatch } from 'react-redux'; import { showReplyModal } from '../../../redux/actions/uiAction'; import postTypes from '../../../constants/postTypes'; @@ -42,14 +42,16 @@ const CommentView = ({ hideManyCommentsButton, openReplyThread, fetchedAt, - incrementRepliesCount + incrementRepliesCount, }) => { const intl = useIntl(); const dispatch = useDispatch(); const actionSheet = useRef(null); const repliesContainerRef = useRef(null); - const isMuted = useAppSelector(state => state.account.currentAccount.mutes?.indexOf(comment.author) > -1); + const isMuted = useAppSelector( + (state) => state.account.currentAccount.mutes?.indexOf(comment.author) > -1, + ); const lastCacheUpdate = useAppSelector((state) => state.cache.lastUpdate); const cachedComments = useAppSelector((state) => state.cache.comments); @@ -61,17 +63,16 @@ const CommentView = ({ const [childCount, setChildCount] = useState(comment.children); const [replies, setReplies] = useState(comment.replies); - - useEffect(()=>{ - if(isShowSubComments){ - setTimeout(()=>{ - if(repliesContainerRef.current){ + useEffect(() => { + if (isShowSubComments) { + setTimeout(() => { + if (repliesContainerRef.current) { setIsShowSubComments(true); repliesContainerRef.current.slideInRight(300); } - },150) + }, 150); } - },[]) + }, []); useEffect(() => { if (comment) { @@ -79,18 +80,17 @@ const CommentView = ({ } }, [comment]); - useEffect(() => { const postPath = `${comment.author || ''}/${comment.permlink || ''}`; - //this conditional makes sure on targetted already fetched post is updated - //with new cache status, this is to avoid duplicate cache merging + // this conditional makes sure on targetted already fetched post is updated + // with new cache status, this is to avoid duplicate cache merging if ( lastCacheUpdate && lastCacheUpdate.postPath === postPath && lastCacheUpdate.type === 'comment' && lastCacheUpdate.updatedAt > fetchedAt ) { - //TODO: update comment count and show sub comment if required; + // TODO: update comment count and show sub comment if required; const cachedComment = cachedComments.get(postPath); if (cachedComment.updated === cachedComment.created) { if (commentNumber > 1 && incrementRepliesCount) { @@ -107,11 +107,10 @@ const CommentView = ({ }, [lastCacheUpdate]); const _showSubCommentsToggle = (force) => { - if (((replies && replies.length > 0) || force)) { - + if ((replies && replies.length > 0) || force) { if (repliesContainerRef.current) { if (_isShowSubComments) { - repliesContainerRef.current.slideOutRight(300).then(()=>{ + repliesContainerRef.current.slideOutRight(300).then(() => { setIsShowSubComments(false); }); } else { @@ -119,233 +118,213 @@ const CommentView = ({ repliesContainerRef.current.slideInRight(300); } } - + setIsPressedShowButton(true); - - } else if (openReplyThread) { - openReplyThread(); - } - -}; - -const _handleCacheVoteIncrement = () => { - //fake increment vote using based on local change - setCacheVoteIcrement(1); -}; - -const _incrementRepliesCount = () => { - if (commentNumber > 1 && incrementRepliesCount) { - incrementRepliesCount(); - } - setChildCount(childCount + 1); -} - -const _handleOnReplyPress = () => { - if (isLoggedIn) { - dispatch(showReplyModal(comment)); - } else { - console.log('Not LoggedIn'); - } -} - -const _renderReadMoreButton = () => ( - openReplyThread && openReplyThread()} - text={ - !isPressedShowButton - ? intl.formatMessage({ id: 'comments.read_more' }) - : '' + } else if (openReplyThread) { + openReplyThread(); } - /> + }; -) + const _handleCacheVoteIncrement = () => { + // fake increment vote using based on local change + setCacheVoteIcrement(1); + }; -const _renderReplies = () => { + const _incrementRepliesCount = () => { + if (commentNumber > 1 && incrementRepliesCount) { + incrementRepliesCount(); + } + setChildCount(childCount + 1); + }; + const _handleOnReplyPress = () => { + if (isLoggedIn) { + dispatch(showReplyModal(comment)); + } else { + console.log('Not LoggedIn'); + } + }; - return ( - - {_isShowSubComments && - 0} - fetchPost={fetchPost} - hideManyCommentsButton={hideManyCommentsButton} - mainAuthor={mainAuthor} - fetchedAt={fetchedAt} - incrementRepliesCount={_incrementRepliesCount} - handleOnReplyPress={_handleOnReplyPress} - />} - + const _renderReadMoreButton = () => ( + openReplyThread && openReplyThread()} + text={!isPressedShowButton ? intl.formatMessage({ id: 'comments.read_more' }) : ''} + /> + ); - ) -} + const _renderReplies = () => { + return ( + + {_isShowSubComments && ( + 0} + fetchPost={fetchPost} + hideManyCommentsButton={hideManyCommentsButton} + mainAuthor={mainAuthor} + fetchedAt={fetchedAt} + incrementRepliesCount={_incrementRepliesCount} + handleOnReplyPress={_handleOnReplyPress} + /> + )} + + ); + }; - -const _renderComment = () => { - return (( - - - - - - {_renderActionPanel()} - - {commentNumber > 1 && - childCount > 0 && - !replies?.length && - _renderReadMoreButton() - } - - - )) -} - - -const _renderActionPanel = () => { - return ( - <> - - - handleOnVotersPress && - activeVotes.length > 0 && - handleOnVotersPress(activeVotes, comment) - } - text={activeVotes.length + cacheVoteIcrement} - textStyle={styles.voteCountText} - /> - - {isLoggedIn && ( - { + return ( + + - )} - - {currentAccountUsername === comment.author && ( + {_renderActionPanel()} + {commentNumber > 1 && childCount > 0 && !replies?.length && _renderReadMoreButton()} + + + ); + }; + + const _renderActionPanel = () => { + return ( + <> + + + handleOnVotersPress && + activeVotes.length > 0 && + handleOnVotersPress(activeVotes, comment) + } + text={activeVotes.length + cacheVoteIcrement} + textStyle={styles.voteCountText} + /> + + {isLoggedIn && ( handleOnEditPress && handleOnEditPress(comment)} - iconType="MaterialIcons" + name="comment-outline" + onPress={_handleOnReplyPress} + iconType="MaterialCommunityIcons" /> - {!childCount && !activeVotes.length && comment.isDeletable && ( - - actionSheet.current.show()} - iconType="MaterialIcons" - /> - { - index === 0 ? handleDeleteComment(comment.permlink) : null; - }} - /> - - )} - - )} + )} + {currentAccountUsername === comment.author && ( + + handleOnEditPress && handleOnEditPress(comment)} + iconType="MaterialIcons" + /> + {!childCount && !activeVotes.length && comment.isDeletable && ( + + actionSheet.current.show()} + iconType="MaterialIcons" + /> + { + index === 0 ? handleDeleteComment(comment.permlink) : null; + }} + /> + + )} + + )} - {commentNumber === 1 && childCount > 0 && ( - - _showSubCommentsToggle()} - text={`${childCount} ${intl.formatMessage({ id: 'comments.more_replies' })}`} - /> - - )} + {commentNumber === 1 && childCount > 0 && ( + + _showSubCommentsToggle()} + text={`${childCount} ${intl.formatMessage({ id: 'comments.more_replies' })}`} + /> + + )} + + ); + }; - - ) -} + const customContainerStyle = commentNumber > 2 ? { marginLeft: 44 } : null; -const customContainerStyle = commentNumber > 2 ? { marginLeft: 44 } : null + return ( + + + -return ( - - - - - {commentNumber > 0 && _renderReplies()} - - -); + {commentNumber > 0 && _renderReplies()} + + + ); }; export default CommentView; diff --git a/src/components/comments/container/commentsContainer.js b/src/components/comments/container/commentsContainer.js index 11d163573..ec1b5e845 100644 --- a/src/components/comments/container/commentsContainer.js +++ b/src/components/comments/container/commentsContainer.js @@ -77,8 +77,8 @@ const CommentsContainer = ({ useEffect(() => { const postPath = `${author || ''}/${permlink || ''}`; - //this conditional makes sure on targetted already fetched post is updated - //with new cache status, this is to avoid duplicate cache merging + // this conditional makes sure on targetted already fetched post is updated + // with new cache status, this is to avoid duplicate cache merging if ( lastCacheUpdate && lastCacheUpdate.postPath === postPath && @@ -175,7 +175,7 @@ const CommentsContainer = ({ } else if (author && permlink && !propComments) { await getComments(author, permlink, name) .then((__comments) => { - //favourable place for merging comment cache + // favourable place for merging comment cache __comments = _handleCachedComment(__comments); __comments = _sortComments(selectedFilter, __comments); @@ -194,30 +194,30 @@ const CommentsContainer = ({ if (cachedComments.has(postPath)) { const cachedComment = cachedComments.get(postPath); - var ignoreCache = false; - var replaceAtIndex = -1; - var removeAtIndex = -1; + let ignoreCache = false; + let replaceAtIndex = -1; + let removeAtIndex = -1; _comments.forEach((comment, index) => { if (cachedComment.permlink === comment.permlink) { if (cachedComment.updated < comment.updated) { - //comment is present with latest data + // comment is present with latest data ignoreCache = true; console.log('Ignore cache as comment is now present'); } else if (cachedComment.status === CommentCacheStatus.DELETED) { removeAtIndex = index; } else { - //comment is present in list but data is old + // comment is present in list but data is old replaceAtIndex = index; } } }); - //means deleted comment is not being retuend in fresh data, cache needs to be ignored + // means deleted comment is not being retuend in fresh data, cache needs to be ignored if (cachedComment.status === CommentCacheStatus.DELETED && removeAtIndex < 0) { ignoreCache = true; } - //manipulate comments with cached data + // manipulate comments with cached data if (!ignoreCache) { let newComments = []; if (removeAtIndex >= 0) { diff --git a/src/components/comments/view/commentsView.tsx b/src/components/comments/view/commentsView.tsx index 529153c84..8fc7d034f 100644 --- a/src/components/comments/view/commentsView.tsx +++ b/src/components/comments/view/commentsView.tsx @@ -4,14 +4,13 @@ import get from 'lodash/get'; import { useIntl } from 'react-intl'; // Components +import EStyleSheet from 'react-native-extended-stylesheet'; import { Comment, TextButton } from '../..'; // Styles import styles from './commentStyles'; -import EStyleSheet from 'react-native-extended-stylesheet'; import { OptionsModal } from '../../atoms'; - const CommentsView = ({ avatarSize, commentCount, @@ -36,13 +35,12 @@ const CommentsView = ({ flatListProps, openReplyThread, fetchedAt, - incrementRepliesCount + incrementRepliesCount, }) => { const [selectedComment, setSelectedComment] = useState(null); const intl = useIntl(); const commentMenu = useRef(); - const _openCommentMenu = (item) => { if (commentMenu.current) { setSelectedComment(item); @@ -52,21 +50,20 @@ const CommentsView = ({ const _openReplyThread = (item) => { if (item && openReplyThread) { - openReplyThread(item) + openReplyThread(item); } - - } + }; const _readMoreComments = () => { if (comments[0] && openReplyThread) { - openReplyThread(comments[0]) + openReplyThread(comments[0]); } }; const _onMenuItemPress = (index) => { - handleOnPressCommentMenu(index, selectedComment) + handleOnPressCommentMenu(index, selectedComment); setSelectedComment(null); - } + }; const menuItems = [ intl.formatMessage({ id: 'post.copy_link' }), @@ -75,7 +72,6 @@ const CommentsView = ({ intl.formatMessage({ id: 'alert.cancel' }), ]; - if (!hideManyCommentsButton && hasManyComments) { return ( { return ( - ) + ); }; - - const styleOerride = commentNumber > 1 ? { - backgroundColor: EStyleSheet.value('$primaryLightBackground'), - marginTop: 8, - } : null + const styleOerride = + commentNumber > 1 + ? { + backgroundColor: EStyleSheet.value('$primaryLightBackground'), + marginTop: 8, + } + : null; const _renderEmptyContent = () => { - if(commentNumber > 1){ + if (commentNumber > 1) { return; } const _onPress = () => { - handleOnReplyPress() - } + handleOnReplyPress(); + }; return ( - {intl.formatMessage({ id: "comments.no_comments" })} + {intl.formatMessage({ id: 'comments.no_comments' })} - ) - } - + ); + }; return ( diff --git a/src/components/commentsDisplay/view/writeCommentButton.tsx b/src/components/commentsDisplay/view/writeCommentButton.tsx index ad3ab42cb..a41815f46 100644 --- a/src/components/commentsDisplay/view/writeCommentButton.tsx +++ b/src/components/commentsDisplay/view/writeCommentButton.tsx @@ -1,57 +1,56 @@ -import { View, Text } from 'react-native' -import React, { forwardRef, useImperativeHandle, useRef } from 'react' -import UserAvatar from '../../userAvatar'; +import { View, Text } from 'react-native'; +import React, { forwardRef, useImperativeHandle, useRef } from 'react'; import { View as AnimatedView } from 'react-native-animatable'; import { TouchableOpacity } from 'react-native-gesture-handler'; +import { useIntl } from 'react-intl'; +import UserAvatar from '../../userAvatar'; import styles from './WriteCommentButtonStyles'; import { useAppSelector } from '../../../hooks'; import showLoginAlert from '../../../utils/showLoginAlert'; -import { useIntl } from 'react-intl'; interface WriteCommentButton { - onPress: () => void; + onPress: () => void; } export const WriteCommentButton = forwardRef(({ onPress }, ref) => { - const intl = useIntl(); + const intl = useIntl(); - const animatedContainer = useRef(); + const animatedContainer = useRef(); - const isLoggedIn = useAppSelector(state => state.application.isLoggedIn); - const currentAccount = useAppSelector(state => state.account.currentAccount); + const isLoggedIn = useAppSelector((state) => state.application.isLoggedIn); + const currentAccount = useAppSelector((state) => state.account.currentAccount); - useImperativeHandle(ref, () => ({ - bounce: () => { - console.log("bouncing") - if (animatedContainer.current) { - animatedContainer.current.swing(1000); - } - }, - })); + useImperativeHandle(ref, () => ({ + bounce: () => { + console.log('bouncing'); + if (animatedContainer.current) { + animatedContainer.current.swing(1000); + } + }, + })); - const _onPress = () => { - if (!isLoggedIn) { - showLoginAlert({ intl }) - return; - } - if (onPress) { - onPress(); - } + const _onPress = () => { + if (!isLoggedIn) { + showLoginAlert({ intl }); + return; } + if (onPress) { + onPress(); + } + }; - return ( - - - - - - - {intl.formatMessage({id:'quick_reply.placeholder'})} - - - - - - - ) -}) + return ( + + + + + + + {intl.formatMessage({ id: 'quick_reply.placeholder' })} + + + + + + ); +}); diff --git a/src/components/communitiesList/view/communitiesListItem/view/CommunitiesListItem.js b/src/components/communitiesList/view/communitiesListItem/view/CommunitiesListItem.js index da346ac5f..4ed7e11fb 100644 --- a/src/components/communitiesList/view/communitiesListItem/view/CommunitiesListItem.js +++ b/src/components/communitiesList/view/communitiesListItem/view/CommunitiesListItem.js @@ -28,10 +28,7 @@ const CommunitiesListItem = ({ const intl = useIntl(); const _handleSubscribeButtonPress = () => { - handleSubscribeButtonPress( - { isSubscribed: isSubscribed, communityId: name, communityTitle: title }, - screen, - ); + handleSubscribeButtonPress({ isSubscribed, communityId: name, communityTitle: title }, screen); }; return ( diff --git a/src/components/containerHeader/view/containerHeaderView.js b/src/components/containerHeader/view/containerHeaderView.js index f040cb9d5..5516f1058 100644 --- a/src/components/containerHeader/view/containerHeaderView.js +++ b/src/components/containerHeader/view/containerHeaderView.js @@ -25,16 +25,8 @@ class ContainerHeaderView extends PureComponent { // Component Functions render() { - const { - color, - defaultTitle, - fontSize, - hasSeperator, - iconName, - isBoldTitle, - title, - isCenter, - } = this.props; + const { color, defaultTitle, fontSize, hasSeperator, iconName, isBoldTitle, title, isCenter } = + this.props; return ( diff --git a/src/components/customiseFiltersModal/customiseFiltersModal.tsx b/src/components/customiseFiltersModal/customiseFiltersModal.tsx index c0abe72c6..786286cac 100644 --- a/src/components/customiseFiltersModal/customiseFiltersModal.tsx +++ b/src/components/customiseFiltersModal/customiseFiltersModal.tsx @@ -1,200 +1,181 @@ import React, { forwardRef, Ref, useImperativeHandle, useRef, useState } from 'react'; import { useIntl } from 'react-intl'; -import { TouchableOpacity } from 'react-native'; -import { KeyboardAvoidingView, Platform, View, Text } from 'react-native'; +import { TouchableOpacity, KeyboardAvoidingView, Platform, View, Text } from 'react-native'; import ActionSheet from 'react-native-actions-sheet'; import EStyleSheet from 'react-native-extended-stylesheet'; -import {useDispatch} from 'react-redux'; +import { useDispatch } from 'react-redux'; import { CheckBox } from '..'; import { getDefaultFilters, getFilterMap } from '../../constants/options/filters'; import { ThemeContainer } from '../../containers'; import { useAppSelector } from '../../hooks'; -import { setCommunityTabs, setMainTabs, setOwnProfileTabs, setProfileTabs } from '../../redux/actions/customTabsAction'; +import { + setCommunityTabs, + setMainTabs, + setOwnProfileTabs, + setProfileTabs, +} from '../../redux/actions/customTabsAction'; import { TextButton } from '../buttons'; import styles from './customiseFiltersModalStyles'; - export interface CustomiseFiltersModalRef { - show:()=>void; + show: () => void; } interface Props { - pageType:'main'|'community'|'profile'|'ownProfile' + pageType: 'main' | 'community' | 'profile' | 'ownProfile'; } +const getFilterIndex = (filterMap: any, key: string) => Object.keys(filterMap).indexOf(key); -const getFilterIndex = (filterMap:any, key:string) => Object.keys(filterMap).indexOf(key) +const CustomiseFiltersModal = ({ pageType }: Props, ref: Ref) => { + if (!pageType) { + throw new Error('pageType must not be empty'); + } + const dispatch = useDispatch(); + const intl = useIntl(); -const CustomiseFiltersModal = ({pageType}:Props, ref:Ref) => { + const sheetModalRef = useRef(); - if(!pageType){ - throw new Error("pageType must not be empty") + // redux + const savedFilters = useAppSelector((state) => { + const defaultFilters = getDefaultFilters(pageType); + switch (pageType) { + case 'community': + return state.customTabs.communityTabs || defaultFilters; + case 'main': + return state.customTabs.mainTabs || defaultFilters; + case 'profile': + return state.customTabs.profileTabs || defaultFilters; + case 'ownProfile': + return state.customTabs.ownProfileTabs || defaultFilters; + default: + return state.customTabs.mainTabs || defaultFilters; } + }); - const dispatch = useDispatch(); - const intl = useIntl(); + // state + const [filterMap] = useState(getFilterMap(pageType)); + const [selectedFilters, setSelectedFilters] = useState>( + new Map(savedFilters.map((key: string) => [key, getFilterIndex(filterMap, key)])), + ); - const sheetModalRef = useRef(); + /** + * HANDLERS FUNCTIONS + */ - //redux - const savedFilters = useAppSelector((state) => { - const defaultFilters = getDefaultFilters(pageType) - switch (pageType){ - case 'community': return state.customTabs.communityTabs || defaultFilters; - case 'main': return state.customTabs.mainTabs || defaultFilters; - case 'profile': return state.customTabs.profileTabs || defaultFilters; - case 'ownProfile': return state.customTabs.ownProfileTabs || defaultFilters; - default: return state.customTabs.mainTabs || defaultFilters; - } - }); + useImperativeHandle(ref, () => ({ + show: () => { + sheetModalRef.current?.setModalVisible(true); + }, + })); + // actions + const _onClose = () => { + sheetModalRef.current?.setModalVisible(false); + }; - - //state - const [filterMap] = useState(getFilterMap(pageType)) - const [selectedFilters, setSelectedFilters] = useState>( - new Map(savedFilters.map((key:string)=>[ - key, - getFilterIndex(filterMap, key) - ])) - ); - - - - - /** - * HANDLERS FUNCTIONS - */ - - - useImperativeHandle(ref, () => ({ - show: () => { - sheetModalRef.current?.setModalVisible(true); - }, - })); - - - //actions - const _onClose = () => { - sheetModalRef.current?.setModalVisible(false); + // save snippet based on editor pageType + const _onApply = () => { + if (selectedFilters.size !== 3) { + alert(intl.formatMessage({ id: 'alert.wrong_filter_count' })); + return; } + const entries = Array.from(selectedFilters.entries()) + .sort((a, b) => (a[1] < b[1] ? -1 : 1)) + .map((e) => e[0]); - //save snippet based on editor pageType - const _onApply = () => { - if(selectedFilters.size !== 3){ - alert(intl.formatMessage({id:'alert.wrong_filter_count'})); - return; - } - const entries = Array.from(selectedFilters.entries()) - .sort((a, b)=>a[1]e[0]); - - switch(pageType){ - case 'main': - dispatch(setMainTabs(entries)); - break; - case 'community': - dispatch(setCommunityTabs(entries)); - break; - case 'profile': - dispatch(setProfileTabs(entries)); - break; - case 'ownProfile': - dispatch(setOwnProfileTabs(entries)); - break; - } - _onClose(); + switch (pageType) { + case 'main': + dispatch(setMainTabs(entries)); + break; + case 'community': + dispatch(setCommunityTabs(entries)); + break; + case 'profile': + dispatch(setProfileTabs(entries)); + break; + case 'ownProfile': + dispatch(setOwnProfileTabs(entries)); + break; } + _onClose(); + }; + /** + * UI RENDERERS + */ + const _renderOptions = () => { + const options = []; + for (const key in filterMap) { + if (filterMap.hasOwnProperty(key)) { + const isSelected = selectedFilters.has(key); + const _onPress = () => { + if (isSelected) { + selectedFilters.delete(key); + } else { + const index = getFilterIndex(filterMap, key); + selectedFilters.set(key, index); + } + setSelectedFilters(new Map([...selectedFilters])); + }; - /** - * UI RENDERERS - */ - - const _renderOptions = () => { - const options = []; - for(const key in filterMap){ - if(filterMap.hasOwnProperty(key)){ - const isSelected = selectedFilters.has(key); - - const _onPress = () => { - if(isSelected){ - selectedFilters.delete(key); - }else{ - var index = getFilterIndex(filterMap, key); - selectedFilters.set(key, index); - } - setSelectedFilters(new Map([...selectedFilters])); - } - - options.push(( - - - - {intl.formatMessage({ - id:filterMap[key] - })} - - - - - )) - } - } - - return ( - - {options} + options.push( + + + + {intl.formatMessage({ + id: filterMap[key], + })} + + - ) + , + ); + } } + return {options}; + }; - const _renderContent = ( - - {({isDarkTheme})=>( - - Customise Filters - - {_renderOptions()} - + const _renderContent = ( + + {({ isDarkTheme }) => ( + + Customise Filters - - - - - - - )} - - ) + {_renderOptions()} + + + + + + )} + + ); return ( - - {_renderContent} - - + + {_renderContent} + ); }; export default forwardRef(CustomiseFiltersModal); - - diff --git a/src/components/customiseFiltersModal/customiseFiltersModalStyles.ts b/src/components/customiseFiltersModal/customiseFiltersModalStyles.ts index 22f1cbb95..5c7750023 100644 --- a/src/components/customiseFiltersModal/customiseFiltersModalStyles.ts +++ b/src/components/customiseFiltersModal/customiseFiltersModalStyles.ts @@ -3,91 +3,85 @@ import EStyleSheet from 'react-native-extended-stylesheet'; import getWindowDimensions from '../../utils/getWindowDimensions'; export default EStyleSheet.create({ - modalStyle: { - backgroundColor: '$primaryBackgroundColor', - margin:0, - paddingTop:32, - paddingBottom:8, - }, + modalStyle: { + backgroundColor: '$primaryBackgroundColor', + margin: 0, + paddingTop: 32, + paddingBottom: 8, + }, - sheetContent: { - backgroundColor: '$primaryBackgroundColor', - }, + sheetContent: { + backgroundColor: '$primaryBackgroundColor', + }, - container:{ - marginTop:16, - marginBottom:44, - paddingHorizontal:24, - alignItems:'center', - justifyContent:'space-between', - } as ViewStyle, + container: { + marginTop: 16, + marginBottom: 44, + paddingHorizontal: 24, + alignItems: 'center', + justifyContent: 'space-between', + } as ViewStyle, - imageStyle:{ - marginTop:8, - height:150, - width:150, - } as ImageStyle, + imageStyle: { + marginTop: 8, + height: 150, + width: 150, + } as ImageStyle, - textContainer:{ - marginTop:32, - marginBottom:44, - } as ViewStyle, + textContainer: { + marginTop: 32, + marginBottom: 44, + } as ViewStyle, - title: { - color: '$primaryBlack', - alignSelf: 'center', - textAlign: 'center', - fontSize: 20, - fontWeight: '800', - } as TextStyle, + title: { + color: '$primaryBlack', + alignSelf: 'center', + textAlign: 'center', + fontSize: 20, + fontWeight: '800', + } as TextStyle, - bodyText: { - color: '$primaryBlack', - alignSelf: 'center', - textAlign: 'center', - fontSize: 16, - fontWeight: '600', - marginTop:4, - } as TextStyle, + bodyText: { + color: '$primaryBlack', + alignSelf: 'center', + textAlign: 'center', + fontSize: 16, + fontWeight: '600', + marginTop: 4, + } as TextStyle, - btnText:{ - color:'$pureWhite' - } as TextStyle, + btnText: { + color: '$pureWhite', + } as TextStyle, - button:{ + button: { + backgroundColor: '$primaryBlue', + width: 150, + paddingVertical: 16, + borderRadius: 32, + justifyContent: 'center', + alignItems: 'center', + } as ViewStyle, - backgroundColor:'$primaryBlue', - width:150, - paddingVertical:16, - borderRadius:32, - justifyContent:'center', - alignItems:'center' - } as ViewStyle, + actionPanel: { + width: '100%', + flexDirection: 'row', + justifyContent: 'space-around', + alignItems: 'center', + } as ViewStyle, + checkView: { + width: getWindowDimensions().width - 80, + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + marginHorizontal: 20, + marginVertical: 4, + } as ViewStyle, - actionPanel:{ - width:'100%', - flexDirection:'row', - justifyContent:'space-around', - alignItems:'center', - } as ViewStyle, - - checkView: { - width:getWindowDimensions().width - 80, - flexDirection: 'row', - justifyContent: 'space-between', - alignItems:'center', - marginHorizontal: 20, - marginVertical:4, - } as ViewStyle, - - - informationText: { - color: '$primaryBlack', - margin: 10, - fontSize:18, - } as TextStyle, - - - -}) \ No newline at end of file + informationText: { + color: '$primaryBlack', + margin: 10, + fontSize: 18, + } as TextStyle, +}); diff --git a/src/components/customiseFiltersModal/index.ts b/src/components/customiseFiltersModal/index.ts index 89b95ede1..01dd388cc 100644 --- a/src/components/customiseFiltersModal/index.ts +++ b/src/components/customiseFiltersModal/index.ts @@ -1 +1 @@ -export {default as CustomiseFiltersModal} from './customiseFiltersModal'; \ No newline at end of file +export { default as CustomiseFiltersModal } from './customiseFiltersModal'; diff --git a/src/components/dropdownButton/view/dropdownButtonView.tsx b/src/components/dropdownButton/view/dropdownButtonView.tsx index e575f0636..824a255ab 100644 --- a/src/components/dropdownButton/view/dropdownButtonView.tsx +++ b/src/components/dropdownButton/view/dropdownButtonView.tsx @@ -1,5 +1,5 @@ import React from 'react'; -import { View, Text, ActivityIndicator, TouchableHighlight} from 'react-native'; +import { View, Text, ActivityIndicator, TouchableHighlight } from 'react-native'; import EStyleSheet from 'react-native-extended-stylesheet'; // External components import ModalDropdown from 'react-native-modal-dropdown'; @@ -25,28 +25,28 @@ const renderDropdownRow = ( noHighlight, dropdownRowWrapper, ) => ( - + - - {rowData} - - + {rowData} + + ); -const adjustDropdownFrame = (style:any) => { - style.left = 'auto' - style.right = 10 - return style -} +const adjustDropdownFrame = (style: any) => { + style.left = 'auto'; + style.right = 10; + return style; +}; const DropdownButtonView = ({ childIconWrapperStyle, children, @@ -72,7 +72,10 @@ const DropdownButtonView = ({ adjustDropdownFrame(style) } + adjustFrame={(style: any) => adjustDropdownFrame(style)} > {isHasChildIcon && !isLoading ? ( - - {defaultText} - + {defaultText} this._handleTagRemove(i)} + // removeButton + // handleOnRemoveButtonPress={() => this._handleTagRemove(i)} editable={!isPreviewActive} maxLength={50} placeholder="tags" diff --git a/src/components/editorElements/tagInput/view/tagInputView.tsx b/src/components/editorElements/tagInput/view/tagInputView.tsx index 613aab144..d5b17e21f 100644 --- a/src/components/editorElements/tagInput/view/tagInputView.tsx +++ b/src/components/editorElements/tagInput/view/tagInputView.tsx @@ -16,8 +16,7 @@ import { Tag } from '../../../basicUIElements'; import { isCommunity } from '../../../../utils/communityValidation'; import { toastNotification } from '../../../../redux/actions/uiAction'; - -const SEPARATOR_REGEX = /[,\s]/ +const SEPARATOR_REGEX = /[,\s]/; const TagInput = ({ value, handleTagChanged, intl, isPreviewActive, autoFocus, setCommunity }) => { const dispatch = useAppDispatch(); @@ -30,7 +29,7 @@ const TagInput = ({ value, handleTagChanged, intl, isPreviewActive, autoFocus, s const [warning, setWarning] = useState(null); useEffect(() => { - //read and add tag items + // read and add tag items if (typeof value === 'string') { setTags(value.split(' ')); } else { @@ -60,7 +59,7 @@ const TagInput = ({ value, handleTagChanged, intl, isPreviewActive, autoFocus, s const _registerNewTags = useCallback( debounce((newTags: string[], skipLast = true) => { - let inputVal = newTags.length > 0 && skipLast && newTags.pop(); + const inputVal = newTags.length > 0 && skipLast && newTags.pop(); newTags.forEach((tag) => { if (tag.startsWith('#')) { @@ -72,14 +71,14 @@ const TagInput = ({ value, handleTagChanged, intl, isPreviewActive, autoFocus, s } if (!tags.includes(tag)) { - //check if tag is community and post communtiy is not already selected + // check if tag is community and post communtiy is not already selected if (isCommunity(tag) && !isCommunity(tags[0])) { - //add community tag + // add community tag tags.splice(0, 0, tag); setCommunity(tag); dispatch(toastNotification(intl.formatMessage({ id: 'editor.community_selected' }))); } else { - //add simple tag + // add simple tag tags.push(tag); } } else { diff --git a/src/components/filterBar/view/filterBarView.tsx b/src/components/filterBar/view/filterBarView.tsx index 66a075bcc..5d2d27aec 100644 --- a/src/components/filterBar/view/filterBarView.tsx +++ b/src/components/filterBar/view/filterBarView.tsx @@ -1,6 +1,5 @@ import React from 'react'; -import { View, TouchableOpacity } from 'react-native'; -import { Icon } from '../../icon'; +import { View } from 'react-native'; // Components import { LineBreak, Tag } from '../../basicUIElements'; @@ -15,22 +14,20 @@ import IconButton from '../../iconButton'; */ interface FilterBarProps { - isHide:boolean; - options:string[]; - selectedOptionIndex:number; - onDropdownSelect:(index:number)=>void; + isHide: boolean; + options: string[]; + selectedOptionIndex: number; + onDropdownSelect: (index: number) => void; - //optional props - iconSize?:number; - rightIconName?:string; - rightIconType?:string; - enableCustomiseButton?:boolean; - onRightIconPress?:()=>void; - onCustomisePress?:()=>void; + // optional props + iconSize?: number; + rightIconName?: string; + rightIconType?: string; + enableCustomiseButton?: boolean; + onRightIconPress?: () => void; + onCustomisePress?: () => void; } - - const FilterBarView = ({ iconSize, isHide, @@ -42,58 +39,57 @@ const FilterBarView = ({ selectedOptionIndex, enableCustomiseButton, onCustomisePress, -}:FilterBarProps) => { - - const _renderActionButtons = () => rightIconName || enableCustomiseButton ? ( - - { - enableCustomiseButton && ( - onCustomisePress && onCustomisePress()} - /> +}: FilterBarProps) => { + const _renderActionButtons = () => + rightIconName || enableCustomiseButton ? ( + + {enableCustomiseButton && ( + onCustomisePress && onCustomisePress()} + /> )} - { - rightIconName && ( - onRightIconPress && onRightIconPress()} - /> + {rightIconName && ( + onRightIconPress && onRightIconPress()} + /> )} - ) : + ) : ( + + ); return ( - {!isHide && ( - - - - {options.map((item, index) => ( - onDropdownSelect(index)} - /> - ))} - - {_renderActionButtons()} + {!isHide && ( + + + + {options.map((item, index) => ( + onDropdownSelect(index)} + /> + ))} - - )} + {_renderActionButtons()} + + + )} - ) -} - + ); +}; export default FilterBarView; diff --git a/src/components/foregroundNotification/foregroundNotification.tsx b/src/components/foregroundNotification/foregroundNotification.tsx index 4d8f31008..723aeda2d 100644 --- a/src/components/foregroundNotification/foregroundNotification.tsx +++ b/src/components/foregroundNotification/foregroundNotification.tsx @@ -3,6 +3,7 @@ import React, { useEffect, useRef, useState } from 'react'; import { Text, TouchableOpacity, View } from 'react-native'; import { View as AnimatedView } from 'react-native-animatable'; import { useDispatch } from 'react-redux'; +import { useIntl } from 'react-intl'; import { IconButton } from '..'; import { toastNotification } from '../../redux/actions/uiAction'; import UserAvatar from '../userAvatar'; @@ -11,7 +12,6 @@ import ROUTES from '../../constants/routeNames'; // Styles import styles, { CONTAINER_HEIGHT } from './styles'; import RootNavigation from '../../navigation/rootNavigation'; -import { useIntl } from 'react-intl'; interface RemoteMessage { data: { @@ -26,15 +26,13 @@ interface RemoteMessage { notification: { body: string; title: string; - } - + }; } interface Props { - remoteMessage: RemoteMessage + remoteMessage: RemoteMessage; } - const ForegroundNotification = ({ remoteMessage }: Props) => { const intl = useIntl(); @@ -48,26 +46,23 @@ const ForegroundNotification = ({ remoteMessage }: Props) => { const [title, setTitle] = useState(''); const [body, setBody] = useState(''); - useEffect(() => { - if (remoteMessage) { const { source, target, type, id } = remoteMessage.data; if (activeId !== id && (type === 'reply' || type === 'mention')) { - let titlePrefixId = ''; switch (type) { case 'reply': - titlePrefixId = 'notification.reply_on' + titlePrefixId = 'notification.reply_on'; break; case 'mention': - titlePrefixId = 'notification.mention_on' + titlePrefixId = 'notification.mention_on'; break; } setActiveId(id); setUsername(source); - setTitle(`${intl.formatMessage({ id: titlePrefixId })} @${target}`) + setTitle(`${intl.formatMessage({ id: titlePrefixId })} @${target}`); setBody(intl.formatMessage({ id: 'notification.reply_body' })); show(); } @@ -77,15 +72,14 @@ const ForegroundNotification = ({ remoteMessage }: Props) => { if (hideTimeoutRef.current) { clearTimeout(hideTimeoutRef.current); } - } + }; }, [remoteMessage]); const show = () => { - setIsVisible(true) + setIsVisible(true); hideTimeoutRef.current = setTimeout(() => { hide(); - }, duration) - + }, duration); }; const hide = async () => { @@ -93,25 +87,23 @@ const ForegroundNotification = ({ remoteMessage }: Props) => { await containerRef.current.fadeOutUp(300); setIsVisible(false); - if(hideTimeoutRef.current){ + if (hideTimeoutRef.current) { clearTimeout(hideTimeoutRef.current); } - } }; - const _onPress = () => { const { data } = remoteMessage; const fullPermlink = get(data, 'permlink1', '') + get(data, 'permlink2', '') + get(data, 'permlink3', ''); - let params = { + const params = { author: get(data, 'source', ''), permlink: fullPermlink, }; - let key = fullPermlink - let name = ROUTES.SCREENS.POST; + const key = fullPermlink; + const name = ROUTES.SCREENS.POST; RootNavigation.navigate({ name, @@ -119,41 +111,37 @@ const ForegroundNotification = ({ remoteMessage }: Props) => { key, }); hide(); - - } - + }; return ( - isVisible && - + isVisible && ( + + + + + - - - - - - - - {title} - {body} + + + {title} + + + {body} + + - - - - - - - ) -} + + + + + ) + ); +}; export default ForegroundNotification; diff --git a/src/components/foregroundNotification/styles.ts b/src/components/foregroundNotification/styles.ts index bf5fe6308..764502272 100644 --- a/src/components/foregroundNotification/styles.ts +++ b/src/components/foregroundNotification/styles.ts @@ -5,16 +5,16 @@ import { getStatusBarHeight } from 'react-native-iphone-x-helper'; export const CONTAINER_HEIGHT = getStatusBarHeight() + 100; export default EStyleSheet.create({ - container:{ + container: { position: 'absolute', - top:0, - justifyContent:'center', + top: 0, + justifyContent: 'center', zIndex: 9999, - marginHorizontal:8, - paddingTop:16, + marginHorizontal: 8, + paddingTop: 16, marginTop: Platform.select({ - ios:getStatusBarHeight() + 12, - android:8, + ios: getStatusBarHeight() + 12, + android: 8, }), backgroundColor: '$darkGrayBackground', shadowColor: '#5f5f5fbf', @@ -23,20 +23,20 @@ export default EStyleSheet.create({ height: 5, }, elevation: 3, - borderRadius:12, + borderRadius: 12, width: '$deviceWidth - 16', }, - contentContainer:{ - flexDirection:'row', - justifyContent:'space-between', - alignItems:'center', - paddingBottom:16, - paddingHorizontal:16 + contentContainer: { + flexDirection: 'row', + justifyContent: 'space-between', + alignItems: 'center', + paddingBottom: 16, + paddingHorizontal: 16, }, text: { color: 'white', fontWeight: 'bold', fontSize: 14, - paddingLeft:16, + paddingLeft: 16, }, }); diff --git a/src/components/formInput/view/formInputView.tsx b/src/components/formInput/view/formInputView.tsx index ee4bdd80d..2dece36b9 100644 --- a/src/components/formInput/view/formInputView.tsx +++ b/src/components/formInput/view/formInputView.tsx @@ -13,21 +13,20 @@ import { getResizedAvatar } from '../../../utils/image'; // Styles import styles from './formInputStyles'; - interface Props extends TextInputProps { - type:string; - isFirstImage:boolean; - isEditable?:boolean; - leftIconName?:string; - rightIconName?:string; - iconType?:string; - wrapperStyle:ViewStyle; - height:number; - inputStyle:TextStyle; - isValid:boolean; - onChange?:(value:string)=>void; - onFocus?:()=>void; - onBlur?:()=>void; + type: string; + isFirstImage: boolean; + isEditable?: boolean; + leftIconName?: string; + rightIconName?: string; + iconType?: string; + wrapperStyle: ViewStyle; + height: number; + inputStyle: TextStyle; + isValid: boolean; + onChange?: (value: string) => void; + onFocus?: () => void; + onBlur?: () => void; } const FormInputView = ({ @@ -48,7 +47,7 @@ const FormInputView = ({ onBlur, onFocus, ...props -}:Props) => { +}: Props) => { const [_value, setValue] = useState(value || ''); const [inputBorderColor, setInputBorderColor] = useState('#e7e7e7'); const [_isValid, setIsValid] = useState(true); @@ -65,7 +64,7 @@ const FormInputView = ({ const _handleOnFocus = () => { setInputBorderColor('#357ce6'); - if(onFocus){ + if (onFocus) { onFocus(); } }; diff --git a/src/components/header/view/headerStyles.ts b/src/components/header/view/headerStyles.ts index f8e55f880..a6b256102 100644 --- a/src/components/header/view/headerStyles.ts +++ b/src/components/header/view/headerStyles.ts @@ -29,18 +29,18 @@ export default EStyleSheet.create({ avatarDefault: { borderTopRightRadius: 68 / 2, borderBottomRightRadius: 68 / 2, - overflow:'hidden' + overflow: 'hidden', }, titleWrapper: { flexDirection: 'column', justifyContent: 'center', alignItems: 'flex-start', marginHorizontal: 8, - flex:2, + flex: 2, }, titleWrapperReverse: { - alignItems:'flex-end', - }, + alignItems: 'flex-end', + }, title: { fontSize: 14, fontWeight: 'bold', diff --git a/src/components/header/view/headerView.tsx b/src/components/header/view/headerView.tsx index b5ba6e05a..f54cd6b03 100644 --- a/src/components/header/view/headerView.tsx +++ b/src/components/header/view/headerView.tsx @@ -4,6 +4,7 @@ import LinearGradient from 'react-native-linear-gradient'; import { useIntl } from 'react-intl'; // Components +import { useNavigation } from '@react-navigation/native'; import { SearchModal } from '../../searchModal'; import { IconButton } from '../../iconButton'; import { UserAvatar } from '../../userAvatar'; @@ -13,7 +14,6 @@ import ROUTES from '../../../constants/routeNames'; // Styles import styles from './headerStyles'; -import { useNavigation } from '@react-navigation/native'; const HeaderView = ({ displayName, @@ -29,7 +29,6 @@ const HeaderView = ({ hideUser, showQR, }) => { - const navigation = useNavigation(); const [isSearchModalOpen, setIsSearchModalOpen] = useState(false); @@ -43,7 +42,7 @@ const HeaderView = ({ } const _onPressSearchButton = () => { - navigation.navigate( ROUTES.SCREENS.SEARCH_RESULT ); + navigation.navigate(ROUTES.SCREENS.SEARCH_RESULT); }; const _renderAvatar = () => ( @@ -143,4 +142,4 @@ const HeaderView = ({ ); }; -export default HeaderView; \ No newline at end of file +export default HeaderView; diff --git a/src/components/index.js b/src/components/index.tsx similarity index 99% rename from src/components/index.js rename to src/components/index.tsx index 4c5ea7de6..7e4d1ad29 100644 --- a/src/components/index.js +++ b/src/components/index.tsx @@ -36,7 +36,6 @@ import { PostForm } from './postForm'; import { PostHeaderDescription, PostBody, Tags } from './postElements'; import { DraftListItem } from './draftListItem'; import { ProfileSummary } from './profileSummary'; -import { ProgressiveImage } from './progressiveImage'; import { SearchInput } from './searchInput'; import { SearchModal } from './searchModal'; @@ -60,16 +59,19 @@ import { ToggleSwitch } from './toggleSwitch'; import { TransferFormItem } from './transferFormItem'; import { Upvote } from './upvote'; import { UserAvatar } from './userAvatar'; + import Logo from './logo/logo'; import PostButton from './postButton/postButtonView'; import ProfileEditForm from './profileEditForm/profileEditFormView'; import ScaleSlider from './scaleSlider/scaleSliderView'; import { ProductItemLine } from './productItemLine/productItemLineView'; import { HorizontalIconList } from './horizontalIconList/horizontalIconListView'; + import { PopoverWrapper } from './popoverWrapper/popoverWrapperView'; import CommunitiesList from './communitiesList'; import SubscribedCommunitiesList from './subscribedCommunitiesList'; import { InsertLinkModal } from './insertLinkModal/insertLinkModal'; + // View import { Comment } from './comment'; import { Comments } from './comments'; diff --git a/src/components/insertLinkModal/insertLinkModal.tsx b/src/components/insertLinkModal/insertLinkModal.tsx index 074b47c8c..05c53ef01 100644 --- a/src/components/insertLinkModal/insertLinkModal.tsx +++ b/src/components/insertLinkModal/insertLinkModal.tsx @@ -1,21 +1,15 @@ import React, { forwardRef, useEffect, useImperativeHandle, useRef, useState } from 'react'; import { useIntl } from 'react-intl'; -import { - Platform, - Text, - TouchableOpacity, - View, - ActivityIndicator, -} from 'react-native'; +import { Platform, Text, TouchableOpacity, View, ActivityIndicator } from 'react-native'; +import { renderPostBody } from '@ecency/render-helper'; +import { ScrollView } from 'react-native-gesture-handler'; +import Clipboard from '@react-native-clipboard/clipboard'; import { MainButton, PostBody, TextButton } from '..'; import styles from './insertLinkModalStyles'; import TextInput from '../textInput'; import { delay } from '../../utils/editor'; import { isStringWebLink } from '../markdownEditor/children/formats/utils'; -import { renderPostBody } from '@ecency/render-helper'; -import { ScrollView } from 'react-native-gesture-handler'; import applyWebLinkFormat from '../markdownEditor/children/formats/applyWebLinkFormat'; -import Clipboard from '@react-native-clipboard/clipboard'; import getWindowDimensions from '../../utils/getWindowDimensions'; import Modal from '../modal'; @@ -49,7 +43,6 @@ export const InsertLinkModal = forwardRef( const labelInputRef = useRef(null); const urlInputRef = useRef(null); - useImperativeHandle(ref, () => ({ showModal: async ({ selectedText, selection }) => { if (selectedText) { @@ -141,8 +134,8 @@ export const InsertLinkModal = forwardRef( setVisible(false)}// sheetModalRef.current?.setModalVisible(false)} - text={'Cancel'} + onPress={() => setVisible(false)} // sheetModalRef.current?.setModalVisible(false)} + text="Cancel" /> - {isLoading && } + {isLoading && } ); }; const _renderContent = ( - + {_renderInputs()} {_renderPreview()} {_renderFloatingPanel()} @@ -291,7 +284,6 @@ export const InsertLinkModal = forwardRef( ); return ( - {_renderContent} - ); }, ); diff --git a/src/components/insertLinkModal/insertLinkModalStyles.ts b/src/components/insertLinkModal/insertLinkModalStyles.ts index 59c15cc0f..b97e63541 100644 --- a/src/components/insertLinkModal/insertLinkModalStyles.ts +++ b/src/components/insertLinkModal/insertLinkModalStyles.ts @@ -19,7 +19,7 @@ export default EStyleSheet.create({ paddingTop: 32, paddingBottom: 16, }, - + container: { paddingVertical: 8, backgroundColor: '$primaryBackgroundColor', diff --git a/src/components/mainButton/view/mainButtonView.js b/src/components/mainButton/view/mainButtonView.js index 6f8098dc9..3f993939b 100644 --- a/src/components/mainButton/view/mainButtonView.js +++ b/src/components/mainButton/view/mainButtonView.js @@ -37,16 +37,8 @@ class MainButton extends Component { }; _getBody = () => { - const { - isLoading, - text, - secondText, - iconColor, - iconName, - source, - iconType, - textStyle, - } = this.props; + const { isLoading, text, secondText, iconColor, iconName, source, iconType, textStyle } = + this.props; if (isLoading) { this._getIndicator(); diff --git a/src/components/markdownEditor/children/editorToolbar.tsx b/src/components/markdownEditor/children/editorToolbar.tsx index 3f789bec2..1bae2b805 100644 --- a/src/components/markdownEditor/children/editorToolbar.tsx +++ b/src/components/markdownEditor/children/editorToolbar.tsx @@ -1,26 +1,31 @@ -import { Keyboard, View, ViewStyle } from 'react-native' -import React, { useEffect, useMemo, useRef, useState } from 'react' -import { IconButton, UploadsGalleryModal } from '../..' -import { FlatList, HandlerStateChangeEvent, PanGestureHandler, PanGestureHandlerEventPayload } from 'react-native-gesture-handler'; +import { Keyboard, View, ViewStyle } from 'react-native'; +import React, { useEffect, useMemo, useRef, useState } from 'react'; +import { + FlatList, + HandlerStateChangeEvent, + PanGestureHandler, + PanGestureHandlerEventPayload, +} from 'react-native-gesture-handler'; +import { getBottomSpace } from 'react-native-iphone-x-helper'; +import Animated, { EasingNode, Extrapolate } from 'react-native-reanimated'; +import { IconButton, UploadsGalleryModal } from '../..'; import styles from '../styles/editorToolbarStyles'; import { useAppSelector } from '../../../hooks'; import { MediaInsertData } from '../../uploadsGalleryModal/container/uploadsGalleryModal'; import Formats from './formats/formats'; -import { getBottomSpace } from 'react-native-iphone-x-helper'; -import Animated, { Easing, Extrapolate } from 'react-native-reanimated'; type Props = { - insertedMediaUrls: string[], - paramFiles: any[] - isEditing: boolean, - isPreviewActive: boolean, + insertedMediaUrls: string[]; + paramFiles: any[]; + isEditing: boolean; + isPreviewActive: boolean; setIsUploading: (isUploading: boolean) => void; handleMediaInsert: (data: MediaInsertData[]) => void; handleOnAddLinkPress: () => void; handleOnClearPress: () => void; handleOnMarkupButtonPress: (item) => void; handleShowSnippets: () => void; -} +}; export const EditorToolbar = ({ insertedMediaUrls, @@ -32,11 +37,9 @@ export const EditorToolbar = ({ handleOnAddLinkPress, handleOnClearPress, handleOnMarkupButtonPress, - handleShowSnippets - + handleShowSnippets, }: Props) => { - - const currentAccount = useAppSelector(state => state.account.currentAccount) + const currentAccount = useAppSelector((state) => state.account.currentAccount); const uploadsGalleryModalRef = useRef(null); const translateY = useRef(new Animated.Value(200)); const shouldHideExtension = useRef(false); @@ -47,18 +50,12 @@ export const EditorToolbar = ({ const [isKeyboardVisible, setKeyboardVisible] = useState(false); useEffect(() => { - const keyboardDidShowListener = Keyboard.addListener( - 'keyboardDidShow', - () => { - setKeyboardVisible(true); // or some other action - } - ); - const keyboardDidHideListener = Keyboard.addListener( - 'keyboardDidHide', - () => { - setKeyboardVisible(false); // or some other action - } - ); + const keyboardDidShowListener = Keyboard.addListener('keyboardDidShow', () => { + setKeyboardVisible(true); // or some other action + }); + const keyboardDidHideListener = Keyboard.addListener('keyboardDidHide', () => { + setKeyboardVisible(false); // or some other action + }); return () => { keyboardDidHideListener.remove(); @@ -74,7 +71,9 @@ export const EditorToolbar = ({ iconStyle={styles.icon} iconType={item.iconType} name={item.icon} - onPress={() => { handleOnMarkupButtonPress && handleOnMarkupButtonPress(item) }} + onPress={() => { + handleOnMarkupButtonPress && handleOnMarkupButtonPress(item); + }} /> ); @@ -86,10 +85,9 @@ export const EditorToolbar = ({ uploadsGalleryModalRef.current.toggleModal(true); _revealExtension(); } - } + }; - - //handles extension closing + // handles extension closing const _onGestureEvent = Animated.event( [ { @@ -99,30 +97,38 @@ export const EditorToolbar = ({ }, ], { - useNativeDriver: false - } + useNativeDriver: false, + }, ); - - const consY = useMemo(() => translateY.current.interpolate({ - inputRange: [0, 500], - outputRange: [0, 500], - extrapolate: Extrapolate.CLAMP - }), [translateY.current]); - + const consY = useMemo( + () => + translateY.current.interpolate({ + inputRange: [0, 500], + outputRange: [0, 500], + extrapolate: Extrapolate.CLAMP, + }), + [translateY.current], + ); const _animatedStyle = { transform: [ { translateY: consY, }, - ] - } + ], + }; const _onPanHandlerStateChange = (e: HandlerStateChangeEvent) => { - console.log("handler state change", e.nativeEvent.velocityY, e.nativeEvent.velocityY > 300, e.nativeEvent.translationY); - shouldHideExtension.current = e.nativeEvent.velocityY > 300 || e.nativeEvent.translationY > (extensionHeight.current / 2); - } + console.log( + 'handler state change', + e.nativeEvent.velocityY, + e.nativeEvent.velocityY > 300, + e.nativeEvent.translationY, + ); + shouldHideExtension.current = + e.nativeEvent.velocityY > 300 || e.nativeEvent.translationY > extensionHeight.current / 2; + }; const _revealExtension = () => { if (!isExtensionVisible) { @@ -134,16 +140,15 @@ export const EditorToolbar = ({ Animated.timing(translateY.current, { duration: 200, toValue: 0, - easing: Easing.inOut(Easing.ease), - }).start() - } - + easing: EasingNode.inOut(EasingNode.ease), + }).start(); + }; const _hideExtension = () => { Animated.timing(translateY.current, { toValue: extensionHeight.current, duration: 200, - easing: Easing.inOut(Easing.ease), + easing: EasingNode.inOut(EasingNode.ease), }).start(() => { shouldHideExtension.current = false; setIsExtensionVisible(false); @@ -151,29 +156,31 @@ export const EditorToolbar = ({ uploadsGalleryModalRef.current.toggleModal(false); } }); - } - + }; const _onPanEnded = () => { if (shouldHideExtension.current) { - _hideExtension() + _hideExtension(); } else { _revealExtension(); } - } - + }; const _renderExtension = () => { return ( - - - { - extensionHeight.current = e.nativeEvent.layout.height; - console.log('extension height', extensionHeight.current) - - }} style={styles.dropShadow}> + onEnded={_onPanEnded} + > + + { + extensionHeight.current = e.nativeEvent.layout.height; + console.log('extension height', extensionHeight.current); + }} + style={styles.dropShadow} + > {isExtensionVisible && } + setIsUploading={setIsUploading} + /> - ) - } + ); + }; - const _containerStyle: ViewStyle = isExtensionVisible ? styles.container : styles.shadowedContainer; + const _containerStyle: ViewStyle = isExtensionVisible + ? styles.container + : styles.shadowedContainer; const _buttonsContainerStyle: ViewStyle = { ...styles.buttonsContainer, borderTopWidth: isExtensionVisible ? 1 : 0, - paddingBottom: !isKeyboardVisible ? getBottomSpace() : 0 - } + paddingBottom: !isKeyboardVisible ? getBottomSpace() : 0, + }; return ( - {_renderExtension()} {!isPreviewActive && ( @@ -220,10 +229,14 @@ export const EditorToolbar = ({ iconStyle={styles.icon} iconType="FontAwesome" name="link" - onPress={() => { handleOnAddLinkPress && handleOnAddLinkPress() }} + onPress={() => { + handleOnAddLinkPress && handleOnAddLinkPress(); + }} /> { handleShowSnippets && handleShowSnippets() }} + onPress={() => { + handleShowSnippets && handleShowSnippets(); + }} style={styles.rightIcons} size={20} iconStyle={styles.icon} @@ -240,7 +253,9 @@ export const EditorToolbar = ({ /> { handleOnClearPress && handleOnClearPress() }} + onPress={() => { + handleOnClearPress && handleOnClearPress(); + }} size={20} iconStyle={styles.clearIcon} iconType="FontAwesome" @@ -251,9 +266,6 @@ export const EditorToolbar = ({ )} - - - - ) -} \ No newline at end of file + ); +}; diff --git a/src/components/markdownEditor/children/formats/applyMediaLink.ts b/src/components/markdownEditor/children/formats/applyMediaLink.ts index 3f7d5ea65..f8be9a6de 100644 --- a/src/components/markdownEditor/children/formats/applyMediaLink.ts +++ b/src/components/markdownEditor/children/formats/applyMediaLink.ts @@ -1,108 +1,102 @@ -import { MediaInsertData, MediaInsertStatus } from '../../../uploadsGalleryModal/container/uploadsGalleryModal'; +import { + MediaInsertData, + MediaInsertStatus, +} from '../../../uploadsGalleryModal/container/uploadsGalleryModal'; import { replaceBetween } from './utils'; interface Selection { - start: number, - end: number + start: number; + end: number; } interface Args { - text: string; - selection: Selection; - setTextAndSelection: ({ selection: Selection, text: string }) => void, - items: MediaInsertData[] + text: string; + selection: Selection; + setTextAndSelection: ({ selection: Selection, text: string }) => void; + items: MediaInsertData[]; } export default async ({ text, selection, setTextAndSelection, items }: Args) => { + // TODO: check if placeholder already present in text body + // check if cursor position is after or before media position + // replace placeholder with url or failure message + // calclulate change of cursor position - //TODO: check if placeholder already present in text body - // check if cursor position is after or before media position - // replace placeholder with url or failure message - // calclulate change of cursor position + const imagePrefix = '!'; + const placeholderPrefix = 'Uploading... '; - const imagePrefix = '!'; - const placeholderPrefix = 'Uploading... ' + let newText = text; + let newSelection = selection; - let newText = text; - let newSelection = selection; + const _insertFormatedString = (text, value) => { + const formatedText = `\n${imagePrefix}[${text}](${value})\n`; + newText = replaceBetween(newText, newSelection, formatedText); + const newIndex = newText && newText.indexOf(value, newSelection.start) + value.length + 2; + newSelection = { + start: newIndex, + end: newIndex, + }; + }; + const _replaceFormatedString = (placeholder: string, url: string) => { + const replaceStr = `(${placeholder})`; - const _insertFormatedString = (text, value) => { - const formatedText = `\n${imagePrefix}[${text}](${value})\n`; - newText = replaceBetween(newText, newSelection, formatedText); - const newIndex = newText && newText.indexOf(value, newSelection.start) + value.length + 2; - newSelection = { - start: newIndex, - end: newIndex - } + const endingIndex = newText.indexOf(replaceStr) + replaceStr.length + 1; + newText = newText.replace(replaceStr, `(${url})`); + + if (newSelection.start >= endingIndex) { + const lengthDiff = url.length - placeholder.length; + newSelection = { + start: newSelection.start + lengthDiff, + end: newSelection.end + lengthDiff, + }; } + }; + const _removeFormatedString = (placeholder) => { + const formatedText = `${imagePrefix}[](${placeholder})`; + const formatedTextIndex = newText.indexOf(formatedText); + newText = newText.replace(formatedText, ''); - const _replaceFormatedString = (placeholder: string, url: string) => { - const replaceStr = `(${placeholder})`; - - const endingIndex = newText.indexOf(replaceStr) + replaceStr.length + 1; - newText = newText.replace(replaceStr, `(${url})`); - - if (newSelection.start >= endingIndex) { - const lengthDiff = url.length - placeholder.length - newSelection = { - start: newSelection.start + lengthDiff, - end: newSelection.end + lengthDiff - } - } + if (newSelection.start > formatedTextIndex) { + newSelection = { + start: newSelection.start - formatedText.length, + end: newSelection.end - formatedText.length, + }; } + }; + items.forEach((item) => { + const _placeholder = item.filename && `${placeholderPrefix}${item.filename}`; - const _removeFormatedString = (placeholder) => { - const formatedText = `${imagePrefix}[](${placeholder})` - const formatedTextIndex = newText.indexOf(formatedText); - newText = newText.replace(formatedText, '') + switch (item.status) { + case MediaInsertStatus.UPLOADING: // means only filename is available + if (!_placeholder) return; + _insertFormatedString(item.text, _placeholder); + break; - if (newSelection.start > formatedTextIndex) { - newSelection = { - start: newSelection.start - formatedText.length, - end: newSelection.end - formatedText.length - } + case MediaInsertStatus.READY: // means url is ready but filename may be available + if (_placeholder && newText.includes(_placeholder)) { + // means placeholder is preset is needs replacing + _replaceFormatedString(_placeholder, item.url); + } else if (item.url) { + _insertFormatedString(item.text, item.url); } + break; + + case MediaInsertStatus.FAILED: // filename available but upload failed + if (_placeholder && newText.includes(_placeholder)) { + _removeFormatedString(_placeholder); + } + break; + + default: + if (item.url) { + _insertFormatedString(item.text, item.url); + } + break; } + }); - - - items.forEach(item => { - - const _placeholder = item.filename && `${placeholderPrefix}${item.filename}`; - - switch (item.status) { - case MediaInsertStatus.UPLOADING: //means only filename is available - if (!_placeholder) return; - _insertFormatedString(item.text, _placeholder) - break; - - case MediaInsertStatus.READY: //means url is ready but filename may be available - if (_placeholder && newText.includes(_placeholder)) { - //means placeholder is preset is needs replacing - _replaceFormatedString(_placeholder, item.url); - } else if (item.url) { - _insertFormatedString(item.text, item.url); - } - break; - - case MediaInsertStatus.FAILED: //filename available but upload failed - if (_placeholder && newText.includes(_placeholder)) { - _removeFormatedString(_placeholder); - } - break; - - default: - if (item.url) { - _insertFormatedString(item.text, item.url); - } - break; - } - - }); - - - setTextAndSelection({ text: newText, selection: newSelection }); + setTextAndSelection({ text: newText, selection: newSelection }); }; diff --git a/src/components/markdownEditor/children/formats/applySnippet.ts b/src/components/markdownEditor/children/formats/applySnippet.ts index b675b96cd..faca92ee1 100644 --- a/src/components/markdownEditor/children/formats/applySnippet.ts +++ b/src/components/markdownEditor/children/formats/applySnippet.ts @@ -1,10 +1,10 @@ -import {replaceBetween } from './utils'; +import { replaceBetween } from './utils'; -export default async ({ text, selection, setTextAndSelection, snippetText}) => { +export default async ({ text, selection, setTextAndSelection, snippetText }) => { const newText = replaceBetween(text, selection, `${snippetText}`); - const newSelection = { - start: selection.start, - end: selection.start + (snippetText && snippetText.length), - }; + const newSelection = { + start: selection.start, + end: selection.start + (snippetText && snippetText.length), + }; setTextAndSelection({ text: newText, selection: newSelection }); -}; \ No newline at end of file +}; diff --git a/src/components/markdownEditor/children/formats/applyUsername.ts b/src/components/markdownEditor/children/formats/applyUsername.ts index 9ff3454b1..7f986ad41 100644 --- a/src/components/markdownEditor/children/formats/applyUsername.ts +++ b/src/components/markdownEditor/children/formats/applyUsername.ts @@ -1,11 +1,15 @@ import { extractWordAtIndex } from '../../../../utils/editor'; -import {replaceBetween } from './utils'; +import { replaceBetween } from './utils'; -export default async ({ text, selection, setTextAndSelection, username}) => { - const _word = extractWordAtIndex(text, selection.start); - const _insertAt = text.indexOf(_word, selection.start - _word.length); - const _text = replaceBetween(text, {start:_insertAt, end:_insertAt + _word.length}, `@${username} `) - const _newPos = _insertAt + username.length + 2; - const _selection = { start: _newPos, end: _newPos }; - setTextAndSelection({ selection: _selection, text: _text }); -}; \ No newline at end of file +export default async ({ text, selection, setTextAndSelection, username }) => { + const _word = extractWordAtIndex(text, selection.start); + const _insertAt = text.indexOf(_word, selection.start - _word.length); + const _text = replaceBetween( + text, + { start: _insertAt, end: _insertAt + _word.length }, + `@${username} `, + ); + const _newPos = _insertAt + username.length + 2; + const _selection = { start: _newPos, end: _newPos }; + setTextAndSelection({ selection: _selection, text: _text }); +}; diff --git a/src/components/markdownEditor/children/usernameAutofillBar.tsx b/src/components/markdownEditor/children/usernameAutofillBar.tsx index ec66bae4c..aa44f4d87 100644 --- a/src/components/markdownEditor/children/usernameAutofillBar.tsx +++ b/src/components/markdownEditor/children/usernameAutofillBar.tsx @@ -1,93 +1,104 @@ -import React, {useState, useEffect, useCallback} from 'react'; -import { View, FlatList, Text, TouchableOpacity } from "react-native" +import React, { useState, useEffect, useCallback } from 'react'; +import { View, FlatList, Text, TouchableOpacity } from 'react-native'; +import { debounce } from 'lodash'; import { UserAvatar } from '../..'; import { lookupAccounts } from '../../../providers/hive/dhive'; import { extractWordAtIndex } from '../../../utils/editor'; import styles from '../styles/markdownEditorStyles'; -import {debounce} from 'lodash'; interface Props { - text:string, - selection:{ - start:number, - end:number - } - onApplyUsername:(username:string)=>void; + text: string; + selection: { + start: number; + end: number; + }; + onApplyUsername: (username: string) => void; } -export const UsernameAutofillBar = ({text, selection, onApplyUsername}:Props) => { +export const UsernameAutofillBar = ({ text, selection, onApplyUsername }: Props) => { + const [searchedUsers, setSearchedUsers] = useState([]); + const [query, setQuery] = useState(''); - const [searchedUsers, setSearchedUsers] = useState([]) - const [query, setQuery] = useState(''); + useEffect(() => { + if (selection.start === selection.end && text) { + _processTextForSearch(text, selection.start); + } + }, [text, selection]); - useEffect(() => { - if (selection.start === selection.end && text) { - _processTextForSearch(text, selection.start); - } - }, [text, selection]) - - - const _processTextForSearch = useCallback(debounce((text:string, index:number) => { - const word = extractWordAtIndex(text, index); - console.log('selection word is: ', word); - if (word.startsWith('@') && word.length > 1) { - _handleUserSearch(word.substring(1)); - } else { - setSearchedUsers([]); - setQuery('') - _handleUserSearch.cancel(); - } - }, 300, {leading:true}),[]); - - - const _handleUserSearch = useCallback(debounce(async (username) => { - if(query !== username){ - let users = []; - if (username) { - setQuery(username) - users = await lookupAccounts(username); - console.log('result users for', username, users); + const _processTextForSearch = useCallback( + debounce( + (text: string, index: number) => { + const word = extractWordAtIndex(text, index); + console.log('selection word is: ', word); + if (word.startsWith('@') && word.length > 1) { + _handleUserSearch(word.substring(1)); + } else { + setSearchedUsers([]); + setQuery(''); + _handleUserSearch.cancel(); } - setSearchedUsers(users); - } - - }, 200, {leading:true}), []); + }, + 300, + { leading: true }, + ), + [], + ); + const _handleUserSearch = useCallback( + debounce( + async (username) => { + if (query !== username) { + let users = []; + if (username) { + setQuery(username); + users = await lookupAccounts(username); + console.log('result users for', username, users); + } + setSearchedUsers(users); + } + }, + 200, + { leading: true }, + ), + [], + ); - - const _onUserSelect = (username) => { - onApplyUsername(username) - setSearchedUsers([]); - setQuery('') - }; + const _onUserSelect = (username) => { + onApplyUsername(username); + setSearchedUsers([]); + setQuery(''); + }; - if(!searchedUsers || searchedUsers.length === 0 || query === ''){ - return null; - } - - const _renderItem = ({item}:{item:string}) => { - - const username = item; - return ( - {_onUserSelect(username)}}> - - - {username} - - - ) - } - - return ( - - `searched-user-${item}`} - /> - - ) + if (!searchedUsers || searchedUsers.length === 0 || query === '') { + return null; } + + const _renderItem = ({ item }: { item: string }) => { + const username = item; + return ( + { + _onUserSelect(username); + }} + > + + + {username} + + + ); + }; + + return ( + + `searched-user-${item}`} + /> + + ); +}; diff --git a/src/components/markdownEditor/styles/editorToolbarStyles.ts b/src/components/markdownEditor/styles/editorToolbarStyles.ts index f03dc5b7e..27edd485f 100644 --- a/src/components/markdownEditor/styles/editorToolbarStyles.ts +++ b/src/components/markdownEditor/styles/editorToolbarStyles.ts @@ -10,11 +10,11 @@ const _dropShadow = { }, backgroundColor: '$primaryBackgroundColor', borderColor: '$primaryLightBackground', - borderTopWidth : Platform.select({ + borderTopWidth: Platform.select({ android: 1, - ios: 0 - }) -} + ios: 0, + }), +}; export default EStyleSheet.create({ container: { @@ -22,13 +22,13 @@ export default EStyleSheet.create({ elevation: 3, backgroundColor: '$primaryBackgroundColor', }, - shadowedContainer:{ + shadowedContainer: { elevation: 3, width: '$deviceWidth', - ..._dropShadow + ..._dropShadow, }, dropShadow: { - ..._dropShadow + ..._dropShadow, }, buttonsContainer: { justifyContent: 'space-between', @@ -36,7 +36,7 @@ export default EStyleSheet.create({ width: '$deviceWidth', backgroundColor: '$primaryBackgroundColor', borderColor: '$primaryLightBackground', - paddingBottom: getBottomSpace() + paddingBottom: getBottomSpace(), }, clearIcon: { color: '$primaryLightGray', @@ -75,8 +75,6 @@ export default EStyleSheet.create({ backgroundColor: '$primaryLightBackground', borderRadius: 8, margin: 8, - alignSelf: 'center' - } + alignSelf: 'center', + }, }); - - diff --git a/src/components/markdownEditor/styles/markdownEditorStyles.js b/src/components/markdownEditor/styles/markdownEditorStyles.js index e9cc7407c..2cd64f19c 100644 --- a/src/components/markdownEditor/styles/markdownEditorStyles.js +++ b/src/components/markdownEditor/styles/markdownEditorStyles.js @@ -71,13 +71,13 @@ export default EStyleSheet.create({ paddingBottom: 16, }, floatingContainer: Platform.select({ - //absolute positioning makes button hide behind keyboard on ios + // absolute positioning makes button hide behind keyboard on ios ios: { alignItems: 'flex-end', margin: 16, marginBottom: 24, }, - //on android the appearing of button was causing momentary glitch with ios variant style + // on android the appearing of button was causing momentary glitch with ios variant style android: { position: 'absolute', right: 16, @@ -85,12 +85,12 @@ export default EStyleSheet.create({ }, }), searchAccountsContainer: Platform.select({ - //absolute positioning makes button hide behind keyboard on ios + // absolute positioning makes button hide behind keyboard on ios ios: { marginBottom: 12, paddingTop: 8, }, - //on android the appearing of button was causing momentary glitch with ios variant style + // on android the appearing of button was causing momentary glitch with ios variant style android: { position: 'absolute', bottom: 56, diff --git a/src/components/markdownEditor/view/markdownEditorView.tsx b/src/components/markdownEditor/view/markdownEditorView.tsx index fa0035524..00d6c8f2d 100644 --- a/src/components/markdownEditor/view/markdownEditorView.tsx +++ b/src/components/markdownEditor/view/markdownEditorView.tsx @@ -50,10 +50,10 @@ import { useAppSelector } from '../../../hooks'; // const MIN_BODY_INPUT_HEIGHT = 300; -//These variable keep track of body text input state, -//this helps keep load on minimal compared to both useState and useRef; -var bodyText = ''; -var bodySelection = { start: 0, end: 0 }; +// These variable keep track of body text input state, +// this helps keep load on minimal compared to both useState and useRef; +let bodyText = ''; +let bodySelection = { start: 0, end: 0 }; const MarkdownEditorView = ({ paramFiles, @@ -123,7 +123,7 @@ const MarkdownEditorView = ({ useEffect(() => { if (bodyText === '' && draftBody !== '') { - let draftBodyLength = draftBody.length; + const draftBodyLength = draftBody.length; _setTextAndSelection({ selection: { start: draftBodyLength, end: draftBodyLength }, text: draftBody, @@ -132,9 +132,9 @@ const MarkdownEditorView = ({ }, [draftBody]); useEffect(() => { - //hide draft button if fields changes and button was visible + // hide draft button if fields changes and button was visible if (showDraftLoadButton) { - let isCreating = + const isCreating = get(fields, 'title', '') !== '' || get(fields, 'body', '') !== '' || get(fields, 'tags', []) !== []; @@ -213,7 +213,7 @@ const MarkdownEditorView = ({ _debouncedOnTextChange(); - //NOTE: onChange method is called by direct parent of MarkdownEditor that is PostForm, do not remove + // NOTE: onChange method is called by direct parent of MarkdownEditor that is PostForm, do not remove if (onChange) { onChange(input); } @@ -258,7 +258,7 @@ const MarkdownEditorView = ({ const _renderPreview = () => ( {bodyText ? ( - + ) : ( ... )} @@ -394,7 +394,7 @@ const MarkdownEditorView = ({ void; - children?: any + children?: any; } export const InputSupportModal = ({ children, visible, onClose }: InputSupportModalProps, ref) => { - const container = useRef(null); const innerContainer = useRef(null); @@ -20,48 +19,38 @@ export const InputSupportModal = ({ children, visible, onClose }: InputSupportMo useEffect(() => { if (visible) { setShowModal(true); - } - else if (!visible && container.current && innerContainer.current) { - innerContainer.current.slideOutDown(1000) + } else if (!visible && container.current && innerContainer.current) { + innerContainer.current.slideOutDown(1000); setTimeout(async () => { - await container.current?.fadeOut(200) + await container.current?.fadeOut(200); setShowModal(false); - }, 300) + }, 300); } - }, [visible]) + }, [visible]); - - return showModal && ( - - - - - - - + + + animation="slideInUp" + duration={300} + > + - { - Platform.select({ + {Platform.select({ ios: ( {children} ), android: {children}, - }) - } + })} + - - + + ) ); }; diff --git a/src/components/organisms/inputSupportModal/index.ts b/src/components/organisms/inputSupportModal/index.ts index fcb03ddfa..5b9d950cd 100644 --- a/src/components/organisms/inputSupportModal/index.ts +++ b/src/components/organisms/inputSupportModal/index.ts @@ -1 +1 @@ -export * from './container/inputSupportModal'; \ No newline at end of file +export * from './container/inputSupportModal'; diff --git a/src/components/organisms/quickProfileModal/children/actionPanel.tsx b/src/components/organisms/quickProfileModal/children/actionPanel.tsx index fb7d75648..145291615 100644 --- a/src/components/organisms/quickProfileModal/children/actionPanel.tsx +++ b/src/components/organisms/quickProfileModal/children/actionPanel.tsx @@ -5,63 +5,55 @@ import { IconButton } from '../../..'; import styles from './quickProfileStyles'; interface ActionPanelProps { - isFollowing:boolean, - isFavourite:boolean, - isMuted:boolean, - isLoading:boolean, - onFollowPress:()=>void, - onFavouritePress:()=>void + isFollowing: boolean; + isFavourite: boolean; + isMuted: boolean; + isLoading: boolean; + onFollowPress: () => void; + onFavouritePress: () => void; } export const ActionPanel = ({ - isFollowing, - isFavourite, + isFollowing, + isFavourite, isMuted, isLoading, - onFavouritePress, - onFollowPress + onFavouritePress, + onFollowPress, }: ActionPanelProps) => { + const heartColor = isFavourite ? '$primaryBlue' : '$iconColor'; - const heartColor = isFavourite - ? '$primaryBlue' - : '$iconColor'; - - const followIcon = isFollowing - ? 'user-check' - : 'user-plus'; + const followIcon = isFollowing ? 'user-check' : 'user-plus'; return ( - { - isMuted ? ( - - - ) : ( - - ) - } - - + ) : ( + + )} + + ); -}; \ No newline at end of file +}; diff --git a/src/components/organisms/quickProfileModal/children/index.ts b/src/components/organisms/quickProfileModal/children/index.ts index 22716c28c..ab3906640 100644 --- a/src/components/organisms/quickProfileModal/children/index.ts +++ b/src/components/organisms/quickProfileModal/children/index.ts @@ -1 +1 @@ -export * from './quickProfileContent'; \ No newline at end of file +export * from './quickProfileContent'; diff --git a/src/components/organisms/quickProfileModal/children/profileBasic.tsx b/src/components/organisms/quickProfileModal/children/profileBasic.tsx index df7ca2e19..4f11eccf3 100644 --- a/src/components/organisms/quickProfileModal/children/profileBasic.tsx +++ b/src/components/organisms/quickProfileModal/children/profileBasic.tsx @@ -1,63 +1,68 @@ -import React from 'react' -import { View, Text, TouchableOpacity } from 'react-native' +import React from 'react'; +import { View, Text, TouchableOpacity } from 'react-native'; import FastImage from 'react-native-fast-image'; -import styles from './quickProfileStyles'; import * as Progress from 'react-native-progress'; import EStyleSheet from 'react-native-extended-stylesheet'; import { useIntl } from 'react-intl'; +import styles from './quickProfileStyles'; import { UserAvatar } from '../../..'; - interface Props { - username:string, - about:string, - created:{ - unit:string, - value:number - }, - votingPower:string, - isLoading:boolean, - onPress:()=>void + username: string; + about: string; + created: { + unit: string; + value: number; + }; + votingPower: string; + isLoading: boolean; + onPress: () => void; } -export const ProfileBasic = ({username, about, votingPower, isLoading, created, onPress}: Props) => { - const intl = useIntl(); - const progress = parseInt(votingPower || '0')/100; +export const ProfileBasic = ({ + username, + about, + votingPower, + isLoading, + created, + onPress, +}: Props) => { + const intl = useIntl(); + const progress = parseInt(votingPower || '0') / 100; - let joinedString = '---' - if(created){ - const timeString = `${(-created.value)} ${intl.formatMessage({id:`time.${created.unit}`})}`; - joinedString = intl.formatMessage({id:'profile.joined'}, {time:timeString}) - } - - return ( - - - - - - - - - - {`@${username}`} - {!!about && {about}} - {joinedString} - - - ) -} + let joinedString = '---'; + if (created) { + const timeString = `${-created.value} ${intl.formatMessage({ id: `time.${created.unit}` })}`; + joinedString = intl.formatMessage({ id: 'profile.joined' }, { time: timeString }); + } + + return ( + + + + + + + + + + {`@${username}`} + {!!about && ( + + {about} + + )} + {joinedString} + + + ); +}; diff --git a/src/components/organisms/quickProfileModal/children/profileStats.tsx b/src/components/organisms/quickProfileModal/children/profileStats.tsx index 2d1079eb1..0b6b9c345 100644 --- a/src/components/organisms/quickProfileModal/children/profileStats.tsx +++ b/src/components/organisms/quickProfileModal/children/profileStats.tsx @@ -1,47 +1,51 @@ -import React from 'react' -import { View, Text } from 'react-native' -import styles from './quickProfileStyles' -import * as Animated from 'react-native-animatable' - +import React from 'react'; +import { View, Text } from 'react-native'; +import * as Animated from 'react-native-animatable'; +import styles from './quickProfileStyles'; export interface StatsData { - label:string, - value:number|string, - suffix?:string + label: string; + value: number | string; + suffix?: string; } interface Props { - data:StatsData[], - horizontalMargin?:number, - intermediate:boolean, + data: StatsData[]; + horizontalMargin?: number; + intermediate: boolean; } -export const ProfileStats = ({data, horizontalMargin, intermediate}: Props) => { - return ( - - {data.map((item)=>( - - ))} - - ) -} - -const StatItem = (props:{label:string, value:number|string, intermediate:boolean}) => ( - - {!props.intermediate ? ( - {props.value} - ):( - {'--'} - )} - - {props.label} +export const ProfileStats = ({ data, horizontalMargin, intermediate }: Props) => { + return ( + + {data.map((item) => ( + + ))} -) - - - + ); +}; +const StatItem = (props: { label: string; value: number | string; intermediate: boolean }) => ( + + {!props.intermediate ? ( + + {props.value} + + ) : ( + -- + )} + {props.label} + +); diff --git a/src/components/organisms/quickProfileModal/container/quickProfileModal.tsx b/src/components/organisms/quickProfileModal/container/quickProfileModal.tsx index a690d81e3..dc9954caa 100644 --- a/src/components/organisms/quickProfileModal/container/quickProfileModal.tsx +++ b/src/components/organisms/quickProfileModal/container/quickProfileModal.tsx @@ -1,46 +1,38 @@ import React, { useEffect, useRef } from 'react'; import ActionSheet from 'react-native-actions-sheet'; -import { QuickProfileContent } from '../children/quickProfileContent'; import EStyleSheet from 'react-native-extended-stylesheet'; +import { QuickProfileContent } from '../children/quickProfileContent'; import styles from '../children/quickProfileStyles'; import { useAppDispatch, useAppSelector } from '../../../../hooks'; import { hideProfileModal } from '../../../../redux/actions/uiAction'; - - export const QuickProfileModal = () => { - const sheetModalRef = useRef(); - const dispatch = useAppDispatch(); + const sheetModalRef = useRef(); + const dispatch = useAppDispatch(); - const profileModalUsername = useAppSelector((state)=>state.ui.profileModalUsername); + const profileModalUsername = useAppSelector((state) => state.ui.profileModalUsername); - - useEffect(() => { - if(profileModalUsername){ - sheetModalRef.current.show(); - }else { - sheetModalRef.current.hide(); - } - }, [profileModalUsername]) - - - const _onClose = () => { - dispatch(hideProfileModal()); + useEffect(() => { + if (profileModalUsername) { + sheetModalRef.current.show(); + } else { + sheetModalRef.current.hide(); } - + }, [profileModalUsername]); - return ( - - - - - ); + const _onClose = () => { + dispatch(hideProfileModal()); + }; + + return ( + + + + ); }; diff --git a/src/components/organisms/quickProfileModal/index.ts b/src/components/organisms/quickProfileModal/index.ts index d14f44d9e..1999bd658 100644 --- a/src/components/organisms/quickProfileModal/index.ts +++ b/src/components/organisms/quickProfileModal/index.ts @@ -1 +1 @@ -export * from './container/quickProfileModal'; \ No newline at end of file +export * from './container/quickProfileModal'; diff --git a/src/components/pinAnimatedInput/views/pinAnimatedInputView.js b/src/components/pinAnimatedInput/views/pinAnimatedInputView.js index 92ffc3d99..927363db1 100644 --- a/src/components/pinAnimatedInput/views/pinAnimatedInputView.js +++ b/src/components/pinAnimatedInput/views/pinAnimatedInputView.js @@ -33,7 +33,7 @@ class PinAnimatedInput extends Component { toValue: 1, duration: 250, easing: Easing.linear, - useNativeDriver: false, //setting it to false as animation is not being used + useNativeDriver: false, // setting it to false as animation is not being used }), ), ]).start((o) => { diff --git a/src/components/postBoost/postBoostView.js b/src/components/postBoost/postBoostView.js index 183b651ec..1cd216a8a 100644 --- a/src/components/postBoost/postBoostView.js +++ b/src/components/postBoost/postBoostView.js @@ -119,7 +119,7 @@ class BoostPostScreen extends PureComponent { if (!isValid) { const postUrl = postUrlParser(permlink); if (postUrl && postUrl.author && postUrl.permlink) { - let postPermlink = `${postUrl.author}/${postUrl.permlink}`; + const postPermlink = `${postUrl.author}/${postUrl.permlink}`; this.setState({ permlink: postPermlink, isValid: true, @@ -129,6 +129,7 @@ class BoostPostScreen extends PureComponent { } } }; + render() { const { intl } = this.props; const { selectedUser, balance, factor, permlinkSuggestions, permlink, isValid } = this.state; diff --git a/src/components/postCard/container/postCardContainer.js b/src/components/postCard/container/postCardContainer.js index 3dc4d6635..a95f9ed52 100644 --- a/src/components/postCard/container/postCardContainer.js +++ b/src/components/postCard/container/postCardContainer.js @@ -13,6 +13,7 @@ import PostCardView from '../view/postCardView'; import { default as ROUTES } from '../../../constants/routeNames'; import { useAppDispatch } from '../../../hooks'; import { showProfileModal } from '../../../redux/actions/uiAction'; + /* * Props Name Description Value *@props --> props name here description here Value Type Here diff --git a/src/components/postCard/view/postCardStyles.js b/src/components/postCard/view/postCardStyles.js index c0a71ee4b..4a44e1b44 100644 --- a/src/components/postCard/view/postCardStyles.js +++ b/src/components/postCard/view/postCardStyles.js @@ -33,8 +33,8 @@ export default EStyleSheet.create({ margin: 0, alignItems: 'center', alignSelf: 'center', - //height: 200, - //width: '$deviceWidth - 16', + // height: 200, + // width: '$deviceWidth - 16', borderRadius: 8, backgroundColor: '$primaryLightGray', }, diff --git a/src/components/postCard/view/postCardView.js b/src/components/postCard/view/postCardView.js index 93e12e6ba..933d3aa4e 100644 --- a/src/components/postCard/view/postCardView.js +++ b/src/components/postCard/view/postCardView.js @@ -6,7 +6,7 @@ import { injectIntl } from 'react-intl'; // Utils import FastImage from 'react-native-fast-image'; import { getTimeFromNow } from '../../../utils/time'; -//import bugsnagInstance from '../../../config/bugsnag'; +// import bugsnagInstance from '../../../config/bugsnag'; // Components import { PostHeaderDescription } from '../../postElements'; @@ -47,7 +47,7 @@ const PostCardView = ({ isMuted, pageType, }) => { - //local state to manage fake upvote if available + // local state to manage fake upvote if available const activeVotesCount = activeVotes ? activeVotes.length : 0; const [cacheVoteIcrement, setCacheVoteIcrement] = useState(0); const [calcImgHeight, setCalcImgHeight] = useState(imageHeight || 300); @@ -75,13 +75,13 @@ const PostCardView = ({ }; const _handleCacheVoteIncrement = () => { - //fake increment vote using based on local change + // fake increment vote using based on local change setCacheVoteIcrement(1); }; const rebloggedBy = get(content, 'reblogged_by[0]', null); - var images = { image: DEFAULT_IMAGE, thumbnail: DEFAULT_IMAGE }; + let images = { image: DEFAULT_IMAGE, thumbnail: DEFAULT_IMAGE }; if (content.thumbnail) { if (isMuted || (nsfw !== '0' && content.nsfw)) { images = { image: NSFW_IMAGE, thumbnail: NSFW_IMAGE }; diff --git a/src/components/postDropdown/container/postDropdownContainer.tsx b/src/components/postDropdown/container/postDropdownContainer.tsx index 08e79c661..e1223dc10 100644 --- a/src/components/postDropdown/container/postDropdownContainer.tsx +++ b/src/components/postDropdown/container/postDropdownContainer.tsx @@ -5,6 +5,7 @@ import { injectIntl } from 'react-intl'; import get from 'lodash/get'; // Services and Actions +import { useNavigation } from '@react-navigation/native'; import { ignoreUser, pinCommunityPost, profileUpdate, reblog } from '../../../providers/hive/dhive'; import { addBookmark, addReport } from '../../../providers/ecency/ecency'; import { toastNotification, setRcOffer, showActionModal } from '../../../redux/actions/uiAction'; @@ -24,7 +25,6 @@ import { updateCurrentAccount } from '../../../redux/actions/accountAction'; import showLoginAlert from '../../../utils/showLoginAlert'; import { useUserActivityMutation } from '../../../providers/queries/pointQueries'; import { PointActivityIds } from '../../../providers/ecency/ecency.types'; -import { useNavigation } from '@react-navigation/native'; /* * Props Name Description Value @@ -72,12 +72,12 @@ class PostDropdownContainer extends PureComponent { _initOptions = ( { content, currentAccount, pageType, subscribedCommunities, isMuted } = this.props, ) => { - //check if post is owned by current user or not, if so pinned or not + // check if post is owned by current user or not, if so pinned or not const _canUpdateBlogPin = !!pageType && !!content && !!currentAccount && currentAccount.name === content.author; const _isPinnedInProfile = !!content && content.stats?.is_pinned_blog; - //check community pin update eligibility + // check community pin update eligibility const _canUpdateCommunityPin = subscribedCommunities.data && !!content && content.community ? subscribedCommunities.data.reduce((role, subscription) => { @@ -89,7 +89,7 @@ class PostDropdownContainer extends PureComponent { : false; const _isPinnedInCommunity = !!content && content.stats?.is_pinned; - //cook options list based on collected flags + // cook options list based on collected flags const options = OPTIONS.filter((option) => { switch (option) { case 'pin-blog': @@ -110,7 +110,7 @@ class PostDropdownContainer extends PureComponent { // Component Functions _handleOnDropdownSelect = async (index) => { - const { currentAccount, content, dispatch, intl, navigation, isMuted } = this.props as any; + const { currentAccount, content, dispatch, intl, navigation, isMuted } = this.props; const username = content.author; const isOwnProfile = !username || currentAccount.username === username; const { options } = this.state; @@ -193,8 +193,7 @@ class PostDropdownContainer extends PureComponent { }; _muteUser = () => { - const { currentAccount, pinCode, dispatch, intl, content, isLoggedIn, navigation } = this - .props as any; + const { currentAccount, pinCode, dispatch, intl, content, isLoggedIn, navigation } = this.props; const username = content.author; const follower = currentAccount.name; const following = username; @@ -210,7 +209,7 @@ class PostDropdownContainer extends PureComponent { .then(() => { const curMutes = currentAccount.mutes || []; if (curMutes.indexOf(username) < 0) { - //check to avoid double entry corner case + // check to avoid double entry corner case currentAccount.mutes = [username, ...curMutes]; } dispatch(updateCurrentAccount(currentAccount)); @@ -228,14 +227,14 @@ class PostDropdownContainer extends PureComponent { }; _profileActionDone = ({ error = null }) => { - const { intl, dispatch, content } = this.props as any; + const { intl, dispatch, content } = this.props; this.setState({ isProfileLoading: false, }); if (error) { if (error.jse_shortmsg && error.jse_shortmsg.includes('wait to transact')) { - //when RC is not enough, offer boosting account + // when RC is not enough, offer boosting account dispatch(setRcOffer(true)); } else { Alert.alert( @@ -249,7 +248,7 @@ class PostDropdownContainer extends PureComponent { }; _share = () => { - const { content } = this.props as any; + const { content } = this.props; const postUrl = getPostUrl(get(content, 'url')); Share.share({ @@ -258,7 +257,7 @@ class PostDropdownContainer extends PureComponent { }; _report = (url) => { - const { dispatch, intl } = this.props as any; + const { dispatch, intl } = this.props; const _onConfirm = () => { addReport('content', url) @@ -301,7 +300,7 @@ class PostDropdownContainer extends PureComponent { }; _addToBookmarks = () => { - const { content, dispatch, intl, isLoggedIn, navigation } = this.props as any; + const { content, dispatch, intl, isLoggedIn, navigation } = this.props; if (!isLoggedIn) { showLoginAlert({ navigation, intl }); return; @@ -337,7 +336,7 @@ class PostDropdownContainer extends PureComponent { pinCode, navigation, userActivityMutation, - } = this.props as any; + } = this.props; if (!isLoggedIn) { showLoginAlert({ navigation, intl }); return; @@ -345,7 +344,7 @@ class PostDropdownContainer extends PureComponent { if (isLoggedIn) { reblog(currentAccount, pinCode, content.author, get(content, 'permlink', '')) .then((response) => { - //track user activity points ty=130 + // track user activity points ty=130 userActivityMutation.mutate({ pointsTy: PointActivityIds.REBLOG, transactionId: response.id, @@ -370,10 +369,10 @@ class PostDropdownContainer extends PureComponent { ); } else { if (error && error.jse_shortmsg.split(': ')[1].includes('wait to transact')) { - //when RC is not enough, offer boosting account + // when RC is not enough, offer boosting account dispatch(setRcOffer(true)); } else { - //when other errors + // when other errors dispatch(toastNotification(intl.formatMessage({ id: 'alert.fail' }))); } } @@ -397,7 +396,7 @@ class PostDropdownContainer extends PureComponent { dispatch(updateCurrentAccount({ ...currentAccount })); dispatch(toastNotification(intl.formatMessage({ id: 'alert.successful' }))); - //TOOD: signal posts or pinned post refresh + // TOOD: signal posts or pinned post refresh } catch (err) { Alert.alert( intl.formatMessage({ @@ -435,7 +434,7 @@ class PostDropdownContainer extends PureComponent { }; _redirectToReply = () => { - const { content, fetchPost, isLoggedIn, navigation } = this.props as any; + const { content, fetchPost, isLoggedIn, navigation } = this.props; if (isLoggedIn) { navigation.navigate({ @@ -451,7 +450,7 @@ class PostDropdownContainer extends PureComponent { }; _redirectToPromote = (name, from, redeemType) => { - const { content, isLoggedIn, navigation, isPinCodeOpen } = this.props as any; + const { content, isLoggedIn, navigation, isPinCodeOpen } = this.props; const params = { from, permlink: `${get(content, 'author')}/${get(content, 'permlink')}`, @@ -514,16 +513,16 @@ const mapStateToProps = (state) => ({ subscribedCommunities: state.communities.subscribedCommunities, }); - const mapHooksToProps = (props) => { const navigation = useNavigation(); - const userActivityMutation = useUserActivityMutation() - return -} + const userActivityMutation = useUserActivityMutation(); + return ( + + ); +}; -export default - connect(mapStateToProps)(injectIntl(mapHooksToProps)); \ No newline at end of file +export default connect(mapStateToProps)(injectIntl(mapHooksToProps)); diff --git a/src/components/postElements/body/view/commentBodyStyles.ts b/src/components/postElements/body/view/commentBodyStyles.ts index e2b9aa894..c3fa81fc5 100644 --- a/src/components/postElements/body/view/commentBodyStyles.ts +++ b/src/components/postElements/body/view/commentBodyStyles.ts @@ -9,12 +9,10 @@ export default EStyleSheet.create({ minWidth: 40, maxWidth: 170, marginVertical: 12, - paddingVertical:6, + paddingVertical: 6, }, revealText: { color: '$white', fontSize: 14, }, }); - - diff --git a/src/components/postElements/body/view/commentBodyView.tsx b/src/components/postElements/body/view/commentBodyView.tsx index a5cd4f16a..3ec46c07f 100644 --- a/src/components/postElements/body/view/commentBodyView.tsx +++ b/src/components/postElements/body/view/commentBodyView.tsx @@ -8,6 +8,7 @@ import ActionsSheetView from 'react-native-actions-sheet'; // import AutoHeightWebView from 'react-native-autoheight-webview'; import EStyleSheet from 'react-native-extended-stylesheet'; +import { LongPressGestureHandler, State } from 'react-native-gesture-handler'; import RootNavigation from '../../../../navigation/rootNavigation'; // Constants @@ -21,8 +22,7 @@ import styles from './commentBodyStyles'; // Services and Actions import { writeToClipboard } from '../../../../utils/clipboard'; import { toastNotification } from '../../../../redux/actions/uiAction'; -import { LongPressGestureHandler, State } from 'react-native-gesture-handler'; -import { useCallback } from 'react'; + import { OptionsModal } from '../../../atoms'; import { useAppDispatch } from '../../../../hooks'; import { isCommunity } from '../../../../utils/communityValidation'; @@ -39,10 +39,9 @@ const CommentBody = ({ created, commentDepth, reputation = 25, - isMuted + isMuted, }) => { - - const _contentWidth = WIDTH - (40 + 28 + (commentDepth > 2 ? 44 : 0)) + const _contentWidth = WIDTH - (40 + 28 + (commentDepth > 2 ? 44 : 0)); const dispatch = useAppDispatch(); @@ -52,7 +51,7 @@ const CommentBody = ({ const [selectedLink, setSelectedLink] = useState(null); const [revealComment, setRevealComment] = useState(reputation > 0 && !isMuted); const [videoUrl, setVideoUrl] = useState(null); - const [youtubeVideoId, setYoutubeVideoId] = useState(null) + const [youtubeVideoId, setYoutubeVideoId] = useState(null); const [videoStartTime, setVideoStartTime] = useState(0); const intl = useIntl(); @@ -60,25 +59,23 @@ const CommentBody = ({ const actionLink = useRef(null); const youtubePlayerRef = useRef(null); - - const _onLongPressStateChange = ({nativeEvent}) => { - if(nativeEvent.state === State.ACTIVE){ + const _onLongPressStateChange = ({ nativeEvent }) => { + if (nativeEvent.state === State.ACTIVE) { handleOnLongPress(); } - } + }; const _showLowComment = () => { setRevealComment(true); }; - const handleImagePress = (ind) => { if (ind === 1) { - //open gallery mode + // open gallery mode setIsImageModalOpen(true); } if (ind === 0) { - //copy to clipboard + // copy to clipboard writeToClipboard(selectedImage).then(() => { dispatch( toastNotification( @@ -90,7 +87,7 @@ const CommentBody = ({ }); } if (ind === 2) { - //save to local + // save to local _saveImage(selectedImage); } @@ -99,7 +96,7 @@ const CommentBody = ({ const handleLinkPress = (ind) => { if (ind === 1) { - //open link + // open link if (selectedLink) { Linking.canOpenURL(selectedLink).then((supported) => { if (supported) { @@ -117,7 +114,7 @@ const CommentBody = ({ } } if (ind === 0) { - //copy to clipboard + // copy to clipboard writeToClipboard(selectedLink).then(() => { dispatch( toastNotification( @@ -128,12 +125,11 @@ const CommentBody = ({ ); }); } - + setSelectedLink(null); - }; - const _handleTagPress = (tag:string, filter:string = GLOBAL_POST_FILTERS_VALUE[0]) => { + const _handleTagPress = (tag: string, filter: string = GLOBAL_POST_FILTERS_VALUE[0]) => { if (tag) { const name = isCommunity(tag) ? ROUTES.SCREENS.COMMUNITY : ROUTES.SCREENS.TAG_RESULT; const key = `${filter}/${tag}`; @@ -148,21 +144,21 @@ const CommentBody = ({ } }; - const _handleSetSelectedLink = (link:string) => { - setSelectedLink(link) + const _handleSetSelectedLink = (link: string) => { + setSelectedLink(link); actionLink.current.show(); - } + }; - const _handleSetSelectedImage = (imageLink:string, postImgUrls:string[]) => { - if(postImages.length !== postImgUrls.length){ + const _handleSetSelectedImage = (imageLink: string, postImgUrls: string[]) => { + if (postImages.length !== postImgUrls.length) { setPostImages(postImgUrls); } setSelectedImage(imageLink); actionImage.current.show(); - } + }; const _handleOnPostPress = (permlink, author) => { - if(handleOnPostPress){ + if (handleOnPostPress) { handleOnUserPress(permlink, author); return; } @@ -179,7 +175,7 @@ const CommentBody = ({ }; const _handleOnUserPress = (username) => { - if(handleOnUserPress){ + if (handleOnUserPress) { handleOnUserPress(username); return; } @@ -219,7 +215,7 @@ const CommentBody = ({ }) .fetch('GET', uri) .then((res) => { - let status = res.info().status; + const { status } = res.info(); if (status == 200) { return res.path(); @@ -239,7 +235,7 @@ const CommentBody = ({ uri = `file://${await _downloadImage(uri)}`; } CameraRoll.saveToCameraRoll(uri) - .then((res) => { + .then(() => { dispatch( toastNotification( intl.formatMessage({ @@ -248,7 +244,7 @@ const CommentBody = ({ ), ); }) - .catch((error) => { + .catch(() => { dispatch( toastNotification( intl.formatMessage({ @@ -279,17 +275,16 @@ const CommentBody = ({ const _handleVideoPress = (embedUrl) => { if (embedUrl && youtubePlayerRef.current) { setVideoUrl(embedUrl); - setVideoStartTime(0) + setVideoStartTime(0); youtubePlayerRef.current.setModalVisible(true); } }; - return ( ({url}))} + imageUrls={postImages.map((url) => ({ url }))} enableSwipeDown onCancel={() => setIsImageModalOpen(false)} onClick={() => setIsImageModalOpen(false)} @@ -339,7 +334,6 @@ const CommentBody = ({ /> - ) : ( - @@ -371,4 +365,3 @@ const CommentBody = ({ }; export default CommentBody; - diff --git a/src/components/postElements/body/view/config.js b/src/components/postElements/body/view/config.js index 1ea056bd5..ef8e7ed76 100644 --- a/src/components/postElements/body/view/config.js +++ b/src/components/postElements/body/view/config.js @@ -1,26 +1,26 @@ const customBodyScript = ` -var images = document.getElementsByTagName("IMG"); -var imageUrls = []; -for (var k = 0; k < images.length; k++) { - var src = images[k].getAttribute("src") || ''; +let images = document.getElementsByTagName("IMG"); +let imageUrls = []; +for (let k = 0; k < images.length; k++) { + let src = images[k].getAttribute("src") || ''; if (src) { imageUrls.push({url: src}); } } -for (var i = 0; i < images.length; i++) { - var result = { +for (let i = 0; i < images.length; i++) { + let result = { type: 'image', images: imageUrls, image: images[i].getAttribute("src") || '' }; - var resultStr = JSON.stringify(JSON.stringify(result)); - var message = 'window.ReactNativeWebView.postMessage(' + resultStr + ')'; + let resultStr = JSON.stringify(JSON.stringify(result)); + let message = 'window.ReactNativeWebView.postMessage(' + resultStr + ')'; if (!images[i].classList.contains("video-thumbnail") && !images[i].parentNode.classList.contains("markdown-external-link")) { images[i].setAttribute("onclick", message); } } document.addEventListener('click', function(event) { - var el = event.target; + let el = event.target; while (el.tagName !== 'A') { if (!el.parentNode) { break; @@ -32,8 +32,8 @@ document.addEventListener('click', function(event) { } if (el.getAttribute('target') === '_external') { event.preventDefault(); - var href = el.getAttribute('href'); - var result = { + let href = el.getAttribute('href'); + let result = { type: '_external', href: href }; @@ -42,8 +42,8 @@ document.addEventListener('click', function(event) { } if (el.classList.contains('markdown-external-link')) { event.preventDefault(); - var href = el.getAttribute('data-href'); - var result = { + let href = el.getAttribute('data-href'); + let result = { type: 'markdown-external-link', href: href }; @@ -51,8 +51,8 @@ document.addEventListener('click', function(event) { return true; } if (el.classList.contains('markdown-author-link')) { - var author = el.getAttribute('data-author'); - var result = { + let author = el.getAttribute('data-author'); + let result = { type: 'markdown-author-link', author: author }; @@ -60,12 +60,12 @@ document.addEventListener('click', function(event) { return false; } if (el.classList.contains('markdown-post-link')) { - var category = el.getAttribute('data-tag'); - var author = el.getAttribute('data-author'); - var permlink = el.getAttribute('data-permlink'); + let category = el.getAttribute('data-tag'); + let author = el.getAttribute('data-author'); + let permlink = el.getAttribute('data-permlink'); - var result = { + let result = { type: 'markdown-post-link', category: category, author: author, @@ -75,9 +75,9 @@ document.addEventListener('click', function(event) { return false; } if (el.classList.contains('markdown-tag-link')) { - var tag = el.getAttribute('data-tag'); - var filter = el.getAttribute('data-filter'); - var result = { + let tag = el.getAttribute('data-tag'); + let filter = el.getAttribute('data-filter'); + let result = { type: 'markdown-tag-link', filter: filter, tag: tag @@ -86,15 +86,15 @@ document.addEventListener('click', function(event) { return false; } if (el.classList.contains('markdown-witnesses-link')) { - var result = { + let result = { type: 'markdown-witnesses-link' }; window.ReactNativeWebView.postMessage(JSON.stringify(result)); return false; } if (el.classList.contains('markdown-proposal-link')) { - var proposal = el.getAttribute('data-proposal'); - var result = { + let proposal = el.getAttribute('data-proposal'); + let result = { type: 'markdown-proposal-link', proposal: proposal }; @@ -103,11 +103,11 @@ document.addEventListener('click', function(event) { } if (el.classList.contains('markdown-video-link-youtube')) { - var embedUrl = el.getAttribute('data-embed-src'); + let embedUrl = el.getAttribute('data-embed-src'); if (embedUrl) { - var result = { + let result = { type: 'markdown-video-link-youtube', tag: embedUrl }; @@ -117,14 +117,14 @@ document.addEventListener('click', function(event) { } if (el.classList.contains('markdown-video-link')) { - var embedSrc = ''; + let embedSrc = ''; if (embedSrc) { el.innerHTML = embedSrc; return; } - var videoHref = el.getAttribute('data-video-href'); + let videoHref = el.getAttribute('data-video-href'); if (videoHref) { - var result = { + let result = { type: 'markdown-video-link', videoHref: videoHref }; @@ -134,31 +134,31 @@ document.addEventListener('click', function(event) { } - var author = el.getAttribute('data-author').toString(); + let author = el.getAttribute('data-author').toString(); window.ReactNativeWebView.postMessage(JSON.stringify(author)); }); true; `; const customCommentScript = ` -var longpress = 1500; -var delay; -var images = document.getElementsByTagName("IMG"); -var imageUrls = []; -for (var k = 0; k < images.length; k++) { - var src = images[k].getAttribute("src") || ''; +let longpress = 1500; +let delay; +let images = document.getElementsByTagName("IMG"); +let imageUrls = []; +for (let k = 0; k < images.length; k++) { + let src = images[k].getAttribute("src") || ''; if (src) { imageUrls.push({url: src}); } } -for (var i = 0; i < images.length; i++) { - var result = { +for (let i = 0; i < images.length; i++) { + let result = { type: 'image', images: imageUrls, image: images[i].getAttribute("src") || '' }; - var resultStr = JSON.stringify(JSON.stringify(result)); - var message = 'window.ReactNativeWebView.postMessage(' + resultStr + ')'; + let resultStr = JSON.stringify(JSON.stringify(result)); + let message = 'window.ReactNativeWebView.postMessage(' + resultStr + ')'; if (!images[i].classList.contains("video-thumbnail") && !images[i].parentNode.classList.contains("markdown-external-link")) { images[i].setAttribute("onclick", message); } @@ -166,7 +166,7 @@ for (var i = 0; i < images.length; i++) { document.addEventListener('mousedown', function(event) { delay = setTimeout(check, longpress); function check() { - var result = { + let result = { type: 'longpress', }; window.ReactNativeWebView.postMessage(JSON.stringify(result)); @@ -180,7 +180,7 @@ document.addEventListener('mouseout', function (e) { clearTimeout(delay); }); document.addEventListener('click', function(event) { - var el = event.target; + let el = event.target; while (el.tagName !== 'A') { if (!el.parentNode) { break; @@ -192,8 +192,8 @@ document.addEventListener('click', function(event) { } if (el.getAttribute('target') === '_external') { event.preventDefault(); - var href = el.getAttribute('href'); - var result = { + let href = el.getAttribute('href'); + let result = { type: '_external', href: href }; @@ -202,8 +202,8 @@ document.addEventListener('click', function(event) { } if (el.classList.contains('markdown-external-link')) { event.preventDefault(); - var href = el.getAttribute('data-href'); - var result = { + let href = el.getAttribute('data-href'); + let result = { type: 'markdown-external-link', href: href }; @@ -211,8 +211,8 @@ document.addEventListener('click', function(event) { return true; } if (el.classList.contains('markdown-author-link')) { - var author = el.getAttribute('data-author'); - var result = { + let author = el.getAttribute('data-author'); + let result = { type: 'markdown-author-link', author: author }; @@ -220,10 +220,10 @@ document.addEventListener('click', function(event) { return false; } if (el.classList.contains('markdown-post-link')) { - var category = el.getAttribute('data-tag'); - var author = el.getAttribute('data-author'); - var permlink = el.getAttribute('data-permlink'); - var result = { + let category = el.getAttribute('data-tag'); + let author = el.getAttribute('data-author'); + let permlink = el.getAttribute('data-permlink'); + let result = { type: 'markdown-post-link', category: category, author: author, @@ -233,8 +233,8 @@ document.addEventListener('click', function(event) { return false; } if (el.classList.contains('markdown-tag-link')) { - var tag = el.getAttribute('data-tag'); - var result = { + let tag = el.getAttribute('data-tag'); + let result = { type: 'markdown-tag-link', tag: tag }; @@ -242,15 +242,15 @@ document.addEventListener('click', function(event) { return false; } if (el.classList.contains('markdown-witnesses-link')) { - var result = { + let result = { type: 'markdown-witnesses-link' }; window.ReactNativeWebView.postMessage(JSON.stringify(result)); return false; } if (el.classList.contains('markdown-proposal-link')) { - var proposal = el.getAttribute('data-proposal'); - var result = { + let proposal = el.getAttribute('data-proposal'); + let result = { type: 'markdown-proposal-link', proposal: proposal }; @@ -259,12 +259,12 @@ document.addEventListener('click', function(event) { } if (el.classList.contains('markdown-video-link-youtube')) { - var embedUrl = el.getAttribute('data-embed-src'); + let embedUrl = el.getAttribute('data-embed-src'); if (embedUrl) { - var result = { + let result = { type: 'markdown-video-link-youtube', tag: embedUrl }; @@ -275,14 +275,14 @@ document.addEventListener('click', function(event) { if (el.classList.contains('markdown-video-link')) { - var embedSrc = ''; + let embedSrc = ''; if (embedSrc) { el.innerHTML = embedSrc; return; } - var videoHref = el.getAttribute('data-video-href'); + let videoHref = el.getAttribute('data-video-href'); if (videoHref) { - var result = { + let result = { type: 'markdown-video-link', videoHref: videoHref }; diff --git a/src/components/postElements/body/view/postBodyView.js b/src/components/postElements/body/view/postBodyView.js index 37a2bd8ff..37480f46a 100644 --- a/src/components/postElements/body/view/postBodyView.js +++ b/src/components/postElements/body/view/postBodyView.js @@ -66,11 +66,11 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { const handleImagePress = (ind) => { if (ind === 1) { - //open gallery mode + // open gallery mode setIsImageModalOpen(true); } if (ind === 0) { - //copy to clipboard + // copy to clipboard writeToClipboard(selectedImage).then(() => { dispatch( toastNotification( @@ -82,7 +82,7 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { }); } if (ind === 2) { - //save to local + // save to local _saveImage(selectedImage); } @@ -91,7 +91,7 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { const handleLinkPress = (ind) => { if (ind === 1) { - //open link + // open link if (selectedLink) { Linking.canOpenURL(selectedLink).then((supported) => { if (supported) { @@ -109,7 +109,7 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { } } if (ind === 0) { - //copy to clipboard + // copy to clipboard writeToClipboard(selectedLink).then(() => { dispatch( toastNotification( @@ -141,7 +141,7 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { const _handleOnPostPress = (permlink, author) => { if (permlink) { - //snippets checks if there is anchored post inside permlink and use that instead + // snippets checks if there is anchored post inside permlink and use that instead const anchoredPostRegex = /(.*?\#\@)(.*)\/(.*)/; const matchedLink = permlink.match(anchoredPostRegex); if (matchedLink) { @@ -149,7 +149,7 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { permlink = matchedLink[3]; } - //check if permlink has trailing query param, remove that if is the case + // check if permlink has trailing query param, remove that if is the case const queryIndex = permlink.lastIndexOf('?'); if (queryIndex > -1) { permlink = permlink.substring(0, queryIndex); @@ -197,7 +197,7 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { }) .fetch('GET', uri) .then((res) => { - let status = res.info().status; + const { status } = res.info(); if (status == 200) { return res.path(); @@ -325,7 +325,7 @@ const PostBody = ({ body, dispatch, onLoadEnd, width }) => { { - if(!tnode){ - return null; - } +export const parseLinkData = (tnode: TNode): LinkData => { + if (!tnode) { + return null; + } - if(tnode.classes.includes('markdown-external-link')){ - - //inline external links can contain video links, for such tags and video id or url is contained as - //attribute if that is the case, use in app video modal to play content - //for now, only youtube id is supported - const youtubeId = tnode.attributes['data-youtube'] - const startTime= tnode.attributes['data-start-time']; - if(youtubeId){ - - return { - type:'markdown-video-link-youtube', - youtubeId:youtubeId, - startTime:parseInt(startTime) || 0, - } - } - //TOOD: support other video link later - - //use default markdown-external-link with url; + if (tnode.classes.includes('markdown-external-link')) { + // inline external links can contain video links, for such tags and video id or url is contained as + // attribute if that is the case, use in app video modal to play content + // for now, only youtube id is supported + const youtubeId = tnode.attributes['data-youtube']; + const startTime = tnode.attributes['data-start-time']; + if (youtubeId) { return { - type:'markdown-external-link', - href: tnode.attributes['data-href'] - } + type: 'markdown-video-link-youtube', + youtubeId, + startTime: parseInt(startTime) || 0, + }; } + // TOOD: support other video link later + // use default markdown-external-link with url; + return { + type: 'markdown-external-link', + href: tnode.attributes['data-href'], + }; + } - if (tnode.classes.includes('markdown-author-link')) { - var author = tnode.attributes['data-author']; - return { - type: 'markdown-author-link', - author: author - }; - } - + if (tnode.classes.includes('markdown-author-link')) { + const author = tnode.attributes['data-author']; + return { + type: 'markdown-author-link', + author, + }; + } if (tnode.classes.includes('markdown-post-link')) { - var author = tnode.attributes['data-author']; - var permlink = tnode.attributes['data-permlink']; + let author = tnode.attributes['data-author']; + let permlink = tnode.attributes['data-permlink']; - //snippets checks if there is anchored post inside permlink and use that instead + // snippets checks if there is anchored post inside permlink and use that instead const anchoredPostRegex = /(.*?\#\@)(.*)\/(.*)/; const matchedLink = permlink.match(anchoredPostRegex); - if(matchedLink){ + if (matchedLink) { author = matchedLink[2]; permlink = matchedLink[3]; } - //check if permlink has trailing query param, remove that if is the case + // check if permlink has trailing query param, remove that if is the case const queryIndex = permlink.lastIndexOf('?'); - if(queryIndex > -1){ - permlink = permlink.substring(0, queryIndex) + if (queryIndex > -1) { + permlink = permlink.substring(0, queryIndex); } return { type: 'markdown-post-link', - author: author, - permlink: permlink + author, + permlink, }; } - if (tnode.classes.includes('markdown-tag-link')) { - var tag = tnode.attributes['data-tag']; - var filter = tnode.attributes['data-filter']; + const tag = tnode.attributes['data-tag']; + const filter = tnode.attributes['data-filter']; return { type: 'markdown-tag-link', - tag: tag, - filter: filter, + tag, + filter, }; } - if (tnode.classes.includes('markdown-witnesses-link')) { - return { - type: 'markdown-witnesses-link', - href: tnode.attributes['data-href'] - }; - - } - - - if (tnode.classes.includes('markdown-proposal-link')) { - var proposal = tnode.attributes['data-proposal']; return { - type: 'markdown-proposal-link', - proposal: proposal, + type: 'markdown-witnesses-link', href: tnode.attributes['data-href'], }; - } - if(tnode.classes.includes('markdown-community-link')){ + if (tnode.classes.includes('markdown-proposal-link')) { + const proposal = tnode.attributes['data-proposal']; + return { + type: 'markdown-proposal-link', + proposal, + href: tnode.attributes['data-href'], + }; + } + + if (tnode.classes.includes('markdown-community-link')) { return { type: 'markdown-community-link', community: tnode.attributes['data-community'], filter: tnode.attributes['data-filter'], - } + }; } if (tnode.classes.includes('markdown-video-link-youtube')) { - var youtubeId = tnode.attributes['data-youtube']; - const startTime= tnode.attributes['data-start-time']; + const youtubeId = tnode.attributes['data-youtube']; + const startTime = tnode.attributes['data-start-time']; if (youtubeId) { return { type: 'markdown-video-link-youtube', - youtubeId : youtubeId, - startTime : parseInt(startTime) || 0, + youtubeId, + startTime: parseInt(startTime) || 0, }; } } - if (tnode.classes.includes('markdown-video-link')) { - var videoHref = tnode.attributes['data-embed-src'] || tnode.attributes['data-video-href'] || tnode.children[0].attributes['src']; + const videoHref = + tnode.attributes['data-embed-src'] || + tnode.attributes['data-video-href'] || + tnode.children[0].attributes.src; if (videoHref) { return { type: 'markdown-video-link', - videoHref: videoHref + videoHref, }; } } -} - +}; diff --git a/src/components/postHtmlRenderer/postHtmlRenderer.tsx b/src/components/postHtmlRenderer/postHtmlRenderer.tsx index d70ee2388..39e972fe6 100644 --- a/src/components/postHtmlRenderer/postHtmlRenderer.tsx +++ b/src/components/postHtmlRenderer/postHtmlRenderer.tsx @@ -1,21 +1,21 @@ import React, { memo, useMemo, useRef } from 'react'; import RenderHTML, { CustomRendererProps, Element, TNode } from 'react-native-render-html'; import { useHtmlIframeProps, iframeModel } from '@native-html/iframe-plugin'; +import WebView from 'react-native-webview'; +import { ScrollView } from 'react-native-gesture-handler'; +// import { prependChild, removeElement } from 'htmlparser2/node_modules/domutils'; import styles from './postHtmlRendererStyles'; import { LinkData, parseLinkData } from './linkDataParser'; import VideoThumb from './videoThumb'; import { AutoHeightImage } from '../autoHeightImage/autoHeightImage'; -import WebView from 'react-native-webview'; import { VideoPlayer } from '..'; -import { ScrollView } from 'react-native-gesture-handler'; -import { prependChild, removeElement } from 'htmlparser2/node_modules/domutils'; interface PostHtmlRendererProps { contentWidth: number; body: string; isComment?: boolean; onLoaded?: () => void; - setSelectedImage: (imgUrl: string, postImageUrls:string[]) => void; + setSelectedImage: (imgUrl: string, postImageUrls: string[]) => void; setSelectedLink: (url: string) => void; handleOnPostPress: (permlink: string, authro: string) => void; handleOnUserPress: (username: string) => void; @@ -38,10 +38,9 @@ export const PostHtmlRenderer = memo( handleVideoPress, handleYoutubePress, }: PostHtmlRendererProps) => { - const postImgUrlsRef = useRef([]); - //new renderer functions + // new renderer functions body = body.replace(/

/g, '
').replace(/<\/center>/g, '
'); console.log('Comment body:', body); @@ -100,7 +99,7 @@ export const PostHtmlRenderer = memo( break; - //unused cases + // unused cases case 'markdown-witnesses-link': setSelectedLink(href); break; @@ -110,7 +109,7 @@ export const PostHtmlRenderer = memo( break; case 'markdown-community-link': - //tag press also handles community by default + // tag press also handles community by default if (handleTagPress) { handleTagPress(community, filter); } @@ -122,36 +121,36 @@ export const PostHtmlRenderer = memo( } catch (error) {} }; - //this method checks if image is a child of table column - //and calculates img width accordingly, - //returns full width if img is not part of table + // this method checks if image is a child of table column + // and calculates img width accordingly, + // returns full width if img is not part of table const getMaxImageWidth = (tnode: TNode) => { - //return full width if not parent exist + // return full width if not parent exist if (!tnode.parent || tnode.parent.tagName === 'body') { return contentWidth; } - //return divided width based on number td tags + // return divided width based on number td tags if (tnode.parent.tagName === 'td' || tnode.parent.tagName === 'th') { const cols = tnode.parent.parent.children.length; return contentWidth / cols; } - //check next parent + // check next parent return getMaxImageWidth(tnode.parent); }; - //Does some needed dom modifications for proper rendering + // Does some needed dom modifications for proper rendering const _onElement = (element: Element) => { if (element.tagName === 'img' && element.attribs.src) { const imgUrl = element.attribs.src; console.log('img element detected', imgUrl); - if(!postImgUrlsRef.current.includes(imgUrl)){ - postImgUrlsRef.current.push(imgUrl) + if (!postImgUrlsRef.current.includes(imgUrl)) { + postImgUrlsRef.current.push(imgUrl); } } - //this avoids invalid rendering of first element of table pushing rest of columsn to extreme right. + // this avoids invalid rendering of first element of table pushing rest of columsn to extreme right. if (element.tagName === 'table') { console.log('table detected'); @@ -161,7 +160,7 @@ export const PostHtmlRenderer = memo( let colIndex = -1; child.children.forEach((gChild, index) => { - //check if element of row in table is not a column while it's other siblings are columns + // check if element of row in table is not a column while it's other siblings are columns if (gChild.type === 'tag') { if (gChild.name !== 'td' && headerIndex === -1) { headerIndex = index; @@ -171,15 +170,16 @@ export const PostHtmlRenderer = memo( } }); - //if row contans a header with column siblings - //remove first child and place it as first separate row in table + // if row contans a header with column siblings + // remove first child and place it as first separate row in table if (headerIndex !== -1 && colIndex !== -1 && headerIndex < colIndex) { console.log('time to do some switching', headerIndex, colIndex); const header = child.children[headerIndex]; const headerRow = new Element('tr', {}, [header]); - removeElement(header); - prependChild(element, headerRow); + // TODO: put back repalcement for domutils + // removeElement(header); + // prependChild(element, headerRow); } } }); @@ -194,11 +194,11 @@ export const PostHtmlRenderer = memo( _handleOnLinkPress(data); }; - //process video link + // process video link if (tnode.classes?.indexOf('markdown-video-link') >= 0) { if (isComment) { const imgElement = tnode.children.find((child) => { - return child.classes.indexOf('video-thumbnail') > 0 ? true : false; + return child.classes.indexOf('video-thumbnail') > 0; }); if (!imgElement) { return ; @@ -270,7 +270,7 @@ export const PostHtmlRenderer = memo( return ; }; - //based on number of columns a table have, sets scroll enabled or disable, also adjust table full width + // based on number of columns a table have, sets scroll enabled or disable, also adjust table full width const _tableRenderer = ({ InternalRenderer, ...props }: CustomRendererProps) => { // const tableProps = useHtmlTableProps(props); @@ -291,7 +291,6 @@ export const PostHtmlRenderer = memo( ); }; - // iframe renderer for rendering iframes in body const _iframeRenderer = function IframeRenderer(props) { const iframeProps = useHtmlIframeProps(props); @@ -314,10 +313,10 @@ export const PostHtmlRenderer = memo( a: styles.a, img: styles.img, table: styles.table, - tr: { ...styles.tr, width: contentWidth }, //center tag causes tr to have 0 width if not exclusivly set, contentWidth help avoid that + tr: { ...styles.tr, width: contentWidth }, // center tag causes tr to have 0 width if not exclusivly set, contentWidth help avoid that th: { ...styles.th, minWidth: _minTableColWidth }, td: { ...styles.td, minWidth: _minTableColWidth }, - div: { ...styles.div, maxWidth: contentWidth }, //makes sure width covers the available horizontal space for view and not exceed the contentWidth if parent bound id not defined + div: { ...styles.div, maxWidth: contentWidth }, // makes sure width covers the available horizontal space for view and not exceed the contentWidth if parent bound id not defined blockquote: styles.blockquote, code: styles.code, li: styles.li, @@ -339,14 +338,13 @@ export const PostHtmlRenderer = memo( ); const renderers = useMemo( - () => - ({ - img: _imageRenderer, - a: _anchorRenderer, - p: _paraRenderer, - iframe: _iframeRenderer, - table: _tableRenderer, - } as any), + () => ({ + img: _imageRenderer, + a: _anchorRenderer, + p: _paraRenderer, + iframe: _iframeRenderer, + table: _tableRenderer, + }), [], ); diff --git a/src/components/postHtmlRenderer/postHtmlRendererStyles.ts b/src/components/postHtmlRenderer/postHtmlRendererStyles.ts index 0a6385c89..f83e8897e 100644 --- a/src/components/postHtmlRenderer/postHtmlRendererStyles.ts +++ b/src/components/postHtmlRenderer/postHtmlRendererStyles.ts @@ -1,5 +1,5 @@ -import { ImageStyle, Platform } from 'react-native'; -import { ViewStyle, TextStyle } from 'react-native'; +import { ImageStyle, Platform, ViewStyle, TextStyle } from 'react-native'; + import EStyleSheet from 'react-native-extended-stylesheet'; export default EStyleSheet.create({ @@ -13,82 +13,82 @@ export default EStyleSheet.create({ color: '$primaryBlack', } as TextStyle, div: { - width:'100%', - }, - p:{ - marginTop:6, - marginBottom:6, - flexDirection:'row', - alignItems:'center', - flexWrap:'wrap' - } as TextStyle, - h6:{ - fontSize:14, - } as TextStyle, - pLi:{ - marginTop:0, - marginBottom:0 - } as TextStyle, - a:{ - color: '$primaryBlue' - } as TextStyle, - img:{ width: '100%', - alignSelf:'center', - marginTop:4, - marginBottom:4, - backgroundColor:'red' + }, + p: { + marginTop: 6, + marginBottom: 6, + flexDirection: 'row', + alignItems: 'center', + flexWrap: 'wrap', + } as TextStyle, + h6: { + fontSize: 14, + } as TextStyle, + pLi: { + marginTop: 0, + marginBottom: 0, + } as TextStyle, + a: { + color: '$primaryBlue', + } as TextStyle, + img: { + width: '100%', + alignSelf: 'center', + marginTop: 4, + marginBottom: 4, + backgroundColor: 'red', } as ImageStyle, - th:{ + th: { flex: 1, justifyContent: 'center', - alignItems:'center', + alignItems: 'center', fontWeight: 'bold', color: '$primaryBlack', - backgroundColor:'$darkIconColor', + backgroundColor: '$darkIconColor', fontSize: 14, padding: 10, } as TextStyle, - tr:{ - flexDirection:'row', + tr: { + flexDirection: 'row', } as ViewStyle, - td:{ - flex:1, + td: { + flex: 1, borderWidth: 0.5, - padding:10, + padding: 10, borderColor: '$tableBorderColor', backgroundColor: '$tableTrColor', - alignItems:'center', - justifyContent:'center', + alignItems: 'center', + justifyContent: 'center', } as ViewStyle, - table:{ - width: '100%', + table: { + width: '100%', } as ViewStyle, - li:{ - marginBottom:12 + li: { + marginBottom: 12, } as ViewStyle, blockquote: { borderLeftWidth: 5, - borderStyle:'solid', - marginLeft:5, - paddingLeft:5, + borderStyle: 'solid', + marginLeft: 5, + paddingLeft: 5, borderColor: '$darkIconColor', } as ViewStyle, - code:{ - backgroundColor:'$darkIconColor', - fontFamily:'$editorFont', + code: { + backgroundColor: '$darkIconColor', + fontFamily: '$editorFont', } as TextStyle, textCenter: { textAlign: 'center', alignItems: 'center', justifyContent: 'center', } as TextStyle, - phishy:{ - color:'$primaryRed', + phishy: { + color: '$primaryRed', } as TextStyle, - textJustify:{ - textAlign: Platform.select({ios:'justify', android:'auto'}), //justify with selectable on android causes ends of text getting clipped, - letterSpacing:0 + textJustify: { + textAlign: Platform.select({ ios: 'justify', android: 'auto' }), //justify with selectable on android causes ends of text getting clipped, + letterSpacing: 0, } as TextStyle, revealButton: { backgroundColor: '$iconColor', @@ -103,20 +103,18 @@ export default EStyleSheet.create({ color: '$white', fontSize: 14, }, - videoThumb:{ - width:'100%', - alignItems:'center', - justifyContent:'center', - backgroundColor:'$darkIconColor' + videoThumb: { + width: '100%', + alignItems: 'center', + justifyContent: 'center', + backgroundColor: '$darkIconColor', }, - playButton:{ - alignItems:'center', - justifyContent:'center', + playButton: { + alignItems: 'center', + justifyContent: 'center', width: 60, height: 60, borderRadius: 30, - backgroundColor:'$primaryBlack' - } as ViewStyle + backgroundColor: '$primaryBlack', + } as ViewStyle, }); - - diff --git a/src/components/postHtmlRenderer/videoThumb.tsx b/src/components/postHtmlRenderer/videoThumb.tsx index 31e398e13..952c213ce 100644 --- a/src/components/postHtmlRenderer/videoThumb.tsx +++ b/src/components/postHtmlRenderer/videoThumb.tsx @@ -1,35 +1,36 @@ -import React from 'react' -import { View, Text, ImageBackground } from 'react-native' +import React from 'react'; +import { View, ImageBackground } from 'react-native'; import EStyleSheet from 'react-native-extended-stylesheet'; -import { TouchableHighlight, TouchableOpacity } from 'react-native-gesture-handler'; +import { TouchableHighlight } from 'react-native-gesture-handler'; import { IconButton } from '..'; -import styles from "./postHtmlRendererStyles"; +import styles from './postHtmlRendererStyles'; interface Props { - contentWidth:number, - uri?:string; - onPress?:()=>void; + contentWidth: number; + uri?: string; + onPress?: () => void; } -const VideoThumb = ({contentWidth, uri, onPress}: Props) => { - return ( - - - - - - - - ) -} +const VideoThumb = ({ contentWidth, uri, onPress }: Props) => { + return ( + + + + + + + + ); +}; -export default VideoThumb +export default VideoThumb; diff --git a/src/components/postView/view/postDisplayView.tsx b/src/components/postView/view/postDisplayView.tsx index 79574a497..54013aa26 100644 --- a/src/components/postView/view/postDisplayView.tsx +++ b/src/components/postView/view/postDisplayView.tsx @@ -68,10 +68,10 @@ const PostDisplayView = ({ // Component Life Cycles useEffect(() => { if (isLoggedIn && get(currentAccount, 'name') && !isNewPost) { - //track user activity for view post + // track user activity for view post userActivityMutation.mutate({ - pointsTy:PointActivityIds.VIEW_POST - }) + pointsTy: PointActivityIds.VIEW_POST, + }); } }, []); @@ -140,6 +140,7 @@ const PostDisplayView = ({ content={post} handleCacheVoteIncrement={_handleCacheVoteIncrement} parentType={parentPost ? postTypes.COMMENT : postTypes.POST} + boldPayout={true} /> { - const appState = useRef(AppState.currentState); - const dispatch = useDispatch(); const intl = useIntl(); let _postFetchTimer = null; + const appState = useRef(AppState.currentState); + const appStateSubRef = useRef(null); + const nsfw = useSelector((state) => state.application.nsfw); const initPosts = useSelector((state) => state.posts.initPosts); const isConnected = useSelector((state) => state.application.isConnected); @@ -110,7 +111,7 @@ const PostsContainer = ({ return; } - //schedules refresh 30 minutes after last post creation time + // schedules refresh 30 minutes after last post creation time const currentTime = new Date().getTime(); const createdAt = new Date(get(firstPost, 'created')).getTime(); @@ -165,7 +166,7 @@ const PostsContainer = ({ switch (action.type) { case 'is-filter-loading': { - const filter = action.payload.filter; + const { filter } = action.payload; const loading = action.payload.isLoading; state.cachedData[filter].isLoading = loading; @@ -173,9 +174,9 @@ const PostsContainer = ({ } case 'update-filter-cache': { - const filter = action.payload.filter; + const { filter } = action.payload; const nextPosts = action.payload.posts; - const shouldReset = action.payload.shouldReset; + const { shouldReset } = action.payload; let _posts = nextPosts; const cachedEntry = state.cachedData[filter]; @@ -192,9 +193,9 @@ const PostsContainer = ({ _posts = unionBy(prevPosts, _posts, 'permlink'); } } - //cache latest posts for main tab for returning user + // cache latest posts for main tab for returning user else if (isFeedScreen) { - //schedule refetch of new posts by checking time of current post + // schedule refetch of new posts by checking time of current post _scheduleLatestPostsCheck(nextPosts[0]); if (filter == (get(currentAccount, 'name', null) == null ? 'hot' : 'friends')) { @@ -202,14 +203,14 @@ const PostsContainer = ({ } } - //update stat + // update stat cachedEntry.startAuthor = _posts[_posts.length - 1] && _posts[_posts.length - 1].author; cachedEntry.startPermlink = _posts[_posts.length - 1] && _posts[_posts.length - 1].permlink; cachedEntry.posts = _posts; state.cachedData[filter] = cachedEntry; - //dispatch to redux + // dispatch to redux if ( filter === (state.currentFilter !== 'feed' ? state.currentFilter : state.currentSubFilter) ) { @@ -230,7 +231,7 @@ const PostsContainer = ({ state.cachedData[filter] = cachedEntry; - //dispatch to redux + // dispatch to redux _setFeedPosts([]); return state; @@ -255,7 +256,7 @@ const PostsContainer = ({ const filter = action.payload.currentSubFilter; state.currentSubFilter = filter; - //dispatch to redux; + // dispatch to redux; const data = state.cachedData[filter]; _setFeedPosts(data.posts, data.scrollPosition); if (isFeedScreen) { @@ -277,7 +278,7 @@ const PostsContainer = ({ } case 'reset-cache': { - //dispatch to redux + // dispatch to redux _setFeedPosts([]); _setInitPosts([]); @@ -295,8 +296,9 @@ const PostsContainer = ({ const isMountedRef = useIsMountedRef(); useEffect(() => { + let appStateSub; if (isFeedScreen) { - AppState.addEventListener('change', _handleAppStateChange); + appStateSub = AppState.addEventListener('change', _handleAppStateChange); _setFeedPosts(initPosts || []); } else { _setFeedPosts([]); @@ -306,8 +308,8 @@ const PostsContainer = ({ if (_postFetchTimer) { clearTimeout(_postFetchTimer); } - if (isFeedScreen) { - AppState.removeEventListener('change', _handleAppStateChange); + if (isFeedScreen && appStateSub) { + appStateSub.remove(); } }; }, []); @@ -364,7 +366,7 @@ const PostsContainer = ({ ]); useEffect(() => { - let filter = selectedFilterValue == 'feed' ? selectedFeedSubfilterValue : selectedFilterValue; + const filter = selectedFilterValue == 'feed' ? selectedFeedSubfilterValue : selectedFilterValue; const sAuthor = cache.cachedData[filter].startAuthor; const sPermlink = cache.cachedData[filter].startPermlink; @@ -405,7 +407,7 @@ const PostsContainer = ({ useEffect(() => { const recommendeds = [...recommendedUsers]; - Object.keys(followingUsers).map((following) => { + Object.keys(followingUsers).forEach((following) => { if (!followingUsers[following].loading) { if (!followingUsers[following].error) { if (followingUsers[following].isFollowing) { @@ -431,7 +433,7 @@ const PostsContainer = ({ useEffect(() => { const recommendeds = [...recommendedCommunities]; - Object.keys(subscribingCommunities).map((communityId) => { + Object.keys(subscribingCommunities).forEach((communityId) => { if (!subscribingCommunities[communityId].loading) { if (!subscribingCommunities[communityId].error) { if (subscribingCommunities[communityId].isSubscribed) { @@ -492,7 +494,7 @@ const PostsContainer = ({ }; const _matchFreshPosts = async (posts, reducerFilter) => { - let cachedPosts = cache.cachedData[reducerFilter].posts.slice(0, 5); + const cachedPosts = cache.cachedData[reducerFilter].posts.slice(0, 5); let newPosts = []; posts.forEach((post, index) => { @@ -605,7 +607,7 @@ const PostsContainer = ({ if (isMountedRef.current) { if (result.length > 0) { - let _posts = result; + const _posts = result; if (filter === 'reblogs') { for (let i = _posts.length - 1; i >= 0; i--) { @@ -784,7 +786,7 @@ const PostsContainer = ({ handleOnScroll(); } - //memorize filter position + // memorize filter position const scrollPosition = event.nativeEvent.contentOffset.y; cacheDispatch({ type: 'scroll-position-change', @@ -798,7 +800,7 @@ const PostsContainer = ({ setNewPostsPopupPictures(data); const cacheFilter = cache.currentFilter !== 'feed' ? cache.currentFilter : cache.currentSubFilter; - const posts = cache.cachedData[cacheFilter].posts; + const { posts } = cache.cachedData[cacheFilter]; if (posts.length > 0) { _scheduleLatestPostsCheck(posts[0]); } diff --git a/src/components/posts/view/postsView.js b/src/components/posts/view/postsView.js index f82843913..6f1434a62 100644 --- a/src/components/posts/view/postsView.js +++ b/src/components/posts/view/postsView.js @@ -168,7 +168,7 @@ const PostsView = ({ ? intl.formatMessage({ id: 'user.unfollow' }) : intl.formatMessage({ id: 'user.follow' }) } - //isRightColor={item.isFollowing} + // isRightColor={item.isFollowing} isLoggedIn={isLoggedIn} isFollowing={item.isFollowing} isLoadingRightAction={ @@ -292,7 +292,7 @@ const PostsView = ({ _onEndReachedCalledDuringMomentum = false; }} removeClippedSubviews - //TODO: we can avoid 2 more rerenders by carefully moving these call to postsListContainer + // TODO: we can avoid 2 more rerenders by carefully moving these call to postsListContainer refreshing={refreshing} onRefresh={handleOnRefreshPosts} onEndReachedThreshold={1} diff --git a/src/components/postsList/container/postsListContainer.tsx b/src/components/postsList/container/postsListContainer.tsx index 371bff615..834630818 100644 --- a/src/components/postsList/container/postsListContainer.tsx +++ b/src/components/postsList/container/postsListContainer.tsx @@ -1,28 +1,28 @@ -import React, {forwardRef, memo, useRef, useImperativeHandle, useState, useEffect} from 'react' -import PostCard from '../../postCard'; +import React, { forwardRef, memo, useRef, useImperativeHandle, useState, useEffect } from 'react'; import { get } from 'lodash'; import { FlatListProps, FlatList, RefreshControl, ActivityIndicator, View } from 'react-native'; import { useSelector } from 'react-redux'; -import { ThemeContainer } from '../../../containers'; +import PostCard from '../../postCard'; import styles from '../view/postsListStyles'; export interface PostsListRef { - scrollToTop:()=>void + scrollToTop: () => void; } interface postsListContainerProps extends FlatListProps { - promotedPosts:Array; - isFeedScreen:boolean; - onLoadPosts?:(shouldReset:boolean)=>void; - isLoading:boolean; - isRefreshing:boolean; - pageType:'main'|'profile'|'ownProfile'|'community'; - showQuickReplyModal:(post:any)=>void; + promotedPosts: Array; + isFeedScreen: boolean; + onLoadPosts?: (shouldReset: boolean) => void; + isLoading: boolean; + isRefreshing: boolean; + pageType: 'main' | 'profile' | 'ownProfile' | 'community'; + showQuickReplyModal: (post: any) => void; } let _onEndReachedCalledDuringMomentum = true; -const postsListContainer = ({ +const postsListContainer = ( + { promotedPosts, isFeedScreen, onLoadPosts, @@ -31,65 +31,59 @@ const postsListContainer = ({ pageType, showQuickReplyModal, ...props -}:postsListContainerProps, ref) => { - - const flatListRef = useRef(null); + }: postsListContainerProps, + ref, +) => { + const flatListRef = useRef(null); - const [imageHeights, setImageHeights] = useState(new Map()); + const [imageHeights, setImageHeights] = useState(new Map()); - const isHideImages = useSelector((state) => state.application.hidePostsThumbnails); - const posts = useSelector((state) => { - return isFeedScreen - ? state.posts.feedPosts - : state.posts.otherPosts - }); - const mutes = useSelector((state) => state.account.currentAccount.mutes); - - const scrollPosition = useSelector((state) => { - return isFeedScreen - ? state.posts.feedScrollPosition - : state.posts.otherScrollPosition + const isHideImages = useSelector((state) => state.application.hidePostsThumbnails); + const isDarkTheme = useSelector((state) => state.application.isDarkThem); + const posts = useSelector((state) => { + return isFeedScreen ? state.posts.feedPosts : state.posts.otherPosts; + }); + const mutes = useSelector((state) => state.account.currentAccount.mutes); + + const scrollPosition = useSelector((state) => { + return isFeedScreen ? state.posts.feedScrollPosition : state.posts.otherScrollPosition; }); - useImperativeHandle(ref, () => ({ - scrollToTop() { - flatListRef.current?.scrollToOffset({ x: 0, y: 0, animated: true }); - }, - })); + useImperativeHandle(ref, () => ({ + scrollToTop() { + flatListRef.current?.scrollToOffset({ x: 0, y: 0, animated: true }); + }, + })); - useEffect(() => { - console.log("Scroll Position: ", scrollPosition) - if(posts && posts.length == 0){ - flatListRef.current?.scrollToOffset({ - offset: 0, - animated: false - }); - } - - }, [posts]) - - useEffect(() => { - console.log("Scroll Position: ", scrollPosition) + useEffect(() => { + console.log('Scroll Position: ', scrollPosition); + if (posts && posts.length == 0) { flatListRef.current?.scrollToOffset({ - offset: (posts && posts.length == 0) ? 0 : scrollPosition, - animated: false + offset: 0, + animated: false, }); - - }, [scrollPosition]) - - const _setImageHeightInMap = (mapKey:string, height:number) => { - if(mapKey && height){ - setImageHeights(imageHeights.set(mapKey, height)); - } } + }, [posts]); + useEffect(() => { + console.log('Scroll Position: ', scrollPosition); + flatListRef.current?.scrollToOffset({ + offset: posts && posts.length == 0 ? 0 : scrollPosition, + animated: false, + }); + }, [scrollPosition]); + const _setImageHeightInMap = (mapKey: string, height: number) => { + if (mapKey && height) { + setImageHeights(imageHeights.set(mapKey, height)); + } + }; const _renderFooter = () => { if (isLoading && !isRefreshing) { return ( - + ); } @@ -104,96 +98,99 @@ const postsListContainer = ({ } }; + const _renderItem = ({ item, index }: { item: any; index: number }) => { + const e = []; - const _renderItem = ({ item, index }:{item:any, index:number}) => { - const e = [] as any; - - if (index % 3 === 0) { - const ix = index / 3 - 1; - if (promotedPosts[ix] !== undefined) { - const p = promotedPosts[ix]; - let isMuted = mutes && mutes.indexOf(p.author) > -1; + if (index % 3 === 0) { + const ix = index / 3 - 1; + if (promotedPosts[ix] !== undefined) { + const p = promotedPosts[ix]; + const isMuted = mutes && mutes.indexOf(p.author) > -1; - if (!isMuted && get(p, 'author', null) && posts && posts.filter((x) => x.permlink === p.permlink).length <= 0) { - - //get image height from cache if available - const localId = p.author + p.permlink; - const imgHeight = imageHeights.get(localId); - - e.push( - - ); - } - } - } - - let isMuted = mutes && mutes.indexOf(item.author) > -1; - if (!isMuted && get(item, 'author', null)) { - //get image height from cache if available - const localId = item.author + item.permlink; - const imgHeight = imageHeights.get(localId) + if ( + !isMuted && + get(p, 'author', null) && + posts && + posts.filter((x) => x.permlink === p.permlink).length <= 0 + ) { + // get image height from cache if available + const localId = p.author + p.permlink; + const imgHeight = imageHeights.get(localId); e.push( , ); } - return e; - }; - - return ( - - {({ isDarkTheme }) => ( - `${content.author}/${content.permlink}-${index}`} - removeClippedSubviews - onEndReachedThreshold={1} - maxToRenderPerBatch={3} - initialNumToRender={3} - windowSize={5} - extraData={imageHeights} - onEndReached={_onEndReached} - onMomentumScrollBegin={() => { - _onEndReachedCalledDuringMomentum = false; - }} - ListFooterComponent={_renderFooter} - refreshControl={ - {if(onLoadPosts){onLoadPosts(true)}}} - progressBackgroundColor="#357CE6" - tintColor={!isDarkTheme ? '#357ce6' : '#96c0ff'} - titleColor="#fff" - colors={['#fff']} - /> - } - {...props} - /> - )} - - ) -} + } + } + const isMuted = mutes && mutes.indexOf(item.author) > -1; + if (!isMuted && get(item, 'author', null)) { + // get image height from cache if available + const localId = item.author + item.permlink; + const imgHeight = imageHeights.get(localId); + + e.push( + , + ); + } + + return e; + }; + + return ( + `${content.author}/${content.permlink}-${index}`} + removeClippedSubviews + onEndReachedThreshold={1} + maxToRenderPerBatch={3} + initialNumToRender={3} + windowSize={5} + extraData={imageHeights} + onEndReached={_onEndReached} + onMomentumScrollBegin={() => { + _onEndReachedCalledDuringMomentum = false; + }} + ListFooterComponent={_renderFooter} + refreshControl={ + { + if (onLoadPosts) { + onLoadPosts(true); + } + }} + progressBackgroundColor="#357CE6" + tintColor={!isDarkTheme ? '#357ce6' : '#96c0ff'} + titleColor="#fff" + colors={['#fff']} + /> + } + {...props} + /> + ); +}; export default forwardRef(postsListContainer); diff --git a/src/components/postsList/view/postsListStyles.tsx b/src/components/postsList/view/postsListStyles.tsx index 1bf9fd71f..c5aa6fd5c 100644 --- a/src/components/postsList/view/postsListStyles.tsx +++ b/src/components/postsList/view/postsListStyles.tsx @@ -1,14 +1,14 @@ import EStyleSheet from 'react-native-extended-stylesheet'; export default EStyleSheet.create({ - flatlistFooter: { - alignContent: 'center', - alignItems: 'center', - marginTop: 10, - marginBottom: 60, - borderColor: '$borderColor', - }, - placeholderWrapper: { - flex: 1, - }, -}) \ No newline at end of file + flatlistFooter: { + alignContent: 'center', + alignItems: 'center', + marginTop: 10, + marginBottom: 60, + borderColor: '$borderColor', + }, + placeholderWrapper: { + flex: 1, + }, +}); diff --git a/src/components/postsList/view/postsListView.tsx b/src/components/postsList/view/postsListView.tsx index b34e86a15..eb3d65074 100644 --- a/src/components/postsList/view/postsListView.tsx +++ b/src/components/postsList/view/postsListView.tsx @@ -1,12 +1,9 @@ -import React, { useRef } from 'react' -import { View } from 'react-native' - +import React from 'react'; +import { View } from 'react-native'; const postsListView = () => { - //will posts stuff here when finalized on the main container - return - - -} + // will posts stuff here when finalized on the main container + return ; +}; -export default postsListView +export default postsListView; diff --git a/src/components/profile/children/commentsTabContent.tsx b/src/components/profile/children/commentsTabContent.tsx index 3ca52e153..c1e6395ae 100644 --- a/src/components/profile/children/commentsTabContent.tsx +++ b/src/components/profile/children/commentsTabContent.tsx @@ -1,133 +1,130 @@ -import React, {useEffect, useState} from 'react'; +import React, { useEffect, useState } from 'react'; import { useIntl } from 'react-intl'; -import {ActivityIndicator, RefreshControl, View } from 'react-native'; +import { ActivityIndicator, RefreshControl, View } from 'react-native'; +import { unionBy } from 'lodash'; import { Comments, NoPost } from '../..'; import { useAppSelector } from '../../../hooks'; import { getAccountPosts } from '../../../providers/hive/dhive'; import styles from '../profileStyles'; -import {unionBy } from 'lodash'; interface CommentsTabContentProps { - username:string, - type:'comments'|'replies', - isOwnProfile:boolean, - selectedUser:any, - onScroll:()=>void, + username: string; + type: 'comments' | 'replies'; + isOwnProfile: boolean; + selectedUser: any; + onScroll: () => void; } -const CommentsTabContent = ({isOwnProfile, username, type, onScroll, selectedUser }: CommentsTabContentProps) => { +const CommentsTabContent = ({ + isOwnProfile, + username, + type, + onScroll, + selectedUser, +}: CommentsTabContentProps) => { + const intl = useIntl(); - const intl = useIntl(); + const isHideImage = useAppSelector((state) => state.application.hidePostsThumbnails); - const isHideImage = useAppSelector(state => state.application.hidePostsThumbnails); + const [data, setData] = useState([]); + const [lastAuthor, setLastAuthor] = useState(''); + const [lastPermlink, setLastPermlink] = useState(''); + const [loading, setLoading] = useState(false); + const [refreshing, setRefreshing] = useState(false); + const [noMore, setNoMore] = useState(false); - const [data, setData] = useState([]); - const [lastAuthor, setLastAuthor] = useState(''); - const [lastPermlink, setLastPermlink] = useState(''); - const [loading, setLoading] = useState(false); - const [refreshing, setRefreshing] = useState(false); - const [noMore, setNoMore] = useState(false); + useEffect(() => { + if (selectedUser) { + _fetchData(); + } + }, [selectedUser]); - - useEffect(() => { - if(selectedUser){ - _fetchData(); - } - }, [selectedUser]) - - - const _fetchData = async ({refresh}:{refresh?:boolean} = {}) => { - if(loading || (!refresh && noMore)){ - return; - } - - setLoading(true); - if(refresh){ - setRefreshing(true); - } - - const query:any = { - account:username, - start_author: refresh ? '' : lastAuthor, - start_permlink: refresh ? '' : lastPermlink, - limit:10, - observer:'', - sort:type - }; - - const result = await getAccountPosts(query) - let _comments:any[] = refresh ? result : unionBy(data, result, 'permlink'); - - if(Array.isArray(_comments)){ - setData(_comments); - if(_comments.length > 0){ - setLastAuthor(_comments[_comments.lastIndex].author) - setLastPermlink(_comments[_comments.lastIndex].permlink) - } - if(result.length == 0){ - setNoMore(true); - } - }else{ - setData([]); - setNoMore(true); - } - - setLoading(false); - setRefreshing(false); - + const _fetchData = async ({ refresh }: { refresh?: boolean } = {}) => { + if (loading || (!refresh && noMore)) { + return; } - const _renderListEmpty = () => { - if(loading){ - return null - } - return ( - - ) + setLoading(true); + if (refresh) { + setRefreshing(true); } - const _renderListFooter = () => { - return ( - - {loading && ( - - )} - - ) + const query: any = { + account: username, + start_author: refresh ? '' : lastAuthor, + start_permlink: refresh ? '' : lastPermlink, + limit: 10, + observer: '', + sort: type, + }; + + const result = await getAccountPosts(query); + const _comments: any[] = refresh ? result : unionBy(data, result, 'permlink'); + + if (Array.isArray(_comments)) { + setData(_comments); + if (_comments.length > 0) { + setLastAuthor(_comments[_comments.lastIndex].author); + setLastPermlink(_comments[_comments.lastIndex].permlink); + } + if (result.length == 0) { + setNoMore(true); + } + } else { + setData([]); + setNoMore(true); } + setLoading(false); + setRefreshing(false); + }; + const _renderListEmpty = () => { + if (loading) { + return null; + } return ( - - {}} - isOwnProfile={isOwnProfile} - isHideImage={isHideImage} - flatListProps={{ - onEndReached:_fetchData, - onScroll:onScroll, - ListEmptyComponent:_renderListEmpty, - ListFooterComponent:_renderListFooter, - onEndReachedThreshold:1, - refreshControl:( - _fetchData({refresh:true})} - /> - ) - }} - /> - + ); + }; + + const _renderListFooter = () => { + return ( + {loading && } + ); + }; + + return ( + + {}} + isOwnProfile={isOwnProfile} + isHideImage={isHideImage} + flatListProps={{ + onEndReached: _fetchData, + onScroll, + ListEmptyComponent: _renderListEmpty, + ListFooterComponent: _renderListFooter, + onEndReachedThreshold: 1, + refreshControl: ( + _fetchData({ refresh: true })} + /> + ), + }} + /> + + ); }; export default CommentsTabContent; diff --git a/src/components/profile/profileStyles.js b/src/components/profile/profileStyles.js index 15f791761..091f9531c 100644 --- a/src/components/profile/profileStyles.js +++ b/src/components/profile/profileStyles.js @@ -46,7 +46,7 @@ export default EStyleSheet.create({ height: 45, backgroundColor: '$primaryBackgroundColor', borderBottomColor: '#f1f1f1', - //marginTop: 8, + // marginTop: 8, }, tabView: { backgroundColor: '$primaryGrayBackground', diff --git a/src/components/profile/profileView.js b/src/components/profile/profileView.js index 038034552..728264a68 100644 --- a/src/components/profile/profileView.js +++ b/src/components/profile/profileView.js @@ -216,7 +216,7 @@ class ProfileView extends PureComponent { const pageType = isOwnProfile ? 'ownProfile' : 'profile'; const tabs = (isOwnProfile ? ownProfileTabs : profileTabs) || getDefaultFilters(pageType); - //set initial tab based on deep link filter if available + // set initial tab based on deep link filter if available let selectedIndex = 0; if (deepLinkFilter) { selectedIndex = tabs.indexOf(deepLinkFilter); @@ -229,7 +229,7 @@ class ProfileView extends PureComponent { const filterOptions = tabs.map((key) => getFilterMap(pageType)[key]); - //compile content overrides + // compile content overrides const tabContentOverrides = new Map(); tabContentOverrides.set(tabs.indexOf('replies'), this._contentComentsTab('replies')); diff --git a/src/components/profileEditForm/profileEditFormStyles.ts b/src/components/profileEditForm/profileEditFormStyles.ts index ccd3b45b2..a5a07c1c1 100644 --- a/src/components/profileEditForm/profileEditFormStyles.ts +++ b/src/components/profileEditForm/profileEditFormStyles.ts @@ -13,7 +13,7 @@ export default EStyleSheet.create({ marginTop: 8, }, label: { - marginTop:8, + marginTop: 8, fontSize: 14, color: '$primaryDarkText', fontWeight: '500', @@ -67,15 +67,15 @@ export default EStyleSheet.create({ color: '$primaryBlack', alignSelf: 'flex-start', width: '100%', - paddingBottom:10, + paddingBottom: 10, }, contentContainer: { flexGrow: 1, }, - activityIndicator: { - position:'absolute', - alignSelf:'center', - top:0, - bottom:8 - } + activityIndicator: { + position: 'absolute', + alignSelf: 'center', + top: 0, + bottom: 8, + }, }); diff --git a/src/components/profileEditForm/profileEditFormView.tsx b/src/components/profileEditForm/profileEditFormView.tsx index ecf4454d4..00537bb4a 100644 --- a/src/components/profileEditForm/profileEditFormView.tsx +++ b/src/components/profileEditForm/profileEditFormView.tsx @@ -2,9 +2,11 @@ import React from 'react'; import { View, TouchableOpacity, Text, Platform, ActivityIndicator } from 'react-native'; import { View as AnimatedView } from 'react-native-animatable'; import { KeyboardAwareScrollView } from 'react-native-keyboard-aware-scroll-view'; -import { injectIntl } from 'react-intl'; +import { injectIntl, useIntl } from 'react-intl'; // Images +import FastImage from 'react-native-fast-image'; +import EStyleSheet from 'react-native-extended-stylesheet'; import LIGHT_COVER_IMAGE from '../../assets/default_cover_image.png'; import DARK_COVER_IMAGE from '../../assets/dark_cover_image.png'; @@ -17,22 +19,19 @@ import { getResizedImage } from '../../utils/image'; // Styles import styles from './profileEditFormStyles'; -import FastImage from 'react-native-fast-image'; -import EStyleSheet from 'react-native-extended-stylesheet'; import { MainButton } from '../mainButton'; - interface ProfileEditFormProps { - coverUrl:string; - formData:any; - handleOnItemChange:()=>void; - handleOnSubmit:()=>void; - intl:any, - isDarkTheme:boolean, - isLoading:boolean, - isUploading:boolean, - showImageUploadActions:boolean, - saveEnabled:boolean, + coverUrl: string; + formData: any; + handleOnItemChange: () => void; + handleOnSubmit: () => void; + intl: any; + isDarkTheme: boolean; + isLoading: boolean; + isUploading: boolean; + showImageUploadActions: boolean; + saveEnabled: boolean; } const ProfileEditFormView = ({ @@ -40,95 +39,88 @@ const ProfileEditFormView = ({ formData, handleOnItemChange, handleOnSubmit, - intl, isDarkTheme, isLoading, isUploading, showImageUploadActions, saveEnabled, ...props -}:ProfileEditFormProps) => ( +}: ProfileEditFormProps) => { + const intl = useIntl(); - - - - - - - + return ( + + + - { - isUploading && ( - - ) - } - + {isUploading && ( + + )} - - - - {formData.map((item) => ( - - - {intl.formatMessage({ - id: `profile.edit.${item.label}`, - })} - - handleOnItemChange(value, item.valueKey)} - placeholder={item.placeholder} - isEditable - type="none" - value={props[item.valueKey]} - inputStyle={styles.input} + - - ))} - - - {saveEnabled && ( - - - - )} - - - -); + + + {formData.map((item) => ( + + + {intl.formatMessage({ + id: `profile.edit.${item.label}`, + })} + + handleOnItemChange(value, item.valueKey)} + placeholder={item.placeholder} + isEditable + type="none" + value={props[item.valueKey]} + inputStyle={styles.input} + /> + + ))} + + + {saveEnabled && ( + + + + )} + + ); +}; export default injectIntl(ProfileEditFormView); diff --git a/src/components/profileSummary/view/profileSummaryView.js b/src/components/profileSummary/view/profileSummaryView.js index e13076f03..84c84b479 100644 --- a/src/components/profileSummary/view/profileSummaryView.js +++ b/src/components/profileSummary/view/profileSummaryView.js @@ -151,7 +151,7 @@ class ProfileSummaryView extends PureComponent { coverImageUrl = { uri: coverImageUrl }; } - //compile dropdown options + // compile dropdown options dropdownOptions = [ intl.formatMessage({ id: isFavorite ? 'user.remove_from_favourites' : 'user.add_to_favourites', diff --git a/src/components/progressiveImage/index.js b/src/components/progressiveImage/index.js index 46c3a2c27..2a485b83e 100644 --- a/src/components/progressiveImage/index.js +++ b/src/components/progressiveImage/index.js @@ -1,7 +1,7 @@ import React, { useState } from 'react'; import { View, StyleSheet } from 'react-native'; import FastImage from 'react-native-fast-image'; -import Animated, { Easing } from 'react-native-reanimated'; +import Animated, { EasingNode } from 'react-native-reanimated'; const styles = StyleSheet.create({ imageOverlay: { @@ -21,25 +21,25 @@ const styles = StyleSheet.create({ const AnimatedFastImage = Animated.createAnimatedComponent(FastImage); const ProgressiveImage = ({ thumbnailSource, source, style, ...props }) => { - //const [calcImgHeight, setCalcImgHeight] = useState(300); + // const [calcImgHeight, setCalcImgHeight] = useState(300); const thumbnailAnimated = new Animated.Value(0); const imageAnimated = new Animated.Value(0); const handleThumbnailLoad = (e) => { - /*if (e) { + /* if (e) { setCalcImgHeight(Math.floor((e.nativeEvent.height / e.nativeEvent.width) * dim.width)); console.log(e.nativeEvent.width, e.nativeEvent.height); - }*/ + } */ Animated.timing(thumbnailAnimated, { toValue: 1, - easing: Easing.inOut(Easing.ease), + easing: EasingNode.inOut(EasingNode.ease), }).start(); }; const onImageLoad = () => { Animated.timing(imageAnimated, { toValue: 1, - easing: Easing.inOut(Easing.ease), + easing: EasingNode.inOut(EasingNode.ease), }).start(); }; diff --git a/src/components/qrModal/qrModalView.tsx b/src/components/qrModal/qrModalView.tsx index 726c39f22..de51ec580 100644 --- a/src/components/qrModal/qrModalView.tsx +++ b/src/components/qrModal/qrModalView.tsx @@ -2,14 +2,14 @@ import React, { useEffect, useRef, useState } from 'react'; import { ActivityIndicator, Alert, PermissionsAndroid, Platform, Text, View } from 'react-native'; import ActionSheet from 'react-native-actions-sheet'; import EStyleSheet from 'react-native-extended-stylesheet'; +import QRCodeScanner from 'react-native-qrcode-scanner'; +import { useIntl } from 'react-intl'; +import { check, request, PERMISSIONS, RESULTS, openSettings } from 'react-native-permissions'; import styles from './qrModalStyles'; import { useAppDispatch, useAppSelector } from '../../hooks'; import { toggleQRModal } from '../../redux/actions/uiAction'; -import QRCodeScanner from 'react-native-qrcode-scanner'; import { deepLinkParser } from '../../utils/deepLinkParser'; -import { useIntl } from 'react-intl'; import RootNavigation from '../../navigation/rootNavigation'; -import { check, request, PERMISSIONS, RESULTS, openSettings } from 'react-native-permissions'; import getWindowDimensions from '../../utils/getWindowDimensions'; export interface QRModalProps {} @@ -155,7 +155,7 @@ export const QRModal = ({}: QRModalProps) => { /> {isProcessing && ( - + )} diff --git a/src/components/quickReplyModal/quickReplyModalContent.tsx b/src/components/quickReplyModal/quickReplyModalContent.tsx index ca987378d..0bc1dda9f 100644 --- a/src/components/quickReplyModal/quickReplyModalContent.tsx +++ b/src/components/quickReplyModal/quickReplyModalContent.tsx @@ -1,11 +1,13 @@ -import React, { useEffect, useState, useCallback, useRef } from 'react'; +import React, { useEffect, useState, useRef, useImperativeHandle, forwardRef } from 'react'; import EStyleSheet from 'react-native-extended-stylesheet'; -import styles from './quickReplyModalStyles'; import { View, Text, Alert, TouchableOpacity, Keyboard, Platform } from 'react-native'; import { useIntl } from 'react-intl'; -import { IconButton, MainButton, TextButton, TextInput, UserAvatar } from '..'; import { useSelector, useDispatch } from 'react-redux'; -import { delay, generateReplyPermlink, generateRndStr } from '../../utils/editor'; +import { get } from 'lodash'; +import { postBodySummary } from '@ecency/render-helper'; +import styles from './quickReplyModalStyles'; +import { IconButton, MainButton, TextButton, TextInput, UserAvatar } from '..'; +import { delay, generateReplyPermlink } from '../../utils/editor'; import { postComment } from '../../providers/hive/dhive'; import { toastNotification } from '../../redux/actions/uiAction'; import { @@ -14,13 +16,10 @@ import { updateDraftCache, } from '../../redux/actions/cacheActions'; import { default as ROUTES } from '../../constants/routeNames'; -import { get } from 'lodash'; import RootNavigation from '../../navigation/rootNavigation'; -import { postBodySummary } from '@ecency/render-helper'; import { Draft } from '../../redux/reducers/cacheReducer'; import { RootState } from '../../redux/store/store'; -import { useImperativeHandle } from 'react'; -import { forwardRef } from 'react'; + import { PointActivityIds } from '../../providers/ecency/ecency.types'; import { useUserActivityMutation } from '../../providers/queries/pointQueries'; @@ -30,299 +29,279 @@ export interface QuickReplyModalContentProps { onClose: () => void; } -export const QuickReplyModalContent = forwardRef(({ - selectedPost, - onClose, -}: QuickReplyModalContentProps, ref) => { - const intl = useIntl(); - const dispatch = useDispatch(); - const userActivityMutation = useUserActivityMutation(); +export const QuickReplyModalContent = forwardRef( + ({ selectedPost, onClose }: QuickReplyModalContentProps, ref) => { + const intl = useIntl(); + const dispatch = useDispatch(); + const userActivityMutation = useUserActivityMutation(); - const inputRef = useRef(null); + const inputRef = useRef(null); - const currentAccount = useSelector((state: RootState) => state.account.currentAccount); - const pinCode = useSelector((state: RootState) => state.application.pin); - const drafts = useSelector((state: RootState) => state.cache.drafts); + const currentAccount = useSelector((state: RootState) => state.account.currentAccount); + const pinCode = useSelector((state: RootState) => state.application.pin); + const drafts = useSelector((state: RootState) => state.cache.drafts); - const [commentValue, setCommentValue] = useState(''); - const [isSending, setIsSending] = useState(false); + const [commentValue, setCommentValue] = useState(''); + const [isSending, setIsSending] = useState(false); + const headerText = + selectedPost && (selectedPost.summary || postBodySummary(selectedPost, 150, Platform.OS)); + const parentAuthor = selectedPost ? selectedPost.author : ''; + const parentPermlink = selectedPost ? selectedPost.permlink : ''; + const draftId = `${currentAccount.name}/${parentAuthor}/${parentPermlink}`; // different draftId for each user acount - const headerText = - selectedPost && (selectedPost.summary || postBodySummary(selectedPost, 150, Platform.OS as any)); - let parentAuthor = selectedPost ? selectedPost.author : ''; - let parentPermlink = selectedPost ? selectedPost.permlink : ''; - let draftId = `${currentAccount.name}/${parentAuthor}/${parentPermlink}`; //different draftId for each user acount + useImperativeHandle(ref, () => ({ + handleSheetClose() { + _addQuickCommentIntoCache(); + }, + })); + // load quick comment value from cache + useEffect(() => { + let _value = ''; + if (drafts.has(draftId) && currentAccount.name === drafts.get(draftId).author) { + const quickComment: Draft = drafts.get(draftId); + _value = quickComment.body; + } - useImperativeHandle(ref, () => ({ - handleSheetClose() { - _addQuickCommentIntoCache(); - }, - })); + if (inputRef.current) { + inputRef.current.setNativeProps({ + text: _value, + }); + setCommentValue(_value); + } + }, [selectedPost]); + // add quick comment value into cache + const _addQuickCommentIntoCache = (value = commentValue) => { + const quickCommentDraftData: Draft = { + author: currentAccount.name, + body: value, + }; - // load quick comment value from cache - useEffect(() => { - let _value = '' - if (drafts.has(draftId) && currentAccount.name === drafts.get(draftId).author) { - const quickComment: Draft = drafts.get(draftId); - _value = quickComment.body; - } - - if (inputRef.current) { - inputRef.current.setNativeProps({ - text: _value - }) - setCommentValue(_value) - } - - }, [selectedPost]); - - - - // add quick comment value into cache - const _addQuickCommentIntoCache = (value = commentValue) => { - - const quickCommentDraftData: Draft = { - author: currentAccount.name, - body: value + // add quick comment cache entry + dispatch(updateDraftCache(draftId, quickCommentDraftData)); }; - //add quick comment cache entry - dispatch(updateDraftCache(draftId, quickCommentDraftData)); - }; + // handle close press + const _handleClosePress = () => { + onClose(); + }; - - // handle close press - const _handleClosePress = () => { - onClose() - }; - - - // navigate to post on summary press - const _handleOnSummaryPress = () => { - Keyboard.dismiss(); - onClose(); - RootNavigation.navigate({ - name: ROUTES.SCREENS.POST, - params: { - content: selectedPost, - }, - key: get(selectedPost, 'permlink'), - }); - }; - - - // handle submit reply - const _submitReply = async () => { - - if (!commentValue) { - return; - } - if (isSending) { - return; - } - - if (currentAccount) { - setIsSending(true); - - const permlink = generateReplyPermlink(selectedPost.author); - - const parentAuthor = selectedPost.author; - const parentPermlink = selectedPost.permlink; - const parentTags = selectedPost.json_metadata.tags; - console.log( - currentAccount, - pinCode, - parentAuthor, - parentPermlink, - permlink, - commentValue, - parentTags, - ); - - const status = await postComment( - currentAccount, - pinCode, - parentAuthor, - parentPermlink, - permlink, - commentValue, - parentTags, - ) - .then((response) => { - userActivityMutation.mutate({ - pointsTy:PointActivityIds.COMMENT, - transactionId:response.id - }) - setIsSending(false); - setCommentValue(''); - - if(inputRef.current){ - inputRef.current.setNativeProps({ - text: '' - }) - } - - dispatch( - toastNotification( - intl.formatMessage({ - id: 'alert.success', - }), - ), - ); - - //add comment cache entry - dispatch( - updateCommentCache( - `${parentAuthor}/${parentPermlink}`, - { - author: currentAccount.name, - permlink, - parent_author: parentAuthor, - parent_permlink: parentPermlink, - markdownBody: commentValue, - }, - { - parentTags: parentTags || ['ecency'], - }, - ), - ); - - // delete quick comment draft cache if it exist - if (drafts.has(draftId)) { - dispatch(deleteDraftCacheEntry(draftId)); - } - - //close should alwasy be called at method end - onClose(); - }) - .catch((error) => { - console.log(error); - Alert.alert( - intl.formatMessage({ - id: 'alert.fail', - }), - error.message || JSON.stringify(error), - ); - - - setIsSending(false); - _addQuickCommentIntoCache(); //add comment value into cache if there is error while posting comment - - }); - console.log('status : ', status); - } - }; - - const _handleExpandBtn = async () => { - if (selectedPost) { + // navigate to post on summary press + const _handleOnSummaryPress = () => { Keyboard.dismiss(); onClose(); - await delay(50); RootNavigation.navigate({ - name: ROUTES.SCREENS.EDITOR, - key: 'editor_replay', + name: ROUTES.SCREENS.POST, params: { - isReply: true, - post: selectedPost, + content: selectedPost, }, + key: get(selectedPost, 'permlink'), }); - } - }; + }; + // handle submit reply + const _submitReply = async () => { + if (!commentValue) { + return; + } + if (isSending) { + return; + } - //REMOVED FOR TESTING, CAN BE PUT BACK IF APP STILL CRASHES - // const _deboucedCacheUpdate = useCallback(debounce(_addQuickCommentIntoCache, 500), []) + if (currentAccount) { + setIsSending(true); - const _onChangeText = (value) => { - setCommentValue(value); - //REMOVED FOR TESTING, CAN BE PUT BACK IF APP STILL CRASHES - // _deboucedCacheUpdate(value) - } + const permlink = generateReplyPermlink(selectedPost.author); + const parentAuthor = selectedPost.author; + const parentPermlink = selectedPost.permlink; + const parentTags = selectedPost.json_metadata.tags; + console.log( + currentAccount, + pinCode, + parentAuthor, + parentPermlink, + permlink, + commentValue, + parentTags, + ); + const status = await postComment( + currentAccount, + pinCode, + parentAuthor, + parentPermlink, + permlink, + commentValue, + parentTags, + ) + .then((response) => { + userActivityMutation.mutate({ + pointsTy: PointActivityIds.COMMENT, + transactionId: response.id, + }); + setIsSending(false); + setCommentValue(''); - //VIEW_RENDERERS + if (inputRef.current) { + inputRef.current.setNativeProps({ + text: '', + }); + } + dispatch( + toastNotification( + intl.formatMessage({ + id: 'alert.success', + }), + ), + ); - const _renderSummary = () => ( - _handleOnSummaryPress()}> - - {headerText} - - - ); + // add comment cache entry + dispatch( + updateCommentCache( + `${parentAuthor}/${parentPermlink}`, + { + author: currentAccount.name, + permlink, + parent_author: parentAuthor, + parent_permlink: parentPermlink, + markdownBody: commentValue, + }, + { + parentTags: parentTags || ['ecency'], + }, + ), + ); - const _renderAvatar = () => ( - - - - {`@${currentAccount.username}`} + // delete quick comment draft cache if it exist + if (drafts.has(draftId)) { + dispatch(deleteDraftCacheEntry(draftId)); + } + + // close should alwasy be called at method end + onClose(); + }) + .catch((error) => { + console.log(error); + Alert.alert( + intl.formatMessage({ + id: 'alert.fail', + }), + error.message || JSON.stringify(error), + ); + + setIsSending(false); + _addQuickCommentIntoCache(); // add comment value into cache if there is error while posting comment + }); + console.log('status : ', status); + } + }; + + const _handleExpandBtn = async () => { + if (selectedPost) { + Keyboard.dismiss(); + onClose(); + await delay(50); + RootNavigation.navigate({ + name: ROUTES.SCREENS.EDITOR, + key: 'editor_replay', + params: { + isReply: true, + post: selectedPost, + }, + }); + } + }; + + // REMOVED FOR TESTING, CAN BE PUT BACK IF APP STILL CRASHES + // const _deboucedCacheUpdate = useCallback(debounce(_addQuickCommentIntoCache, 500), []) + + const _onChangeText = (value) => { + setCommentValue(value); + // REMOVED FOR TESTING, CAN BE PUT BACK IF APP STILL CRASHES + // _deboucedCacheUpdate(value) + }; + + // VIEW_RENDERERS + + const _renderSummary = () => ( + _handleOnSummaryPress()}> + + {headerText} + + + ); + + const _renderAvatar = () => ( + + + + {`@${currentAccount.username}`} + - - ); + ); - const _renderExpandBtn = () => ( - - - - ); - const _renderReplyBtn = () => ( - - - _submitReply()} - text={intl.formatMessage({ - id: 'quick_reply.reply', - })} - isLoading={isSending} - /> - - ); - - - - const _renderContent = ( - - {_renderSummary()} - {_renderAvatar()} - - ( + + - - {_renderExpandBtn()} - {_renderReplyBtn()} + ); + const _renderReplyBtn = () => ( + + + _submitReply()} + text={intl.formatMessage({ + id: 'quick_reply.reply', + })} + isLoading={isSending} + /> - - ) + ); - return _renderContent -}); + const _renderContent = ( + + {_renderSummary()} + {_renderAvatar()} + + + + + {_renderExpandBtn()} + {_renderReplyBtn()} + + + ); + + return _renderContent; + }, +); diff --git a/src/components/quickReplyModal/quickReplyModalStyles.ts b/src/components/quickReplyModal/quickReplyModalStyles.ts index 3ff62044a..f76c0ec9e 100644 --- a/src/components/quickReplyModal/quickReplyModalStyles.ts +++ b/src/components/quickReplyModal/quickReplyModalStyles.ts @@ -3,18 +3,18 @@ import EStyleSheet from 'react-native-extended-stylesheet'; export default EStyleSheet.create({ sheetContent: { backgroundColor: '$primaryBackgroundColor', - marginTop:132, + marginTop: 132, }, container: { flex: 1, - justifyContent:"flex-end", + justifyContent: 'flex-end', backgroundColor: 'rgba(0, 0, 0, 0.2)', }, modalContainer: { - margin:16, - borderRadius:16, + margin: 16, + borderRadius: 16, backgroundColor: '$primaryBackgroundColor', paddingTop: 16, paddingBottom: 16, @@ -44,7 +44,7 @@ export default EStyleSheet.create({ }, textInput: { color: '$primaryBlack', - paddingHorizontal:16, + paddingHorizontal: 16, fontSize: 16, flexGrow: 1, fontWeight: '500', diff --git a/src/components/quickReplyModal/quickReplyModalView.tsx b/src/components/quickReplyModal/quickReplyModalView.tsx index 047fec761..c4082407b 100644 --- a/src/components/quickReplyModal/quickReplyModalView.tsx +++ b/src/components/quickReplyModal/quickReplyModalView.tsx @@ -5,34 +5,27 @@ import { useAppDispatch, useAppSelector } from '../../hooks'; import { hideReplyModal } from '../../redux/actions/uiAction'; const QuickReplyModal = () => { - const dispatch = useAppDispatch(); const replyModalVisible = useAppSelector((state) => state.ui.replyModalVisible); - const replyModalPost = useAppSelector(state => state.ui.replyModalPost) + const replyModalPost = useAppSelector((state) => state.ui.replyModalPost); const modalContentRef = useRef(null); - const _onClose = () => { - if(modalContentRef.current){ + if (modalContentRef.current) { modalContentRef.current.handleSheetClose(); } dispatch(hideReplyModal()); - } - + }; return ( - + - ); }; diff --git a/src/components/sideMenu/view/sideMenuView.js b/src/components/sideMenu/view/sideMenuView.js index 8330fd443..8467453af 100644 --- a/src/components/sideMenu/view/sideMenuView.js +++ b/src/components/sideMenu/view/sideMenuView.js @@ -24,7 +24,7 @@ import { TextWithIcon } from '../../basicUIElements'; import MENU from '../../../constants/sideMenuItems'; import ROUTES from '../../../constants/routeNames'; -//Utils +// Utils import { getVotingPower } from '../../../utils/manaBar'; // Styles @@ -102,7 +102,7 @@ const SideMenuView = ({ const { buildVersion, appVersion } = VersionNumber; - let _username = currentAccount.name; + const _username = currentAccount.name; const _renderItem = (item) => ( { - - if(!data || !data.length){ - return null; - } - - const _chartWidth = baseWidth + baseWidth/(data.length -1) - const _chartBackgroundColor = EStyleSheet.value('$primaryLightBackground'); - return ( - EStyleSheet.value('$primaryDarkText'), - color: () => showLine?EStyleSheet.value('$chartBlue'):'transparent', - }} - /> - ) -} +export const SimpleChart = ({ + data, + baseWidth, + chartHeight, + showLine, + showLabels = false, +}: CoinChartProps) => { + if (!data || !data.length) { + return null; + } + const _chartWidth = baseWidth + baseWidth / (data.length - 1); + const _chartBackgroundColor = EStyleSheet.value('$primaryLightBackground'); + return ( + EStyleSheet.value('$primaryDarkText'), + color: () => (showLine ? EStyleSheet.value('$chartBlue') : 'transparent'), + }} + /> + ); +}; diff --git a/src/components/snippetEditorModal/snippetEditorModal.tsx b/src/components/snippetEditorModal/snippetEditorModal.tsx index 6d4bb7672..14221f1d5 100644 --- a/src/components/snippetEditorModal/snippetEditorModal.tsx +++ b/src/components/snippetEditorModal/snippetEditorModal.tsx @@ -44,7 +44,7 @@ const SnippetEditorModal = ({}, ref) => { }, })); - //save snippet based on editor type + // save snippet based on editor type const _saveSnippet = async () => { if (!title || !body) { Alert.alert(intl.formatMessage({ id: 'snippets.message_incomplete' })); diff --git a/src/components/snippetsModal/snippetItem.tsx b/src/components/snippetsModal/snippetItem.tsx index 95f81b444..46a248efe 100644 --- a/src/components/snippetsModal/snippetItem.tsx +++ b/src/components/snippetsModal/snippetItem.tsx @@ -18,7 +18,7 @@ const SnippetItem = ({ id, title, body, index, onEditPress }: SnippetItemProps) const snippetsDeleteMutation = useSnippetDeleteMutation(); const _onRemovePress = () => { - //asks for remvoe confirmation and run remove routing upon confirming + // asks for remvoe confirmation and run remove routing upon confirming if (id) { Alert.alert( intl.formatMessage({ id: 'snippets.title_remove_confirmation' }), diff --git a/src/components/snippetsModal/snippetsModal.tsx b/src/components/snippetsModal/snippetsModal.tsx index c917ed38f..c8ca05c7c 100644 --- a/src/components/snippetsModal/snippetsModal.tsx +++ b/src/components/snippetsModal/snippetsModal.tsx @@ -1,7 +1,6 @@ import React, { useRef } from 'react'; -import { View, FlatList, Text, TouchableOpacity, Alert, RefreshControl } from 'react-native'; +import { View, FlatList, Text, TouchableOpacity, RefreshControl } from 'react-native'; import { useIntl } from 'react-intl'; -import { deleteFragment } from '../../providers/ecency/ecency'; import { MainButton } from '..'; import styles from './snippetsModalStyles'; @@ -11,7 +10,7 @@ import SnippetEditorModal, { import SnippetItem from './snippetItem'; import { Snippet } from '../../models'; import { useAppSelector } from '../../hooks'; -import { useSnippetDeleteMutation, useSnippetsQuery } from '../../providers/queries'; +import { useSnippetsQuery } from '../../providers/queries'; interface SnippetsModalProps { handleOnSelect: (snippetText: string) => void; @@ -25,7 +24,7 @@ const SnippetsModal = ({ handleOnSelect }: SnippetsModalProps) => { const snippetsQuery = useSnippetsQuery(); - //render list item for snippet and handle actions; + // render list item for snippet and handle actions; const _renderItem = ({ item, index }: { item: Snippet; index: number }) => { const _onPress = () => handleOnSelect(item.body); @@ -48,7 +47,7 @@ const SnippetsModal = ({ handleOnSelect }: SnippetsModalProps) => { ); }; - //render empty list placeholder + // render empty list placeholder const _renderEmptyContent = () => { return ( <> @@ -57,7 +56,7 @@ const SnippetsModal = ({ handleOnSelect }: SnippetsModalProps) => { ); }; - //renders footer with add snipept button and shows new snippet modal + // renders footer with add snipept button and shows new snippet modal const _renderFloatingButton = () => { if (!isLoggedIn) { return null; diff --git a/src/components/tabBar/view/tabBarView.js b/src/components/tabBar/view/tabBarView.js index 7f5ec7b6e..0c24fa345 100644 --- a/src/components/tabBar/view/tabBarView.js +++ b/src/components/tabBar/view/tabBarView.js @@ -56,13 +56,8 @@ class TabBar extends PureComponent { }; _renderUnderline = () => { - const { - tabs, - tabUnderlineDefaultWidth, - tabUnderlineScaleX, - scrollValue, - underlineStyle, - } = this.props; + const { tabs, tabUnderlineDefaultWidth, tabUnderlineScaleX, scrollValue, underlineStyle } = + this.props; const { activeColor } = this.state; const containerWidth = getWindowDimensions().nativeWidth; diff --git a/src/components/tabbedPosts/container/tabbedPosts.tsx b/src/components/tabbedPosts/container/tabbedPosts.tsx index d7e311053..c9a933adf 100644 --- a/src/components/tabbedPosts/container/tabbedPosts.tsx +++ b/src/components/tabbedPosts/container/tabbedPosts.tsx @@ -19,56 +19,57 @@ export const TabbedPosts = ({ stackedTabs, onTabChange, ...props -}:TabbedPostsProps) => { +}: TabbedPostsProps) => { //initialize state const [initialTabIndex] = useState(selectedOptionIndex == 0 && stackedTabs ? filterOptions.length : selectedOptionIndex) - const mainFilters = filterOptions.map((label, index)=>({ - filterKey:filterOptionsValue[index], - label - } as TabItem)); + const mainFilters = filterOptions.map((label, index) => ({ + filterKey: filterOptionsValue[index], + label + } as TabItem)); const subFilters = feedSubfilterOptions - ? feedSubfilterOptions.map((label, index)=>({ - filterKey:feedSubfilterOptionsValue[index], + ? feedSubfilterOptions.map((label, index) => ({ + filterKey: feedSubfilterOptionsValue[index], label } as TabItem)) : []; const combinedFilters = [...mainFilters, ...subFilters] - + const [selectedFilter, setSelectedFilter] = useState(combinedFilters[initialTabIndex].filterKey) - const [filterScrollRequest, createFilterScrollRequest] = useState(null) + const [filterScrollRequest, createFilterScrollRequest] = useState(null) - //components actions - const _onFilterSelect = (filter:string) => { - if(filter === selectedFilter){ - createFilterScrollRequest(selectedFilter) - }else{ - setSelectedFilter(filter) - } + //components actions + const _onFilterSelect = (filter: string) => { + if (filter === selectedFilter) { + createFilterScrollRequest(selectedFilter) + } else { + setSelectedFilter(filter) } + } - const _onScrollRequestProcessed = () => { - createFilterScrollRequest(null); - } + const _onScrollRequestProcessed = () => { + createFilterScrollRequest(null); + } //initialize first set of pages - const pages = combinedFilters.map((filter, index)=>{ - if(tabContentOverrides && tabContentOverrides.has(index)){ + const pages = combinedFilters.map((filter, index) => { + if (tabContentOverrides && tabContentOverrides.has(index)) { return tabContentOverrides.get(index); } - return ( + + return ( { return ( - + > {pages} ); diff --git a/src/components/tabbedPosts/index.ts b/src/components/tabbedPosts/index.ts index 4940800a8..e1e450517 100644 --- a/src/components/tabbedPosts/index.ts +++ b/src/components/tabbedPosts/index.ts @@ -1 +1 @@ -export * from './container/tabbedPosts'; \ No newline at end of file +export * from './container/tabbedPosts'; diff --git a/src/components/tabbedPosts/services/tabbedPostsFetch.ts b/src/components/tabbedPosts/services/tabbedPostsFetch.ts index 9aa43c04c..1024d2a2a 100644 --- a/src/components/tabbedPosts/services/tabbedPostsFetch.ts +++ b/src/components/tabbedPosts/services/tabbedPostsFetch.ts @@ -1,192 +1,192 @@ -import { getAccountPosts, getPost, getRankedPosts } from "../../../providers/hive/dhive"; -import { filterLatestPosts, getUpdatedPosts } from "./tabbedPostsHelpers"; -import { LoadPostsOptions } from "./tabbedPostsModels"; -import { getPromotedEntries } from "../../../providers/ecency/ecency"; +import { getAccountPosts, getPost, getRankedPosts } from '../../../providers/hive/dhive'; +import { filterLatestPosts, getUpdatedPosts } from './tabbedPostsHelpers'; +import { LoadPostsOptions } from './tabbedPostsModels'; +import { getPromotedEntries } from '../../../providers/ecency/ecency'; const POSTS_FETCH_COUNT = 20; export const loadPosts = async ({ - filterKey, - prevPosts, - tabMeta, - setTabMeta, - isLatestPostsCheck = false, - getFor, - isConnected, - isLoggedIn, - refreshing, - feedUsername, - pinnedPermlink, - pageType, - tag, - nsfw, + filterKey, + prevPosts, + tabMeta, + setTabMeta, + isLatestPostsCheck = false, + getFor, + isConnected, + isLoggedIn, + refreshing, + feedUsername, + pinnedPermlink, + pageType, + tag, + nsfw, +}: LoadPostsOptions) => { + let filter = filterKey; -}:LoadPostsOptions) => { - let filter = filterKey; - - //match filter with api if is friends - if(filter === 'friends'){ - filter = 'feed'; - } + // match filter with api if is friends + if (filter === 'friends') { + filter = 'feed'; + } - const {isLoading, startPermlink, startAuthor} = tabMeta; - - //reject update if already loading - if ( - isLoading || - !isConnected || - (!isLoggedIn && filterKey === 'feed') || - (!isLoggedIn && filterKey === 'communities') - ) { - return; - } + const { isLoading, startPermlink, startAuthor } = tabMeta; - //reject update if no connection - if (!isConnected && (refreshing || isLoading)) { - setTabMeta({ - ...tabMeta, - isLoading:false, - isRefreshing:false, - }) - return; - } + // reject update if already loading + if ( + isLoading || + !isConnected || + (!isLoggedIn && filterKey === 'feed') || + (!isLoggedIn && filterKey === 'communities') + ) { + return; + } + // reject update if no connection + if (!isConnected && (refreshing || isLoading)) { setTabMeta({ ...tabMeta, - isLoading:true, - isRefreshing:refreshing, - }) - - let options = {} as any; - const limit = isLatestPostsCheck ? 5 : POSTS_FETCH_COUNT; - let func = null; + isLoading: false, + isRefreshing: false, + }); + return; + } - if ( - filter === 'feed' || - filter === 'communities' || - filter === 'posts' || - filter === 'blog' || - getFor === 'blog' || - filter === 'reblogs' - ) { - if (filter === 'communities') { - func = getRankedPosts; - options = { - observer: feedUsername, - sort: 'created', - tag: 'my', - limit, - }; - } else { - func = getAccountPosts; - options = { - observer: feedUsername || '', - account: feedUsername, - limit, - sort: filter, - }; + setTabMeta({ + ...tabMeta, + isLoading: true, + isRefreshing: refreshing, + }); - if ((pageType === 'profile' || pageType === 'ownProfile') && (filter === 'feed' || filter === 'posts')) { - options.sort = 'posts'; - } - } - } else { + let options = {}; + const limit = isLatestPostsCheck ? 5 : POSTS_FETCH_COUNT; + let func = null; + + if ( + filter === 'feed' || + filter === 'communities' || + filter === 'posts' || + filter === 'blog' || + getFor === 'blog' || + filter === 'reblogs' + ) { + if (filter === 'communities') { func = getRankedPosts; options = { - tag, + observer: feedUsername, + sort: 'created', + tag: 'my', + limit, + }; + } else { + func = getAccountPosts; + options = { + observer: feedUsername || '', + account: feedUsername, limit, sort: filter, }; + + if ( + (pageType === 'profile' || pageType === 'ownProfile') && + (filter === 'feed' || filter === 'posts') + ) { + options.sort = 'posts'; + } } + } else { + func = getRankedPosts; + options = { + tag, + limit, + sort: filter, + }; + } + if (startAuthor && startPermlink && !refreshing && !isLatestPostsCheck) { + options.start_author = startAuthor; + options.start_permlink = startPermlink; + } - if (startAuthor && startPermlink && !refreshing && !isLatestPostsCheck) { - options.start_author = startAuthor; - options.start_permlink = startPermlink; - } + try { + // fetching posts + const result: any[] = await func(options, feedUsername, nsfw); - try { - //fetching posts - const result:any[] = await func(options, feedUsername, nsfw); - - if(result.length > 0){ - if(filter === 'reblogs'){ - for (let i = result.length - 1; i >= 0; i--) { - if (result[i].author === feedUsername) { - result.splice(i, 1); - } + if (result.length > 0) { + if (filter === 'reblogs') { + for (let i = result.length - 1; i >= 0; i--) { + if (result[i].author === feedUsername) { + result.splice(i, 1); } } - if((pageType === 'profile' || pageType === 'ownProfile') && pinnedPermlink){ - let pinnedIndex = -1; - result.forEach((post, index)=>{ - if(post.author === feedUsername && post.permlink === pinnedPermlink){ - pinnedIndex = index; - } - }) - result.splice(pinnedIndex, 1); - } } - - //if filter is feed convert back to reducer filter - if(filter === 'feed'){ - filter = 'friends' + if ((pageType === 'profile' || pageType === 'ownProfile') && pinnedPermlink) { + let pinnedIndex = -1; + result.forEach((post, index) => { + if (post.author === feedUsername && post.permlink === pinnedPermlink) { + pinnedIndex = index; + } + }); + result.splice(pinnedIndex, 1); } - - // cacheDispatch(updateFilterCache(filter, result, refreshing)) - setTabMeta({ - ...tabMeta, - isLoading:false, - isRefreshing:false, - }) - - const retData = { - latestPosts:null, - updatedPosts:null - } - - if(isLatestPostsCheck){ - const latestPosts = filterLatestPosts(result, prevPosts.slice(0, 5)); - retData.latestPosts = latestPosts - }else{ - const updatedPosts = getUpdatedPosts( - startAuthor && startPermlink ? prevPosts:[], - result, - refreshing, - tabMeta, - setTabMeta, - ) - - retData.updatedPosts = updatedPosts; - } - - //fetch add pinned posts if applicable - if(retData.updatedPosts && pinnedPermlink && retData.updatedPosts[0].permlink !== pinnedPermlink){ - const pinnedPost = await getPost(feedUsername, pinnedPermlink); - pinnedPost.stats = {is_pinned_blog:true, ...pinnedPost.stats}; - retData.updatedPosts = [pinnedPost, ...retData.updatedPosts]; - } - - return retData - - - } catch (err) { - setTabMeta({ - ...tabMeta, - isLoading:false, - isRefreshing:false, - }) } - }; - - - export const fetchPromotedEntries = async (username:string) => { - try { - const posts = await getPromotedEntries(username); - return Array.isArray(posts) ? posts : []; - - } catch(err){ - console.warn("Failed to get promoted posts, ", err) + // if filter is feed convert back to reducer filter + if (filter === 'feed') { + filter = 'friends'; } - } \ No newline at end of file + + // cacheDispatch(updateFilterCache(filter, result, refreshing)) + setTabMeta({ + ...tabMeta, + isLoading: false, + isRefreshing: false, + }); + + const retData = { + latestPosts: null, + updatedPosts: null, + }; + + if (isLatestPostsCheck) { + const latestPosts = filterLatestPosts(result, prevPosts.slice(0, 5)); + retData.latestPosts = latestPosts; + } else { + const updatedPosts = getUpdatedPosts( + startAuthor && startPermlink ? prevPosts : [], + result, + refreshing, + tabMeta, + setTabMeta, + ); + + retData.updatedPosts = updatedPosts; + } + + // fetch add pinned posts if applicable + if ( + retData.updatedPosts && + pinnedPermlink && + retData.updatedPosts[0].permlink !== pinnedPermlink + ) { + const pinnedPost = await getPost(feedUsername, pinnedPermlink); + pinnedPost.stats = { is_pinned_blog: true, ...pinnedPost.stats }; + retData.updatedPosts = [pinnedPost, ...retData.updatedPosts]; + } + + return retData; + } catch (err) { + setTabMeta({ + ...tabMeta, + isLoading: false, + isRefreshing: false, + }); + } +}; + +export const fetchPromotedEntries = async (username: string) => { + try { + const posts = await getPromotedEntries(username); + return Array.isArray(posts) ? posts : []; + } catch (err) { + console.warn('Failed to get promoted posts, ', err); + } +}; diff --git a/src/components/tabbedPosts/services/tabbedPostsHelpers.ts b/src/components/tabbedPosts/services/tabbedPostsHelpers.ts index da2948632..3ca4c5b71 100644 --- a/src/components/tabbedPosts/services/tabbedPostsHelpers.ts +++ b/src/components/tabbedPosts/services/tabbedPostsHelpers.ts @@ -1,13 +1,11 @@ import unionBy from 'lodash/unionBy'; -import { TabMeta } from "./tabbedPostsModels"; +import { TabMeta } from './tabbedPostsModels'; - - -//cacludate posts check refresh time for selected filter; +// cacludate posts check refresh time for selected filter; export const calculateTimeLeftForPostCheck = (firstPost: any) => { const refetchTime = 600000; - //schedules refresh 30 minutes after last post creation time + // schedules refresh 30 minutes after last post creation time const currentTime = new Date().getTime(); const createdAt = new Date(firstPost.created).getTime(); @@ -17,58 +15,50 @@ export const calculateTimeLeftForPostCheck = (firstPost: any) => { timeLeft = refetchTime; } return timeLeft; -} +}; - -//filter posts that are not present in top 5 posts currently in list. +// filter posts that are not present in top 5 posts currently in list. export const filterLatestPosts = (fetchedPosts: any[], cachedPosts: any[]) => { + console.log('Comparing: ', fetchedPosts, cachedPosts); - console.log("Comparing: ", fetchedPosts, cachedPosts); - - let latestPosts = []; + const latestPosts = []; fetchedPosts.forEach((post) => { const newPostAuthPrem = post.author + post.permlink; - const postExist = cachedPosts.find((cPost) => (cPost.author + post.permlink) === newPostAuthPrem); + const postExist = cachedPosts.find((cPost) => cPost.author + post.permlink === newPostAuthPrem); if (!postExist) { latestPosts.push(post); } }); - if (latestPosts.length > 0) { return latestPosts.slice(0, 5); - } else { return []; } }; - -//process posts result and return updated posts for the list. +// process posts result and return updated posts for the list. export const getUpdatedPosts = ( prevPosts: any[], nextPosts: any[], shouldReset: boolean, tabMeta: TabMeta, - setTabMeta: (meta: TabMeta) => void + setTabMeta: (meta: TabMeta) => void, ) => { - //return state as is if component is unmounter + // return state as is if component is unmounter let _posts = nextPosts; - if (nextPosts.length === 0) { setTabMeta({ ...tabMeta, - isNoPost: true + isNoPost: true, }); return shouldReset ? [] : prevPosts; } - const refreshing = tabMeta.isRefreshing; - if (prevPosts.length > 0 && !shouldReset) { if (refreshing) { _posts = unionBy(_posts, prevPosts, 'permlink'); @@ -81,8 +71,7 @@ export const getUpdatedPosts = ( ...tabMeta, startAuthor: _posts[_posts.length - 1] && _posts[_posts.length - 1].author, startPermlink: _posts[_posts.length - 1] && _posts[_posts.length - 1].permlink, - }) - - return _posts -} + }); + return _posts; +}; diff --git a/src/components/tabbedPosts/services/tabbedPostsModels.ts b/src/components/tabbedPosts/services/tabbedPostsModels.ts index 2473c9225..7d848f105 100644 --- a/src/components/tabbedPosts/services/tabbedPostsModels.ts +++ b/src/components/tabbedPosts/services/tabbedPostsModels.ts @@ -1,63 +1,59 @@ - export interface TabbedPostsProps { - filterOptions:string[], - filterOptionsValue:string[], - isFeedScreen:boolean, - feedUsername:string, - selectedOptionIndex:number, - feedSubfilterOptions:string[], - feedSubfilterOptionsValue:string[], - getFor:string, - pageType:'main'|'community'|'profile'|'ownProfile', - tag:string, - forceLoadPosts:boolean, - tabContentOverrides:Map, - imagesToggleEnabled?:boolean, - stackedTabs:boolean, - pinnedPermlink?:string, - onTabChange:(index:number)=>void - handleOnScroll:()=>void, + filterOptions: string[]; + filterOptionsValue: string[]; + isFeedScreen: boolean; + feedUsername: string; + selectedOptionIndex: number; + feedSubfilterOptions: string[]; + feedSubfilterOptionsValue: string[]; + getFor: string; + pageType: 'main' | 'community' | 'profile' | 'ownProfile'; + tag: string; + forceLoadPosts: boolean; + tabContentOverrides: Map; + imagesToggleEnabled?: boolean; + stackedTabs: boolean; + pinnedPermlink?: string; + onTabChange: (index: number) => void; + handleOnScroll: () => void; } export interface TabMeta { - startPermlink:string, - startAuthor:string, - isLoading:boolean, - isRefreshing:boolean, - isNoPost:boolean, - } - - export interface LoadPostsOptions { - - filterKey:string; - prevPosts:any[]; - tabMeta:TabMeta; - setTabMeta:(meta:TabMeta)=>void, - getFor:string, - isConnected:boolean, - isLoggedIn:boolean, - feedUsername:string, - pinnedPermlink:string, - pageType:string, - tag:string, - nsfw:string, - isLatestPostsCheck?:boolean, - refreshing?:boolean, + startPermlink: string; + startAuthor: string; + isLoading: boolean; + isRefreshing: boolean; + isNoPost: boolean; +} - } +export interface LoadPostsOptions { + filterKey: string; + prevPosts: any[]; + tabMeta: TabMeta; + setTabMeta: (meta: TabMeta) => void; + getFor: string; + isConnected: boolean; + isLoggedIn: boolean; + feedUsername: string; + pinnedPermlink: string; + pageType: string; + tag: string; + nsfw: string; + isLatestPostsCheck?: boolean; + refreshing?: boolean; +} - - export interface TabContentProps { - filterKey:string, - isFeedScreen:boolean, - isInitialTab:boolean, - getFor:string, - pageType:'main'|'profile'|'ownProfile'|'community', - feedUsername:string, - tag:string, - forceLoadPosts:boolean, - filterScrollRequest:string, - pinnedPermlink?:string, - onScrollRequestProcessed:()=>void - handleOnScroll:()=>void; - } \ No newline at end of file +export interface TabContentProps { + filterKey: string; + isFeedScreen: boolean; + isInitialTab: boolean; + getFor: string; + pageType: 'main' | 'profile' | 'ownProfile' | 'community'; + feedUsername: string; + tag: string; + forceLoadPosts: boolean; + filterScrollRequest: string; + pinnedPermlink?: string; + onScrollRequestProcessed: () => void; + handleOnScroll: () => void; +} diff --git a/src/components/tabbedPosts/view/listEmptyView.tsx b/src/components/tabbedPosts/view/listEmptyView.tsx index 21fba2440..12a4e7629 100644 --- a/src/components/tabbedPosts/view/listEmptyView.tsx +++ b/src/components/tabbedPosts/view/listEmptyView.tsx @@ -3,6 +3,7 @@ import { useIntl } from 'react-intl'; import { get } from 'lodash'; import { Text, View, FlatList } from 'react-native'; import { useSelector, useDispatch } from 'react-redux'; +import { useNavigation } from '@react-navigation/native'; import { NoPost, PostCardPlaceHolder, UserListItem } from '../..'; import globalStyles from '../../../globalStyles'; import { CommunityListItem, EmptyScreen } from '../../basicUIElements'; @@ -15,7 +16,6 @@ import { } from '../../../redux/actions/communitiesAction'; import { fetchLeaderboard, followUser, unfollowUser } from '../../../redux/actions/userAction'; import { getCommunity } from '../../../providers/hive/dhive'; -import { useNavigation } from '@react-navigation/native'; interface TabEmptyViewProps { filterKey: string; @@ -26,8 +26,8 @@ const TabEmptyView = ({ filterKey, isNoPost }: TabEmptyViewProps) => { const intl = useIntl(); const dispatch = useDispatch(); const navigation = useNavigation(); - - //redux properties + + // redux properties const isLoggedIn = useSelector((state) => state.application.isLoggedIn); const subscribingCommunities = useSelector( (state) => state.communities.subscribingCommunitiesInFeedScreen, @@ -41,7 +41,7 @@ const TabEmptyView = ({ filterKey, isNoPost }: TabEmptyViewProps) => { const leaderboard = useSelector((state) => state.user.leaderboard); const communities = useSelector((state) => state.communities.communities); - //hooks + // hooks useEffect(() => { if (isNoPost) { @@ -127,11 +127,11 @@ const TabEmptyView = ({ filterKey, isNoPost }: TabEmptyViewProps) => { setRecommendedUsers(recommendeds); }, [followingUsers]); - //fetching + // fetching const _getRecommendedUsers = () => dispatch(fetchLeaderboard()); const _getRecommendedCommunities = () => dispatch(fetchCommunities('', 10)); - //formating + // formating const _formatRecommendedCommunities = async (communitiesArray) => { try { const ecency = await getCommunity('hive-125125'); @@ -156,7 +156,7 @@ const TabEmptyView = ({ filterKey, isNoPost }: TabEmptyViewProps) => { setRecommendedUsers(recommendeds); }; - //actions related routines + // actions related routines const _handleSubscribeCommunityButtonPress = (data) => { let subscribeAction; let successToastText = ''; @@ -221,7 +221,7 @@ const TabEmptyView = ({ filterKey, isNoPost }: TabEmptyViewProps) => { navigation.navigate(ROUTES.SCREENS.LOGIN); }; - //render related operations + // render related operations if ( (filterKey === 'feed' || filterKey === 'friends' || filterKey === 'communities') && !isLoggedIn @@ -333,4 +333,4 @@ const TabEmptyView = ({ filterKey, isNoPost }: TabEmptyViewProps) => { ); }; -export default TabEmptyView; \ No newline at end of file +export default TabEmptyView; diff --git a/src/components/tabbedPosts/view/scrollTopPopup.tsx b/src/components/tabbedPosts/view/scrollTopPopup.tsx index c83b07579..e64ddcbd8 100644 --- a/src/components/tabbedPosts/view/scrollTopPopup.tsx +++ b/src/components/tabbedPosts/view/scrollTopPopup.tsx @@ -2,78 +2,72 @@ import * as React from 'react'; import { useIntl } from 'react-intl'; import { Text, View, TouchableOpacity } from 'react-native'; import FastImage from 'react-native-fast-image'; +import { View as AnimatedView } from 'react-native-animatable'; import { IconButton } from '../..'; import styles from './tabbedPostsStyles'; -import { View as AnimatedView } from 'react-native-animatable'; interface ScrollTopPopupProps { - onPress:()=>void; - onClose:()=>void; - popupAvatars:string[]; - enableScrollTop:boolean; + onPress: () => void; + onClose: () => void; + popupAvatars: string[]; + enableScrollTop: boolean; } const ScrollTopPopup = ({ - onPress, - onClose, - popupAvatars, - enableScrollTop + onPress, + onClose, + popupAvatars, + enableScrollTop, }: ScrollTopPopupProps) => { - const intl = useIntl(); + const intl = useIntl(); - if(popupAvatars.length == 0 && !enableScrollTop){ - return null; - } + if (popupAvatars.length == 0 && !enableScrollTop) { + return null; + } - return ( - - - - - - + return ( + + + + + - {popupAvatars.map((url, index) => ( - - ))} + {popupAvatars.map((url, index) => ( + + ))} - { - popupAvatars.length > 0 ? ( - - {intl.formatMessage({ id:'home.popup_postfix'})} - - ):( - - {intl.formatMessage({ id: 'home.scroll_top' })} - - ) - } - + {popupAvatars.length > 0 ? ( + + {intl.formatMessage({ id: 'home.popup_postfix' })} + + ) : ( + + {intl.formatMessage({ id: 'home.scroll_top' })} + + )} + + - - - - - - ); + + + + ); }; export default ScrollTopPopup; diff --git a/src/components/tabbedPosts/view/stackedTabBar.tsx b/src/components/tabbedPosts/view/stackedTabBar.tsx index eb924b568..7181988c6 100644 --- a/src/components/tabbedPosts/view/stackedTabBar.tsx +++ b/src/components/tabbedPosts/view/stackedTabBar.tsx @@ -1,119 +1,105 @@ -import React, { useRef, useState } from "react"; -import { useIntl } from "react-intl"; -import { useDispatch, useSelector } from "react-redux"; -import { CustomiseFiltersModal, FilterBar } from "../.."; -import { setHidePostsThumbnails } from "../../../redux/actions/applicationActions"; -import { CustomiseFiltersModalRef } from "../../customiseFiltersModal/customiseFiltersModal"; +import React, { useRef, useState } from 'react'; +import { useIntl } from 'react-intl'; +import { useDispatch, useSelector } from 'react-redux'; +import { CustomiseFiltersModal, FilterBar } from '../..'; +import { setHidePostsThumbnails } from '../../../redux/actions/applicationActions'; +import { CustomiseFiltersModalRef } from '../../customiseFiltersModal/customiseFiltersModal'; export interface TabItem { - filterKey:string; - label:string; + filterKey: string; + label: string; } interface StackedTabBarProps { - activeTab:boolean; - goToPage:(pageIndex)=>void; - tabs:string[]; - pageType?:'main'|'community'|'profile'|'ownProfile' - shouldStack:boolean; - firstStack:TabItem[]; - secondStack:TabItem[]; - initialFirstStackIndex:number; - onFilterSelect:(filterKey:string)=>void; - toggleHideImagesFlag:boolean; + activeTab: boolean; + goToPage: (pageIndex) => void; + tabs: string[]; + pageType?: 'main' | 'community' | 'profile' | 'ownProfile'; + shouldStack: boolean; + firstStack: TabItem[]; + secondStack: TabItem[]; + initialFirstStackIndex: number; + onFilterSelect: (filterKey: string) => void; + toggleHideImagesFlag: boolean; } export const StackedTabBar = ({ - goToPage, - tabs, - shouldStack, - firstStack, - secondStack, - initialFirstStackIndex, - onFilterSelect, - toggleHideImagesFlag, - pageType + goToPage, + tabs, + shouldStack, + firstStack, + secondStack, + initialFirstStackIndex, + onFilterSelect, + toggleHideImagesFlag, + pageType, +}: StackedTabBarProps) => { + const dispatch = useDispatch(); + const intl = useIntl(); -}:StackedTabBarProps) => { + const customiseModalRef = useRef(); - const dispatch = useDispatch(); - const intl = useIntl(); + // redux properties + const isHideImages = useSelector((state) => state.application.hidePostsThumbnails); - const customiseModalRef = useRef(); - - //redux properties - const isHideImages = useSelector((state) => state.application.hidePostsThumbnails); + const [selectedFilterIndex, setSelectedFilterIndex] = useState(initialFirstStackIndex); + const [selectedSecondStackIndex, setSelectedSecondStackIndex] = useState(0); - const [selectedFilterIndex, setSelectedFilterIndex] = useState(initialFirstStackIndex); - const [selectedSecondStackIndex, setSelectedSecondStackIndex] = useState(0); + const enableCustomTabs = pageType !== undefined; - const enableCustomTabs = pageType !== undefined; - - - const _onCustomisePress = () => { - if(customiseModalRef.current){ - customiseModalRef.current.show(); - } + const _onCustomisePress = () => { + if (customiseModalRef.current) { + customiseModalRef.current.show(); } + }; - const _onToggleImagesPress = () => { - dispatch(setHidePostsThumbnails(!isHideImages)) - } + const _onToggleImagesPress = () => { + dispatch(setHidePostsThumbnails(!isHideImages)); + }; - return ( - <> + return ( + <> { - return tabs[index] - ? tabs[index] - : intl.formatMessage({ id: item.label.toLowerCase() }).toUpperCase() - }) - } - + return tabs[index] + ? tabs[index] + : intl.formatMessage({ id: item.label.toLowerCase() }).toUpperCase(); + })} selectedOptionIndex={selectedFilterIndex} - rightIconName={toggleHideImagesFlag && "view-module"} - rightIconType={toggleHideImagesFlag && "MaterialIcons"} + rightIconName={toggleHideImagesFlag && 'view-module'} + rightIconType={toggleHideImagesFlag && 'MaterialIcons'} enableCustomiseButton={enableCustomTabs} onCustomisePress={_onCustomisePress} - onDropdownSelect={(index)=>{ + onDropdownSelect={(index) => { setSelectedFilterIndex(index); - if(index == 0 && shouldStack){ + if (index == 0 && shouldStack) { const tabIndex = firstStack.length + selectedSecondStackIndex; onFilterSelect(secondStack[selectedSecondStackIndex].filterKey); - goToPage(tabIndex) - }else{ + goToPage(tabIndex); + } else { onFilterSelect(firstStack[index].filterKey); goToPage(index); } - }} onRightIconPress={_onToggleImagesPress} /> - { - selectedFilterIndex == 0 && shouldStack && ( - - intl.formatMessage({ id: item.label.toLowerCase() }).toUpperCase(), - )} - selectedOptionIndex={selectedSecondStackIndex} - onDropdownSelect={(index)=>{ - setSelectedSecondStackIndex(index) - onFilterSelect(secondStack[index].filterKey); - goToPage(firstStack.length + index); - }} - /> - ) - } - - {enableCustomTabs && ( - + intl.formatMessage({ id: item.label.toLowerCase() }).toUpperCase(), + )} + selectedOptionIndex={selectedSecondStackIndex} + onDropdownSelect={(index) => { + setSelectedSecondStackIndex(index); + onFilterSelect(secondStack[index].filterKey); + goToPage(firstStack.length + index); + }} /> )} - - - ) - } \ No newline at end of file + + {enableCustomTabs && } + + ); +}; diff --git a/src/components/tabbedPosts/view/tabContent.tsx b/src/components/tabbedPosts/view/tabContent.tsx index 1258b54ee..244de22c2 100644 --- a/src/components/tabbedPosts/view/tabContent.tsx +++ b/src/components/tabbedPosts/view/tabContent.tsx @@ -1,30 +1,30 @@ -import React, {useState, useEffect, useRef} from 'react'; +import React, { useState, useEffect, useRef } from 'react'; +import { useSelector, useDispatch } from 'react-redux'; +import { AppState, NativeEventSubscription, NativeScrollEvent, NativeSyntheticEvent } from 'react-native'; +import { debounce } from 'lodash'; import PostsList from '../../postsList'; import { fetchPromotedEntries, loadPosts } from '../services/tabbedPostsFetch'; import { LoadPostsOptions, TabContentProps, TabMeta } from '../services/tabbedPostsModels'; -import {useSelector, useDispatch } from 'react-redux'; import TabEmptyView from './listEmptyView'; import { setInitPosts } from '../../../redux/actions/postsAction'; import { showReplyModal } from '../../../redux/actions/uiAction'; import { calculateTimeLeftForPostCheck } from '../services/tabbedPostsHelpers'; -import { AppState, NativeScrollEvent, NativeSyntheticEvent } from 'react-native'; import { PostsListRef } from '../../postsList/container/postsListContainer'; import ScrollTopPopup from './scrollTopPopup'; -import { debounce } from 'lodash'; const DEFAULT_TAB_META = { - startAuthor:'', - startPermlink:'', - isLoading:false, - isRefreshing:false, - } as TabMeta; + startAuthor: '', + startPermlink: '', + isLoading: false, + isRefreshing: false, +} as TabMeta; -var scrollOffset = 0; -var blockPopup = false; +let scrollOffset = 0; +let blockPopup = false; const SCROLL_POPUP_THRESHOLD = 5000; const TabContent = ({ - filterKey, + filterKey, isFeedScreen, isInitialTab, pageType, @@ -39,32 +39,31 @@ const TabContent = ({ }: TabContentProps) => { let _isMounted = true; - //redux properties const dispatch = useDispatch(); const isLoggedIn = useSelector((state) => state.application.isLoggedIn); const nsfw = useSelector((state) => state.application.nsfw); const isConnected = useSelector((state) => state.application.isConnected); const currentAccount = useSelector((state) => state.account.currentAccount); - const initPosts = useSelector((state) => state.posts.initPosts) + const initPosts = useSelector((state) => state.posts.initPosts); const username = currentAccount.username; const userPinned = currentAccount.about?.profile?.pinned; - //state const [posts, setPosts] = useState([]); const [promotedPosts, setPromotedPosts] = useState([]); const [sessionUser, setSessionUser] = useState(username); const [tabMeta, setTabMeta] = useState(DEFAULT_TAB_META); const [latestPosts, setLatestPosts] = useState([]); - const [postFetchTimer, setPostFetchTimer] = useState(0) + const [postFetchTimer, setPostFetchTimer] = useState(0); const [enableScrollTop, setEnableScrollTop] = useState(false); - const [curPinned, setCurPinned] = useState(pinnedPermlink) + const [curPinned, setCurPinned] = useState(pinnedPermlink); //refs - let postsListRef = useRef() + let postsListRef = useRef(); const appState = useRef(AppState.currentState); + const appStateSubRef = useRef() const postsRef = useRef(posts); const sessionUserRef = useRef(sessionUser); @@ -72,308 +71,296 @@ const TabContent = ({ postsRef.current = posts; sessionUserRef.current = sessionUser; - - - //side effects useEffect(() => { - if (isFeedScreen) { - AppState.addEventListener('change', _handleAppStateChange); + appStateSubRef.current = AppState.addEventListener('change', _handleAppStateChange); } _initContent(true, feedUsername); return _cleanup; - }, [tag]) - - - useEffect(()=>{ - if(isConnected && (username !== sessionUser || forceLoadPosts)){ - _initContent(false, username); - } - }, [username, forceLoadPosts]) + }, [tag]); useEffect(() => { - if(filterScrollRequest && filterScrollRequest === filterKey){ + if (isConnected && (username !== sessionUser || forceLoadPosts)) { + _initContent(false, username); + } + }, [username, forceLoadPosts]); + + useEffect(() => { + if (filterScrollRequest && filterScrollRequest === filterKey) { _scrollToTop(); - if(onScrollRequestProcessed){ + if (onScrollRequestProcessed) { onScrollRequestProcessed(); } } - }, [filterScrollRequest]) + }, [filterScrollRequest]); - useEffect(()=>{ - console.log("curPinned change", userPinned); - if(pageType === 'ownProfile' && userPinned !== curPinned ){ + useEffect(() => { + console.log('curPinned change', userPinned); + if (pageType === 'ownProfile' && userPinned !== curPinned) { _scrollToTop(); - _loadPosts({shouldReset:true, _pinnedPermlink:userPinned}) + _loadPosts({ shouldReset: true, _pinnedPermlink: userPinned }); setCurPinned(userPinned); } - },[userPinned]) - + }, [userPinned]); const _cleanup = () => { _isMounted = false; - if(postFetchTimer){ + if (postFetchTimer) { clearTimeout(postFetchTimer); } - if (isFeedScreen) { - AppState.removeEventListener('change', _handleAppStateChange); + if (isFeedScreen && appStateSubRef.current) { + appStateSubRef.current.remove(); } - } - - + }; //actions const _handleAppStateChange = (nextAppState) => { - if (appState.current.match(/inactive|background/) && nextAppState === 'active' && posts.length > 0) { + if ( + appState.current.match(/inactive|background/) && + nextAppState === 'active' && + posts.length > 0 + ) { const isLatestPostsCheck = true; _loadPosts({ - shouldReset:false, - isLatestPostsCheck + shouldReset: false, + isLatestPostsCheck, }); } appState.current = nextAppState; }; - - const _initContent = (isFirstCall = false, _feedUsername:string) => { + const _initContent = (isFirstCall = false, _feedUsername: string) => { _scrollToTop(); const initialPosts = isFirstCall && isFeedScreen && isInitialTab ? initPosts : []; setPosts(initialPosts); - setTabMeta(DEFAULT_TAB_META) + setTabMeta(DEFAULT_TAB_META); setSessionUser(_feedUsername); setLatestPosts([]); - if(postFetchTimer){ + if (postFetchTimer) { clearTimeout(postFetchTimer); } - if(username || (filterKey !== 'friends' && filterKey !== 'communities')){ + if (username || (filterKey !== 'friends' && filterKey !== 'communities')) { _loadPosts({ - shouldReset:!isFirstCall, + shouldReset: !isFirstCall, isFirstCall, - isLatestPostsCheck:false, - _feedUsername, - _posts:initialPosts, - _tabMeta:DEFAULT_TAB_META + isLatestPostsCheck: false, + _feedUsername, + _posts: initialPosts, + _tabMeta: DEFAULT_TAB_META, }); _getPromotedPosts(); } - } + }; //fetch posts from server const _loadPosts = async ({ shouldReset = false, isLatestPostsCheck = false, isFirstCall = false, - _feedUsername = isFeedScreen? sessionUserRef.current:feedUsername, + _feedUsername = isFeedScreen ? sessionUserRef.current : feedUsername, _posts = postsRef.current, _tabMeta = tabMeta, - _pinnedPermlink = curPinned - }:{ - shouldReset?:boolean; - isLatestPostsCheck?:boolean; - isFirstCall?:boolean; - _feedUsername?:string; - _posts?:any[]; - _tabMeta?:TabMeta; - _pinnedPermlink?:string + _pinnedPermlink = curPinned, + }: { + shouldReset?: boolean; + isLatestPostsCheck?: boolean; + isFirstCall?: boolean; + _feedUsername?: string; + _posts?: any[]; + _tabMeta?: TabMeta; + _pinnedPermlink?: string; }) => { const options = { - setTabMeta:(meta:TabMeta) => { - if(_isMounted){ - setTabMeta(meta) + setTabMeta: (meta: TabMeta) => { + if (_isMounted) { + setTabMeta(meta); } }, filterKey, - prevPosts:_posts, - tabMeta:_tabMeta, + prevPosts: _posts, + tabMeta: _tabMeta, isLoggedIn, nsfw, isConnected, isFeedScreen, - refreshing:shouldReset, + refreshing: shouldReset, pageType, isLatestPostsCheck, - feedUsername:_feedUsername, - pinnedPermlink:_pinnedPermlink, + feedUsername: _feedUsername, + pinnedPermlink: _pinnedPermlink, tag, - ...props - } as LoadPostsOptions + ...props, + } as LoadPostsOptions; - const result = await loadPosts(options) - if(_isMounted && result){ - if(shouldReset || isFirstCall){ + const result = await loadPosts(options); + if (_isMounted && result) { + if (shouldReset || isFirstCall) { setPosts([]); } - _postProcessLoadResult(result) + _postProcessLoadResult(result); } - } - + }; const _getPromotedPosts = async () => { - if(pageType === 'profile' || pageType === 'ownProfile' || pageType === 'community'){ + if (pageType === 'profile' || pageType === 'ownProfile' || pageType === 'community') { return; } - const pPosts = await fetchPromotedEntries(username) - if(pPosts){ - setPromotedPosts(pPosts) + const pPosts = await fetchPromotedEntries(username); + if (pPosts) { + setPromotedPosts(pPosts); } - } - - + }; //schedules post fetch - const _scheduleLatestPostsCheck = (firstPost:any) => { + const _scheduleLatestPostsCheck = (firstPost: any) => { if (firstPost) { if (postFetchTimer) { clearTimeout(postFetchTimer); } - const timeLeft = calculateTimeLeftForPostCheck(firstPost) + const timeLeft = calculateTimeLeftForPostCheck(firstPost); const _postFetchTimer = setTimeout(() => { - const isLatestPostsCheck = true; - _loadPosts({ - shouldReset:false, - isLatestPostsCheck - }); - }, - timeLeft - ); - setPostFetchTimer(_postFetchTimer) + const isLatestPostsCheck = true; + _loadPosts({ + shouldReset: false, + isLatestPostsCheck, + }); + }, timeLeft); + setPostFetchTimer(_postFetchTimer); } }; - //processes response from loadPost - const _postProcessLoadResult = ({updatedPosts, latestPosts}:any) => { + const _postProcessLoadResult = ({ updatedPosts, latestPosts }: any) => { //process new posts avatart - if(latestPosts && Array.isArray(latestPosts)){ - if(latestPosts.length > 0){ - setLatestPosts(latestPosts) - }else{ - _scheduleLatestPostsCheck(posts[0]) + if (latestPosts && Array.isArray(latestPosts)) { + if (latestPosts.length > 0) { + setLatestPosts(latestPosts); + } else { + _scheduleLatestPostsCheck(posts[0]); } } //process returned data - if(Array.isArray(updatedPosts)){ - if(updatedPosts.length){ + if (Array.isArray(updatedPosts)) { + if (updatedPosts.length) { //match new and old first post - const firstPostChanged = posts.length == 0 || (posts[0].permlink !== updatedPosts[0].permlink); + const firstPostChanged = + posts.length == 0 || posts[0].permlink !== updatedPosts[0].permlink; if (isFeedScreen && firstPostChanged) { - //schedule refetch of new posts by checking time of current post - _scheduleLatestPostsCheck(updatedPosts[0]); + //schedule refetch of new posts by checking time of current post + _scheduleLatestPostsCheck(updatedPosts[0]); - if (isInitialTab) { - dispatch(setInitPosts(updatedPosts)); - } + if (isInitialTab) { + dispatch(setInitPosts(updatedPosts)); + } } - } else if (isFeedScreen && isInitialTab){ + } else if (isFeedScreen && isInitialTab) { //clear posts cache if no first tab posts available, precautionary measure for accoutn change - dispatch(setInitPosts([])) + dispatch(setInitPosts([])); } setPosts(updatedPosts); } - } + }; - - //view related routines const _onPostsPopupPress = () => { - _scrollToTop(); - _getPromotedPosts() - setPosts([...latestPosts, ...posts]) - _scheduleLatestPostsCheck(latestPosts[0]); - setLatestPosts([]); - } + _scrollToTop(); + _getPromotedPosts(); + setPosts([...latestPosts, ...posts]); + _scheduleLatestPostsCheck(latestPosts[0]); + setLatestPosts([]); + }; const _scrollToTop = () => { postsListRef.current.scrollToTop(); setEnableScrollTop(false); scrollPopupDebouce.cancel(); blockPopup = true; - setTimeout(()=>{ + setTimeout(() => { blockPopup = false; - }, 1000) + }, 1000); }; - const _handleOnScroll = () => { - if(handleOnScroll){ - handleOnScroll() + if (handleOnScroll) { + handleOnScroll(); } - } + }; //view rendereres const _renderEmptyContent = () => { - return - } + return ; + }; + const scrollPopupDebouce = debounce( + (value) => { + setEnableScrollTop(value); + }, + 500, + { leading: true }, + ); - const scrollPopupDebouce = debounce((value)=>{ - setEnableScrollTop(value); - }, 500, {leading:true}) - - const _onScroll = (event:NativeSyntheticEvent)=>{ - var currentOffset = event.nativeEvent.contentOffset.y; - var scrollUp = currentOffset < scrollOffset; + const _onScroll = (event: NativeSyntheticEvent) => { + let currentOffset = event.nativeEvent.contentOffset.y; + let scrollUp = currentOffset < scrollOffset; scrollOffset = currentOffset; - if(scrollUp && !blockPopup && currentOffset > SCROLL_POPUP_THRESHOLD){ - scrollPopupDebouce(true) + if (scrollUp && !blockPopup && currentOffset > SCROLL_POPUP_THRESHOLD) { + scrollPopupDebouce(true); } }; // show quick reply modal - const _showQuickReplyModal = (post:any) => { + const _showQuickReplyModal = (post: any) => { if (isLoggedIn) { - dispatch(showReplyModal(post)) + dispatch(showReplyModal(post)); } else { - //TODO: show proper alert message + //TODO: show proper alert message console.log('Not LoggedIn'); } - } + }; return ( - <> - { - _loadPosts({shouldReset}) - if(shouldReset){ - _getPromotedPosts() - } - }} - onScroll={_onScroll} - onScrollEndDrag={_handleOnScroll} - isRefreshing={tabMeta.isRefreshing} - isLoading={tabMeta.isLoading} - ListEmptyComponent={_renderEmptyContent} - pageType={pageType} - showQuickReplyModal={_showQuickReplyModal} - /> - post.avatar || '')} - enableScrollTop={enableScrollTop} - onPress={_onPostsPopupPress} - onClose={()=>{ - setLatestPosts([]) - setEnableScrollTop(false); - }} - /> - + { + _loadPosts({ shouldReset }); + if (shouldReset) { + _getPromotedPosts(); + } + }} + onScroll={_onScroll} + onScrollEndDrag={_handleOnScroll} + isRefreshing={tabMeta.isRefreshing} + isLoading={tabMeta.isLoading} + ListEmptyComponent={_renderEmptyContent} + pageType={pageType} + showQuickReplyModal={_showQuickReplyModal} + /> + post.avatar || '')} + enableScrollTop={enableScrollTop} + onPress={_onPostsPopupPress} + onClose={() => { + setLatestPosts([]); + setEnableScrollTop(false); + }} + /> + ); }; export default TabContent; - diff --git a/src/components/tabbedPosts/view/tabbedPostsStyles.tsx b/src/components/tabbedPosts/view/tabbedPostsStyles.tsx index 245c3255c..aab17b116 100644 --- a/src/components/tabbedPosts/view/tabbedPostsStyles.tsx +++ b/src/components/tabbedPosts/view/tabbedPostsStyles.tsx @@ -64,12 +64,12 @@ export default EStyleSheet.create({ fontWeight: '500', color: '$white', marginHorizontal: 4, - marginBottom:2 + marginBottom: 2, }, closeIcon: { color: '$white', margin: 0, - padding: 6 + padding: 6, }, arrowUpIcon: { color: '$white', @@ -84,10 +84,10 @@ export default EStyleSheet.create({ marginLeft: -8, borderColor: '$primaryBlue', }, - emptyAnimationContainer:{ - marginTop:56 + emptyAnimationContainer: { + marginTop: 56, }, - followText:{ + followText: { color: '$borderedButtonBlue', fontSize: 12, fontFamily: '$primaryFont', @@ -96,12 +96,12 @@ export default EStyleSheet.create({ borderColor: '$borderedButtonBlue', borderWidth: 1, borderRadius: 10, - paddingVertical:2, - paddingHorizontal:12, - overflow:'hidden' + paddingVertical: 2, + paddingHorizontal: 12, + overflow: 'hidden', }, unfollowText: { - color:'$primaryDarkGray', - borderColor:'$primaryDarkGray' - } + color: '$primaryDarkGray', + borderColor: '$primaryDarkGray', + }, }); diff --git a/src/components/textInput/view/textInputView.tsx b/src/components/textInput/view/textInputView.tsx index 07b059f7e..d9a490eca 100644 --- a/src/components/textInput/view/textInputView.tsx +++ b/src/components/textInput/view/textInputView.tsx @@ -7,13 +7,13 @@ import { useAppSelector } from '../../../hooks'; import styles from './textInputStyles'; interface Props extends TextInputProps { - innerRef: Ref, - height: number, - style: TextStyle + innerRef: Ref; + height: number; + style: TextStyle; } const TextInputView = ({ innerRef, height, style, ...props }: Props) => { - const isDarkTheme = useAppSelector(state => state.application.isDarkTheme); + const isDarkTheme = useAppSelector((state) => state.application.isDarkTheme); return ( { {...props} style={[styles.input, { minHeight: height }, style]} /> - ) + ); }; export default TextInputView; diff --git a/src/components/toastNotification/view/toastNotificaitonView.js b/src/components/toastNotification/view/toastNotificaitonView.js index 8dfd04273..bbf051b2f 100644 --- a/src/components/toastNotification/view/toastNotificaitonView.js +++ b/src/components/toastNotification/view/toastNotificaitonView.js @@ -37,6 +37,7 @@ class ToastNotification extends Component { } }); }; + _hideToast = () => { const { isTop } = this.props; const finalPosition = isTop ? { top: 0 } : { bottom: 0 }; diff --git a/src/components/toggleSwitch/view/toggleSwitchView.js b/src/components/toggleSwitch/view/toggleSwitchView.js index 37f55947e..8a8faf561 100644 --- a/src/components/toggleSwitch/view/toggleSwitchView.js +++ b/src/components/toggleSwitch/view/toggleSwitchView.js @@ -1,6 +1,6 @@ import React, { PureComponent } from 'react'; import { View, TouchableOpacity, NativeModules } from 'react-native'; -import Animated, { Easing } from 'react-native-reanimated'; +import Animated, { EasingNode } from 'react-native-reanimated'; // Constants @@ -93,12 +93,12 @@ class ToggleSwitchView extends PureComponent { _triggerAnimation = () => { const { width, translateX, isOn, duration } = this.state; - const toValue = isOn ? width - (NativeModules.I18nManager.isRTL ? 100 : translateX) : 0; //in rtl layout, set the translate value to 100 + const toValue = isOn ? width - (NativeModules.I18nManager.isRTL ? 100 : translateX) : 0; // in rtl layout, set the translate value to 100 Animated.timing(this.offsetX, { toValue, duration, - easing: Easing.inOut(Easing.ease), + easing: EasingNode.inOut(EasingNode.ease), }).start(); }; diff --git a/src/components/tooltip/tooltipView.tsx b/src/components/tooltip/tooltipView.tsx index 719b2ab6a..a0c06f57a 100644 --- a/src/components/tooltip/tooltipView.tsx +++ b/src/components/tooltip/tooltipView.tsx @@ -6,6 +6,7 @@ import { registerTooltip } from '../../redux/actions/walkthroughActions'; import { Walkthrough } from '../../redux/reducers/walkthroughReducer'; import styles from './tooltipStyles'; + interface TooltipProps { children?: any; text?: string; @@ -28,7 +29,7 @@ const Tooltip = ({ children, text, walkthroughIndex }: TooltipProps, ref) => { closeTooltip() { if (!tooltipRegistered || (tooltipRegistered && !tooltipRegistered.isShown)) { const walkthrough: Walkthrough = { - walkthroughIndex: walkthroughIndex, + walkthroughIndex, isShown: true, }; dispatch(registerTooltip(walkthrough)); @@ -62,7 +63,6 @@ const Tooltip = ({ children, text, walkthroughIndex }: TooltipProps, ref) => { onClose={() => ref?.current?.closeTooltip()} fromRect={popoverAnchor} supportedOrientations={['portrait', 'landscape']} - > {text} @@ -70,4 +70,4 @@ const Tooltip = ({ children, text, walkthroughIndex }: TooltipProps, ref) => { ); }; -export default forwardRef(Tooltip as any); +export default forwardRef(Tooltip); diff --git a/src/components/transaction/transactionView.js b/src/components/transaction/transactionView.js index 41b6d4bb2..cf77e0030 100644 --- a/src/components/transaction/transactionView.js +++ b/src/components/transaction/transactionView.js @@ -22,7 +22,7 @@ const TransactionView = ({ item, index }) => { id: `wallet.${get(item, 'textKey')}`, })} description={ - (item.expires ? intl.formatMessage({ id: 'wallet.expires' }) + ' ' : '') + + (item.expires ? `${intl.formatMessage({ id: 'wallet.expires' })} ` : '') + getTimeFromNow(item.expires || item.created) } isCircleIcon diff --git a/src/components/transferAccountSelector/transferAccountSelector.tsx b/src/components/transferAccountSelector/transferAccountSelector.tsx index 7053ad4e6..38f2171e2 100644 --- a/src/components/transferAccountSelector/transferAccountSelector.tsx +++ b/src/components/transferAccountSelector/transferAccountSelector.tsx @@ -44,7 +44,7 @@ const TransferAccountSelector = ({ setIsUsernameValid, memo, setMemo, -}): JSX.Element => { +}) => { const intl = useIntl(); const _handleOnDropdownChange = (value) => { diff --git a/src/components/transferAmountInputSection/transferAmountInputSection.tsx b/src/components/transferAmountInputSection/transferAmountInputSection.tsx index 91419cba8..b82c0c6e2 100644 --- a/src/components/transferAmountInputSection/transferAmountInputSection.tsx +++ b/src/components/transferAmountInputSection/transferAmountInputSection.tsx @@ -35,12 +35,9 @@ const TransferAmountInputSection = ({ setMemo, amount, setAmount, - hsTransfer, transferType, - selectedAccount, fundType, - currentAccountName, -}): JSX.Element => { +}) => { const intl = useIntl(); const _handleOnChange = (state, val) => { diff --git a/src/components/transferAmountInputSection/transferAmountInputSectionStyles.ts b/src/components/transferAmountInputSection/transferAmountInputSectionStyles.ts index a8ea6c450..d3df54d9b 100644 --- a/src/components/transferAmountInputSection/transferAmountInputSectionStyles.ts +++ b/src/components/transferAmountInputSection/transferAmountInputSectionStyles.ts @@ -54,7 +54,7 @@ export default EStyleSheet.create({ textAlign: 'right', }, centerDescription: { - marginTop:8, + marginTop: 8, fontSize: 12, color: '$primaryBlack', fontWeight: '600', diff --git a/src/components/uploadsGalleryModal/children/uploadsGalleryContent.tsx b/src/components/uploadsGalleryModal/children/uploadsGalleryContent.tsx index e5345453a..1f79aa7ca 100644 --- a/src/components/uploadsGalleryModal/children/uploadsGalleryContent.tsx +++ b/src/components/uploadsGalleryModal/children/uploadsGalleryContent.tsx @@ -2,328 +2,321 @@ import { proxifyImageSrc } from '@ecency/render-helper'; import React, { useEffect, useRef, useState } from 'react'; import { useIntl } from 'react-intl'; import { - ActivityIndicator, - Alert, - Keyboard, - Platform, - Text, - TouchableOpacity, - View, + ActivityIndicator, + Alert, + Keyboard, + Platform, + Text, + TouchableOpacity, + View, } from 'react-native'; import { View as AnimatedView } from 'react-native-animatable'; -import Animated, { Easing } from 'react-native-reanimated'; +import Animated, { EasingNode } from 'react-native-reanimated'; import EStyleSheet from 'react-native-extended-stylesheet'; import FastImage from 'react-native-fast-image'; import { FlatList } from 'react-native-gesture-handler'; import { Icon, IconButton } from '../..'; import { UploadedMedia } from '../../../models'; import styles, { - COMPACT_HEIGHT, - EXPANDED_HEIGHT, - MAX_HORIZONTAL_THUMBS, + COMPACT_HEIGHT, + EXPANDED_HEIGHT, + MAX_HORIZONTAL_THUMBS, } from './uploadsGalleryModalStyles'; import { useMediaDeleteMutation } from '../../../providers/queries'; type Props = { - insertedMediaUrls: string[]; - mediaUploads: any[]; - indices: Map; - isAddingToUploads: boolean; - getMediaUploads: () => void; - deleteMedia: (ids: string) => Promise; - insertMedia: (map: Map) => void; - handleOpenGallery: (addToUploads?: boolean) => void; - handleOpenCamera: () => void; - handleOpenForUpload: () => void; + insertedMediaUrls: string[]; + mediaUploads: any[]; + isAddingToUploads: boolean; + insertMedia: (map: Map) => void; + handleOpenGallery: (addToUploads?: boolean) => void; + handleOpenCamera: () => void; }; const UploadsGalleryContent = ({ - insertedMediaUrls, - mediaUploads, - isAddingToUploads, - getMediaUploads, - deleteMedia, - insertMedia, - handleOpenGallery, - handleOpenCamera, + insertedMediaUrls, + mediaUploads, + isAddingToUploads, + insertMedia, + handleOpenGallery, + handleOpenCamera, }: Props) => { - const intl = useIntl(); + const intl = useIntl(); - const deleteMediaMutation = useMediaDeleteMutation(); + const deleteMediaMutation = useMediaDeleteMutation(); - const [deleteIds, setDeleteIds] = useState([]); - const [isDeleteMode, setIsDeleteMode] = useState(false); - const [isExpandedMode, setIsExpandedMode] = useState(false); + const [deleteIds, setDeleteIds] = useState([]); + const [isDeleteMode, setIsDeleteMode] = useState(false); + const [isExpandedMode, setIsExpandedMode] = useState(false); - const animatedHeightRef = useRef(new Animated.Value(COMPACT_HEIGHT)); + const animatedHeightRef = useRef(new Animated.Value(COMPACT_HEIGHT)); - const isDeleting = deleteMediaMutation.isLoading + const isDeleting = deleteMediaMutation.isLoading; - useEffect(() => { - if (isExpandedMode) { - Keyboard.dismiss(); - } - }, [isExpandedMode]); + useEffect(() => { + if (isExpandedMode) { + Keyboard.dismiss(); + } + }, [isExpandedMode]); - - const _deleteMedia = async () => { - deleteMediaMutation.mutate(deleteIds, { - onSettled: () => { - setIsDeleteMode(false); - setDeleteIds([]); - } - }); - }; + const _deleteMedia = async () => { + deleteMediaMutation.mutate(deleteIds, { + onSettled: () => { + setIsDeleteMode(false); + setDeleteIds([]); + }, + }); + }; - const _onDeletePress = async () => { - if (isDeleteMode && deleteIds.length > 0) { - const _onCancelPress = () => { - setIsDeleteMode(false); - setDeleteIds([]); - }; + const _onDeletePress = async () => { + if (isDeleteMode && deleteIds.length > 0) { + const _onCancelPress = () => { + setIsDeleteMode(false); + setDeleteIds([]); + }; - Alert.alert( - intl.formatMessage({ id: 'alert.delete' }), - intl.formatMessage({ id: 'uploads_modal.confirm_delete' }), - [ - { - text: intl.formatMessage({ id: 'alert.cancel' }), - style: 'cancel', - onPress: _onCancelPress, - }, - { - text: intl.formatMessage({ id: 'alert.confirm' }), - onPress: () => _deleteMedia(), - }, - ], - ); + Alert.alert( + intl.formatMessage({ id: 'alert.delete' }), + intl.formatMessage({ id: 'uploads_modal.confirm_delete' }), + [ + { + text: intl.formatMessage({ id: 'alert.cancel' }), + style: 'cancel', + onPress: _onCancelPress, + }, + { + text: intl.formatMessage({ id: 'alert.confirm' }), + onPress: () => _deleteMedia(), + }, + ], + ); + } else { + setIsDeleteMode(!isDeleteMode); + } + }; + + // render list item for snippet and handle actions; + const _renderItem = ({ item, index }: { item: UploadedMedia; index: number }) => { + const _onPress = () => { + if (isDeleteMode) { + const idIndex = deleteIds.indexOf(item._id); + if (idIndex >= 0) { + deleteIds.splice(idIndex, 1); } else { - setIsDeleteMode(!isDeleteMode); + deleteIds.push(item._id); } + setDeleteIds([...deleteIds]); + } else { + insertMedia(new Map([[index, true]])); + } }; - //render list item for snippet and handle actions; - const _renderItem = ({ item, index }: { item: UploadedMedia; index: number }) => { - const _onPress = () => { - if (isDeleteMode) { - const idIndex = deleteIds.indexOf(item._id); - if (idIndex >= 0) { - deleteIds.splice(idIndex, 1); - } else { - deleteIds.push(item._id); - } - setDeleteIds([...deleteIds]); - } else { - insertMedia(new Map([[index, true]])); - } - }; - - const thumbUrl = proxifyImageSrc(item.url, 600, 500, Platform.OS === 'ios' ? 'match' : 'webp'); - let isInsertedTimes = 0; - insertedMediaUrls.forEach((url) => (isInsertedTimes += url === item.url ? 1 : 0)); - const isToBeDeleted = deleteIds.indexOf(item._id) >= 0; - const transformStyle = { - transform: isToBeDeleted ? [{ scaleX: 0.7 }, { scaleY: 0.7 }] : [], - }; - - const _renderMinus = () => - isDeleteMode && ( - - - - ); - - const _renderCounter = () => - isInsertedTimes > 0 && - !isDeleteMode && ( - - {isInsertedTimes} - - ); - - return ( - - - - {_renderCounter()} - {_renderMinus()} - - - ); + const thumbUrl = proxifyImageSrc(item.url, 600, 500, Platform.OS === 'ios' ? 'match' : 'webp'); + let isInsertedTimes = 0; + insertedMediaUrls.forEach((url) => (isInsertedTimes += url === item.url ? 1 : 0)); + const isToBeDeleted = deleteIds.indexOf(item._id) >= 0; + const transformStyle = { + transform: isToBeDeleted ? [{ scaleX: 0.7 }, { scaleY: 0.7 }] : [], }; - const _renderSelectButton = (iconName: string, text: string, onPress: () => void) => { - return ( - { - onPress && onPress(); - }} - > - - - - - - - - {text} - - - ); - }; - - const _renderHeaderContent = () => ( - - - {_renderSelectButton('image', 'Gallery', handleOpenGallery)} - {_renderSelectButton('camera', 'Camera', handleOpenCamera)} - - - { - handleOpenGallery(true); - }} - /> - { - setIsDeleteMode(!isDeleteMode); - setDeleteIds([]); - }} - /> - - - {isAddingToUploads && ( - - - - )} - - {isExpandedMode && _renderExpansionButton()} - {isExpandedMode && _renderDeleteButton()} - - ); - - //render empty list placeholder - const _renderEmptyContent = () => { - return ( - <> - - {intl.formatMessage({ id: 'uploads_modal.label_no_images' })} - - - ); - }; - - const _renderExpansionButton = () => ( - + isDeleteMode && ( + + { - Animated.timing(animatedHeightRef.current, { - toValue: isExpandedMode ? COMPACT_HEIGHT : EXPANDED_HEIGHT, - duration: 300, - easing: Easing.inOut(Easing.cubic), - }).start(() => { - setIsExpandedMode(!isExpandedMode); - }); - }} - /> - ); + name="minus" + size={20} + /> + + ); - const _renderDeleteButton = () => { - if (deleteIds.length > 0) { - return isExpandedMode ? ( - 0 ? '$primaryBlack' : '$primaryBlack')} - size={32} - onPress={_onDeletePress} - isLoading={isDeleting} - /> - ) : ( - 0 ? 'slideInRight' : 'slideOutRight'} - duration={300} - style={styles.deleteButtonContainer} - > - - - ); - } - return null; - }; + const _renderCounter = () => + isInsertedTimes > 0 && + !isDeleteMode && ( + + {isInsertedTimes} + + ); return ( - - `item_${item.url}`} - renderItem={_renderItem} - style={{ flex: 1 }} - contentContainerStyle={ - isExpandedMode ? styles.gridContentContainer : styles.listContentContainer - } - ListHeaderComponent={_renderHeaderContent} - ListEmptyComponent={_renderEmptyContent} - ListFooterComponent={!isExpandedMode && mediaUploads.length > 0 && _renderExpansionButton} - extraData={deleteIds} - horizontal={!isExpandedMode} - numColumns={isExpandedMode ? 2 : 1} - keyboardShouldPersistTaps="always" - /> - - {!isExpandedMode && _renderDeleteButton()} - + + + + {_renderCounter()} + {_renderMinus()} + + ); + }; + + const _renderSelectButton = (iconName: string, text: string, onPress: () => void) => { + return ( + { + onPress && onPress(); + }} + > + + + + + + + + {text} + + + ); + }; + + const _renderHeaderContent = () => ( + + + {_renderSelectButton('image', 'Gallery', handleOpenGallery)} + {_renderSelectButton('camera', 'Camera', handleOpenCamera)} + + + { + handleOpenGallery(true); + }} + /> + { + setIsDeleteMode(!isDeleteMode); + setDeleteIds([]); + }} + /> + + + {isAddingToUploads && ( + + + + )} + + {isExpandedMode && _renderExpansionButton()} + {isExpandedMode && _renderDeleteButton()} + + ); + + // render empty list placeholder + const _renderEmptyContent = () => { + return ( + <> + + {intl.formatMessage({ id: 'uploads_modal.label_no_images' })} + + + ); + }; + + const _renderExpansionButton = () => ( + { + Animated.timing(animatedHeightRef.current, { + toValue: isExpandedMode ? COMPACT_HEIGHT : EXPANDED_HEIGHT, + duration: 300, + easing: EasingNode.inOut(EasingNode.cubic), + }).start(() => { + setIsExpandedMode(!isExpandedMode); + }); + }} + /> + ); + + const _renderDeleteButton = () => { + if (deleteIds.length > 0) { + return isExpandedMode ? ( + 0 ? '$primaryBlack' : '$primaryBlack')} + size={32} + onPress={_onDeletePress} + isLoading={isDeleting} + /> + ) : ( + 0 ? 'slideInRight' : 'slideOutRight'} + duration={300} + style={styles.deleteButtonContainer} + > + + + ); + } + return null; + }; + + return ( + + `item_${item.url}`} + renderItem={_renderItem} + style={{ flex: 1 }} + contentContainerStyle={ + isExpandedMode ? styles.gridContentContainer : styles.listContentContainer + } + ListHeaderComponent={_renderHeaderContent} + ListEmptyComponent={_renderEmptyContent} + ListFooterComponent={!isExpandedMode && mediaUploads.length > 0 && _renderExpansionButton} + extraData={deleteIds} + horizontal={!isExpandedMode} + numColumns={isExpandedMode ? 2 : 1} + keyboardShouldPersistTaps="always" + /> + + {!isExpandedMode && _renderDeleteButton()} + + ); }; export default UploadsGalleryContent; diff --git a/src/components/uploadsGalleryModal/children/uploadsGalleryModalStyles.ts b/src/components/uploadsGalleryModal/children/uploadsGalleryModalStyles.ts index 845f39d41..95c043a53 100644 --- a/src/components/uploadsGalleryModal/children/uploadsGalleryModalStyles.ts +++ b/src/components/uploadsGalleryModal/children/uploadsGalleryModalStyles.ts @@ -15,7 +15,7 @@ export default EStyleSheet.create({ }, listContentContainer: { - marginTop:8, + marginTop: 8, paddingRight: 72, paddingLeft: 16, }, @@ -30,7 +30,7 @@ export default EStyleSheet.create({ height: THUMB_SIZE, width: THUMB_SIZE, borderRadius: 16, - backgroundColor: '$primaryLightGray' + backgroundColor: '$primaryLightGray', } as ImageStyle, gridMediaItem: { @@ -39,11 +39,11 @@ export default EStyleSheet.create({ width: GRID_THUMB_SIZE, marginVertical: 8, borderRadius: 16, - backgroundColor: '$primaryLightGray' + backgroundColor: '$primaryLightGray', } as ImageStyle, inputContainer: { - flex: 1 + flex: 1, } as ViewStyle, titleInput: { color: '$primaryBlack', @@ -53,7 +53,7 @@ export default EStyleSheet.create({ paddingVertical: 0, backgroundColor: '$primaryBackgroundColor', borderBottomWidth: StyleSheet.hairlineWidth, - borderBottomColor: '$primaryDarkGray' + borderBottomColor: '$primaryDarkGray', } as TextStyle, title: { @@ -69,20 +69,19 @@ export default EStyleSheet.create({ fontSize: 16, color: '$primaryBlack', marginLeft: 12, - alignSelf:'center' + alignSelf: 'center', }, btnText: { - color: '$pureWhite' + color: '$pureWhite', } as TextStyle, saveButton: { - backgroundColor: '$primaryBlue', width: 150, paddingVertical: 16, borderRadius: 32, justifyContent: 'center', - alignItems: 'center' + alignItems: 'center', } as ViewStyle, closeButton: { @@ -90,14 +89,14 @@ export default EStyleSheet.create({ paddingVertical: 8, borderRadius: 16, justifyContent: 'center', - alignItems: 'center' + alignItems: 'center', } as ViewStyle, actionPanel: { flexDirection: 'row', justifyContent: 'flex-end', alignItems: 'center', - marginBottom: 16 + marginBottom: 16, } as ViewStyle, itemIcon: { @@ -113,8 +112,8 @@ export default EStyleSheet.create({ selectButtonsContainer: { justifyContent: 'space-around', paddingVertical: 8, - marginRight:8, - height: THUMB_SIZE + marginRight: 8, + height: THUMB_SIZE, } as ViewStyle, selectButton: { @@ -128,14 +127,14 @@ export default EStyleSheet.create({ marginTop: -16, zIndex: 2, borderRadius: 12, - backgroundColor: "$primaryBlack" + backgroundColor: '$primaryBlack', } as ViewStyle, selectButtonLabel: { fontSize: 16, textAlignVertical: 'top', color: '$primaryBlack', - marginLeft: 4 + marginLeft: 4, } as TextStyle, pillBtnContainer: { @@ -153,16 +152,15 @@ export default EStyleSheet.create({ width: THUMB_SIZE / 1.8, borderRadius: 0, borderBottomLeftRadius: 20, - borderBottomRightRadius: 20 + borderBottomRightRadius: 20, } as ViewStyle, - deleteButtonContainer: { position: 'absolute', right: 0, top: 0, bottom: 0, - justifyContent: 'center' + justifyContent: 'center', }, deleteButton: { @@ -171,14 +169,13 @@ export default EStyleSheet.create({ borderRadius: 0, borderBottomLeftRadius: 20, borderTopLeftRadius: 20, - backgroundColor: '$primaryRed' + backgroundColor: '$primaryRed', } as ViewStyle, itemIconWrapper: { justifyContent: 'center', alignItems: 'center', backgroundColor: '$primaryRed', - } as ViewStyle, minusContainer: { @@ -200,15 +197,14 @@ export default EStyleSheet.create({ height: 24, width: 24, justifyContent: 'center', - alignItems: 'center' + alignItems: 'center', } as ViewStyle, counterText: { color: '$primaryBlack', - fontSize: 16 + fontSize: 16, } as TextStyle, - checkStyle: { backgroundColor: '$white', } as ViewStyle, @@ -224,7 +220,6 @@ export default EStyleSheet.create({ marginLeft: 8, borderRadius: 20, justifyContent: 'center', - alignItems: 'center' - } as ViewStyle - -}) + alignItems: 'center', + } as ViewStyle, +}); diff --git a/src/components/uploadsGalleryModal/container/uploadsGalleryModal.tsx b/src/components/uploadsGalleryModal/container/uploadsGalleryModal.tsx index 631f12464..4586f30a9 100644 --- a/src/components/uploadsGalleryModal/container/uploadsGalleryModal.tsx +++ b/src/components/uploadsGalleryModal/container/uploadsGalleryModal.tsx @@ -12,339 +12,341 @@ import showLoginAlert from '../../../utils/showLoginAlert'; import { useMediaQuery, useMediaUploadMutation } from '../../../providers/queries'; export interface UploadsGalleryModalRef { - showModal: () => void; + showModal: () => void; } export enum MediaInsertStatus { - UPLOADING = 'UPLOADING', - READY = 'READY', - FAILED = 'FAILED', + UPLOADING = 'UPLOADING', + READY = 'READY', + FAILED = 'FAILED', } export interface MediaInsertData { - url: string; - filename?: string; - text: string; - status: MediaInsertStatus; + url: string; + filename?: string; + text: string; + status: MediaInsertStatus; } interface UploadsGalleryModalProps { - insertedMediaUrls: string[]; - paramFiles: any[]; - username: string; - isEditing: boolean; - isPreviewActive: boolean; - hideToolbarExtension: () => void; - handleMediaInsert: (data: Array) => void; - setIsUploading: (status: boolean) => void; + insertedMediaUrls: string[]; + paramFiles: any[]; + username: string; + isEditing: boolean; + isPreviewActive: boolean; + hideToolbarExtension: () => void; + handleMediaInsert: (data: Array) => void; + setIsUploading: (status: boolean) => void; } export const UploadsGalleryModal = forwardRef( - ( - { - insertedMediaUrls, - paramFiles, - username, - isEditing, - isPreviewActive, - hideToolbarExtension, - handleMediaInsert, - setIsUploading, - }: UploadsGalleryModalProps, - ref, - ) => { - const intl = useIntl(); - const dispatch = useAppDispatch(); + ( + { + insertedMediaUrls, + paramFiles, + username, + isEditing, + isPreviewActive, + hideToolbarExtension, + handleMediaInsert, + setIsUploading, + }: UploadsGalleryModalProps, + ref, + ) => { + const intl = useIntl(); + const dispatch = useAppDispatch(); - const mediaQuery = useMediaQuery(); - const mediaUploadMutation = useMediaUploadMutation(); + const mediaQuery = useMediaQuery(); + const mediaUploadMutation = useMediaUploadMutation(); - const pendingInserts = useRef([]); + const pendingInserts = useRef([]); - const [mediaUploads, setMediaUploads] = useState([]); - const [showModal, setShowModal] = useState(false); - const [isAddingToUploads, setIsAddingToUploads] = useState(false); + const [mediaUploads, setMediaUploads] = useState([]); + const [showModal, setShowModal] = useState(false); + const [isAddingToUploads, setIsAddingToUploads] = useState(false); - const isLoggedIn = useAppSelector((state) => state.application.isLoggedIn); - const pinCode = useAppSelector((state) => state.application.pin); - const currentAccount = useAppSelector((state) => state.account.currentAccount); + const isLoggedIn = useAppSelector((state) => state.application.isLoggedIn); + const pinCode = useAppSelector((state) => state.application.pin); + const currentAccount = useAppSelector((state) => state.account.currentAccount); - useImperativeHandle(ref, () => ({ - toggleModal: (value: boolean) => { - if (!isLoggedIn) { - showLoginAlert({ intl }); - return; - } + useImperativeHandle(ref, () => ({ + toggleModal: (value: boolean) => { + if (!isLoggedIn) { + showLoginAlert({ intl }); + return; + } - if (value === showModal) { - return; - } + if (value === showModal) { + return; + } - if (value) { - _getMediaUploads(); - } - setShowModal(value); + if (value) { + _getMediaUploads(); + } + setShowModal(value); + }, + })); + + useEffect(() => { + if (paramFiles) { + console.log('files : ', paramFiles); + + // delay is a workaround to let editor ready before initiating uploads on mount + delay(500).then(() => { + const _mediaItems = paramFiles.map((el) => { + if (el.filePath && el.fileName) { + const _media = { + path: el.filePath, + mime: el.mimeType, + filename: el.fileName, + }; + + return _media; + } + return null; + }); + + _handleMediaOnSelected(_mediaItems, true); + }); + } + }, [paramFiles]); + + useEffect(() => { + if (!isEditing && pendingInserts.current.length) { + handleMediaInsert(pendingInserts.current); + pendingInserts.current = []; + } + }, [isEditing]); + + const _handleOpenImagePicker = (addToUploads?: boolean) => { + ImagePicker.openPicker({ + includeBase64: true, + multiple: true, + mediaType: 'photo', + smartAlbums: ['UserLibrary', 'Favorites', 'PhotoStream', 'Panoramas', 'Bursts'], + }) + .then((images) => { + if (images && !Array.isArray(images)) { + images = [images]; + } + _handleMediaOnSelected(images, !addToUploads); + }) + .catch((e) => { + _handleMediaOnSelectFailure(e); + }); + }; + + const _handleOpenCamera = () => { + ImagePicker.openCamera({ + includeBase64: true, + mediaType: 'photo', + }) + .then((image) => { + _handleMediaOnSelected([image], true); + }) + .catch((e) => { + _handleMediaOnSelectFailure(e); + }); + }; + + const _handleMediaOnSelected = async (media: Image[], shouldInsert: boolean) => { + try { + if (!media || media.length == 0) { + throw new Error('New media items returned'); + } + + if (shouldInsert) { + setShowModal(false); + hideToolbarExtension(); + media.forEach((element, index) => { + if (element) { + media[index].filename = + element.filename || + extractFilenameFromPath({ path: element.path, mimeType: element.mime }); + handleMediaInsert([ + { + filename: element.filename, + url: '', + text: '', + status: MediaInsertStatus.UPLOADING, + }, + ]); + } + }); + } + + for (let index = 0; index < media.length; index++) { + const element = media[index]; + if (element) { + await _uploadImage(element, { shouldInsert }); + } + } + } catch (error) { + console.log('Failed to upload image', error); + + bugsnapInstance.notify(error); + } + }; + + const _uploadImage = async (media, { shouldInsert } = { shouldInsert: false }) => { + if (!isLoggedIn) return; + try { + if (setIsUploading) { + setIsUploading(true); + } + if (!shouldInsert) { + setIsAddingToUploads(true); + } + + await mediaUploadMutation.mutateAsync( + { + media, + addToUploads: !shouldInsert, + }, + { + onSuccess: (data) => { + console.log('upload successfully', data, media, shouldInsert); + if (data && data.url && shouldInsert) { + _handleMediaInsertion({ + filename: media.filename, + url: data.url, + text: '', + status: MediaInsertStatus.READY, + }); + } }, - })); - - useEffect(() => { - if (paramFiles) { - console.log('files : ', paramFiles); - - //delay is a workaround to let editor ready before initiating uploads on mount - delay(500).then(() => { - const _mediaItems = paramFiles.map((el) => { - if (el.filePath && el.fileName) { - const _media = { - path: el.filePath, - mime: el.mimeType, - filename: el.fileName, - }; - - return _media; - } - return null; - }); - - _handleMediaOnSelected(_mediaItems, true); - }); - } - }, [paramFiles]); - - useEffect(() => { - if (!isEditing && pendingInserts.current.length) { - handleMediaInsert(pendingInserts.current); - pendingInserts.current = []; - } - }, [isEditing]); - - const _handleOpenImagePicker = (addToUploads?: boolean) => { - ImagePicker.openPicker({ - includeBase64: true, - multiple: true, - mediaType: 'photo', - smartAlbums: ['UserLibrary', 'Favorites', 'PhotoStream', 'Panoramas', 'Bursts'], - }) - .then((images) => { - if (images && !Array.isArray(images)) { - images = [images]; - } - _handleMediaOnSelected(images, !addToUploads); - }) - .catch((e) => { - _handleMediaOnSelectFailure(e); - }); - }; - - const _handleOpenCamera = () => { - ImagePicker.openCamera({ - includeBase64: true, - mediaType: 'photo', - }) - .then((image) => { - _handleMediaOnSelected([image], true); - }) - .catch((e) => { - _handleMediaOnSelectFailure(e); - }); - }; - - const _handleMediaOnSelected = async (media: Image[], shouldInsert: boolean) => { - try { - if (!media || media.length == 0) { - throw new Error('New media items returned'); - } - - if (shouldInsert) { - setShowModal(false); - hideToolbarExtension(); - media.forEach((element, index) => { - if (element) { - media[index].filename = - element.filename || - extractFilenameFromPath({ path: element.path, mimeType: element.mime }); - handleMediaInsert([ - { - filename: element.filename, - url: '', - text: '', - status: MediaInsertStatus.UPLOADING, - }, - ]); - } - }); - } - - for (let index = 0; index < media.length; index++) { - const element = media[index]; - if (element) { - await _uploadImage(element, { shouldInsert }); - } - } - } catch (error) { - console.log('Failed to upload image', error); - - bugsnapInstance.notify(error); - } - }; - - const _uploadImage = async (media, { shouldInsert } = { shouldInsert: false }) => { - if (!isLoggedIn) return; - try { - if (setIsUploading) { - setIsUploading(true); - } - if (!shouldInsert) { - setIsAddingToUploads(true); - } - - await mediaUploadMutation.mutateAsync({ - media, - addToUploads: !shouldInsert - }, { - onSuccess: (data) => { - console.log('upload successfully', data, media, shouldInsert) - if (data && data.url && shouldInsert) { - _handleMediaInsertion({ - filename: media.filename, - url: data.url, - text: '', - status: MediaInsertStatus.READY, - }); - } - }, - onSettled: () => { - if (setIsUploading) { - setIsUploading(false); - } - setIsAddingToUploads(false); - }, - onError: (err) => { throw err }, - }) - - } catch (error) { - console.log('error while uploading image : ', error); - - if (error.toString().includes('code 413')) { - Alert.alert( - intl.formatMessage({ - id: 'alert.fail', - }), - intl.formatMessage({ - id: 'alert.payloadTooLarge', - }), - ); - } else if (error.toString().includes('code 429')) { - Alert.alert( - intl.formatMessage({ - id: 'alert.fail', - }), - intl.formatMessage({ - id: 'alert.quotaExceeded', - }), - ); - } else if (error.toString().includes('code 400')) { - Alert.alert( - intl.formatMessage({ - id: 'alert.fail', - }), - intl.formatMessage({ - id: 'alert.invalidImage', - }), - ); - } else { - Alert.alert( - intl.formatMessage({ - id: 'alert.fail', - }), - error.message || error.toString(), - ); - } - - if (shouldInsert) { - _handleMediaInsertion({ - filename: media.filename, - url: '', - text: '', - status: MediaInsertStatus.FAILED, - }); - } - } - }; - - const _handleMediaOnSelectFailure = (error) => { - if (error.code === 'E_PERMISSION_MISSING') { - Alert.alert( - intl.formatMessage({ - id: 'alert.permission_denied', - }), - intl.formatMessage({ - id: 'alert.permission_text', - }), - ); - } else { - Alert.alert( - intl.formatMessage({ - id: 'alert.fail', - }), - error.message || JSON.stringify(error), - ); - } - }; - - const _handleMediaInsertion = (data: MediaInsertData) => { - if (isEditing) { - pendingInserts.current.push(data); - } else if (handleMediaInsert) { - handleMediaInsert([data]); - } - }; - - - - //fetch images from server - const _getMediaUploads = async () => { - try { - if (username) { - console.log('getting images for: ' + username); - const images = await getImages(); - console.log('images received', images); - setMediaUploads(images || []); - } - } catch (err) { - console.warn('Failed to get images'); - } - setIsAddingToUploads(false); - }; - - //inserts media items in post body - const _insertMedia = async (map: Map) => { - const data: MediaInsertData[] = []; - for (const index of map.keys()) { - console.log(index); - const item = mediaUploads[index]; - data.push({ - url: item.url, - text: '', - status: MediaInsertStatus.READY, - }); - } - handleMediaInsert(data); - }; - - return ( - !isPreviewActive && - showModal && ( - - ) + onSettled: () => { + if (setIsUploading) { + setIsUploading(false); + } + setIsAddingToUploads(false); + }, + onError: (err) => { + throw err; + }, + }, ); - }, + } catch (error) { + console.log('error while uploading image : ', error); + + if (error.toString().includes('code 413')) { + Alert.alert( + intl.formatMessage({ + id: 'alert.fail', + }), + intl.formatMessage({ + id: 'alert.payloadTooLarge', + }), + ); + } else if (error.toString().includes('code 429')) { + Alert.alert( + intl.formatMessage({ + id: 'alert.fail', + }), + intl.formatMessage({ + id: 'alert.quotaExceeded', + }), + ); + } else if (error.toString().includes('code 400')) { + Alert.alert( + intl.formatMessage({ + id: 'alert.fail', + }), + intl.formatMessage({ + id: 'alert.invalidImage', + }), + ); + } else { + Alert.alert( + intl.formatMessage({ + id: 'alert.fail', + }), + error.message || error.toString(), + ); + } + + if (shouldInsert) { + _handleMediaInsertion({ + filename: media.filename, + url: '', + text: '', + status: MediaInsertStatus.FAILED, + }); + } + } + }; + + const _handleMediaOnSelectFailure = (error) => { + if (error.code === 'E_PERMISSION_MISSING') { + Alert.alert( + intl.formatMessage({ + id: 'alert.permission_denied', + }), + intl.formatMessage({ + id: 'alert.permission_text', + }), + ); + } else { + Alert.alert( + intl.formatMessage({ + id: 'alert.fail', + }), + error.message || JSON.stringify(error), + ); + } + }; + + const _handleMediaInsertion = (data: MediaInsertData) => { + if (isEditing) { + pendingInserts.current.push(data); + } else if (handleMediaInsert) { + handleMediaInsert([data]); + } + }; + + // fetch images from server + const _getMediaUploads = async () => { + try { + if (username) { + console.log(`getting images for: ${username}`); + const images = await getImages(); + console.log('images received', images); + setMediaUploads(images || []); + } + } catch (err) { + console.warn('Failed to get images'); + } + setIsAddingToUploads(false); + }; + + // inserts media items in post body + const _insertMedia = async (map: Map) => { + const data: MediaInsertData[] = []; + for (const index of map.keys()) { + console.log(index); + const item = mediaUploads[index]; + data.push({ + url: item.url, + text: '', + status: MediaInsertStatus.READY, + }); + } + handleMediaInsert(data); + }; + + return ( + !isPreviewActive && + showModal && ( + + ) + ); + }, ); diff --git a/src/components/upvote/container/upvoteContainer.js b/src/components/upvote/container/upvoteContainer.js index 2c49c7139..b17327a2c 100644 --- a/src/components/upvote/container/upvoteContainer.js +++ b/src/components/upvote/container/upvoteContainer.js @@ -40,6 +40,7 @@ const UpvoteContainer = (props) => { handleCacheVoteIncrement, fetchPost, parentType, + boldPayout, } = props; const [isVoted, setIsVoted] = useState(null); @@ -71,8 +72,8 @@ const UpvoteContainer = (props) => { useEffect(() => { const postPath = `${content.author || ''}/${content.permlink || ''}`; - //this conditional makes sure on targetted already fetched post is updated - //with new cache status, this is to avoid duplicate cache merging + // this conditional makes sure on targetted already fetched post is updated + // with new cache status, this is to avoid duplicate cache merging if ( lastCacheUpdate && lastCacheUpdate.postPath === postPath && @@ -111,13 +112,13 @@ const UpvoteContainer = (props) => { handleCacheVoteIncrement(); } - setIsDownVoted(isDownvote ? true : false); - setIsVoted(isDownvote ? false : true); + setIsDownVoted(!!isDownvote); + setIsVoted(!isDownvote); } }; const _onVote = (amount, isDownvote) => { - //do all relevant processing here to show local upvote + // do all relevant processing here to show local upvote const amountNum = parseFloat(amount); let incrementStep = 0; @@ -125,7 +126,7 @@ const UpvoteContainer = (props) => { incrementStep = 1; } - //update redux + // update redux const postPath = `${content.author || ''}/${content.permlink || ''}`; const curTime = new Date().getTime(); const vote = { @@ -165,7 +166,7 @@ const UpvoteContainer = (props) => { warnZeroPayout = true; } - //assemble breakdown + // assemble breakdown const base = get(globalProps, 'base', 0); const quote = get(globalProps, 'quote', 0); const hbdPrintRate = get(globalProps, 'hbdPrintRate', 0); @@ -213,6 +214,7 @@ const UpvoteContainer = (props) => { breakdownPayout={breakdownPayout} fetchPost={fetchPost} onVote={_onVote} + boldPayout={boldPayout} /> ); }; diff --git a/src/components/upvote/view/upvoteStyles.js b/src/components/upvote/view/upvoteStyles.js index ddc5ad62f..6d6a84ce9 100644 --- a/src/components/upvote/view/upvoteStyles.js +++ b/src/components/upvote/view/upvoteStyles.js @@ -45,10 +45,12 @@ export default EStyleSheet.create({ }, amount: { fontSize: 10, + fontWeight: 'bold', color: '$primaryDarkGray', marginLeft: 8, }, percent: { + fontWeight: 'bold', color: '$primaryDarkGray', marginRight: 5, }, @@ -79,6 +81,9 @@ export default EStyleSheet.create({ color: '$primaryDarkGray', marginLeft: 8, }, + boldText: { + fontWeight: 'bold', + }, declinedPayout: { textDecorationLine: 'line-through', textDecorationStyle: 'solid', diff --git a/src/components/upvote/view/upvoteView.tsx b/src/components/upvote/view/upvoteView.tsx index 6495a8c8a..69d5a562c 100644 --- a/src/components/upvote/view/upvoteView.tsx +++ b/src/components/upvote/view/upvoteView.tsx @@ -50,6 +50,7 @@ interface UpvoteViewProps { postUpvotePercent: number; commentUpvotePercent: number; parentType: string; + boldPayout?: boolean; } const UpvoteView = ({ @@ -76,6 +77,7 @@ const UpvoteView = ({ postUpvotePercent, commentUpvotePercent, parentType, + boldPayout, }: UpvoteViewProps) => { const intl = useIntl(); const userActivityMutation = useUserActivityMutation(); @@ -133,15 +135,15 @@ const UpvoteView = ({ const weight = sliderValue ? Math.trunc(sliderValue * 100) * 100 : 0; - console.log('casting up vote: ' + weight); + console.log(`casting up vote: ${weight}`); vote(currentAccount, pinCode, author, permlink, weight) .then((response) => { console.log('Vote response: ', response); - //record user points + // record user points userActivityMutation.mutate({ pointsTy: PointActivityIds.VOTE, - transactionId: response.id - }) + transactionId: response.id, + }); if (!response || !response.id) { Alert.alert( @@ -165,17 +167,17 @@ const UpvoteView = ({ err.response.jse_shortmsg && err.response.jse_shortmsg.includes('wait to transact') ) { - //when RC is not enough, offer boosting account + // when RC is not enough, offer boosting account setUpvote(false); setIsVoting(false); dispatch(setRcOffer(true)); } else if (err && err.jse_shortmsg && err.jse_shortmsg.includes('wait to transact')) { - //when RC is not enough, offer boosting account + // when RC is not enough, offer boosting account setUpvote(false); setIsVoting(false); dispatch(setRcOffer(true)); } else { - //when voting with same percent or other errors + // when voting with same percent or other errors if (err.message && err.message.indexOf(':') > 0) { Alert.alert( intl.formatMessage({ @@ -208,14 +210,14 @@ const UpvoteView = ({ const weight = sliderValue ? Math.trunc(sliderValue * 100) * -100 : 0; - console.log('casting down vote: ' + weight); + console.log(`casting down vote: ${weight}`); vote(currentAccount, pinCode, author, permlink, weight) .then((response) => { - //record usr points + // record usr points userActivityMutation.mutate({ pointsTy: PointActivityIds.VOTE, - transactionId: response.id - }) + transactionId: response.id, + }); setUpvote(!!sliderValue); setIsVoting(false); onVote(amount, true); @@ -304,7 +306,11 @@ const UpvoteView = ({ {isShowPayoutValue && ( } onPress={() => { openPopover(); diff --git a/src/components/userAvatar/view/userAvatarStyles.ts b/src/components/userAvatar/view/userAvatarStyles.ts index b8578471d..3e9f069b2 100644 --- a/src/components/userAvatar/view/userAvatarStyles.ts +++ b/src/components/userAvatar/view/userAvatarStyles.ts @@ -7,9 +7,9 @@ export default EStyleSheet.create({ backgroundColor: '$pureWhite', }, activityIndicator: { - position:'absolute', - alignSelf:'center', - top:0, - bottom:0 - } + position: 'absolute', + alignSelf: 'center', + top: 0, + bottom: 0, + }, }); diff --git a/src/components/userAvatar/view/userAvatarView.tsx b/src/components/userAvatar/view/userAvatarView.tsx index c16328788..3129007e8 100644 --- a/src/components/userAvatar/view/userAvatarView.tsx +++ b/src/components/userAvatar/view/userAvatarView.tsx @@ -1,8 +1,8 @@ import React from 'react'; import { ActivityIndicator, TouchableOpacity, ViewStyle } from 'react-native'; - import FastImage from 'react-native-fast-image'; +import EStyleSheet from 'react-native-extended-stylesheet'; import styles from './userAvatarStyles'; import RootNavigation from '../../../navigation/rootNavigation'; @@ -12,7 +12,6 @@ import ROUTES from '../../../constants/routeNames'; // Utils import { useAppSelector } from '../../../hooks'; -import EStyleSheet from 'react-native-extended-stylesheet'; import { getResizedAvatar } from '../../../utils/image'; const DEFAULT_IMAGE = require('../../../assets/avatar_default.png'); @@ -23,13 +22,13 @@ const DEFAULT_IMAGE = require('../../../assets/avatar_default.png'); */ interface UserAvatarProps { - username:string; - avatarUrl?:string; - size?:'xl'; - style?:ViewStyle; - disableSize?:boolean; - noAction?:boolean; - isLoading?:boolean; + username: string; + avatarUrl?: string; + size?: 'xl'; + style?: ViewStyle; + disableSize?: boolean; + noAction?: boolean; + isLoading?: boolean; } const UserAvatarView = ({ @@ -39,65 +38,61 @@ const UserAvatarView = ({ style, disableSize, noAction, - isLoading -}:UserAvatarProps) => { + isLoading, +}: UserAvatarProps) => { + const curUsername = useAppSelector((state) => state.account.currentAccount.name); + const avatarCacheStamp = useAppSelector((state) => state.ui.avatarCacheStamp); - const curUsername = useAppSelector(state=>state.account.currentAccount.name); - const avatarCacheStamp = useAppSelector(state=>state.ui.avatarCacheStamp); + // Component Functions + const _handleOnAvatarPress = (username: string) => { + const name = curUsername === username ? ROUTES.TABBAR.PROFILE : ROUTES.SCREENS.PROFILE; + RootNavigation.navigate({ + name, + params: { + username, + }, + key: username, + }); + }; - // Component Functions - const _handleOnAvatarPress = (username:string) => { - const name = curUsername === username ? ROUTES.TABBAR.PROFILE : ROUTES.SCREENS.PROFILE; - RootNavigation.navigate({ - name, - params: { - username, - }, - key: username, - }); - }; + const uri = avatarUrl || getResizedAvatar(username, 'large'); - - const uri = avatarUrl ? avatarUrl : getResizedAvatar(username, 'large'); - - const _avatar = username - ? { - uri : `${uri}${username === curUsername && avatarCacheStamp - ? ('?stamp=' + avatarCacheStamp) : '' }`, - cache : FastImage.cacheControl.web - } - : DEFAULT_IMAGE; - - let _size:number; - if (!disableSize) { - _size = 32; - if (size === 'xl') { - _size = 64; + const _avatar = username + ? { + uri: `${uri}${ + username === curUsername && avatarCacheStamp ? `?stamp=${avatarCacheStamp}` : '' + }`, + cache: FastImage.cacheControl.web, } + : DEFAULT_IMAGE; + + let _size: number; + if (!disableSize) { + _size = 32; + if (size === 'xl') { + _size = 64; } + } - - return ( - _handleOnAvatarPress(username)}> - _handleOnAvatarPress(username)}> + + {isLoading && ( + - { - isLoading && ( - - ) - } - - ); -} + )} + + ); +}; -export default UserAvatarView; \ No newline at end of file +export default UserAvatarView; diff --git a/src/components/userRibbon/userRibbon.tsx b/src/components/userRibbon/userRibbon.tsx index 4987e04ee..dd200adb7 100644 --- a/src/components/userRibbon/userRibbon.tsx +++ b/src/components/userRibbon/userRibbon.tsx @@ -12,7 +12,7 @@ const UserRibbon = ({ username, containerStyle }: UserRibbonProps) => { - {'@' + username} + {`@${username}`} ); diff --git a/src/components/videoPlayer/videoPlayerStyles.ts b/src/components/videoPlayer/videoPlayerStyles.ts index b64e4c5cf..d8b50702a 100644 --- a/src/components/videoPlayer/videoPlayerStyles.ts +++ b/src/components/videoPlayer/videoPlayerStyles.ts @@ -1,5 +1,3 @@ import EStyleSheet from 'react-native-extended-stylesheet'; -export default EStyleSheet.create({ - -}); +export default EStyleSheet.create({}); diff --git a/src/components/videoPlayer/videoPlayerView.tsx b/src/components/videoPlayer/videoPlayerView.tsx index 789c31834..b3b9b4c2f 100644 --- a/src/components/videoPlayer/videoPlayerView.tsx +++ b/src/components/videoPlayer/videoPlayerView.tsx @@ -16,7 +16,7 @@ interface VideoPlayerProps { youtubeVideoId?: string; startTime?: number; uri?: string; - //prop for youtube player + // prop for youtube player disableAutoplay?: boolean; } @@ -59,7 +59,7 @@ const VideoPlayer = ({ const [shouldPlay, setShouldPlay] = useState(false); const _onReady = () => { setIsLoading(false); - setShouldPlay(disableAutoplay ? false : true); + setShouldPlay(!disableAutoplay); console.log('ready'); }; @@ -131,7 +131,7 @@ const VideoPlayer = ({