6.6.9版本

This commit is contained in:
zlzw 2024-05-21 12:58:06 +08:00
parent 4513d8495f
commit 403b4c2aa3
51 changed files with 2383 additions and 435 deletions

View File

@ -154,6 +154,9 @@
<meta-data <meta-data
android:name="IS_PLUGIN_MODEL" android:name="IS_PLUGIN_MODEL"
android:value="${isPluginModel}" /> android:value="${isPluginModel}" />
<meta-data
android:name="BUILD_TIME"
android:value="${buildTime}" />
<meta-data <meta-data
android:name="firebase_crashlytics_collection_enabled" android:name="firebase_crashlytics_collection_enabled"
android:value="${isUploadLog}" /> android:value="${isUploadLog}" />

View File

@ -184,6 +184,9 @@ public class AppContext extends CommonAppContext {
@Override @Override
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) { public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
activities.add(new WeakReference<>(activity)); activities.add(new WeakReference<>(activity));
if(activity instanceof LoginActivity){
AppManager.getInstance().clear();
}
CrashSaveBean.getInstance().setActivitySize(activities); CrashSaveBean.getInstance().setActivitySize(activities);
AppManager.getInstance().addActivity(activity); AppManager.getInstance().addActivity(activity);
} }

View File

@ -1,4 +1,4 @@
# The proguard configuration file for the following section is E:\pdlsy\pandorapan\app\build\intermediates\default_proguard_files\global\proguard-android.txt-8.3.1 # The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\default_proguard_files\global\proguard-android.txt-8.3.1
# This is a configuration file for ProGuard. # This is a configuration file for ProGuard.
# http://proguard.sourceforge.net/index.html#manual/usage.html # http://proguard.sourceforge.net/index.html#manual/usage.html
# #
@ -95,8 +95,8 @@
# These classes are duplicated between android.jar and core-lambda-stubs.jar. # These classes are duplicated between android.jar and core-lambda-stubs.jar.
-dontnote java.lang.invoke.** -dontnote java.lang.invoke.**
# End of content from E:\pdlsy\pandorapan\app\build\intermediates\default_proguard_files\global\proguard-android.txt-8.3.1 # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\default_proguard_files\global\proguard-android.txt-8.3.1
# The proguard configuration file for the following section is E:\pdlsy\pandorapan\app\proguard-rules.pro # The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\app\proguard-rules.pro
# Add project specific ProGuard rules here. # Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified # By default, the flags in this file are appended to flags specified
# in /Users/macpro/Library/Android/sdk/tools/proguard/proguard-android.txt # in /Users/macpro/Library/Android/sdk/tools/proguard/proguard-android.txt
@ -377,6 +377,18 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class tech.sud.mgp.hello.ui.main.settings.model.** {*;} -keep class tech.sud.mgp.hello.ui.main.settings.model.** {*;}
-keep class tech.sud.mgp.hello.ui.main.nft.model.** {*;} -keep class tech.sud.mgp.hello.ui.main.nft.model.** {*;}
-keep class tech.sud.mgp.hello.common.event.model.** {*;} -keep class tech.sud.mgp.hello.common.event.model.** {*;}
-keep class tech.sud.mgp.**{*;}
-keep class bitter.jnibridge.** { *; }
-keep class com.google.androidgamesdk.** { *; }
-keep class com.unity3d.** { *; }
-keep class do.do.do.** { *; }
-keep class do.if.do.** { *; }
-keep class for.do.** { *; }
-keep class if.do.do.do.** { *; }
-keep class org.fmod.** { *; }
-keep class tech.sud.** { *; }
-keep class tech.unity3d.** { *; }
-keep class com.yunbao.common.sud.** {*;} -keep class com.yunbao.common.sud.** {*;}
@ -399,8 +411,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.qiniu.**{public <init>();} -keep class com.qiniu.**{public <init>();}
-ignorewarnings -ignorewarnings
# End of content from E:\pdlsy\pandorapan\app\proguard-rules.pro # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\app\proguard-rules.pro
# The proguard configuration file for the following section is E:\pdlsy\pandorapan\app\build\intermediates\aapt_proguard_file\release\processReleaseResources\aapt_rules.txt # The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\aapt_proguard_file\release\processReleaseResources\aapt_rules.txt
-keep class androidx.core.app.CoreComponentFactory { <init>(); } -keep class androidx.core.app.CoreComponentFactory { <init>(); }
-keep class androidx.core.content.FileProvider { <init>(); } -keep class androidx.core.content.FileProvider { <init>(); }
-keep class androidx.core.content.FileProvider4Utils { <init>(); } -keep class androidx.core.content.FileProvider4Utils { <init>(); }
@ -502,6 +514,9 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.yunbao.main.activity.EditUserHobbyActivity { <init>(); } -keep class com.yunbao.main.activity.EditUserHobbyActivity { <init>(); }
-keep class com.yunbao.main.activity.EntryActivity { <init>(); } -keep class com.yunbao.main.activity.EntryActivity { <init>(); }
-keep class com.yunbao.main.activity.FansActivity { <init>(); } -keep class com.yunbao.main.activity.FansActivity { <init>(); }
-keep class com.yunbao.main.activity.FeedbackActivity { <init>(); }
-keep class com.yunbao.main.activity.FeedbackEditActivity { <init>(); }
-keep class com.yunbao.main.activity.FeedbackSuccessActivity { <init>(); }
-keep class com.yunbao.main.activity.FindPwdActivity { <init>(); } -keep class com.yunbao.main.activity.FindPwdActivity { <init>(); }
-keep class com.yunbao.main.activity.FollowActivity { <init>(); } -keep class com.yunbao.main.activity.FollowActivity { <init>(); }
-keep class com.yunbao.main.activity.LanguageSettingActivity { <init>(); } -keep class com.yunbao.main.activity.LanguageSettingActivity { <init>(); }
@ -901,6 +916,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.yunbao.common.views.AutoSplitTextView { <init>(android.content.Context, android.util.AttributeSet); } -keep class com.yunbao.common.views.AutoSplitTextView { <init>(android.content.Context, android.util.AttributeSet); }
-keep class com.yunbao.common.views.CustomLayout { <init>(android.content.Context, android.util.AttributeSet); }
-keep class com.yunbao.common.views.FlowLayout { <init>(android.content.Context, android.util.AttributeSet); } -keep class com.yunbao.common.views.FlowLayout { <init>(android.content.Context, android.util.AttributeSet); }
-keep class com.yunbao.common.views.MyFrameLayout2 { <init>(android.content.Context, android.util.AttributeSet); } -keep class com.yunbao.common.views.MyFrameLayout2 { <init>(android.content.Context, android.util.AttributeSet); }
@ -1064,8 +1081,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keepclassmembers class * { *** videoEditClick(android.view.View); } -keepclassmembers class * { *** videoEditClick(android.view.View); }
# End of content from E:\pdlsy\pandorapan\app\build\intermediates\aapt_proguard_file\release\processReleaseResources\aapt_rules.txt # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\app\build\intermediates\aapt_proguard_file\release\processReleaseResources\aapt_rules.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\8d3e3177c15403546de73d87508067d6\transformed\jetified-XPopup-2.10.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\8d3e3177c15403546de73d87508067d6\transformed\jetified-XPopup-2.10.0\proguard.txt
# Generated keep rule for Lifecycle observer adapter. # Generated keep rule for Lifecycle observer adapter.
-if class com.lxj.xpopup.core.BasePopupView { -if class com.lxj.xpopup.core.BasePopupView {
<init>(...); <init>(...);
@ -1074,8 +1091,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<init>(...); <init>(...);
} }
# End of content from F:\AS\gradle\caches\transforms-3\8d3e3177c15403546de73d87508067d6\transformed\jetified-XPopup-2.10.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\8d3e3177c15403546de73d87508067d6\transformed\jetified-XPopup-2.10.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\a1df9a6aa192455030f7c9970b70e0e9\transformed\material-1.4.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\a1df9a6aa192455030f7c9970b70e0e9\transformed\material-1.4.0\proguard.txt
# Copyright (C) 2015 The Android Open Source Project # Copyright (C) 2015 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -1123,16 +1140,16 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
} }
# End of content from F:\AS\gradle\caches\transforms-3\a1df9a6aa192455030f7c9970b70e0e9\transformed\material-1.4.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\a1df9a6aa192455030f7c9970b70e0e9\transformed\material-1.4.0\proguard.txt
# The proguard configuration file for the following section is E:\pdlsy\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\release\exportReleaseConsumerProguardFiles\lib0\proguard.txt # The proguard configuration file for the following section is C:\Users\58381\Documents\AndroidProject\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\release\exportReleaseConsumerProguardFiles\lib0\proguard.txt
# End of content from E:\pdlsy\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\release\exportReleaseConsumerProguardFiles\lib0\proguard.txt # End of content from C:\Users\58381\Documents\AndroidProject\pandorapan\lib_google\build\intermediates\consumer_proguard_dir\release\exportReleaseConsumerProguardFiles\lib0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\2929985d9627ba3bb45a0ebd18eaf9d3\transformed\jetified-linesdk-5.0.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\2929985d9627ba3bb45a0ebd18eaf9d3\transformed\jetified-linesdk-5.0.1\proguard.txt
-keepattributes *Annotation* -keepattributes *Annotation*
# End of content from F:\AS\gradle\caches\transforms-3\2929985d9627ba3bb45a0ebd18eaf9d3\transformed\jetified-linesdk-5.0.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\2929985d9627ba3bb45a0ebd18eaf9d3\transformed\jetified-linesdk-5.0.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\6baa4e4ee96e21acbcf3a49ef89d9f1f\transformed\jetified-facebook-android-sdk-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\6baa4e4ee96e21acbcf3a49ef89d9f1f\transformed\jetified-facebook-android-sdk-15.2.0\proguard.txt
# To enable ProGuard in your project, edit project.properties # To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file. # to define the proguard.config property as described in that file.
# #
@ -1172,8 +1189,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
public android.os.Bundle getSkuDetails(int, java.lang.String, java.lang.String, android.os.Bundle); public android.os.Bundle getSkuDetails(int, java.lang.String, java.lang.String, android.os.Bundle);
} }
# End of content from F:\AS\gradle\caches\transforms-3\6baa4e4ee96e21acbcf3a49ef89d9f1f\transformed\jetified-facebook-android-sdk-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\6baa4e4ee96e21acbcf3a49ef89d9f1f\transformed\jetified-facebook-android-sdk-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\44135493e77410a01759fde38f8d0bd2\transformed\jetified-facebook-gamingservices-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\44135493e77410a01759fde38f8d0bd2\transformed\jetified-facebook-gamingservices-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -1214,8 +1231,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.facebook.gamingservices.GamingServices -keep class com.facebook.gamingservices.GamingServices
# End of content from F:\AS\gradle\caches\transforms-3\44135493e77410a01759fde38f8d0bd2\transformed\jetified-facebook-gamingservices-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\44135493e77410a01759fde38f8d0bd2\transformed\jetified-facebook-gamingservices-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\c831739b6efc746f59d2a47471573f41\transformed\jetified-facebook-share-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\c831739b6efc746f59d2a47471573f41\transformed\jetified-facebook-share-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -1256,8 +1273,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.facebook.share.Share -keep class com.facebook.share.Share
# End of content from F:\AS\gradle\caches\transforms-3\c831739b6efc746f59d2a47471573f41\transformed\jetified-facebook-share-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\c831739b6efc746f59d2a47471573f41\transformed\jetified-facebook-share-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\3815d0ddf4b17772bdba730e93b11daf\transformed\jetified-facebook-login-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\3815d0ddf4b17772bdba730e93b11daf\transformed\jetified-facebook-login-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -1298,8 +1315,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.facebook.login.Login -keep class com.facebook.login.Login
# End of content from F:\AS\gradle\caches\transforms-3\3815d0ddf4b17772bdba730e93b11daf\transformed\jetified-facebook-login-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\3815d0ddf4b17772bdba730e93b11daf\transformed\jetified-facebook-login-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\43855db83adace9940918a3f6edcdc05\transformed\jetified-facebook-common-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\43855db83adace9940918a3f6edcdc05\transformed\jetified-facebook-common-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -1340,12 +1357,12 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.facebook.common.Common -keep class com.facebook.common.Common
# End of content from F:\AS\gradle\caches\transforms-3\43855db83adace9940918a3f6edcdc05\transformed\jetified-facebook-common-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\43855db83adace9940918a3f6edcdc05\transformed\jetified-facebook-common-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\7bbb003dbf2685697cd42cfb46e77b3f\transformed\jetified-subsampling-scale-image-view-androidx-3.10.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\7bbb003dbf2685697cd42cfb46e77b3f\transformed\jetified-subsampling-scale-image-view-androidx-3.10.0\proguard.txt
-keep class com.davemorrissey.labs.subscaleview.** { *; } -keep class com.davemorrissey.labs.subscaleview.** { *; }
# End of content from F:\AS\gradle\caches\transforms-3\7bbb003dbf2685697cd42cfb46e77b3f\transformed\jetified-subsampling-scale-image-view-androidx-3.10.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\7bbb003dbf2685697cd42cfb46e77b3f\transformed\jetified-subsampling-scale-image-view-androidx-3.10.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\0fdcb88552259c6c22dbd3bb46b31518\transformed\appcompat-1.3.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\0fdcb88552259c6c22dbd3bb46b31518\transformed\appcompat-1.3.1\proguard.txt
# Copyright (C) 2018 The Android Open Source Project # Copyright (C) 2018 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -1369,13 +1386,13 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<methods>; <methods>;
} }
# End of content from F:\AS\gradle\caches\transforms-3\0fdcb88552259c6c22dbd3bb46b31518\transformed\appcompat-1.3.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\0fdcb88552259c6c22dbd3bb46b31518\transformed\appcompat-1.3.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\b8e86bdadf487d72a43cd430b3f9db16\transformed\jetified-tweet-ui-3.1.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\b8e86bdadf487d72a43cd430b3f9db16\transformed\jetified-tweet-ui-3.1.1\proguard.txt
#Picasso Proguard Config https://github.com/square/picasso #Picasso Proguard Config https://github.com/square/picasso
-dontwarn com.squareup.okhttp.** -dontwarn com.squareup.okhttp.**
# End of content from F:\AS\gradle\caches\transforms-3\b8e86bdadf487d72a43cd430b3f9db16\transformed\jetified-tweet-ui-3.1.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\b8e86bdadf487d72a43cd430b3f9db16\transformed\jetified-tweet-ui-3.1.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\2dd2f4200d3a68f4165485a3d207312d\transformed\coordinatorlayout-1.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\2dd2f4200d3a68f4165485a3d207312d\transformed\coordinatorlayout-1.2.0\proguard.txt
# Copyright (C) 2016 The Android Open Source Project # Copyright (C) 2016 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -1402,13 +1419,13 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
RuntimeVisibleParameterAnnotations, RuntimeVisibleParameterAnnotations,
RuntimeVisibleTypeAnnotations RuntimeVisibleTypeAnnotations
# End of content from F:\AS\gradle\caches\transforms-3\2dd2f4200d3a68f4165485a3d207312d\transformed\coordinatorlayout-1.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\2dd2f4200d3a68f4165485a3d207312d\transformed\coordinatorlayout-1.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\940a969ab3fccb91703d8a9245e2974b\transformed\jetified-x-1.3.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\940a969ab3fccb91703d8a9245e2974b\transformed\jetified-x-1.3.2\proguard.txt
-keepclasseswithmembers class androidx.recyclerview.widget.RecyclerView$ViewHolder { -keepclasseswithmembers class androidx.recyclerview.widget.RecyclerView$ViewHolder {
public final android.view.View *; public final android.view.View *;
} }
# End of content from F:\AS\gradle\caches\transforms-3\940a969ab3fccb91703d8a9245e2974b\transformed\jetified-x-1.3.2\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\940a969ab3fccb91703d8a9245e2974b\transformed\jetified-x-1.3.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\e452872bf1c6c06c71776c88e0bd7b6a\transformed\jetified-exoplayer-ui-2.18.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\e452872bf1c6c06c71776c88e0bd7b6a\transformed\jetified-exoplayer-ui-2.18.2\proguard.txt
# Proguard rules specific to the UI module. # Proguard rules specific to the UI module.
# Constructor method accessed via reflection in StyledPlayerView # Constructor method accessed via reflection in StyledPlayerView
@ -1449,8 +1466,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-dontwarn kotlin.annotations.jvm.** -dontwarn kotlin.annotations.jvm.**
-dontwarn javax.annotation.** -dontwarn javax.annotation.**
# End of content from F:\AS\gradle\caches\transforms-3\e452872bf1c6c06c71776c88e0bd7b6a\transformed\jetified-exoplayer-ui-2.18.2\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\e452872bf1c6c06c71776c88e0bd7b6a\transformed\jetified-exoplayer-ui-2.18.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\e9de7db2640f13ae2ab2a585dfd19337\transformed\recyclerview-1.2.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\e9de7db2640f13ae2ab2a585dfd19337\transformed\recyclerview-1.2.1\proguard.txt
# Copyright (C) 2015 The Android Open Source Project # Copyright (C) 2015 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -1476,8 +1493,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
public void suppressLayout(boolean); public void suppressLayout(boolean);
public boolean isLayoutSuppressed(); public boolean isLayoutSuppressed();
} }
# End of content from F:\AS\gradle\caches\transforms-3\e9de7db2640f13ae2ab2a585dfd19337\transformed\recyclerview-1.2.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\e9de7db2640f13ae2ab2a585dfd19337\transformed\recyclerview-1.2.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt
# Add project specific ProGuard rules here. # Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified # By default, the flags in this file are appended to flags specified
# in G:\Android_IDE\ADT\sdk/tools/proguard/proguard-android.txt # in G:\Android_IDE\ADT\sdk/tools/proguard/proguard-android.txt
@ -1506,8 +1523,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep @com.blankj.utilcode.util.ApiUtils$Api class * -keep @com.blankj.utilcode.util.ApiUtils$Api class *
-keepattributes *Annotation* -keepattributes *Annotation*
# End of content from F:\AS\gradle\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\6905c56d188193f144e40adf093778f1\transformed\jetified-utilcode-1.30.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\bb5ec4ef561b90312eb1ca52da1f144d\transformed\jetified-facebook-applinks-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\bb5ec4ef561b90312eb1ca52da1f144d\transformed\jetified-facebook-applinks-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -1548,8 +1565,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.facebook.applinks.AppLinks -keep class com.facebook.applinks.AppLinks
# End of content from F:\AS\gradle\caches\transforms-3\bb5ec4ef561b90312eb1ca52da1f144d\transformed\jetified-facebook-applinks-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\bb5ec4ef561b90312eb1ca52da1f144d\transformed\jetified-facebook-applinks-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\88221c7028fd958b12579787bcf1d5e0\transformed\jetified-facebook-messenger-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\88221c7028fd958b12579787bcf1d5e0\transformed\jetified-facebook-messenger-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -1594,8 +1611,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.facebook.messenger.Messenger -keep class com.facebook.messenger.Messenger
# End of content from F:\AS\gradle\caches\transforms-3\88221c7028fd958b12579787bcf1d5e0\transformed\jetified-facebook-messenger-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\88221c7028fd958b12579787bcf1d5e0\transformed\jetified-facebook-messenger-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\d709769056a5279a71bbb18b41ee69d2\transformed\jetified-ui-1.0.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\d709769056a5279a71bbb18b41ee69d2\transformed\jetified-ui-1.0.0\proguard.txt
# Copyright (C) 2020 The Android Open Source Project # Copyright (C) 2020 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -1624,16 +1641,16 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
android.view.View findViewByAccessibilityIdTraversal(int); android.view.View findViewByAccessibilityIdTraversal(int);
} }
# End of content from F:\AS\gradle\caches\transforms-3\d709769056a5279a71bbb18b41ee69d2\transformed\jetified-ui-1.0.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\d709769056a5279a71bbb18b41ee69d2\transformed\jetified-ui-1.0.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\3591196def6c89c6af74e7d30dfb6618\transformed\jetified-runtime-1.0.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\3591196def6c89c6af74e7d30dfb6618\transformed\jetified-runtime-1.0.0\proguard.txt
-assumenosideeffects public class androidx.compose.runtime.ComposerKt { -assumenosideeffects public class androidx.compose.runtime.ComposerKt {
void sourceInformation(androidx.compose.runtime.Composer,java.lang.String); void sourceInformation(androidx.compose.runtime.Composer,java.lang.String);
void sourceInformationMarkerStart(androidx.compose.runtime.Composer,int,java.lang.String); void sourceInformationMarkerStart(androidx.compose.runtime.Composer,int,java.lang.String);
void sourceInformationMarkerEnd(androidx.compose.runtime.Composer); void sourceInformationMarkerEnd(androidx.compose.runtime.Composer);
} }
# End of content from F:\AS\gradle\caches\transforms-3\3591196def6c89c6af74e7d30dfb6618\transformed\jetified-runtime-1.0.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\3591196def6c89c6af74e7d30dfb6618\transformed\jetified-runtime-1.0.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\7931210372c8927a076053831aae79b7\transformed\jetified-glide-transformations-3.1.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\7931210372c8927a076053831aae79b7\transformed\jetified-glide-transformations-3.1.1\proguard.txt
-dontwarn jp.co.cyberagent.android.gpuimage.** -dontwarn jp.co.cyberagent.android.gpuimage.**
-keep public class * implements com.bumptech.glide.module.GlideModule -keep public class * implements com.bumptech.glide.module.GlideModule
@ -1643,8 +1660,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
public *; public *;
} }
# End of content from F:\AS\gradle\caches\transforms-3\7931210372c8927a076053831aae79b7\transformed\jetified-glide-transformations-3.1.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\7931210372c8927a076053831aae79b7\transformed\jetified-glide-transformations-3.1.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\a9e5e066cbda5595303140a83b7c357f\transformed\jetified-glide-4.12.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\a9e5e066cbda5595303140a83b7c357f\transformed\jetified-glide-4.12.0\proguard.txt
-keep public class * implements com.bumptech.glide.module.GlideModule -keep public class * implements com.bumptech.glide.module.GlideModule
-keep class * extends com.bumptech.glide.module.AppGlideModule { -keep class * extends com.bumptech.glide.module.AppGlideModule {
<init>(...); <init>(...);
@ -1660,8 +1677,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# Uncomment for DexGuard only # Uncomment for DexGuard only
#-keepresourcexmlelements manifest/application/meta-data@value=GlideModule #-keepresourcexmlelements manifest/application/meta-data@value=GlideModule
# End of content from F:\AS\gradle\caches\transforms-3\a9e5e066cbda5595303140a83b7c357f\transformed\jetified-glide-4.12.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\a9e5e066cbda5595303140a83b7c357f\transformed\jetified-glide-4.12.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\af9bdee4e01691bfa29595eaf6011f49\transformed\jetified-play-services-base-18.0.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\af9bdee4e01691bfa29595eaf6011f49\transformed\jetified-play-services-base-18.0.1\proguard.txt
# b/35135904 Ensure that proguard will not strip the mResultGuardian. # b/35135904 Ensure that proguard will not strip the mResultGuardian.
-keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult { -keepclassmembers class com.google.android.gms.common.api.internal.BasePendingResult {
com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian; com.google.android.gms.common.api.internal.BasePendingResult$ReleasableResultGuardian mResultGuardian;
@ -1669,18 +1686,18 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# End of content from F:\AS\gradle\caches\transforms-3\af9bdee4e01691bfa29595eaf6011f49\transformed\jetified-play-services-base-18.0.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\af9bdee4e01691bfa29595eaf6011f49\transformed\jetified-play-services-base-18.0.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\1b549d0d5a78f93d1b3cd259941d27d6\transformed\jetified-firebase-common-20.1.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\1b549d0d5a78f93d1b3cd259941d27d6\transformed\jetified-firebase-common-20.1.2\proguard.txt
-dontwarn com.google.firebase.platforminfo.KotlinDetector -dontwarn com.google.firebase.platforminfo.KotlinDetector
-dontwarn com.google.auto.value.AutoValue -dontwarn com.google.auto.value.AutoValue
-dontwarn com.google.auto.value.AutoValue$Builder -dontwarn com.google.auto.value.AutoValue$Builder
# End of content from F:\AS\gradle\caches\transforms-3\1b549d0d5a78f93d1b3cd259941d27d6\transformed\jetified-firebase-common-20.1.2\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\1b549d0d5a78f93d1b3cd259941d27d6\transformed\jetified-firebase-common-20.1.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\4566a60c961a57d307c42a2fd5514004\transformed\jetified-play-services-tasks-18.0.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\4566a60c961a57d307c42a2fd5514004\transformed\jetified-play-services-tasks-18.0.1\proguard.txt
# End of content from F:\AS\gradle\caches\transforms-3\4566a60c961a57d307c42a2fd5514004\transformed\jetified-play-services-tasks-18.0.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\4566a60c961a57d307c42a2fd5514004\transformed\jetified-play-services-tasks-18.0.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\98374b479c7a7c4245d90ea630585909\transformed\jetified-play-services-basement-18.1.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\98374b479c7a7c4245d90ea630585909\transformed\jetified-play-services-basement-18.1.0\proguard.txt
# Needed when building against pre-Marshmallow SDK. # Needed when building against pre-Marshmallow SDK.
-dontwarn android.security.NetworkSecurityPolicy -dontwarn android.security.NetworkSecurityPolicy
@ -1753,8 +1770,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# End of content from F:\AS\gradle\caches\transforms-3\98374b479c7a7c4245d90ea630585909\transformed\jetified-play-services-basement-18.1.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\98374b479c7a7c4245d90ea630585909\transformed\jetified-play-services-basement-18.1.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\8daf89c63ab14ea80f11dcfb9154f87e\transformed\fragment-1.5.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\8daf89c63ab14ea80f11dcfb9154f87e\transformed\fragment-1.5.0\proguard.txt
# Copyright (C) 2020 The Android Open Source Project # Copyright (C) 2020 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -1775,12 +1792,12 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
public <init>(); public <init>();
} }
# End of content from F:\AS\gradle\caches\transforms-3\8daf89c63ab14ea80f11dcfb9154f87e\transformed\fragment-1.5.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\8daf89c63ab14ea80f11dcfb9154f87e\transformed\fragment-1.5.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\b826addf48d922103bc9588ad90ee0e6\transformed\jetified-Common-4.1.11\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\b826addf48d922103bc9588ad90ee0e6\transformed\jetified-Common-4.1.11\proguard.txt
# 本库模块专用的混淆规则 # 本库模块专用的混淆规则
# End of content from F:\AS\gradle\caches\transforms-3\b826addf48d922103bc9588ad90ee0e6\transformed\jetified-Common-4.1.11\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\b826addf48d922103bc9588ad90ee0e6\transformed\jetified-Common-4.1.11\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\cee8df21fdda9dd7e6106d8566e7a8de\transformed\jetified-facebook-core-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\cee8df21fdda9dd7e6106d8566e7a8de\transformed\jetified-facebook-core-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -1838,8 +1855,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
public <methods>; public <methods>;
} }
# End of content from F:\AS\gradle\caches\transforms-3\cee8df21fdda9dd7e6106d8566e7a8de\transformed\jetified-facebook-core-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\cee8df21fdda9dd7e6106d8566e7a8de\transformed\jetified-facebook-core-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\570c85082e748d036cbe1ff0c9d5e429\transformed\lifecycle-viewmodel-2.5.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\570c85082e748d036cbe1ff0c9d5e429\transformed\lifecycle-viewmodel-2.5.0\proguard.txt
-keepclassmembers,allowobfuscation class * extends androidx.lifecycle.ViewModel { -keepclassmembers,allowobfuscation class * extends androidx.lifecycle.ViewModel {
<init>(); <init>();
} }
@ -1848,8 +1865,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<init>(android.app.Application); <init>(android.app.Application);
} }
# End of content from F:\AS\gradle\caches\transforms-3\570c85082e748d036cbe1ff0c9d5e429\transformed\lifecycle-viewmodel-2.5.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\570c85082e748d036cbe1ff0c9d5e429\transformed\lifecycle-viewmodel-2.5.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\badee3548ba9b653d6517fdeb8829767\transformed\jetified-lifecycle-viewmodel-savedstate-2.5.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\badee3548ba9b653d6517fdeb8829767\transformed\jetified-lifecycle-viewmodel-savedstate-2.5.0\proguard.txt
-keepclassmembers,allowobfuscation class * extends androidx.lifecycle.ViewModel { -keepclassmembers,allowobfuscation class * extends androidx.lifecycle.ViewModel {
<init>(androidx.lifecycle.SavedStateHandle); <init>(androidx.lifecycle.SavedStateHandle);
} }
@ -1858,8 +1875,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<init>(android.app.Application,androidx.lifecycle.SavedStateHandle); <init>(android.app.Application,androidx.lifecycle.SavedStateHandle);
} }
# End of content from F:\AS\gradle\caches\transforms-3\badee3548ba9b653d6517fdeb8829767\transformed\jetified-lifecycle-viewmodel-savedstate-2.5.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\badee3548ba9b653d6517fdeb8829767\transformed\jetified-lifecycle-viewmodel-savedstate-2.5.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\0e43e19966d3ba7fcce157667e087c7e\transformed\rules\lib\META-INF\com.android.tools\r8\coroutines.pro # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\0e43e19966d3ba7fcce157667e087c7e\transformed\rules\lib\META-INF\com.android.tools\r8\coroutines.pro
# When editing this file, update the following files as well: # When editing this file, update the following files as well:
# - META-INF/proguard/coroutines.pro # - META-INF/proguard/coroutines.pro
# - META-INF/com.android.tools/proguard/coroutines.pro # - META-INF/com.android.tools/proguard/coroutines.pro
@ -1887,8 +1904,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# An annotation used for build tooling, won't be directly accessed. # An annotation used for build tooling, won't be directly accessed.
-dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement -dontwarn org.codehaus.mojo.animal_sniffer.IgnoreJRERequirement
# End of content from F:\AS\gradle\caches\transforms-3\0e43e19966d3ba7fcce157667e087c7e\transformed\rules\lib\META-INF\com.android.tools\r8\coroutines.pro # End of content from C:\gradle-6.1.1\caches\transforms-3\0e43e19966d3ba7fcce157667e087c7e\transformed\rules\lib\META-INF\com.android.tools\r8\coroutines.pro
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\039aa78b17fc1889d62d4e8e7d7c1859\transformed\rules\lib\META-INF\com.android.tools\r8-from-1.6.0\coroutines.pro # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\039aa78b17fc1889d62d4e8e7d7c1859\transformed\rules\lib\META-INF\com.android.tools\r8-from-1.6.0\coroutines.pro
# Allow R8 to optimize away the FastServiceLoader. # Allow R8 to optimize away the FastServiceLoader.
# Together with ServiceLoader optimization in R8 # Together with ServiceLoader optimization in R8
# this results in direct instantiation when loading Dispatchers.Main # this results in direct instantiation when loading Dispatchers.Main
@ -1913,8 +1930,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
boolean getDEBUG() return false; boolean getDEBUG() return false;
boolean getRECOVER_STACK_TRACES() return false; boolean getRECOVER_STACK_TRACES() return false;
} }
# End of content from F:\AS\gradle\caches\transforms-3\039aa78b17fc1889d62d4e8e7d7c1859\transformed\rules\lib\META-INF\com.android.tools\r8-from-1.6.0\coroutines.pro # End of content from C:\gradle-6.1.1\caches\transforms-3\039aa78b17fc1889d62d4e8e7d7c1859\transformed\rules\lib\META-INF\com.android.tools\r8-from-1.6.0\coroutines.pro
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\33f970d366250728877e2f4671336331\transformed\jetified-twitter-core-3.1.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\33f970d366250728877e2f4671336331\transformed\jetified-twitter-core-3.1.1\proguard.txt
#GSON #GSON
# Retain Annotations for model objects # Retain Annotations for model objects
-keepattributes *Annotation* -keepattributes *Annotation*
@ -1938,8 +1955,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keepclasseswithmembers class * { -keepclasseswithmembers class * {
@retrofit2.http.* <methods>; @retrofit2.http.* <methods>;
} }
# End of content from F:\AS\gradle\caches\transforms-3\33f970d366250728877e2f4671336331\transformed\jetified-twitter-core-3.1.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\33f970d366250728877e2f4671336331\transformed\jetified-twitter-core-3.1.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\c77ecf57bcccb48a1c436095271858a9\transformed\rules\lib\META-INF\proguard\okhttp3.pro # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\c77ecf57bcccb48a1c436095271858a9\transformed\rules\lib\META-INF\proguard\okhttp3.pro
# JSR 305 annotations are for embedding nullability information. # JSR 305 annotations are for embedding nullability information.
-dontwarn javax.annotation.** -dontwarn javax.annotation.**
@ -1952,16 +1969,16 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# OkHttp platform used only on JVM and when Conscrypt dependency is available. # OkHttp platform used only on JVM and when Conscrypt dependency is available.
-dontwarn okhttp3.internal.platform.ConscryptPlatform -dontwarn okhttp3.internal.platform.ConscryptPlatform
# End of content from F:\AS\gradle\caches\transforms-3\c77ecf57bcccb48a1c436095271858a9\transformed\rules\lib\META-INF\proguard\okhttp3.pro # End of content from C:\gradle-6.1.1\caches\transforms-3\c77ecf57bcccb48a1c436095271858a9\transformed\rules\lib\META-INF\proguard\okhttp3.pro
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\ba2f6b8d754037d8f03e9dcac5bb54b5\transformed\rules\lib\META-INF\proguard\okio.pro # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\ba2f6b8d754037d8f03e9dcac5bb54b5\transformed\rules\lib\META-INF\proguard\okio.pro
# Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java. # Animal Sniffer compileOnly dependency to ensure APIs are compatible with older versions of Java.
-dontwarn org.codehaus.mojo.animal_sniffer.* -dontwarn org.codehaus.mojo.animal_sniffer.*
# End of content from F:\AS\gradle\caches\transforms-3\ba2f6b8d754037d8f03e9dcac5bb54b5\transformed\rules\lib\META-INF\proguard\okio.pro # End of content from C:\gradle-6.1.1\caches\transforms-3\ba2f6b8d754037d8f03e9dcac5bb54b5\transformed\rules\lib\META-INF\proguard\okio.pro
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt
# End of content from F:\AS\gradle\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\acd3bab55cb4f819050ef57ea2e25987\transformed\jetified-beautysdk-202202241203\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\b75b75d929caf1295aec25af1cc611a0\transformed\jetified-crash-1.0.8\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\b75b75d929caf1295aec25af1cc611a0\transformed\jetified-crash-1.0.8\proguard.txt
-keep class cn.rongcloud.xcrash.NativeHandler { -keep class cn.rongcloud.xcrash.NativeHandler {
native <methods>; native <methods>;
void crashCallback(...); void crashCallback(...);
@ -1969,22 +1986,22 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
void traceCallbackBeforeDump(...); void traceCallbackBeforeDump(...);
} }
# End of content from F:\AS\gradle\caches\transforms-3\b75b75d929caf1295aec25af1cc611a0\transformed\jetified-crash-1.0.8\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\b75b75d929caf1295aec25af1cc611a0\transformed\jetified-crash-1.0.8\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\a7d2b366ebb4fa695d83564a8f8d9b9e\transformed\jetified-roundedimageview-2.3.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\a7d2b366ebb4fa695d83564a8f8d9b9e\transformed\jetified-roundedimageview-2.3.0\proguard.txt
# Proguard configuration. # Proguard configuration.
-dontwarn com.squareup.okhttp.** -dontwarn com.squareup.okhttp.**
# References to Picasso are okay if the consuming app doesn't use it # References to Picasso are okay if the consuming app doesn't use it
-dontwarn com.squareup.picasso.Transformation -dontwarn com.squareup.picasso.Transformation
# End of content from F:\AS\gradle\caches\transforms-3\a7d2b366ebb4fa695d83564a8f8d9b9e\transformed\jetified-roundedimageview-2.3.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\a7d2b366ebb4fa695d83564a8f8d9b9e\transformed\jetified-roundedimageview-2.3.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\54e4d6b7585273307d9c6823366d92b9\transformed\jetified-android-gif-drawable-1.2.23\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\54e4d6b7585273307d9c6823366d92b9\transformed\jetified-android-gif-drawable-1.2.23\proguard.txt
-keep public class pl.droidsonroids.gif.GifIOException{<init>(int, java.lang.String);} -keep public class pl.droidsonroids.gif.GifIOException{<init>(int, java.lang.String);}
#Prevents warnings for consumers not using AndroidX #Prevents warnings for consumers not using AndroidX
-dontwarn androidx.annotation.** -dontwarn androidx.annotation.**
# End of content from F:\AS\gradle\caches\transforms-3\54e4d6b7585273307d9c6823366d92b9\transformed\jetified-android-gif-drawable-1.2.23\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\54e4d6b7585273307d9c6823366d92b9\transformed\jetified-android-gif-drawable-1.2.23\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\11ff2b99188b7e7bf4e2771916717f0f\transformed\jetified-ShortcutBadger-1.1.22\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\11ff2b99188b7e7bf4e2771916717f0f\transformed\jetified-ShortcutBadger-1.1.22\proguard.txt
#https://github.com/leolin310148/ShortcutBadger/issues/46 #https://github.com/leolin310148/ShortcutBadger/issues/46
-keep class me.leolin.shortcutbadger.impl.AdwHomeBadger { <init>(...); } -keep class me.leolin.shortcutbadger.impl.AdwHomeBadger { <init>(...); }
-keep class me.leolin.shortcutbadger.impl.ApexHomeBadger { <init>(...); } -keep class me.leolin.shortcutbadger.impl.ApexHomeBadger { <init>(...); }
@ -1995,8 +2012,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class me.leolin.shortcutbadger.impl.SolidHomeBadger { <init>(...); } -keep class me.leolin.shortcutbadger.impl.SolidHomeBadger { <init>(...); }
-keep class me.leolin.shortcutbadger.impl.SonyHomeBadger { <init>(...); } -keep class me.leolin.shortcutbadger.impl.SonyHomeBadger { <init>(...); }
-keep class me.leolin.shortcutbadger.impl.XiaomiHomeBadger { <init>(...); } -keep class me.leolin.shortcutbadger.impl.XiaomiHomeBadger { <init>(...); }
# End of content from F:\AS\gradle\caches\transforms-3\11ff2b99188b7e7bf4e2771916717f0f\transformed\jetified-ShortcutBadger-1.1.22\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\11ff2b99188b7e7bf4e2771916717f0f\transformed\jetified-ShortcutBadger-1.1.22\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\bf0366dad8fd25b42dec7a0b29d3ed94\transformed\jetified-EasyFloat-2.0.4\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\bf0366dad8fd25b42dec7a0b29d3ed94\transformed\jetified-EasyFloat-2.0.4\proguard.txt
# Add project specific ProGuard rules here. # Add project specific ProGuard rules here.
# You can control the filterSet of applied configuration files using the # You can control the filterSet of applied configuration files using the
# proguardFiles setting in build.gradle. # proguardFiles setting in build.gradle.
@ -2034,8 +2051,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# 保持反射不被混淆 # 保持反射不被混淆
-keepattributes EnclosingMethod -keepattributes EnclosingMethod
# End of content from F:\AS\gradle\caches\transforms-3\bf0366dad8fd25b42dec7a0b29d3ed94\transformed\jetified-EasyFloat-2.0.4\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\bf0366dad8fd25b42dec7a0b29d3ed94\transformed\jetified-EasyFloat-2.0.4\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\6dd79c19a3de7f7b4d3014c08d02f4ca\transformed\jetified-PagerGridLayoutManager-1.1.7\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\6dd79c19a3de7f7b4d3014c08d02f4ca\transformed\jetified-PagerGridLayoutManager-1.1.7\proguard.txt
# Add project specific ProGuard rules here. # Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the # You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle. # proguardFiles setting in build.gradle.
@ -2057,15 +2074,12 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# If you keep the line number information, uncomment this to # If you keep the line number information, uncomment this to
# hide the original source file name. # hide the original source file name.
#-renamesourcefileattribute SourceFile #-renamesourcefileattribute SourceFile
# End of content from F:\AS\gradle\caches\transforms-3\6dd79c19a3de7f7b4d3014c08d02f4ca\transformed\jetified-PagerGridLayoutManager-1.1.7\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\6dd79c19a3de7f7b4d3014c08d02f4ca\transformed\jetified-PagerGridLayoutManager-1.1.7\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\adfc563cfaac18f99ab49176e8311139\transformed\jetified-WheelView-4.1.11\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\adfc563cfaac18f99ab49176e8311139\transformed\jetified-WheelView-4.1.11\proguard.txt
# 本库模块专用的混淆规则 # 本库模块专用的混淆规则
# End of content from F:\AS\gradle\caches\transforms-3\adfc563cfaac18f99ab49176e8311139\transformed\jetified-WheelView-4.1.11\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\adfc563cfaac18f99ab49176e8311139\transformed\jetified-WheelView-4.1.11\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\3dd60f4554da3e797ddfca5958de5029\transformed\jetified-uyumao-1.1.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\21d010a917a570a947ff266441748328\transformed\jetified-SudMGP-1.3.3.1158\proguard.txt
# End of content from F:\AS\gradle\caches\transforms-3\3dd60f4554da3e797ddfca5958de5029\transformed\jetified-uyumao-1.1.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\21d010a917a570a947ff266441748328\transformed\jetified-SudMGP-1.3.3.1158\proguard.txt
-keep class com.cocos.game.**{ *; } -keep class com.cocos.game.**{ *; }
-keep class tech.sud.runtime.**{ *; } -keep class tech.sud.runtime.**{ *; }
-keep class tech.sud.mgp.core.**{ *; } -keep class tech.sud.mgp.core.**{ *; }
@ -2217,8 +2231,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# End of content from F:\AS\gradle\caches\transforms-3\21d010a917a570a947ff266441748328\transformed\jetified-SudMGP-1.3.3.1158\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\21d010a917a570a947ff266441748328\transformed\jetified-SudMGP-1.3.3.1158\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\9bc6fb118e278279304d710763b86c85\transformed\jetified-SudASR-1.3.3.1158\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\9bc6fb118e278279304d710763b86c85\transformed\jetified-SudASR-1.3.3.1158\proguard.txt
-keep class com.microsoft.cognitiveservices.** { *; } -keep class com.microsoft.cognitiveservices.** { *; }
-keep class tech.sud.mgp.asr.azure.** { *; } -keep class tech.sud.mgp.asr.azure.** { *; }
@ -2233,8 +2247,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
*** *Callback(long); *** *Callback(long);
} }
# End of content from F:\AS\gradle\caches\transforms-3\9bc6fb118e278279304d710763b86c85\transformed\jetified-SudASR-1.3.3.1158\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\9bc6fb118e278279304d710763b86c85\transformed\jetified-SudASR-1.3.3.1158\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\3d3f072f1af512d0e751a2c7c5e8b8ec\transformed\jetified-core-8.3.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\3d3f072f1af512d0e751a2c7c5e8b8ec\transformed\jetified-core-8.3.1\proguard.txt
# Add project specific ProGuard rules here. # Add project specific ProGuard rules here.
# You can control the set of applied configuration files using the # You can control the set of applied configuration files using the
# proguardFiles setting in build.gradle. # proguardFiles setting in build.gradle.
@ -2261,8 +2275,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class com.faceunity.wrapper.faceunity {*;} -keep class com.faceunity.wrapper.faceunity {*;}
-keep class com.faceunity.wrapper.faceunity$RotatedImage {*;} -keep class com.faceunity.wrapper.faceunity$RotatedImage {*;}
# End of content from F:\AS\gradle\caches\transforms-3\3d3f072f1af512d0e751a2c7c5e8b8ec\transformed\jetified-core-8.3.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\3d3f072f1af512d0e751a2c7c5e8b8ec\transformed\jetified-core-8.3.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\526e7910eaa433763f36b642f34c1fee\transformed\jetified-exoplayer-core-2.18.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\526e7910eaa433763f36b642f34c1fee\transformed\jetified-exoplayer-core-2.18.2\proguard.txt
# Proguard rules specific to the core module. # Proguard rules specific to the core module.
# Constructors accessed via reflection in DefaultRenderersFactory # Constructors accessed via reflection in DefaultRenderersFactory
@ -2319,8 +2333,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<init>(); <init>();
} }
# End of content from F:\AS\gradle\caches\transforms-3\526e7910eaa433763f36b642f34c1fee\transformed\jetified-exoplayer-core-2.18.2\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\526e7910eaa433763f36b642f34c1fee\transformed\jetified-exoplayer-core-2.18.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\2d16d937f787a1471d1fcefef8917ded\transformed\jetified-savedstate-1.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\2d16d937f787a1471d1fcefef8917ded\transformed\jetified-savedstate-1.2.0\proguard.txt
# Copyright (C) 2019 The Android Open Source Project # Copyright (C) 2019 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -2339,8 +2353,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<init>(); <init>();
} }
# End of content from F:\AS\gradle\caches\transforms-3\2d16d937f787a1471d1fcefef8917ded\transformed\jetified-savedstate-1.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\2d16d937f787a1471d1fcefef8917ded\transformed\jetified-savedstate-1.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\f55e0290d55f2ec9dfa66384635c714c\transformed\transition-1.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\f55e0290d55f2ec9dfa66384635c714c\transformed\transition-1.2.0\proguard.txt
# Copyright (C) 2017 The Android Open Source Project # Copyright (C) 2017 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -2360,8 +2374,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
androidx.transition.ChangeBounds$ViewBounds mViewBounds; androidx.transition.ChangeBounds$ViewBounds mViewBounds;
} }
# End of content from F:\AS\gradle\caches\transforms-3\f55e0290d55f2ec9dfa66384635c714c\transformed\transition-1.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\f55e0290d55f2ec9dfa66384635c714c\transformed\transition-1.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\093cf4894c646f12adcf0608a8578513\transformed\vectordrawable-animated-1.1.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\093cf4894c646f12adcf0608a8578513\transformed\vectordrawable-animated-1.1.0\proguard.txt
# Copyright (C) 2016 The Android Open Source Project # Copyright (C) 2016 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -2382,8 +2396,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
*** get*(); *** get*();
} }
# End of content from F:\AS\gradle\caches\transforms-3\093cf4894c646f12adcf0608a8578513\transformed\vectordrawable-animated-1.1.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\093cf4894c646f12adcf0608a8578513\transformed\vectordrawable-animated-1.1.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\3db9f5e64eaa2a61a80545d78dbfe4ed\transformed\jetified-facebook-bolts-15.2.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\3db9f5e64eaa2a61a80545d78dbfe4ed\transformed\jetified-facebook-bolts-15.2.0\proguard.txt
# Copyright (c) Meta Platforms, Inc. and affiliates. # Copyright (c) Meta Platforms, Inc. and affiliates.
# All rights reserved. # All rights reserved.
# #
@ -2419,8 +2433,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
java.lang.Object readResolve(); java.lang.Object readResolve();
} }
# End of content from F:\AS\gradle\caches\transforms-3\3db9f5e64eaa2a61a80545d78dbfe4ed\transformed\jetified-facebook-bolts-15.2.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\3db9f5e64eaa2a61a80545d78dbfe4ed\transformed\jetified-facebook-bolts-15.2.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\13795feba8dd8fc2e0266a202e40730e\transformed\media-1.6.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\13795feba8dd8fc2e0266a202e40730e\transformed\media-1.6.0\proguard.txt
# Copyright (C) 2017 The Android Open Source Project # Copyright (C) 2017 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -2444,8 +2458,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class androidx.media.** implements android.os.Parcelable { -keep class androidx.media.** implements android.os.Parcelable {
public static final android.os.Parcelable$Creator *; public static final android.os.Parcelable$Creator *;
} }
# End of content from F:\AS\gradle\caches\transforms-3\13795feba8dd8fc2e0266a202e40730e\transformed\media-1.6.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\13795feba8dd8fc2e0266a202e40730e\transformed\media-1.6.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\4bf1220f49ce7953fbb445d1fb03d04a\transformed\core-1.8.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\4bf1220f49ce7953fbb445d1fb03d04a\transformed\core-1.8.0\proguard.txt
# Never inline methods, but allow shrinking and obfuscation. # Never inline methods, but allow shrinking and obfuscation.
-keepclassmembernames,allowobfuscation,allowshrinking class androidx.core.view.ViewCompat$Api* { -keepclassmembernames,allowobfuscation,allowshrinking class androidx.core.view.ViewCompat$Api* {
<methods>; <methods>;
@ -2463,8 +2477,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<methods>; <methods>;
} }
# End of content from F:\AS\gradle\caches\transforms-3\4bf1220f49ce7953fbb445d1fb03d04a\transformed\core-1.8.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\4bf1220f49ce7953fbb445d1fb03d04a\transformed\core-1.8.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\2c964f4aa7e08caf6a082be78fa332c4\transformed\lifecycle-runtime-2.5.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\2c964f4aa7e08caf6a082be78fa332c4\transformed\lifecycle-runtime-2.5.0\proguard.txt
-keepattributes AnnotationDefault, -keepattributes AnnotationDefault,
RuntimeVisibleAnnotations, RuntimeVisibleAnnotations,
RuntimeVisibleParameterAnnotations, RuntimeVisibleParameterAnnotations,
@ -2488,8 +2502,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# this rule is need to work properly when app is compiled with api 28, see b/142778206 # this rule is need to work properly when app is compiled with api 28, see b/142778206
# Also this rule prevents registerIn from being inlined. # Also this rule prevents registerIn from being inlined.
-keepclassmembers class androidx.lifecycle.ReportFragment$LifecycleCallbacks { *; } -keepclassmembers class androidx.lifecycle.ReportFragment$LifecycleCallbacks { *; }
# End of content from F:\AS\gradle\caches\transforms-3\2c964f4aa7e08caf6a082be78fa332c4\transformed\lifecycle-runtime-2.5.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\2c964f4aa7e08caf6a082be78fa332c4\transformed\lifecycle-runtime-2.5.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\4a3cce138aa30f2fd0df44bf999a62d2\transformed\jetified-exoplayer-datasource-2.18.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\4a3cce138aa30f2fd0df44bf999a62d2\transformed\jetified-exoplayer-datasource-2.18.2\proguard.txt
# Proguard rules specific to the DataSource module. # Proguard rules specific to the DataSource module.
# Constant folding for resource integers may mean that a resource passed to this method appears to be unused. Keep the method to prevent this from happening. # Constant folding for resource integers may mean that a resource passed to this method appears to be unused. Keep the method to prevent this from happening.
@ -2503,8 +2517,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
<init>(); <init>();
} }
# End of content from F:\AS\gradle\caches\transforms-3\4a3cce138aa30f2fd0df44bf999a62d2\transformed\jetified-exoplayer-datasource-2.18.2\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\4a3cce138aa30f2fd0df44bf999a62d2\transformed\jetified-exoplayer-datasource-2.18.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\cccc4dd1e5210aae5c702cc866696db2\transformed\jetified-exoplayer-extractor-2.18.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\cccc4dd1e5210aae5c702cc866696db2\transformed\jetified-exoplayer-extractor-2.18.2\proguard.txt
# Proguard rules specific to the extractor module. # Proguard rules specific to the extractor module.
# Methods accessed via reflection in DefaultExtractorsFactory # Methods accessed via reflection in DefaultExtractorsFactory
@ -2522,8 +2536,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-dontwarn kotlin.annotations.jvm.** -dontwarn kotlin.annotations.jvm.**
-dontwarn javax.annotation.** -dontwarn javax.annotation.**
# End of content from F:\AS\gradle\caches\transforms-3\cccc4dd1e5210aae5c702cc866696db2\transformed\jetified-exoplayer-extractor-2.18.2\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\cccc4dd1e5210aae5c702cc866696db2\transformed\jetified-exoplayer-extractor-2.18.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\5bd9c5cbdf66400a7932d1da1691bac0\transformed\jetified-exoplayer-common-2.18.2\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\5bd9c5cbdf66400a7932d1da1691bac0\transformed\jetified-exoplayer-common-2.18.2\proguard.txt
# Proguard rules specific to the common module. # Proguard rules specific to the common module.
# Don't warn about checkerframework and Kotlin annotations # Don't warn about checkerframework and Kotlin annotations
@ -2547,20 +2561,20 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
# This is needed for ProGuard but not R8. # This is needed for ProGuard but not R8.
-keepclassmembernames class com.google.common.base.Function { *; } -keepclassmembernames class com.google.common.base.Function { *; }
# End of content from F:\AS\gradle\caches\transforms-3\5bd9c5cbdf66400a7932d1da1691bac0\transformed\jetified-exoplayer-common-2.18.2\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\5bd9c5cbdf66400a7932d1da1691bac0\transformed\jetified-exoplayer-common-2.18.2\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\25898cd92bff76be652caaeef3397500\transformed\versionedparcelable-1.1.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\25898cd92bff76be652caaeef3397500\transformed\versionedparcelable-1.1.1\proguard.txt
-keep class * implements androidx.versionedparcelable.VersionedParcelable -keep class * implements androidx.versionedparcelable.VersionedParcelable
-keep public class android.support.**Parcelizer { *; } -keep public class android.support.**Parcelizer { *; }
-keep public class androidx.**Parcelizer { *; } -keep public class androidx.**Parcelizer { *; }
-keep public class androidx.versionedparcelable.ParcelImpl -keep public class androidx.versionedparcelable.ParcelImpl
# End of content from F:\AS\gradle\caches\transforms-3\25898cd92bff76be652caaeef3397500\transformed\versionedparcelable-1.1.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\25898cd92bff76be652caaeef3397500\transformed\versionedparcelable-1.1.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\8c49f53105b230fe43669879f576cab6\transformed\room-runtime-2.4.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\8c49f53105b230fe43669879f576cab6\transformed\room-runtime-2.4.0\proguard.txt
-keep class * extends androidx.room.RoomDatabase -keep class * extends androidx.room.RoomDatabase
-dontwarn androidx.room.paging.** -dontwarn androidx.room.paging.**
# End of content from F:\AS\gradle\caches\transforms-3\8c49f53105b230fe43669879f576cab6\transformed\room-runtime-2.4.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\8c49f53105b230fe43669879f576cab6\transformed\room-runtime-2.4.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\48f6f745536202396d49c6664e656f00\transformed\jetified-startup-runtime-1.0.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\48f6f745536202396d49c6664e656f00\transformed\jetified-startup-runtime-1.0.0\proguard.txt
# This Proguard rule ensures that ComponentInitializers are are neither shrunk nor obfuscated. # This Proguard rule ensures that ComponentInitializers are are neither shrunk nor obfuscated.
# This is because they are discovered and instantiated during application initialization. # This is because they are discovered and instantiated during application initialization.
-keep class * extends androidx.startup.Initializer { -keep class * extends androidx.startup.Initializer {
@ -2570,29 +2584,29 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-assumenosideeffects class androidx.startup.StartupLogger -assumenosideeffects class androidx.startup.StartupLogger
# End of content from F:\AS\gradle\caches\transforms-3\48f6f745536202396d49c6664e656f00\transformed\jetified-startup-runtime-1.0.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\48f6f745536202396d49c6664e656f00\transformed\jetified-startup-runtime-1.0.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\f137f81e3ba6bf4187612f01b8d596d6\transformed\jetified-transport-backend-cct-3.1.7\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\f137f81e3ba6bf4187612f01b8d596d6\transformed\jetified-transport-backend-cct-3.1.7\proguard.txt
-dontwarn com.google.auto.value.AutoValue -dontwarn com.google.auto.value.AutoValue
-dontwarn com.google.auto.value.AutoValue$Builder -dontwarn com.google.auto.value.AutoValue$Builder
# End of content from F:\AS\gradle\caches\transforms-3\f137f81e3ba6bf4187612f01b8d596d6\transformed\jetified-transport-backend-cct-3.1.7\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\f137f81e3ba6bf4187612f01b8d596d6\transformed\jetified-transport-backend-cct-3.1.7\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\ad1f4a6564b34286db155b9a62614b62\transformed\jetified-transport-api-3.0.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\ad1f4a6564b34286db155b9a62614b62\transformed\jetified-transport-api-3.0.0\proguard.txt
-dontwarn com.google.auto.value.AutoValue -dontwarn com.google.auto.value.AutoValue
-dontwarn com.google.auto.value.AutoValue$Builder -dontwarn com.google.auto.value.AutoValue$Builder
# End of content from F:\AS\gradle\caches\transforms-3\ad1f4a6564b34286db155b9a62614b62\transformed\jetified-transport-api-3.0.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\ad1f4a6564b34286db155b9a62614b62\transformed\jetified-transport-api-3.0.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\e1bbd140b52a8e61bea52bf380947059\transformed\jetified-firebase-components-17.0.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\e1bbd140b52a8e61bea52bf380947059\transformed\jetified-firebase-components-17.0.1\proguard.txt
-dontwarn com.google.firebase.components.Component$Instantiation -dontwarn com.google.firebase.components.Component$Instantiation
-dontwarn com.google.firebase.components.Component$ComponentType -dontwarn com.google.firebase.components.Component$ComponentType
-keep class * implements com.google.firebase.components.ComponentRegistrar -keep class * implements com.google.firebase.components.ComponentRegistrar
-keep,allowshrinking interface com.google.firebase.components.ComponentRegistrar -keep,allowshrinking interface com.google.firebase.components.ComponentRegistrar
# End of content from F:\AS\gradle\caches\transforms-3\e1bbd140b52a8e61bea52bf380947059\transformed\jetified-firebase-components-17.0.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\e1bbd140b52a8e61bea52bf380947059\transformed\jetified-firebase-components-17.0.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\ff39e13547528b628eacff5bee8aa481\transformed\jetified-firebase-encoders-json-18.0.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\ff39e13547528b628eacff5bee8aa481\transformed\jetified-firebase-encoders-json-18.0.0\proguard.txt
# End of content from F:\AS\gradle\caches\transforms-3\ff39e13547528b628eacff5bee8aa481\transformed\jetified-firebase-encoders-json-18.0.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\ff39e13547528b628eacff5bee8aa481\transformed\jetified-firebase-encoders-json-18.0.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\3b7d5c4af95619f43e4d0ea1cb1bf304\transformed\rules\lib\META-INF\proguard\androidx-annotations.pro # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\3b7d5c4af95619f43e4d0ea1cb1bf304\transformed\rules\lib\META-INF\proguard\androidx-annotations.pro
-keep,allowobfuscation @interface androidx.annotation.Keep -keep,allowobfuscation @interface androidx.annotation.Keep
-keep @androidx.annotation.Keep class * {*;} -keep @androidx.annotation.Keep class * {*;}
@ -2612,8 +2626,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
@androidx.annotation.DoNotInline <methods>; @androidx.annotation.DoNotInline <methods>;
} }
# End of content from F:\AS\gradle\caches\transforms-3\3b7d5c4af95619f43e4d0ea1cb1bf304\transformed\rules\lib\META-INF\proguard\androidx-annotations.pro # End of content from C:\gradle-6.1.1\caches\transforms-3\3b7d5c4af95619f43e4d0ea1cb1bf304\transformed\rules\lib\META-INF\proguard\androidx-annotations.pro
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\e7e2a2183722056abf9bd4188272512b\transformed\jetified-annotation-experimental-1.1.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\e7e2a2183722056abf9bd4188272512b\transformed\jetified-annotation-experimental-1.1.0\proguard.txt
# Copyright (C) 2020 The Android Open Source Project # Copyright (C) 2020 The Android Open Source Project
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
@ -2638,8 +2652,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-dontwarn kotlin.annotation.Retention -dontwarn kotlin.annotation.Retention
-dontwarn kotlin.annotation.Target -dontwarn kotlin.annotation.Target
# End of content from F:\AS\gradle\caches\transforms-3\e7e2a2183722056abf9bd4188272512b\transformed\jetified-annotation-experimental-1.1.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\e7e2a2183722056abf9bd4188272512b\transformed\jetified-annotation-experimental-1.1.0\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\e4ea56c12de34fd26c2a84541f3aeb08\transformed\jetified-calligraphy3-3.1.1\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\e4ea56c12de34fd26c2a84541f3aeb08\transformed\jetified-calligraphy3-3.1.1\proguard.txt
# Add project specific ProGuard rules here. # Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified # By default, the flags in this file are appended to flags specified
# in /Developer/android-sdk-osx/tools/proguard/proguard-android.txt # in /Developer/android-sdk-osx/tools/proguard/proguard-android.txt
@ -2661,8 +2675,8 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-keep class io.github.inflationx.calligraphy3.* { *; } -keep class io.github.inflationx.calligraphy3.* { *; }
-keep class io.github.inflationx.calligraphy3.*$* { *; } -keep class io.github.inflationx.calligraphy3.*$* { *; }
# End of content from F:\AS\gradle\caches\transforms-3\e4ea56c12de34fd26c2a84541f3aeb08\transformed\jetified-calligraphy3-3.1.1\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\e4ea56c12de34fd26c2a84541f3aeb08\transformed\jetified-calligraphy3-3.1.1\proguard.txt
# The proguard configuration file for the following section is F:\AS\gradle\caches\transforms-3\a358ff6705c32d8c6337aefd4316f1b9\transformed\jetified-billing-5.0.0\proguard.txt # The proguard configuration file for the following section is C:\gradle-6.1.1\caches\transforms-3\a358ff6705c32d8c6337aefd4316f1b9\transformed\jetified-billing-5.0.0\proguard.txt
# Keep the AIDL interface # Keep the AIDL interface
-keep class com.android.vending.billing.** { *; } -keep class com.android.vending.billing.** { *; }
@ -2671,7 +2685,7 @@ rx.internal.util.atomic.LinkedQueueNode* consumerNode;
-dontwarn com.google.android.apps.common.proguard.UsedByReflection -dontwarn com.google.android.apps.common.proguard.UsedByReflection
-keepnames class com.android.billingclient.api.ProxyBillingActivity -keepnames class com.android.billingclient.api.ProxyBillingActivity
# End of content from F:\AS\gradle\caches\transforms-3\a358ff6705c32d8c6337aefd4316f1b9\transformed\jetified-billing-5.0.0\proguard.txt # End of content from C:\gradle-6.1.1\caches\transforms-3\a358ff6705c32d8c6337aefd4316f1b9\transformed\jetified-billing-5.0.0\proguard.txt
# The proguard configuration file for the following section is <unknown> # The proguard configuration file for the following section is <unknown>
# End of content from <unknown> # End of content from <unknown>

