ソースを参照

feat: 升级适配target 35 (#18)

* feat: Upgrade libs for 16KB page size

* feat: Upgrade to AGP 8.6.1

* feat: Edge to edge

* feat: clear log zip file

* feat: avoid pendingIntentBackgroundActivityStartMode must not be set when creating a PendingIntent

* feat: fit edge to edge for popupWindow

* feat: fit edge to edge for xiaomi
hct 7 ヶ月 前
コミット
331eb2f96e

+ 21 - 23
app/dependencies/releaseRuntimeClasspath.txt

@@ -27,7 +27,7 @@ androidx.core:core:1.13.1
 androidx.cursoradapter:cursoradapter:1.0.0
 androidx.customview:customview-poolingcontainer:1.0.0
 androidx.customview:customview:1.1.0
-androidx.databinding:viewbinding:8.5.1
+androidx.databinding:viewbinding:8.6.1
 androidx.datastore:datastore-core:1.0.0
 androidx.datastore:datastore-preferences-core:1.0.0
 androidx.datastore:datastore-preferences:1.0.0
@@ -100,16 +100,14 @@ androidx.viewpager2:viewpager2:1.1.0
 androidx.viewpager:viewpager:1.0.0
 androidx.work:work-runtime-ktx:2.9.0
 androidx.work:work-runtime:2.9.0
-cn.rongcloud.sdk:cpp_shared:0.0.1
-cn.rongcloud.sdk:crash:1.0.8
 cn.rongcloud.sdk:databuried_annotation:0.2.1
-cn.rongcloud.sdk:im_chatroom:5.22.0
-cn.rongcloud.sdk:im_customservice:5.22.0
-cn.rongcloud.sdk:im_discussion:5.22.0
-cn.rongcloud.sdk:im_lib:5.22.0
-cn.rongcloud.sdk:im_libcore:5.22.0
-cn.rongcloud.sdk:im_location:5.22.0
-cn.rongcloud.sdk:im_publicservice:5.22.0
+cn.rongcloud.sdk:im_chatroom:5.24.0
+cn.rongcloud.sdk:im_customservice:5.24.0
+cn.rongcloud.sdk:im_discussion:5.24.0
+cn.rongcloud.sdk:im_lib:5.24.0
+cn.rongcloud.sdk:im_libcore:5.24.0
+cn.rongcloud.sdk:im_location:5.24.0
+cn.rongcloud.sdk:im_publicservice:5.24.0
 com.aliyun.dpa:oss-android-sdk:2.9.5
 com.android.installreferrer:installreferrer:2.2
 com.appsflyer:af-android-sdk:6.15.2
@@ -227,18 +225,18 @@ com.tencent.mediacloud:TCXMagicAuth:3.1.0.247
 com.tencent.vasdolly:common:3.0.6
 com.tencent.vasdolly:helper:3.0.6
 com.tencent.vasdolly:reader:3.0.6
-com.tencent:mmkv:1.3.9
+com.tencent:mmkv:1.3.14
 com.wenext.android:SVGAPlayer:5.1.6-yoki-beta
 com.wenext.android:animplayer:5.1.4
 com.wenext.android:autosize:5.1.4
 com.wenext.android:drawee:5.1.5
 com.wenext.android:frame-aab:5.1.8-yoki-beta
-com.wenext.android:frame-apm:5.1.4
+com.wenext.android:frame-apm:5.1.5-yoki-beta
 com.wenext.android:frame-audio:5.1.4
 com.wenext.android:frame-base:5.1.4
-com.wenext.android:frame-bom:5.1.22-yoki-16
+com.wenext.android:frame-bom:5.1.22-yoki-18
 com.wenext.android:frame-coroutine:5.1.4
-com.wenext.android:frame-crash:5.1.4
+com.wenext.android:frame-crash:5.1.5-yoki-beta
 com.wenext.android:frame-data:5.1.5-yoki
 com.wenext.android:frame-debug:5.1.4
 com.wenext.android:frame-deviceid:5.1.4
@@ -248,12 +246,12 @@ com.wenext.android:frame-effect:5.1.6
 com.wenext.android:frame-game:5.1.5-yoki
 com.wenext.android:frame-googleservice:5.1.4
 com.wenext.android:frame-guide:5.1.18-yoki
-com.wenext.android:frame-image:5.1.6-yoki-beta3
+com.wenext.android:frame-image:5.1.7-yoki-beta
 com.wenext.android:frame-locale:5.1.8-yoki
-com.wenext.android:frame-log:5.1.5-yoki
-com.wenext.android:frame-media:5.1.9-yoki-beta
+com.wenext.android:frame-log:5.1.6-yoki
+com.wenext.android:frame-media:5.1.10-yoki-beta
 com.wenext.android:frame-mvvm:5.1.5-beta
-com.wenext.android:frame-network:5.1.5-yoki
+com.wenext.android:frame-network:5.1.6-yoki
 com.wenext.android:frame-oss:5.1.7-yoki-1
 com.wenext.android:frame-push:5.1.4
 com.wenext.android:frame-router-annotation:5.1.4
@@ -263,14 +261,14 @@ com.wenext.android:frame-share:5.1.18-yoki
 com.wenext.android:frame-sound:5.1.4
 com.wenext.android:frame-spi:5.1.4
 com.wenext.android:frame-statistics:5.1.7
-com.wenext.android:frame-storage:5.1.5-yoki
+com.wenext.android:frame-storage:5.1.6-yoki
 com.wenext.android:frame-tceffect:5.1.7-yoki-beta
-com.wenext.android:frame-tcturing:5.1.4
-com.wenext.android:frame-util:5.1.5-yoki-beta-2
+com.wenext.android:frame-tcturing:5.1.5-yoki-beta
+com.wenext.android:frame-util:5.1.6-yoki-beta
 com.wenext.android:frame-zero:5.1.4
 com.wenext.android:retrofit:5.1.4
 id.zelory:compressor:3.0.1
-io.agora.rtc:agora-special-voice:3.7.3.150.AINS
+io.agora.rtc:agora-special-voice:3.7.3.5.XYHZ
 io.github.scwang90:refresh-drawable-paint:3.0.0-alpha
 io.github.scwang90:refresh-footer-classics:3.0.0-alpha
 io.github.scwang90:refresh-header-material:3.0.0-alpha
@@ -278,7 +276,7 @@ io.github.scwang90:refresh-layout-kernel:3.0.0-alpha
 io.reactivex.rxjava3:rxjava:3.0.4
 javax.inject:javax.inject:1
 org.checkerframework:checker-qual:3.43.0
-org.conscrypt:conscrypt-android:2.5.2
+org.conscrypt:conscrypt-android:2.5.3
 org.jetbrains.kotlin:kotlin-android-extensions-runtime:1.9.0
 org.jetbrains.kotlin:kotlin-annotations-jvm:1.3.72
 org.jetbrains.kotlin:kotlin-bom:1.8.22

BIN
app/libs/R_TuringSDK_v89_c0_lc2015CDED3C7265AE_release_20240527140603_pri_mini_nolog.aar


BIN
app/libs/R_TuringSDK_v90_c0_lcD97A2DB9093760EF_release_20250220154612_pri_mini_nolog.aar


BIN
app/libs/wenext_jni-release.aar


BIN
app/libs/xcrash_lib-release.aar


+ 2 - 1
app/src/main/java/com/adealink/weparty/MainActivity.kt

@@ -54,7 +54,8 @@ class MainActivity : BaseActivity() {
     private var dispatchRouter = false
     override val routeSubPage: Boolean
         get() = !dispatchRouter
-
+    override val forceFitNavigationBar: Boolean
+        get() = true
 
     override fun onBeforeCreate() {
         super.onBeforeCreate()

+ 45 - 0
app/src/main/java/com/adealink/weparty/commonui/BaseActivity.kt

@@ -8,10 +8,13 @@ import android.os.Bundle
 import android.os.SystemClock
 import android.view.View
 import android.view.ViewGroup
+import androidx.activity.enableEdgeToEdge
 import androidx.annotation.ColorRes
 import androidx.annotation.DrawableRes
 import androidx.annotation.StringRes
 import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.WindowCompat
+import androidx.core.view.isNotEmpty
 import androidx.viewpager2.widget.ViewPager2
 import com.adealink.frame.aab.util.getCompatColor
 import com.adealink.frame.aab.util.getCompatDrawable
@@ -22,6 +25,8 @@ import com.adealink.frame.locale.language.languageManager
 import com.adealink.frame.router.Router
 import com.adealink.frame.router.manager.deeplinkRouterManager
 import com.adealink.frame.util.isActivityInValid
+import com.adealink.frame.util.istNavigationBarGestureMode
+import com.adealink.frame.util.paddingBottomSystemWindowInsets
 import com.adealink.weparty.BuildConfig
 import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
 import com.adealink.weparty.module.profile.ProfileModule
@@ -39,6 +44,11 @@ open class BaseActivity : AppCompatActivity() {
 
     private var loadingDialog: QMUITipDialog? = null
     private var tipDialog: QMUITipDialog? = null
+    private var istNavigationBarGestureMode = false
+
+    protected open val isEdge2EdgeEnable = true
+    protected open val autoFitNavigationBar = true
+    protected open val forceFitNavigationBar = false
 
     open val routeSubPage = true
 
@@ -46,6 +56,8 @@ open class BaseActivity : AppCompatActivity() {
         onBeforeCreate()
         super.onCreate(savedInstanceState)
         apmService.startStrictMode()
+        istNavigationBarGestureMode = istNavigationBarGestureMode(this)
+        edge2Edge(istNavigationBarGestureMode)
         val initAfter = onAfterSuperCreate()
         if (initAfter) {
             QMUIStatusBarHelper.translucent(this)
@@ -56,6 +68,7 @@ open class BaseActivity : AppCompatActivity() {
             initOthers()
             routeSubPage(intent)
         }
+        fitNavigationBarForEdge2Edge(istNavigationBarGestureMode)
     }
 
     open fun onBeforeCreate() {
@@ -137,8 +150,12 @@ open class BaseActivity : AppCompatActivity() {
     }
 
     fun setNavigationBarColor(@ColorRes resId: Int) {
+        if (isEdge2EdgeEnable && istNavigationBarGestureMode) { // Edge to Edge的情况下不设置颜色
+            return
+        }
         if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
             window.navigationBarColor = getCompatColor(resId)
+            runCatching { WindowCompat.getInsetsController(window, window.decorView).isAppearanceLightNavigationBars = false }
         }
     }
 
@@ -147,6 +164,34 @@ open class BaseActivity : AppCompatActivity() {
         installSplitCompat(this)
     }
 
+    private fun edge2Edge(istNavigationBarGestureMode: Boolean) {
+        if (isEdge2EdgeEnable) {
+            enableEdgeToEdge()
+            // 国产机型:如小米 Android 15 enableEdgeToEdge 后底部导航栏仍会占据空间,调用以下设置使其效果保持一致
+            if (istNavigationBarGestureMode && Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+                window.isNavigationBarContrastEnforced = false
+            }
+        }
+    }
+
+    private fun fitNavigationBarForEdge2Edge(istNavigationBarGestureMode: Boolean) {
+        if (!forceFitNavigationBar) {
+            if (!autoFitNavigationBar) {
+                return
+            }
+            if (istNavigationBarGestureMode) {
+                return
+            }
+        }
+        (window.decorView.findViewById<View>(android.R.id.content) as? ViewGroup)
+            ?.run {
+                takeIf { isNotEmpty() }
+                    ?.getChildAt(0)
+                    ?.takeIf { !it.fitsSystemWindows }
+                    ?.paddingBottomSystemWindowInsets()
+            }
+    }
+
     private fun initLoadingDialog() {
         if (loadingDialog == null) {
             loadingDialog = QMUITipDialog.Builder(this)

+ 15 - 0
app/src/main/java/com/adealink/weparty/commonui/widget/BottomDialogFragment.kt

@@ -5,10 +5,13 @@ import android.app.Dialog
 import android.os.Bundle
 import android.view.Gravity
 import android.view.ViewGroup
+import android.view.ViewTreeObserver.OnWindowFocusChangeListener
 import android.view.WindowManager
 import androidx.annotation.LayoutRes
+import com.adealink.frame.util.fitDialogEdgeToEdge
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
+import com.adealink.frame.util.fitDialogEdgeToEdge
 
 /**
  * Created by sunxiaodong on 2021/4/29.
@@ -24,6 +27,13 @@ abstract class BottomDialogFragment(@LayoutRes override val layoutId: Int) :
     open val followActivityUIFlag: Boolean = false
     open val height = ViewGroup.LayoutParams.WRAP_CONTENT
 
+    private val windowFocusChangeListener = object: OnWindowFocusChangeListener {
+        override fun onWindowFocusChanged(hasFocus: Boolean) {
+            //有的手机在获取焦点后会重新展示底部导航条,再次调用进行全面屏设置
+            takeIf { hasFocus }?.runCatching { fitDialogEdgeToEdge(context, dialog, view)}
+        }
+    }
+
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
         setStyle(STYLE_NO_TITLE, R.style.BottomDialog)
@@ -36,6 +46,11 @@ abstract class BottomDialogFragment(@LayoutRes override val layoutId: Int) :
 
     open fun setDialogAttributes(height: Int) {
         try {
+            fitDialogEdgeToEdge(context, dialog, view)
+            view?.viewTreeObserver?.apply {
+                removeOnWindowFocusChangeListener(windowFocusChangeListener)
+                addOnWindowFocusChangeListener(windowFocusChangeListener)
+            }
             val dialog: Dialog = dialog ?: return
             dialog.window!!.setLayout(
                 ViewGroup.LayoutParams.MATCH_PARENT,

+ 4 - 0
app/src/main/java/com/adealink/weparty/log/manager/LogManager.kt

@@ -10,6 +10,7 @@ import com.adealink.frame.oss.data.UploadFile
 import com.adealink.weparty.storage.file.FilePath
 import com.adealink.frame.util.PackageUtil
 import com.adealink.frame.util.compress
+import com.adealink.frame.util.createDirByDeleteOldDir
 import com.adealink.frame.util.deleteFiles
 import com.adealink.weparty.App
 import com.adealink.weparty.log.data.ReportLogNotify
@@ -97,7 +98,10 @@ internal class LogManager : ILogManager,
                 )
             )) {
                 is Rlt.Success -> {
+                    //clear log file
                     XLogHelper.clearLogFiles()
+                    //clear log zip file
+                    createDirByDeleteOldDir(zipFileDir)
                     result
                 }
                 is Rlt.Failed -> result

+ 1 - 1
app/src/main/java/com/adealink/weparty/push/NotificationUtil.kt

@@ -104,7 +104,7 @@ object NotificationUtil {
         CoroutineScope(Dispatcher.UI).launch {
             val notifyId = pushMessage.pushId.toInt()
             val group = pushMessage.getTargetId() ?: ""
-            val resultPendingIntent = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
+            val resultPendingIntent = if (Build.VERSION.SDK_INT == Build.VERSION_CODES.UPSIDE_DOWN_CAKE) {
                 PendingIntent.getActivity(
                     AppUtil.appContext,
                     notifyId,

+ 5 - 0
app/src/main/java/com/qmuiteam/qmui/widget/popup/QMUIBasePopup.java

@@ -29,6 +29,8 @@ import android.widget.PopupWindow;
 import androidx.annotation.NonNull;
 import androidx.core.view.ViewCompat;
 
+import com.adealink.frame.util.EdgeUtilKt;
+
 import java.lang.ref.WeakReference;
 
 public abstract class QMUIBasePopup<T extends QMUIBasePopup> {
@@ -170,6 +172,9 @@ public abstract class QMUIBasePopup<T extends QMUIBasePopup> {
         if (mDimAmount != DIM_AMOUNT_NOT_EXIST) {
             updateDimAmount(mDimAmount);
         }
+        try {
+            EdgeUtilKt.fitPopupEdgeToEdge(mWindow);
+        } catch (Exception e) {}
     }
 
     private void updateDimAmount(float dimAmount) {

+ 1 - 1
buildSrc/build.gradle

@@ -14,7 +14,7 @@ dependencies {
     implementation(localGroovy())
     implementation 'commons-io:commons-io:2.13.0'
     //noinspection GradleDependency
-    implementation 'com.android.tools.build:gradle:8.5.1'
+    implementation 'com.android.tools.build:gradle:8.6.1'
 }
 
 gradlePlugin {

+ 5 - 5
gradle/libs.versions.toml

@@ -5,7 +5,7 @@ compileSdk = "34"
 targetSdk = "34"
 minSdk = "21"
 
-agp = "8.5.1"
+agp = "8.6.1"
 ksp = "1.9.25-1.0.20"
 kapt = "2.0.20-Beta2"
 
@@ -71,7 +71,7 @@ googleBilling = "7.0.0"
 payermax = "1.0.08"
 
 # rtc
-agoraVoice = "3.7.3.150.AINS"
+agoraVoice = "3.7.3.5.XYHZ"
 trtc = "12.3.0.17115"
 
 # network
@@ -155,7 +155,7 @@ appleAppauth = "0.11.1"
 tiktok = "2.3.0"
 
 # frame
-frameBom = "5.1.22-yoki-16"
+frameBom = "5.1.22-yoki-18"
 frameRouterCompiler = "5.1.6"
 frameTrace = "1.0.0"
 frameBundleTool = "1.0.0"
@@ -168,12 +168,12 @@ tencentIMSDK = "8.5.6864"
 tencnetUiCore = "8.4.6667"
 tencnetUiCommon = "2.8.0.634"
 tencentLiteavSDK = "12.4.0.17372"
-tencnetRoommEngine = "3.0.4.721"
+tencnetRoommEngine = "3.2.0.835"
 tencnetTimpush = "8.5.6864"
 tencnetTimpushFcm = "8.5.6864"
 
 # rong cloud
-rongcloud = "5.22.0"
+rongcloud = "5.24.0"
 
 [libraries]
 # plugin

+ 3 - 0
module/message/src/main/java/com/adealink/weparty/message/conversation/ConversationActivity.kt

@@ -51,6 +51,9 @@ class ConversationActivity: BaseActivity() {
 
     private val profileViewModel by fastLazy { ProfileModule.getProfileViewModel(this) }
 
+    override val forceFitNavigationBar: Boolean
+        get() = true
+
     override fun onBeforeCreate() {
         super.onBeforeCreate()
         Router.bind(this)

+ 1 - 1
module/moment/src/main/java/com/adealink/weparty/moment/usermoment/pub/MomentPublishActivity.kt

@@ -259,7 +259,7 @@ class MomentPublishActivity : BaseActivity(), MomentPubPhotoItemViewBinder.OnPho
             return
         }
 
-        photoDataList.removeLast()
+        photoDataList.removeAt(photoDataList.lastIndex)
 
         mediaInfos.forEach {
             photoDataList.add(MomentEditPhotoItemData(it.uri, it.path))

+ 3 - 0
module/room/src/main/java/com/adealink/weparty/room/RoomActivity.kt

@@ -88,6 +88,9 @@ class RoomActivity : BaseActivity(), IRoomOpListener {
 
     private val binding by viewBinding(ActivityRoomBinding::inflate)
 
+    override val forceFitNavigationBar: Boolean
+        get() = true
+
     //默认聊天房间
     private var currentRoomType: RoomType = RoomType.CHAT
     private var roomFragment: BaseRoomFragment? = null

+ 1 - 1
module/setting/src/main/java/com/adealink/weparty/setting/feedback/FeedbackActivity.kt

@@ -206,7 +206,7 @@ class FeedbackActivity : BaseActivity(), FeedbackPhotoItemViewBinder.FeedBackPho
                 photoListAdapter.notifyDataSetChanged()
             }
             curSize == MAX_FEED_BACK_PHOTO_SIZE -> {
-                photoDataList.removeFirst()
+                photoDataList.removeAt(0)
                 photoDataList.add(0, FeedbackPhotoItemData(null, uri, path))
                 photoListAdapter.notifyDataSetChanged()
             }

+ 1 - 1
settings.gradle

@@ -26,7 +26,7 @@ pluginManagement {
         }
     }
     plugins {
-        id 'com.android.application' version "8.5.1" apply false
+        id 'com.android.application' version "8.6.1" apply false
     }
     resolutionStrategy {
         eachPlugin {