diff --git a/android/app/build.gradle b/android/app/build.gradle
index 5279c1f..336cd2a 100644
--- a/android/app/build.gradle
+++ b/android/app/build.gradle
@@ -71,10 +71,10 @@ android {
signingConfig signingConfigs.debug
}
release {
- signingConfig signingConfigs.release
+ signingConfig signingConfigs.debug
minifyEnabled true
shrinkResources true
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
@@ -85,4 +85,6 @@ flutter {
dependencies {
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
+ implementation 'com.squareup.okhttp3:okhttp:4.9.1'
+
}
diff --git a/android/app/proguard-rules.pro b/android/app/proguard-rules.pro
new file mode 100644
index 0000000..aa82ce6
--- /dev/null
+++ b/android/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+-ignorewarnings
+-keepattributes *Annotation*
+-keepattributes Exceptions
+-keepattributes InnerClasses
+-keepattributes Signature
+-keepattributes SourceFile,LineNumberTable
+-keep class com.huawei.hianalytics.**{*;}
+-keep class com.huawei.updatesdk.**{*;}
+-keep class com.huawei.hms.**{*;}
+-keep class com.huawei.hms.flutter.**{*;}
+-keep class com.hiennv.flutter_callkit_incoming.** { *; }
+-repackageclasses
+
+## Flutter wrapper
+-keep class io.flutter.app.** { *; }
+-keep class io.flutter.plugin.** { *; }
+-keep class io.flutter.util.** { *; }
+-keep class io.flutter.view.** { *; }
+-keep class io.flutter.** { *; }
+-keep class io.flutter.plugins.** { *; }
+-dontwarn io.flutter.embedding.**
\ No newline at end of file
diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 3f5e424..91e7ba3 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -8,6 +8,8 @@
+
+
@@ -22,6 +24,7 @@
android:icon="@mipmap/ic_launcher"
android:label="Mohemm"
android:extractNativeLibs="true"
+ android:usesCleartextTraffic="true"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round">
+ if (call.method == "executeHttpPostRequest") {
+ val arguments = call.arguments as? Map
+// val argument1 = arguments?.get("argument1")
+// val argument2 = arguments?.get("argument2")
+ println("Argument : $arguments")
+ // println("Argument 2: $argument2")
+ GlobalScope.launch {
+ val response = executeHttpPostRequest(arguments)
+ withContext(Dispatchers.Main) {
+ result.success(response)
+ }
+ }
+ } else {
+ result.notImplemented()
+ }
+ }
+
+
+ }
+
+
+ private suspend fun executeHttpPostRequest(payload: String ): String {
+ val url = "https://api.example.com/data"
+ // val jsonRequestBody = "{\"key\":\"value\"}" // Replace with your desired request body
+
+ val request = Request.Builder()
+ .url(url)
+ .post(payload.toRequestBody("application/json".toMediaTypeOrNull()))
+ .build()
+
+ return try {
+ val response: Response = httpClient.newCall(request).execute()
+ response.body?.string() ?: ""
+ } catch (e: IOException) {
+ e.printStackTrace()
+ ""
+ }
+ }
+
+ override fun onResume() {
+ super.onResume()
+ httpClient = OkHttpClient()
+ }
+
+ override fun onPause() {
+ super.onPause()
+ httpClient.dispatcher.cancelAll()
}
}
\ No newline at end of file
diff --git a/android/build.gradle b/android/build.gradle
index 7991b9d..12dceb5 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -1,5 +1,5 @@
buildscript {
- ext.kotlin_version = '1.6.0'
+ ext.kotlin_version = '1.8.21'
repositories {
google()
mavenCentral()
diff --git a/android/gradle/wrapper/gradle-wrapper.properties b/android/gradle/wrapper/gradle-wrapper.properties
index ed1a787..d8f368e 100644
--- a/android/gradle/wrapper/gradle-wrapper.properties
+++ b/android/gradle/wrapper/gradle-wrapper.properties
@@ -3,4 +3,5 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
+#distributionUrl=https\://services.gradle.org/distributions/gradle-8.0.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.6-bin.zip
\ No newline at end of file
diff --git a/lib/api/chat/chat_api_client.dart b/lib/api/chat/chat_api_client.dart
index ecd69b0..1fa6a4b 100644
--- a/lib/api/chat/chat_api_client.dart
+++ b/lib/api/chat/chat_api_client.dart
@@ -1,9 +1,7 @@
import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';
-
import 'package:flutter/foundation.dart';
-import 'package:flutter/material.dart';
import 'package:http/http.dart';
import 'package:mohem_flutter_app/api/api_client.dart';
import 'package:mohem_flutter_app/app_state/app_state.dart';
@@ -31,10 +29,9 @@ class ChatApiClient {
"employeeNumber": AppState().memberInformationList!.eMPLOYEENUMBER.toString(),
"password": "FxIu26rWIKoF8n6mpbOmAjDLphzFGmpG",
"isMobile": true,
- "deviceToken":AppState().getIsHuawei ? AppState().getHuaweiPushToken : AppState().getDeviceToken,
+ "deviceToken": AppState().getIsHuawei ? AppState().getHuaweiPushToken : AppState().getDeviceToken,
"isHuaweiDevice": AppState().getIsHuawei,
},
-
);
if (!kReleaseMode) {
@@ -187,10 +184,8 @@ class ChatApiClient {
}
return imagesData;
}
-
-
- // CallUser Login Token
+ // CallUser Login Token
Future getUserCallToken({required String userid}) async {
user.UserAutoLoginModel userLoginResponse = user.UserAutoLoginModel();
@@ -217,15 +212,18 @@ class ChatApiClient {
}
// Call Decline On App Terminated State
-
Future callDecline({required int cUserID, required int tUserID, required String targetUsertoken}) async {
+ // var headers = {'Content-Type': 'application/json'};
+ // var request = http.Request('POST', Uri.parse('https://apiderichat.hmg.com/api/user/calldecline'));
+
Response response = await ApiClient().postJsonForResponse(
"${ApiConsts.chatLoginTokenUrl}calldecline",
{"currentUserId": cUserID, "targetUserId": tUserID, "secretKey": "derichatmobileuser", "targetUserToken": targetUsertoken},
);
+ print("res: " + response.body);
if (!kReleaseMode) {
logger.i({"currentUserId": cUserID, "targetUserId": tUserID, "secretKey": "derichatmobileuser", "targetUserToken": targetUsertoken});
- logger.i("res: " + response.body);
+ print("res: " + response.body);
}
return response;
}
diff --git a/lib/classes/chat_call_kit.dart b/lib/classes/chat_call_kit.dart
index 99b738e..128f8d8 100644
--- a/lib/classes/chat_call_kit.dart
+++ b/lib/classes/chat_call_kit.dart
@@ -1,5 +1,6 @@
import 'dart:convert';
import 'package:firebase_messaging/firebase_messaging.dart';
+import 'package:flutter/services.dart';
import 'package:flutter_callkit_incoming/entities/entities.dart';
import 'package:flutter_callkit_incoming/flutter_callkit_incoming.dart';
import 'package:mohem_flutter_app/api/chat/chat_api_client.dart';
@@ -15,6 +16,7 @@ import 'package:mohem_flutter_app/provider/chat_call_provider.dart';
import 'package:mohem_flutter_app/provider/chat_provider_model.dart';
import 'package:signalr_netcore/hub_connection.dart';
import 'package:signalr_netcore/signalr_client.dart';
+import 'package:workmanager/workmanager.dart';
class ChatVoipCall {
static final ChatVoipCall _instance = ChatVoipCall._internal();
@@ -28,6 +30,7 @@ class ChatVoipCall {
dynamic inCallData;
bool isUserOnline = false;
dynamic callData;
+ static const platform = MethodChannel('com.example.httpchannel/http');
Future showCallkitIncoming({required String uuid, RemoteMessage? data, CallDataModel? incomingCallData, bool background = false}) async {
await FlutterCallkitIncoming.endAllCalls();
@@ -123,7 +126,14 @@ class ChatVoipCall {
}
}
} else {
- await ChatApiClient().callDecline(cUserID: data.extra!.callerDetails!.targetUserId!, tUserID: data.extra!.callerDetails!.currentUserId!, targetUsertoken: data.extra!.loginDetails!.token!);
+ try {
+ var response = await platform.invokeMethod(
+ 'executeHttpPostRequest', {"currentUserID": data.extra!.callerDetails!.targetUserId, "targetUserID": data.extra!.callerDetails!.currentUserId, "token": data.extra!.loginDetails!.token});
+ print('HTTP POST response: $response');
+ } on PlatformException catch (e) {
+ print('Error invoking method: ${e.message}');
+ }
+ // await ChatApiClient().callDecline(cUserID: data.extra!.callerDetails!.targetUserId!, tUserID: data.extra!.callerDetails!.currentUserId!, targetUsertoken: data.extra!.loginDetails!.token!);
}
}
diff --git a/lib/generated_plugin_registrant.dart b/lib/generated_plugin_registrant.dart
index bcf8ba5..4105def 100644
--- a/lib/generated_plugin_registrant.dart
+++ b/lib/generated_plugin_registrant.dart
@@ -12,7 +12,6 @@ import 'package:firebase_core_web/firebase_core_web.dart';
import 'package:firebase_messaging_web/firebase_messaging_web.dart';
import 'package:fluttertoast/fluttertoast_web.dart';
import 'package:geolocator_web/geolocator_web.dart';
-import 'package:google_maps_flutter_web/google_maps_flutter_web.dart';
import 'package:image_picker_for_web/image_picker_for_web.dart';
import 'package:just_audio_web/just_audio_web.dart';
import 'package:shared_preferences_web/shared_preferences_web.dart';
@@ -29,7 +28,6 @@ void registerPlugins(Registrar registrar) {
FirebaseMessagingWeb.registerWith(registrar);
FluttertoastWebPlugin.registerWith(registrar);
GeolocatorPlugin.registerWith(registrar);
- GoogleMapsPlugin.registerWith(registrar);
ImagePickerPlugin.registerWith(registrar);
JustAudioPlugin.registerWith(registrar);
SharedPreferencesPlugin.registerWith(registrar);
diff --git a/lib/main.dart b/lib/main.dart
index 08203d5..e9abb5e 100644
--- a/lib/main.dart
+++ b/lib/main.dart
@@ -20,6 +20,7 @@ import 'package:provider/provider.dart';
import 'package:provider/single_child_widget.dart';
import 'package:signalr_netcore/hub_connection.dart';
import 'package:sizer/sizer.dart';
+import 'package:workmanager/workmanager.dart';
late HubConnection chatHubConnection;
Logger logger = Logger(
@@ -40,6 +41,8 @@ class MyHttpOverrides extends HttpOverrides {
}
bool isTablet = false;
+const simpleTaskKey = "decline.call.byUser";
+
Future main() async {
WidgetsFlutterBinding.ensureInitialized();
@@ -51,7 +54,7 @@ Future main() async {
AppState().setPostParamsInitConfig();
HttpOverrides.global = MyHttpOverrides();
isTablet = MediaQueryData.fromWindow(WidgetsBinding.instance.window).size.shortestSide >= ApiConsts.tabletMinLength;
-
+
runApp(
EasyLocalization(
supportedLocales: const [
diff --git a/lib/ui/chat/call/chat_incoming_call_screen.dart b/lib/ui/chat/call/chat_incoming_call_screen.dart
index 48981de..2250003 100644
--- a/lib/ui/chat/call/chat_incoming_call_screen.dart
+++ b/lib/ui/chat/call/chat_incoming_call_screen.dart
@@ -46,12 +46,7 @@ class _StartCallPageState extends State {
IncomingCallModel? sessionData;
dynamic calls = await FlutterCallkitIncoming.activeCalls();
if (calls.isNotEmpty) {
- dynamic values = calls[0];
- logger.d(calls);
- print("------- We are Here ---------");
- print(calls[0]);
- sessionData = await IncomingCallModel.fromRawJson(jsonEncode(values));
-
+ sessionData = IncomingCallModel.fromRawJson(jsonEncode(calls[0]));
print(sessionData.toRawJson());
if (provider.isUserOnline) {
cProv.isUserOnline = provider.isUserOnline;
diff --git a/lib/ui/login/login_screen.dart b/lib/ui/login/login_screen.dart
index b716052..33ababb 100644
--- a/lib/ui/login/login_screen.dart
+++ b/lib/ui/login/login_screen.dart
@@ -43,6 +43,7 @@ import 'package:mohem_flutter_app/widgets/input_widget.dart';
// import 'package:safe_device/safe_device.dart';
import 'package:wifi_iot/wifi_iot.dart';
+import 'package:workmanager/workmanager.dart';
class LoginScreen extends StatefulWidget {
LoginScreen({Key? key}) : super(key: key);
@@ -218,7 +219,8 @@ class _LoginScreenState extends State with WidgetsBindingObserver {
});
} on Exception {}
}
-
+
+
Future moveToCallScreen() async {
dynamic calls = await FlutterCallkitIncoming.activeCalls();
if (calls is List) {
diff --git a/pubspec.yaml b/pubspec.yaml
index d685ecb..d9bf3b6 100644
--- a/pubspec.yaml
+++ b/pubspec.yaml
@@ -91,9 +91,9 @@ dependencies:
draggable_widget: ^2.0.0
flutter_local_notifications: any
flutter_callkit_incoming: ^1.0.3+3
- get_it: ^7.6.0
#firebase_analytics: any
-
+ workmanager: ^0.5.1
+
#Chat Voice Message Recoding & Play
audio_waveforms: ^0.1.5+1
rxdart: ^0.27.7