View File

@ -39,6 +39,7 @@ public class CommonAppConfig {
public static final boolean IS_UPLOAD_ERROR_LOG = getMetaDataBoolean("IS_UPLOAD_ERROR_LOG"); public static final boolean IS_UPLOAD_ERROR_LOG = getMetaDataBoolean("IS_UPLOAD_ERROR_LOG");
//是否为插件包模式 //是否为插件包模式
public static final boolean IS_PLUGIN_MODEL = getMetaDataBoolean("IS_PLUGIN_MODEL"); public static final boolean IS_PLUGIN_MODEL = getMetaDataBoolean("IS_PLUGIN_MODEL");
public static final String BUILD_TIME = getMetaDataString("BUILD_TIME");
//外部sd卡 //外部sd卡
public static final String DCMI_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath(); public static final String DCMI_PATH = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DCIM).getAbsolutePath();

View File

@ -3,6 +3,8 @@ package com.yunbao.common.bean;
import android.text.TextUtils; import android.text.TextUtils;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.utils.StringUtil;
import java.util.List; import java.util.List;
@ -421,7 +423,13 @@ public class IMLoginModel extends BaseModel {
} }
public String getAvatar() { public String getAvatar() {
return avatar; if ("/default.jpg".equals(avatar)) {
avatar = CommonAppConfig.HOST + avatar;
}
if (StringUtil.isEmpty(avatar)) {
return "";
}
return avatar.trim();
} }
public IMLoginModel setAvatar(String avatar) { public IMLoginModel setAvatar(String avatar) {

View File

@ -0,0 +1,30 @@
package com.yunbao.common.bean;
import com.google.gson.annotations.SerializedName;
import com.yunbao.common.utils.StringUtil;
public class MainMessageChatListTimer extends BaseModel {
@SerializedName("uid")
private String uid;
@SerializedName("time")
private int time;
public MainMessageChatListTimer() {
}
public String getUid() {
return uid;
}
public void setUid(String uid) {
this.uid = uid;
}
public int getTime() {
return time;
}
public void setTime(int time) {
this.time = time;
}
}

View File

@ -6,6 +6,7 @@ import android.text.TextUtils;
import com.alibaba.fastjson.annotation.JSONField; import com.alibaba.fastjson.annotation.JSONField;
import com.google.gson.annotations.SerializedName; import com.google.gson.annotations.SerializedName;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
/** /**
@ -417,7 +418,13 @@ public class UserBean implements Parcelable {
} }
public String getAvatar() { public String getAvatar() {
return avatar; if ("/default.jpg".equals(avatar)) {
avatar = CommonAppConfig.HOST + avatar;
}
if (StringUtil.isEmpty(avatar)) {
return "";
}
return avatar.trim();
} }
public void setAvatar(String avatar) { public void setAvatar(String avatar) {

View File

@ -15,6 +15,7 @@ import com.lzf.easyfloat.EasyFloat;
import com.lzf.easyfloat.enums.ShowPattern; import com.lzf.easyfloat.enums.ShowPattern;
import com.lzf.easyfloat.interfaces.OnPermissionResult; import com.lzf.easyfloat.interfaces.OnPermissionResult;
import com.lzf.easyfloat.permission.PermissionUtils; import com.lzf.easyfloat.permission.PermissionUtils;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.adapter.DebugDialogAdapter; import com.yunbao.common.adapter.DebugDialogAdapter;
import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
@ -129,6 +130,7 @@ public class DebugDialog {
recyclerView.setAdapter(adapter); recyclerView.setAdapter(adapter);
recyclerView.setBackgroundColor(Color.WHITE); recyclerView.setBackgroundColor(Color.WHITE);
TextView textView = new TextView(mContext); TextView textView = new TextView(mContext);
TextView buildTime = new TextView(mContext);
textView.setOnClickListener(new View.OnClickListener() { textView.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View view) { public void onClick(View view) {
@ -137,6 +139,7 @@ public class DebugDialog {
} }
}); });
params.put("debug弹窗", textView); params.put("debug弹窗", textView);
params.put("发包时间:" + CommonAppConfig.BUILD_TIME, buildTime);
adapter.setParamMap(params); adapter.setParamMap(params);
EasyFloat.with(mContext) EasyFloat.with(mContext)
@ -144,7 +147,6 @@ public class DebugDialog {
.setShowPattern(this.showPattern) .setShowPattern(this.showPattern)
.setLayout(recyclerView) .setLayout(recyclerView)
.show(); .show();
runnable.run(this);
Log.i("debug弹窗", "createView: 创建"); Log.i("debug弹窗", "createView: 创建");
} }

View File

@ -14,6 +14,7 @@ import com.bumptech.glide.Glide;
import com.bumptech.glide.RequestBuilder; import com.bumptech.glide.RequestBuilder;
import com.bumptech.glide.load.DataSource; import com.bumptech.glide.load.DataSource;
import com.bumptech.glide.load.engine.GlideException; import com.bumptech.glide.load.engine.GlideException;
import com.bumptech.glide.load.resource.bitmap.CircleCrop;
import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.RequestListener;
import com.bumptech.glide.request.RequestOptions; import com.bumptech.glide.request.RequestOptions;
import com.bumptech.glide.request.target.CustomTarget; import com.bumptech.glide.request.target.CustomTarget;
@ -48,10 +49,10 @@ public class ImgLoader {
if (!contextIsExist(context)) { if (!contextIsExist(context)) {
return; return;
} }
if(StringUtil.isEmpty(url)){ if (StringUtil.isEmpty(url)) {
return; return;
} }
if(!url.startsWith("http")){ if (!url.startsWith("http")) {
return; return;
} }
RequestBuilder<Drawable> builder = Glide.with(context) RequestBuilder<Drawable> builder = Glide.with(context)
@ -159,11 +160,33 @@ public class ImgLoader {
displayAvatar(context, url, imageView, -1, -1); displayAvatar(context, url, imageView, -1, -1);
} }
public static void displayAvatarCircleCrop(Context context, String url, ImageView imageView) {
if (!contextIsExist(context)) {
return;
}
if (!contextIsExist(context) || imageView == null) {
return;
}
if (StringUtil.isEmpty(url)) {
return;
}
if (!url.startsWith("http")) {
imageView.setImageResource(R.mipmap.chat_head_mo);
return;
}
RequestBuilder<Drawable> builder = Glide.with(context)
.load(url)
.thumbnail(thumbnail)
.apply(RequestOptions.bitmapTransform(new CircleCrop()))
.error(R.mipmap.icon_avatar_placeholder);
builder.into(imageView);
}
public static void displayAvatar(Context context, String url, ImageView imageView, int width, int height) { public static void displayAvatar(Context context, String url, ImageView imageView, int width, int height) {
if (!contextIsExist(context) || imageView == null) { if (!contextIsExist(context) || imageView == null) {
return; return;
} }
if(StringUtil.isEmpty(url)){ if (StringUtil.isEmpty(url)) {
return; return;
} }
if (!url.startsWith("http")) { if (!url.startsWith("http")) {

View File

@ -51,6 +51,7 @@ import com.yunbao.common.bean.LiveRoomVoteModel;
import com.yunbao.common.bean.LiveStetUpStatusModel; import com.yunbao.common.bean.LiveStetUpStatusModel;
import com.yunbao.common.bean.LiveTaskModel; import com.yunbao.common.bean.LiveTaskModel;
import com.yunbao.common.bean.LiveUserMailBoxModel; import com.yunbao.common.bean.LiveUserMailBoxModel;
import com.yunbao.common.bean.MainMessageChatListTimer;
import com.yunbao.common.bean.MedalAchievementModel; import com.yunbao.common.bean.MedalAchievementModel;
import com.yunbao.common.bean.MessageChatIsAnchor; import com.yunbao.common.bean.MessageChatIsAnchor;
import com.yunbao.common.bean.MessageChatUserBean; import com.yunbao.common.bean.MessageChatUserBean;
@ -1346,6 +1347,14 @@ public interface PDLiveApi {
@GET("/api/public/?service=User.userFeedbackRestrict") @GET("/api/public/?service=User.userFeedbackRestrict")
Observable<ResponseModel<List<BaseModel>>> checkFeedback(); Observable<ResponseModel<List<BaseModel>>> checkFeedback();
@GET("/api/public/?service=Pdlinfos.getOtherList")
Observable<ResponseModel<List<MessageChatUserBean>>> getOtherList(@Query("ids") String uids);
@GET("/api/public/?service=Pdlinfos.getRelation")
Observable<ResponseModel<List<String>>> getRelation(@Query("type") String type);
@GET("/api/public/?service=Pdlinfos.getIsLook")
Observable<ResponseModel<List<MainMessageChatListTimer>>> getIsLook(@Query("ids") String uids);
/** /**
* *
* @param roomId 房间ID * @param roomId 房间ID

View File

@ -55,6 +55,7 @@ import com.yunbao.common.bean.LiveRoomVoteModel;
import com.yunbao.common.bean.LiveStetUpStatusModel; import com.yunbao.common.bean.LiveStetUpStatusModel;
import com.yunbao.common.bean.LiveTaskModel; import com.yunbao.common.bean.LiveTaskModel;
import com.yunbao.common.bean.LiveUserMailBoxModel; import com.yunbao.common.bean.LiveUserMailBoxModel;
import com.yunbao.common.bean.MainMessageChatListTimer;
import com.yunbao.common.bean.MedalAchievementModel; import com.yunbao.common.bean.MedalAchievementModel;
import com.yunbao.common.bean.MessageChatIsAnchor; import com.yunbao.common.bean.MessageChatIsAnchor;
import com.yunbao.common.bean.MessageChatUserBean; import com.yunbao.common.bean.MessageChatUserBean;
@ -3887,8 +3888,61 @@ public class LiveNetManager {
}).isDisposed(); }).isDisposed();
} }
public void getOtherList(String uids, HttpCallback<List<MessageChatUserBean>> callback) {
API.get().pdLiveApi(mContext)
.getOtherList(uids)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<ResponseModel<List<MessageChatUserBean>>>() {
@Override
public void accept(ResponseModel<List<MessageChatUserBean>> messageUserInfoBeanResponseModel) throws Exception {
if (callback != null) {
callback.onSuccess(messageUserInfoBeanResponseModel.getData().getInfo());
}
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
throwable.printStackTrace();
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}
}).isDisposed();
}
public void getRelation(String type, HttpCallback<List<String>> callback) {
API.get().pdLiveApi(mContext)
.getRelation(type)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(messageUserInfoBeanResponseModel -> {
if (callback != null) {
callback.onSuccess(messageUserInfoBeanResponseModel.getData().getInfo());
}
}, throwable -> {
throwable.printStackTrace();
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}).isDisposed();
}
public void getIsLook(String uids, HttpCallback<List<MainMessageChatListTimer>> callback) {
API.get().pdLiveApi(mContext)
.getIsLook(uids)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(messageUserInfoBeanResponseModel -> {
if (callback != null) {
callback.onSuccess(messageUserInfoBeanResponseModel.getData().getInfo());
}
}, throwable -> {
throwable.printStackTrace();
if (callback != null) {
callback.onError(mContext.getString(R.string.net_error));
}
}).isDisposed();
}
private MultipartBody.Part createUploadFile(File file) { private MultipartBody.Part createUploadFile(File file) {
RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file); RequestBody requestBody = RequestBody.create(MediaType.parse("multipart/form-data"), file);
return MultipartBody.Part.createFormData("file", file.getName(), requestBody); return MultipartBody.Part.createFormData("file", file.getName(), requestBody);

View File

@ -0,0 +1,5 @@
package com.yunbao.common.interfaces;
public interface OnRecyclerListRefreshListener<T> {
void onFinish(T t);
}

View File

@ -427,7 +427,12 @@ public class IMLoginManager extends BaseCacheManager {
public boolean isGiftEffect() { public boolean isGiftEffect() {
return getBoolean(GiftEffect, !(Build.VERSION.SDK_INT < Build.VERSION_CODES.O)); return getBoolean(GiftEffect, !(Build.VERSION.SDK_INT < Build.VERSION_CODES.O));
} }
public void setAnchorB(int isAnchor) {
put("isAnchorB", isAnchor);
}
public int getAnchorB(){
return getInt("isAnchorB", -1);
}
public void setLiveNotifySettings(boolean isTrue) { public void setLiveNotifySettings(boolean isTrue) {
put(LIVE_NOTIFY_SETTINGS, isTrue); put(LIVE_NOTIFY_SETTINGS, isTrue);
} }
@ -584,4 +589,5 @@ public class IMLoginManager extends BaseCacheManager {
} }
}); });
} }
} }

View File

@ -5,6 +5,7 @@ import android.util.Log;
import com.google.gson.Gson; import com.google.gson.Gson;
import com.yunbao.common.bean.IMLoginModel; import com.yunbao.common.bean.IMLoginModel;
import com.yunbao.common.utils.ToastUtil;
import java.util.List; import java.util.List;
@ -28,11 +29,41 @@ public class PDMessageInterceptor implements MessageInterceptor {
TextMessage textMessage = (TextMessage) message.getContent(); TextMessage textMessage = (TextMessage) message.getContent();
String context = textMessage.getContent(); String context = textMessage.getContent();
//符合条件的接受消息不做展示 //符合条件的接受消息不做展示
if (context.contains("LivePK")||context.contains("LiveDRPK")||context.contains("LiveRandomPK")) { if (context.contains("LivePK") ||
context.contains("LivePKDRLM") ||
context.contains("LiveDRPK") ||
context.contains("LiveRandomPK")) {
Message[] messages = new Message[]{message}; Message[] messages = new Message[]{message};
Log.e("PDMessageInterceptor", textMessage.getContent()); Log.e("PDMessageInterceptor", message.getMessageId() + "|" + textMessage.getContent());
//删除消息 //删除消息
IMCenter.getInstance().deleteRemoteMessages(Conversation.ConversationType.PRIVATE, message.getTargetId(), messages, null); IMCenter.getInstance().deleteMessages(Conversation.ConversationType.PRIVATE, message.getTargetId(), new int[]{
message.getMessageId()
}, new RongIMClient.ResultCallback<Boolean>() {
@Override
public void onSuccess(Boolean aBoolean) {
Log.i("PDMessageInterceptor", "onSuccess: 删除成功:" + aBoolean+" "+ message.getMessageId());
}
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
Log.i("PDMessageInterceptor", "onSuccess: 删除失败:" + errorCode);
ToastUtil.showDebug("删除消息失败:"+errorCode.code+"|"+errorCode.msg);
}
});
IMCenter.getInstance().deleteRemoteMessages(Conversation.ConversationType.PRIVATE, message.getTargetId(), messages, new RongIMClient.OperationCallback() {
@Override
public void onSuccess() {
Log.i("PDMessageInterceptor", "onSuccess: 删除成功:" + message.getMessageId());
}
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
Log.i("PDMessageInterceptor", "onSuccess: 删除失败:" + errorCode);
ToastUtil.showDebug("删除消息失败:"+errorCode.code+"|"+errorCode.msg);
}
});
IMCenter.getInstance().clearMessagesUnreadStatus(Conversation.ConversationType.PRIVATE, message.getTargetId(), null); IMCenter.getInstance().clearMessagesUnreadStatus(Conversation.ConversationType.PRIVATE, message.getTargetId(), null);
// return true; // return true;

View File

@ -214,7 +214,7 @@ public class RongcloudIMManager {
break; break;
//用户账号在其它设备登录此设备被踢下线 //用户账号在其它设备登录此设备被踢下线
case KICKED_OFFLINE_BY_OTHER_CLIENT: case KICKED_OFFLINE_BY_OTHER_CLIENT:
EventBus.getDefault().post(new RongIMConnectionStatusEvent()); EventBus.getDefault().post(new RongIMConnectionStatusEvent().setStatus(-1));
break; break;
//连接暂时挂起多是由于网络问题导致SDK 会在合适时机进行自动重连 //连接暂时挂起多是由于网络问题导致SDK 会在合适时机进行自动重连
case SUSPEND: case SUSPEND:

View File

@ -1,6 +1,7 @@
package com.yunbao.common.utils; package com.yunbao.common.utils;
import android.app.Activity; import android.app.Activity;
import android.util.Log;
import com.yunbao.common.BuildConfig; import com.yunbao.common.BuildConfig;
@ -11,7 +12,7 @@ public class AppManager {
private static Stack<Activity> activityStack; private static Stack<Activity> activityStack;
public AppManager() { public AppManager() {
activityStack=new Stack<>(); activityStack = new Stack<>();
} }
/** /**
@ -48,6 +49,10 @@ public class AppManager {
return null; return null;
} }
public void clear() {
activityStack.clear();
}
public static class SingleApp { public static class SingleApp {
public static AppManager INSTANCE = new AppManager(); public static AppManager INSTANCE = new AppManager();
} }
@ -59,6 +64,10 @@ public class AppManager {
if (activityStack == null) { if (activityStack == null) {
activityStack = new Stack<Activity>(); activityStack = new Stack<Activity>();
} }
//>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>class com.yunbao.main.activity.MsgAddressBookActivity
if (getActivity(activity.getClass()) != null) {
activityStack.remove(getActivity(activity.getClass()));
}
activityStack.add(activity); activityStack.add(activity);
} }

View File

@ -0,0 +1,38 @@
package com.yunbao.common.utils;
import androidx.viewpager2.widget.ViewPager2;
import net.lucode.hackware.magicindicator.MagicIndicator;
public class ViewPageIndicatorUtils {
public static void bind(final MagicIndicator magicIndicator, ViewPager2 viewPager,ViewPager2.OnPageChangeCallback callback) {
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels);
if(callback!=null){
callback.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
magicIndicator.onPageSelected(position);
if (callback != null) {
callback.onPageSelected(position);
}
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
magicIndicator.onPageScrollStateChanged(state);
if (callback != null) {
callback.onPageScrollStateChanged(state);
}
}
});
}
}

View File

@ -2,8 +2,10 @@ package com.yunbao.common.views;
import android.content.Context; import android.content.Context;
import android.graphics.Paint; import android.graphics.Paint;
import android.text.TextPaint;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.Log;
import android.view.ViewTreeObserver; import android.view.ViewTreeObserver;
import android.widget.TextView; import android.widget.TextView;
@ -42,6 +44,49 @@ public class AutoSplitTextView extends androidx.appcompat.widget.AppCompatTextVi
} }
super.onMeasure(widthMeasureSpec, heightMeasureSpec); super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}*/ }*/
StringBuffer sb = new StringBuffer();
StringBuffer tmp = new StringBuffer();
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
super.onLayout(changed, left, top, right, bottom);
TextPaint paint = getPaint();
String text = getText().toString();
Log.i("用户备注卡片", "默认值:" + text);
float textWidth = paint.measureText(text);
if (textWidth > getWidth()) {
sb.setLength(0);
tmp.setLength(0);
for (int i = 0; i < text.length(); i++) {
String str;
str = text.substring(i, i + 1);
Log.i("用户备注卡片", "添加:" + str + "|" + i);
if (str.contains("\n") || str.contains("\r") || str.contains("\t")) {
if(tmp.length()>0) {
sb.append(tmp);
}
sb.append(str);
tmp.setLength(0);
continue;
}
float measured = paint.measureText(tmp.toString() + str);
if (measured > getWidth()) {
sb.append(tmp).append("\n");
tmp.setLength(0);
tmp.append(str);
} else {
tmp.append(str);
}
}
if (tmp.length() > 0) {
sb.append(tmp);
}
Log.i("用户备注卡片", "最终值:" + sb.toString());
setText(sb);
}
}
public void setAutoText(CharSequence text) { public void setAutoText(CharSequence text) {
this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() { this.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

View File

@ -0,0 +1,136 @@
package com.yunbao.common.views;
import android.content.Context;
import android.graphics.Color;
import android.text.Layout;
import android.text.StaticLayout;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.lzf.easyfloat.enums.ShowPattern;
import com.yunbao.common.dialog.DebugDialog;
import com.yunbao.common.utils.DpUtil;
/**
* TextView + View 动态布局
*/
public class CustomLayout extends ViewGroup {
//单行显示
private static final int SINGLE_LINE = 0x01;
//多行显示
private static final int MULTI_LINE = 0x02;
//显示到下一行
private static final int NEXT_LINE = 0x03;
//显示样式
private int type;
//绘制文字最后一行的顶部坐标
private int lastLineTop;
//绘制文字最后一行的右边坐标
private float lastLineRight;
public CustomLayout(Context context) {
super(context);
}
public CustomLayout(Context context, AttributeSet attrs) {
super(context, attrs);
}
public CustomLayout(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int childCount = getChildCount();
final int w = MeasureSpec.getSize(widthMeasureSpec);
if (childCount == 2) {
TextView tv = null;
if(getChildAt(0) instanceof TextView){
tv = (TextView) getChildAt(0);
initTextParams(tv.getText(), tv.getMeasuredWidth(), tv.getPaint());
}else{
throw new RuntimeException("CustomLayout first child view not a TextView");
}
View sencodView = getChildAt(1);
//测量子view的宽高
measureChildren(widthMeasureSpec, heightMeasureSpec);
final String textWidth=String.valueOf(tv.getMeasuredWidth());
final String viewWidth=String.valueOf(sencodView.getMeasuredWidth());
final String maxWidth=String.valueOf(tv.getMeasuredWidth()+sencodView.getMeasuredWidth());
//两个子view宽度相加小于该控件宽度的时候
if (tv.getMeasuredWidth() + sencodView.getMeasuredWidth() <= w) {
int width = tv.getMeasuredWidth()+sencodView.getMeasuredWidth();
//计算高度
int height = Math.max(tv.getMeasuredHeight(), sencodView.getMeasuredHeight());
//设置该viewgroup的宽高
setMeasuredDimension(width, height);
type = SINGLE_LINE;
return;
}
if (getChildAt(0) instanceof TextView) {
//最后一行文字的宽度加上第二个view的宽度大于viewgroup宽度时第二个控件换行显示
if (lastLineRight + sencodView.getMeasuredWidth() > w) {
setMeasuredDimension(tv.getMeasuredWidth(), tv.getMeasuredHeight() + sencodView.getMeasuredHeight());
type = NEXT_LINE;
return;
}
int height = Math.max(tv.getMeasuredHeight(), lastLineTop + sencodView.getMeasuredHeight());
setMeasuredDimension(tv.getMeasuredWidth(), height);
type = MULTI_LINE;
}
} else {
throw new RuntimeException("CustomLayout child count must is 2");
}
}
protected void onLayout(boolean changed, int l, int t, int r, int b) {
if (type == SINGLE_LINE || type == MULTI_LINE) {
TextView tv = (TextView) getChildAt(0);
View v1 = getChildAt(1);
//设置第二个view在Textview文字末尾位置
tv.layout(0, 0, tv.getMeasuredWidth(), tv.getMeasuredHeight());
int left = (int) lastLineRight;
int top = lastLineTop;
//最后一行的高度 :通过staticLayout得到的行高不准确故采用这种方式
int lastLineHeight = tv.getBottom()-tv.getPaddingBottom() -lastLineTop;
//当第二view高度小于单行文字高度时竖直居中显示
if(v1.getMeasuredHeight() < lastLineHeight){
top = lastLineTop + (lastLineHeight - v1.getMeasuredHeight())/2;
}
v1.layout(left, top, left + v1.getMeasuredWidth(), top+v1.getMeasuredHeight());
} else if (type == NEXT_LINE) {
View v0 = getChildAt(0);
View v1 = getChildAt(1);
//设置第二个view换行显示
v0.layout(0, 0, v0.getMeasuredWidth(), v0.getMeasuredHeight());
v1.layout(0, v0.getMeasuredHeight(), v1.getMeasuredWidth(), v0.getMeasuredHeight() + v1.getMeasuredHeight());
}
}
/**
* 得到Textview绘制文字的基本信息
* @param text Textview的文字内容
* @param maxWidth Textview的宽度
* @param paint 绘制文字的paint
*/
private void initTextParams(CharSequence text, int maxWidth, TextPaint paint) {
System.out.println("text = " + text + ", maxWidth = " + maxWidth + ", paint = " + paint);
StaticLayout staticLayout = new StaticLayout(text, paint, maxWidth, Layout.Alignment.ALIGN_NORMAL, 1.0f, 0.0f, false);
int lineCount = staticLayout.getLineCount();
lastLineTop = staticLayout.getLineTop(lineCount - 1);
lastLineRight = staticLayout.getLineRight(lineCount - 1);
}
}

View File

@ -0,0 +1,118 @@
package com.yunbao.common.views;
import android.content.Context;
import android.content.res.TypedArray;
import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.View;
import android.view.ViewParent;
import android.view.ViewTreeObserver;
import android.widget.LinearLayout;
import android.widget.TextView;
import androidx.annotation.Nullable;
import com.yunbao.common.R;
public class MainMessageChatListItemLayout extends LinearLayout {
private static final String TAG = "消息列表佈局";
public int autoText = 0;
public MainMessageChatListItemLayout(Context context) {
super(context);
onLayoutChanged();
}
public MainMessageChatListItemLayout(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MainMessageChatListItem_Layout);
autoText = array.getResourceId(R.styleable.MainMessageChatListItem_Layout_autoTextEllipsize, 0);
onLayoutChanged();
}
public MainMessageChatListItemLayout(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MainMessageChatListItem_Layout);
autoText = array.getResourceId(R.styleable.MainMessageChatListItem_Layout_autoTextEllipsize, 0);
onLayoutChanged();
}
public MainMessageChatListItemLayout(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
int itemIndex = 0;
@Override
protected void onLayout(boolean changed, int l, int t, int r, int b) {
super.onLayout(changed, l, t, r, b);
/*int width = getWidth();
int count = getChildCount();
double max = 0;
double autoTextViewMeasuredWidth = 0;
double otherViewWidth = 0;
int autoId = -1;
for (int i = 0; i < count; i++) {
View item = getChildAt(i);
// item.layout(l, t, r, b);
double itemWidth = item.getMeasuredWidth();
int padding = item.getPaddingLeft() + item.getPaddingRight();
if (item instanceof TextView) {
TextPaint paint = ((TextView) item).getPaint();
itemWidth = paint.measureText(((TextView) item).getText().toString());
if (item.getId() == autoText) {
autoId = i;
autoTextViewMeasuredWidth = itemWidth;
} else {
otherViewWidth += itemWidth;
}
Log.i(TAG, "TextView: " + ((TextView) item).getText() + "|" + paint.measureText(((TextView) item).getText().toString()));
} else {
Log.i(TAG, "onLayout: 不是TextView");
}
max += itemWidth + padding;
Log.i(TAG, "autoId = " + autoId + "vid = " + autoText + " item = " + item + " width = " + itemWidth + "changed = " + changed + ", l = " + l + ", t = " + t + ", r = " + r + ", b = " + b);
}
Log.i(TAG, "布局总宽度 = " + width + "|" + "item总宽度 = " + max);
if (autoId != -1 && max > width) {
int diffValue = (int) (width - otherViewWidth);
diffValue=20;
int layoutChildViewCurX = 0;
for (int i = 0; i < count; i++) {
View view = getChildAt(i);
if (view.getId() == autoId) {
view.layout(layoutChildViewCurX, t, layoutChildViewCurX+diffValue, b);
layoutChildViewCurX += diffValue;
} else {
view.layout(layoutChildViewCurX, t, layoutChildViewCurX + view.getMeasuredWidth(), b);
layoutChildViewCurX += view.getMeasuredWidth();
}
}
*//*int layoutChildViewCurX = l, tr = r, tt = t, tb = b;
for (int i = 0; i < count; i++) {
View item = getChildAt(i);
tr=item.getMeasuredWidth();
if (item.getId() == autoId) {
int diffValue = (int) (width - otherViewWidth);
item.layout(layoutChildViewCurX, tt, layoutChildViewCurX+item.getMeasuredWidth(), tb);
layoutChildViewCurX=item.getMeasuredWidth();
continue;
}
item.layout(layoutChildViewCurX, tt, layoutChildViewCurX+item.getMeasuredWidth(), tb);
layoutChildViewCurX=item.getMeasuredWidth();
}*//*
}*/
}
@Override
protected void onFinishInflate() {
super.onFinishInflate();
}
void onLayoutChanged() {
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:width="68dp" android:height="37dp">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#EB6FFF" />
<corners android:topLeftRadius="15dp" android:topRightRadius="15dp" android:bottomLeftRadius="15dp" android:bottomRightRadius="15dp" />
</shape>
</item>
</selector>

View File

@ -3,6 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:background="@color/white" android:background="@color/white"
android:orientation="vertical"> android:orientation="vertical">
@ -361,8 +362,10 @@
<LinearLayout <LinearLayout
android:id="@+id/authenticationLayout" android:id="@+id/authenticationLayout"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="0dp"
tools:layout_width="match_parent"
tools:layout_height="match_parent"
android:gravity="center_vertical" android:gravity="center_vertical"
android:visibility="visible"> android:visibility="visible">

View File

@ -659,7 +659,7 @@
<string name="report">Report</string> <string name="report">Report</string>
<string name="reload">retry</string> <string name="reload">retry</string>
<string name="refuse">refuse</string> <string name="refuse">refuse</string>
<string name="save">Preservation</string> <string name="save">Save</string>
<string name="reg">Register</string> <string name="reg">Register</string>
<string name="no_more_mic">No one is currently in the voice link</string> <string name="no_more_mic">No one is currently in the voice link</string>
<string name="welcome_pdlive">Welcome to PDLive</string> <string name="welcome_pdlive">Welcome to PDLive</string>

View File

@ -659,7 +659,7 @@
<string name="report">Report</string> <string name="report">Report</string>
<string name="reload">retry</string> <string name="reload">retry</string>
<string name="refuse">refuse</string> <string name="refuse">refuse</string>
<string name="save">Preservation</string> <string name="save">Save</string>
<string name="reg">Register</string> <string name="reg">Register</string>
<string name="no_more_mic">No one is currently in the voice link</string> <string name="no_more_mic">No one is currently in the voice link</string>
<string name="welcome_pdlive">Welcome to PDLive</string> <string name="welcome_pdlive">Welcome to PDLive</string>

View File

@ -138,4 +138,7 @@
<item name="android:activityCloseEnterAnimation">@anim/out_to_right_abit</item> <item name="android:activityCloseEnterAnimation">@anim/out_to_right_abit</item>
<item name="android:activityCloseExitAnimation">@anim/out_to_right</item> <item name="android:activityCloseExitAnimation">@anim/out_to_right</item>
</style> </style>
<declare-styleable name="MainMessageChatListItem_Layout">
<attr format="reference|enum" name="autoTextEllipsize"/>
</declare-styleable>
</resources> </resources>

View File

@ -4,8 +4,8 @@ ext {
buildToolsVersion: "29.0.2", buildToolsVersion: "29.0.2",
minSdkVersion : 23, minSdkVersion : 23,
targetSdkVersion : 33, targetSdkVersion : 33,
versionCode : 525, versionCode : 526,
versionName : "6.6.8", versionName : "6.6.9",
namespace : "com.pandoralive.shayu" namespace : "com.pandoralive.shayu"
] ]
manifestPlaceholders = [ manifestPlaceholders = [
@ -13,6 +13,7 @@ ext {
serverHost : "https://napi.yaoulive.com", serverHost : "https://napi.yaoulive.com",
// //
// serverHost : " https://ceshi.yaoulive.com", // serverHost : " https://ceshi.yaoulive.com",
buildTime : new Date().format("MM-dd HH:mm", TimeZone.getTimeZone("GMT+8")),
// //
baiduAppId : "23774720", baiduAppId : "23774720",

View File

@ -47,7 +47,7 @@ public class EditNameRemarksActivity extends AbsActivity implements View.OnClick
userId = getIntent().getStringExtra(NAMEREMARK); userId = getIntent().getStringExtra(NAMEREMARK);
mEditText = (EditText) findViewById(R.id.edit); mEditText = (EditText) findViewById(R.id.edit);
mEditText.setFilters(new InputFilter[]{ mEditText.setFilters(new InputFilter[]{
new InputFilter.LengthFilter(10) new InputFilter.LengthFilter(25)
}); });
findViewById(R.id.btn_save).setOnClickListener(this); findViewById(R.id.btn_save).setOnClickListener(this);
String content = InstructorRemarkManager.get(mContext).getInstructorRemark().get(userId); String content = InstructorRemarkManager.get(mContext).getInstructorRemark().get(userId);

View File

@ -1,10 +1,13 @@
package com.yunbao.live.adapter; package com.yunbao.live.adapter;
import android.content.Context; import android.content.Context;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView; import androidx.recyclerview.widget.RecyclerView;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
@ -15,7 +18,9 @@ import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.Constants; import com.yunbao.common.Constants;
import com.yunbao.common.adapter.RefreshAdapter; import com.yunbao.common.adapter.RefreshAdapter;
import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.live.R; import com.yunbao.live.R;
import com.yunbao.live.bean.SystemMessageBean; import com.yunbao.live.bean.SystemMessageBean;
import com.yunbao.live.views.SystemMessageViewHolder; import com.yunbao.live.views.SystemMessageViewHolder;
@ -23,6 +28,9 @@ import com.yunbao.live.views.SystemMessageViewHolder;
import java.text.SimpleDateFormat; import java.text.SimpleDateFormat;
import java.util.Date; import java.util.Date;
import io.rong.imkit.utils.RouteUtils;
import io.rong.imlib.model.Conversation;
/** /**
* 互動信息 * 互動信息
*/ */
@ -53,6 +61,7 @@ public class InteractionMessageAdapter extends RefreshAdapter<SystemMessageBean>
LinearLayout toView, lt_content2, lt_reply, lt_img; LinearLayout toView, lt_content2, lt_reply, lt_img;
ImageView img_content_pic1, img_content_pic2, img_content_pic3, img_content2_pic1, img_content2_pic2, img_item_interaction; ImageView img_content_pic1, img_content_pic2, img_content_pic3, img_content2_pic1, img_content2_pic2, img_item_interaction;
RelativeLayout rt_root; RelativeLayout rt_root;
Button mBtnChat;
public Vh(View itemView) { public Vh(View itemView) {
super(itemView); super(itemView);
@ -67,6 +76,7 @@ public class InteractionMessageAdapter extends RefreshAdapter<SystemMessageBean>
img_content_pic3 = itemView.findViewById(R.id.img_content_pic3); img_content_pic3 = itemView.findViewById(R.id.img_content_pic3);
img_content2_pic1 = itemView.findViewById(R.id.img_content2_pic1); img_content2_pic1 = itemView.findViewById(R.id.img_content2_pic1);
img_content2_pic2 = itemView.findViewById(R.id.img_content2_pic2); img_content2_pic2 = itemView.findViewById(R.id.img_content2_pic2);
mBtnChat = itemView.findViewById(R.id.btn_chat);
rt_root = itemView.findViewById(R.id.rt_root); rt_root = itemView.findViewById(R.id.rt_root);
lt_reply = itemView.findViewById(R.id.lt_reply); lt_reply = itemView.findViewById(R.id.lt_reply);
lt_img = itemView.findViewById(R.id.lt_img); lt_img = itemView.findViewById(R.id.lt_img);
@ -87,13 +97,29 @@ public class InteractionMessageAdapter extends RefreshAdapter<SystemMessageBean>
RouteUtil.forwardUserHome(mContext, bean.getUid(), 2); RouteUtil.forwardUserHome(mContext, bean.getUid(), 2);
} }
}); });
if (IMLoginManager.get(mContext).getAnchorB() == 1) {
mBtnChat.setVisibility(View.VISIBLE);
} else {
mBtnChat.setVisibility(View.GONE);
}
ViewClicksAntiShake.clicksAntiShake(mBtnChat, new ViewClicksAntiShake.ViewClicksCallBack() {
@Override
public void onViewClicks() {
RouteUtils.routeToConversationActivity(
mContext,
Conversation.ConversationType.PRIVATE,
bean.getUid()
);
}
});
if (bean.getDynamic_id() != null && !"0".equals(bean.getDynamic_id())) { if (bean.getDynamic_id() != null && !"0".equals(bean.getDynamic_id())) {
lt_img.setVisibility(View.VISIBLE); lt_img.setVisibility(View.VISIBLE);
rt_root.setOnClickListener(new View.OnClickListener() { rt_root.setOnClickListener(new View.OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
Constants.myIntoIndex = 2; Constants.myIntoIndex = 2;
Constants.chatActionUrl=CommonAppConfig.HOST Constants.chatActionUrl = CommonAppConfig.HOST
+ "/h5/shequ/index.html#/h5/shequ/details?isDetailsChat=1&dynamic_uid=" + "/h5/shequ/index.html#/h5/shequ/details?isDetailsChat=1&dynamic_uid="
+ bean.getUid() + bean.getUid()
+ "&id=" + bean.getDynamic_id(); + "&id=" + bean.getDynamic_id();

View File

@ -15,11 +15,14 @@ import androidx.annotation.NonNull;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.LiveBean;
import com.yunbao.common.dialog.DebugDialog; import com.yunbao.common.dialog.DebugDialog;
import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.LiveHttpUtil; import com.yunbao.common.http.LiveHttpUtil;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.message.content.MessageChatTipsContent; import com.yunbao.common.message.content.MessageChatTipsContent;
import com.yunbao.common.utils.DateFormatUtil; import com.yunbao.common.utils.DateFormatUtil;
import com.yunbao.common.utils.LiveRoomCheckLivePresenter; import com.yunbao.common.utils.LiveRoomCheckLivePresenter;
import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.live.R; import com.yunbao.live.R;
import com.yunbao.live.event.InputPanelViewHolderEvent; import com.yunbao.live.event.InputPanelViewHolderEvent;
@ -73,7 +76,7 @@ public class PDLiveMessageListAdapter extends MessageListAdapter {
} }
holder.getConvertView().setBackgroundColor(Color.parseColor("#00000000")); holder.getConvertView().setBackgroundColor(Color.parseColor("#00000000"));
holder.itemView.setBackgroundColor(Color.parseColor("#00000000")); holder.itemView.setBackgroundColor(Color.parseColor("#00000000"));
ImageView readReceiptNew = holder.getConvertView().findViewById(R.id.rc_read_receipt_new); TextView readReceiptNew = holder.getConvertView().findViewById(R.id.rc_read_receipt_new);
if (messageDirection == Message.MessageDirection.RECEIVE) { if (messageDirection == Message.MessageDirection.RECEIVE) {
RongIMClient.getInstance().syncConversationReadStatus(mDataList.get(position).getConversationType(), RongIMClient.getInstance().syncConversationReadStatus(mDataList.get(position).getConversationType(),
@ -99,9 +102,11 @@ public class PDLiveMessageListAdapter extends MessageListAdapter {
readReceiptNew.setVisibility(View.GONE); readReceiptNew.setVisibility(View.GONE);
} }
if (readReceipt.getVisibility() == View.VISIBLE) { if (readReceipt.getVisibility() == View.VISIBLE) {
readReceiptNew.setBackgroundResource(R.mipmap.icon_message_read); readReceiptNew.setText(WordUtil.getNewString(R.string.message_chat_msg_read_tip));
readReceiptNew.setTextColor(Color.parseColor("#777777"));
} else { } else {
readReceiptNew.setBackgroundResource(R.mipmap.icon_message_unread); readReceiptNew.setText(WordUtil.getNewString(R.string.message_chat_msg_unread_tip));
readReceiptNew.setTextColor(Color.parseColor("#FF4874"));
} }
if (readReceipt != null) { if (readReceipt != null) {
readReceipt.setVisibility(View.GONE); readReceipt.setVisibility(View.GONE);
@ -109,7 +114,6 @@ public class PDLiveMessageListAdapter extends MessageListAdapter {
if (content instanceof MessageChatTipsContent) { if (content instanceof MessageChatTipsContent) {
readReceiptNew.setVisibility(View.GONE); readReceiptNew.setVisibility(View.GONE);
} }
readReceiptNew.setVisibility(View.GONE);
} }
holder.getConvertView().setOnTouchListener(new View.OnTouchListener() { holder.getConvertView().setOnTouchListener(new View.OnTouchListener() {
@ -163,6 +167,8 @@ public class PDLiveMessageListAdapter extends MessageListAdapter {
holder.getView(R.id.right_liveStatus).setVisibility(View.GONE); holder.getView(R.id.right_liveStatus).setVisibility(View.GONE);
} }
} }
tv.setVisibility(View.VISIBLE);
ImgLoader.displayAvatarCircleCrop(holder.getContext(), IMLoginManager.get(holder.getContext()).getUserInfo().getAvatar(),holder.getView(R.id.rc_right_portrait));
/* if (messageDirection == Message.MessageDirection.RECEIVE) { /* if (messageDirection == Message.MessageDirection.RECEIVE) {
holder.setText(R.id.left_time, DateFormatUtil.formatDate(new Date(mDataList.get(position).getSentTime()), "MM-dd hh:mm:ss")); holder.setText(R.id.left_time, DateFormatUtil.formatDate(new Date(mDataList.get(position).getSentTime()), "MM-dd hh:mm:ss"));
holder.getView(R.id.left_time).setVisibility(View.VISIBLE); holder.getView(R.id.left_time).setVisibility(View.VISIBLE);

View File

@ -691,6 +691,11 @@ public class PortraitLiveManager implements LivePlayListener, SocketMessageListe
} else if (pkInfo != null && pkInfo.getIntValue("drpk_status") == 1) { } else if (pkInfo != null && pkInfo.getIntValue("drpk_status") == 1) {
if (mLiveRoomViewHolder != null) { if (mLiveRoomViewHolder != null) {
mLiveRoomViewHolder.initPkRank(null); mLiveRoomViewHolder.initPkRank(null);
String pkUid = pkInfo.getString("pkuid");
if (!StringUtil.isEmpty(pkUid)) {
//初始化天梯赛信息
mLiveRoomViewHolder.initRankPKInfo(String.valueOf(data.getLiveInfo().getUid()), pkUid);
}
} }
if (mLivePlayViewHolder != null) { if (mLivePlayViewHolder != null) {
mLivePlayViewHolder.setViewUP(4); mLivePlayViewHolder.setViewUP(4);

View File

@ -0,0 +1,24 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent">
<FrameLayout
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginBottom="50dp" />
<LinearLayout
android:id="@+id/lt_nodata_msg"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:gravity="center"
android:visibility="gone">
<ImageView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@mipmap/img_no_new" />
</LinearLayout>
</LinearLayout>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
@ -30,8 +31,8 @@
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_weight="1"
android:layout_marginRight="3dp" android:layout_marginRight="3dp"
android:layout_weight="1"
android:orientation="vertical"> android:orientation="vertical">
<TextView <TextView
@ -54,6 +55,28 @@
android:textColor="@color/black1" android:textColor="@color/black1"
android:textSize="13sp" /> android:textSize="13sp" />
<LinearLayout
android:id="@+id/lt_img"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:visibility="visible">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginRight="12dp"
app:cardCornerRadius="8dp">
<ImageView
android:id="@+id/img_item_interaction"
android:layout_width="60dp"
android:layout_height="60dp"
android:scaleType="centerCrop" />
</androidx.cardview.widget.CardView>
</LinearLayout>
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
@ -92,29 +115,21 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<LinearLayout
android:id="@+id/lt_img"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:visibility="visible">
<androidx.cardview.widget.CardView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginRight="12dp"
app:cardCornerRadius="8dp">
<ImageView
android:id="@+id/img_item_interaction"
android:layout_width="60dp"
android:layout_height="60dp"
android:scaleType="centerCrop" />
</androidx.cardview.widget.CardView>
</LinearLayout>
</LinearLayout> </LinearLayout>
<Button
android:id="@+id/btn_chat"
android:layout_width="68dp"
android:layout_height="37dp"
android:layout_alignParentEnd="true"
android:layout_centerInParent="true"
android:layout_marginEnd="10dp"
android:background="@drawable/bg_msg_address_book_user_btn_fan"
android:text="@string/message_interactive_chat"
android:textColor="#FFF"
android:textSize="13sp"
android:visibility="gone"
tools:visibility="visible" />
</RelativeLayout> </RelativeLayout>
</LinearLayout> </LinearLayout>

View File

@ -53,35 +53,71 @@
</RelativeLayout> </RelativeLayout>
</RelativeLayout> </RelativeLayout>
<TextView <LinearLayout
android:id="@+id/rc_conversation_title" android:id="@+id/rc_conversation_title_layout"
style="@style/TextStyle.Alignment"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginStart="@dimen/rc_margin_size_12" android:layout_marginStart="@dimen/rc_margin_size_12"
android:layout_marginTop="@dimen/rc_margin_size_16" android:orientation="horizontal"
android:layout_marginEnd="@dimen/rc_margin_size_12" app:autoTextEllipsize="@+id/rc_conversation_title"
android:text="张三"
android:textColor="@color/rc_text_main_color"
android:textSize="@dimen/rc_font_secondary_size"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/rc_conversation_status"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/rc_margin_size_12"
android:layout_marginTop="@dimen/rc_margin_size_16"
android:layout_marginEnd="@dimen/rc_margin_size_12"
android:ellipsize="end"
android:singleLine="true"
android:textSize="8sp"
app:layout_constraintBottom_toBottomOf="@+id/rc_conversation_title"
app:layout_constraintEnd_toStartOf="@+id/rc_conversation_date" app:layout_constraintEnd_toStartOf="@+id/rc_conversation_date"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_title" app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toTopOf="parent" app:layout_constraintTop_toTopOf="parent">
tools:text="在线" />
<TextView
android:id="@+id/rc_conversation_title"
style="@style/TextStyle.Alignment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/rc_margin_size_16"
android:ellipsize="end"
android:maxWidth="120dp"
android:maxLines="1"
android:textColor="@color/rc_text_main_color"
android:textSize="@dimen/rc_font_secondary_size"
app:layout_constrainedWidth="true"
app:layout_constraintHorizontal_bias="0"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toTopOf="parent"
tools:text="张三11111111111111111111111" />
<TextView
android:id="@+id/rc_conversation_live_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="12dp"
android:layout_marginEnd="@dimen/rc_margin_size_12"
android:background="@drawable/bg_main_message_chat_list_live_timer"
android:paddingStart="5dp"
android:paddingTop="2dp"
android:paddingEnd="3dp"
android:paddingBottom="3dp"
android:singleLine="true"
android:textColor="#EC70FD"
android:textSize="10sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/rc_conversation_title"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_title"
app:layout_constraintTop_toTopOf="parent"
tools:text="看直播10min"
tools:visibility="visible" />
<TextView
android:id="@+id/rc_conversation_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/rc_margin_size_12"
android:layout_marginTop="@dimen/rc_margin_size_16"
android:singleLine="true"
android:textSize="8sp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="@+id/rc_conversation_title"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_live_status"
app:layout_constraintTop_toTopOf="parent"
tools:text="在线" />
</LinearLayout>
<TextView <TextView
android:id="@+id/rc_conversation_content" android:id="@+id/rc_conversation_content"
@ -91,15 +127,15 @@
android:layout_marginStart="12dp" android:layout_marginStart="12dp"
android:layout_marginTop="4dp" android:layout_marginTop="4dp"
android:layout_marginEnd="60dp" android:layout_marginEnd="60dp"
android:text="你好朋友11111111111111111111111111111111111111111"
android:maxLines="1"
android:ellipsize="end" android:ellipsize="end"
android:maxLines="1"
android:text="你好朋友11111111111111111111111111111111111111111"
android:textColor="@color/rc_secondary_color" android:textColor="@color/rc_secondary_color"
android:textSize="@dimen/rc_font_text_third_size" android:textSize="@dimen/rc_font_text_third_size"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl" app:layout_constraintStart_toEndOf="@+id/rc_conversation_portrait_rl"
app:layout_constraintTop_toBottomOf="@+id/rc_conversation_title" /> app:layout_constraintTop_toBottomOf="@+id/rc_conversation_title_layout" />
<TextView <TextView
android:id="@+id/rc_conversation_date" android:id="@+id/rc_conversation_date"
@ -116,14 +152,14 @@
<ImageView <ImageView
android:id="@+id/rc_conversation_no_disturb" android:id="@+id/rc_conversation_no_disturb"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:visibility="gone"
tools:visibility="visible"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/rc_margin_size_12" android:layout_marginEnd="@dimen/rc_margin_size_12"
android:layout_marginBottom="@dimen/rc_margin_size_12" android:layout_marginBottom="@dimen/rc_margin_size_12"
android:src="@drawable/rc_no_disturb"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
android:src="@drawable/rc_no_disturb" /> tools:visibility="visible" />
<ImageView <ImageView
android:id="@+id/rc_conversation_read_receipt" android:id="@+id/rc_conversation_read_receipt"
@ -131,18 +167,18 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/rc_margin_size_2" android:layout_marginEnd="@dimen/rc_margin_size_2"
android:layout_marginBottom="@dimen/rc_margin_size_12" android:layout_marginBottom="@dimen/rc_margin_size_12"
android:src="@drawable/rc_read_receipt"
android:visibility="gone" android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/rc_conversation_no_disturb" app:layout_constraintEnd_toStartOf="@+id/rc_conversation_no_disturb"
app:layout_goneMarginRight="@dimen/rc_margin_size_12" app:layout_goneMarginRight="@dimen/rc_margin_size_12" />
android:src="@drawable/rc_read_receipt" />
<View <View
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="0.5dp" android:layout_height="0.5dp"
android:layout_marginTop="71.5dp" android:layout_marginTop="71.5dp"
android:background="@color/rc_divider_color" android:background="@color/rc_divider_color"
app:layout_constraintStart_toStartOf="@id/rc_conversation_title" app:layout_constraintStart_toStartOf="@id/rc_conversation_title_layout"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -142,12 +142,6 @@
android:src="@drawable/rc_read_receipt" android:src="@drawable/rc_read_receipt"
android:visibility="gone" /> android:visibility="gone" />
<ImageView
android:id="@+id/rc_read_receipt_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="bottom"
android:layout_marginEnd="4dp" />
<TextView <TextView
android:id="@+id/rc_read_receipt_request" android:id="@+id/rc_read_receipt_request"
@ -182,6 +176,16 @@
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>
<TextView
android:id="@+id/rc_read_receipt_new"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
tools:text="[已读]"
android:visibility="gone"
android:text="11sp"
app:layout_constraintEnd_toEndOf="@+id/ll_content"
app:layout_constraintTop_toBottomOf="@+id/ll_content"
tools:visibility="visible" />
<View <View
android:id="@+id/rc_v_edit" android:id="@+id/rc_v_edit"
android:layout_width="0dp" android:layout_width="0dp"

View File

@ -117,4 +117,11 @@
<string name="live_fans_group_send_gift_tips">Fan group level Of Lv%s Can send this gift</string> <string name="live_fans_group_send_gift_tips">Fan group level Of Lv%s Can send this gift</string>
<string name="live_rad_pack_join_fans_group_tip">Join the fan group can be opened [Join]</string> <string name="live_rad_pack_join_fans_group_tip">Join the fan group can be opened [Join]</string>
<string name="live_rad_pack_join_fans_group_click_tip">Join the fan group to open</string> <string name="live_rad_pack_join_fans_group_click_tip">Join the fan group to open</string>
<string name="message_chat_msg_all">全部聊天</string>
<string name="message_chat_msg_system">系統匹配</string>
<string name="message_chat_msg_user">對方主動</string>
<string name="message_chat_msg_look_live">看直播%dmin</string>
<string name="message_chat_msg_read_tip">[Read]</string>
<string name="message_chat_msg_unread_tip">[Unread]</string>
<string name="message_interactive_chat">發起聊天</string>
</resources> </resources>

View File

@ -115,4 +115,12 @@
<string name="live_fans_group_send_gift_tips">粉絲團等級達到 Lv%s 可送出該禮物</string> <string name="live_fans_group_send_gift_tips">粉絲團等級達到 Lv%s 可送出該禮物</string>
<string name="live_rad_pack_join_fans_group_tip">加入粉絲團可開啟【加入】</string> <string name="live_rad_pack_join_fans_group_tip">加入粉絲團可開啟【加入】</string>
<string name="live_rad_pack_join_fans_group_click_tip">加入粉絲團可開啟</string> <string name="live_rad_pack_join_fans_group_click_tip">加入粉絲團可開啟</string>
<string name="message_chat_msg_all">全部聊天</string>
<string name="message_chat_msg_system">系統匹配</string>
<string name="message_chat_msg_user">對方主動</string>
<string name="message_chat_msg_look_live">看直播%dmin</string>
<string name="message_chat_msg_read_tip">[已讀]</string>
<string name="message_chat_msg_unread_tip">[未讀]</string>
<string name="message_interactive_chat">發起聊天</string>
</resources> </resources>

View File

@ -59,6 +59,7 @@ import com.yunbao.main.R;
import com.yunbao.main.event.EditProfileEvent; import com.yunbao.main.event.EditProfileEvent;
import com.yunbao.main.http.MainHttpConsts; import com.yunbao.main.http.MainHttpConsts;
import com.yunbao.main.http.MainHttpUtil; import com.yunbao.main.http.MainHttpUtil;
import com.yunbao.main.manager.imrongcloud.ConversationIMListManager;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;

View File

@ -30,6 +30,7 @@ import com.yunbao.common.utils.ListUtils;
import com.yunbao.common.utils.RandomUtil; import com.yunbao.common.utils.RandomUtil;
import com.yunbao.common.utils.RouteUtil; import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ViewPageIndicatorUtils;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
import com.yunbao.main.R; import com.yunbao.main.R;
import com.yunbao.main.adapter.MainMsgAddressBookListAdapter; import com.yunbao.main.adapter.MainMsgAddressBookListAdapter;
@ -224,7 +225,7 @@ public class MsgAddressBookActivity extends AbsActivity {
} }
}); });
mIndicator.setNavigator(commonNavigator); mIndicator.setNavigator(commonNavigator);
bind(mIndicator, mViewPager); ViewPageIndicatorUtils.bind(mIndicator, mViewPager,null);
} }
private void initViewPager() { private void initViewPager() {
@ -311,27 +312,7 @@ public class MsgAddressBookActivity extends AbsActivity {
}); });
} }
public static void bind(final MagicIndicator magicIndicator, ViewPager2 viewPager) {
viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
super.onPageScrolled(position, positionOffset, positionOffsetPixels);
magicIndicator.onPageScrolled(position, positionOffset, positionOffsetPixels);
}
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
magicIndicator.onPageSelected(position);
}
@Override
public void onPageScrollStateChanged(int state) {
super.onPageScrollStateChanged(state);
magicIndicator.onPageScrollStateChanged(state);
}
});
}
private List<MessageChatUserBean> createTempData(int type) { private List<MessageChatUserBean> createTempData(int type) {
List<MessageChatUserBean> list = new ArrayList<>(); List<MessageChatUserBean> list = new ArrayList<>();

View File

@ -5,6 +5,7 @@ import android.content.Intent;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Color; import android.graphics.Color;
import android.os.Build; import android.os.Build;
import android.text.InputFilter;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.Log; import android.util.Log;
import android.view.GestureDetector; import android.view.GestureDetector;
@ -53,6 +54,7 @@ import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.ViewUtils; import com.yunbao.common.utils.ViewUtils;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.live.bean.SearchUserBean; import com.yunbao.live.bean.SearchUserBean;
import com.yunbao.live.dialog.MenuPopuwWindow; import com.yunbao.live.dialog.MenuPopuwWindow;
import com.yunbao.live.event.InputPanelViewHolderEvent; import com.yunbao.live.event.InputPanelViewHolderEvent;
@ -63,7 +65,6 @@ import com.yunbao.main.R;
import com.yunbao.main.adapter.MessageChatTopImageListAdapter; import com.yunbao.main.adapter.MessageChatTopImageListAdapter;
import com.yunbao.main.adapter.MessageChatTopTopListAdapter; import com.yunbao.main.adapter.MessageChatTopTopListAdapter;
import com.yunbao.main.http.MainHttpUtil; import com.yunbao.main.http.MainHttpUtil;
import com.yunbao.main.manager.imrongcloud.ConversationIMListManager;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
@ -262,8 +263,11 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl
} }
}); });
ViewUtils.findViewById(card, R.id.rc_conversation_portrait, ImageView.class).setOnClickListener(view -> { ViewClicksAntiShake.clicksAntiShake(ViewUtils.findViewById(card, R.id.rc_conversation_portrait, ImageView.class), new ViewClicksAntiShake.ViewClicksCallBack() {
RouteUtil.forwardUserHome(targetId); @Override
public void onViewClicks() {
RouteUtil.forwardUserHome(targetId);
}
}); });
} catch (Exception e) { } catch (Exception e) {
@ -297,10 +301,10 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl
showBanner(); showBanner();
showTag(); showTag();
if (data.getUser().getAttention() <= 1) { if (data.getUser().getAttention() <= 1) {
ViewUtils.findViewById(card, R.id.follow, Button.class).setOnClickListener(new View.OnClickListener() { ViewClicksAntiShake.clicksAntiShake(ViewUtils.findViewById(card, R.id.follow, Button.class), new ViewClicksAntiShake.ViewClicksCallBack() {
@Override @Override
public void onClick(View view) { public void onViewClicks() {
follow((Button) view, userInfoBean.getUser().getId() + ""); follow(ViewUtils.findViewById(card, R.id.follow, Button.class), userInfoBean.getUser().getId() + "");
} }
}); });
} else { } else {
@ -313,30 +317,33 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl
public void onSuccess(List<Integer> data) { public void onSuccess(List<Integer> data) {
if (data.contains(Integer.parseInt(targetId))) { if (data.contains(Integer.parseInt(targetId))) {
ViewUtils.findViewById(card, R.id.liveStatus).setVisibility(View.VISIBLE); ViewUtils.findViewById(card, R.id.liveStatus).setVisibility(View.VISIBLE);
ViewUtils.findViewById(card, R.id.liveStatus).setOnClickListener(view -> { ViewClicksAntiShake.clicksAntiShake(ViewUtils.findViewById(card, R.id.liveStatus), new ViewClicksAntiShake.ViewClicksCallBack() {
LiveHttpUtil.getLiveInfo(targetId, new com.yunbao.common.http.HttpCallback() { @Override
@Override public void onViewClicks() {
public void onSuccess(int code, String msg, String[] info) { LiveHttpUtil.getLiveInfo(targetId, new com.yunbao.common.http.HttpCallback() {
if (code == 0 && info.length > 0) { @Override
LiveBean liveBean = JSON.parseObject(info[0], LiveBean.class); public void onSuccess(int code, String msg, String[] info) {
if (liveBean == null) { if (code == 0 && info.length > 0) {
return; LiveBean liveBean = JSON.parseObject(info[0], LiveBean.class);
if (liveBean == null) {
return;
}
liveBean.setParams(new HashMap<>());
new LiveRoomCheckLivePresenter(mContext, liveBean.getUid(), liveBean.getStream(), new LiveRoomCheckLivePresenter.NewActionListener() {
@Override
public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk) {
RouteUtil.forwardLiveAudienceActivity(liveBean, liveType, Integer.parseInt(liveSdk), Integer.parseInt(liveTypeVal));
}
@Override
public void onCheckError(String contextError) {
}
});
} }
liveBean.setParams(new HashMap<>());
new LiveRoomCheckLivePresenter(mContext, liveBean.getUid(), liveBean.getStream(), new LiveRoomCheckLivePresenter.NewActionListener() {
@Override
public void onLiveRoomChanged(String liveUid, String stream, int liveType, String liveTypeVal, String liveSdk) {
RouteUtil.forwardLiveAudienceActivity(liveBean, liveType, Integer.parseInt(liveSdk), Integer.parseInt(liveTypeVal));
}
@Override
public void onCheckError(String contextError) {
}
});
} }
} });
}); }
}); });
} }
} }
@ -413,7 +420,7 @@ public class PDLiveConversationActivity extends AbsActivity implements View.OnCl
JSONArray array = JSONArray.parseArray(Arrays.toString(info)); JSONArray array = JSONArray.parseArray(Arrays.toString(info));
for (int i = 0; i < array.size(); i++) { for (int i = 0; i < array.size(); i++) {
JSONObject json = array.getJSONObject(0); JSONObject json = array.getJSONObject(0);
if (json.containsKey(targetId)) { if (json.containsKey(targetId) && !StringUtil.isEmpty(json.getString(targetId))) {
titleView.setText(json.getString(targetId)); titleView.setText(json.getString(targetId));
ViewUtils.findViewById(card, R.id.userName, TextView.class).setText(json.getString(targetId)); ViewUtils.findViewById(card, R.id.userName, TextView.class).setText(json.getString(targetId));
return; return;

View File

@ -14,25 +14,42 @@ import android.widget.TextView;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import com.yunbao.common.bean.MainMessageChatListTimer;
import com.yunbao.common.dialog.DebugDialog;
import com.yunbao.common.glide.ImgLoader; import com.yunbao.common.glide.ImgLoader;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.message.content.MessageChatCardContent; import com.yunbao.common.message.content.MessageChatCardContent;
import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.DateFormatUtil;
import com.yunbao.common.utils.ListUtils; import com.yunbao.common.utils.ListUtils;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.ViewUtils; import com.yunbao.common.utils.ViewUtils;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.weight.ViewClicksAntiShake;
import com.yunbao.main.R; import com.yunbao.main.R;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import io.rong.imkit.IMCenter;
import io.rong.imkit.conversationlist.ConversationListAdapter; import io.rong.imkit.conversationlist.ConversationListAdapter;
import io.rong.imkit.conversationlist.model.BaseUiConversation; import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation; import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.utils.RouteUtils; import io.rong.imkit.utils.RouteUtils;
import io.rong.imkit.widget.adapter.ViewHolder; import io.rong.imkit.widget.adapter.ViewHolder;
import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation; import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.MessageContent;
import io.rong.message.TextMessage;
public class MainConversationListAdapter extends ConversationListAdapter { public class MainConversationListAdapter extends ConversationListAdapter {
public static final int TYPE_SEARCH_TITLE = 500; public static final int TYPE_SEARCH_TITLE = 500;
@ -40,12 +57,18 @@ public class MainConversationListAdapter extends ConversationListAdapter {
public static final int TYPE_SEARCH_CHAT = 520; public static final int TYPE_SEARCH_CHAT = 520;
private List<BaseUiConversation> srcList; private List<BaseUiConversation> srcList;
private Context mContext; private Context mContext;
private boolean isChat=true; private boolean isChat = true;
private OnRecyclerListRefreshListener<List<BaseUiConversation>> onRefreshListener;
private Map<String, Integer> timerMap = new HashMap<>();
public MainConversationListAdapter(Context mContext) { public MainConversationListAdapter(Context mContext) {
this.mContext = mContext; this.mContext = mContext;
} }
public void setOnRefreshListener(OnRecyclerListRefreshListener<List<BaseUiConversation>> onRefreshListener) {
this.onRefreshListener = onRefreshListener;
}
@NonNull @NonNull
@Override @Override
public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { public ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
@ -92,7 +115,7 @@ public class MainConversationListAdapter extends ConversationListAdapter {
@Override @Override
public void onBindViewHolder(@NonNull ViewHolder holder, int position) { public void onBindViewHolder(@NonNull ViewHolder holder, int position) {
if (isEmpty() || mDataList.isEmpty()) { if (isEmpty() || mDataList.isEmpty()) {
bindEmpty(holder, position); bindEmpty(holder, position);
return; return;
} }
if (getItemViewType(position) == TYPE_SEARCH_USER) { if (getItemViewType(position) == TYPE_SEARCH_USER) {
@ -104,28 +127,90 @@ public class MainConversationListAdapter extends ConversationListAdapter {
} else if (getItemViewType(position) != -200) { } else if (getItemViewType(position) != -200) {
super.onBindViewHolder(holder, position); super.onBindViewHolder(holder, position);
} }
if (getItemViewType(position) != -200) {
bindDefault(holder, position);
}
}
private void bindDefault(ViewHolder holder, int position) {
BaseUiConversation conversation = mDataList.get(position);
Log.i("列表", "bindDefault: 用户头像:" + conversation.mCore.getPortraitUrl());
Log.i("列表", "bindDefault: 用户名字:" + conversation.mCore.getConversationTitle());
ImgLoader.display(holder.getContext(), conversation.mCore.getPortraitUrl(), holder.getView(R.id.rc_conversation_portrait));
holder.setText(R.id.rc_conversation_title, conversation.mCore.getConversationTitle());
if (conversation.mCore.getSentTime() != -1 && holder.getView(R.id.rc_conversation_date) != null) {
holder.setText(R.id.rc_conversation_date, DateFormatUtil.getDateTimeString(conversation.mCore.getSentTime(), true, holder.getContext()));
holder.getView(R.id.rc_conversation_date).setVisibility(View.VISIBLE);
} else if (holder.getView(R.id.rc_conversation_date) != null) {
holder.getView(R.id.rc_conversation_date).setVisibility(View.GONE);
}
if (holder.getView(R.id.rc_conversation_live_status) == null || IMLoginManager.get(holder.getContext()).getAnchorB() != 1) {
return;
}
Integer timer = timerMap.get(mDataList.get(position).mCore.getTargetId());
if (timer == null) {
holder.getView(R.id.rc_conversation_live_status).setVisibility(View.GONE);
return;
}
if (timer >= 10) {
holder.setText(R.id.rc_conversation_live_status,
String.format(WordUtil.getNewString(R.string.message_chat_msg_look_live), timer)
);
holder.getView(R.id.rc_conversation_live_status).setVisibility(View.VISIBLE);
} else {
holder.getView(R.id.rc_conversation_live_status).setVisibility(View.GONE);
}
} }
private void bindEmpty(ViewHolder holder, int position) { private void bindEmpty(ViewHolder holder, int position) {
if(isChat){ if (isChat) {
ViewUtils.findViewById(holder.itemView,R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_chat_list); ViewUtils.findViewById(holder.itemView, R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_chat_list);
ViewUtils.findViewById(holder.itemView,R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list); ViewUtils.findViewById(holder.itemView, R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list);
}else{ } else {
ViewUtils.findViewById(holder.itemView,R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_search); ViewUtils.findViewById(holder.itemView, R.id.imageView, ImageView.class).setImageResource(R.mipmap.ic_message_not_search);
ViewUtils.findViewById(holder.itemView,R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list_search); ViewUtils.findViewById(holder.itemView, R.id.textView, TextView.class).setText(R.string.not_data_message_chat_list_search);
}
}
public void onFinish() {
if (onRefreshListener != null) {
Log.i("聊天数据源", "设置数据源: " + mDataList.size());
onRefreshListener.onFinish(mDataList);
} }
} }
@Override @Override
public void setDataCollection(List<BaseUiConversation> data) { public void setDataCollection(List<BaseUiConversation> data) {
List<BaseUiConversation> tmp = new ArrayList<>();
Log.i("聊天数据源", "setDataCollection: " + data.hashCode());
List<String> urls = new ArrayList<>();
if (srcList == null) { if (srcList == null) {
srcList = new ArrayList<>(); srcList = new ArrayList<>();
} }
mDataList.clear(); mDataList.clear();
srcList.clear();
if (mContext == null) if (mContext == null)
mContext = AppManager.getInstance().getLastActivity(); mContext = AppManager.getInstance().getLastActivity();
for (BaseUiConversation item : data) { for (BaseUiConversation item : data) {
if (urls.contains(item.mCore.getTargetId())) continue;
if (item.mConversationContent != null && item.mConversationContent.toString().contains("_method_")) {
IMCenter.getInstance().deleteMessages(Conversation.ConversationType.PRIVATE,
item.mCore.getTargetId(),
new int[]{item.mCore.getLatestMessageId()},
new RongIMClient.ResultCallback<Boolean>() {
public void onSuccess(Boolean aBoolean) {
Log.i("PDMessageInterceptor", "onSuccess: 删除成功:" + aBoolean + " " + item.mCore.getLatestMessageId());
}
@Override
public void onError(RongIMClient.ErrorCode errorCode) {
Log.i("PDMessageInterceptor", "onSuccess: 删除失败:" + errorCode);
}
}
);
IMCenter.getInstance().clearMessagesUnreadStatus(Conversation.ConversationType.PRIVATE, item.mCore.getTargetId(), null);
}
urls.add(item.mCore.getTargetId());
Log.i("聊天数据源", item.mCore.getConversationTitle() + "|" + item.mCore.getPortraitUrl() + "|" + item.mCore.getTargetId());
BaseUiConversation cn = new SingleConversation(mContext, item.mCore); BaseUiConversation cn = new SingleConversation(mContext, item.mCore);
srcList.add(cn); srcList.add(cn);
@ -134,9 +219,17 @@ public class MainConversationListAdapter extends ConversationListAdapter {
item.mConversationContent = new SpannableString(WordUtil.getNewString(R.string.activity_msg_chat_list_card)); item.mConversationContent = new SpannableString(WordUtil.getNewString(R.string.activity_msg_chat_list_card));
} }
} }
tmp.add(item);
} }
// ToastUtil.showDebug("消息数:"+data.size());
super.setDataCollection(tmp);
}
super.setDataCollection(data); public void clear() {
mDataList.clear();
if (srcList != null) {
srcList.clear();
}
} }
public List<BaseUiConversation> getSrcList() { public List<BaseUiConversation> getSrcList() {
@ -172,8 +265,11 @@ public class MainConversationListAdapter extends ConversationListAdapter {
holder.getView(R.id.itemDecorationBottom).setVisibility(View.VISIBLE); holder.getView(R.id.itemDecorationBottom).setVisibility(View.VISIBLE);
holder.itemView.setBackgroundResource(R.drawable.bg_msg_list_item_centre); holder.itemView.setBackgroundResource(R.drawable.bg_msg_list_item_centre);
} }
holder.itemView.setOnClickListener(view -> { ViewClicksAntiShake.clicksAntiShake(holder.itemView, new ViewClicksAntiShake.ViewClicksCallBack() {
RouteUtils.routeToConversationActivity(view.getContext(), mDataList.get(position).mCore.getConversationType(), mDataList.get(position).mCore.getTargetId()); @Override
public void onViewClicks() {
RouteUtils.routeToConversationActivity(holder.itemView.getContext(), mDataList.get(position).mCore.getConversationType(), mDataList.get(position).mCore.getTargetId());
}
}); });
} }
@ -199,16 +295,57 @@ public class MainConversationListAdapter extends ConversationListAdapter {
holder.getView(R.id.itemDecorationBottom).setVisibility(View.VISIBLE); holder.getView(R.id.itemDecorationBottom).setVisibility(View.VISIBLE);
holder.itemView.setBackgroundResource(R.drawable.bg_msg_list_item_centre); holder.itemView.setBackgroundResource(R.drawable.bg_msg_list_item_centre);
} }
holder.itemView.setOnClickListener(view -> { ViewClicksAntiShake.clicksAntiShake(holder.itemView, new ViewClicksAntiShake.ViewClicksCallBack() {
RouteUtils.routeToConversationActivity(view.getContext(), mDataList.get(position).mCore.getConversationType(), mDataList.get(position).mCore.getTargetId()); @Override
public void onViewClicks() {
RouteUtils.routeToConversationActivity(holder.itemView.getContext(), mDataList.get(position).mCore.getConversationType(), mDataList.get(position).mCore.getTargetId());
}
}); });
} }
public void setChat() { public void setChat() {
isChat=true; isChat = true;
} }
public void setSearch() { public void setSearch() {
isChat=false; isChat = false;
}
public void setTimerMap(Map<String, Integer> timerMap) {
this.timerMap.putAll(timerMap);
this.notifyDataSetChanged();
}
public int getMessageId(String senderUserId) {
for (int i = 0; i < mDataList.size(); i++) {
if (mDataList.get(i).mCore.getTargetId().equals(senderUserId)) {
return i;
}
}
return -1;
}
public void update(Message bean, int id) {
RongIMClient.getInstance().getUnreadCount(Conversation.ConversationType.PRIVATE, bean.getTargetId(), new RongIMClient.ResultCallback<Integer>() {
@Override
public void onSuccess(Integer integer) {
BaseUiConversation conversation = mDataList.get(id);
conversation.mCore.setSentTime(bean.getSentTime());
conversation.mCore.setUnreadMessageCount(integer);
conversation.mConversationContent = new SpannableString(((TextMessage) bean.getContent()).getContent());
mDataList.set(id, conversation);
notifyItemChanged(id);
}
@Override
public void onError(RongIMClient.ErrorCode e) {
BaseUiConversation conversation = mDataList.get(id);
conversation.mCore.setSentTime(bean.getSentTime());
conversation.mConversationContent = new SpannableString(((TextMessage) bean.getContent()).getContent());
mDataList.set(id, conversation);
notifyItemChanged(id);
}
});
} }
} }

View File

@ -0,0 +1,144 @@
package com.yunbao.main.fragment;
import android.os.Bundle;
import android.view.View;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.bean.MainMessageChatListTimer;
import com.yunbao.common.dialog.DebugDialog;
import com.yunbao.common.event.MessageIMEvent;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
import com.yunbao.common.manager.base.ACache;
import com.yunbao.common.manager.imrongcloud.RongcloudIMManager;
import com.yunbao.common.utils.SpUtil;
import com.yunbao.main.adapter.MainConversationListAdapter;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imlib.RongCoreClient;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.ReceivedProfile;
import io.rong.message.TextMessage;
public abstract class AbsMainMessageChatListFragment extends Fragment {
RecyclerView recyclerView;
MainConversationListAdapter mAdapter;
SmartRefreshLayout refreshLayout;
public void setAdapter(MainConversationListAdapter mAdapter) {
this.mAdapter = mAdapter;
}
public abstract void onChatList();
public abstract void search(String string);
public abstract void updateList();
public void onTest() {
}
public void onRefreshFinished() {
if (refreshLayout != null) {
refreshLayout.finishRefresh(true);
}
}
public void onLoadMoreFinished() {
if (refreshLayout != null) {
refreshLayout.finishLoadMore(true);
}
}
@Override
public void onResume() {
super.onResume();
updateList();
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
EventBus.getDefault().register(this);
}
@Override
public void onDestroy() {
super.onDestroy();
EventBus.getDefault().unregister(this);
}
private static long lastTime;
private static boolean isNet = false;
Map<String, BaseUiConversation> map = new HashMap<>();
public void loadLiveLookTime(List<BaseUiConversation> srcList, OnRecyclerListRefreshListener<Map<String, Integer>> onRefreshListener) {
/* if (System.currentTimeMillis() - lastTime > 200 || isNet) {
for (BaseUiConversation conversation : srcList) {
if (map.containsKey(conversation.mCore.getTargetId())) {
return;
}
}
}*/
lastTime = System.currentTimeMillis();
isNet = true;
List<String> uids = new ArrayList<>();
for (BaseUiConversation conversation : srcList) {
map.put(conversation.mCore.getTargetId(), conversation);
if (conversation.mCore.getConversationType() == Conversation.ConversationType.PRIVATE) {
uids.add(conversation.mCore.getTargetId());
}
}
LiveNetManager.get(getContext())
.getIsLook(String.join(",", uids), new HttpCallback<>() {
@Override
public void onSuccess(List<MainMessageChatListTimer> data) {
Map<String, Integer> timerMap = new HashMap<>();
for (MainMessageChatListTimer timer : data) {
timerMap.put(timer.getUid(), timer.getTime());
}
onRefreshListener.onFinish(timerMap);
isNet = false;
}
@Override
public void onError(String error) {
isNet = false;
}
});
}
@Subscribe(threadMode = ThreadMode.MAIN)
public void sendMessage(io.rong.imlib.model.Message bean) {
int id1 = mAdapter.getMessageId(bean.getSenderUserId());
int id2 = mAdapter.getMessageId(bean.getTargetId());
if (id1 != -1) {
mAdapter.update(bean, id1);
}
if (id2 != -1) {
mAdapter.update(bean, id2);
}
}
}

View File

@ -1,12 +1,14 @@
package com.yunbao.main.fragment; package com.yunbao.main.fragment;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.lifecycle.Observer;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
@ -17,36 +19,72 @@ import com.yunbao.main.adapter.MainConversationListAdapter;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import io.rong.common.rlog.RLog;
import io.rong.imkit.conversationlist.ConversationListAdapter; import io.rong.imkit.conversationlist.ConversationListAdapter;
import io.rong.imkit.conversationlist.ConversationListFragment; import io.rong.imkit.conversationlist.ConversationListFragment;
import io.rong.imkit.conversationlist.model.BaseUiConversation; import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation; import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.event.Event;
import io.rong.imlib.RongIMClient; import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation; import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.SearchConversationResult; import io.rong.imlib.model.SearchConversationResult;
public class MainMessageChatFragment extends ConversationListFragment { public class MainMessageChatFragment extends ConversationListFragment {
private static final String TAG = "融云列表";
int listHashCode = 0;
@Nullable @Nullable
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
Log.i(TAG, "onCreateView: 创建融云");
return inflater.inflate(R.layout.rc_conversationlist_fragment, container, false); return inflater.inflate(R.layout.rc_conversationlist_fragment, container, false);
} }
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.i(TAG, "onViewCreated:创建融云页面");
mConversationListViewModel.getConversationListLiveData().observe(this.getViewLifecycleOwner(), new Observer<List<BaseUiConversation>>() {
@Override
public void onChanged(List<BaseUiConversation> uiConversations) {
if (listHashCode != uiConversations.hashCode()) {
listHashCode = uiConversations.hashCode();
((MainConversationListAdapter) mAdapter).onFinish();
}
}
});
mConversationListViewModel.getRefreshEventLiveData().observe(this.getViewLifecycleOwner(), new Observer<Event.RefreshEvent>() {
@Override
public void onChanged(Event.RefreshEvent refreshEvent) {
listHashCode = 0;
}
});
}
public void setEmptyView(int viewLayoutMsgId) { public void setEmptyView(int viewLayoutMsgId) {
super.setEmptyView(viewLayoutMsgId); super.setEmptyView(viewLayoutMsgId);
} }
public void setEmptyView(View view){
public void setEmptyView(View view) {
super.setEmptyView(view); super.setEmptyView(view);
} }
public void search(String search) { public void search(String search) {
((MainConversationListAdapter)mAdapter).setSearch(); ((MainConversationListAdapter) mAdapter).setSearch();
getContactsList(search); getContactsList(search);
} }
public MainConversationListAdapter getAdapter() {
return (MainConversationListAdapter) mAdapter;
}
private void getContactsList(String search) { private void getContactsList(String search) {
List<BaseUiConversation> list = new ArrayList<>(); List<BaseUiConversation> list = new ArrayList<>();
List<String> uidList = new ArrayList<>();
BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation()); BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_contacts)); conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_contacts));
@ -58,6 +96,8 @@ public class MainMessageChatFragment extends ConversationListFragment {
for (BaseUiConversation cn : ((MainConversationListAdapter) mAdapter).getSrcList()) { for (BaseUiConversation cn : ((MainConversationListAdapter) mAdapter).getSrcList()) {
System.err.println(" ----------------------->" + cn.mCore.getConversationTitle() + "|" + cn.mCore.getSenderUserName()); System.err.println(" ----------------------->" + cn.mCore.getConversationTitle() + "|" + cn.mCore.getSenderUserName());
if (StringUtil.isEmpty(cn.mCore.getConversationTitle())) continue; if (StringUtil.isEmpty(cn.mCore.getConversationTitle())) continue;
if (uidList.contains(cn.mCore.getTargetId())) continue;
uidList.add(cn.mCore.getTargetId());
if (cn.mCore.getConversationTitle().contains(search)) { if (cn.mCore.getConversationTitle().contains(search)) {
conversation = new SingleConversation(getContext(), new Conversation()); conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_USER" + search); conversation.mCore.setObjectName("SEARCH_USER" + search);
@ -121,8 +161,12 @@ public class MainMessageChatFragment extends ConversationListFragment {
} }
public void onChatList() { public void onChatList() {
((MainConversationListAdapter)mAdapter).setChat(); if(mConversationListViewModel==null)return;
((MainConversationListAdapter) mAdapter).setChat();
((MainConversationListAdapter) mAdapter).clear();
System.out.println(">!>!>!>!!>"+mConversationListViewModel);
subscribeUi(); subscribeUi();
} }
@Override @Override

View File

@ -0,0 +1,92 @@
package com.yunbao.main.fragment;
import android.content.Context;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentTransaction;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.live.R;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
public class MainMessageChatListFragment extends AbsMainMessageChatListFragment {
private static final String TAG = "MainMessageChatListFragment";
private Context mContext;
public MainMessageChatListFragment() {
this.mContext = AppManager.getInstance().getMainActivity();
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_main_message_chat_list, container, false);
}
MainMessageChatFragment conversationListFragment;
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
Log.i(TAG, "onViewCreated: 准备创建融云");
conversationListFragment = new MainMessageChatFragment();
setAdapter(conversationListFragment.getAdapter());
FragmentManager manager = ((FragmentActivity) mContext).getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationListFragment);
transaction.commit();
//自定义空数据背景View
//conversationListFragment.setEmptyView(emptyView);
conversationListFragment.setEmptyView(R.layout.view_layout_msg);
conversationListFragment.getAdapter().setOnRefreshListener(new OnRecyclerListRefreshListener<List<BaseUiConversation>>() {
@Override
public void onFinish(List<BaseUiConversation> baseUiConversations) {
loadLiveLookTime(baseUiConversations, new OnRecyclerListRefreshListener<Map<String, Integer>>() {
@Override
public void onFinish(Map<String, Integer> stringIntegerMap) {
conversationListFragment.getAdapter().setTimerMap(stringIntegerMap);
updateList();
}
});
}
});
}
public void onChatList() {
if (conversationListFragment == null) {
return;
}
ToastUtil.showDebug("清空");
conversationListFragment.onChatList();
}
public void search(String string) {
if (conversationListFragment == null) {
return;
}
conversationListFragment.search(string);
}
@Override
public void updateList() {
}
}

View File

@ -0,0 +1,346 @@
package com.yunbao.main.fragment;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.alibaba.fastjson.JSONArray;
import com.yunbao.common.bean.MessageChatUserBean;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.InstructorRemarkManager;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.main.R;
import com.yunbao.main.adapter.MainConversationListAdapter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.userinfo.RongUserInfoManager;
import io.rong.imkit.userinfo.UserDataProvider;
import io.rong.imkit.utils.RouteUtils;
import io.rong.imkit.widget.adapter.BaseAdapter;
import io.rong.imkit.widget.adapter.ViewHolder;
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imkit.widget.refresh.api.RefreshLayout;
import io.rong.imkit.widget.refresh.listener.OnLoadMoreListener;
import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
import io.rong.imkit.widget.refresh.wrapper.RongRefreshHeader;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.SearchConversationResult;
import io.rong.imlib.model.UserInfo;
public class MainMessageChatListSystemFragment extends AbsMainMessageChatListFragment {
private static final String TAG = "系统列表";
private List<String> needLoadInfo = new ArrayList<>();
public MainMessageChatListSystemFragment() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.rc_conversationlist_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
refreshLayout = view.findViewById(R.id.rc_refresh);
recyclerView = view.findViewById(R.id.rc_conversation_list);
refreshLayout.setNestedScrollingEnabled(false);
refreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext()));
refreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext()));
mAdapter = new MainConversationListAdapter(view.getContext());
mAdapter.setEmptyView(com.yunbao.live.R.layout.view_layout_msg);
mAdapter.setItemClickListener(new BaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, ViewHolder holder, int position) {
BaseUiConversation conversation = mAdapter.getSrcList().get(position);
RouteUtils.routeToConversationActivity(view.getContext(), Conversation.ConversationType.PRIVATE, conversation.mCore.getTargetId());
}
@Override
public boolean onItemLongClick(View view, ViewHolder holder, int position) {
return false;
}
});
mAdapter.setOnRefreshListener(new OnRecyclerListRefreshListener<List<BaseUiConversation>>() {
@Override
public void onFinish(List<BaseUiConversation> baseUiConversations) {
loadLiveLookTime(baseUiConversations, new OnRecyclerListRefreshListener<Map<String, Integer>>() {
@Override
public void onFinish(Map<String, Integer> stringIntegerMap) {
mAdapter.setTimerMap(stringIntegerMap);
}
});
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL, false));
recyclerView.setAdapter(mAdapter);
initRefresh();
init();
}
private void initRefresh() {
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
Log.i(TAG, "onLoadMore: 加载更多");
checkList();
}
});
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
Log.i(TAG, "onRefresh: 刷新");
init();
}
});
}
private synchronized void checkList() {
System.out.println("needLoadInfo = " + needLoadInfo.size());
if (needLoadInfo.size() < 20) {
getUserInfo(needLoadInfo);
refreshLayout.setEnableLoadMore(false);
} else {
List<String> tmp = new ArrayList<>();
System.out.println("tmp.size() = " + tmp.size());
for (int i = 0; i < 20; i++) {
tmp.add(needLoadInfo.get(i));
}
needLoadInfo.subList(0, 20).clear();
System.out.println("tmp.size() = " + tmp.size());
getUserInfo(tmp);
refreshLayout.setEnableLoadMore(true);
}
}
@Override
public void onChatList() {
if(mAdapter==null) return;
mAdapter.setChat();
init();
}
@Override
public void search(String search) {
mAdapter.setSearch();
getContactsList(search);
}
private void getContactsList(String search) {
List<BaseUiConversation> list = new ArrayList<>();
BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_contacts));
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
list.add(conversation);
List<BaseUiConversation> data = new ArrayList<>();
System.err.println(" ----------------------->" + mAdapter.getData().size());
for (BaseUiConversation cn : ((MainConversationListAdapter) mAdapter).getSrcList()) {
if (StringUtil.isEmpty(cn.mCore.getConversationTitle())) continue;
System.err.println(" ----------------------->" + cn.mCore.getConversationTitle() + "|" + cn.mCore.getTargetId());
if (cn.mCore.getConversationTitle().contains(search)) {
conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_USER" + search);
conversation.mCore.setConversationTitle(cn.mCore.getConversationTitle());
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
conversation.mCore.setPortraitUrl(cn.mCore.getPortraitUrl());
conversation.mCore.setTargetId(cn.mCore.getTargetId());
conversation.mCore.setSenderUserId(cn.mCore.getSenderUserId());
data.add(conversation);
}
}
if (data.size() == 1) {
data.get(0).mCore.setMentionedCount(3);
} else if (data.size() != 0) {
data.get(0).mCore.setMentionedCount(1);
data.get(data.size() - 1).mCore.setMentionedCount(2);
} else {
list.remove(list.size() - 1);
}
list.addAll(data);
getChatRecordList(list, search);
}
private void getChatRecordList(List<BaseUiConversation> list, String search) {
Conversation.ConversationType[] conversationTypes = {Conversation.ConversationType.PRIVATE};
String[] messageTypeObjectNames = {"RC:TxtMsg"};
RongIMClient.getInstance().searchConversations(search, conversationTypes, messageTypeObjectNames, new RongIMClient.ResultCallback<List<SearchConversationResult>>() {
@Override
public void onSuccess(List<SearchConversationResult> searchConversationResults) {
BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_chat_records));
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
list.add(conversation);
List<BaseUiConversation> data = new ArrayList<>();
for (SearchConversationResult result : searchConversationResults) {
BaseUiConversation cn = new SingleConversation(getContext(), result.getConversation());
cn.mCore.setObjectName("SEARCH_CHAT" + search);
data.add(cn);
}
if (data.size() == 1) {
data.get(0).mCore.setMentionedCount(3);
} else if (data.size() != 0) {
data.get(0).mCore.setMentionedCount(1);
data.get(data.size() - 1).mCore.setMentionedCount(2);
} else {
list.remove(list.size() - 1);
}
list.addAll(data);
mAdapter.setDataCollection(list);
}
@Override
public void onError(RongIMClient.ErrorCode e) {
ToastUtil.show("搜索出错了:" + e.getMessage());
mAdapter.setDataCollection(list);
}
});
}
@Override
public void updateList() {
init();
}
private void getUserInfo(List<String> uidList) {
String uids = String.join(",", uidList);
LiveNetManager.get(getContext())
.getOtherList(uids, new HttpCallback<List<MessageChatUserBean>>() {
@Override
public void onSuccess(List<MessageChatUserBean> data) {
List<BaseUiConversation> list = new ArrayList<>();
for (MessageChatUserBean datum : data) {
Conversation conversation = new Conversation();
BaseUiConversation baseUiConversation = new SingleConversation(getContext(), conversation);
baseUiConversation.mCore.setTargetId(datum.getId());
baseUiConversation.mCore.setSenderUserId(IMLoginManager.get(getContext()).getUserInfo().getId() + "");
baseUiConversation.mCore.setSentStatus(Message.SentStatus.CANCELED);
baseUiConversation.mCore.setSentTime(-1);
baseUiConversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
baseUiConversation.mCore.setPortraitUrl(datum.getAvatar());
String remark = InstructorRemarkManager.get(getContext()).getInstructorRemark().get(datum.getId());
baseUiConversation.mCore.setConversationTitle(StringUtil.isEmpty(remark) ? datum.getUserNiceName() : remark);
list.add(baseUiConversation);
UserInfo userInfo = new UserInfo(baseUiConversation.mCore.getTargetId(),
baseUiConversation.mCore.getConversationTitle(),
Uri.parse(baseUiConversation.mCore.getPortraitUrl()));
RongUserInfoManager.getInstance().refreshUserInfoCache(userInfo);
}
if (!list.isEmpty()) {
List<BaseUiConversation> srcList = new ArrayList<>(mAdapter.getSrcList());
srcList.addAll(list);
Log.i(TAG, "onSuccess: 增加用户数:" + list.size() + "||总用户数:" + srcList.size());
for (BaseUiConversation conversation : srcList) {
Log.i(TAG, "onSuccess: 用户id:" + conversation.mCore.getTargetId() + "||用户名:" + conversation.mCore.getConversationTitle() + "||用户头像:" + conversation.mCore.getPortraitUrl());
}
int position = 0;
try {
position = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
} catch (Exception e) {
}
mAdapter.setDataCollection(srcList);
mAdapter.onFinish();
recyclerView.scrollToPosition(position);
}
onRefreshFinished();
onLoadMoreFinished();
}
@Override
public void onError(String error) {
onLoadMoreFinished();
onRefreshFinished();
}
});
}
private void init() {
LiveNetManager.get(getContext())
.getRelation("1", new HttpCallback<List<String>>() {
@Override
public void onSuccess(List<String> data) {
if (!data.isEmpty()) {
getRongList(data);
} else {
onRefreshFinished();
}
}
@Override
public void onError(String error) {
onRefreshFinished();
}
});
}
public void getRongList(List<String> uidList) {
RongIMClient.getInstance().getConversationList(new RongIMClient.ResultCallback<List<Conversation>>() {
@Override
public void onSuccess(List<Conversation> conversations) {
List<BaseUiConversation> list = new ArrayList<>();
needLoadInfo = new ArrayList<>(uidList);
Log.i(TAG, "融云列表:" + conversations.size());
for (Conversation conversation : conversations) {
Log.i(TAG, "融云匹配:" + conversation.getTargetId());
if (uidList.contains(conversation.getTargetId())) {
BaseUiConversation _conversation = new SingleConversation(getContext(), conversation);
list.add(_conversation);
needLoadInfo.remove(conversation.getTargetId());
}
}
Log.i(TAG, "成功匹配数:" + list.size());
refreshLayout.setEnableLoadMore(!needLoadInfo.isEmpty());
int position = 0;
try {
position = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
} catch (Exception e) {
}
mAdapter.clear();
mAdapter.setDataCollection(list);
recyclerView.scrollToPosition(position);
if (!needLoadInfo.isEmpty()) {
checkList();
} else {
onRefreshFinished();
mAdapter.onFinish();
}
}
@Override
public void onError(RongIMClient.ErrorCode e) {
Log.i(TAG, "onError: 匹配失败:" + e.getMessage());
}
});
}
}

