diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index e216dae5..1775312c 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -119,7 +119,7 @@ android:usesCleartextTraffic="true" tools:replace="android:extractNativeLibs,android:label"> -// when (call.method) { -// "launchPenguin" -> { -// print("the platform channel is being called") -// val args = call.arguments as Map? -// Log.d("TAG", "configureFlutterEngine: $args") -// println("args") -// args?.let { -// PenguinView( -// mainActivity, -// 100, -// args, -// flutterEngine.dartExecutor.binaryMessenger, -// activity = mainActivity, -// channel -// ) -// } -// } -// -// else -> { -// result.notImplemented() -// } -// } -// } -// } -// -//} +package com.cloud.diplomaticquarterapp + +import com.ejada.hmg.MainActivity +import android.os.Build +import android.util.Log +import androidx.annotation.RequiresApi +import com.cloud.diplomaticquarterapp.penguin.PenguinView +import io.flutter.embedding.engine.FlutterEngine +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel + +class PenguinInPlatformBridge( + private var flutterEngine: FlutterEngine, + private var mainActivity: MainActivity +) { + + private lateinit var channel: MethodChannel + + companion object { + private const val CHANNEL = "launch_penguin_ui" + } + + @RequiresApi(Build.VERSION_CODES.O) + fun create() { +// openTok = OpenTok(mainActivity, flutterEngine) + channel = MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL) + channel.setMethodCallHandler { call: MethodCall, result: MethodChannel.Result -> + when (call.method) { + "launchPenguin" -> { + print("the platform channel is being called") + val args = call.arguments as Map? + Log.d("TAG", "configureFlutterEngine: $args") + println("args") + args?.let { + PenguinView( + mainActivity, + 100, + args, + flutterEngine.dartExecutor.binaryMessenger, + activity = mainActivity, + channel + ) + } + } + + else -> { + result.notImplemented() + } + } + } + } + +} diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinNavigator.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinNavigator.kt index f0222d03..98245cc9 100644 --- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinNavigator.kt +++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinNavigator.kt @@ -1,97 +1,97 @@ -//package com.cloud.diplomaticquarterapp.penguin -// -//import android.content.Context -//import com.google.gson.Gson -//import com.peng.pennavmap.PlugAndPlaySDK -//import com.peng.pennavmap.connections.ApiController -//import com.peng.pennavmap.interfaces.RefIdDelegate -//import com.peng.pennavmap.models.TokenModel -//import com.peng.pennavmap.models.postmodels.PostToken -//import com.peng.pennavmap.utils.AppSharedData -//import okhttp3.ResponseBody -//import retrofit2.Call -//import retrofit2.Callback -//import retrofit2.Response -//import android.util.Log -// -// -//class PenguinNavigator() { -// -// fun navigateTo(mContext: Context, refID: String, delegate: RefIdDelegate,clientID : String,clientKey : String ) { -// val postToken = PostToken(clientID, clientKey) -// getToken(mContext, postToken, object : RefIdDelegate { -// override fun onRefByIDSuccess(PoiId: String?) { -// Log.e("navigateTo", "PoiId is+++++++ $PoiId") -// -// PlugAndPlaySDK.navigateTo(mContext, refID, object : RefIdDelegate { -// override fun onRefByIDSuccess(PoiId: String?) { -// Log.e("navigateTo", "PoiId 2is+++++++ $PoiId") -// -// delegate.onRefByIDSuccess(refID) -// -// } -// -// override fun onGetByRefIDError(error: String?) { -// delegate.onRefByIDSuccess(error) -// } -// -// }) -// -// -// } -// -// override fun onGetByRefIDError(error: String?) { -// delegate.onRefByIDSuccess(error) -// } -// -// }) -// -// } -// -// fun getToken(mContext: Context, postToken: PostToken?, apiTokenCallBack: RefIdDelegate) { -// try { -// // Create the API call -// val purposesCall: Call = ApiController.getInstance(mContext) -// .apiMethods -// .getToken(postToken) -// -// // Enqueue the call for asynchronous execution -// purposesCall.enqueue(object : Callback { -// override fun onResponse( -// call: Call, -// response: Response -// ) { -// if (response.isSuccessful() && response.body() != null) { -// try { -// response.body()?.use { responseBody -> -// val responseBodyString: String = responseBody.string() // Use `string()` to get the actual response content -// if (responseBodyString.isNotEmpty()) { -// val tokenModel = Gson().fromJson(responseBodyString, TokenModel::class.java) -// if (tokenModel != null && tokenModel.token != null) { -// AppSharedData.apiToken = tokenModel.token -// apiTokenCallBack.onRefByIDSuccess(tokenModel.token) -// } else { -// apiTokenCallBack.onGetByRefIDError("Failed to parse token model") -// } -// } else { -// apiTokenCallBack.onGetByRefIDError("Response body is empty") -// } -// } -// } catch (e: Exception) { -// apiTokenCallBack.onGetByRefIDError("An error occurred: ${e.message}") -// } -// } else { -// apiTokenCallBack.onGetByRefIDError("Unsuccessful response: " + response.code()) -// } -// } -// -// override fun onFailure(call: Call, t: Throwable) { -// apiTokenCallBack.onGetByRefIDError(t.message) -// } -// }) -// } catch (error: Exception) { -// apiTokenCallBack.onGetByRefIDError("Exception during API call: $error") -// } -// } -// -//} \ No newline at end of file +package com.cloud.diplomaticquarterapp.penguin + +import android.content.Context +import com.google.gson.Gson +import com.peng.pennavmap.PlugAndPlaySDK +import com.peng.pennavmap.connections.ApiController +import com.peng.pennavmap.interfaces.RefIdDelegate +import com.peng.pennavmap.models.TokenModel +import com.peng.pennavmap.models.postmodels.PostToken +import com.peng.pennavmap.utils.AppSharedData +import okhttp3.ResponseBody +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import android.util.Log + + +class PenguinNavigator() { + + fun navigateTo(mContext: Context, refID: String, delegate: RefIdDelegate,clientID : String,clientKey : String ) { + val postToken = PostToken(clientID, clientKey) + getToken(mContext, postToken, object : RefIdDelegate { + override fun onRefByIDSuccess(PoiId: String?) { + Log.e("navigateTo", "PoiId is+++++++ $PoiId") + + PlugAndPlaySDK.navigateTo(mContext, refID, object : RefIdDelegate { + override fun onRefByIDSuccess(PoiId: String?) { + Log.e("navigateTo", "PoiId 2is+++++++ $PoiId") + + delegate.onRefByIDSuccess(refID) + + } + + override fun onGetByRefIDError(error: String?) { + delegate.onRefByIDSuccess(error) + } + + }) + + + } + + override fun onGetByRefIDError(error: String?) { + delegate.onRefByIDSuccess(error) + } + + }) + + } + + fun getToken(mContext: Context, postToken: PostToken?, apiTokenCallBack: RefIdDelegate) { + try { + // Create the API call + val purposesCall: Call = ApiController.getInstance(mContext) + .apiMethods + .getToken(postToken) + + // Enqueue the call for asynchronous execution + purposesCall.enqueue(object : Callback { + override fun onResponse( + call: Call, + response: Response + ) { + if (response.isSuccessful() && response.body() != null) { + try { + response.body()?.use { responseBody -> + val responseBodyString: String = responseBody.string() // Use `string()` to get the actual response content + if (responseBodyString.isNotEmpty()) { + val tokenModel = Gson().fromJson(responseBodyString, TokenModel::class.java) + if (tokenModel != null && tokenModel.token != null) { + AppSharedData.apiToken = tokenModel.token + apiTokenCallBack.onRefByIDSuccess(tokenModel.token) + } else { + apiTokenCallBack.onGetByRefIDError("Failed to parse token model") + } + } else { + apiTokenCallBack.onGetByRefIDError("Response body is empty") + } + } + } catch (e: Exception) { + apiTokenCallBack.onGetByRefIDError("An error occurred: ${e.message}") + } + } else { + apiTokenCallBack.onGetByRefIDError("Unsuccessful response: " + response.code()) + } + } + + override fun onFailure(call: Call, t: Throwable) { + apiTokenCallBack.onGetByRefIDError(t.message) + } + }) + } catch (error: Exception) { + apiTokenCallBack.onGetByRefIDError("Exception during API call: $error") + } + } + +} \ No newline at end of file diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinView.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinView.kt index 34175bbb..9f74103f 100644 --- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinView.kt +++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/penguin/PenguinView.kt @@ -1,321 +1,321 @@ -//package com.cloud.diplomaticquarterapp.penguin -// -//import android.app.Activity -//import android.content.Context -//import android.content.Context.RECEIVER_EXPORTED -//import android.content.IntentFilter -//import android.graphics.Color -//import android.os.Build -//import android.util.Log -//import android.view.View -//import android.view.ViewGroup -//import android.widget.RelativeLayout -//import android.widget.Toast -//import androidx.annotation.RequiresApi -//import com.cloud.diplomaticquarterapp.PermissionManager.PermissionHelper -//import com.cloud.diplomaticquarterapp.PermissionManager.PermissionManager -//import com.cloud.diplomaticquarterapp.PermissionManager.PermissionResultReceiver -//import com.ejada.hmg.MainActivity -//import com.peng.pennavmap.PlugAndPlayConfiguration -//import com.peng.pennavmap.PlugAndPlaySDK -//import com.peng.pennavmap.enums.InitializationErrorType -//import com.peng.pennavmap.interfaces.PenNavUIDelegate -//import com.peng.pennavmap.utils.Languages -//import io.flutter.plugin.common.BinaryMessenger -//import io.flutter.plugin.common.MethodCall -//import io.flutter.plugin.common.MethodChannel -//import io.flutter.plugin.platform.PlatformView -//import com.cloud.diplomaticquarterapp.penguin.PenguinNavigator -//import com.peng.pennavmap.interfaces.PIEventsDelegate -//import com.peng.pennavmap.interfaces.PILocationDelegate -//import com.peng.pennavmap.interfaces.RefIdDelegate -//import com.peng.pennavmap.models.PIReportIssue -///** -// * Custom PlatformView for displaying Penguin UI components within a Flutter app. -// * Implements `PlatformView` for rendering the view, `MethodChannel.MethodCallHandler` for handling method calls, -// * and `PenNavUIDelegate` for handling SDK events. -// */ -//@RequiresApi(Build.VERSION_CODES.O) -//internal class PenguinView( -// context: Context, -// id: Int, -// val creationParams: Map, -// messenger: BinaryMessenger, -// activity: MainActivity, -// val channel: MethodChannel -//) : PlatformView, MethodChannel.MethodCallHandler, PenNavUIDelegate { -// // The layout for displaying the Penguin UI -// private val mapLayout: RelativeLayout = RelativeLayout(context) -// private val _context: Context = context -// -// private val permissionResultReceiver: PermissionResultReceiver -// private val permissionIntentFilter = IntentFilter("PERMISSION_RESULT_ACTION") -// -// private companion object { -// const val PERMISSIONS_REQUEST_CODE = 1 -// } -// -// private lateinit var permissionManager: PermissionManager -// -// // Reference to the main activity -// private var _activity: Activity = activity -// -// private lateinit var mContext: Context -// -// lateinit var navigator: PenguinNavigator -// -// init { -// // Set layout parameters for the mapLayout -// mapLayout.layoutParams = ViewGroup.LayoutParams( -// ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT -// ) -// -// mContext = context -// -// -// permissionResultReceiver = PermissionResultReceiver { granted -> -// if (granted) { -// onPermissionsGranted() -// } else { -// onPermissionsDenied() -// } -// } -// if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { -// mContext.registerReceiver( -// permissionResultReceiver, -// permissionIntentFilter, -// RECEIVER_EXPORTED -// ) -// } else { -// mContext.registerReceiver( -// permissionResultReceiver, -// permissionIntentFilter, -// ) -// } -// -// // Set the background color of the layout -// mapLayout.setBackgroundColor(Color.RED) -// -// permissionManager = PermissionManager( -// context = mContext, -// listener = object : PermissionManager.PermissionListener { -// override fun onPermissionGranted() { -// // Handle permissions granted -// onPermissionsGranted() -// } -// -// override fun onPermissionDenied() { -// // Handle permissions denied -// onPermissionsDenied() -// } -// }, -// requestCode = PERMISSIONS_REQUEST_CODE, -// *PermissionHelper.getRequiredPermissions() -// ) -// -// if (!permissionManager.arePermissionsGranted()) { -// permissionManager.requestPermissions(_activity) -// } else { -// // Permissions already granted -// permissionManager.listener.onPermissionGranted() -// } -// -// -// } -// -// private fun onPermissionsGranted() { -// // Handle the actions when permissions are granted -// Log.d("PermissionsResult", "onPermissionsGranted") -// // Register the platform view factory for creating custom views -// -// // Initialize the Penguin SDK -// initPenguin() -// -// -// } -// -// private fun onPermissionsDenied() { -// // Handle the actions when permissions are denied -// Log.d("PermissionsResult", "onPermissionsDenied") -// -// } -// -// /** -// * Returns the view associated with this PlatformView. -// * -// * @return The main view for this PlatformView. -// */ -// override fun getView(): View { -// return mapLayout -// } -// -// /** -// * Cleans up resources associated with this PlatformView. -// */ -// override fun dispose() { -// // Cleanup code if needed -// } -// -// /** -// * Handles method calls from Dart code. -// * -// * @param call The method call from Dart. -// * @param result The result callback to send responses back to Dart. -// */ -// override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { -// // Handle method calls from Dart code here -// } -// -// /** -// * Initializes the Penguin SDK with custom configuration and delegates. -// */ -// private fun initPenguin() { -// navigator = PenguinNavigator() -// // Configure the PlugAndPlaySDK -// val language = when (creationParams["languageCode"] as String) { -// "ar" -> Languages.ar -// "en" -> Languages.en -// else -> { -// Languages.en -// } +package com.cloud.diplomaticquarterapp.penguin + +import android.app.Activity +import android.content.Context +import android.content.Context.RECEIVER_EXPORTED +import android.content.IntentFilter +import android.graphics.Color +import android.os.Build +import android.util.Log +import android.view.View +import android.view.ViewGroup +import android.widget.RelativeLayout +import android.widget.Toast +import androidx.annotation.RequiresApi +import com.cloud.diplomaticquarterapp.PermissionManager.PermissionHelper +import com.cloud.diplomaticquarterapp.PermissionManager.PermissionManager +import com.cloud.diplomaticquarterapp.PermissionManager.PermissionResultReceiver +import com.ejada.hmg.MainActivity +import com.peng.pennavmap.PlugAndPlayConfiguration +import com.peng.pennavmap.PlugAndPlaySDK +import com.peng.pennavmap.enums.InitializationErrorType +import com.peng.pennavmap.interfaces.PenNavUIDelegate +import com.peng.pennavmap.utils.Languages +import io.flutter.plugin.common.BinaryMessenger +import io.flutter.plugin.common.MethodCall +import io.flutter.plugin.common.MethodChannel +import io.flutter.plugin.platform.PlatformView +import com.cloud.diplomaticquarterapp.penguin.PenguinNavigator +import com.peng.pennavmap.interfaces.PIEventsDelegate +import com.peng.pennavmap.interfaces.PILocationDelegate +import com.peng.pennavmap.interfaces.RefIdDelegate +import com.peng.pennavmap.models.PIReportIssue +/** + * Custom PlatformView for displaying Penguin UI components within a Flutter app. + * Implements `PlatformView` for rendering the view, `MethodChannel.MethodCallHandler` for handling method calls, + * and `PenNavUIDelegate` for handling SDK events. + */ +@RequiresApi(Build.VERSION_CODES.O) +internal class PenguinView( + context: Context, + id: Int, + val creationParams: Map, + messenger: BinaryMessenger, + activity: MainActivity, + val channel: MethodChannel +) : PlatformView, MethodChannel.MethodCallHandler, PenNavUIDelegate { + // The layout for displaying the Penguin UI + private val mapLayout: RelativeLayout = RelativeLayout(context) + private val _context: Context = context + + private val permissionResultReceiver: PermissionResultReceiver + private val permissionIntentFilter = IntentFilter("PERMISSION_RESULT_ACTION") + + private companion object { + const val PERMISSIONS_REQUEST_CODE = 1 + } + + private lateinit var permissionManager: PermissionManager + + // Reference to the main activity + private var _activity: Activity = activity + + private lateinit var mContext: Context + + lateinit var navigator: PenguinNavigator + + init { + // Set layout parameters for the mapLayout + mapLayout.layoutParams = ViewGroup.LayoutParams( + ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT + ) + + mContext = context + + + permissionResultReceiver = PermissionResultReceiver { granted -> + if (granted) { + onPermissionsGranted() + } else { + onPermissionsDenied() + } + } + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + mContext.registerReceiver( + permissionResultReceiver, + permissionIntentFilter, + RECEIVER_EXPORTED + ) + } else { + mContext.registerReceiver( + permissionResultReceiver, + permissionIntentFilter, + ) + } + + // Set the background color of the layout + mapLayout.setBackgroundColor(Color.RED) + + permissionManager = PermissionManager( + context = mContext, + listener = object : PermissionManager.PermissionListener { + override fun onPermissionGranted() { + // Handle permissions granted + onPermissionsGranted() + } + + override fun onPermissionDenied() { + // Handle permissions denied + onPermissionsDenied() + } + }, + requestCode = PERMISSIONS_REQUEST_CODE, + *PermissionHelper.getRequiredPermissions() + ) + + if (!permissionManager.arePermissionsGranted()) { + permissionManager.requestPermissions(_activity) + } else { + // Permissions already granted + permissionManager.listener.onPermissionGranted() + } + + + } + + private fun onPermissionsGranted() { + // Handle the actions when permissions are granted + Log.d("PermissionsResult", "onPermissionsGranted") + // Register the platform view factory for creating custom views + + // Initialize the Penguin SDK + initPenguin() + + + } + + private fun onPermissionsDenied() { + // Handle the actions when permissions are denied + Log.d("PermissionsResult", "onPermissionsDenied") + + } + + /** + * Returns the view associated with this PlatformView. + * + * @return The main view for this PlatformView. + */ + override fun getView(): View { + return mapLayout + } + + /** + * Cleans up resources associated with this PlatformView. + */ + override fun dispose() { + // Cleanup code if needed + } + + /** + * Handles method calls from Dart code. + * + * @param call The method call from Dart. + * @param result The result callback to send responses back to Dart. + */ + override fun onMethodCall(call: MethodCall, result: MethodChannel.Result) { + // Handle method calls from Dart code here + } + + /** + * Initializes the Penguin SDK with custom configuration and delegates. + */ + private fun initPenguin() { + navigator = PenguinNavigator() + // Configure the PlugAndPlaySDK + val language = when (creationParams["languageCode"] as String) { + "ar" -> Languages.ar + "en" -> Languages.en + else -> { + Languages.en + } + } + Log.d( + "TAG", + "initPenguin: ${Languages.getLanguageEnum(creationParams["languageCode"] as String)}" + ) + PlugAndPlaySDK.configuration = PlugAndPlayConfiguration.Builder() + .setBaseUrl( + creationParams["dataURL"] as String, + creationParams["positionURL"] as String + ) + .setServiceName( + creationParams["dataServiceName"] as String, + creationParams["positionServiceName"] as String + ) + .setClientData( + creationParams["clientID"] as String, + creationParams["clientKey"] as String + ) + .setUserName(creationParams["username"] as String) +// .setLanguageID(Languages.en) + .setLanguageID(language) + .setSimulationModeEnabled(creationParams["isSimulationModeEnabled"] as Boolean) + .setEnableBackButton(true) +// .setDeepLinkData("deeplink") + .setCustomizeColor("#2CA0AF") + .setDeepLinkSchema("") + .setIsEnableReportIssue(true) + .build() + + // Set location delegate to handle location updates +// PlugAndPlaySDK.setPiLocationDelegate { + // Example code to handle location updates + // Uncomment and modify as needed + // if (location.size() > 0) + // Toast.makeText(_context, "Location Info Latitude: ${location[0]}, Longitude: ${location[1]}", Toast.LENGTH_SHORT).show() // } -// Log.d( -// "TAG", -// "initPenguin: ${Languages.getLanguageEnum(creationParams["languageCode"] as String)}" -// ) -// PlugAndPlaySDK.configuration = PlugAndPlayConfiguration.Builder() -// .setBaseUrl( -// creationParams["dataURL"] as String, -// creationParams["positionURL"] as String -// ) -// .setServiceName( -// creationParams["dataServiceName"] as String, -// creationParams["positionServiceName"] as String -// ) -// .setClientData( -// creationParams["clientID"] as String, -// creationParams["clientKey"] as String -// ) -// .setUserName(creationParams["username"] as String) -//// .setLanguageID(Languages.en) -// .setLanguageID(language) -// .setSimulationModeEnabled(creationParams["isSimulationModeEnabled"] as Boolean) -// .setEnableBackButton(true) -//// .setDeepLinkData("deeplink") -// .setCustomizeColor("#2CA0AF") -// .setDeepLinkSchema("") -// .setIsEnableReportIssue(true) -// .build() -// -// // Set location delegate to handle location updates -//// PlugAndPlaySDK.setPiLocationDelegate { -// // Example code to handle location updates -// // Uncomment and modify as needed -// // if (location.size() > 0) -// // Toast.makeText(_context, "Location Info Latitude: ${location[0]}, Longitude: ${location[1]}", Toast.LENGTH_SHORT).show() -//// } -// -// // Set events delegate for reporting issues -//// PlugAndPlaySDK.setPiEventsDelegate(new PIEventsDelegate() { -//// @Override -//// public void onReportIssue(PIReportIssue issue) { -//// Log.e("Issue Reported: ", issue.getReportType()); -//// } -//// // Implement issue reporting logic here } -//// @Override -//// public void onSharedLocation(String link) { -//// // Implement Shared location logic here -//// } -//// }) -// -// // Start the Penguin SDK -// PlugAndPlaySDK.start(mContext, this) -// } -// -// -// /** -// * Navigates to the specified reference ID. -// * -// * @param refID The reference ID to navigate to. -// */ -// fun navigateTo(refID: String) { -// try { -// if (refID.isBlank()) { -// Log.e("navigateTo", "Invalid refID: The reference ID is blank.") + + // Set events delegate for reporting issues +// PlugAndPlaySDK.setPiEventsDelegate(new PIEventsDelegate() { +// @Override +// public void onReportIssue(PIReportIssue issue) { +// Log.e("Issue Reported: ", issue.getReportType()); // } -//// referenceId = refID -// navigator.navigateTo(mContext, refID,object : RefIdDelegate { -// override fun onRefByIDSuccess(PoiId: String?) { -// Log.e("navigateTo", "PoiId is penguin view+++++++ $PoiId") -// -//// channelFlutter.invokeMethod( -//// PenguinMethod.navigateToPOI.name, -//// "navigateTo Success" -//// ) +// // Implement issue reporting logic here } +// @Override +// public void onSharedLocation(String link) { +// // Implement Shared location logic here // } -// -// override fun onGetByRefIDError(error: String?) { -// Log.e("navigateTo", "error is penguin view+++++++ $error") -// -//// channelFlutter.invokeMethod( -//// PenguinMethod.navigateToPOI.name, -//// "navigateTo Failed: Invalid refID" -//// ) -// } -// } , creationParams["clientID"] as String, creationParams["clientKey"] as String ) -// -// } catch (e: Exception) { -// Log.e("navigateTo", "Exception occurred during navigation: ${e.message}", e) -//// channelFlutter.invokeMethod( -//// PenguinMethod.navigateToPOI.name, -//// "Failed: Exception - ${e.message}" -//// ) -// } -// } -// -// /** -// * Called when Penguin UI setup is successful. -// * -// * @param warningCode Optional warning code received from the SDK. -// */ -// override fun onPenNavSuccess(warningCode: String?) { -// val clinicId = creationParams["clinicID"] as String -// -// if(clinicId.isEmpty()) return -// -// navigateTo(clinicId) -// } -// -// /** -// * Called when there is an initialization error with Penguin UI. -// * -// * @param description Description of the error. -// * @param errorType Type of initialization error. -// */ -// override fun onPenNavInitializationError( -// description: String?, -// errorType: InitializationErrorType? -// ) { -// val arguments: Map = mapOf( -// "description" to description, -// "type" to errorType?.name -// ) -// -// channel.invokeMethod(PenguinMethod.onPenNavInitializationError.name, arguments) -// Toast.makeText(mContext, "Navigation Error: $description", Toast.LENGTH_SHORT).show() -// } -// -// /** -// * Called when Penguin UI is dismissed. -// */ -// override fun onPenNavUIDismiss() { -// // Handle UI dismissal if needed -// try { -// mContext.unregisterReceiver(permissionResultReceiver) -// dispose(); -// } catch (e: IllegalArgumentException) { -// Log.e("PenguinView", "Receiver not registered: $e") -// } -// } -//} -// +// }) + + // Start the Penguin SDK + PlugAndPlaySDK.start(mContext, this) + } + + + /** + * Navigates to the specified reference ID. + * + * @param refID The reference ID to navigate to. + */ + fun navigateTo(refID: String) { + try { + if (refID.isBlank()) { + Log.e("navigateTo", "Invalid refID: The reference ID is blank.") + } +// referenceId = refID + navigator.navigateTo(mContext, refID,object : RefIdDelegate { + override fun onRefByIDSuccess(PoiId: String?) { + Log.e("navigateTo", "PoiId is penguin view+++++++ $PoiId") + +// channelFlutter.invokeMethod( +// PenguinMethod.navigateToPOI.name, +// "navigateTo Success" +// ) + } + + override fun onGetByRefIDError(error: String?) { + Log.e("navigateTo", "error is penguin view+++++++ $error") + +// channelFlutter.invokeMethod( +// PenguinMethod.navigateToPOI.name, +// "navigateTo Failed: Invalid refID" +// ) + } + } , creationParams["clientID"] as String, creationParams["clientKey"] as String ) + + } catch (e: Exception) { + Log.e("navigateTo", "Exception occurred during navigation: ${e.message}", e) +// channelFlutter.invokeMethod( +// PenguinMethod.navigateToPOI.name, +// "Failed: Exception - ${e.message}" +// ) + } + } + + /** + * Called when Penguin UI setup is successful. + * + * @param warningCode Optional warning code received from the SDK. + */ + override fun onPenNavSuccess(warningCode: String?) { + val clinicId = creationParams["clinicID"] as String + + if(clinicId.isEmpty()) return + + navigateTo(clinicId) + } + + /** + * Called when there is an initialization error with Penguin UI. + * + * @param description Description of the error. + * @param errorType Type of initialization error. + */ + override fun onPenNavInitializationError( + description: String?, + errorType: InitializationErrorType? + ) { + val arguments: Map = mapOf( + "description" to description, + "type" to errorType?.name + ) + + channel.invokeMethod(PenguinMethod.onPenNavInitializationError.name, arguments) + Toast.makeText(mContext, "Navigation Error: $description", Toast.LENGTH_SHORT).show() + } + + /** + * Called when Penguin UI is dismissed. + */ + override fun onPenNavUIDismiss() { + // Handle UI dismissal if needed + try { + mContext.unregisterReceiver(permissionResultReceiver) + dispose(); + } catch (e: IllegalArgumentException) { + Log.e("PenguinView", "Receiver not registered: $e") + } + } +} + diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppCodeActivity.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppCodeActivity.kt index 8e86ec97..5739022e 100644 --- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppCodeActivity.kt +++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppCodeActivity.kt @@ -1,4 +1,4 @@ -package com.ejada.hmg +package com.cloud.diplomaticquarterapp.whatsapp import android.app.PendingIntent import android.content.Intent import android.os.Bundle diff --git a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppOtpPlatformBridge.kt b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppOtpPlatformBridge.kt index a03584ae..5493e8be 100644 --- a/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppOtpPlatformBridge.kt +++ b/android/app/src/main/kotlin/com/cloud/diplomaticquarterapp/whatsapp/WhatsAppOtpPlatformBridge.kt @@ -1,9 +1,5 @@ package com.cloud.diplomaticquarterapp.whatsapp -import android.os.Build -import android.util.Log -import androidx.annotation.RequiresApi -import com.cloud.diplomaticquarterapp.penguin.PenguinView import com.ejada.hmg.MainActivity import io.flutter.embedding.engine.FlutterEngine import io.flutter.plugin.common.MethodCall diff --git a/android/app/src/main/res/layout/activity_whats_app_code.xml b/android/app/src/main/res/layout/activity_whats_app_code.xml index 95bd5d8b..3cd824c9 100644 --- a/android/app/src/main/res/layout/activity_whats_app_code.xml +++ b/android/app/src/main/res/layout/activity_whats_app_code.xml @@ -5,6 +5,6 @@ android:id="@+id/main" android:layout_width="match_parent" android:layout_height="match_parent" - tools:context=".WhatsAppCodeActivity"> + tools:context="com.cloud.diplomaticquarterapp.whatsapp.WhatsAppCodeActivity"> \ No newline at end of file diff --git a/android/build.gradle b/android/build.gradle index 54052387..69a65d6a 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -43,7 +43,7 @@ buildscript { classpath 'com.huawei.agconnect:agcp:1.5.2.300' classpath("com.android.tools:r8:8.2.42") classpath 'com.google.protobuf:protobuf-gradle-plugin:0.8.12' -// classpath "com.mapbox.gradle.plugins:access-token:0.4.0" + classpath "com.mapbox.gradle.plugins:access-token:0.4.0" } } @@ -61,21 +61,20 @@ allprojects { maven { url "https://artifactory.ess-dev.com/artifactory/gradle-dev-local" } -// maven { -// url 'https://api.mapbox.com/downloads/v2/releases/maven' -// -// credentials { -// username = 'mapbox' -//// password = "sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg" -// password = 'pk.eyJ1IjoicndhaWQiLCJhIjoiY2x5cGo4aHNjMGNsbTJyc2djempobGQxaSJ9.RCaC6WrUt4A4YnZNfxnONQ' -// if (password == null || password == "") { -// throw new GradleException("MAPBOX_DOWNLOADS_TOKEN isn't set. Set it to the project properties or to the enviroment variables.") -// } -// } -// authentication { -// basic(BasicAuthentication) -// } -// } + maven { + url 'https://api.mapbox.com/downloads/v2/releases/maven' + + credentials { + username = 'mapbox' + password = "sk.eyJ1IjoicndhaWQiLCJhIjoiY2x6NWo0bTMzMWZodzJrcGZpemYzc3Z4dSJ9.uSSZuwNSGCcCdPAiORECmg" + if (password == null || password == "") { + throw new GradleException("MAPBOX_DOWNLOADS_TOKEN isn't set. Set it to the project properties or to the enviroment variables.") + } + } + authentication { + basic(BasicAuthentication) + } + } } }