Skip to content

Commit 605c017

Browse files
reneechaiMinTate
reneechai
authored andcommitted
[Android][TUICallKit]fix some UI experience issues
1 parent 6a4f7dd commit 605c017

36 files changed

+215
-121
lines changed

Android/app/mcs-services.json

Lines changed: 0 additions & 6 deletions
This file was deleted.
Binary file not shown.

Android/app/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/demo/LoginActivity.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,9 @@ public void onSuccess() {
5454
Log.i(TAG, "login onSuccess");
5555
SettingsConfig.userId = userId;
5656
getUserInfo(userId);
57+
TUICallKit.createInstance(getApplication()).enableFloatWindow(SettingsConfig.isShowFloatingWindow);
5758
TUICallKit.createInstance(getApplication()).enableVirtualBackground(SettingsConfig.isShowBlurBackground);
59+
TUICallKit.createInstance(getApplication()).enableIncomingBanner(SettingsConfig.isIncomingBanner);
5860
}
5961

6062
@Override

Android/app/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/demo/setting/SettingsActivity.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class SettingsActivity extends BaseActivity {
3434
private SwitchCompat mSwitchMute;
3535
private SwitchCompat mSwitchFloating;
3636
private SwitchCompat mSwitchBlurBackground;
37+
private SwitchCompat mSwitchIncomingBanner;
3738
private EditText mEditDigitalRoomId;
3839
private EditText mEditStringRoomId;
3940
private EditText mEditTimeout;
@@ -65,6 +66,7 @@ private void initView() {
6566
mSwitchMute = findViewById(R.id.switch_mute);
6667
mSwitchFloating = findViewById(R.id.switch_floating);
6768
mSwitchBlurBackground = findViewById(R.id.switch_blur_background);
69+
mSwitchIncomingBanner = findViewById(R.id.switch_incoming_banner);
6870

6971
mEditDigitalRoomId = findViewById(R.id.et_room_id_num);
7072
mEditStringRoomId = findViewById(R.id.et_room_id_str);
@@ -112,6 +114,10 @@ private void initView() {
112114
SettingsConfig.isShowBlurBackground = isChecked;
113115
TUICallKit.createInstance(getApplicationContext()).enableVirtualBackground(isChecked);
114116
});
117+
mSwitchIncomingBanner.setOnCheckedChangeListener((buttonView, isChecked) -> {
118+
SettingsConfig.isIncomingBanner = isChecked;
119+
TUICallKit.createInstance(getApplication()).enableIncomingBanner(isChecked);
120+
});
115121

116122
mEditDigitalRoomId.setOnEditorActionListener((v, actionId, event) -> {
117123
if (EditorInfo.IME_ACTION_DONE == actionId) {
@@ -211,6 +217,7 @@ private void initData() {
211217
mSwitchMute.setChecked(SettingsConfig.isMute);
212218
mSwitchFloating.setChecked(SettingsConfig.isShowFloatingWindow);
213219
mSwitchBlurBackground.setChecked(SettingsConfig.isShowBlurBackground);
220+
mSwitchIncomingBanner.setChecked(SettingsConfig.isIncomingBanner);
214221

215222
mEditDigitalRoomId.setText("" + SettingsConfig.intRoomId);
216223
mEditStringRoomId.setText("" + SettingsConfig.strRoomId);

Android/app/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/demo/setting/SettingsConfig.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ public class SettingsConfig {
1616
public static String ringPath =
1717
SPUtils.getInstance(CallingBellFeature.PROFILE_TUICALLKIT).getString(CallingBellFeature.PROFILE_CALL_BELL);
1818
public static boolean isMute = false;
19-
public static boolean isShowFloatingWindow = false;
19+
public static boolean isShowFloatingWindow = true;
2020
public static boolean isShowBlurBackground = true;
21+
public static boolean isIncomingBanner = true;
2122
public static int intRoomId = 0;
2223
public static String strRoomId = "";
2324
public static int callTimeOut = 30;

Android/app/src/main/res/layout/app_activity_login.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
android:layout_width="wrap_content"
1111
android:layout_height="wrap_content"
1212
android:layout_marginStart="20dp"
13-
android:layout_marginTop="151dp"
13+
android:layout_marginTop="171dp"
1414
app:layout_constraintEnd_toEndOf="parent"
1515
app:layout_constraintStart_toStartOf="parent"
1616
app:layout_constraintTop_toTopOf="parent">

Android/app/src/main/res/layout/app_activity_settings.xml

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -266,6 +266,38 @@
266266
app:trackTint="#FF999999" />
267267
</LinearLayout>
268268

269+
<LinearLayout
270+
android:layout_width="match_parent"
271+
android:layout_height="30dp"
272+
android:layout_marginLeft="16dp"
273+
android:layout_marginTop="20dp"
274+
android:layout_marginRight="16dp"
275+
android:gravity="center_vertical"
276+
android:orientation="horizontal">
277+
278+
<TextView
279+
android:layout_width="wrap_content"
280+
android:layout_height="wrap_content"
281+
android:text="@string/app_incoming_banner"
282+
android:textColor="#000000"
283+
android:textSize="16sp" />
284+
285+
<View
286+
android:layout_width="wrap_content"
287+
android:layout_height="wrap_content"
288+
android:layout_weight="1" />
289+
290+
<androidx.appcompat.widget.SwitchCompat
291+
android:id="@+id/switch_incoming_banner"
292+
android:layout_width="wrap_content"
293+
android:layout_height="25dp"
294+
android:checked="true"
295+
app:switchMinWidth="50dp"
296+
app:thumbTint="@color/app_switch_selector"
297+
app:thumbTintMode="multiply"
298+
app:trackTint="#FF999999" />
299+
</LinearLayout>
300+
269301
<TextView
270302
android:layout_width="wrap_content"
271303
android:layout_height="30dp"

Android/app/src/main/res/values-en/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
<string name="app_call_setting">Call Settings</string>
5959
<string name="app_show_float_button">Show floating</string>
6060
<string name="app_blur_background">Show blur background</string>
61+
<string name="app_incoming_banner">Show incoming banner</string>
6162
<string name="app_call_params_setting">Call Parameters</string>
6263
<string name="app_please_set_call_waiting_timeout">Please set call waiting timeout</string>
6364
<string name="app_user_data">Extended</string>

Android/app/src/main/res/values-ja/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<string name="app_call_setting">通話設定</string>
5656
<string name="app_show_float_button">フローティングウィンドウの表示</string>
5757
<string name="app_blur_background">背景をぼかす</string>
58+
<string name="app_incoming_banner">着信表示バナー</string>
5859
<string name="app_call_params_setting">通話パラメータの設定</string>
5960
<string name="app_please_set_call_waiting_timeout">コールウェイティングのタイムアウト時間を設定してください</string>
6061
<string name="app_user_data">拡張情報</string>

Android/app/src/main/res/values-zh/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@
5555
<string name="app_call_setting">通话设置</string>
5656
<string name="app_show_float_button">显示悬浮窗按钮</string>
5757
<string name="app_blur_background">显示模糊背景按钮</string>
58+
<string name="app_incoming_banner">显示来电横幅</string>
5859
<string name="app_call_params_setting">通话自定义参数设置</string>
5960
<string name="app_please_set_call_waiting_timeout">请设置呼叫等待超时时间</string>
6061
<string name="app_user_data">扩展信息</string>

Android/app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@
5858
<string name="app_call_setting">Call Settings</string>
5959
<string name="app_show_float_button">Show floating</string>
6060
<string name="app_blur_background">Show blur background</string>
61+
<string name="app_incoming_banner">Show incoming banner</string>
6162
<string name="app_call_params_setting">Call Parameters</string>
6263
<string name="app_please_set_call_waiting_timeout">Please set call waiting timeout</string>
6364
<string name="app_user_data">Extended</string>

Android/tuicallkit-kt/src/main/AndroidManifest.xml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,6 @@
6363
android:enabled="true"
6464
android:exported="false">
6565
<intent-filter>
66-
<action android:name="accept_call_action" />
6766
<action android:name="reject_call_action" />
6867
</intent-filter>
6968
</receiver>

Android/tuicallkit-kt/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/TUICallKit.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,4 +96,10 @@ abstract class TUICallKit {
9696
* Enable Virtual Background
9797
*/
9898
open fun enableVirtualBackground(enable: Boolean) {}
99+
100+
/**
101+
* Enable callee show banner view when received an new invitation
102+
* default: false
103+
*/
104+
open fun enableIncomingBanner(enable: Boolean) {}
99105
}

Android/tuicallkit-kt/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/TUICallKitImpl.kt

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -161,10 +161,15 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit(), ITUIN
161161
TUICallState.instance.showVirtualBackgroundButton = enable
162162

163163
val data = HashMap<String, Any>()
164-
data["enablevirtualbackground"] = enable
164+
data[Constants.KEY_VIRTUAL_BACKGROUND] = enable
165165
EngineManager.instance.reportOnlineLog(data)
166166
}
167167

168+
override fun enableIncomingBanner(enable: Boolean) {
169+
TUILog.i(TAG, "TUICallKit enableIncomingBanner{enable:${enable}")
170+
TUICallState.instance.enableIncomingBanner = enable
171+
}
172+
168173
fun queryOfflineCall() {
169174
TUILog.i(TAG, "queryOfflineCall start")
170175
if (TUICallDefine.Status.Accept != TUICallState.instance.selfUser.get().callStatus.get()) {
@@ -253,24 +258,39 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit(), ITUIN
253258
val hasBgPermission = PermissionRequester.newInstance(PermissionRequester.BG_START_PERMISSION).has()
254259
val hasNotificationPermission = PermissionRequest.isNotificationEnabled()
255260

256-
val innerNotification = isShowInnerNotification()
261+
val isFCMData = isFCMDataNotification()
257262

258263
TUILog.i(
259264
TAG_VIEW, "handleNewCall, isAppInBackground: $isAppInBackground, floatPermission: $hasFloatPermission" +
260265
", backgroundStartPermission: $hasBgPermission, notificationPermission: $hasNotificationPermission , " +
261-
"showNotification: $innerNotification"
266+
"isFCMDataNotification: $isFCMData, enableIncomingBanner:${TUICallState.instance.enableIncomingBanner}"
262267
)
268+
269+
if (DeviceUtils.isScreenLocked(context)) {
270+
TUILog.i(TAG_VIEW, "handleNewCall, screen is locked, try to pop up call full screen view")
271+
startFullScreenView()
272+
return@post
273+
}
274+
275+
if (!TUICallState.instance.enableIncomingBanner) {
276+
if (isAppInBackground) {
277+
when {
278+
isFCMData && hasFloatPermission -> startSmallScreenView(IncomingFloatView(context))
279+
isFCMData && hasNotificationPermission -> startSmallScreenView(IncomingNotificationView(context))
280+
else -> startFullScreenView()
281+
}
282+
} else {
283+
startFullScreenView()
284+
}
285+
286+
return@post
287+
}
288+
263289
if (isAppInBackground) {
264290
when {
265291
hasFloatPermission -> startSmallScreenView(IncomingFloatView(context))
266-
innerNotification && hasNotificationPermission -> startSmallScreenView(
267-
IncomingNotificationView(context)
268-
)
269-
270-
hasBgPermission -> startFullScreenView()
271-
else -> {
272-
//do nothing, wait user click desktop icon
273-
}
292+
isFCMData && hasNotificationPermission -> startSmallScreenView(IncomingNotificationView(context))
293+
else -> startFullScreenView()
274294
}
275295
return@post
276296
}
@@ -283,15 +303,11 @@ class TUICallKitImpl private constructor(context: Context) : TUICallKit(), ITUIN
283303
}
284304
}
285305

286-
private fun isShowInnerNotification(): Boolean {
287-
if (TUICore.getService(TUIConstants.TIMPush.SERVICE_NAME) == null) {
288-
return true
289-
}
290-
306+
private fun isFCMDataNotification(): Boolean {
291307
val pushBrandId =
292308
TUICore.callService(TUIConstants.TIMPush.SERVICE_NAME, TUIConstants.TIMPush.METHOD_GET_PUSH_BRAND_ID, null)
293-
294-
return pushBrandId == TUIConstants.DeviceInfo.BRAND_GOOGLE_ELSE
309+
return TUICore.getService(TUIConstants.TIMPush.SERVICE_NAME) != null
310+
&& pushBrandId == TUIConstants.DeviceInfo.BRAND_GOOGLE_ELSE
295311
}
296312

297313
private fun startFullScreenView() {

Android/tuicallkit-kt/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/data/Constants.kt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ object Constants {
1313

1414
const val ACCEPT_CALL_ACTION = "accept_call_action"
1515
const val REJECT_CALL_ACTION = "reject_call_action"
16+
17+
const val KEY_VIRTUAL_BACKGROUND = "enablevirtualbackground"
1618
}

Android/tuicallkit-kt/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/extensions/TUICallService.kt

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package com.tencent.qcloud.tuikit.tuicallkit.extensions
22

33
import android.app.Notification
44
import android.app.NotificationChannel
5+
import android.app.NotificationChannelGroup
56
import android.app.NotificationManager
67
import android.app.Service
78
import android.content.Context
@@ -48,9 +49,16 @@ class TUICallService : Service() {
4849
val notificationChannelId = "notification_channel_id_01"
4950
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
5051
val channelName = "Call Foreground Service Notification"
52+
val groupID = "CallGroupId"
53+
val groupName = "CallGroup"
54+
55+
val channelGroup = NotificationChannelGroup(groupID, groupName)
56+
notificationManager.createNotificationChannelGroup(channelGroup)
57+
5158
val notificationChannel = NotificationChannel(
5259
notificationChannelId, channelName, NotificationManager.IMPORTANCE_LOW
5360
)
61+
notificationChannel.group = groupID
5462
notificationChannel.description = "Channel description"
5563
notificationManager?.createNotificationChannel(notificationChannel)
5664
}

Android/tuicallkit-kt/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/state/TUICallState.kt

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ class TUICallState {
3838

3939
public var enableMuteMode = false
4040
public var enableFloatWindow = false
41+
public var enableIncomingBanner = false
4142
public var showVirtualBackgroundButton = false
4243
public var enableBlurBackground = LiveData<Boolean>()
4344
public var reverse1v1CallRenderView = false
@@ -427,6 +428,9 @@ class TUICallState {
427428
user = User()
428429
user.id = userId
429430
}
431+
if (selfUser.get().callStatus.get() != TUICallDefine.Status.Accept) {
432+
selfUser.get().callStatus.set(TUICallDefine.Status.Accept)
433+
}
430434
user.callStatus.set(TUICallDefine.Status.Accept)
431435
if (!remoteUserList.get().contains(user) && !userId.equals(selfUser.get().id)) {
432436
remoteUserList.add(user)

Android/tuicallkit-kt/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/utils/DeviceUtils.kt

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@ package com.tencent.qcloud.tuikit.tuicallkit.utils
22

33
import android.app.ActivityManager
44
import android.content.Context
5+
import android.os.Build
56
import android.os.PowerManager
67
import android.text.TextUtils
78
import android.view.Window
89
import android.view.WindowManager
10+
import com.tencent.qcloud.tuicore.util.TUIBuild
911

1012
object DeviceUtils {
1113
fun setScreenLockParams(window: Window?) {
@@ -30,6 +32,15 @@ object DeviceUtils {
3032
}
3133
}
3234

35+
fun isScreenLocked(context: Context): Boolean {
36+
val powerManager = context.getSystemService(Context.POWER_SERVICE) as PowerManager
37+
return if (TUIBuild.getVersionInt() >= Build.VERSION_CODES.KITKAT_WATCH) {
38+
!powerManager.isInteractive
39+
} else {
40+
false
41+
}
42+
}
43+
3344
fun isServiceRunning(context: Context?, className: String): Boolean {
3445
if (context == null || TextUtils.isEmpty(className)) {
3546
return false

Android/tuicallkit-kt/src/main/java/com/tencent/qcloud/tuikit/tuicallkit/utils/ImageLoader.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,14 @@ package com.tencent.qcloud.tuikit.tuicallkit.utils
22

33
import android.content.Context
44
import android.content.res.Resources
5-
import android.graphics.*
5+
import android.graphics.Bitmap
6+
import android.graphics.BitmapShader
7+
import android.graphics.Canvas
8+
import android.graphics.Color
9+
import android.graphics.Paint
10+
import android.graphics.RectF
11+
import android.graphics.RenderEffect
12+
import android.graphics.Shader
613
import android.graphics.drawable.Drawable
714
import android.os.Build
815
import android.widget.ImageView
@@ -49,15 +56,15 @@ object ImageLoader {
4956
Glide.with(context!!.applicationContext).asGif().load(resourceId).into(imageView!!)
5057
}
5158

52-
fun loadBlurImage(context: Context?, imageView: ImageView?, url: Any?) {
59+
fun loadBlurImage(context: Context?, imageView: ImageView?, url: Any?, radius: Float = 80f) {
5360
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
5461
loadImage(context, imageView, url, R.drawable.tuicallkit_ic_avatar)
55-
val radius = 80f
5662
imageView?.setRenderEffect(RenderEffect.createBlurEffect(radius, radius, Shader.TileMode.MIRROR))
5763
} else {
5864
Glide.with(context!!.applicationContext).load(url).error(R.drawable.tuicallkit_ic_avatar)
5965
.apply(RequestOptions.bitmapTransform(BlurTransformation(context))).into(imageView!!)
6066
}
67+
imageView?.setColorFilter(Color.parseColor("#8022262E"))
6168
}
6269

6370
@JvmStatic

0 commit comments

Comments
 (0)