View File

@ -0,0 +1,330 @@
package com.yunbao.main.fragment;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import com.yunbao.common.bean.MessageChatUserBean;
import com.yunbao.common.http.base.HttpCallback;
import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.interfaces.OnRecyclerListRefreshListener;
import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.WordUtil;
import com.yunbao.main.R;
import com.yunbao.main.adapter.MainConversationListAdapter;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import io.rong.imkit.conversationlist.model.BaseUiConversation;
import io.rong.imkit.conversationlist.model.SingleConversation;
import io.rong.imkit.userinfo.RongUserInfoManager;
import io.rong.imkit.utils.RouteUtils;
import io.rong.imkit.widget.adapter.BaseAdapter;
import io.rong.imkit.widget.adapter.ViewHolder;
import io.rong.imkit.widget.refresh.SmartRefreshLayout;
import io.rong.imkit.widget.refresh.api.RefreshLayout;
import io.rong.imkit.widget.refresh.listener.OnLoadMoreListener;
import io.rong.imkit.widget.refresh.listener.OnRefreshListener;
import io.rong.imkit.widget.refresh.wrapper.RongRefreshHeader;
import io.rong.imlib.RongIMClient;
import io.rong.imlib.model.Conversation;
import io.rong.imlib.model.Message;
import io.rong.imlib.model.SearchConversationResult;
import io.rong.imlib.model.UserInfo;
public class MainMessageChatListUserFragment extends AbsMainMessageChatListFragment {
private static final String TAG = "系统列表";
private List<String> needLoadInfo = new ArrayList<>();
public MainMessageChatListUserFragment() {
}
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.rc_conversationlist_fragment, container, false);
}
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
recyclerView = view.findViewById(R.id.rc_conversation_list);
refreshLayout = view.findViewById(R.id.rc_refresh);
refreshLayout.setNestedScrollingEnabled(false);
refreshLayout.setRefreshHeader(new RongRefreshHeader(this.getContext()));
refreshLayout.setRefreshFooter(new RongRefreshHeader(this.getContext()));
mAdapter = new MainConversationListAdapter(view.getContext());
mAdapter.setEmptyView(com.yunbao.live.R.layout.view_layout_msg);
mAdapter.setOnRefreshListener(new OnRecyclerListRefreshListener<List<BaseUiConversation>>() {
@Override
public void onFinish(List<BaseUiConversation> baseUiConversations) {
loadLiveLookTime(baseUiConversations, new OnRecyclerListRefreshListener<Map<String, Integer>>() {
@Override
public void onFinish(Map<String, Integer> stringIntegerMap) {
mAdapter.setTimerMap(stringIntegerMap);
}
});
}
});
mAdapter.setItemClickListener(new BaseAdapter.OnItemClickListener() {
@Override
public void onItemClick(View view, ViewHolder holder, int position) {
BaseUiConversation conversation = mAdapter.getSrcList().get(position);
RouteUtils.routeToConversationActivity(view.getContext(), Conversation.ConversationType.PRIVATE, conversation.mCore.getTargetId());
}
@Override
public boolean onItemLongClick(View view, ViewHolder holder, int position) {
return false;
}
});
recyclerView.setLayoutManager(new LinearLayoutManager(view.getContext(), LinearLayoutManager.VERTICAL, false));
recyclerView.setAdapter(mAdapter);
initRefresh();
init();
}
private void initRefresh() {
refreshLayout.setOnLoadMoreListener(new OnLoadMoreListener() {
@Override
public void onLoadMore(@NonNull RefreshLayout refreshLayout) {
checkList();
}
});
refreshLayout.setOnRefreshListener(new OnRefreshListener() {
@Override
public void onRefresh(@NonNull RefreshLayout refreshLayout) {
init();
}
});
}
private void checkList() {
if (needLoadInfo.size() < 20) {
getUserInfo(needLoadInfo);
refreshLayout.setEnableLoadMore(false);
} else {
List<String> tmp = needLoadInfo.subList(0, 20);
needLoadInfo.subList(0, 20).clear();
getUserInfo(tmp);
refreshLayout.setEnableLoadMore(true);
}
}
@Override
public void onChatList() {
if(mAdapter==null) return;
mAdapter.setChat();
init();
}
@Override
public void search(String search) {
mAdapter.setSearch();
getContactsList(search);
}
private void getContactsList(String search) {
List<BaseUiConversation> list = new ArrayList<>();
List<String> uidList=new ArrayList<>();
BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_contacts));
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
list.add(conversation);
List<BaseUiConversation> data = new ArrayList<>();
System.err.println(" ----------------------->" + mAdapter.getData().size());
for (BaseUiConversation cn : ((MainConversationListAdapter) mAdapter).getSrcList()) {
System.err.println(" ----------------------->" + cn.mCore.getConversationTitle() + "|" + cn.mCore.getSenderUserName());
if (StringUtil.isEmpty(cn.mCore.getConversationTitle())) continue;
if(uidList.contains(cn.mCore.getTargetId())) continue;
uidList.add(cn.mCore.getTargetId());
if (cn.mCore.getConversationTitle().contains(search)) {
conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_USER" + search);
conversation.mCore.setConversationTitle(cn.mCore.getConversationTitle());
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
conversation.mCore.setPortraitUrl(cn.mCore.getPortraitUrl());
conversation.mCore.setTargetId(cn.mCore.getTargetId());
conversation.mCore.setSenderUserId(cn.mCore.getSenderUserId());
data.add(conversation);
}
}
if (data.size() == 1) {
data.get(0).mCore.setMentionedCount(3);
} else if (data.size() != 0) {
data.get(0).mCore.setMentionedCount(1);
data.get(data.size() - 1).mCore.setMentionedCount(2);
} else {
list.remove(list.size() - 1);
}
list.addAll(data);
getChatRecordList(list, search);
}
private void getChatRecordList(List<BaseUiConversation> list, String search) {
Conversation.ConversationType[] conversationTypes = {Conversation.ConversationType.PRIVATE};
String[] messageTypeObjectNames = {"RC:TxtMsg"};
RongIMClient.getInstance().searchConversations(search, conversationTypes, messageTypeObjectNames, new RongIMClient.ResultCallback<List<SearchConversationResult>>() {
@Override
public void onSuccess(List<SearchConversationResult> searchConversationResults) {
BaseUiConversation conversation = new SingleConversation(getContext(), new Conversation());
conversation.mCore.setObjectName("SEARCH_TITLE" + WordUtil.getNewString(R.string.activity_msg_list_title_chat_records));
conversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
list.add(conversation);
List<BaseUiConversation> data = new ArrayList<>();
for (SearchConversationResult result : searchConversationResults) {
BaseUiConversation cn = new SingleConversation(getContext(), result.getConversation());
cn.mCore.setObjectName("SEARCH_CHAT" + search);
data.add(cn);
}
if (data.size() == 1) {
data.get(0).mCore.setMentionedCount(3);
} else if (data.size() != 0) {
data.get(0).mCore.setMentionedCount(1);
data.get(data.size() - 1).mCore.setMentionedCount(2);
} else {
list.remove(list.size() - 1);
}
list.addAll(data);
mAdapter.setDataCollection(list);
}
@Override
public void onError(RongIMClient.ErrorCode e) {
ToastUtil.show("搜索出错了:" + e.getMessage());
mAdapter.setDataCollection(list);
}
});
}
@Override
public void updateList() {
init();
}
private void getUserInfo(List<String> uidList) {
String uids = String.join(",", uidList);
LiveNetManager.get(getContext())
.getOtherList(uids, new HttpCallback<List<MessageChatUserBean>>() {
@Override
public void onSuccess(List<MessageChatUserBean> data) {
List<BaseUiConversation> list = new ArrayList<>();
for (MessageChatUserBean datum : data) {
Conversation conversation = new Conversation();
BaseUiConversation baseUiConversation = new SingleConversation(getContext(), conversation);
baseUiConversation.mCore.setTargetId(datum.getId());
baseUiConversation.mCore.setSenderUserId(IMLoginManager.get(getContext()).getUserInfo().getId() + "");
baseUiConversation.mCore.setSentStatus(Message.SentStatus.CANCELED);
baseUiConversation.mCore.setSentTime(-1);
baseUiConversation.mCore.setConversationType(Conversation.ConversationType.PRIVATE);
baseUiConversation.mCore.setPortraitUrl(datum.getAvatar());
baseUiConversation.mCore.setConversationTitle(datum.getUserNiceName());
list.add(baseUiConversation);
UserInfo userInfo = new UserInfo(baseUiConversation.mCore.getTargetId(),
baseUiConversation.mCore.getConversationTitle(),
Uri.parse(baseUiConversation.mCore.getPortraitUrl()));
RongUserInfoManager.getInstance().refreshUserInfoCache(userInfo);
}
if (!list.isEmpty()) {
List<BaseUiConversation> srcList = new ArrayList<>(mAdapter.getSrcList());
srcList.addAll(list);
Log.i(TAG, "onSuccess: 增加用户数:" + list.size() + "||总用户数:" + srcList.size());
int position = 0;
try {
position = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
} catch (Exception e) {
}
mAdapter.setDataCollection(srcList);
mAdapter.onFinish();
recyclerView.scrollToPosition(position);
}
onRefreshFinished();
onLoadMoreFinished();
}
@Override
public void onError(String error) {
}
});
}
private void init() {
LiveNetManager.get(getContext())
.getRelation("2", new HttpCallback<List<String>>() {
@Override
public void onSuccess(List<String> data) {
if (!data.isEmpty()) {
getRongList(data);
} else {
onRefreshFinished();
}
}
@Override
public void onError(String error) {
onRefreshFinished();
}
});
}
public void getRongList(List<String> uidList) {
RongIMClient.getInstance().getConversationList(new RongIMClient.ResultCallback<List<Conversation>>() {
@Override
public void onSuccess(List<Conversation> conversations) {
List<BaseUiConversation> list = new ArrayList<>();
needLoadInfo = new ArrayList<>(uidList);
Log.i(TAG, "融云列表:" + conversations.size());
for (Conversation conversation : conversations) {
Log.i(TAG, "融云匹配:" + conversation.getTargetId());
if (uidList.contains(conversation.getTargetId())) {
BaseUiConversation _conversation = new SingleConversation(getContext(), conversation);
list.add(_conversation);
needLoadInfo.remove(conversation.getTargetId());
}
}
Log.i(TAG, "成功匹配数:" + list.size());
refreshLayout.setEnableLoadMore(!needLoadInfo.isEmpty());
int position = 0;
try {
position = ((LinearLayoutManager) recyclerView.getLayoutManager()).findFirstVisibleItemPosition();
} catch (Exception e) {
}
mAdapter.clear();
mAdapter.setDataCollection(list);
recyclerView.scrollToPosition(position);
if (!needLoadInfo.isEmpty()) {
checkList();
} else {
onRefreshFinished();
mAdapter.onFinish();
}
}
@Override
public void onError(RongIMClient.ErrorCode e) {
Log.i(TAG, "onError: 匹配失败:" + e.getMessage());
}
});
}
}

