From 6aa51430c847858489db5947dd3e2d33fcbf3f89 Mon Sep 17 00:00:00 2001 From: Hien Nguyen Date: Thu, 24 Feb 2022 23:32:23 +0700 Subject: [PATCH] 1.0.1+2 --- CHANGELOG.md | 8 ++ android/src/main/AndroidManifest.xml | 1 + .../CallkitIncomingActivity.kt | 26 +++-- .../CallkitNotificationManager.kt | 37 +++--- .../CallkitSoundPlayerService.kt | 57 ++++++--- .../FlutterCallkitIncomingPlugin.kt | 109 +++++++++++++++--- .../xcshareddata/xcschemes/Runner.xcscheme | 2 +- example/ios/Runner/AppDelegate.swift | 1 + example/lib/main.dart | 2 +- ios/flutter_callkit_incoming.podspec | 2 +- lib/flutter_callkit_incoming.dart | 5 +- pubspec.yaml | 2 +- 12 files changed, 190 insertions(+), 62 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 39adff56..4c6c5e36 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## 1.0.1+2 + +* Fixed issue default ringtone(Android) +* Fixed issue vibration(Android) +* Fixed issue sound play type ringtone volumn system(Android) +* Fixed flow incomming screen(Android) +* Fixed some bugs. + ## 1.0.1+1 * Switch using Service for Ringtone(Android) diff --git a/android/src/main/AndroidManifest.xml b/android/src/main/AndroidManifest.xml index 884d294e..8c0dbffd 100644 --- a/android/src/main/AndroidManifest.xml +++ b/android/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ + diff --git a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitIncomingActivity.kt b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitIncomingActivity.kt index 996d322f..60874796 100644 --- a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitIncomingActivity.kt +++ b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitIncomingActivity.kt @@ -1,7 +1,9 @@ package com.hiennv.flutter_callkit_incoming +import android.annotation.SuppressLint import android.app.Activity import android.app.KeyguardManager +import android.app.KeyguardManager.KeyguardLock import android.content.BroadcastReceiver import android.content.Context import android.content.Intent @@ -37,9 +39,8 @@ import kotlin.math.abs import okhttp3.OkHttpClient import com.squareup.picasso.OkHttp3Downloader import android.view.ViewGroup.MarginLayoutParams - - - +import android.os.PowerManager +import android.os.PowerManager.WakeLock class CallkitIncomingActivity : Activity() { @@ -93,9 +94,6 @@ class CallkitIncomingActivity : Activity() { window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON) setTurnScreenOn(true) setShowWhenLocked(true) - - val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager - keyguardManager.requestDismissKeyguard(this, null) } else { window.addFlags( WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON @@ -114,6 +112,16 @@ class CallkitIncomingActivity : Activity() { ) } + private fun wakeLockRequest(duration: Long) { + + val pm = applicationContext.getSystemService(POWER_SERVICE) as PowerManager + val wakeLock = pm.newWakeLock( + PowerManager.SCREEN_BRIGHT_WAKE_LOCK or PowerManager.FULL_WAKE_LOCK or PowerManager.ACQUIRE_CAUSES_WAKEUP, + "Callkit:PowerManager" + ) + wakeLock.acquire(duration) + } + private fun transparentStatusAndNavigation() { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT && Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { setWindowFlag( @@ -174,7 +182,7 @@ class CallkitIncomingActivity : Activity() { ivAcceptCall.setImageResource(R.drawable.ic_video) } val duration = data?.getLong(EXTRA_CALLKIT_DURATION, 0L) ?: 0L - + wakeLockRequest(duration) finishTimeout(data, duration) @@ -254,6 +262,10 @@ class CallkitIncomingActivity : Activity() { val intent = CallkitIncomingBroadcastReceiver.getIntentAccept(this@CallkitIncomingActivity, data) sendBroadcast(intent) + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + val keyguardManager = getSystemService(Context.KEYGUARD_SERVICE) as KeyguardManager + keyguardManager.requestDismissKeyguard(this, null) + } if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { finishAndRemoveTask() } else { diff --git a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitNotificationManager.kt b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitNotificationManager.kt index 7e10b05f..1525e7d6 100644 --- a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitNotificationManager.kt +++ b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitNotificationManager.kt @@ -9,7 +9,6 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.Color import android.graphics.drawable.Drawable -import android.media.AudioAttributes import android.media.RingtoneManager import android.net.Uri import android.os.* @@ -131,18 +130,26 @@ class CallkitNotificationManager(private val context: Context) { R.id.llAccept, getAcceptPendingIntent(notificationId, data) ) - val headers = data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap - getPicassoInstance(context, headers).load(data.getString(EXTRA_CALLKIT_AVATAR, "")) - .transform(CircleTransform()) - .into(targetLoadAvatarCustomize) + val avatarUrl = data.getString(EXTRA_CALLKIT_AVATAR, "") + if (avatarUrl != null && avatarUrl.isNotEmpty()) { + val headers = + data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap + getPicassoInstance(context, headers).load(avatarUrl) + .transform(CircleTransform()) + .into(targetLoadAvatarCustomize) + } notificationBuilder.setStyle(NotificationCompat.DecoratedCustomViewStyle()) notificationBuilder.setCustomContentView(notificationViews) notificationBuilder.setCustomBigContentView(notificationViews) notificationBuilder.setCustomHeadsUpContentView(notificationViews) } else { - val headers = data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap - getPicassoInstance(context, headers).load(data.getString(EXTRA_CALLKIT_AVATAR, "")) - .into(targetLoadAvatarDefault) + val avatarUrl = data.getString(EXTRA_CALLKIT_AVATAR, "") + if (avatarUrl != null && avatarUrl.isNotEmpty()) { + val headers = + data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap + getPicassoInstance(context, headers).load(avatarUrl) + .into(targetLoadAvatarDefault) + } notificationBuilder.setContentTitle(data.getString(EXTRA_CALLKIT_NAME_CALLER, "")) notificationBuilder.setContentText(data.getString(EXTRA_CALLKIT_HANDLE, "")) val declineAction: NotificationCompat.Action = NotificationCompat.Action.Builder( @@ -178,18 +185,23 @@ class CallkitNotificationManager(private val context: Context) { } notificationBuilder = NotificationCompat.Builder(context, "callkit_missed_channel_id") notificationBuilder.setChannelId("callkit_missed_channel_id") + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + notificationBuilder.setCategory(Notification.CATEGORY_MISSED_CALL) + } notificationBuilder.setContentTitle(data.getString(EXTRA_CALLKIT_NAME_CALLER, "")) notificationBuilder.setContentText(data.getString(EXTRA_CALLKIT_HANDLE, "")) notificationBuilder.setSubText(context.getString(R.string.text_missed_call)) notificationBuilder.setSmallIcon(smallIcon) val isCustomNotification = data.getBoolean(EXTRA_CALLKIT_IS_CUSTOM_NOTIFICATION, false) if (isCustomNotification) { - val headers = data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap + val headers = + data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap getPicassoInstance(context, headers).load(data.getString(EXTRA_CALLKIT_AVATAR, "")) .transform(CircleTransform()).into(targetLoadAvatarDefault) } else { - val headers = data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap + val headers = + data.getSerializable(CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_HEADERS) as HashMap getPicassoInstance(context, headers).load(data.getString(EXTRA_CALLKIT_AVATAR, "")) .into(targetLoadAvatarDefault) @@ -241,7 +253,6 @@ class CallkitNotificationManager(private val context: Context) { } private fun createNotificationChanel() { - val sound: Uri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION) if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { val channelCall = NotificationChannel( "callkit_incoming_channel_id", @@ -257,10 +268,6 @@ class CallkitNotificationManager(private val context: Context) { } getNotificationManager().createNotificationChannel(channelCall) - val attributes = AudioAttributes.Builder() - .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) - .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) - .build() val channelMissedCall = NotificationChannel( "callkit_missed_channel_id", "Missed Call", diff --git a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitSoundPlayerService.kt b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitSoundPlayerService.kt index fee5f4a1..df2b8e83 100644 --- a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitSoundPlayerService.kt +++ b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitSoundPlayerService.kt @@ -1,6 +1,7 @@ package com.hiennv.flutter_callkit_incoming import android.app.Service +import android.content.Context import android.content.Intent import android.media.AudioAttributes import android.media.AudioManager @@ -12,6 +13,7 @@ import android.text.TextUtils class CallkitSoundPlayerService : Service() { + private var vibrator: Vibrator? = null private var mediaPlayer: MediaPlayer? = null private var data: Bundle? = null private val handler: Handler = Handler(Looper.getMainLooper()) @@ -29,7 +31,7 @@ class CallkitSoundPlayerService : Service() { override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { this.playSound(intent) - + this.playVibrator() return START_STICKY; } @@ -38,6 +40,21 @@ class CallkitSoundPlayerService : Service() { handler.removeCallbacks(runnableTimeout) mediaPlayer?.stop() mediaPlayer?.release() + vibrator?.cancel() + } + + private fun playVibrator() { + vibrator = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + val vibratorManager = this.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as VibratorManager + vibratorManager.defaultVibrator + } else { + getSystemService(VIBRATOR_SERVICE) as Vibrator + } + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + vibrator?.vibrate(VibrationEffect.createWaveform(longArrayOf(0L, 1000L, 1000L), 0)) + }else{ + vibrator?.vibrate(longArrayOf(0L, 1000L, 1000L), 0) + } } private fun playSound(intent: Intent?) { @@ -50,19 +67,31 @@ class CallkitSoundPlayerService : Service() { CallkitIncomingBroadcastReceiver.EXTRA_CALLKIT_DURATION, 30000L ) - val uri = sound?.let { getRingtoneUri(it) } - mediaPlayer = MediaPlayer.create(this@CallkitSoundPlayerService, uri).apply { - isLooping = true - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { - val attribution = AudioAttributes.Builder() - .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) - .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) - .build() - setAudioAttributes(attribution) - } else { - setAudioStreamType(AudioManager.STREAM_NOTIFICATION) - } - start() + var uri = sound?.let { getRingtoneUri(it) } + if(uri == null){ + uri = RingtoneManager.getActualDefaultRingtoneUri( + this@CallkitSoundPlayerService, + RingtoneManager.TYPE_RINGTONE + ) + } + mediaPlayer = MediaPlayer() + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + val attribution = AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_NOTIFICATION_RINGTONE) + .setLegacyStreamType(AudioManager.STREAM_RING) + .build() + mediaPlayer?.setAudioAttributes(attribution) + } else { + mediaPlayer?.setAudioStreamType(AudioManager.STREAM_RING) + } + try { + mediaPlayer?.setDataSource(applicationContext, uri!!) + mediaPlayer?.prepare() + mediaPlayer?.isLooping = true + mediaPlayer?.start() + } catch (e: Exception) { + e.printStackTrace() } if (duration != null) { handler.postDelayed(runnableTimeout, duration) diff --git a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/FlutterCallkitIncomingPlugin.kt b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/FlutterCallkitIncomingPlugin.kt index df34c51b..d1eddb3d 100644 --- a/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/FlutterCallkitIncomingPlugin.kt +++ b/android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/FlutterCallkitIncomingPlugin.kt @@ -1,10 +1,12 @@ package com.hiennv.flutter_callkit_incoming +import android.annotation.SuppressLint import android.app.Activity import android.content.Context import android.os.Handler import android.os.Looper import androidx.annotation.NonNull +import androidx.annotation.Nullable import io.flutter.embedding.engine.plugins.FlutterPlugin import io.flutter.embedding.engine.plugins.activity.ActivityAware @@ -20,6 +22,15 @@ class FlutterCallkitIncomingPlugin : FlutterPlugin, MethodCallHandler, ActivityA companion object { + @SuppressLint("StaticFieldLeak") + private var instance: FlutterCallkitIncomingPlugin? = null + + public fun getInstance(): FlutterCallkitIncomingPlugin { + if(instance == null){ + instance = FlutterCallkitIncomingPlugin() + } + return instance!! + } private val eventHandler = EventCallbackHandler() @@ -27,40 +38,98 @@ class FlutterCallkitIncomingPlugin : FlutterPlugin, MethodCallHandler, ActivityA eventHandler.send(event, body) } + private fun sharePluginWithRegister(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding, @Nullable handler: MethodCallHandler) { + if(instance == null) { + instance = FlutterCallkitIncomingPlugin() + } + instance!!.context = flutterPluginBinding.applicationContext + instance!!.callkitNotificationManager = CallkitNotificationManager(flutterPluginBinding.applicationContext) + instance!!.channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter_callkit_incoming") + instance!!.channel?.setMethodCallHandler(handler) + instance!!.events = + EventChannel(flutterPluginBinding.binaryMessenger, "flutter_callkit_incoming_events") + instance!!.events?.setStreamHandler(eventHandler) + } + } /// The MethodChannel that will the communication between Flutter and native Android /// /// This local reference serves to register the plugin with the Flutter Engine and unregister it /// when the Flutter Engine is detached from the Activity - private lateinit var activity: Activity - private lateinit var context: Context - private lateinit var callkitNotificationManager: CallkitNotificationManager - private lateinit var channel: MethodChannel - private lateinit var events: EventChannel + private var activity: Activity? = null + private var context: Context? = null + private var callkitNotificationManager: CallkitNotificationManager? = null + private var channel: MethodChannel? = null + private var events: EventChannel? = null + override fun onAttachedToEngine(@NonNull flutterPluginBinding: FlutterPlugin.FlutterPluginBinding) { this.context = flutterPluginBinding.applicationContext - callkitNotificationManager = CallkitNotificationManager(this.context) + callkitNotificationManager = CallkitNotificationManager(flutterPluginBinding.applicationContext) channel = MethodChannel(flutterPluginBinding.binaryMessenger, "flutter_callkit_incoming") - channel.setMethodCallHandler(this) + channel?.setMethodCallHandler(this) events = EventChannel(flutterPluginBinding.binaryMessenger, "flutter_callkit_incoming_events") - events.setStreamHandler(eventHandler) + events?.setStreamHandler(eventHandler) + // sharePluginWithRegister(flutterPluginBinding, this) } + public fun showIncomingNotification(data: Data) { + data.from = "notification" + callkitNotificationManager?.showIncomingNotification(data.toBundle()) + //send BroadcastReceiver + context?.sendBroadcast( + CallkitIncomingBroadcastReceiver.getIntentIncoming( + requireNotNull(context), + data.toBundle() + ) + ) + } + + public fun startCall(data: Data) { + context?.sendBroadcast( + CallkitIncomingBroadcastReceiver.getIntentStart( + requireNotNull(context), + data.toBundle() + ) + ) + } + + public fun endCall(data: Data) { + context?.sendBroadcast( + CallkitIncomingBroadcastReceiver.getIntentEnded( + requireNotNull(context), + data.toBundle() + ) + ) + } + + public fun endAllCalls() { + val calls = getDataActiveCalls(context) + calls.forEach { + context?.sendBroadcast( + CallkitIncomingBroadcastReceiver.getIntentEnded( + requireNotNull(context), + it.toBundle() + ) + ) + } + removeAllCalls(context) + } + + override fun onMethodCall(@NonNull call: MethodCall, @NonNull result: Result) { try { - callkitNotificationManager = CallkitNotificationManager(this.context) when (call.method) { "showCallkitIncoming" -> { val data = Data(call.arguments()) data.from = "notification" - callkitNotificationManager.showIncomingNotification(data.toBundle()) + callkitNotificationManager?.showIncomingNotification(data.toBundle()) //send BroadcastReceiver - context.sendBroadcast( + context?.sendBroadcast( CallkitIncomingBroadcastReceiver.getIntentIncoming( - context, + requireNotNull(context), data.toBundle() ) ) @@ -68,9 +137,9 @@ class FlutterCallkitIncomingPlugin : FlutterPlugin, MethodCallHandler, ActivityA } "startCall" -> { val data = Data(call.arguments()) - context.sendBroadcast( + context?.sendBroadcast( CallkitIncomingBroadcastReceiver.getIntentStart( - context, + requireNotNull(context), data.toBundle() ) ) @@ -78,9 +147,9 @@ class FlutterCallkitIncomingPlugin : FlutterPlugin, MethodCallHandler, ActivityA } "endCall" -> { val data = Data(call.arguments()) - context.sendBroadcast( + context?.sendBroadcast( CallkitIncomingBroadcastReceiver.getIntentEnded( - context, + requireNotNull(context), data.toBundle() ) ) @@ -89,9 +158,9 @@ class FlutterCallkitIncomingPlugin : FlutterPlugin, MethodCallHandler, ActivityA "endAllCalls" -> { val calls = getDataActiveCalls(context) calls.forEach { - context.sendBroadcast( + context?.sendBroadcast( CallkitIncomingBroadcastReceiver.getIntentEnded( - context, + requireNotNull(context), it.toBundle() ) ) @@ -112,12 +181,13 @@ class FlutterCallkitIncomingPlugin : FlutterPlugin, MethodCallHandler, ActivityA } override fun onDetachedFromEngine(@NonNull binding: FlutterPlugin.FlutterPluginBinding) { - channel.setMethodCallHandler(null) + channel?.setMethodCallHandler(null) } override fun onAttachedToActivity(binding: ActivityPluginBinding) { this.activity = binding.activity + this.context = binding.activity.applicationContext } override fun onDetachedFromActivityForConfigChanges() { @@ -125,6 +195,7 @@ class FlutterCallkitIncomingPlugin : FlutterPlugin, MethodCallHandler, ActivityA override fun onReattachedToActivityForConfigChanges(binding: ActivityPluginBinding) { this.activity = binding.activity + this.context = binding.activity.applicationContext } override fun onDetachedFromActivity() {} diff --git a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme index fb2dffc4..7dbd44f3 100644 --- a/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme +++ b/example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme @@ -43,7 +43,7 @@ buildConfiguration = "Debug" selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" - launchStyle = "0" + launchStyle = "1" useCustomWorkingDirectory = "NO" ignoresPersistentStateOnLaunch = "NO" debugDocumentVersioning = "YES" diff --git a/example/ios/Runner/AppDelegate.swift b/example/ios/Runner/AppDelegate.swift index fa34b88b..c8a96100 100644 --- a/example/ios/Runner/AppDelegate.swift +++ b/example/ios/Runner/AppDelegate.swift @@ -44,6 +44,7 @@ import flutter_callkit_incoming func pushRegistry(_ registry: PKPushRegistry, didUpdate credentials: PKPushCredentials, for type: PKPushType) { print(credentials.token) let deviceToken = credentials.token.map { String(format: "%02x", $0) }.joined() + print(deviceToken) //Save deviceToken to your server SwiftFlutterCallkitIncomingPlugin.sharedInstance?.setDevicePushTokenVoIP(deviceToken) } diff --git a/example/lib/main.dart b/example/lib/main.dart index 388c3c2c..ffc51069 100644 --- a/example/lib/main.dart +++ b/example/lib/main.dart @@ -161,7 +161,7 @@ class _MyAppState extends State { } Future makeFakeCallInComing() async { - await Future.delayed(const Duration(seconds: 7), () async { + await Future.delayed(const Duration(seconds: 10), () async { this._currentUuid = _uuid.v4(); var params = { 'id': _currentUuid, diff --git a/ios/flutter_callkit_incoming.podspec b/ios/flutter_callkit_incoming.podspec index b3c42223..92220339 100644 --- a/ios/flutter_callkit_incoming.podspec +++ b/ios/flutter_callkit_incoming.podspec @@ -9,7 +9,7 @@ Pod::Spec.new do |s| s.description = <<-DESC Flutter Callkit Incoming DESC - s.homepage = 'http://example.com' + s.homepage = 'https://github.com/hiennguyen92/flutter_callkit_incoming' s.license = { :file => '../LICENSE' } s.author = { 'Hien Nguyen' => 'hien@hiennv.com' } s.source = { :path => '.' } diff --git a/lib/flutter_callkit_incoming.dart b/lib/flutter_callkit_incoming.dart index aff65d9b..ff7ed273 100644 --- a/lib/flutter_callkit_incoming.dart +++ b/lib/flutter_callkit_incoming.dart @@ -85,9 +85,8 @@ class FlutterCallkitIncoming { } class CallEvent { - - static const String ACTION_DID_UPDATE_DEVICE_PUSH_TOKEN_VOIP = - "com.hiennv.flutter_callkit_incoming.DID_UPDATE_DEVICE_PUSH_TOKEN_VOIP"; + static const String ACTION_DID_UPDATE_DEVICE_PUSH_TOKEN_VOIP = + "com.hiennv.flutter_callkit_incoming.DID_UPDATE_DEVICE_PUSH_TOKEN_VOIP"; static const String ACTION_CALL_INCOMING = "com.hiennv.flutter_callkit_incoming.ACTION_CALL_INCOMING"; diff --git a/pubspec.yaml b/pubspec.yaml index d2c070a9..de87fed9 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -1,6 +1,6 @@ name: flutter_callkit_incoming description: Flutter Callkit Incoming to show callkit screen in your Flutter app. -version: 1.0.1+1 +version: 1.0.1+2 homepage: https://github.com/hiennguyen92/flutter_callkit_incoming environment: