diff --git a/android/app/build.gradle b/android/app/build.gradle
index e048597..47e1108 100755
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -18,7 +18,7 @@ def keystorePropertiesFile = rootProject.file("key.properties")
def keystoreProperties = new Properties()
keystoreProperties.load(new FileInputStream(keystorePropertiesFile))
android {
- compileSdkVersion 28
+ compileSdkVersion 29
lintOptions {
disable 'InvalidPackage'
@@ -27,7 +27,7 @@ android {
defaultConfig {
applicationId "team.whatever.sms_forwarder_app"
minSdkVersion 21
- targetSdkVersion 28
+ targetSdkVersion 29
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 5c0a9a7..825e3ee 100755
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -39,5 +39,12 @@
+
+
+
+
+
+
diff --git a/ios/Flutter/flutter_export_environment.sh b/ios/Flutter/flutter_export_environment.sh
index ad749ea..2e49317 100755
--- a/ios/Flutter/flutter_export_environment.sh
+++ b/ios/Flutter/flutter_export_environment.sh
@@ -5,10 +5,8 @@ export "FLUTTER_APPLICATION_PATH=/home/george/projects/sms_forwarder_app"
export "FLUTTER_TARGET=lib/main.dart"
export "FLUTTER_BUILD_DIR=build"
export "SYMROOT=${SOURCE_ROOT}/../build/ios"
-export "OTHER_LDFLAGS=$(inherited) -framework Flutter"
-export "FLUTTER_FRAMEWORK_DIR=/opt/flutter/bin/cache/artifacts/engine/ios"
-export "FLUTTER_BUILD_NAME=1.0.0"
-export "FLUTTER_BUILD_NUMBER=1"
+export "FLUTTER_BUILD_NAME=1.4.0"
+export "FLUTTER_BUILD_NUMBER=1.4.0"
export "DART_OBFUSCATION=false"
export "TRACK_WIDGET_CREATION=false"
export "TREE_SHAKE_ICONS=false"
diff --git a/lib/background_forwarder.dart b/lib/background_forwarder.dart
new file mode 100644
index 0000000..abd2b1d
--- /dev/null
+++ b/lib/background_forwarder.dart
@@ -0,0 +1,67 @@
+import 'package:telephony/telephony.dart';
+
+import 'forwarding.dart';
+import 'manager.dart';
+
+/// A wrapper for [ForwarderManager] that registers a background message handler.
+/// Resets the background forwarder every time a field is updated.
+class BackgroundForwarder {
+ static ForwarderManager _backgroundManager;
+ final ForwarderManager mgr = new ForwarderManager();
+
+ BackgroundForwarder(Telephony telephony) {
+ telephony.listenIncomingSms(
+ onNewMessage: (msg) async => await mgr.forward(msg),
+ onBackgroundMessage: onBackgroundMessage
+ );
+ }
+
+ static void onBackgroundMessage(SmsMessage msg) async {
+ if (_backgroundManager == null) {
+ _backgroundManager = new ForwarderManager();
+ await _backgroundManager.loadFromPrefs();
+ }
+ await _backgroundManager.forward(msg);
+ }
+
+ HttpCallbackForwarder get httpCallbackForwarder => mgr.httpCallbackForwarder;
+
+ TelegramBotForwarder get telegramBotForwarder => mgr.telegramBotForwarder;
+
+ DeployedTelegramBotForwarder get deployedTelegramBotForwarder =>
+ mgr.deployedTelegramBotForwarder;
+
+ set httpCallbackForwarder(HttpCallbackForwarder fwd) {
+ mgr.httpCallbackForwarder = fwd;
+ invalidateBackgroundManager();
+ }
+
+ set telegramBotForwarder(TelegramBotForwarder fwd) {
+ mgr.telegramBotForwarder = fwd;
+ invalidateBackgroundManager();
+ }
+
+ set deployedTelegramBotForwarder(DeployedTelegramBotForwarder fwd) {
+ mgr.deployedTelegramBotForwarder = fwd;
+ invalidateBackgroundManager();
+ }
+
+ /// Loads the forwarders from a json.
+ Future