Android Native

development_aamir_testing23
Aamir Muhammad 2 years ago
parent fc2aceae0f
commit a8b1a001f8

@ -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'
}

@ -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.**

@ -8,6 +8,8 @@
<uses-permission android:name="android.permission.NFC" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
<!-- Chat Web RTC Calling -->
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
@ -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">
<activity

@ -9,9 +9,71 @@ package com.mohem_flutter_app
import io.flutter.embedding.android.FlutterFragmentActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugins.GeneratedPluginRegistrant
import io.flutter.plugin.common.MethodChannel
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.GlobalScope
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import okhttp3.MediaType.Companion.toMediaTypeOrNull
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
import java.io.IOException
class MainActivity : FlutterFragmentActivity() {
private val CHANNEL = "com.example.httpchannel/http"
private lateinit var httpClient: OkHttpClient
class MainActivity: FlutterFragmentActivity() {
override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
if (call.method == "executeHttpPostRequest") {
val arguments = call.arguments as? Map<String, Any>
// 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()
}
}

@ -1,5 +1,5 @@
buildscript {
ext.kotlin_version = '1.6.0'
ext.kotlin_version = '1.8.21'
repositories {
google()
mavenCentral()

@ -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

@ -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<user.UserAutoLoginModel> getUserCallToken({required String userid}) async {
user.UserAutoLoginModel userLoginResponse = user.UserAutoLoginModel();
@ -217,15 +212,18 @@ class ChatApiClient {
}
// Call Decline On App Terminated State
Future<Response> 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;
}

@ -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<void> 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!);
}
}

@ -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);

@ -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<void> main() async {
WidgetsFlutterBinding.ensureInitialized();
@ -51,7 +54,7 @@ Future<void> main() async {
AppState().setPostParamsInitConfig();
HttpOverrides.global = MyHttpOverrides();
isTablet = MediaQueryData.fromWindow(WidgetsBinding.instance.window).size.shortestSide >= ApiConsts.tabletMinLength;
runApp(
EasyLocalization(
supportedLocales: const <Locale>[

@ -46,12 +46,7 @@ class _StartCallPageState extends State<StartCallPage> {
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;

@ -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<LoginScreen> with WidgetsBindingObserver {
});
} on Exception {}
}
Future<void> moveToCallScreen() async {
dynamic calls = await FlutterCallkitIncoming.activeCalls();
if (calls is List) {

@ -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

Loading…
Cancel
Save