Skip to content

Commit a471f8e

Browse files
hiennguyen92samgued
authored andcommitted
Update LogoUrl, Some bug
1 parent b180d9f commit a471f8e

File tree

13 files changed

+103
-39
lines changed

13 files changed

+103
-39
lines changed

android/build.gradle

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -33,10 +33,6 @@ android {
3333
if (project.android.hasProperty("namespace")) {
3434
namespace "com.hiennv.flutter_callkit_incoming"
3535
}
36-
37-
kotlin {
38-
jvmToolchain(17)
39-
}
4036

4137
sourceSets {
4238
main.java.srcDirs += 'src/main/kotlin'
@@ -49,9 +45,19 @@ android {
4945
}
5046
}
5147

48+
java {
49+
toolchain {
50+
languageVersion.set(JavaLanguageVersion.of(17))
51+
}
52+
}
53+
54+
kotlin {
55+
jvmToolchain(17)
56+
}
57+
5258
dependencies {
5359
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
54-
implementation 'androidx.core:core-ktx:1.10.0'
60+
implementation 'androidx.core:core-ktx:1.13.1'
5561
implementation 'androidx.appcompat:appcompat:1.6.1'
5662
implementation 'de.hdodenhof:circleimageview:3.1.0'
5763
implementation 'com.squareup.picasso:picasso:2.71828'

android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/Call.kt

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,8 @@ data class Data(val args: Map<String, Any?>) {
4444
var isCustomSmallExNotification: Boolean = false
4545
@JsonProperty("isShowLogo")
4646
var isShowLogo: Boolean = false
47+
@JsonProperty("logoUrl")
48+
var logoUrl: String
4749
@JsonProperty("isShowCallID")
4850
var isShowCallID: Boolean = false
4951
@JsonProperty("ringtonePath")
@@ -96,6 +98,7 @@ data class Data(val args: Map<String, Any?>) {
9698
isCustomNotification = android["isCustomNotification"] as? Boolean ?: false
9799
isCustomSmallExNotification = android["isCustomSmallExNotification"] as? Boolean ?: false
98100
isShowLogo = android["isShowLogo"] as? Boolean ?: false
101+
logoUrl = android["logoUrl"] as? String ?: ""
99102
isShowCallID = android["isShowCallID"] as? Boolean ?: false
100103
ringtonePath = android["ringtonePath"] as? String ?: ""
101104
backgroundColor = android["backgroundColor"] as? String ?: "#0955fa"
@@ -193,6 +196,10 @@ data class Data(val args: Map<String, Any?>) {
193196
CallkitConstants.EXTRA_CALLKIT_IS_SHOW_LOGO,
194197
isShowLogo
195198
)
199+
bundle.putString(
200+
CallkitConstants.EXTRA_CALLKIT_LOGO_URL,
201+
logoUrl
202+
)
196203
bundle.putBoolean(
197204
CallkitConstants.EXTRA_CALLKIT_IS_SHOW_CALL_ID,
198205
isShowCallID
@@ -287,6 +294,8 @@ data class Data(val args: Map<String, Any?>) {
287294
CallkitConstants.EXTRA_CALLKIT_IS_SHOW_LOGO,
288295
false
289296
)
297+
data.logoUrl =
298+
bundle.getString(CallkitConstants.EXTRA_CALLKIT_LOGO_URL, "")
290299
data.isShowCallID = bundle.getBoolean(
291300
CallkitConstants.EXTRA_CALLKIT_IS_SHOW_CALL_ID,
292301
false

android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitConstants.kt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ object CallkitConstants {
5151
const val EXTRA_CALLKIT_IS_CUSTOM_SMALL_EX_NOTIFICATION =
5252
"EXTRA_CALLKIT_IS_CUSTOM_SMALL_EX_NOTIFICATION"
5353
const val EXTRA_CALLKIT_IS_SHOW_LOGO = "EXTRA_CALLKIT_IS_SHOW_LOGO"
54+
const val EXTRA_CALLKIT_LOGO_URL = "EXTRA_CALLKIT_LOGO_URL"
5455
const val EXTRA_CALLKIT_IS_SHOW_CALL_ID = "EXTRA_CALLKIT_IS_SHOW_CALL_ID"
5556
const val EXTRA_CALLKIT_RINGTONE_PATH = "EXTRA_CALLKIT_RINGTONE_PATH"
5657
const val EXTRA_CALLKIT_BACKGROUND_COLOR = "EXTRA_CALLKIT_BACKGROUND_COLOR"

android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitIncomingActivity.kt

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,9 +93,11 @@ class CallkitIncomingActivity : Activity() {
9393
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
9494
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
9595
setTurnScreenOn(true)
96+
setShowWhenLocked(true)
9697
} else {
9798
window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
9899
window.addFlags(WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON)
100+
window.addFlags(WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED)
99101
window.addFlags(WindowManager.LayoutParams.FLAG_DISMISS_KEYGUARD)
100102
}
101103
transparentStatusAndNavigation()
@@ -187,6 +189,18 @@ class CallkitIncomingActivity : Activity() {
187189

188190
val isShowLogo = data?.getBoolean(CallkitConstants.EXTRA_CALLKIT_IS_SHOW_LOGO, false)
189191
ivLogo.visibility = if (isShowLogo == true) View.VISIBLE else View.INVISIBLE
192+
var logoUrl = data?.getString(CallkitConstants.EXTRA_CALLKIT_LOGO_URL, "")
193+
if (logoUrl != null && logoUrl.isNotEmpty()) {
194+
if (!logoUrl.startsWith("http://", true) && !logoUrl.startsWith("https://", true)){
195+
logoUrl = String.format("file:///android_asset/flutter_assets/%s", logoUrl)
196+
}
197+
val headers = data?.getSerializable(CallkitConstants.EXTRA_CALLKIT_HEADERS) as HashMap<String, Any?>
198+
getPicassoInstance(this@CallkitIncomingActivity, headers)
199+
.load(logoUrl)
200+
.placeholder(R.drawable.transparent)
201+
.error(R.drawable.transparent)
202+
.into(ivLogo)
203+
}
190204

191205
val avatarUrl = data?.getString(CallkitConstants.EXTRA_CALLKIT_AVATAR, "")
192206
if (avatarUrl != null && avatarUrl.isNotEmpty()) {

android/src/main/kotlin/com/hiennv/flutter_callkit_incoming/CallkitNotificationManager.kt

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -54,38 +54,43 @@ class CallkitNotificationManager(private val context: Context) {
5454
private var dataNotificationPermission: Map<String, Any> = HashMap()
5555

5656
@SuppressLint("MissingPermission")
57-
private var targetLoadAvatarDefault = object : Target {
57+
private fun createAvatarTargetDefault(notificationId: Int) : Target {
58+
return object : Target {
59+
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
60+
notificationBuilder.setLargeIcon(bitmap)
61+
getNotificationManager().notify(notificationId, notificationBuilder.build())
62+
}
5863

59-
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
60-
notificationBuilder.setLargeIcon(bitmap)
61-
getNotificationManager().notify(notificationId, notificationBuilder.build())
62-
}
64+
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {
65+
}
6366

64-
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {
67+
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
68+
}
6569
}
6670

67-
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
68-
}
6971
}
7072

7173
@SuppressLint("MissingPermission")
72-
private var targetLoadAvatarCustomize = object : Target {
73-
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
74-
notificationViews?.setImageViewBitmap(R.id.ivAvatar, bitmap)
75-
notificationViews?.setViewVisibility(R.id.ivAvatar, View.VISIBLE)
76-
notificationSmallViews?.setImageViewBitmap(R.id.ivAvatar, bitmap)
77-
notificationSmallViews?.setViewVisibility(R.id.ivAvatar, View.VISIBLE)
78-
getNotificationManager().notify(notificationId, notificationBuilder.build())
79-
}
74+
private fun createAvatarTargetCustom(notificationId: Int): Target {
75+
return object : Target {
76+
override fun onBitmapLoaded(bitmap: Bitmap?, from: Picasso.LoadedFrom?) {
77+
notificationViews?.setImageViewBitmap(R.id.ivAvatar, bitmap)
78+
notificationViews?.setViewVisibility(R.id.ivAvatar, View.VISIBLE)
79+
notificationSmallViews?.setImageViewBitmap(R.id.ivAvatar, bitmap)
80+
notificationSmallViews?.setViewVisibility(R.id.ivAvatar, View.VISIBLE)
81+
getNotificationManager().notify(notificationId, notificationBuilder.build())
82+
}
8083

81-
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {
82-
}
84+
override fun onBitmapFailed(e: Exception?, errorDrawable: Drawable?) {
85+
}
8386

84-
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
87+
override fun onPrepareLoad(placeHolderDrawable: Drawable?) {
88+
}
8589
}
8690
}
8791

8892

93+
8994
@SuppressLint("MissingPermission")
9095
fun showIncomingNotification(data: Bundle) {
9196
data.putLong(EXTRA_TIME_START_CALL, System.currentTimeMillis())
@@ -183,7 +188,7 @@ class CallkitNotificationManager(private val context: Context) {
183188
val headers =
184189
data.getSerializable(CallkitConstants.EXTRA_CALLKIT_HEADERS) as HashMap<String, Any?>
185190
getPicassoInstance(context, headers).load(avatarUrl)
186-
.into(targetLoadAvatarDefault)
191+
.into(createAvatarTargetDefault(notificationId))
187192
}
188193
val caller = data.getString(CallkitConstants.EXTRA_CALLKIT_NAME_CALLER, "")
189194
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
@@ -261,7 +266,7 @@ class CallkitNotificationManager(private val context: Context) {
261266
data.getSerializable(CallkitConstants.EXTRA_CALLKIT_HEADERS) as HashMap<String, Any?>
262267
getPicassoInstance(context, headers).load(avatarUrl)
263268
.transform(CircleTransform())
264-
.into(targetLoadAvatarCustomize)
269+
.into(createAvatarTargetCustom(notificationId))
265270
}
266271
}
267272

@@ -347,7 +352,7 @@ class CallkitNotificationManager(private val context: Context) {
347352
data.getSerializable(CallkitConstants.EXTRA_CALLKIT_HEADERS) as HashMap<String, Any?>
348353

349354
getPicassoInstance(context, headers).load(avatarUrl)
350-
.transform(CircleTransform()).into(targetLoadAvatarCustomize)
355+
.transform(CircleTransform()).into(createAvatarTargetCustom(notificationId))
351356
}
352357
notificationBuilder.setStyle(NotificationCompat.DecoratedCustomViewStyle())
353358
notificationBuilder.setCustomContentView(notificationViews)
@@ -371,7 +376,7 @@ class CallkitNotificationManager(private val context: Context) {
371376
data.getSerializable(CallkitConstants.EXTRA_CALLKIT_HEADERS) as HashMap<String, Any?>
372377

373378
getPicassoInstance(context, headers).load(avatarUrl)
374-
.into(targetLoadAvatarDefault)
379+
.into(createAvatarTargetDefault(notificationId))
375380
}
376381
val isShowCallback = data.getBoolean(
377382
CallkitConstants.EXTRA_CALLKIT_MISSED_CALL_CALLBACK_SHOW,
@@ -571,7 +576,8 @@ class CallkitNotificationManager(private val context: Context) {
571576
}
572577

573578
fun requestFullIntentPermission(activity: Activity?) {
574-
if (Build.VERSION.SDK_INT > 33) {
579+
val canUseFullScreenIntent = getNotificationManager().canUseFullScreenIntent();
580+
if (!canUseFullScreenIntent && Build.VERSION.SDK_INT > 33) {
575581
val intent = Intent(Settings.ACTION_MANAGE_APP_USE_FULL_SCREEN_INTENT).apply {
576582
data = Uri.fromParts("package", activity?.packageName, null)
577583
}

example/ios/Flutter/AppFrameworkInfo.plist

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,6 @@
2121
<key>CFBundleVersion</key>
2222
<string>1.0</string>
2323
<key>MinimumOSVersion</key>
24-
<string>11.0</string>
24+
<string>12.0</string>
2525
</dict>
2626
</plist>

example/ios/Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# Uncomment this line to define a global platform for your project
2-
platform :ios, '11.0'
2+
platform :ios, '12.0'
33

44
# CocoaPods analytics sends network stats synchronously affecting flutter build latency.
55
ENV['COCOAPODS_DISABLE_STATS'] = 'true'

example/ios/Runner.xcodeproj/project.pbxproj

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@
174174
9705A1C41CF9048500538489 /* Embed Frameworks */,
175175
3B06AD1E1E4923F5004D2608 /* Thin Binary */,
176176
DFAA70DE2A8178FBBABE24D6 /* [CP] Embed Pods Frameworks */,
177+
797763D9C3DD0E31FFB5E1C2 /* [CP] Copy Pods Resources */,
177178
);
178179
buildRules = (
179180
);
@@ -190,7 +191,7 @@
190191
97C146E61CF9000F007C117D /* Project object */ = {
191192
isa = PBXProject;
192193
attributes = {
193-
LastUpgradeCheck = 1300;
194+
LastUpgradeCheck = 1510;
194195
ORGANIZATIONNAME = "";
195196
TargetAttributes = {
196197
97C146ED1CF9000F007C117D = {
@@ -273,6 +274,23 @@
273274
shellScript = "diff \"${PODS_PODFILE_DIR_PATH}/Podfile.lock\" \"${PODS_ROOT}/Manifest.lock\" > /dev/null\nif [ $? != 0 ] ; then\n # print error to STDERR\n echo \"error: The sandbox is not in sync with the Podfile.lock. Run 'pod install' or update your CocoaPods installation.\" >&2\n exit 1\nfi\n# This output is used by Xcode 'outputs' to avoid re-running this script phase.\necho \"SUCCESS\" > \"${SCRIPT_OUTPUT_FILE_0}\"\n";
274275
showEnvVarsInLog = 0;
275276
};
277+
797763D9C3DD0E31FFB5E1C2 /* [CP] Copy Pods Resources */ = {
278+
isa = PBXShellScriptBuildPhase;
279+
buildActionMask = 2147483647;
280+
files = (
281+
);
282+
inputFileListPaths = (
283+
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-input-files.xcfilelist",
284+
);
285+
name = "[CP] Copy Pods Resources";
286+
outputFileListPaths = (
287+
"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources-${CONFIGURATION}-output-files.xcfilelist",
288+
);
289+
runOnlyForDeploymentPostprocessing = 0;
290+
shellPath = /bin/sh;
291+
shellScript = "\"${PODS_ROOT}/Target Support Files/Pods-Runner/Pods-Runner-resources.sh\"\n";
292+
showEnvVarsInLog = 0;
293+
};
276294
9740EEB61CF901F6004384FC /* Run Script */ = {
277295
isa = PBXShellScriptBuildPhase;
278296
alwaysOutOfDate = 1;
@@ -402,7 +420,7 @@
402420
DEVELOPMENT_TEAM = U92Q3WLA29;
403421
ENABLE_BITCODE = NO;
404422
INFOPLIST_FILE = Runner/Info.plist;
405-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
423+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
406424
LD_RUNPATH_SEARCH_PATHS = (
407425
"$(inherited)",
408426
"@executable_path/Frameworks",
@@ -533,7 +551,7 @@
533551
DEVELOPMENT_TEAM = U92Q3WLA29;
534552
ENABLE_BITCODE = NO;
535553
INFOPLIST_FILE = Runner/Info.plist;
536-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
554+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
537555
LD_RUNPATH_SEARCH_PATHS = (
538556
"$(inherited)",
539557
"@executable_path/Frameworks",
@@ -558,7 +576,7 @@
558576
DEVELOPMENT_TEAM = U92Q3WLA29;
559577
ENABLE_BITCODE = NO;
560578
INFOPLIST_FILE = Runner/Info.plist;
561-
IPHONEOS_DEPLOYMENT_TARGET = 11.0;
579+
IPHONEOS_DEPLOYMENT_TARGET = 12.0;
562580
LD_RUNPATH_SEARCH_PATHS = (
563581
"$(inherited)",
564582
"@executable_path/Frameworks",

example/ios/Runner.xcodeproj/xcshareddata/xcschemes/Runner.xcscheme

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<Scheme
3-
LastUpgradeVersion = "1300"
3+
LastUpgradeVersion = "1510"
44
version = "1.3">
55
<BuildAction
66
parallelizeBuildables = "YES"

example/lib/home_page.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -152,7 +152,8 @@ class HomePageState extends State<HomePage> {
152152
headers: <String, dynamic>{'apiKey': 'Abc@123!', 'platform': 'flutter'},
153153
android: const AndroidParams(
154154
isCustomNotification: true,
155-
isShowLogo: false,
155+
isShowLogo: true,
156+
logoUrl: 'assets/test.png',
156157
ringtonePath: 'system_ringtone_default',
157158
backgroundColor: '#0955fa',
158159
backgroundUrl: 'assets/test.png',

0 commit comments

Comments
 (0)