backup
parent
d4101bf478
commit
0a32b9dc63
|
@ -81,7 +81,7 @@ project.ext.react = [
|
|||
enableHermes: false, // clean and rebuild if changing
|
||||
]
|
||||
|
||||
apply from: "../../node_modules/react-native/react.gradle"
|
||||
apply from: "./react.gradle"
|
||||
|
||||
/**
|
||||
* Set this to true to create two separate APKs instead of one:
|
||||
|
|
|
@ -0,0 +1,423 @@
|
|||
/*
|
||||
* Copyright (c) Facebook, Inc. and its affiliates.
|
||||
*
|
||||
* This source code is licensed under the MIT license found in the
|
||||
* LICENSE file in the root directory of this source tree.
|
||||
*/
|
||||
|
||||
import org.apache.tools.ant.taskdefs.condition.Os
|
||||
|
||||
def config = project.hasProperty("react") ? project.react : [:];
|
||||
|
||||
def detectEntryFile(config) {
|
||||
if (System.getenv('ENTRY_FILE')) {
|
||||
return System.getenv('ENTRY_FILE')
|
||||
} else if (config.entryFile) {
|
||||
return config.entryFile
|
||||
} else if ((new File("${projectDir}/../../index.android.js")).exists()) {
|
||||
return "index.android.js"
|
||||
}
|
||||
|
||||
return "index.js";
|
||||
}
|
||||
|
||||
/**
|
||||
* Detects CLI location in a similar fashion to the React Native CLI
|
||||
*/
|
||||
def detectCliPath(config) {
|
||||
if (config.cliPath) {
|
||||
return "${projectDir}/${config.cliPath}"
|
||||
}
|
||||
if (new File("${projectDir}/../../node_modules/react-native/cli.js").exists()) {
|
||||
return "${projectDir}/../../node_modules/react-native/cli.js"
|
||||
}
|
||||
throw new Exception("Couldn't determine CLI location. " +
|
||||
"Please set `project.ext.react.cliPath` to the path of the react-native cli.js");
|
||||
}
|
||||
|
||||
def composeSourceMapsPath = config.composeSourceMapsPath ?: "node_modules/react-native/scripts/compose-source-maps.js"
|
||||
def bundleAssetName = config.bundleAssetName ?: "index.android.bundle"
|
||||
def entryFile = detectEntryFile(config)
|
||||
def bundleCommand = config.bundleCommand ?: "bundle"
|
||||
def reactRoot = file(config.root ?: "../../")
|
||||
def inputExcludes = config.inputExcludes ?: ["android/**", "ios/**"]
|
||||
def bundleConfig = config.bundleConfig ? "${reactRoot}/${config.bundleConfig}" : null ;
|
||||
def enableVmCleanup = config.enableVmCleanup == null ? true : config.enableVmCleanup
|
||||
def hermesCommand = config.hermesCommand ?: "../../node_modules/hermes-engine/%OS-BIN%/hermesc"
|
||||
|
||||
def reactNativeDevServerPort() {
|
||||
def value = project.getProperties().get("reactNativeDevServerPort")
|
||||
return value != null ? value : "8081"
|
||||
}
|
||||
|
||||
def reactNativeInspectorProxyPort() {
|
||||
def value = project.getProperties().get("reactNativeInspectorProxyPort")
|
||||
return value != null ? value : reactNativeDevServerPort()
|
||||
}
|
||||
|
||||
def getHermesOSBin() {
|
||||
if (Os.isFamily(Os.FAMILY_WINDOWS)) return "win64-bin";
|
||||
if (Os.isFamily(Os.FAMILY_MAC)) return "osx-bin";
|
||||
if (Os.isOs(null, "linux", "amd64", null)) return "linux64-bin";
|
||||
throw new Exception("OS not recognized. Please set project.ext.react.hermesCommand " +
|
||||
"to the path of a working Hermes compiler.");
|
||||
}
|
||||
|
||||
// Make sure not to inspect the Hermes config unless we need it,
|
||||
// to avoid breaking any JSC-only setups.
|
||||
def getHermesCommand = {
|
||||
// If the project specifies a Hermes command, don't second guess it.
|
||||
if (!hermesCommand.contains("%OS-BIN%")) {
|
||||
return hermesCommand
|
||||
}
|
||||
|
||||
// Execution on Windows fails with / as separator
|
||||
return hermesCommand
|
||||
.replaceAll("%OS-BIN%", getHermesOSBin())
|
||||
.replace('/' as char, File.separatorChar);
|
||||
}
|
||||
|
||||
// Set enableHermesForVariant to a function to configure per variant,
|
||||
// or set `enableHermes` to True/False to set all of them
|
||||
def enableHermesForVariant = config.enableHermesForVariant ?: {
|
||||
def variant -> config.enableHermes ?: false
|
||||
}
|
||||
|
||||
// Set hermesFlagsForVariant to a function to configure per variant,
|
||||
// or set `hermesFlagsRelease` and `hermesFlagsDebug` to an array
|
||||
def hermesFlagsForVariant = config.hermesFlagsForVariant ?: {
|
||||
def variant ->
|
||||
def hermesFlags;
|
||||
if (variant.name.toLowerCase().contains("release")) {
|
||||
// Can't use ?: since that will also substitute valid empty lists
|
||||
hermesFlags = config.hermesFlagsRelease
|
||||
if (hermesFlags == null) hermesFlags = ["-O", "-output-source-map"]
|
||||
} else {
|
||||
hermesFlags = config.hermesFlagsDebug
|
||||
if (hermesFlags == null) hermesFlags = []
|
||||
}
|
||||
return hermesFlags
|
||||
}
|
||||
|
||||
// Set deleteDebugFilesForVariant to a function to configure per variant,
|
||||
// defaults to True for Release variants and False for debug variants
|
||||
def deleteDebugFilesForVariant = config.deleteDebugFilesForVariant ?: {
|
||||
def variant -> variant.name.toLowerCase().contains("release")
|
||||
}
|
||||
|
||||
android {
|
||||
buildTypes.all {
|
||||
resValue "integer", "react_native_dev_server_port", reactNativeDevServerPort()
|
||||
resValue "integer", "react_native_inspector_proxy_port", reactNativeInspectorProxyPort()
|
||||
}
|
||||
}
|
||||
|
||||
afterEvaluate {
|
||||
def isAndroidLibrary = plugins.hasPlugin("com.android.library")
|
||||
def variants = isAndroidLibrary ? android.libraryVariants : android.applicationVariants
|
||||
variants.all { def variant ->
|
||||
// Create variant and target names
|
||||
def targetName = variant.name.capitalize()
|
||||
def targetPath = variant.dirName
|
||||
|
||||
// React js bundle directories
|
||||
def jsBundleDir = file("$buildDir/generated/assets/react/${targetPath}")
|
||||
def resourcesDir = file("$buildDir/generated/res/react/${targetPath}")
|
||||
|
||||
def jsBundleFile = file("$jsBundleDir/$bundleAssetName")
|
||||
def jsSourceMapsDir = file("$buildDir/generated/sourcemaps/react/${targetPath}")
|
||||
def jsIntermediateSourceMapsDir = file("$buildDir/intermediates/sourcemaps/react/${targetPath}")
|
||||
def jsPackagerSourceMapFile = file("$jsIntermediateSourceMapsDir/${bundleAssetName}.packager.map")
|
||||
def jsCompilerSourceMapFile = file("$jsIntermediateSourceMapsDir/${bundleAssetName}.compiler.map")
|
||||
def jsOutputSourceMapFile = file("$jsSourceMapsDir/${bundleAssetName}.map")
|
||||
|
||||
// Additional node and packager commandline arguments
|
||||
def nodeExecutableAndArgs = config.nodeExecutableAndArgs ?: ["node"]
|
||||
def cliPath = detectCliPath(config)
|
||||
|
||||
def execCommand = []
|
||||
|
||||
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
||||
execCommand.addAll(["cmd", "/c", *nodeExecutableAndArgs, cliPath])
|
||||
} else {
|
||||
execCommand.addAll([*nodeExecutableAndArgs, cliPath])
|
||||
}
|
||||
|
||||
def enableHermes = enableHermesForVariant(variant)
|
||||
|
||||
def currentBundleTask = tasks.create(
|
||||
name: "bundle${targetName}JsAndAssets",
|
||||
type: Exec) {
|
||||
group = "react"
|
||||
description = "bundle JS and assets for ${targetName}."
|
||||
|
||||
// Create dirs if they are not there (e.g. the "clean" task just ran)
|
||||
doFirst {
|
||||
jsBundleDir.deleteDir()
|
||||
jsBundleDir.mkdirs()
|
||||
resourcesDir.deleteDir()
|
||||
resourcesDir.mkdirs()
|
||||
jsIntermediateSourceMapsDir.deleteDir()
|
||||
jsIntermediateSourceMapsDir.mkdirs()
|
||||
jsSourceMapsDir.deleteDir()
|
||||
jsSourceMapsDir.mkdirs()
|
||||
}
|
||||
|
||||
doLast {
|
||||
def flavorPathSegment = ""
|
||||
println targetName.toLowerCase();
|
||||
android.productFlavors.all { flavor ->
|
||||
if (targetName.toLowerCase().contains(flavor.name.toLowerCase())) {
|
||||
flavorPathSegment = flavor.name
|
||||
}
|
||||
}
|
||||
def moveFunc = { resFolder ->
|
||||
File originalDir = file("${buildDir}/generated/res/react/${flavorPathSegment}/release/${resFolder}");
|
||||
if (originalDir.exists()) {
|
||||
File destDir = file("${buildDir}/../src/main/res/${resFolder}");
|
||||
ant.move(file: originalDir, tofile: destDir);
|
||||
}
|
||||
}
|
||||
|
||||
moveFunc.curry("drawable").call()
|
||||
moveFunc.curry("drawable-ldpi").call()
|
||||
moveFunc.curry("drawable-mdpi").call()
|
||||
moveFunc.curry("drawable-hdpi").call()
|
||||
moveFunc.curry("drawable-xhdpi").call()
|
||||
moveFunc.curry("drawable-xxhdpi").call()
|
||||
moveFunc.curry("drawable-xxxhdpi").call()
|
||||
moveFunc.curry("raw").call()
|
||||
}
|
||||
|
||||
|
||||
// Set up inputs and outputs so gradle can cache the result
|
||||
inputs.files fileTree(dir: reactRoot, excludes: inputExcludes)
|
||||
outputs.dir(jsBundleDir)
|
||||
outputs.dir(resourcesDir)
|
||||
|
||||
// Set up the call to the react-native cli
|
||||
workingDir(reactRoot)
|
||||
|
||||
// Set up dev mode
|
||||
def devEnabled = !(config."devDisabledIn${targetName}"
|
||||
|| targetName.toLowerCase().contains("release"))
|
||||
|
||||
def extraArgs = []
|
||||
|
||||
if (bundleConfig) {
|
||||
extraArgs.add("--config")
|
||||
extraArgs.add(bundleConfig)
|
||||
}
|
||||
|
||||
// Hermes doesn't require JS minification.
|
||||
if (enableHermes && !devEnabled) {
|
||||
extraArgs.add("--minify")
|
||||
extraArgs.add("false")
|
||||
}
|
||||
|
||||
if (config.extraPackagerArgs) {
|
||||
extraArgs.addAll(config.extraPackagerArgs)
|
||||
}
|
||||
|
||||
commandLine(*execCommand, bundleCommand, "--platform", "android", "--dev", "${devEnabled}",
|
||||
"--reset-cache", "--entry-file", entryFile, "--bundle-output", jsBundleFile, "--assets-dest", resourcesDir,
|
||||
"--sourcemap-output", enableHermes ? jsPackagerSourceMapFile : jsOutputSourceMapFile, *extraArgs)
|
||||
|
||||
|
||||
if (enableHermes) {
|
||||
doLast {
|
||||
def hermesFlags = hermesFlagsForVariant(variant)
|
||||
def hbcTempFile = file("${jsBundleFile}.hbc")
|
||||
exec {
|
||||
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
||||
commandLine("cmd", "/c", getHermesCommand(), "-emit-binary", "-out", hbcTempFile, jsBundleFile, *hermesFlags)
|
||||
} else {
|
||||
commandLine(getHermesCommand(), "-emit-binary", "-out", hbcTempFile, jsBundleFile, *hermesFlags)
|
||||
}
|
||||
}
|
||||
ant.move(
|
||||
file: hbcTempFile,
|
||||
toFile: jsBundleFile
|
||||
);
|
||||
if (hermesFlags.contains("-output-source-map")) {
|
||||
ant.move(
|
||||
// Hermes will generate a source map with this exact name
|
||||
file: "${jsBundleFile}.hbc.map",
|
||||
tofile: jsCompilerSourceMapFile
|
||||
);
|
||||
exec {
|
||||
// TODO: set task dependencies for caching
|
||||
|
||||
// Set up the call to the compose-source-maps script
|
||||
workingDir(reactRoot)
|
||||
if (Os.isFamily(Os.FAMILY_WINDOWS)) {
|
||||
commandLine("cmd", "/c", *nodeExecutableAndArgs, composeSourceMapsPath, jsPackagerSourceMapFile, jsCompilerSourceMapFile, "-o", jsOutputSourceMapFile)
|
||||
} else {
|
||||
commandLine(*nodeExecutableAndArgs, composeSourceMapsPath, jsPackagerSourceMapFile, jsCompilerSourceMapFile, "-o", jsOutputSourceMapFile)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
enabled config."bundleIn${targetName}" != null
|
||||
? config."bundleIn${targetName}"
|
||||
: config."bundleIn${variant.buildType.name.capitalize()}" != null
|
||||
? config."bundleIn${variant.buildType.name.capitalize()}"
|
||||
: targetName.toLowerCase().contains("release")
|
||||
}
|
||||
|
||||
// Expose a minimal interface on the application variant and the task itself:
|
||||
variant.ext.bundleJsAndAssets = currentBundleTask
|
||||
currentBundleTask.ext.generatedResFolders = files(resourcesDir).builtBy(currentBundleTask)
|
||||
currentBundleTask.ext.generatedAssetsFolders = files(jsBundleDir).builtBy(currentBundleTask)
|
||||
|
||||
// registerGeneratedResFolders for Android plugin 3.x
|
||||
if (variant.respondsTo("registerGeneratedResFolders")) {
|
||||
variant.registerGeneratedResFolders(currentBundleTask.generatedResFolders)
|
||||
} else {
|
||||
variant.registerResGeneratingTask(currentBundleTask)
|
||||
}
|
||||
variant.mergeResourcesProvider.get().dependsOn(currentBundleTask)
|
||||
|
||||
// packageApplication for Android plugin 3.x
|
||||
def packageTask = variant.hasProperty("packageApplication")
|
||||
? variant.packageApplicationProvider.get()
|
||||
: tasks.findByName("package${targetName}")
|
||||
if (variant.hasProperty("packageLibrary")) {
|
||||
packageTask = variant.packageLibrary
|
||||
}
|
||||
|
||||
// pre bundle build task for Android plugin 3.2+
|
||||
def buildPreBundleTask = tasks.findByName("build${targetName}PreBundle")
|
||||
|
||||
def resourcesDirConfigValue = config."resourcesDir${targetName}"
|
||||
if (resourcesDirConfigValue) {
|
||||
def currentCopyResTask = tasks.create(
|
||||
name: "copy${targetName}BundledResources",
|
||||
type: Copy) {
|
||||
group = "react"
|
||||
description = "copy bundled resources into custom location for ${targetName}."
|
||||
|
||||
from(resourcesDir)
|
||||
into(file(resourcesDirConfigValue))
|
||||
|
||||
dependsOn(currentBundleTask)
|
||||
|
||||
enabled(currentBundleTask.enabled)
|
||||
}
|
||||
|
||||
packageTask.dependsOn(currentCopyResTask)
|
||||
if (buildPreBundleTask != null) {
|
||||
buildPreBundleTask.dependsOn(currentCopyResTask)
|
||||
}
|
||||
}
|
||||
|
||||
def currentAssetsCopyTask = tasks.create(
|
||||
name: "copy${targetName}BundledJs",
|
||||
type: Copy) {
|
||||
group = "react"
|
||||
description = "copy bundled JS into ${targetName}."
|
||||
|
||||
if (config."jsBundleDir${targetName}") {
|
||||
from(jsBundleDir)
|
||||
into(file(config."jsBundleDir${targetName}"))
|
||||
} else {
|
||||
into ("$buildDir/intermediates")
|
||||
if (isAndroidLibrary) {
|
||||
into ("library_assets/${variant.name}/out") {
|
||||
from(jsBundleDir)
|
||||
}
|
||||
} else {
|
||||
into ("assets/${targetPath}") {
|
||||
from(jsBundleDir)
|
||||
}
|
||||
|
||||
// Workaround for Android Gradle Plugin 3.2+ new asset directory
|
||||
into ("merged_assets/${variant.name}/merge${targetName}Assets/out") {
|
||||
from(jsBundleDir)
|
||||
}
|
||||
|
||||
// Workaround for Android Gradle Plugin 3.4+ new asset directory
|
||||
into ("merged_assets/${variant.name}/out") {
|
||||
from(jsBundleDir)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// mergeAssets must run first, as it clears the intermediates directory
|
||||
dependsOn(variant.mergeAssetsProvider.get())
|
||||
|
||||
enabled(currentBundleTask.enabled)
|
||||
dependsOn(currentBundleTask)
|
||||
}
|
||||
|
||||
// mergeResources task runs before the bundle file is copied to the intermediate asset directory from Android plugin 4.1+.
|
||||
// This ensures to copy the bundle file before mergeResources task starts
|
||||
def mergeResourcesTask = tasks.findByName("merge${targetName}Resources")
|
||||
mergeResourcesTask.dependsOn(currentAssetsCopyTask)
|
||||
|
||||
packageTask.dependsOn(currentAssetsCopyTask)
|
||||
if (buildPreBundleTask != null) {
|
||||
buildPreBundleTask.dependsOn(currentAssetsCopyTask)
|
||||
}
|
||||
|
||||
// Delete the VM related libraries that this build doesn't need.
|
||||
// The application can manage this manually by setting 'enableVmCleanup: false'
|
||||
//
|
||||
// This should really be done by packaging all Hermes related libs into
|
||||
// two separate HermesDebug and HermesRelease AARs, but until then we'll
|
||||
// kludge it by deleting the .so files out of the /transforms/ directory.
|
||||
def cleanup = deleteDebugFilesForVariant(variant)
|
||||
|
||||
def vmSelectionAction = { libDir ->
|
||||
fileTree(libDir).matching {
|
||||
if (enableHermes) {
|
||||
// For Hermes, delete all the libjsc* files
|
||||
include "**/libjsc*.so"
|
||||
|
||||
if (cleanup) {
|
||||
// Reduce size by deleting the debugger/inspector
|
||||
include '**/libhermes-inspector.so'
|
||||
include '**/libhermes-executor-debug.so'
|
||||
include '**/libhermes-executor-common-debug.so'
|
||||
} else {
|
||||
// Release libs take precedence and must be removed
|
||||
// to allow debugging
|
||||
include '**/libhermes-executor-release.so'
|
||||
include '**/libhermes-executor-common-release.so'
|
||||
}
|
||||
} else {
|
||||
// For JSC, delete all the libhermes* files
|
||||
include "**/libhermes*.so"
|
||||
}
|
||||
}.visit { details ->
|
||||
def targetVariant1 = ".*/transforms/[^/]*/${targetPath}/.*"
|
||||
def targetVariant2 = ".*/merged_native_libs/${targetPath}/out/lib/.*"
|
||||
def targetVariant3 = ".*/stripped_native_libs/${targetPath}/out/lib/.*"
|
||||
def path = details.file.getAbsolutePath().replace(File.separatorChar, '/' as char)
|
||||
if ((path.matches(targetVariant1) || path.matches(targetVariant2) || path.matches(targetVariant3)) && details.file.isFile()) {
|
||||
details.file.delete()
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (enableVmCleanup) {
|
||||
def task = tasks.findByName("package${targetName}")
|
||||
def transformsLibDir = "$buildDir/intermediates/transforms/"
|
||||
task.doFirst { vmSelectionAction(transformsLibDir) }
|
||||
|
||||
def sTask = tasks.findByName("strip${targetName}DebugSymbols")
|
||||
if (sTask != null) {
|
||||
def strippedLibDir = "$buildDir/intermediates/stripped_native_libs/${targetPath}/out/lib/"
|
||||
sTask.doLast { vmSelectionAction(strippedLibDir) }
|
||||
}
|
||||
|
||||
def mTask = tasks.findByName("merge${targetName}NativeLibs")
|
||||
if (mTask != null) {
|
||||
def mergedLibDir = "$buildDir/intermediates/merged_native_libs/${targetPath}/out/lib/"
|
||||
mTask.doLast { vmSelectionAction(mergedLibDir) }
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
File diff suppressed because one or more lines are too long
|
@ -8,7 +8,6 @@ import com.github.wumke.RNImmediatePhoneCall.RNImmediatePhoneCallPackage;
|
|||
import in.sriraman.sharedpreferences.RNSharedPreferencesReactPackage;
|
||||
import com.github.amarcruz.rnlog.RNLogPackage;
|
||||
import com.wix.reactnativenotifications.RNNotificationsPackage;
|
||||
import com.voximplant.foregroundservice.VIForegroundServicePackage;
|
||||
import com.react.SmsPackage;
|
||||
import com.oblador.vectoricons.VectorIconsPackage;
|
||||
import com.reactnativecommunity.asyncstorage.AsyncStoragePackage;
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
"scripts": {
|
||||
"android": "react-native run-android",
|
||||
"start": "react-native start",
|
||||
"build:dev": "react-native bundle --platform android --dev false --entry-file index.js --bundle-output android/app/src/main/assets/index.android.bundle --assets-dest android/app/src/main/res",
|
||||
"test": "jest",
|
||||
"lint": "eslint ."
|
||||
},
|
||||
|
@ -14,7 +15,6 @@
|
|||
"@react-navigation/material-top-tabs": "^6.1.1",
|
||||
"@react-navigation/native": "^6.0.8",
|
||||
"@reduxjs/toolkit": "^1.8.0",
|
||||
"@voximplant/react-native-foreground-service": "^2.0.0",
|
||||
"babel-plugin-require-context-hook": "^1.0.0",
|
||||
"react": "17.0.2",
|
||||
"react-native": "0.67.3",
|
||||
|
|
|
@ -69,12 +69,15 @@ export const App = () => {
|
|||
// if active device availabe fetch data fro sms
|
||||
if (deviceActive !== -1) {
|
||||
// read SMS
|
||||
const SMSs = await useSMSRead({ phone: devices[deviceActive].phone });
|
||||
// if there were report SMSs
|
||||
const SMSs = await useSMSRead({ phone: '' }); // if there were report SMSs
|
||||
if (SMSs.count !== 0) {
|
||||
let _reports = [];
|
||||
for (let i = 0; i < SMSs.list.length; i++) {
|
||||
_reports.push(useSMSData(SMSs.list[i].body)); // convert each string sms to readable data
|
||||
const text = SMSs.list[i].body;
|
||||
if (text.includes('Hum:') && SMSs.list[i].address === devices[deviceActive].phone) {
|
||||
let _data = useSMSData(SMSs.list[i].body);
|
||||
if (_data.date.length !== 0) _reports.push(_data); // convert each string sms to readable data
|
||||
}
|
||||
}
|
||||
setReports(_reports.reverse());
|
||||
setSelectedReport(0); // select last report as selected report
|
||||
|
|
|
@ -1,26 +0,0 @@
|
|||
import VIForegroundService from '@voximplant/react-native-foreground-service';
|
||||
import { Platform } from 'react-native';
|
||||
|
||||
export const StartForegroundService = async () => {
|
||||
if (Platform.Version >= 26) {
|
||||
const channelConfig = {
|
||||
id: 'ForegroundServiceChannel',
|
||||
name: 'Notification Channel',
|
||||
description: 'Notification Channel for Foreground Service',
|
||||
enableVibration: false,
|
||||
importance: 2,
|
||||
};
|
||||
await VIForegroundService.createNotificationChannel(channelConfig);
|
||||
}
|
||||
const notificationConfig = {
|
||||
id: 3456,
|
||||
title: 'Foreground Service',
|
||||
text: 'Foreground service is running',
|
||||
icon: 'ic_notification',
|
||||
priority: 0,
|
||||
};
|
||||
if (Platform.Version >= 26) {
|
||||
notificationConfig.channelId = 'ForegroundServiceChannel';
|
||||
}
|
||||
await VIForegroundService.startService(notificationConfig);
|
||||
};
|
|
@ -12,16 +12,20 @@ export const useSMSData = (text) => {
|
|||
|
||||
if (!text || typeof text !== 'string') return output;
|
||||
|
||||
const splitBreakLines = text.split('\n');
|
||||
try {
|
||||
const splitBreakLines = text.split('\n');
|
||||
|
||||
output.day = splitBreakLines[0].trim();
|
||||
output.date = splitBreakLines[1].trim();
|
||||
output.day = splitBreakLines[0].trim();
|
||||
output.date = splitBreakLines[1].trim();
|
||||
|
||||
for (let i = 3; i < splitBreakLines.length; i++) {
|
||||
output.data.push(translateDataRow(splitBreakLines[i].trim()));
|
||||
for (let i = 3; i < splitBreakLines.length; i++) {
|
||||
output.data.push(translateDataRow(splitBreakLines[i].trim()));
|
||||
}
|
||||
|
||||
return output;
|
||||
} catch (error) {
|
||||
return output;
|
||||
}
|
||||
|
||||
return output;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -95,7 +95,7 @@ public class SmsModule extends ReactContextBaseJavaModule /*implements LoaderMan
|
|||
matchFilter = fread == cursor.getInt(cursor.getColumnIndex("read"));
|
||||
else if (faddress != null && !faddress.isEmpty())
|
||||
// matchFilter = faddress.equals(cursor.getString(cursor.getColumnIndex("address")).trim());
|
||||
matchFilter = cursor.getString(cursor.getColumnIndex("address")).matches(faddress);
|
||||
matchFilter = cursor.getString(cursor.getColumnIndex("address")).equals(faddress);
|
||||
else if (fcontent != null && !fcontent.isEmpty())
|
||||
matchFilter = fcontent.equals(cursor.getString(cursor.getColumnIndex("body")).trim());
|
||||
|
||||
|
|
|
@ -31,7 +31,11 @@ export const Settings = () => {
|
|||
if (data) {
|
||||
const _devices = [...devices];
|
||||
|
||||
const { name, phone } = data;
|
||||
let { name, phone } = data;
|
||||
|
||||
if (phone.slice(0, 1) === '0') {
|
||||
phone = '+98' + phone.slice(1, phone.length);
|
||||
}
|
||||
|
||||
if (selected === -1) {
|
||||
// wants to add a device
|
||||
|
|
|
@ -1494,11 +1494,6 @@
|
|||
dependencies:
|
||||
eslint-visitor-keys "^1.1.0"
|
||||
|
||||
"@voximplant/react-native-foreground-service@^2.0.0":
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/@voximplant/react-native-foreground-service/-/react-native-foreground-service-2.0.0.tgz#06da5b121231a8ffcb13bc792ce67c37f1fbb2d8"
|
||||
integrity sha512-V7hpxvYVsIvbpJaIlhjl4BUsWEzPYKIIfWZOYm0s93VEBmp548xx8f5hSeVuhaR6NqveibxVNr+J011ej/yc2g==
|
||||
|
||||
abab@^2.0.3, abab@^2.0.5:
|
||||
version "2.0.5"
|
||||
resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a"
|
||||
|
|
Loading…
Reference in New Issue