View File

@ -42,7 +42,9 @@ import com.yunbao.main.utils.PDSightMessageItemProvider;
import com.yunbao.main.views.MessageChatExtensionConfig; import com.yunbao.main.views.MessageChatExtensionConfig;
import java.util.Arrays; import java.util.Arrays;
import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import io.rong.imkit.IMCenter; import io.rong.imkit.IMCenter;
import io.rong.imkit.RongIM; import io.rong.imkit.RongIM;
@ -71,6 +73,7 @@ public class ConversationIMListManager {
private String targetId; private String targetId;
private String topContent; private String topContent;
private Handler conversationIMListHandler = new Handler(); private Handler conversationIMListHandler = new Handler();
private Map<String, SearchUserBean> userCache = new HashMap<>();
private ConversationIMListManager(Context context) { private ConversationIMListManager(Context context) {
mContext = context; mContext = context;
@ -151,39 +154,37 @@ public class ConversationIMListManager {
} }
public void clearUserCache() {
userCache.clear();
}
/** /**
* 刷新用户信息(异步) * 刷新用户信息(异步)
*/ */
public void addUserInfoProvider() { public void addUserInfoProvider() {
Log.i("刷新用户", "addUserInfoProvider: 准备刷新用户信息");
RongUserInfoManager.getInstance().setUserInfoProvider(userId -> { RongUserInfoManager.getInstance().setUserInfoProvider(userId -> {
Log.i("刷新用户", "1>" + userId); Log.i("刷新用户99", "1>" + userId);
/*if (userCache.get(userId) != null) {
return buildUser(userId, userCache.get(userId));
}*/
if (TextUtils.equals("__system__", userId)) {
return null;
}
CommonHttpUtil.getUserBaseinfo(userId, new HttpCallback() { CommonHttpUtil.getUserBaseinfo(userId, new HttpCallback() {
@Override @Override
public void onSuccess(int code, String msg, String[] info) { public void onSuccess(int code, String msg, String[] info) {
if (code == 0 && info.length > 0 && !TextUtils.equals("__system__", userId)) { if (code == 0 && info.length > 0 && !TextUtils.equals("__system__", userId)) {
JSONObject obj = JSON.parseObject(info[0]); JSONObject obj = JSON.parseObject(info[0]);
SearchUserBean userBean = JSON.toJavaObject(obj, SearchUserBean.class); SearchUserBean userBean = JSON.toJavaObject(obj, SearchUserBean.class);
Log.i("刷新用户2", "2>" + userBean.getId() + "|" + userId + "|" + userBean.getAvatar()); userCache.put(userId, userBean);
String userNiceName = ""; UserInfo userInfo = buildUser(userId, userBean);
String remark = InstructorRemarkManager.get(mContext).getInstructorRemark().get(userId); RongUserInfoManager.getInstance().refreshUserInfoCache(userInfo);
if (!TextUtils.isEmpty(remark)) { if (userInfo != null && TextUtils.equals(userBean.getIs_admin(), "1")) {
userNiceName = remark; setConversationToTop(userInfo.getUserId());
} else {
userNiceName = userBean.getUserNiceName();
} }
if (!TextUtils.isEmpty(userNiceName) && !TextUtils.isEmpty(userBean.getAvatar())) {
UserInfo userInfo = new UserInfo(userId, userNiceName, Uri.parse(userBean.getAvatar()));
//使用空白字段存储自己服务器用户的所有的信息
userInfo.setExtra(GsonUtils.toJson(userBean));
RongUserInfoManager.getInstance().refreshUserInfoCache(userInfo);
if (TextUtils.equals(userBean.getIs_admin(), "1")) {
setConversationToTop(userInfo.getUserId());
}
}
} else { } else {
Log.i("刷新用户", "3>" + code + "|" + msg + "|" + info.length); Log.i("刷新用户", "3>" + code + "|" + msg + "|" + info.length + "|" + userId);
} }
} }
@ -194,6 +195,27 @@ public class ConversationIMListManager {
} }
private UserInfo buildUser(String userId, SearchUserBean userBean) {
if (userBean == null) {
return null;
}
Log.i("刷新用户2", "2>" + userBean.getId() + "|" + userId + "|" + userBean.getAvatar());
String userNiceName = "";
String remark = InstructorRemarkManager.get(mContext).getInstructorRemark().get(userId);
if (!TextUtils.isEmpty(remark)) {
userNiceName = remark;
} else {
userNiceName = userBean.getUserNiceName();
}
if (!TextUtils.isEmpty(userNiceName) && !TextUtils.isEmpty(userBean.getAvatar())) {
UserInfo userInfo = new UserInfo(userId, userNiceName, Uri.parse(userBean.getAvatar()));
//使用空白字段存储自己服务器用户的所有的信息
userInfo.setExtra(GsonUtils.toJson(userBean));
return userInfo;
}
return null;
}
private String mUserId; private String mUserId;
/** /**

View File

@ -71,7 +71,7 @@ public class PDLiveCustomConversationProvider extends BaseConversationProvider {
String cn = WordUtil.getChineseString(def); String cn = WordUtil.getChineseString(def);
String en = WordUtil.getEnglishString(def); String en = WordUtil.getEnglishString(def);
String content = uiConversation.mConversationContent.toString(); String content = uiConversation.mConversationContent.toString();
Log.i("列表----", "bindViewHolder: " + str + " | " + uiConversation.mConversationContent+" | "+WordUtil.isNewZh()); Log.i("列表----", "bindViewHolder: " + str + " | " + uiConversation.mConversationContent + " | " + WordUtil.isNewZh());
if (WordUtil.isNewZh()) { if (WordUtil.isNewZh()) {
if (en.equals(content)) { if (en.equals(content)) {
uiConversation.mConversationContent = new SpannableString(WordUtil.getNewString(def)); uiConversation.mConversationContent = new SpannableString(WordUtil.getNewString(def));
@ -114,9 +114,13 @@ public class PDLiveCustomConversationProvider extends BaseConversationProvider {
} }
//设置时间 //设置时间
String date = new SimpleDateFormat("HH:mm", Locale.getDefault()).format(new Date(uiConversation.mCore.getSentTime())); if (uiConversation.mCore.getSentTime() > 0) {
date = DateFormatUtil.getDateTimeString(uiConversation.mCore.getSentTime(), true, holder.getContext()); String date = new SimpleDateFormat("HH:mm", Locale.getDefault()).format(new Date(uiConversation.mCore.getSentTime()));
holder.setText(R.id.rc_conversation_date, date); date = DateFormatUtil.getDateTimeString(uiConversation.mCore.getSentTime(), true, holder.getContext());
holder.setText(R.id.rc_conversation_date, date);
} else {
holder.getView(R.id.rc_conversation_date).setVisibility(View.GONE);
}
holder.getView(R.id.rc_conversation_portrait).setOnClickListener(view -> { holder.getView(R.id.rc_conversation_portrait).setOnClickListener(view -> {
RouteUtil.forwardUserHome(targetId); RouteUtil.forwardUserHome(targetId);
}); });

View File

@ -320,9 +320,7 @@ public class MainMeViewHolder extends AbsMainViewHolder implements OnItemClickLi
} }
String singnature = u.getSignature(); String singnature = u.getSignature();
if (TextUtils.equals(singnature, "這個人很懶,什麼也沒留下") || TextUtils.equals(singnature, "这家伙很懒,什么都没留下") || TextUtils.isEmpty(singnature)) { if (TextUtils.equals(singnature, "這個人很懶,什麼也沒留下") || TextUtils.equals(singnature, "这家伙很懒,什么都没留下") || TextUtils.isEmpty(singnature)) {
String ct = Locale.getDefault().getCountry(); if (WordUtil.isNewZh()) {
ct = TextUtils.equals("CN", ct) ? "HK" : ct;
if (TextUtils.equals(ct, "CN")) {
singnature = "這個人很懶,什麼也沒留下"; singnature = "這個人很懶,什麼也沒留下";
} else { } else {
singnature = "The guy was lazy and didn't write anything."; singnature = "The guy was lazy and didn't write anything.";

View File

@ -1,24 +1,30 @@
package com.yunbao.main.views; package com.yunbao.main.views;
import android.app.Activity; import android.app.Activity;
import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.graphics.Color;
import android.os.Handler; import android.os.Handler;
import android.text.Editable; import android.text.Editable;
import android.text.InputFilter;
import android.text.Spanned;
import android.text.TextUtils; import android.text.TextUtils;
import android.text.TextWatcher; import android.text.TextWatcher;
import android.util.Log; import android.util.Log;
import android.util.TypedValue; import android.util.TypedValue;
import android.view.KeyEvent;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.EditText; import android.widget.EditText;
import android.widget.FrameLayout;
import android.widget.ImageView; import android.widget.ImageView;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.TextView; import android.widget.TextView;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
import androidx.fragment.app.FragmentManager; import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.fragment.app.FragmentTransaction; import androidx.viewpager2.widget.ViewPager2;
import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSON;
import com.binioter.guideview.Guide; import com.binioter.guideview.Guide;
@ -29,6 +35,11 @@ import com.opensource.svgaplayer.SVGADrawable;
import com.opensource.svgaplayer.SVGAImageView; import com.opensource.svgaplayer.SVGAImageView;
import com.opensource.svgaplayer.SVGAParser; import com.opensource.svgaplayer.SVGAParser;
import com.opensource.svgaplayer.SVGAVideoEntity; import com.opensource.svgaplayer.SVGAVideoEntity;
import com.yunbao.common.CommonAppConfig;
import com.yunbao.common.dialog.DebugDialog;
import com.yunbao.common.manager.base.ACache;
import com.yunbao.common.utils.DateFormatUtil;
import com.yunbao.common.utils.DpUtil;
import com.yunbao.common.utils.MobclickAgent; import com.yunbao.common.utils.MobclickAgent;
import com.yunbao.common.bean.ImUserInfoModel; import com.yunbao.common.bean.ImUserInfoModel;
import com.yunbao.common.bean.LiveBean; import com.yunbao.common.bean.LiveBean;
@ -37,7 +48,6 @@ import com.yunbao.common.http.HttpCallback;
import com.yunbao.common.http.LiveHttpUtil; import com.yunbao.common.http.LiveHttpUtil;
import com.yunbao.common.http.live.LiveNetManager; import com.yunbao.common.http.live.LiveNetManager;
import com.yunbao.common.manager.IMLoginManager; import com.yunbao.common.manager.IMLoginManager;
import com.yunbao.common.manager.NoviceInstructorManager;
import com.yunbao.common.manager.imrongcloud.MessageIMManager; import com.yunbao.common.manager.imrongcloud.MessageIMManager;
import com.yunbao.common.utils.AppManager; import com.yunbao.common.utils.AppManager;
import com.yunbao.common.utils.DeviceUtils; import com.yunbao.common.utils.DeviceUtils;
@ -46,6 +56,7 @@ import com.yunbao.common.utils.RouteUtil;
import com.yunbao.common.utils.SVGAViewUtils; import com.yunbao.common.utils.SVGAViewUtils;
import com.yunbao.common.utils.StringUtil; import com.yunbao.common.utils.StringUtil;
import com.yunbao.common.utils.ToastUtil; import com.yunbao.common.utils.ToastUtil;
import com.yunbao.common.utils.ViewPageIndicatorUtils;
import com.yunbao.common.utils.WordUtil; import com.yunbao.common.utils.WordUtil;
import com.yunbao.common.views.AbsMainViewHolder; import com.yunbao.common.views.AbsMainViewHolder;
import com.yunbao.common.views.weight.ViewClicksAntiShake; import com.yunbao.common.views.weight.ViewClicksAntiShake;
@ -57,15 +68,28 @@ import com.yunbao.main.R;
import com.yunbao.main.activity.MainActivity; import com.yunbao.main.activity.MainActivity;
import com.yunbao.main.adapter.SystemMessageAdapter; import com.yunbao.main.adapter.SystemMessageAdapter;
import com.yunbao.main.dialog.MsgMoreDialog; import com.yunbao.main.dialog.MsgMoreDialog;
import com.yunbao.main.fragment.MainMessageChatFragment; import com.yunbao.main.fragment.AbsMainMessageChatListFragment;
import com.yunbao.main.fragment.MainMessageChatListFragment;
import com.yunbao.main.fragment.MainMessageChatListSystemFragment;
import com.yunbao.main.fragment.MainMessageChatListUserFragment;
import com.yunbao.main.manager.imrongcloud.ConversationIMListManager; import com.yunbao.main.manager.imrongcloud.ConversationIMListManager;
import net.lucode.hackware.magicindicator.MagicIndicator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerIndicator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerTitleView;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView;
import net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.SimplePagerTitleView;
import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode; import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date;
import java.util.List; import java.util.List;
@ -74,8 +98,7 @@ import java.util.List;
*/ */
public class MainMessageViewHolder extends AbsMainViewHolder { public class MainMessageViewHolder extends AbsMainViewHolder {
private MainMessageChatFragment conversationListFragment; private static final String TAG = "消息中心";
private FrameLayout container;
private SystemMessageAdapter messageAdapter; private SystemMessageAdapter messageAdapter;
private TextView textNewsNotice, textNewsInteraction, textNewsOnline, textSystemMessages; private TextView textNewsNotice, textNewsInteraction, textNewsOnline, textSystemMessages;
private String type = null; private String type = null;
@ -90,6 +113,10 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
XPopup.Builder moreXPopup; XPopup.Builder moreXPopup;
private String homeZdyPop; private String homeZdyPop;
private ViewPager2 viewPager;
private MagicIndicator mIndicator;
private List<AbsMainMessageChatListFragment> fragmentList;
public MainMessageViewHolder setHomeZdyPop(String homeZdyPop) { public MainMessageViewHolder setHomeZdyPop(String homeZdyPop) {
this.homeZdyPop = homeZdyPop; this.homeZdyPop = homeZdyPop;
if (TextUtils.equals(homeZdyPop, "1")) { if (TextUtils.equals(homeZdyPop, "1")) {
@ -121,7 +148,6 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
public void init() { public void init() {
EventBus.getDefault().register(this); EventBus.getDefault().register(this);
//菜单 //菜单
container = (FrameLayout) findViewById(R.id.container);
textNewsNotice = (TextView) findViewById(R.id.text_news_notice); textNewsNotice = (TextView) findViewById(R.id.text_news_notice);
textNewsInteraction = (TextView) findViewById(R.id.text_news_interaction); textNewsInteraction = (TextView) findViewById(R.id.text_news_interaction);
textNewsOnline = (TextView) findViewById(R.id.text_news_online); textNewsOnline = (TextView) findViewById(R.id.text_news_online);
@ -132,6 +158,8 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
imgNewsInteraction = (ImageView) findViewById(R.id.img_news_interaction); imgNewsInteraction = (ImageView) findViewById(R.id.img_news_interaction);
imgSystemMessages = (ImageView) findViewById(R.id.img_system_messages); imgSystemMessages = (ImageView) findViewById(R.id.img_system_messages);
imgNewsOnline = (ImageView) findViewById(R.id.img_news_online); imgNewsOnline = (ImageView) findViewById(R.id.img_news_online);
mIndicator = (MagicIndicator) findViewById(R.id.indicator);
viewPager = findViewById(R.id.viewPager);
contacts = findViewById(R.id.news_icon_contacts); contacts = findViewById(R.id.news_icon_contacts);
more = findViewById(R.id.news_icon_more); more = findViewById(R.id.news_icon_more);
search = findViewById(R.id.search); search = findViewById(R.id.search);
@ -141,6 +169,12 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
// mContext.startActivity(new Intent(mContext, com.yunbao.main.activity.CompleteUserInfoActivity.class)); // mContext.startActivity(new Intent(mContext, com.yunbao.main.activity.CompleteUserInfoActivity.class));
// mContext.startActivity(new Intent(mContext, MessageHiConfigRecordActivity.class)); // mContext.startActivity(new Intent(mContext, MessageHiConfigRecordActivity.class));
}); });
search.setOnKeyListener(new View.OnKeyListener() {
@Override
public boolean onKey(View view, int i, KeyEvent keyEvent) {
return i == KeyEvent.KEYCODE_ENTER || i == KeyEvent.KEYCODE_NUMPAD_ENTER;
}
});
search.addTextChangedListener(new TextWatcher() { search.addTextChangedListener(new TextWatcher() {
@Override @Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
@ -153,11 +187,12 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
@Override @Override
public void afterTextChanged(Editable editable) { public void afterTextChanged(Editable editable) {
if (conversationListFragment == null) return; if (fragmentList.isEmpty()) return;
if (fragmentList.get(viewPager.getCurrentItem()) == null) return;
if (StringUtil.isEmpty(editable.toString())) { if (StringUtil.isEmpty(editable.toString())) {
conversationListFragment.onChatList(); fragmentList.get(viewPager.getCurrentItem()).onChatList();
} else { } else {
conversationListFragment.search(editable.toString()); fragmentList.get(viewPager.getCurrentItem()).search(editable.toString());
} }
} }
}); });
@ -166,6 +201,91 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
more.setOnClickListener(view -> { more.setOnClickListener(view -> {
moreXPopup.asCustom(new MsgMoreDialog(mContext)).show(); moreXPopup.asCustom(new MsgMoreDialog(mContext)).show();
}); });
initFragment();
initIndicator();
}
private void initFragment() {
fragmentList = new ArrayList<>();
fragmentList.add(new MainMessageChatListFragment());
fragmentList.add(new MainMessageChatListSystemFragment());
fragmentList.add(new MainMessageChatListUserFragment());
ToastUtil.showDebug("列表数量x" + fragmentList.size());
viewPager.setAdapter(new FragmentStateAdapter((FragmentActivity) AppManager.getInstance().getMainActivity()) {
@Override
public int getItemCount() {
Log.i(TAG, "viewpage 列表 getItemCount: " + fragmentList.size());
return fragmentList.size();
}
@NonNull
@Override
public Fragment createFragment(int i) {
Log.i(TAG, "createFragment: 创建fragment :" + i + " | " + fragmentList.get(i));
return fragmentList.get(i);
}
});
viewPager.setCurrentItem(0);
viewPager.setUserInputEnabled(false);
ConversationIMListManager.get(mContext).addUserInfoProvider();
}
private void initIndicator() {
final String[] titles = new String[]{
WordUtil.getNewString(R.string.message_chat_msg_all),
WordUtil.getNewString(R.string.message_chat_msg_system),
WordUtil.getNewString(R.string.message_chat_msg_user)
};
CommonNavigator commonNavigator = new CommonNavigator(AppManager.getInstance().getMainActivity());
commonNavigator.setAdjustMode(true);
commonNavigator.setAdapter(new CommonNavigatorAdapter() {
@Override
public int getCount() {
return titles.length;
}
@Override
public IPagerTitleView getTitleView(Context context, final int index) {
SimplePagerTitleView simplePagerTitleView = new ColorTransitionPagerTitleView(context);
simplePagerTitleView.setNormalColor(Color.parseColor("#777777"));
simplePagerTitleView.setSelectedColor(Color.parseColor("#333333"));
simplePagerTitleView.setText(titles[index]);
simplePagerTitleView.setTextSize(18);
simplePagerTitleView.getPaint().setFakeBoldText(true);
simplePagerTitleView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (viewPager != null) {
viewPager.setCurrentItem(index);
}
}
});
return simplePagerTitleView;
}
@Override
public IPagerIndicator getIndicator(Context context) {
LinePagerIndicator linePagerIndicator = new LinePagerIndicator(context);
linePagerIndicator.setMode(LinePagerIndicator.MODE_WRAP_CONTENT);
linePagerIndicator.setXOffset(DpUtil.dp2px(5));
linePagerIndicator.setRoundRadius(DpUtil.dp2px(2));
linePagerIndicator.setColors(Color.parseColor("#EB6FFF"), Color.parseColor("#FF83C6"));
return linePagerIndicator;
}
});
mIndicator.setNavigator(commonNavigator);
ViewPageIndicatorUtils.bind(mIndicator, viewPager, new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
super.onPageSelected(position);
search.setText("");
}
});
} }
@Override @Override
@ -227,32 +347,11 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
*/ */
private void initData() { private void initData() {
IMLoginManager.get(mContext).checkInstructor(); IMLoginManager.get(mContext).checkInstructor();
container.post(new Runnable() { netHandler.post(imUserInfoRunnable);
@Override //刷新列表内用户信息
public void run() { Log.i(TAG, "initData: 初始化数据");
netHandler.post(imUserInfoRunnable); //获取一下系统通知
if (IMLoginManager.get(mContext).hintChat()&&false) { MessageIMManager.get(mContext).getSystemMessages();
container.setVisibility(View.GONE);
ltNodataMsg.setVisibility(View.VISIBLE);
} else {
container.setVisibility(View.VISIBLE);
ltNodataMsg.setVisibility(View.GONE);
//展示会话列表
conversationListFragment = new MainMessageChatFragment();
FragmentManager manager = ((FragmentActivity) mContext).getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
transaction.replace(R.id.container, conversationListFragment);
transaction.commit();
//自定义空数据背景View
//conversationListFragment.setEmptyView(emptyView);
conversationListFragment.setEmptyView(R.layout.view_layout_msg);
//刷新列表内用户信息
ConversationIMListManager.get(mContext).addUserInfoProvider();
}
//获取一下系统通知
MessageIMManager.get(mContext).getSystemMessages();
}
});
LiveNetManager.get(mContext) LiveNetManager.get(mContext)
.getIsAnchor(new com.yunbao.common.http.base.HttpCallback<MessageChatIsAnchor>() { .getIsAnchor(new com.yunbao.common.http.base.HttpCallback<MessageChatIsAnchor>() {
@Override @Override
@ -262,7 +361,11 @@ public class MainMessageViewHolder extends AbsMainViewHolder {
}); });
if (data.getIsAnchor() == 1) { if (data.getIsAnchor() == 1) {
more.setVisibility(View.VISIBLE); more.setVisibility(View.VISIBLE);
viewPager.setUserInputEnabled(true);
mIndicator.setVisibility(View.VISIBLE);
} }
IMLoginManager.get(mContext)
.setAnchorB(data.getIsAnchor());
} }
@Override @Override

View File

@ -143,7 +143,6 @@
</RelativeLayout> </RelativeLayout>
<RelativeLayout <RelativeLayout
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="94dp" android:layout_height="94dp"
@ -289,26 +288,45 @@
</LinearLayout> </LinearLayout>
<View <View
android:id="@+id/line"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="1dp"
android:layout_marginStart="16dp" android:layout_marginStart="16dp"
android:layout_marginTop="20dp" android:layout_marginTop="20dp"
android:layout_marginEnd="16dp" android:layout_marginEnd="16dp"
android:layout_marginBottom="20dp" android:layout_marginBottom="5dp"
android:background="#FFE9F6" /> android:background="#FFE9F6" />
<!-- 此容器用于动态放置 fragment-->
<FrameLayout <net.lucode.hackware.magicindicator.MagicIndicator
android:id="@+id/container" android:id="@+id/indicator"
android:layout_width="match_parent"
android:layout_height="37dp"
android:visibility="gone"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/line" />
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/viewPager"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_marginBottom="50dp" /> android:layout_marginBottom="50dp"
android:layout_marginTop="10dp"
android:overScrollMode="never"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/indicator" />
<!-- 此容器用于动态放置 fragment-->
<LinearLayout <LinearLayout
android:id="@+id/lt_nodata_msg" android:id="@+id/lt_nodata_msg"
android:layout_width="match_parent" android:layout_width="0dp"
android:layout_height="match_parent" android:layout_height="0dp"
android:gravity="center" android:gravity="center"
android:visibility="visible"> android:visibility="gone">
<ImageView <ImageView
android:layout_width="wrap_content" android:layout_width="wrap_content"

View File

@ -6,26 +6,48 @@
android:layout_height="wrap_content"> android:layout_height="wrap_content">
<RelativeLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/relativeLayout" android:id="@+id/relativeLayout"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="52dp" android:layout_height="52dp"
android:layout_marginTop="20dp" android:layout_marginTop="30dp"
android:paddingTop="24dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"> app:layout_constraintTop_toTopOf="parent">
<TextView <LinearLayout
android:id="@+id/titleView" android:layout_width="0dp"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:layout_height="match_parent" android:clipChildren="true"
android:layout_centerHorizontal="true"
android:gravity="center" android:gravity="center"
android:textColor="@color/textColor" android:orientation="horizontal"
android:textSize="18sp" app:layout_constraintEnd_toStartOf="@+id/img_more"
android:textStyle="bold" app:layout_constraintStart_toEndOf="@+id/btn_back"
tools:text="123" /> app:layout_constraintTop_toTopOf="parent">
<TextView
android:id="@+id/titleView"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_marginStart="20dp"
android:clipChildren="true"
android:ellipsize="end"
android:gravity="center"
android:maxWidth="245dp"
android:maxLines="1"
android:textColor="@color/textColor"
android:textSize="18sp"
android:textStyle="bold"
tools:text="ID001,主播小丽,用户A先生,28岁,北京,软件工程师,2023-10-23" />
<ImageView
android:id="@+id/btn_fold"
android:layout_width="20dp"
android:layout_height="40dp"
android:onClick="backClick"
android:scaleType="center"
android:src="@mipmap/ic_fold" />
</LinearLayout>
<ImageView <ImageView
android:id="@+id/btn_back" android:id="@+id/btn_back"
@ -33,17 +55,10 @@
android:layout_height="40dp" android:layout_height="40dp"
android:onClick="backClick" android:onClick="backClick"
android:scaleType="center" android:scaleType="center"
android:src="@mipmap/ic_back" /> android:src="@mipmap/ic_back"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/btn_fold"
android:layout_width="40dp"
android:layout_height="40dp"
android:layout_marginEnd="331dp"
android:layout_toEndOf="@+id/titleView"
android:onClick="backClick"
android:scaleType="center"
android:src="@mipmap/ic_fold" />
<ImageView <ImageView
android:id="@+id/img_more" android:id="@+id/img_more"
@ -53,8 +68,11 @@
android:padding="9dp" android:padding="9dp"
android:scaleType="center" android:scaleType="center"
android:src="@mipmap/btn_more_black" android:src="@mipmap/btn_more_black"
android:visibility="visible" /> android:visibility="visible"
</RelativeLayout> app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
<androidx.constraintlayout.widget.ConstraintLayout <androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/userCard" android:id="@+id/userCard"
@ -106,45 +124,56 @@
app:layout_constraintTop_toBottomOf="@+id/rc_conversation_portrait" /> app:layout_constraintTop_toBottomOf="@+id/rc_conversation_portrait" />
</androidx.constraintlayout.widget.ConstraintLayout> </androidx.constraintlayout.widget.ConstraintLayout>
<TextView <com.yunbao.common.views.CustomLayout
android:id="@+id/userName" android:id="@+id/userNameLayout"
android:layout_width="wrap_content" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginEnd="-24dp"
android:layout_marginStart="25dp" android:layout_marginStart="25dp"
android:layout_marginTop="60dp" android:layout_marginTop="60dp"
android:text="TextView" android:gravity="center_vertical"
android:textColor="#333333" app:layout_constraintEnd_toStartOf="@+id/constraintLayout6"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="@+id/imageView" app:layout_constraintStart_toStartOf="@+id/imageView"
app:layout_constraintTop_toTopOf="parent" /> app:layout_constraintTop_toTopOf="parent">
<LinearLayout <com.yunbao.common.views.AutoSplitTextView
android:layout_width="wrap_content" android:id="@+id/userName"
android:layout_height="wrap_content"
android:layout_marginStart="5dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="@+id/userName"
app:layout_constraintStart_toEndOf="@+id/userName"
app:layout_constraintTop_toTopOf="@+id/userName">
<TextView
android:id="@+id/user_status"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="在线" android:maxWidth="228dp"
android:textColor="#AAAAAA" android:ellipsize="end"
android:textSize="8sp" /> android:maxLines="2"
android:textColor="#333333"
android:textSize="15sp"
tools:text="1234567890123456789012345" />
<ImageView <LinearLayout
android:id="@+id/userStatusIcon" android:layout_width="wrap_content"
android:layout_width="5dp" android:layout_height="wrap_content"
android:layout_height="5dp"
android:layout_gravity="top"
android:layout_marginStart="5dp" android:layout_marginStart="5dp"
android:src="@mipmap/icon_green" /> android:orientation="horizontal"
android:visibility="visible">
<TextView
android:id="@+id/user_status"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="在线"
android:textColor="#AAAAAA"
android:textSize="8sp" />
<ImageView
android:id="@+id/userStatusIcon"
android:layout_width="5dp"
android:layout_height="5dp"
android:layout_gravity="top"
android:layout_marginStart="5dp"
android:src="@mipmap/icon_green" />
</LinearLayout> </LinearLayout>
</com.yunbao.common.views.CustomLayout>
<TextView <TextView
android:id="@+id/info" android:id="@+id/info"
@ -154,8 +183,8 @@
android:text="@string/activity_msg_chat_top_tip1" android:text="@string/activity_msg_chat_top_tip1"
android:textColor="#777777" android:textColor="#777777"
android:textSize="11sp" android:textSize="11sp"
app:layout_constraintStart_toStartOf="@+id/userName" app:layout_constraintStart_toStartOf="@+id/userNameLayout"
app:layout_constraintTop_toBottomOf="@+id/userName" /> app:layout_constraintTop_toBottomOf="@+id/userNameLayout" />
<LinearLayout <LinearLayout
android:layout_width="wrap_content" android:layout_width="wrap_content"
@ -170,15 +199,18 @@
android:layout_height="20dp" android:layout_height="20dp"
android:layout_marginStart="4dp" android:layout_marginStart="4dp"
app:srcCompat="@mipmap/bg_msg_chat_title_gift" /> app:srcCompat="@mipmap/bg_msg_chat_title_gift" />
<ImageView <ImageView
android:id="@+id/user_auth_status" android:id="@+id/user_auth_status"
android:layout_width="84dp" android:layout_width="0dp"
android:layout_height="20dp" android:layout_height="0dp"
android:layout_marginStart="5dp" android:layout_marginStart="5dp"
android:scaleType="fitStart" android:scaleType="fitStart"
app:srcCompat="@mipmap/ic_chat_auth" app:srcCompat="@mipmap/ic_chat_auth"
tools:layout_editor_absoluteX="124dp" tools:layout_editor_absoluteX="124dp"
tools:layout_editor_absoluteY="17dp" /> tools:layout_editor_absoluteY="17dp"
tools:layout_height="20dp"
tools:layout_width="84dp" />
</LinearLayout> </LinearLayout>
@ -187,9 +219,9 @@
android:layout_width="0dp" android:layout_width="0dp"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="10dp" android:layout_marginTop="10dp"
android:maxLines="2"
android:text="个性签名给性签名个性签名给性签名个性签名给性签名" android:text="个性签名给性签名个性签名给性签名个性签名给性签名"
android:textColor="#333333" android:textColor="#333333"
android:maxLines="2"
android:textSize="13sp" android:textSize="13sp"
app:layout_constraintEnd_toStartOf="@+id/constraintLayout6" app:layout_constraintEnd_toStartOf="@+id/constraintLayout6"
app:layout_constraintStart_toStartOf="@+id/info" app:layout_constraintStart_toStartOf="@+id/info"