Bladeren bron

feat: 整理项目并编译通过

DoggyZhang 4 maanden geleden
bovenliggende
commit
27290fe6ec
100 gewijzigde bestanden met toevoegingen van 161 en 5022 verwijderingen
  1. 0 5
      app/build.gradle
  2. 0 2
      app/dependencies/releaseRuntimeClasspath.txt
  3. 0 13
      app/src/main/AndroidManifest.xml
  4. 31 90
      app/src/main/java/com/adealink/weparty/App.kt
  5. 2 50
      app/src/main/java/com/adealink/weparty/MainActivity.kt
  6. 0 2
      app/src/main/java/com/adealink/weparty/Routers.kt
  7. 0 3
      app/src/main/java/com/adealink/weparty/aab/AABConfig.kt
  8. 0 3
      app/src/main/java/com/adealink/weparty/apm/APMConfig.kt
  9. 0 4
      app/src/main/java/com/adealink/weparty/apm/APMInit.kt
  10. 0 66
      app/src/main/java/com/adealink/weparty/apm/HookTest.kt
  11. 0 3
      app/src/main/java/com/adealink/weparty/apm/stat/APMStatEvent.kt
  12. 3 3
      app/src/main/java/com/adealink/weparty/commonui/BaseActivity.kt
  13. 0 2
      app/src/main/java/com/adealink/weparty/commonui/dialogfragment/BaseDialogFragment.kt
  14. 0 9
      app/src/main/java/com/adealink/weparty/commonui/imageview/AvatarFrameSvgaView.kt
  15. 0 569
      app/src/main/java/com/adealink/weparty/commonui/text/ExpandLayout.java
  16. 0 108
      app/src/main/java/com/adealink/weparty/commonui/widget/LikeButton.kt
  17. 1 40
      app/src/main/java/com/adealink/weparty/commonui/widget/floatview/FloatViewFactory.kt
  18. 1 20
      app/src/main/java/com/adealink/weparty/commonui/widget/floatview/data/IFloatData.kt
  19. 1 5
      app/src/main/java/com/adealink/weparty/commonui/widget/floatview/mode/ApplicationModeWindowManager.kt
  20. 2 87
      app/src/main/java/com/adealink/weparty/config/Data.kt
  21. 0 109
      app/src/main/java/com/adealink/weparty/config/GlobalConfigManager.kt
  22. 0 3
      app/src/main/java/com/adealink/weparty/config/IGlobalConfigManager.kt
  23. 3 6
      app/src/main/java/com/adealink/weparty/constant/Flavors.kt
  24. 0 4
      app/src/main/java/com/adealink/weparty/constant/Tags.kt
  25. 0 3
      app/src/main/java/com/adealink/weparty/crash/CrashConfig.kt
  26. 0 4
      app/src/main/java/com/adealink/weparty/crash/CrashInit.kt
  27. 16 66
      app/src/main/java/com/adealink/weparty/debug/DebugActivity.kt
  28. 2 5
      app/src/main/java/com/adealink/weparty/debug/DebugPrefs.kt
  29. 0 3
      app/src/main/java/com/adealink/weparty/debug/Router.kt
  30. 3 3
      app/src/main/java/com/adealink/weparty/debug/ShowSvgaCheckResultTestDialog.kt
  31. 3 3
      app/src/main/java/com/adealink/weparty/debug/SvgaCheckerTestDialog.kt
  32. 0 95
      app/src/main/java/com/adealink/weparty/debug/SwitchEnvironmentDialog.kt
  33. 0 71
      app/src/main/java/com/adealink/weparty/debug/SwitchTestDialog.kt
  34. 3 9
      app/src/main/java/com/adealink/weparty/deeplink/DeepLinkConfig.kt
  35. 1 5
      app/src/main/java/com/adealink/weparty/deeplink/constant/DeepLinkConstant.kt
  36. 4 7
      app/src/main/java/com/adealink/weparty/deviceidservice/DeviceIdServiceConfig.kt
  37. 0 3
      app/src/main/java/com/adealink/weparty/download/DownloadConfig.kt
  38. 57 69
      app/src/main/java/com/adealink/weparty/effect/AvatarFrameView.kt
  39. 0 239
      app/src/main/java/com/adealink/weparty/effect/EffectPreviewView.kt
  40. 0 46
      app/src/main/java/com/adealink/weparty/effect/TCEffectConfig.kt
  41. 0 32
      app/src/main/java/com/adealink/weparty/effect/TestEffectActivity.kt
  42. 0 3
      app/src/main/java/com/adealink/weparty/error/Error.kt
  43. 2 6
      app/src/main/java/com/adealink/weparty/googleservice/GoogleServiceConfig.kt
  44. 17 19
      app/src/main/java/com/adealink/weparty/image/ImageConfig.kt
  45. 0 3
      app/src/main/java/com/adealink/weparty/image/datasource/local/ImageLocalService.kt
  46. 0 582
      app/src/main/java/com/adealink/weparty/imageselect/ImageSelectActivity.kt
  47. 0 87
      app/src/main/java/com/adealink/weparty/imageselect/SelectImageContract.kt
  48. 0 121
      app/src/main/java/com/adealink/weparty/imageselect/SelectImageLifecycleObserver.kt
  49. 0 9
      app/src/main/java/com/adealink/weparty/imageselect/cache/VideoCoverCache.kt
  50. 0 29
      app/src/main/java/com/adealink/weparty/imageselect/constant/ImageSelectTopTips.kt
  51. 0 3
      app/src/main/java/com/adealink/weparty/imageselect/constant/Tags.kt
  52. 2 5
      app/src/main/java/com/adealink/weparty/imageselect/model/MediaType.kt
  53. 0 2
      app/src/main/java/com/adealink/weparty/imageselect/model/SelectImageInfo.kt
  54. 0 145
      app/src/main/java/com/adealink/weparty/imageselect/selectpreview/SelectPreviewActivity.kt
  55. 0 56
      app/src/main/java/com/adealink/weparty/imageselect/selectpreview/SelectPreviewContract.kt
  56. 0 33
      app/src/main/java/com/adealink/weparty/imageselect/selectpreview/SelectPreviewLifecycleObserver.kt
  57. 0 66
      app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraActivity.kt
  58. 0 10
      app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraConst.kt
  59. 0 77
      app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraContract.kt
  60. 0 79
      app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraExtensions.kt
  61. 0 49
      app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraLifecycleObserver.kt
  62. 0 466
      app/src/main/java/com/adealink/weparty/imageselect/takePhoto/RecordVideoFragment.kt
  63. 0 4
      app/src/main/java/com/adealink/weparty/imageselect/util/CompressorUtil.kt
  64. 0 35
      app/src/main/java/com/adealink/weparty/imageselect/view/AddItemViewBinder.kt
  65. 0 35
      app/src/main/java/com/adealink/weparty/imageselect/view/ImageFolderItemViewBinder.kt
  66. 0 131
      app/src/main/java/com/adealink/weparty/imageselect/view/ImageItemViewBinder.kt
  67. 0 41
      app/src/main/java/com/adealink/weparty/imageselect/view/VideoItemViewBinder.kt
  68. 1 19
      app/src/main/java/com/adealink/weparty/locale/LanguageConfig.kt
  69. 0 4
      app/src/main/java/com/adealink/weparty/location/LocationConfig.kt
  70. 0 3
      app/src/main/java/com/adealink/weparty/location/constant/Error.kt
  71. 0 3
      app/src/main/java/com/adealink/weparty/location/constant/Tags.kt
  72. 0 4
      app/src/main/java/com/adealink/weparty/location/data/LocationData.kt
  73. 1 3
      app/src/main/java/com/adealink/weparty/location/datasource/remote/LocationHttpService.kt
  74. 0 4
      app/src/main/java/com/adealink/weparty/location/viewmodel/ILocationViewModel.kt
  75. 0 3
      app/src/main/java/com/adealink/weparty/location/viewmodel/LocationViewModel.kt
  76. 0 3
      app/src/main/java/com/adealink/weparty/log/LogConfig.kt
  77. 0 18
      app/src/main/java/com/adealink/weparty/log/stat/LogErrorStatEvent.kt
  78. 0 3
      app/src/main/java/com/adealink/weparty/log/viewmodel/LogViewModelFactory.kt
  79. 0 207
      app/src/main/java/com/adealink/weparty/match/MatchStateMachine.kt
  80. 0 3
      app/src/main/java/com/adealink/weparty/media/IMediaManager.kt
  81. 2 2
      app/src/main/java/com/adealink/weparty/media/MediaConfig.kt
  82. 2 4
      app/src/main/java/com/adealink/weparty/media/MediaManager.kt
  83. 0 3
      app/src/main/java/com/adealink/weparty/module/account/AccountLocalService.kt
  84. 0 48
      app/src/main/java/com/adealink/weparty/module/account/AccountModule.kt
  85. 0 14
      app/src/main/java/com/adealink/weparty/module/account/IAccountService.kt
  86. 0 5
      app/src/main/java/com/adealink/weparty/module/account/ILoginListener.kt
  87. 0 18
      app/src/main/java/com/adealink/weparty/module/account/Router.kt
  88. 1 33
      app/src/main/java/com/adealink/weparty/module/account/util/AccountUtil.kt
  89. 0 21
      app/src/main/java/com/adealink/weparty/module/call/CallConfig.kt
  90. 0 184
      app/src/main/java/com/adealink/weparty/module/call/CallModule.kt
  91. 0 44
      app/src/main/java/com/adealink/weparty/module/call/ICallService.kt
  92. 0 52
      app/src/main/java/com/adealink/weparty/module/call/Router.kt
  93. 0 78
      app/src/main/java/com/adealink/weparty/module/call/data/CallData.kt
  94. 0 15
      app/src/main/java/com/adealink/weparty/module/call/data/Constant.kt
  95. 0 12
      app/src/main/java/com/adealink/weparty/module/call/match/IMatchListener.kt
  96. 0 40
      app/src/main/java/com/adealink/weparty/module/call/match/IMatchManager.kt
  97. 0 10
      app/src/main/java/com/adealink/weparty/module/call/match/IMatchNotify.kt
  98. 0 162
      app/src/main/java/com/adealink/weparty/module/call/match/data/CallMatchData.kt
  99. 0 6
      app/src/main/java/com/adealink/weparty/module/call/match/viewmodel/ICallMatchViewModel.kt
  100. 0 29
      app/src/main/java/com/adealink/weparty/module/call/viewmodel/ICallViewModel.kt

+ 0 - 5
app/build.gradle

@@ -9,11 +9,9 @@ plugins {
     id 'com.tencent.vasdolly'
     id 'kotlin-parcelize'
     id("com.dropbox.dependency-guard") version "0.5.0"
-    id("com.google.devtools.ksp") version "1.9.10-1.0.13"//引入ksp插件
 }
 
 apply plugin: 'com.wenext.bundle.local.test'
-apply plugin: "android.aop"
 
 def isEnableTrace = project.hasProperty("ENABLE_TRACE") && project.ENABLE_TRACE.toBoolean()
 if (isEnableTrace) {
@@ -468,9 +466,6 @@ dependencies {
     }
 
     api libs.flexbox
-
-    implementation 'io.github.flyjingfish:androidaop-core:2.7.0'
-    ksp 'io.github.flyjingfish:androidaop-apt:2.7.0'
 }
 
 

+ 0 - 2
app/dependencies/releaseRuntimeClasspath.txt

@@ -271,8 +271,6 @@ com.wenext.android:frame-zero:6.0.0
 com.wenext.android:retrofit:6.0.0
 id.zelory:compressor:3.0.1
 io.agora.rtc:agora-special-voice:3.7.3.5.XYHZ
-io.github.flyjingfish:androidaop-annotation:2.7.0
-io.github.flyjingfish:androidaop-core:2.7.0
 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

+ 0 - 13
app/src/main/AndroidManifest.xml

@@ -163,22 +163,9 @@
                 android:resource="@xml/file_paths" />
         </provider>
 
-        <activity
-            android:name="com.adealink.weparty.imageselect.ImageSelectActivity"
-            android:screenOrientation="portrait" />
         <activity
             android:name="com.adealink.weparty.imageselect.clip.ClipImageActivity"
             android:screenOrientation="portrait" />
-        <activity
-            android:name="com.adealink.weparty.imageselect.selectpreview.SelectPreviewActivity"
-            android:screenOrientation="portrait" />
-        <activity
-            android:name="com.adealink.weparty.imageselect.takePhoto.CameraActivity"
-            android:screenOrientation="portrait" />
-
-        <activity
-            android:name="com.adealink.weparty.videoselect.VideoSelectActivity"
-            android:screenOrientation="portrait" />
 
         <!-- Trigger Google Play services to install the backported photo picker module. -->
         <service

+ 31 - 90
app/src/main/java/com/adealink/weparty/App.kt

@@ -4,7 +4,6 @@ import android.content.Context
 import android.content.SharedPreferences
 import android.content.res.Configuration
 import android.os.SystemClock
-import androidx.room.Room
 import com.adealink.frame.aab.AAB
 import com.adealink.frame.aab.util.getCompatString
 import com.adealink.frame.apm.initAPMService
@@ -21,7 +20,6 @@ import com.adealink.frame.effect.createEffect
 import com.adealink.frame.effect.initEffect
 import com.adealink.frame.googleservice.createGoogleService
 import com.adealink.frame.image.imageService
-import com.adealink.frame.imkit.IMService
 import com.adealink.frame.initStorageService
 import com.adealink.frame.locale.language.createLanguageManager
 import com.adealink.frame.log.Log
@@ -39,16 +37,13 @@ import com.adealink.frame.router.Router
 import com.adealink.frame.router.manager.deeplinkRouterManager
 import com.adealink.frame.security.createSecurityService
 import com.adealink.frame.share.initShareManager
-import com.adealink.frame.sound.createSoundPlayer
 import com.adealink.frame.startup.dispatcher.StartTaskDispatcher
 import com.adealink.frame.startup.task.MainThreadStartUpTask
 import com.adealink.frame.startup.task.StartUpTask
 import com.adealink.frame.startup.task.SubNoWaitStartUpTask
 import com.adealink.frame.startup.task.SubWaitStartUpTask
-import com.adealink.frame.statistics.report.initStat
 import com.adealink.frame.storage.file.logPath
 import com.adealink.frame.storageService
-import com.adealink.frame.tceffect.TCEffectManager
 import com.adealink.frame.util.ActivityLifecycleCallbacksExt
 import com.adealink.frame.util.AppUtil
 import com.adealink.frame.util.ScreenAutoSizeUtil
@@ -73,21 +68,15 @@ import com.adealink.weparty.deviceidservice.TCTuringConfig
 import com.adealink.weparty.download.DownloadConfig
 import com.adealink.weparty.effect.EffectConfig
 import com.adealink.weparty.effect.SVGA_CONFIG
-import com.adealink.weparty.effect.TCEffectConfig
 import com.adealink.weparty.googleservice.GoogleServiceConfig
 import com.adealink.weparty.hardware.HardwareManager
 import com.adealink.weparty.hardware.IHardwareManager
-import com.adealink.weparty.im.IMConfig
 import com.adealink.weparty.image.ImageConfig
 import com.adealink.weparty.locale.LanguageConfig
 import com.adealink.weparty.log.LogConfig
 import com.adealink.weparty.media.IMediaManager
 import com.adealink.weparty.media.MediaConfig
 import com.adealink.weparty.media.MediaManager
-import com.adealink.weparty.module.attribution.AttributionModule
-import com.adealink.weparty.module.call.CallModule
-import com.adealink.weparty.module.message.MessageModule
-import com.adealink.weparty.module.operation.OperationModule
 import com.adealink.weparty.network.INetworkManager
 import com.adealink.weparty.network.NetworkConfig
 import com.adealink.weparty.network.NetworkManager
@@ -97,17 +86,7 @@ import com.adealink.weparty.push.PushServiceConfig
 import com.adealink.weparty.router.RouterConfig
 import com.adealink.weparty.security.SecurityConfig
 import com.adealink.weparty.share.ShareConfig
-import com.adealink.weparty.sound.SoundPlayerConfig
-import com.adealink.weparty.stat.StatConfig
 import com.adealink.weparty.storage.config.StorageConfig
-import com.adealink.weparty.storage.db.AppDatabase
-import com.adealink.weparty.url.urlConfigService
-import com.adealink.weparty.webview.JSBridgeConfig
-import com.adealink.weparty.webview.WebResourceConfig
-import com.adealink.weparty.webview.jsbridge.manager.createJSBridgeManager
-import com.adealink.weparty.webview.jsbridge.manager.initJSBridgeManager
-import com.adealink.weparty.webview.loader.initWebResourceLoader
-import com.adealink.weparty.webview.payermax.PayerMaxHelper
 import com.facebook.FacebookSdk
 import com.facebook.LoggingBehavior
 import com.google.android.play.core.splitcompat.SplitCompatApplication
@@ -118,7 +97,6 @@ import com.gu.toolargetool.Logger
 import com.gu.toolargetool.TooLargeTool
 import com.opensource.svgaplayer.control.SVGAManager
 import com.tencent.mars.xlog.Xlog
-import io.rong.imlib.model.InitOption
 
 /**
  * Created by sunxiaodong on 2021/3/25.
@@ -137,15 +115,14 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
     val effect: IEffect by lazy { createEffect(EffectConfig()) }
     val googleService by lazy { createGoogleService(GoogleServiceConfig()) }
     val deviceIdService by lazy { createDeviceIdService(DeviceIdServiceConfig()) }
-    val jsBridgeManager by lazy { createJSBridgeManager(JSBridgeConfig()) }
+//    val jsBridgeManager by lazy { createJSBridgeManager(JSBridgeConfig()) }
     val mediaService by lazy { createMediaService(MediaConfig) }
     val mediaManager: IMediaManager by lazy { MediaManager() }
-    val soundPlayer by lazy { createSoundPlayer(SoundPlayerConfig()) }
     val languageManager by lazy { createLanguageManager(LanguageConfig()) }
     val securityService by lazy { createSecurityService(SecurityConfig()) }
-    val database by lazy {
-        Room.databaseBuilder(applicationContext, AppDatabase::class.java, "weparty_app_db").build()
-    }
+//    val database by lazy {
+//        Room.databaseBuilder(applicationContext, AppDatabase::class.java, "weparty_app_db").build()
+//    }
     val logService: ILogService by lazy { LogService(LogConfig()) }
 
     // TODO: 重写IM
@@ -175,7 +152,6 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
             addAppStartTask(InitNetwork())
             addAppStartTask(InitPush())
             addAppStartTask(InitUI())
-            addAppStartTask(InitTCEffect())
             addAppStartTask(InitSVGA())
             addAppStartTask(InitImageService())
             addAppStartTask(InitRouter())
@@ -185,17 +161,15 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
             addAppStartTask(InitStorageService())
             addAppStartTask(InitShareManager())
             addAppStartTask(InitOssService())
-            addAppStartTask(InitJSBridgeManager())
-            addAppStartTask(InitWebResourceLoader())
+//            addAppStartTask(InitJSBridgeManager())
+//            addAppStartTask(InitWebResourceLoader())
             addAppStartTask(InitDownloadService())
             addAppStartTask(InitEffect())
             addAppStartTask(InitFirebaseAnalytics())
             addAppStartTask(InitFB())
-            addAppStartTask(InitPayerMax())
+//            addAppStartTask(InitPayerMax())
 
             addAppStartTask(InitIM())
-            addAppStartTask(InitCall1())
-            addAppStartTask(InitCall2())
             addAppStartTask(InitTCTuringManager())
 
             //其他子任务(不卡主流程)
@@ -220,7 +194,7 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
         initXLog()
         initAPMService(APMConfig())
         initAPM(this@App)
-        initStat { StatConfig() }
+//        initStat { StatConfig() }
         installCrashProtector(CrashConfig())
         initCrash(this@App) //依赖xlog,stat,crash protector
         AAB.init(AABConfig())
@@ -265,15 +239,6 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
             get() = listOf(InitUI::class.java)
     }
 
-    inner class InitTCEffect : SubWaitStartUpTask() {
-        override fun run() {
-            TCEffectManager.init(TCEffectConfig())
-        }
-
-        override val dependsTaskList: List<Class<out StartUpTask>>
-            get() = listOf(InitUI::class.java)
-    }
-
     inner class InitSVGA : SubWaitStartUpTask() {
         override fun run() {
             SVGAManager.init(this@App, SVGA_CONFIG)
@@ -326,20 +291,20 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
         }
     }
 
-    inner class InitJSBridgeManager : SubWaitStartUpTask() {
-        override fun run() {
-            initJSBridgeManager { jsBridgeManager }
-        }
-    }
-
-    inner class InitWebResourceLoader : SubWaitStartUpTask() {
-        override fun run() {
-            initWebResourceLoader(WebResourceConfig())
-        }
+//    inner class InitJSBridgeManager : SubWaitStartUpTask() {
+//        override fun run() {
+//            initJSBridgeManager { jsBridgeManager }
+//        }
+//    }
 
-        override val dependsTaskList: List<Class<out StartUpTask>>
-            get() = listOf(InitNetwork::class.java)
-    }
+//    inner class InitWebResourceLoader : SubWaitStartUpTask() {
+//        override fun run() {
+//            initWebResourceLoader(WebResourceConfig())
+//        }
+//
+//        override val dependsTaskList: List<Class<out StartUpTask>>
+//            get() = listOf(InitNetwork::class.java)
+//    }
 
     inner class InitDownloadService : SubWaitStartUpTask() {
         override fun run() {
@@ -373,11 +338,11 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
         }
     }
 
-    inner class InitPayerMax : SubWaitStartUpTask() {
-        override fun run() {
-            PayerMaxHelper.init(this@App)
-        }
-    }
+//    inner class InitPayerMax : SubWaitStartUpTask() {
+//        override fun run() {
+//            PayerMaxHelper.init(this@App)
+//        }
+//    }
 
     inner class InitNetwork : SubWaitStartUpTask() {
         override fun run() {
@@ -406,28 +371,6 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
         }
     }
 
-    //1v1呼叫主线程
-    inner class InitCall1 : SubWaitStartUpTask() {
-        override val isRunOnMainThread: Boolean = true
-
-        override fun run() {
-            CallModule.appOnCreateMainTask(this@App)
-        }
-    }
-
-    //1v1呼叫子线程
-    inner class InitCall2 : SubWaitStartUpTask() {
-        override fun run() {
-            CallModule.appOnCreateSubTask(this@App)
-        }
-
-        override val dependsTaskList: List<Class<out StartUpTask>>
-            get() = listOf(
-                *super.dependsTaskList.toTypedArray(),
-                InitCall1::class.java
-            )
-    }
-
     inner class InitTCTuringManager : SubWaitStartUpTask() {
         override fun run() {
             TCTuringManager.init(TCTuringConfig())
@@ -469,14 +412,12 @@ class App : SplitCompatApplication(), ActivityLifecycleCallbacksExt {
         override fun run() {
             deviceIdService.updateDeviceId()
             networkService.fetchNetAntiBanConfig()
-            urlConfigService.init()
-            soundPlayer.prepare()
-
-            AttributionModule.initialize()
-            AttributionModule.start()
-            AttributionModule.reportFirstOpen()
 
-            OperationModule.init()
+//            AttributionModule.initialize()
+//            AttributionModule.start()
+//            AttributionModule.reportFirstOpen()
+//
+//            OperationModule.init()
         }
     }
 

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

@@ -14,35 +14,22 @@ import com.adealink.frame.router.Router
 import com.adealink.frame.router.annotation.BindExtra
 import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.router.manager.deeplinkRouterManager
-import com.adealink.weparty.AppModule.Main.Companion.EXTRA_FROM_MATCH_NOTIFICATION
-import com.adealink.weparty.AppModule.Main.Companion.EXTRA_MATCH_ID
 import com.adealink.weparty.commonui.BaseActivity
 import com.adealink.weparty.module.account.Account
 import com.adealink.weparty.module.account.AccountModule
-import com.adealink.weparty.module.call.CallModule
 import com.adealink.weparty.push.PushStatEvent
-import com.adealink.weparty.stat.manager.serveReportManager
-import com.adealink.weparty.stat.reportAppOpenIfNeed
-import com.adealink.weparty.stat.reportEnterHome
 import com.adealink.weparty.storage.AppPref
 import com.adealink.weparty.ui.MainStartUpFragment
 import com.adealink.weparty.ui.home.HomeFragment
-import com.adealink.weparty.ui.home.util.HomeLocalService
-import com.adealink.weparty.ui.splash.SplashFragment
 import com.adealink.weparty.update.updateManager
-import com.adealink.weparty.util.PermissionRequest
 import com.adealink.weparty.util.goLocalLinkPage
 import com.qmuiteam.qmui.widget.util.QMUIStatusBarHelper
-import com.tencent.qcloud.tuicore.permission.PermissionCallback
 
 @RouterUri(path = [AppModule.Main.PATH], desc = "首页")
 class MainActivity : BaseActivity() {
 
     companion object {
         private const val TAG = "MainActivity"
-
-        //显示splash页面
-        private var showSplash = true
     }
 
     enum class DispatchFrom {
@@ -66,7 +53,6 @@ class MainActivity : BaseActivity() {
         super.onBeforeCreate()
         android.util.Log.d("MainActivity", "onCreate")
         Router.bind(this)
-        HomeLocalService.homeTabVisitCount++
     }
 
     override fun onAfterSuperCreate(): Boolean {
@@ -94,8 +80,8 @@ class MainActivity : BaseActivity() {
 
     override fun initOthers() {
         super.initOthers()
-        reportAppOpenIfNeed(false)
-        serveReportManager.reportFirebaseAppInstanceId()
+//        reportAppOpenIfNeed(false)
+//        serveReportManager.reportFirebaseAppInstanceId()
     }
 
     override fun onResume() {
@@ -114,11 +100,6 @@ class MainActivity : BaseActivity() {
     }
 
     private fun dispatch(intent: Intent?, from: DispatchFrom) {
-        if (showSplash) {
-            showSplash = false
-            inflateSplashFragment()
-            return
-        }
         when {
             needGoLoginActivity() -> {
                 Router.build(this, Account.Login.PATH)
@@ -135,17 +116,6 @@ class MainActivity : BaseActivity() {
                 finish()
                 return
             }
-
-            needHandleMatchCall(intent) -> {
-                Log.d(TAG, "needHandleMatchCall")
-                CallModule.getMatchNotificationView(this)?.cancelNotifyView()
-                PermissionRequest.requestVideoPermission(this@MainActivity, object : PermissionCallback() {
-                    override fun onGranted() {
-                        val matchId = intent?.extras?.getLong(EXTRA_MATCH_ID, 0L) ?: 0L
-                        CallModule.getMatchManager()?.accept(matchId)
-                    }
-                })
-            }
         }
         inflateHomeFragment(from)
         intent ?: return
@@ -190,27 +160,10 @@ class MainActivity : BaseActivity() {
         return AppPref.needRegister
     }
 
-    private fun needHandleMatchCall(intent: Intent?): Boolean {
-        return intent?.extras?.getBoolean(EXTRA_FROM_MATCH_NOTIFICATION, false) ?: false
-    }
-
-    private fun inflateSplashFragment() {
-        var splashFragment =
-            supportFragmentManager.findFragmentByTag(SplashFragment.TAG) as? SplashFragment
-        if (splashFragment?.isAdded == true) {
-            return
-        }
-        splashFragment = splashFragment ?: SplashFragment()
-        supportFragmentManager.beginTransaction()
-            .replace(R.id.fl_content, splashFragment, SplashFragment.TAG)
-            .commitAllowingStateLoss()
-    }
-
     private fun inflateHomeFragment(from: DispatchFrom) {
         var homeFragment =
             supportFragmentManager.findFragmentByTag(HomeFragment.TAG) as? HomeFragment
         if (homeFragment?.isAdded == true && from == DispatchFrom.ON_CREATE) {
-            homeFragment.setDefaultTab(mainTabKey)
             return
         }
 
@@ -220,7 +173,6 @@ class MainActivity : BaseActivity() {
         supportFragmentManager.beginTransaction()
             .replace(R.id.fl_content, homeFragment, HomeFragment.TAG)
             .commitAllowingStateLoss()
-        reportEnterHome()
 
         MainStartUpFragment.inject(this)
     }

+ 0 - 2
app/src/main/java/com/adealink/weparty/Routers.kt

@@ -9,8 +9,6 @@ interface AppModule {
             const val EXTRA_MAIN_SUB_TAB = "subTab" //控制首页默认展示的子tab
 
             const val EXTRA_SPLASH_JUMP_URL = "splash_jump_url" //Splash页面跳转URL
-            const val EXTRA_FROM_MATCH_NOTIFICATION = "from_match_notification"
-            const val EXTRA_MATCH_ID = "match_id"
         }
     }
 }

+ 0 - 3
app/src/main/java/com/adealink/weparty/aab/AABConfig.kt

@@ -4,9 +4,6 @@ import android.app.Application
 import com.adealink.frame.aab.IAABConfig
 import com.adealink.weparty.App
 
-/**
- * Created by sunxiaodong on 2021/5/19.
- */
 class AABConfig : IAABConfig {
 
     override val application: Application

+ 0 - 3
app/src/main/java/com/adealink/weparty/apm/APMConfig.kt

@@ -2,9 +2,6 @@ package com.adealink.weparty.apm
 
 import com.adealink.frame.apm.config.IAPMConfig
 
-/**
- * Created by sunxiaodong on 2021/11/30.
- */
 class APMConfig : IAPMConfig {
 
     override val enable: Boolean

+ 0 - 4
app/src/main/java/com/adealink/weparty/apm/APMInit.kt

@@ -29,10 +29,6 @@ import com.adealink.weparty.apm.stat.APMStatEvent
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 
-/**
- * Created by sunxiaodong on 2021/12/4.
- */
-
 const val TAG_APM = "tag_apm"
 
 fun initAPM(application: Application) {

+ 0 - 66
app/src/main/java/com/adealink/weparty/apm/HookTest.kt

@@ -1,66 +0,0 @@
-package com.adealink.weparty.apm
-
-import com.flyjingfish.android_aop_annotation.ProceedJoinPoint
-import com.flyjingfish.android_aop_annotation.anno.AndroidAopMatchClassMethod
-import com.flyjingfish.android_aop_annotation.base.MatchClassMethod
-import com.flyjingfish.android_aop_annotation.enums.MatchType
-
-/**
- * 定义一些替换操作
- */
-@AndroidAopMatchClassMethod(
-    targetClassName = "androidx.viewpager2.widget.ScrollEventAdapter",
-    methodName = ["updateScrollEventValues"],
-    type = MatchType.SELF
-)
-class ScrollEventAdapterMethod : MatchClassMethod {
-    override fun invoke(joinPoint: ProceedJoinPoint, methodName: String): Any? {
-        try {
-//            val target = joinPoint.target
-//            if (target != null) {
-//                val mViewPagerField = target::class.java.getDeclaredField("mViewPager")
-//                mViewPagerField.isAccessible = true
-//                val mViewPager = mViewPagerField.get(joinPoint.target) as ViewPager2
-//                val viewPagerIdString = mViewPager.resources?.getResourceEntryName(mViewPager.id)
-//                Log.i(
-//                    "ScrollEventAdapterMethod",
-//                    "=====updateScrollEventValues=====${mViewPager}, viewPager:$viewPagerIdString, itemCount:${mViewPager.childCount}, currentItem:${mViewPager.currentItem}, " +
-//                            "${mViewPager.adapter}, ${mViewPager.itemDecorationCount}, ${mViewPager.getChildAt(mViewPager.currentItem)}"
-//                )
-//            }
-            return joinPoint.proceed()
-        } catch (e: Exception) {
-
-        }
-        return null
-    }
-}
-
-
-//@AndroidAopMatchClassMethod(
-//    targetClassName = "androidx.viewpager2.widget.ViewPager2",
-//    methodName = ["setCurrentItemInternal"],
-//    type = MatchType.SELF
-//)
-//class SetCurrentItemInternalMethod : MatchClassMethod {
-//    override fun invoke(joinPoint: ProceedJoinPoint, methodName: String): Any? {
-//        try {
-//            val target = joinPoint.target
-//            if (target != null) {
-//                val mViewPager = target as ViewPager2
-//                val viewPagerIdString = mViewPager.resources?.getResourceEntryName(mViewPager.id)
-//                val args = joinPoint.args
-//                val item = args?.getOrNull(0) as? Int
-//                val smoothScroll = args?.getOrNull(1) as? Boolean
-//                Log.d(
-//                    "SetCurrentItemInternal",
-//                    "=====setCurrentItemInternal=====${mViewPager}, viewPager:$viewPagerIdString, currentItem:${mViewPager.currentItem}, " +
-//                            "${mViewPager.adapter?.javaClass?.name}, setItem:$item, smoothScroll:$smoothScroll"
-//                )
-//            }
-//        } catch (e: Exception) {
-//
-//        }
-//        return joinPoint.proceed()
-//    }
-//}

+ 0 - 3
app/src/main/java/com/adealink/weparty/apm/stat/APMStatEvent.kt

@@ -3,9 +3,6 @@ package com.adealink.weparty.apm.stat
 import com.adealink.frame.statistics.BaseStatEvent
 import com.adealink.frame.statistics.IEventValue
 
-/**
- * Created by sunxiaodong on 2021/12/5.
- */
 class APMStatEvent(override val action: IEventValue) : BaseStatEvent("apm") {
 
     enum class Action(override val value: String, override val desc: String) : IEventValue {

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

@@ -29,7 +29,6 @@ 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
-import com.adealink.weparty.webview.jsbridge.data.NativeMessageType
 import com.google.firebase.crashlytics.ktx.crashlytics
 import com.google.firebase.crashlytics.setCustomKeys
 import com.google.firebase.ktx.Firebase
@@ -108,8 +107,9 @@ open class BaseActivity : AppCompatActivity() {
             crashlytics.setUserId(it.uid.toString())
             crashlytics.setCustomKeys {
                 key("uid", it.uid.toString())
-                key("region", it.region ?: "")
-                key("country", it.country ?: "")
+                // TODO: firebase地区补充
+//                key("region", it.region ?: "")
+//                key("country", it.country ?: "")
                 key("cur_activity", this@BaseActivity::class.java.simpleName)
                 key("BuildType", BuildConfig.BUILD_TYPE)
                 key("IS_RELEASE", BuildConfig.IS_RELEASE)

+ 0 - 2
app/src/main/java/com/adealink/weparty/commonui/dialogfragment/BaseDialogFragment.kt

@@ -16,7 +16,6 @@ import androidx.fragment.app.FragmentManager
 import androidx.fragment.app.FragmentTransaction
 import com.adealink.frame.aab.util.compatInflateView
 import com.adealink.frame.aab.util.installSplitCompat
-import com.adealink.weparty.commonui.dialogchain.DialogShowManager
 import com.google.firebase.Firebase
 import com.google.firebase.crashlytics.crashlytics
 import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
@@ -199,7 +198,6 @@ open class BaseDialogFragment(@LayoutRes open val layoutId: Int) : DialogFragmen
         super.onDismiss(dialog)
         this.isShow = false
         dismissCallback?.invoke()
-        DialogShowManager.removeSelfAndTryShowNextDialog(this)
     }
 
     fun setDismissCallback(dismissCallback: (() -> Unit)?): BaseDialogFragment {

+ 0 - 9
app/src/main/java/com/adealink/weparty/commonui/imageview/AvatarFrameSvgaView.kt

@@ -3,18 +3,9 @@ package com.adealink.weparty.commonui.imageview
 import android.content.Context
 import android.content.res.TypedArray
 import android.util.AttributeSet
-import android.view.View
-import androidx.core.view.doOnAttach
-import androidx.lifecycle.findViewTreeLifecycleOwner
-import androidx.lifecycle.findViewTreeViewModelStoreOwner
-import com.adealink.frame.base.Rlt
-import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.profile.decorate.data.DecorType
-import com.adealink.weparty.module.profile.decorate.data.SVGAAvatarFrameDecor
 import com.opensource.svgaplayer.SVGADynamicEntity
 import com.opensource.svgaplayer.WenextSvgaView
 import com.opensource.svgaplayer.control.ControllerListener
-import com.opensource.svgaplayer.entities.SvgaInfo
 import com.opensource.svgaplayer.utils.Supplier
 
 /**

+ 0 - 569
app/src/main/java/com/adealink/weparty/commonui/text/ExpandLayout.java

@@ -1,569 +0,0 @@
-package com.adealink.weparty.commonui.text;
-
-import android.content.Context;
-import android.content.res.TypedArray;
-import android.os.Build;
-import android.text.Layout;
-import android.text.StaticLayout;
-import android.text.TextPaint;
-import android.text.TextUtils;
-import android.util.AttributeSet;
-import android.util.Log;
-import android.util.TypedValue;
-import android.view.View;
-import android.view.ViewTreeObserver;
-import android.widget.ImageView;
-import android.widget.LinearLayout;
-import android.widget.RelativeLayout;
-import android.widget.TextView;
-
-import com.adealink.weparty.R;
-
-/**
- * Created by sunxiaodong on 2022/8/29.
- * 描述:展开和收起布局,在TextView最后一行添加“图片+文字样式”展开和收起布局,而且是右对齐
- * 优化改造于:https://blog.csdn.net/u014620028/article/details/100145527
- */
-public class ExpandLayout extends RelativeLayout implements View.OnClickListener {
-    private static final String TAG = ExpandLayout.class.getSimpleName();
-    private static final int STYLE_DEFAULT = 0;
-    private static final int STYLE_ICON = 1;
-    private static final int STYLE_TEXT = 2;
-    private Context mContext;
-    private View mRootView;
-    private TextView mTvContent;
-    private LinearLayout mLayoutExpandMore;
-    private ImageView mIconExpand;
-    private TextView mTvExpand;
-    private int mMeasuredWidth;
-    /**
-     * 辅助TextView,保证末尾图标和文字与内容文字居中显示
-     */
-    private TextView mTvExpandHelper;
-
-    private int mExpandIconResId;
-    private int mCollapseIconResId;
-
-    private String mExpandMoreStr;
-    private String mCollapseLessStr;
-
-    private int mMaxLines = 2;
-
-    private int mContentTextSize;
-    private int mExpandTextSize;
-
-    /**
-     * 是否展开
-     */
-    private boolean mIsExpand = false;
-
-    /**
-     * 原内容文本
-     */
-    private String mOriginContentStr;
-    /**
-     * 缩略后展示的文本
-     */
-    private CharSequence mEllipsizeStr;
-
-    /**
-     * 主文字颜色
-     */
-    private int mContentTextColor;
-    /**
-     * 展开/收起文字颜色
-     */
-    private int mExpandTextColor;
-
-    /**
-     * 样式,默认为图标+文字样式
-     */
-    private int mExpandStyle = STYLE_DEFAULT;
-
-    /**
-     * 展开/收缩布局对应图标的宽度,默认布局是15dp
-     */
-    private int mExpandIconWidth = 15;
-
-    /**
-     * 缩略文本展示时与展开/搜索布局的间距,默认是20dp
-     */
-    private int mSpaceMargin = 20;
-
-    /**
-     * 文本显示的lineSpacingExtra,对应于TextView的lineSpacingExtra属性
-     */
-    private float mLineSpacingExtra = 0.0f;
-
-    /**
-     * 文本显示的lineSpacingMultiplier,对应于TextView的lineSpacingMultiplier属性
-     */
-    private float mLineSpacingMultiplier = 1.0f;
-
-
-    private OnExpandStateChangeListener mOnExpandStateChangeListener;
-
-    /**
-     * 监听器
-     */
-    public interface OnExpandStateChangeListener {
-        /**
-         * 展开时回调
-         */
-        void onExpand();
-
-        /**
-         * 收起时回调
-         */
-        void onCollapse();
-
-    }
-
-    public ExpandLayout(Context context) {
-        this(context, null);
-    }
-
-    public ExpandLayout(Context context, AttributeSet attrs) {
-        this(context, attrs, 0);
-    }
-
-    public ExpandLayout(Context context, AttributeSet attrs, int defStyleAttr) {
-        super(context, attrs, defStyleAttr);
-        mContext = context;
-        initAttributeSet(context, attrs);
-        initView();
-    }
-
-    /**
-     * 初始化自定义属性
-     *
-     * @param context
-     * @param attrs
-     */
-    private void initAttributeSet(Context context, AttributeSet attrs) {
-        TypedArray ta = context.obtainStyledAttributes(attrs, R.styleable.ExpandLayout);
-        if (ta != null) {
-            mMaxLines = ta.getInt(R.styleable.ExpandLayout_maxLines, 2);
-            mExpandIconResId = ta.getResourceId(R.styleable.ExpandLayout_expandIconResId, 0);
-            mCollapseIconResId = ta.getResourceId(R.styleable.ExpandLayout_collapseIconResId, 0);
-            mExpandMoreStr = ta.getString(R.styleable.ExpandLayout_expandMoreText);
-            mCollapseLessStr = ta.getString(R.styleable.ExpandLayout_collapseLessText);
-            mContentTextSize = ta.getDimensionPixelSize(R.styleable.ExpandLayout_contentTextSize, sp2px(context, 14));
-            mContentTextColor = ta.getColor(R.styleable.ExpandLayout_contentTextColor, 0);
-            mExpandTextSize = ta.getDimensionPixelSize(R.styleable.ExpandLayout_expandTextSize, sp2px(context, 14));
-            mExpandTextColor = ta.getColor(R.styleable.ExpandLayout_expandTextColor, 0);
-            mExpandStyle = ta.getInt(R.styleable.ExpandLayout_expandStyle, STYLE_DEFAULT);
-            mExpandIconWidth = ta.getDimensionPixelSize(R.styleable.ExpandLayout_expandIconWidth, dp2px(context, 15));
-            mSpaceMargin = ta.getDimensionPixelSize(R.styleable.ExpandLayout_spaceMargin, dp2px(context, 20));
-            mLineSpacingExtra = ta.getDimensionPixelSize(R.styleable.ExpandLayout_lineSpacingExtra, 0);
-            mLineSpacingMultiplier = ta.getFloat(R.styleable.ExpandLayout_lineSpacingMultiplier, 1.0f);
-            ta.recycle();
-        }
-        // mMaxLines应该保证大于等于1
-        if (mMaxLines < 1) {
-            mMaxLines = 1;
-        }
-    }
-
-    /**
-     * 初始化View
-     */
-    private void initView() {
-        mRootView = inflate(mContext, R.layout.layout_expand, this);
-        mTvContent = findViewById(R.id.expand_content_tv);
-        mLayoutExpandMore = findViewById(R.id.expand_ll);
-        mIconExpand = findViewById(R.id.expand_iv);
-        mTvExpand = findViewById(R.id.expand_tv);
-        mTvExpandHelper = findViewById(R.id.expand_helper_tv);
-
-        mTvExpand.setText(mExpandMoreStr);
-        mTvContent.setTextSize(TypedValue.COMPLEX_UNIT_PX, mContentTextSize);
-        // 辅助TextView,与内容TextView大小相等,保证末尾图标和文字与内容文字居中显示
-        mTvExpandHelper.setTextSize(TypedValue.COMPLEX_UNIT_PX, mContentTextSize);
-        mTvExpand.setTextSize(TypedValue.COMPLEX_UNIT_PX, mExpandTextSize);
-        mTvContent.setLineSpacing(mLineSpacingExtra, mLineSpacingMultiplier);
-        mTvExpandHelper.setLineSpacing(mLineSpacingExtra, mLineSpacingMultiplier);
-        mTvExpand.setLineSpacing(mLineSpacingExtra, mLineSpacingMultiplier);
-        //默认设置展开图标
-        setExpandMoreIcon(mExpandIconResId);
-        setContentTextColor(mContentTextColor);
-        setExpandTextColor(mExpandTextColor);
-        switch (mExpandStyle) {
-            case STYLE_ICON:
-                mIconExpand.setVisibility(VISIBLE);
-                mTvExpand.setVisibility(GONE);
-                break;
-            case STYLE_TEXT:
-                mIconExpand.setVisibility(GONE);
-                mTvExpand.setVisibility(VISIBLE);
-                break;
-            default:
-                mIconExpand.setVisibility(VISIBLE);
-                mTvExpand.setVisibility(VISIBLE);
-                break;
-        }
-    }
-
-    @Override
-    protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
-        super.onMeasure(widthMeasureSpec, heightMeasureSpec);
-
-        if (mMeasuredWidth <= 0 && getMeasuredWidth() > 0) {
-            mMeasuredWidth = getMeasuredWidth();
-            measureEllipsizeText(mMeasuredWidth);
-        }
-    }
-
-    /**
-     * 设置文本内容
-     *
-     * @param contentStr
-     */
-    public void setContent(String contentStr) {
-        setContent(contentStr, null);
-    }
-
-    /**
-     * 设置文本内容
-     *
-     * @param contentStr
-     * @param onExpandStateChangeListener 状态回调监听器
-     */
-    public void setContent(String contentStr, final OnExpandStateChangeListener onExpandStateChangeListener) {
-        if (TextUtils.isEmpty(contentStr) || mRootView == null) {
-            return;
-        }
-        mOriginContentStr = contentStr;
-        mOnExpandStateChangeListener = onExpandStateChangeListener;
-        // 此处需要先设置mTvContent的text属性,防止在列表中,由于没有获取到控件宽度mMeasuredWidth,先执行onMeasure方法测量时,导致文本只能显示一行的问题
-        // 提前设置好text,再执行onMeasure,则没有该问题
-        mTvContent.setMaxLines(mMaxLines);
-        mTvContent.setText(mOriginContentStr);
-        // 获取文字的宽度
-        if (mMeasuredWidth <= 0) {
-
-            getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
-                @Override
-                public void onGlobalLayout() {
-                    // 用完后立即移除监听,防止多次回调的问题
-                    getViewTreeObserver().removeOnGlobalLayoutListener(this);
-                    mMeasuredWidth = getMeasuredWidth();
-
-                    measureEllipsizeText(mMeasuredWidth);
-                }
-            });
-        } else {
-
-            measureEllipsizeText(mMeasuredWidth);
-        }
-    }
-
-    /**
-     * 处理文本分行
-     *
-     * @param lineWidth
-     */
-    private void measureEllipsizeText(int lineWidth) {
-        if (TextUtils.isEmpty(mOriginContentStr)) {
-            return;
-        }
-        handleMeasureEllipsizeText(lineWidth);
-    }
-
-    /**
-     * 使用StaticLayout处理文本分行和布局
-     *
-     * @param lineWidth 文本(布局)宽度
-     */
-    private void handleMeasureEllipsizeText(int lineWidth) {
-        TextPaint textPaint = mTvContent.getPaint();
-        StaticLayout staticLayout = new StaticLayout(mOriginContentStr, textPaint, lineWidth, Layout.Alignment.ALIGN_NORMAL, mLineSpacingMultiplier, mLineSpacingExtra, false);
-        int lineCount = staticLayout.getLineCount();
-        if (lineCount <= mMaxLines) {
-            // 不足最大行数,直接设置文本
-            //少于最小展示行数,不再展示更多相关布局
-            mEllipsizeStr = mOriginContentStr;
-            mLayoutExpandMore.setVisibility(View.GONE);
-            mTvContent.setMaxLines(Integer.MAX_VALUE);
-            mTvContent.setText(mOriginContentStr);
-        } else {
-            // 超出最大行数
-            mRootView.setOnClickListener(this);
-            mLayoutExpandMore.setVisibility(View.VISIBLE);
-            // Step1:第mMinLineNum行的处理
-            handleEllipsizeString(staticLayout, lineWidth);
-            // Step2:最后一行的处理
-            handleLastLine(staticLayout, lineWidth);
-            if (mIsExpand) {
-                expand();
-            } else {
-                // 默认收缩
-                collapse();
-            }
-        }
-    }
-
-    /**
-     * 处理缩略的字符串
-     *
-     * @param staticLayout
-     * @param lineWidth
-     */
-    private void handleEllipsizeString(StaticLayout staticLayout, int lineWidth) {
-        if (staticLayout == null) {
-            return;
-        }
-        TextPaint textPaint = mTvContent.getPaint();
-        // 获取到第mMinLineNum行的起始和结束位置
-        int startPos = staticLayout.getLineStart(mMaxLines - 1);
-        int endPos = staticLayout.getLineEnd(mMaxLines - 1);
-
-
-        // 修正,防止取子串越界
-        if (startPos < 0) {
-            startPos = 0;
-        }
-        if (endPos > mOriginContentStr.length()) {
-            endPos = mOriginContentStr.length();
-        }
-        if (startPos > endPos) {
-            startPos = endPos;
-        }
-        String lineContent = mOriginContentStr.substring(startPos, endPos);
-        float textLength = 0f;
-        if (lineContent != null) {
-            textLength = textPaint.measureText(lineContent);
-        }
-
-
-
-        String strEllipsizeMark = "...";
-        // 展开控件需要预留的长度,预留宽度:"..." + 展开布局与文本间距 +图标长度 + 展开文本长度
-        float reservedWidth = mSpaceMargin + textPaint.measureText(strEllipsizeMark) + getExpandLayoutReservedWidth();
-
-        int correctEndPos = endPos;
-        if (reservedWidth + textLength > lineWidth) {
-            // 空间不够,需要按比例截取最后一行的字符串,以确保展示的最后一行文本不会与可展开布局重叠
-            float exceedSpace = reservedWidth + textLength - lineWidth;
-            if (textLength != 0) {
-                correctEndPos = endPos - (int) ((exceedSpace / textLength) * 1.0f * (endPos - startPos));
-            }
-        }
-
-        String ellipsizeStr = mOriginContentStr.substring(0, correctEndPos);
-        mEllipsizeStr = removeEndLineBreak(ellipsizeStr) + strEllipsizeMark;
-    }
-
-    /**
-     * 处理最后一行文本
-     *
-     * @param staticLayout
-     * @param lineWidth
-     */
-    private void handleLastLine(StaticLayout staticLayout, int lineWidth) {
-        if (staticLayout == null) {
-            return;
-        }
-        int lineCount = staticLayout.getLineCount();
-        if (lineCount < 1) {
-            return;
-        }
-        int startPos = staticLayout.getLineStart(lineCount - 1);
-        int endPos = staticLayout.getLineEnd(lineCount - 1);
-
-
-        // 修正,防止取子串越界
-        if (startPos < 0) {
-            startPos = 0;
-        }
-        if (endPos > mOriginContentStr.length()) {
-            endPos = mOriginContentStr.length();
-        }
-        if (startPos > endPos) {
-            startPos = endPos;
-        }
-        String lastLineContent = mOriginContentStr.substring(startPos, endPos);
-
-        float textLength = 0f;
-        TextPaint textPaint = mTvContent.getPaint();
-        if (lastLineContent != null) {
-            textLength = textPaint.measureText(lastLineContent);
-        }
-
-        float reservedWidth = getExpandLayoutReservedWidth();
-        if (textLength + reservedWidth > lineWidth) {
-            //文字宽度+展开布局的宽度 > 一行最大展示宽度
-            //换行展示“收起”按钮及文字
-            mOriginContentStr += "\n";
-        }
-    }
-
-    /**
-     * 获取展开布局的展开收缩控件的预留宽度
-     *
-     * @return value = 图标长度 + 展开提示文本长度
-     */
-    private float getExpandLayoutReservedWidth() {
-        int iconWidth = 0;
-        if (mExpandStyle == STYLE_DEFAULT || mExpandStyle == STYLE_ICON) {
-            // ll布局中的内容,图标iv的宽是15dp,参考布局
-            iconWidth = mExpandIconWidth;
-        }
-        float textWidth = 0f;
-        if (mExpandStyle == STYLE_DEFAULT || mExpandStyle == STYLE_TEXT) {
-            textWidth = mTvExpand.getPaint().measureText(mExpandMoreStr);
-        }
-        // 展开控件需要预留的长度
-        return iconWidth + textWidth;
-    }
-
-    /**
-     * 清除行末换行符
-     *
-     * @param text
-     * @return
-     */
-    private String removeEndLineBreak(CharSequence text) {
-        if (text == null) {
-            return null;
-        }
-        String str = text.toString();
-        if (str.endsWith("\n")) {
-            str = str.substring(0, str.length() - 1);
-        }
-        return str;
-    }
-
-    /**
-     * 设置内容文字颜色
-     */
-    public void setContentTextColor(int colorId) {
-        if (colorId != 0) {
-            mContentTextColor = colorId;
-            mTvContent.setTextColor(colorId);
-        }
-    }
-
-    /**
-     * 设置更多/收起文字颜色
-     */
-    public void setExpandTextColor(int colorId) {
-        if (colorId != 0) {
-            mExpandTextColor = colorId;
-            mTvExpand.setTextColor(colorId);
-        }
-    }
-
-    /**
-     * 设置展开更多图标
-     *
-     * @param resId
-     */
-    public void setExpandMoreIcon(int resId) {
-        if (resId != 0) {
-            mExpandIconResId = resId;
-            // 当前处于收缩状态时,立即更新图标
-            if (!mIsExpand) {
-                mIconExpand.setImageResource(resId);
-            }
-        }
-    }
-
-    /**
-     * 设置收缩图标
-     *
-     * @param resId
-     */
-    public void setCollapseLessIcon(int resId) {
-        if (resId != 0) {
-            mCollapseIconResId = resId;
-            // 当前处于展开状态时,立即更新图标
-            if (mIsExpand) {
-                mIconExpand.setImageResource(resId);
-            }
-        }
-    }
-
-    /**
-     * 展开
-     */
-    public void expand() {
-        setIsExpand(true);
-        mTvContent.setMaxLines(Integer.MAX_VALUE);
-        mTvContent.setText(mOriginContentStr);
-        mTvExpand.setText(mCollapseLessStr);
-        if (mCollapseIconResId != 0) {
-            mIconExpand.setImageResource(mCollapseIconResId);
-        }
-    }
-
-    /**
-     * 收起
-     */
-    public void collapse() {
-        setIsExpand(false);
-        mTvContent.setMaxLines(mMaxLines);
-        mTvContent.setText(mEllipsizeStr);
-        mTvExpand.setText(mExpandMoreStr);
-        if (mExpandIconResId != 0) {
-            mIconExpand.setImageResource(mExpandIconResId);
-        }
-    }
-
-    public int getLineCount() {
-        return mTvContent == null ? 0 : mTvContent.getLineCount();
-    }
-
-    public void setShrinkLines(int shrinkLines) {
-        mMaxLines = shrinkLines;
-    }
-
-    public void setIsExpand(boolean isExpand) {
-        mIsExpand = isExpand;
-    }
-
-    public boolean isExpand() {
-        return mIsExpand;
-    }
-
-    /**
-     * 转换dp为px
-     *
-     * @param context
-     * @param dipValue
-     * @return
-     */
-    private int dp2px(Context context, float dipValue) {
-        final float scale = context.getResources().getDisplayMetrics().density;
-        return (int) (dipValue * scale + 0.5f);
-    }
-
-    /**
-     * 转换sp为px
-     *
-     * @param context
-     * @param spValue
-     * @return
-     */
-    public int sp2px(Context context, float spValue) {
-        float fontScale = context.getResources().getDisplayMetrics().scaledDensity;
-        return (int) (spValue * fontScale + 0.5f);
-    }
-
-    @Override
-    public void onClick(View v) {
-        if (!mIsExpand) {
-            //之前是收缩状态,点击后展开
-            expand();
-            if (mOnExpandStateChangeListener != null) {
-                mOnExpandStateChangeListener.onExpand();
-            }
-        } else {
-            //之前是展开状态,点击后收缩
-            collapse();
-            if (mOnExpandStateChangeListener != null) {
-                mOnExpandStateChangeListener.onCollapse();
-            }
-        }
-    }
-}

+ 0 - 108
app/src/main/java/com/adealink/weparty/commonui/widget/LikeButton.kt

@@ -1,108 +0,0 @@
-package com.adealink.weparty.commonui.widget
-
-import android.content.Context
-import android.content.res.TypedArray
-import android.util.AttributeSet
-import android.view.LayoutInflater
-import androidx.annotation.DrawableRes
-import androidx.annotation.StyleRes
-import androidx.constraintlayout.widget.ConstraintLayout
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.ext.gone
-import com.adealink.weparty.commonui.ext.show
-import com.adealink.weparty.databinding.LayoutLikeButtonBinding
-import com.opensource.svgaplayer.SVGACallback
-
-class LikeButton @JvmOverloads constructor(
-    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0,
-) : ConstraintLayout(context, attrs, defStyleAttr) {
-
-    private val binding = LayoutLikeButtonBinding.inflate(LayoutInflater.from(context), this)
-
-    private var liked: Boolean = false
-    private var likeSvgaResource: String? = null
-    private var likeImage: Int = 0
-    private var likedImage: Int = 0
-
-    init {
-        initAttrs(attrs)
-    }
-
-    private fun initAttrs(attrs: AttributeSet?) {
-        val typedArray: TypedArray = context.obtainStyledAttributes(
-            attrs,
-            R.styleable.LikeButton
-        )
-        val bgResourceId = typedArray.getResourceId(R.styleable.LikeButton_like_background, 0)
-        likeImage = typedArray.getResourceId(R.styleable.LikeButton_like_image, 0)
-        likedImage = typedArray.getResourceId(R.styleable.LikeButton_liked_image, 0)
-        likeSvgaResource = typedArray.getString(R.styleable.LikeButton_liked_anim)
-        typedArray.recycle()
-
-        setBgResource(bgResourceId)
-        updateUI()
-    }
-
-    fun setStyle(@StyleRes resId: Int) {
-        val ta = context.obtainStyledAttributes(resId, R.styleable.LikeButton)
-        val bgResourceId = ta.getResourceId(R.styleable.LikeButton_like_background, 0)
-        likeImage = ta.getResourceId(R.styleable.LikeButton_like_image, 0)
-        likedImage = ta.getResourceId(R.styleable.LikeButton_liked_image, 0)
-        likeSvgaResource = ta.getString(R.styleable.LikeButton_liked_anim)
-        ta.recycle()
-        setBgResource(bgResourceId)
-        updateUI()
-    }
-
-    fun setLikedAnim(path: String) {
-        likeSvgaResource = path
-    }
-
-    fun setBgResource(@DrawableRes resId: Int) {
-        binding.ivBg.setBackgroundResource(resId)
-    }
-
-    fun setLikeImage(@DrawableRes resId: Int) {
-        likeImage = resId
-        updateUI()
-    }
-
-    fun setLikedImage(@DrawableRes resId: Int) {
-        likedImage = resId
-        updateUI()
-    }
-
-    fun setLikeStatus(liked: Boolean) {
-        this.liked = liked
-        updateUI()
-    }
-
-    fun playLikeAnim(liked: Boolean) {
-        this.liked = liked
-        if (likeSvgaResource.isNullOrEmpty()) {
-            updateUI()
-        } else {
-            binding.svgaLike.show()
-            binding.ivLike.gone()
-            binding.svgaLike.callback = object : SVGACallback {
-                override fun onFinished() {
-                    if (isAttachedToWindow) {
-                        binding.svgaLike.gone()
-                        binding.ivLike.show()
-                        updateUI()
-                    }
-                }
-            }
-            binding.svgaLike.setAsset(likeSvgaResource)
-        }
-    }
-
-    private fun updateUI() {
-        if (liked) {
-            binding.ivLike.setImageResource(likedImage)
-        } else {
-            binding.ivLike.setImageResource(likeImage)
-        }
-    }
-
-}

+ 1 - 40
app/src/main/java/com/adealink/weparty/commonui/widget/floatview/FloatViewFactory.kt

@@ -6,52 +6,13 @@ import com.adealink.weparty.commonui.widget.floatview.data.IFloatViewFactory
 import com.adealink.weparty.commonui.widget.floatview.view.BaseFloatView
 import com.adealink.weparty.debug.SysMemoryUsageFloatData
 import com.adealink.weparty.debug.SysMemoryUsageFloatView
-import com.adealink.weparty.module.call.CallModule
-import com.adealink.weparty.module.couple.CoupleModule
-import com.adealink.weparty.module.follow.FollowModule
-import com.adealink.weparty.module.game.GameModule
-import com.adealink.weparty.module.game.floatview.GameEntranceFloatData
-import com.adealink.weparty.module.game.floatview.GameEntranceFloatView
-import com.adealink.weparty.module.headline.HeadlineModule
-import com.adealink.weparty.module.level.LevelModule
-import com.adealink.weparty.module.message.MessageModule
-import com.adealink.weparty.module.operation.newuser.HomeBannerEntranceFloatData
-import com.adealink.weparty.module.operation.newuser.HomeBannerEntranceFloatView
-import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.room.RoomModule
-import com.adealink.weparty.module.task.HomeIncomeFloatData
-import com.adealink.weparty.module.task.HomeIncomeFloatView
-import com.adealink.weparty.module.userlist.floatview.CallMatchEntranceFloatData
-import com.adealink.weparty.module.userlist.floatview.CallMatchEntranceFloatView
-import com.adealink.weparty.module.wallet.WalletModule
-import com.adealink.weparty.network.view.NetworkReconnectFloatData
-import com.adealink.weparty.network.view.NetworkReconnectFloatView
 
 class FloatViewFactory : IFloatViewFactory {
 
     override fun <V : BaseFloatView<out IFloatData>> createFloatView(data: IFloatData): V? {
         val floatView = when (data.windowType()) {
-            FloatWindowType.NETWORK_DISCONNECT_TIP -> NetworkReconnectFloatView(data as NetworkReconnectFloatData)
-            FloatWindowType.MINIMIZE_ROOM -> RoomModule.getMinimizedRoomView(data)
-            FloatWindowType.COUPLE_ONLINE_NOTIFY -> CoupleModule.getCoupleOnlineFloatView(data)
-            FloatWindowType.PURCHASE_COIN_NOTIFY -> WalletModule.getPurchaseCoinFloatView(data)
-            FloatWindowType.WEDDING_RED_PACKET_HEADLINE -> RoomModule.getWeddingRedPacketFloatView(data)
-            FloatWindowType.SPECIAL_FOLLOW_ONLINE_NOTIFY -> FollowModule.getSpecialFollowOnlineFloatView(data)
-            FloatWindowType.NOTIFICATION_MESSAGE -> MessageModule.getNotificationMessageFloatView(data)
-            FloatWindowType.PROFILE_MUSIC -> ProfileModule.getProfileMusicFloatView(data)
-            FloatWindowType.CALL_1V1_INCOMING -> CallModule.getIncomingFloatView(data)
-            FloatWindowType.CALL_1V1_CALLING -> CallModule.getCallingFloatView(data)
-            FloatWindowType.LEVEL_UPGRADE_HEADLINE -> LevelModule.getLevelUpgradeHeadlineFloatView(data)
-            FloatWindowType.HOME_INCOME -> HomeIncomeFloatView(data as HomeIncomeFloatData)
-            FloatWindowType.HOME_NEW_USER_LOTTERY -> HomeBannerEntranceFloatView(data as HomeBannerEntranceFloatData)
+            FloatWindowType.NETWORK_DISCONNECT_TIP -> null//NetworkReconnectFloatView(data as NetworkReconnectFloatData)
             FloatWindowType.MEMORY_USAGE -> SysMemoryUsageFloatView(data as SysMemoryUsageFloatData)
-            FloatWindowType.ROCKET_HEADLINE -> GameModule.getRocketHeadlineFloatView(data)
-            FloatWindowType.GAME_ENTRANCE -> GameEntranceFloatView(data as GameEntranceFloatData)
-            FloatWindowType.GLOBAL_HEADLINE -> HeadlineModule.getGlobalHeadlineFloatView(data)
-            FloatWindowType.CALL_MATCH_ENTRANCE -> CallMatchEntranceFloatView(data as CallMatchEntranceFloatData)
-            FloatWindowType.NOTIFICATION_INCOME_MESSAGE -> MessageModule.getNotificationIncomeMessageFloatView(data)
-            FloatWindowType.MATCH_NOTIFY -> CallModule.getMatchFloatView(data)
-            FloatWindowType.MATCH_FLOAT_WINDOW -> CallModule.getMatchFloatView(data)
         }
         return floatView as? V
     }

+ 1 - 20
app/src/main/java/com/adealink/weparty/commonui/widget/floatview/data/IFloatData.kt

@@ -2,26 +2,7 @@ package com.adealink.weparty.commonui.widget.floatview.data
 
 enum class FloatWindowType(val type: String) {
     NETWORK_DISCONNECT_TIP("network_disconnect_tip"),
-    MINIMIZE_ROOM("minimize_room"),
-    COUPLE_ONLINE_NOTIFY("couple_online_notify"),
-    PURCHASE_COIN_NOTIFY("purchase_coin_notify"),
-    WEDDING_RED_PACKET_HEADLINE("wedding_red_packet_headline"),
-    SPECIAL_FOLLOW_ONLINE_NOTIFY("special_follow_online_notify"),
-    NOTIFICATION_MESSAGE("notification_message"),
-    PROFILE_MUSIC("profile_music"),
-    CALL_1V1_INCOMING("call_1v1_incoming"),
-    CALL_1V1_CALLING("call_1v1_calling"),
-    LEVEL_UPGRADE_HEADLINE("level_upgrade_headline"),
-    HOME_INCOME("home_income"),
-    HOME_NEW_USER_LOTTERY("home_new_user_lottery"),
-    MEMORY_USAGE("memory_usage"),
-    ROCKET_HEADLINE("rocket_headline"),
-    GAME_ENTRANCE("game_entrance"),
-    GLOBAL_HEADLINE("global_headline"), //全服横幅,房间内房间外
-    NOTIFICATION_INCOME_MESSAGE("notification_income_message"),
-    CALL_MATCH_ENTRANCE("call_match_entrance"),
-    MATCH_FLOAT_WINDOW("match_float_window"),
-    MATCH_NOTIFY("match_notify"),
+    MEMORY_USAGE("memory_usage")
 }
 
 

+ 1 - 5
app/src/main/java/com/adealink/weparty/commonui/widget/floatview/mode/ApplicationModeWindowManager.kt

@@ -93,11 +93,7 @@ open class ApplicationModeWindowManager : BaseWindowManager() {
             val topViewCount = viewAddMap.count {
                 it is BaseLayoutFloatView && it.baseFloatData.gravity() == GRAVITY_TOP
             }
-            if (topViewCount >= MAX_SHOW_VIEW_COUNT
-                && (view.baseFloatData.windowType() != FloatWindowType.CALL_1V1_INCOMING
-                        && view.baseFloatData.windowType() != FloatWindowType.NOTIFICATION_MESSAGE
-                        && view.baseFloatData.windowType() != FloatWindowType.MATCH_NOTIFY)
-            ) {
+            if (topViewCount >= MAX_SHOW_VIEW_COUNT) {
                 Log.w(
                     TAG_FLOAT_VIEW,
                     "${SUB_TAG}, addViewImmediate, viewAddMap size(${viewTags.size}) >= MAX_SHOW_VIEW_COUNT($MAX_SHOW_VIEW_COUNT), not add $view"

+ 2 - 87
app/src/main/java/com/adealink/weparty/config/Data.kt

@@ -5,7 +5,6 @@ import com.adealink.frame.util.ONE_MINUTE
 import com.adealink.frame.util.PackageUtil
 import com.adealink.weparty.channel.getChannel
 import com.adealink.weparty.constant.ProductFlavor
-import com.google.gson.annotations.GsonNullable
 import com.google.gson.annotations.SerializedName
 
 data class GetGlobalConfigReq(
@@ -23,76 +22,8 @@ data class GetGlobalConfigRes(
 )
 
 enum class GlobalConfigType(val value: Int) {
-    GLOBAL_ROOM_BANNER(4),//房间列表banner配置
-    GLOBAL_ROOM_ACTIVITY(5),//房间活动位配置
-    GLOBAL_REPLACE_HOST(6),//替换域名配置
-    GLOBAL_JS_HOST_WHITELIST(7),//JS域名白名单
-    GLOBAL_NEW_VERSION_PRIORITY(9),//新版本优先级配置
-    GLOBAL_BACKUP_HOST(16),//备用域名配置
-    GLOBAL_WEB_FORCE_CND(17),//web强制cdn
-    GLOBAL_WEB_CONFIG(18),//web通用配置
-    GLOBAL_ROOM_CP_ACTIVITY(19),//房间内CP活动配置
-    GLOBAL_FORCE_UPDATE(20),//强更配置
-    GLOBAL_TOP_FAMILY_ROOM(22),//top家族消息配置
-    GLOBAL_WORLD_CUP_ROOM_TEAM_SUPPORT(24),//房间守护的球队,当数值为空时,表示房间未选择守护的球队,该属性值不允许修改
-    GLOBAL_WORLD_CUP_TOP8_TEAMS(25),//2022世界杯8强球队,房间全局配置,其值为WorldCupEncourageConfig的json数据类型
-    GLOBAL_RANK_STYLE(26),//排行榜样式
-    GLOBAL_ROOM_WELCOME_MSG(28),//房间欢迎消息
-    GLOBAL_WELCOME_NEW_SAY_HI(29),//新人进场Say Hi文案
-    GLOBAL_ROOM_GUARD_TREASURE(31),//宝箱守护配置
-    GLOBAL_ROOM_MUSIC(32),//房间音乐配置
-    GLOBAL_LUDO_ENTRANCE(35),//Ludo游戏入口开关
-    GLOBAL_BROADCAST_SWITCH_LEVEL(36),//全服广播开关级别
-    GLOBAL_CUSTOM_THEME_CONFIG(37),//自定义主题配置
-    GLOBAL_BETTING_PK(38),//赌注PK入口
-    GLOBAL_ROOM_ON_MIC_MODE(40),//上麦模式,1,开放模式;0,邀请模式。默认1
-    GLOBAL_SHARE_DYNAMIC_LINK_PREFIX(370), //分享动态链接前缀
-    GLOBAL_ROOM_LIST_ENTRANCE(41),//1、排行榜 2、ludo 3、嗨歌 4、谁是卧底 入口开关
-    GLOBAL_DYNAMIC_AVATAR_LEVEL(42),//动态头像所需的等级
-    GLOBAL_DYNAMIC_ROOM_COVER(43),//动态房间封面需要的金币数量
-    GLOBAL_ROOM_LIMIT_TIME_GIFT(46),//限时礼物
-    GLOBAL_ROOM_LUCKY_NUMBER(47),//LUCKY_NUMBER
-    GLOBAL_HEADLINE_RANDOM_PLAY(48), // 全服横幅队列随机播放开关
-    GLOBAL_ROOM_WEDDING_MIC_MODE_ALLOW_CONFIG(49),//是否可开启婚礼房麦位模式
-    GLOBAL_ROOM_WEDDING_BLESSING_CONFIG(50),//婚礼房送礼祝福值
-    GLOBAL_HOME_TAB_MOMENT(51), // 首页 Moment Tab 大区显示
-    GLOBAL_ROOM_CAR_EFFECT(52),//是否开启座驾特效,1,开启,0关闭。默认1
-    GLOBAL_ROOM_GIFT_EFFECT(53),//是否开启礼物特效,1,开启,0关闭。默认1
-    GLOBAL_ROOM_RED_PACKET_DIALOG(54),//是否开启红包弹窗,1,开启,0关闭。默认1
-    GLOBAL_ROOM_EFFECT_CONFIG_SETTING(55),// 52,53,54特效开关,1,开启,0关闭。默认0
-    GLOBAL_RECHARGE_PACKAGE(56),//首充礼包,旧首充礼包为10
-    GLOBAL_VIDEO_ROOM_ENTRANCE_LEVEL_LIMIT(57),//视频房入口等级限制
-    GLOBAL_CDN_RESIZE(60),//cdn配置
-    GLOBAL_GAME_QUICK_MESSAGE(61),//游戏快捷消息
-    GLOBAL_ROOM_SVIP_MIC_EFFECT_CONFIG(67),//房间svip麦位样式配置
-    GLOBAL_SEND_RED_PACKET_CONFIG(68),//发红包配置
-    GLOBAL_ROOM_DECORATION_CONFIG(75),//房间欢迎幕布
-
-    GLOBAL_URL_CONFIG(76),
-    GLOBAL_DELETA_ACCOUNT_TIPS(77),//url配置
-    GLOBAL_TEENPATTI_VERSION_INFO(80), //teen patti游戏版本信息
-    GLOBAL_RUSSIAN_TURNTABLE_VERSION_INFO(81), //russian turntable游戏版本信息
-    GLOBAL_GREEDYBOX_VERSION_INFO(82), //greedy_box游戏版本信息
-    GLOBAL_TEXAS_COWBOY_VERSION_INFO(83), //texas cowboy游戏版本信息
-    GLOBAL_JACKPOT_SLOT_VERSION_INFO(84), //jackpot slot游戏版本信息
-    GLOBAL_DRAGON_TIGER_FIGHT_VERSION_INFO(85), //dragon tiger fight游戏版本信息
-
-    GLOBAL_CONFIG_LUCKY_COIN_REGION(86), //代币,可见大区
-    GLOBAL_APPROVING_VERSION(90),//提审版本信息
-    GLOBAL_CALL_1V1(97), //1v1Call
-    GLOBAL_MALE_DAILY_CHARGE_ACTIVITY_SWITCH(99), // 男性每日充值活动开关配置
-
-    GLOBAL_CERTIFICATION_CONFIG(102),//真人认证配置
-    GLOBAL_VOICE_CALL_REFUSE_TIMES_THRESHOLD(103),//拒接实时通话次数触发弹窗提示
-
-    GLOBAL_FEMALE_DAILY_REPORT(104), // 女性每日上报配置
-    GLOBAL_MINI_SLOT(107), // 小老虎机配置
-    GLOBAL_USER_IMAGE_MIN_SIZE(108), // 用户上传图片最小尺寸,默认800
-    GLOBAL_NORMAL_IMAGE_MAX_SIZE(109), // 普通图片最大尺寸,默认2048
-    GLOBAL_WEEK_RECHARGE_ACTIVITY_ID(111), // 每周充值活动ID
-    GLOBAL_WEEK_RECHARGE_LOTTERY_ID(112), // 每周充值抽奖活动ID
-    GLOBAL_STORE_ID_DIGIT(121), //商城id位数配置
-    GLOBAL_VIDEO_ROOM_PLAYER_LOAD_TYPE(130)//视频房播放器初始化类型
+    //GLOBAL_VIDEO_ROOM_PLAYER_LOAD_TYPE(130)//视频房播放器初始化类型
+    GLOBAL_APPROVING_VERSION(0), //提审配置
     ;
 
     companion object {
@@ -102,22 +33,6 @@ enum class GlobalConfigType(val value: Int) {
     }
 }
 
-data class GameVersionConfig(
-    @SerializedName("version") val version: String,
-    @GsonNullable
-    @SerializedName("versionCode") val versionCode: Int,
-    @GsonNullable
-    @SerializedName("minClientVersion") val minClientVersion: Int,
-    @GsonNullable
-    @SerializedName("minLiteClientVersion") val minLiteClientVersion: Int,
-    @GsonNullable
-    @SerializedName("resourceUrl") val resourceUrl: String,
-    @GsonNullable
-    @SerializedName("changeList") val changeList: String?,
-
-    var needDownload: Boolean = true //包体需要下载
-)
-
 data class ApprovingVersionConfig(
     @SerializedName("android")
     val android: String,

+ 0 - 109
app/src/main/java/com/adealink/weparty/config/GlobalConfigManager.kt

@@ -1,31 +1,17 @@
 package com.adealink.weparty.config
 
 import com.adealink.frame.base.Rlt
-import com.adealink.frame.coroutine.dispatcher.Dispatcher
 import com.adealink.frame.data.collections.ConcurrentList
 import com.adealink.frame.data.json.froJsonErrorNull
-import com.adealink.frame.data.json.gson
 import com.adealink.frame.data.json.toJsonErrorNull
 import com.adealink.frame.frame.BaseFrame
 import com.adealink.frame.frame.IListener
-import com.adealink.frame.game.TAG_GAME
 import com.adealink.frame.log.Log
 import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 import com.adealink.frame.network.data.Res
-import com.adealink.frame.util.PackageUtil
 import com.adealink.weparty.App
-import com.adealink.weparty.commonui.toast.util.showToast
-import com.adealink.weparty.module.game.data.GameAppVersionOldCanPlayGameError
-import com.adealink.weparty.module.game.data.GameAppVersionOldNeedUpgradeError
-import com.adealink.weparty.module.game.data.GameInfoLostError
-import com.adealink.weparty.module.game.data.GameVersion
-import com.adealink.weparty.module.game.data.GameVersionNotMatchError
-import com.adealink.weparty.module.profile.decorate.data.DecorType
-import com.adealink.weparty.storage.file.FilePath
 import kotlinx.coroutines.launch
 import kotlinx.coroutines.withContext
-import java.io.File
-import java.io.FileReader
 import java.util.concurrent.ConcurrentHashMap
 
 val globalConfigManager: IGlobalConfigManager by lazy { GlobalConfigManager() }
@@ -206,99 +192,4 @@ class GlobalConfigManager : BaseFrame<IListener>(), IGlobalConfigManager {
             //listenerMap.clear()
         }
     }
-
-    override suspend fun checkGameValid(type: GlobalConfigType): Rlt<Any> {
-        val remoteVersionInfo =
-            froJsonErrorNull(configMap[type.value]?.firstOrNull(), GameVersionConfig::class.java)
-        val localGameInfo = getGameInfo(type)
-        Log.i(TAG_GAME, "checkGameValid type: $type")
-        Log.i(TAG_GAME, "getRemoteGameInfo version: $remoteVersionInfo")
-        Log.i(TAG_GAME, "getLocalGameInfo version: $localGameInfo")
-        if (remoteVersionInfo == null) {
-            return Rlt.Failed(GameInfoLostError())
-        }
-        if (remoteVersionInfo.minClientVersion > PackageUtil.getVersionCode()) {
-            return if (localGameInfo != null) {
-                //远端最小版本支持版本已经大于当前APP版本
-                Rlt.Failed(GameAppVersionOldCanPlayGameError())
-            } else {
-                //用户本地没有游戏,提示升级APP方可下载最新游戏版本
-                Rlt.Failed(GameAppVersionOldNeedUpgradeError())
-            }
-        }
-        if (localGameInfo != null && localGameInfo.versionCode < remoteVersionInfo.versionCode) {
-            //本地版本太小,远端已经更新了最新的游戏资源包
-            return Rlt.Failed(GameVersionNotMatchError())
-        }
-        return Rlt.Success(Any())
-    }
-
-    override suspend fun checkGameValidWithConfig(type: GlobalConfigType): Pair<Boolean, GameVersionConfig?> {
-        val newVersion = froJsonErrorNull(
-            globalConfigManager.suspendGetConfig(type)?.firstOrNull(),
-            GameVersionConfig::class.java
-        )
-        return when (val rlt = globalConfigManager.checkGameValid(type)) {
-            is Rlt.Success -> {
-                // 更新版本信息需要下载
-                newVersion?.needDownload = true
-                Pair(true, newVersion)
-            }
-
-            is Rlt.Failed -> {
-                android.util.Log.e(TAG_GAME, "offline game check, rlt: ${rlt.error.msg}")
-                showToast(rlt.error.msg)
-
-                when (rlt.error) {
-                    is GameAppVersionOldCanPlayGameError -> {
-                        // App版本过旧,但仍可玩本地游戏
-                        // 标记为无需下载,并返回true
-                        newVersion?.needDownload = false
-                        Pair(true, newVersion)
-                    }
-                    is GameVersionNotMatchError->{
-                        newVersion?.needDownload = true
-                        Pair(true, newVersion)
-                    }
-
-                    else -> {
-                        // 其他错误,返回false
-                        Pair(false, newVersion)
-                    }
-                }
-            }
-        }
-    }
-
-    private suspend fun getGameInfo(gameType: GlobalConfigType): GameVersion? {
-        val type = when(gameType) {
-            GlobalConfigType.GLOBAL_TEXAS_COWBOY_VERSION_INFO -> DecorType.TEXAS_GAME.value
-            GlobalConfigType.GLOBAL_TEENPATTI_VERSION_INFO -> DecorType.TEEN_PATTI_GAME.value
-            GlobalConfigType.GLOBAL_RUSSIAN_TURNTABLE_VERSION_INFO -> DecorType.RUSSIAN_TURNTABLE_GAME.value
-            GlobalConfigType.GLOBAL_GREEDYBOX_VERSION_INFO -> DecorType.GREEDY_BOX_GAME.value
-            GlobalConfigType.GLOBAL_JACKPOT_SLOT_VERSION_INFO -> DecorType.JACKPOT_SLOT_GAME.value
-            GlobalConfigType.GLOBAL_DRAGON_TIGER_FIGHT_VERSION_INFO -> DecorType.DRAGON_TIGER_FIGHT_GAME.value
-            GlobalConfigType.GLOBAL_MINI_SLOT -> DecorType.SHOW_MINI_SLOT.value
-            else -> 0
-        }
-        val path = "${FilePath.offlineH5}game-${type}"
-        val rootPath = File(path)
-        if (!rootPath.exists() || !rootPath.isDirectory) {
-            return null
-        }
-        val gameVersion: GameVersion? = withContext(Dispatcher.WENEXT_THREAD_POOL) {
-            val versionFile = File("${path}${File.separator}version.txt")
-            if (versionFile.exists() && versionFile.isFile) {
-                try {
-                    gson.fromJson(FileReader(versionFile), GameVersion::class.java)
-                } catch (e: Exception) {
-                    Log.e(TAG_GAME, "getLocalGameInfo version fail, for ${e.message}")
-                    null
-                }
-            } else {
-                null
-            }
-        }
-        return gameVersion
-    }
 }

+ 0 - 3
app/src/main/java/com/adealink/weparty/config/IGlobalConfigManager.kt

@@ -1,6 +1,5 @@
 package com.adealink.weparty.config
 
-import com.adealink.frame.base.Rlt
 import com.adealink.frame.mvvm.livedata.OnceMutableLiveData
 
 interface IGlobalConfigManager {
@@ -13,6 +12,4 @@ interface IGlobalConfigManager {
     fun addListener(configType: GlobalConfigType, l: IGlobalConfigListener)
     fun removeListener(configType: GlobalConfigType, l: IGlobalConfigListener)
     fun logout()
-    suspend fun checkGameValid(type: GlobalConfigType): Rlt<Any>
-    suspend fun checkGameValidWithConfig(type: GlobalConfigType): Pair<Boolean, GameVersionConfig?>
 }

+ 3 - 6
app/src/main/java/com/adealink/weparty/constant/Flavors.kt

@@ -1,19 +1,16 @@
 package com.adealink.weparty.constant
 
 enum class ProductFlavor(val flavor: String) {
-    YOKI("yoki");
+    LANU("lanu");
 
     companion object {
 
         fun map(flavor: String): ProductFlavor {
-            return values().firstOrNull { it.flavor == flavor } ?: YOKI
-        }
-
-        fun isProductLite(flavor: String): Boolean {
-            return false
+            return values().firstOrNull { it.flavor == flavor } ?: LANU
         }
 
         fun isCurrProductLite(): Boolean {
+            // TODO: Lite版提审版本
             return false
         }
 

+ 0 - 4
app/src/main/java/com/adealink/weparty/constant/Tags.kt

@@ -3,10 +3,6 @@ package com.adealink.weparty.constant
 import android.os.SystemClock
 import com.adealink.frame.log.Log
 
-/**
- * Created by ratel on 2024/5/1.
- */
-
 const val TAG_TIME = "tag_time"
 const val TAG_TIME_APP_START = "${TAG_TIME}_app_start"
 const val TAG_TIME_ROOM_LIST = "${TAG_TIME}_room_list"

+ 0 - 3
app/src/main/java/com/adealink/weparty/crash/CrashConfig.kt

@@ -6,9 +6,6 @@ import com.adealink.frame.router.Router
 import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.AppModule
 
-/**
- * Created by sunxiaodong on 2021/9/8.
- */
 class CrashConfig : ICrashConfig {
 
     override fun goHome() {

+ 0 - 4
app/src/main/java/com/adealink/weparty/crash/CrashInit.kt

@@ -15,10 +15,6 @@ import com.adealink.weparty.apm.stat.APMStatEvent
 import kotlinx.coroutines.CoroutineScope
 import kotlinx.coroutines.launch
 
-/**
- * Created by sunxiaodong on 2022/11/21.
- */
-
 const val TAG_CRASH = "tag_crash"
 
 fun initCrash(application: Application) {

+ 16 - 66
app/src/main/java/com/adealink/weparty/debug/DebugActivity.kt

@@ -1,8 +1,6 @@
 package com.adealink.weparty.debug
 
 import android.annotation.SuppressLint
-import android.net.Uri
-import android.os.Bundle
 import androidx.activity.viewModels
 import androidx.lifecycle.lifecycleScope
 import com.adealink.frame.base.AppBase
@@ -19,20 +17,14 @@ import com.adealink.frame.router.annotation.RouterUri
 import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.App
 import com.adealink.weparty.commonui.BaseActivity
-import com.adealink.weparty.commonui.dialogfragment.showDialogFragment
 import com.adealink.weparty.commonui.ext.gone
 import com.adealink.weparty.commonui.ext.show
 import com.adealink.weparty.commonui.toast.util.showToast
-import com.adealink.weparty.commonui.widget.BottomDialogFragment
 import com.adealink.weparty.commonui.widget.floatview.WindowManagerProxy
 import com.adealink.weparty.commonui.widget.floatview.data.MODE_APPLICATION
 import com.adealink.weparty.databinding.ActivityDebugBinding
 import com.adealink.weparty.log.viewmodel.LogViewModelFactory
 import com.adealink.weparty.module.account.AccountLocalService
-import com.adealink.weparty.module.call.Call
-import com.adealink.weparty.module.call.CallModule
-import com.adealink.weparty.module.setting.Setting
-import com.adealink.weparty.module.webview.Web
 import com.adealink.weparty.storage.AppPref
 import com.adealink.weparty.util.goLocalLinkPage
 import com.google.gson.annotations.SerializedName
@@ -41,9 +33,6 @@ import kotlinx.coroutines.launch
 import retrofit2.http.Body
 import retrofit2.http.POST
 
-/**
- * Created by sunxiaodong on 2021/5/22.
- */
 @RouterUri(path = [Debug.Debug.PATH], desc = "debug页面")
 class DebugActivity : BaseActivity(), OnReturnValue {
 
@@ -57,14 +46,13 @@ class DebugActivity : BaseActivity(), OnReturnValue {
         QMUIStatusBarHelper.setStatusBarLightMode(this)
         setContentView(binding.root)
         binding.userInfo.text = "uid: ${AppPref.uid}"
-        binding.tvCallLoginInfo.text = "1v1呼叫登录状态: ${CallModule.isLogin()}"
         binding.httpUrl.setText(DebugPrefs.httpUrl)
-        binding.socketUrl.setText(DebugPrefs.socketUrl)
+//        binding.socketUrl.setText(DebugPrefs.socketUrl)
         binding.webHttpUrl.setText(DebugPrefs.webHttpUrl)
         binding.fbAccount.setText(AccountLocalService.fbAccount)
         binding.saveBtn.setOnClickListener {
             saveHttpUrl()
-            saveSocketUrl()
+//            saveSocketUrl()
             saveWebHttpUrl()
             saveWebUrlEd()
             saveWebWhiteHostEd()
@@ -102,21 +90,6 @@ class DebugActivity : BaseActivity(), OnReturnValue {
             }
         }
 
-        if (isTestEnv()) {
-            binding.switchTestAccount.show()
-            binding.switchTestAccount.setOnClickListener {
-                showDialogFragment<SwitchTestDialog>(supportFragmentManager)
-            }
-            binding.accountText.text = AccountLocalService.fbAccount
-        } else {
-            binding.switchTestAccount.gone()
-        }
-
-        binding.switchEnvironmentTv.text = envName()
-        binding.switchEnvironment.setOnClickListener {
-            SwitchEnvironmentDialog.newInstance(this).show(supportFragmentManager)
-        }
-
         if (isTestEnv()) {
             binding.switchSvgaChecker.show()
             binding.tvSvgaChecker.text = getSvgaCheckerText()
@@ -144,7 +117,8 @@ class DebugActivity : BaseActivity(), OnReturnValue {
         binding.webWhiteHostEd.setText(DebugPrefs.webWhiteHostEd)
         binding.webChangeRegionEd.setText(DebugPrefs.webChangeRegionEd)
         binding.tvSelectLanguage.setOnClickListener {
-            Router.build(this, Setting.Language.PATH).start()
+            // TODO: 语言设置模块
+            //Router.build(this, Setting.Language.PATH).start()
         }
 
         binding.swPerformanceFloatView.isChecked = DebugPrefs.showPerformanceFloatView
@@ -181,10 +155,6 @@ class DebugActivity : BaseActivity(), OnReturnValue {
                 sysMemoryUsageFloatView = null
             }
         }
-
-        binding.callChatBtn.setOnClickListener {
-            callTest()
-        }
     }
 
     private fun saveWebUrlEd() {
@@ -221,19 +191,19 @@ class DebugActivity : BaseActivity(), OnReturnValue {
     private fun saveWebHttpUrl() {
         val httpUrl = binding.webHttpUrl.text.toString()
         DebugPrefs.webHttpUrl = httpUrl
-        Uri.parse(httpUrl).host?.let {
-            App.instance.jsBridgeManager.addWhiteList(listOf(it))
-        }
+//        Uri.parse(httpUrl).host?.let {
+//            App.instance.jsBridgeManager.addWhiteList(listOf(it))
+//        }
     }
 
-    private fun saveSocketUrl() {
-        val socketUrl = binding.socketUrl.text.toString()
-        if (socketUrl.isEmpty()) {
-            return
-        }
-
-        DebugPrefs.socketUrl = socketUrl
-    }
+//    private fun saveSocketUrl() {
+//        val socketUrl = binding.socketUrl.text.toString()
+//        if (socketUrl.isEmpty()) {
+//            return
+//        }
+//
+//        DebugPrefs.socketUrl = socketUrl
+//    }
 
     private fun saveFBAccount() {
         val fbAccount = binding.fbAccount.text.toString()
@@ -259,7 +229,7 @@ class DebugActivity : BaseActivity(), OnReturnValue {
             return
         }
 
-        App.instance.jsBridgeManager.addWhiteList(listOf(whiteHost))
+//        App.instance.jsBridgeManager.addWhiteList(listOf(whiteHost))
     }
 
 
@@ -275,13 +245,6 @@ class DebugActivity : BaseActivity(), OnReturnValue {
 
     override fun clickValue(type: String, value: String?) {
         when (type) {
-            SwitchEnvironmentDialog::class.java.name -> {
-                if (value != null) {
-                    binding.switchEnvironmentTv.text = value
-                } else {
-                    binding.switchEnvironmentTv.text = envName()
-                }
-            }
 
             SvgaCheckerTestDialog::class.java.name -> {
                 binding.tvSvgaChecker.text = getSvgaCheckerText()
@@ -339,17 +302,4 @@ class DebugActivity : BaseActivity(), OnReturnValue {
             return this.sysMemoryUsageFloatView
         }
     }
-
-    private fun callTest() {
-        val callUid = binding.etCallChatUid.text?.toString()?.trim()?.toLongOrNull()
-        if (callUid == null) {
-            showToast("输入正确呼叫UID(数字)")
-            return
-        }
-        Router.getRouterInstance<BottomDialogFragment>(Call.CallDialog.PATH)?.apply {
-            arguments = Bundle().apply {
-                putLong(Call.Common.EXTRA_TARGET_UID, callUid)
-            }
-        }?.show(supportFragmentManager)
-    }
 }

+ 2 - 5
app/src/main/java/com/adealink/weparty/debug/DebugPrefs.kt

@@ -6,9 +6,6 @@ import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.module.profile.ProfileModule
 import com.adealink.weparty.network.getLocalHost
 
-/**
- * Created by sunxiaodong on 2021/5/25.
- */
 object DebugPrefs : TypeDelegationPrefs(
     prefs = {
         AppUtil.appContext.getSharedPreferences("pref_debug", Context.MODE_PRIVATE)
@@ -19,8 +16,8 @@ object DebugPrefs : TypeDelegationPrefs(
 ) {
 
     var httpUrl: String by PrefKey("key_http_url", "http://${getLocalHost()}/")
-
-    var socketUrl: String by PrefKey("key_socket_url", "ws://${getLocalHost()}/websocket")
+    //没有socket长连接
+//    var socketUrl: String by PrefKey("key_socket_url", "ws://${getLocalHost()}/websocket")
 
     var webHttpUrl: String by PrefKey("key_web_http_url", "")
 

+ 0 - 3
app/src/main/java/com/adealink/weparty/debug/Router.kt

@@ -1,8 +1,5 @@
 package com.adealink.weparty.debug
 
-/**
- * Created by sunxiaodong on 2021/5/22.
- */
 interface Debug {
 
     interface Debug {

+ 3 - 3
app/src/main/java/com/adealink/weparty/debug/ShowSvgaCheckResultTestDialog.kt

@@ -6,11 +6,11 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
-import com.adealink.weparty.databinding.SwitchEnvironmentBinding
+import com.adealink.weparty.databinding.DialogSvgaCheckerReusltBinding
 
-class ShowSvgaCheckResultTestDialog : BaseDialogFragment(R.layout.switch_environment) {
+class ShowSvgaCheckResultTestDialog : BaseDialogFragment(R.layout.dialog_svga_checker_reuslt) {
 
-    private val binding by viewBinding(SwitchEnvironmentBinding::bind)
+    private val binding by viewBinding(DialogSvgaCheckerReusltBinding::bind)
     private lateinit var elist: ArrayList<String>
     private var onReturnValue: OnReturnValue? = null
 

+ 3 - 3
app/src/main/java/com/adealink/weparty/debug/SvgaCheckerTestDialog.kt

@@ -6,11 +6,11 @@ import androidx.recyclerview.widget.LinearLayoutManager
 import com.adealink.frame.mvvm.view.viewBinding
 import com.adealink.weparty.R
 import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
-import com.adealink.weparty.databinding.SwitchEnvironmentBinding
+import com.adealink.weparty.databinding.DialogSvgaCheckerReusltBinding
 
-class SvgaCheckerTestDialog : BaseDialogFragment(R.layout.switch_environment) {
+class SvgaCheckerTestDialog : BaseDialogFragment(R.layout.dialog_svga_checker_reuslt) {
 
-    private val binding by viewBinding(SwitchEnvironmentBinding::bind)
+    private val binding by viewBinding(DialogSvgaCheckerReusltBinding::bind)
     private lateinit var elist: ArrayList<String>
     private var onReturnValue: OnReturnValue? = null
 

+ 0 - 95
app/src/main/java/com/adealink/weparty/debug/SwitchEnvironmentDialog.kt

@@ -1,95 +0,0 @@
-package com.adealink.weparty.debug
-
-import androidx.recyclerview.widget.DefaultItemAnimator
-import androidx.recyclerview.widget.DividerItemDecoration
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
-import com.adealink.weparty.commonui.toast.util.showToast
-import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.frame.util.AppUtil
-import com.adealink.weparty.App
-import com.adealink.weparty.R
-import com.adealink.weparty.module.account.AccountModule
-import com.adealink.weparty.databinding.SwitchEnvironmentBinding
-import com.adealink.weparty.network.DEBUG_HOST_CN
-import com.adealink.weparty.network.RELEASE_HOSTS
-
-class SwitchEnvironmentDialog : BaseDialogFragment(R.layout.switch_environment) {
-
-    private val binding by viewBinding(SwitchEnvironmentBinding::bind)
-    private lateinit var elist: ArrayList<String>
-    private var onReturnValue: OnReturnValue? = null
-
-    companion object {
-        fun newInstance(onReturnValue: OnReturnValue): SwitchEnvironmentDialog {
-            val fragment = SwitchEnvironmentDialog()
-            fragment.onReturnValue = onReturnValue
-            return fragment
-        }
-    }
-
-    override fun initViews() {
-        super.initViews()
-        initData()
-        initView()
-    }
-
-    private fun initData() {
-        elist = ArrayList()
-        elist.add("生产")
-        elist.add("测试")
-    }
-
-    private fun initView() {
-        context?.let { it ->
-            val eRecyclerView = binding.environmentList
-
-            eRecyclerView.layoutManager = LinearLayoutManager(it)
-
-            // itemDecoration
-            eRecyclerView.addItemDecoration(
-                DividerItemDecoration(
-                    it,
-                    DividerItemDecoration.VERTICAL
-                )
-            )
-
-            // animation
-            eRecyclerView.itemAnimator = DefaultItemAnimator()
-
-            // setAdapter
-            val adapter = SwitchEnvironmentAdapter(it, elist)
-            eRecyclerView.adapter = adapter
-
-            // itemClick
-            adapter.setOnAccountItemClickListener(object :
-                SwitchEnvironmentAdapter.IEnvironmentItemClickListener {
-                override fun onItemClick(position: Int) {
-                    if (position == 0) {
-                        val releaseHost = RELEASE_HOSTS[0]
-                        DebugPrefs.httpUrl = "https://$releaseHost/api/"
-                        DebugPrefs.socketUrl = "wss://$releaseHost/api/websocket"
-                    }
-                    if (position == 1) {
-                        val host = DEBUG_HOST_CN
-                        DebugPrefs.httpUrl = "http://$host/api/"
-                        DebugPrefs.socketUrl = "ws://$host/api/websocket"
-                    }
-                    onReturnValue?.clickValue(SwitchEnvironmentDialog::class.java.name, elist[position])
-                    dialog?.dismiss()
-                    App.instance.networkService.clear()
-                    AccountModule.logout(false)
-                    AppUtil.rebootApp()
-                    showToast("请杀死App重启")
-                }
-            })
-        }
-    }
-
-
-}
-
-
-
-
-

+ 0 - 71
app/src/main/java/com/adealink/weparty/debug/SwitchTestDialog.kt

@@ -1,71 +0,0 @@
-package com.adealink.weparty.debug
-
-import androidx.recyclerview.widget.DefaultItemAnimator
-import androidx.recyclerview.widget.DividerItemDecoration
-import androidx.recyclerview.widget.LinearLayoutManager
-import com.adealink.weparty.commonui.dialogfragment.BaseDialogFragment
-import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.weparty.R
-import com.adealink.weparty.module.account.AccountLocalService
-import com.adealink.weparty.module.account.AccountModule
-import com.adealink.weparty.databinding.SwitchTestAccountBinding
-
-class SwitchTestDialog : BaseDialogFragment(R.layout.switch_test_account) {
-
-    private val binding by viewBinding(SwitchTestAccountBinding::bind)
-
-    private lateinit var list: ArrayList<String>
-
-    override fun initViews() {
-        super.initViews()
-        initData()
-        initView()
-    }
-
-    private fun initData(){
-        list = ArrayList()
-        for (i in 1..20) {
-            list.add(i.toString())
-        }
-    }
-
-    private fun initView() {
-        context?.let {
-            val mRecyclerView = binding.rvList
-
-            val layoutManager = LinearLayoutManager(it)
-            layoutManager.orientation = LinearLayoutManager.VERTICAL
-
-            // layoutManager
-            mRecyclerView.layoutManager = layoutManager
-
-            // itemDecoration
-            val itemDecoration = DividerItemDecoration(it, DividerItemDecoration.VERTICAL)
-
-            mRecyclerView.addItemDecoration(itemDecoration)
-
-            // animation
-            mRecyclerView.itemAnimator = DefaultItemAnimator()
-
-            // setAdapter
-            val adapter = SwitchTestAccountAdapter(it, list)
-            mRecyclerView.adapter = adapter
-
-            // itemClick
-            adapter.setAccountItemClickListener(object :
-                SwitchTestAccountAdapter.IAccountItemClickListener {
-                override fun onItemClick(position: Int) {
-                        activity?.let {
-                            AccountLocalService.fbAccount = (position+1).toString()
-                            AccountModule.logout()
-                        }
-                }
-            })
-        }
-    }
-}
-
-
-
-
-

+ 3 - 9
app/src/main/java/com/adealink/weparty/deeplink/DeepLinkConfig.kt

@@ -5,9 +5,7 @@ import android.content.Intent
 import android.net.Uri
 import com.adealink.frame.push.manager.pushService
 import com.adealink.frame.router.manager.IDeepLinkConfig
-import com.adealink.frame.share.IGetDynamicLinkCallback
 import com.adealink.frame.share.data.PARAM_LINK
-import com.adealink.frame.share.shareManager
 import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.AppModule
 import com.adealink.weparty.BuildConfig
@@ -15,8 +13,6 @@ import com.adealink.weparty.MainActivity
 import com.adealink.weparty.module.account.Account
 import com.adealink.weparty.module.account.AccountModule
 import com.adealink.weparty.push.PushStatEvent
-import com.adealink.weparty.module.room.Room
-import com.adealink.weparty.webview.callback.IWebViewCallback
 import java.net.URLDecoder
 
 class DeepLinkConfig: IDeepLinkConfig {
@@ -33,7 +29,9 @@ class DeepLinkConfig: IDeepLinkConfig {
     }
 
     override fun getRoomRouterPath(): String {
-        return Room.Room.PATH
+        // TODO: 进房路由
+        //return Room.Room.PATH
+        return ""
     }
 
     override fun getSplashRouterPath(): String {
@@ -86,10 +84,6 @@ class DeepLinkConfig: IDeepLinkConfig {
     }
 
     override fun getFromWebUrl(): String {
-        val topActivity = AppUtil.currentActivity ?: return ""
-        if (topActivity is IWebViewCallback){
-            return topActivity.url()?:""
-        }
         return ""
     }
 

+ 1 - 5
app/src/main/java/com/adealink/weparty/deeplink/constant/DeepLinkConstant.kt

@@ -1,7 +1,3 @@
 package com.adealink.weparty.deeplink.constant
 
-/**
- * Created by sunxiaodong on 2021/4/1.
- */
-
-const val DEEP_LINK_SCHEME = "weparty"
+const val DEEP_LINK_SCHEME = "jiehe"

+ 4 - 7
app/src/main/java/com/adealink/weparty/deviceidservice/DeviceIdServiceConfig.kt

@@ -2,11 +2,7 @@ package com.adealink.weparty.deviceidservice
 
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.deviceid.IDeviceIdServiceConfig
-import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.App
-import com.adealink.weparty.module.attribution.AttributionModule
-import com.adealink.weparty.stat.manager.serveReportManager
-import com.adealink.weparty.stat.reportAppOpenIfNeed
 
 class DeviceIdServiceConfig : IDeviceIdServiceConfig {
 
@@ -53,9 +49,10 @@ class DeviceIdServiceConfig : IDeviceIdServiceConfig {
     }
 
     override fun onDeviceIdGot() {
-        reportAppOpenIfNeed(AppUtil.background)
-        AttributionModule.reportAttributionData()
-        serveReportManager.reportFirebaseAppInstanceId()
+        // TODO: 上报
+//        reportAppOpenIfNeed(AppUtil.background)
+//        AttributionModule.reportAttributionData()
+//        serveReportManager.reportFirebaseAppInstanceId()
     }
 
 }

+ 0 - 3
app/src/main/java/com/adealink/weparty/download/DownloadConfig.kt

@@ -10,9 +10,6 @@ import com.adealink.frame.storageService
 import com.adealink.weparty.App
 import okhttp3.OkHttpClient
 
-/**
- * Created by sunxiaodong on 2021/10/10.
- */
 class DownloadConfig : IDownloadConfig {
 
     override val ossBucket: String

+ 57 - 69
app/src/main/java/com/adealink/weparty/effect/AvatarFrameView.kt

@@ -3,19 +3,7 @@ package com.adealink.weparty.effect
 import android.content.Context
 import android.util.AttributeSet
 import android.util.Log
-import androidx.core.view.doOnAttach
-import androidx.lifecycle.findViewTreeLifecycleOwner
-import androidx.lifecycle.findViewTreeViewModelStoreOwner
-import com.adealink.frame.base.Rlt
-import com.adealink.frame.effect.data.AnimExtraConfig
-import com.adealink.frame.effect.data.EffectAnimType
-import com.adealink.frame.effect.data.INFINITE_LOOP
 import com.adealink.frame.effect.view.WeAnimView
-import com.adealink.weparty.commonui.ext.gone
-import com.adealink.weparty.commonui.ext.show
-import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.profile.decorate.data.AvatarFrameDecor
-import com.adealink.weparty.module.profile.decorate.data.DecorType
 
 /**
  * 头像框动效播放view
@@ -26,65 +14,65 @@ class AvatarFrameView(context: Context, attrs: AttributeSet? = null) : WeAnimVie
      * 可能触发一次头像框获取接口的拉取,列表场景慎用
      */
     fun showAvatarFrame(uid: Long, cached: Boolean = true) {
-        doOnAttach {
-            val storeOwner = findViewTreeViewModelStoreOwner() ?: return@doOnAttach
-            val lifeCycleOwner = findViewTreeLifecycleOwner() ?: return@doOnAttach
-            val userDecorViewModel = ProfileModule.getUserDecorViewModel(storeOwner)
-            userDecorViewModel?.getDecor(uid = uid, DecorType.AVATAR_FRAME, cached)
-                ?.observe(lifeCycleOwner) {
-                    if (!isAttachedToWindow) {
-                        return@observe
-                    }
-                    when (it) {
-                        is Rlt.Success -> {
-                            val avatarFrameDecor = it.data
-                            if (avatarFrameDecor is AvatarFrameDecor) {
-                                show()
-                                showAvatarFrame(avatarFrameDecor)
-                            } else {
-                                stopPlay()
-                                gone()
-                            }
-
-                        }
-
-                        is Rlt.Failed -> {
-                            stopPlay()
-                            gone()
-                        }
-                    }
-                }
-        }
+//        doOnAttach {
+//            val storeOwner = findViewTreeViewModelStoreOwner() ?: return@doOnAttach
+//            val lifeCycleOwner = findViewTreeLifecycleOwner() ?: return@doOnAttach
+//            val userDecorViewModel = ProfileModule.getUserDecorViewModel(storeOwner)
+//            userDecorViewModel?.getDecor(uid = uid, DecorType.AVATAR_FRAME, cached)
+//                ?.observe(lifeCycleOwner) {
+//                    if (!isAttachedToWindow) {
+//                        return@observe
+//                    }
+//                    when (it) {
+//                        is Rlt.Success -> {
+//                            val avatarFrameDecor = it.data
+//                            if (avatarFrameDecor is AvatarFrameDecor) {
+//                                show()
+//                                showAvatarFrame(avatarFrameDecor)
+//                            } else {
+//                                stopPlay()
+//                                gone()
+//                            }
+//
+//                        }
+//
+//                        is Rlt.Failed -> {
+//                            stopPlay()
+//                            gone()
+//                        }
+//                    }
+//                }
+//        }
     }
 
-    fun showAvatarFrame(
-        avatarFrameConfig: AvatarFrameDecor?,
-    ) {
-        Log.d(TAG, "hashCode:${hashCode()}, showAvatarFrame, avatarFrameConfig: $avatarFrameConfig")
-        if (avatarFrameConfig == null) {
-            stopPlay()
-            gone()
-            return
-        }
-        val effectResource = avatarFrameConfig.effectResource
-        val effectAnimType = EffectAnimType.map(effectResource.animType)
-        if (effectAnimType != EffectAnimType.SVGA && effectAnimType != EffectAnimType.MP4 && effectAnimType != EffectAnimType.TC) {
-            stopPlay()
-            gone()
-            return
-        }
-        show()
-        setConfig(
-            AnimExtraConfig(
-                loop = INFINITE_LOOP,
-                ratio = avatarFrameConfig.ratio,
-            )
-        )
-        setUrl(
-            effectResource.resourceUrl,
-            avatarFrameConfig.extraConfig?.createAnimDynamicProvider()
-        )
-    }
+//    fun showAvatarFrame(
+//        avatarFrameConfig: AvatarFrameDecor?,
+//    ) {
+//        Log.d(TAG, "hashCode:${hashCode()}, showAvatarFrame, avatarFrameConfig: $avatarFrameConfig")
+//        if (avatarFrameConfig == null) {
+//            stopPlay()
+//            gone()
+//            return
+//        }
+//        val effectResource = avatarFrameConfig.effectResource
+//        val effectAnimType = EffectAnimType.map(effectResource.animType)
+//        if (effectAnimType != EffectAnimType.SVGA && effectAnimType != EffectAnimType.MP4 && effectAnimType != EffectAnimType.TC) {
+//            stopPlay()
+//            gone()
+//            return
+//        }
+//        show()
+//        setConfig(
+//            AnimExtraConfig(
+//                loop = INFINITE_LOOP,
+//                ratio = avatarFrameConfig.ratio,
+//            )
+//        )
+//        setUrl(
+//            effectResource.resourceUrl,
+//            avatarFrameConfig.extraConfig?.createAnimDynamicProvider()
+//        )
+//    }
 
     override fun onDetachedFromWindow() {
         super.onDetachedFromWindow()

+ 0 - 239
app/src/main/java/com/adealink/weparty/effect/EffectPreviewView.kt

@@ -1,239 +0,0 @@
-package com.adealink.weparty.effect
-
-import android.content.Context
-import android.content.Intent
-import android.graphics.BitmapFactory
-import android.util.AttributeSet
-import android.view.Gravity
-import android.view.View
-import android.widget.FrameLayout
-import androidx.core.view.updateLayoutParams
-import androidx.fragment.app.FragmentManager
-import com.adealink.frame.effect.data.AnimExtraConfig
-import com.adealink.frame.effect.data.DynamicAnimImage
-import com.adealink.frame.effect.data.DynamicAnimText
-import com.adealink.frame.effect.data.EffectAnimType
-import com.adealink.frame.effect.data.IAnimDynamicProvider
-import com.adealink.frame.effect.data.INFINITE_LOOP
-import com.adealink.frame.effect.view.IWeAnimPlayListener
-import com.adealink.frame.effect.view.WeAnimView
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.ext.isMP4
-import com.adealink.weparty.commonui.ext.isSVGAImage
-import com.adealink.weparty.commonui.ext.isTCMP4
-import com.adealink.weparty.commonui.ext.show
-import com.adealink.weparty.module.medal.view.MedalImageView
-import com.adealink.weparty.module.medal.view.getMedalLevelImgResource
-import com.adealink.weparty.module.store.StoreModule
-
-class EffectPreviewView @JvmOverloads constructor(
-    context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0
-) : FrameLayout(context, attrs, defStyleAttr), IPreviewView {
-
-    private var previewUrl: String = ""
-    private var animType: EffectAnimType? = null
-    private var localDynamicUrl: String? = null
-    private var fragmentManager: FragmentManager? = null
-    private var level = 0
-    private var subLevel = 0
-    private var intent: Intent? = null
-    private var medalViewConfig: IPreviewView.IMedalViewConfig? = null
-    private var animExtraConfig: AnimExtraConfig? = null
-    private var innerPlayListener = object : IWeAnimPlayListener {
-        override fun onPlayStart() {
-            super.onPlayStart()
-            playListener?.onPlayStart()
-        }
-
-        override fun onPlayEnd() {
-            super.onPlayEnd()
-            medalViewConfig?.onPlayEnd()
-        }
-    }
-    private var playListener: IWeAnimPlayListener? = null
-
-    override fun setMedalViewConfig(medalViewConfig: IPreviewView.IMedalViewConfig) {
-        this.medalViewConfig = medalViewConfig
-    }
-
-    //设置其他 预览动效
-    override fun setURL(
-        previewUrl: String,
-        animType: EffectAnimType?,
-        intent: Intent?,
-        fragmentManager: FragmentManager?,
-        animExtraConfig: AnimExtraConfig,
-        dynamicProvider: IAnimDynamicProvider?,
-        playListener: IWeAnimPlayListener?
-    ) {
-        this.previewUrl = previewUrl
-        this.animType = animType
-        this.localDynamicUrl = null
-        this.fragmentManager = fragmentManager//是否单击查看预览图
-        this.intent = intent//是否单击查看预览图
-        this.animExtraConfig = animExtraConfig
-        this.playListener = playListener
-        if (previewUrl.isEmpty()) {
-            return
-        }
-        var isAnim = false
-        if (animType == null) {
-            //未指定animType,根据后缀判断
-            isAnim = isSVGAImage(previewUrl) || isMP4(previewUrl) || isTCMP4(previewUrl)
-        }
-        removeAllViews()
-        when (isAnim) {
-            true -> {
-                setWeAnimView(previewUrl, animExtraConfig, dynamicProvider)
-            }
-            else -> {
-                setImageView(previewUrl)
-            }
-        }
-    }
-
-    //设置勋章 预览动效
-    override fun setMedal(
-        previewUrl: String,
-        animType: EffectAnimType?,
-        intent: Intent?,
-        fragmentManager: FragmentManager?,
-        autoPlay: Boolean,
-        level: Int,
-        subLevel: Int,
-        playListener: IWeAnimPlayListener?
-    ) {
-        this.level = level
-        this.subLevel = subLevel
-        setURL(
-            previewUrl,
-            animType,
-            intent,
-            fragmentManager,
-            AnimExtraConfig(
-                loop = INFINITE_LOOP,
-                autoPlay = autoPlay,
-            ),
-            dynamicProvider = getMedalAnimDynamicProvider(),
-            playListener = playListener
-        )
-    }
-
-    private fun getMedalAnimDynamicProvider(): IAnimDynamicProvider? {
-        val drawableId = getMedalLevelImgResource(level, subLevel)
-        if (drawableId == 0) {
-            return null
-        }
-        return object : IAnimDynamicProvider {
-            override fun provideImage(callback: (Map<String, DynamicAnimImage>?) -> Unit) {
-                callback(
-                    hashMapOf(
-                        "number" to DynamicAnimImage {
-                            BitmapFactory.decodeResource(
-                                resources,
-                                drawableId,
-                                BitmapFactory.Options().apply {
-                                    inScaled = false
-                                })
-                        }
-                    )
-                )
-            }
-
-            override fun provideText(callback: (Map<String, DynamicAnimText>?) -> Unit) {
-                callback(null)
-            }
-
-        }
-    }
-
-    private fun onClick(view: View) {
-        if (fragmentManager == null || intent == null) return
-        view.setOnClickListener {
-            StoreModule.storePreview(intent!!, fragmentManager!!)
-        }
-    }
-
-    private fun setImageView(img: String) {
-        val imageView = inflateImageView()
-        imageView.setMedal(img, level, subLevel, false)
-    }
-
-    private fun setWeAnimView(
-        url: String,
-        animExtraConfig: AnimExtraConfig,
-        dynamicProvider: IAnimDynamicProvider? = null
-    ) {
-        val weAnimView = inflateWeAnimView()
-        weAnimView.setConfig(animExtraConfig)
-        weAnimView.setListener(innerPlayListener)
-        weAnimView.setUrl(url, dynamicProvider)
-    }
-
-    private fun inflateImageView(): MedalImageView {
-        var imageView = findViewById<MedalImageView>(R.id.effect_view_image)
-        if (imageView != null) {
-            return imageView
-        }
-        imageView = MedalImageView(context)
-        imageView.id = R.id.effect_view_image
-        addView(imageView)
-        imageView.updateLayoutParams<LayoutParams> {
-            width = LayoutParams.MATCH_PARENT
-            height = LayoutParams.MATCH_PARENT
-            gravity = Gravity.CENTER
-        }
-        onClick(imageView)
-        return imageView
-    }
-
-    private fun inflateWeAnimView(): WeAnimView {
-        var weAnimView = findViewById<WeAnimView>(R.id.effect_view_we_anim_view)
-        if (weAnimView != null) {
-            return weAnimView
-        }
-        weAnimView = WeAnimView(context)
-        weAnimView.id = R.id.effect_view_we_anim_view
-        addView(weAnimView)
-        weAnimView.updateLayoutParams<LayoutParams> {
-            width = LayoutParams.MATCH_PARENT
-            height = LayoutParams.MATCH_PARENT
-            gravity = Gravity.CENTER
-        }
-        onClick(weAnimView)
-        return weAnimView
-    }
-
-    private fun isViewEnable(): Boolean {
-        return medalViewConfig?.let {
-            isAttachedToWindow && it.isViewEnable(this)
-        } ?: let {
-            isAttachedToWindow
-        }
-    }
-
-    override fun startPlay() {
-        setURL(previewUrl, animType = animType, intent, fragmentManager, animExtraConfig?: AnimExtraConfig(), getMedalAnimDynamicProvider(), playListener)
-    }
-
-    override fun stopPlay() {
-        findViewById<WeAnimView>(R.id.effect_view_we_anim_view)?.stopPlay()
-        findViewById<View>(R.id.effect_view_image)?.show()
-    }
-
-    override fun onAttachedToWindow() {
-        super.onAttachedToWindow()
-        if (medalViewConfig == null || medalViewConfig?.attachRecoverPlay() == true) {
-            startPlay()
-        }
-    }
-
-    override fun onDetachedFromWindow() {
-        super.onDetachedFromWindow()
-        stopPlay()
-    }
-
-    companion object {
-        private const val TAG = "EffectPreviewView"
-    }
-}

+ 0 - 46
app/src/main/java/com/adealink/weparty/effect/TCEffectConfig.kt

@@ -1,46 +0,0 @@
-package com.adealink.weparty.effect
-
-import com.adealink.frame.base.AppBase
-import com.adealink.frame.data.json.froJsonErrorNull
-import com.adealink.frame.tceffect.config.ITCEffectConfig
-import com.adealink.frame.util.ONE_MINUTE
-import com.adealink.weparty.config.GlobalConfigType
-import com.adealink.weparty.config.globalConfigManager
-import java.net.URI
-
-class TCEffectConfig : ITCEffectConfig {
-    override val licenceUrls: List<String> = listOf(
-        "https://license.vod2.myqcloud.com/license/v2/1314119829_1/v_cube.license",
-    )
-    override val oldLicence: String = "edbd15d01777ad43b422347e94e90757"
-    override val licence: String = "db3ac8d5972ef28cb62c9b7eabe76b39"
-    override val logEnable: Boolean = !AppBase.isRelease
-
-    private var backupHostList: List<String>? = null
-    private var lastGetBackupHostConfigTime: Long = 0
-
-    override fun replaceUrlHost(oldUrl: String): String {
-        var backupHostList = backupHostList
-        if (backupHostList == null || (System.currentTimeMillis() - lastGetBackupHostConfigTime) > 30 * ONE_MINUTE) {
-            val config =
-                globalConfigManager.getConfig(GlobalConfigType.GLOBAL_BACKUP_HOST)?.getOrNull(0)
-            backupHostList = froJsonErrorNull<List<String>>(config)
-            lastGetBackupHostConfigTime = System.currentTimeMillis()
-        }
-        if (backupHostList.isNullOrEmpty()) {
-            return oldUrl
-        }
-        try {
-            val uri = URI(oldUrl)
-            val host = uri.host
-            val newHost: String = backupHostList.random()
-            if (host == newHost) {
-                return oldUrl
-            }
-            return oldUrl.replace(host, newHost)
-        } catch (ignored: Exception) {
-
-        }
-        return oldUrl
-    }
-}

+ 0 - 32
app/src/main/java/com/adealink/weparty/effect/TestEffectActivity.kt

@@ -1,32 +0,0 @@
-package com.adealink.weparty.effect
-
-import android.content.Context
-import android.content.Intent
-import com.adealink.frame.effect.svga.data.PathType
-import com.adealink.frame.effect.svga.data.SVGAEffectEntity
-import com.adealink.weparty.commonui.BaseActivity
-import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.weparty.databinding.ActivityTestEffectBinding
-
-/**
- * Created by sunxiaodong on 2021/4/25.
- */
-class TestEffectActivity : BaseActivity() {
-
-    companion object {
-        fun start(ctx: Context) {
-            ctx.startActivity(Intent(ctx, TestEffectActivity::class.java))
-        }
-    }
-
-    private val binding by viewBinding(ActivityTestEffectBinding::inflate)
-
-    override fun initViews() {
-        super.initViews()
-        setContentView(binding.root)
-        binding.effectView.setOnClickListener {
-            binding.effectView.add(SVGAEffectEntity("rose.svga", PathType.ASSERT))
-        }
-    }
-
-}

+ 0 - 3
app/src/main/java/com/adealink/weparty/error/Error.kt

@@ -5,9 +5,6 @@ import com.adealink.frame.base.IError
 import com.adealink.weparty.R
 import com.adealink.weparty.module.network.data.ServerCode
 
-/**
- * Created by sunxiaodong on 2021/8/8.
- */
 class CommonIllegalPictureError : IError(getCompatString(R.string.common_illegal_picture)) //违规图片
 class CommonHasSensitiveWordError :
     IError(getCompatString(R.string.common_has_sensitive_word)) //存在敏感词

+ 2 - 6
app/src/main/java/com/adealink/weparty/googleservice/GoogleServiceConfig.kt

@@ -1,13 +1,8 @@
 package com.adealink.weparty.googleservice
 
 import com.adealink.frame.googleservice.IGoogleServiceConfig
-import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.module.account.AccountModule
-import com.adealink.weparty.stat.reportEnterApp
 
-/**
- * Created by sunxiaodong on 2021/6/7.
- */
 class GoogleServiceConfig : IGoogleServiceConfig {
 
     override fun getUid(): Long {
@@ -15,7 +10,8 @@ class GoogleServiceConfig : IGoogleServiceConfig {
     }
 
     override fun onGPReferrerFinished() {
-        reportEnterApp(AppUtil.background)
+        // TODO: 上报
+        //reportEnterApp(AppUtil.background)
     }
 
 }

+ 17 - 19
app/src/main/java/com/adealink/weparty/image/ImageConfig.kt

@@ -11,13 +11,9 @@ import com.adealink.frame.util.runOnUiThread
 import com.adealink.weparty.App
 import com.adealink.weparty.config.GlobalConfigType
 import com.adealink.weparty.config.IGlobalConfigListener
-import com.adealink.weparty.config.globalConfigManager
 import com.adealink.weparty.image.datasource.local.ImageLocalService
 import okhttp3.OkHttpClient
 
-/**
- * Created by sunxiaodong on 2022/10/15.
- */
 class ImageConfig : IImageConfig, IGlobalConfigListener {
 
     companion object {
@@ -111,24 +107,26 @@ class ImageConfig : IImageConfig, IGlobalConfigListener {
         qCloudCdn2QCloudCosHosts.forEach {
             hostToResizeQuery[it] = COS_RESIZE_QUERY
         }
-        globalConfigManager.addListener(GlobalConfigType.GLOBAL_CDN_RESIZE, this)
-        val newConfig = globalConfigManager.getConfig(GlobalConfigType.GLOBAL_CDN_RESIZE)
-        if (newConfig != null) {
-            onNewConfigGet(newConfig)
-        } else {
-            val localConfigJson = ImageLocalService.resizeQueryConfig
-            if (localConfigJson.isNotEmpty()) {
-                handleResizeQueryConfig(localConfigJson)
-            }
-        }
+        // TODO: CDN
+//        globalConfigManager.addListener(GlobalConfigType.GLOBAL_CDN_RESIZE, this)
+//        val newConfig = globalConfigManager.getConfig(GlobalConfigType.GLOBAL_CDN_RESIZE)
+//        if (newConfig != null) {
+//            onNewConfigGet(newConfig)
+//        } else {
+//            val localConfigJson = ImageLocalService.resizeQueryConfig
+//            if (localConfigJson.isNotEmpty()) {
+//                handleResizeQueryConfig(localConfigJson)
+//            }
+//        }
     }
 
     override fun onConfigGet(configType: GlobalConfigType, config: List<String>) {
-        if (configType != GlobalConfigType.GLOBAL_CDN_RESIZE) {
-            return
-        }
-
-        onNewConfigGet(config)
+        // TODO: CDN
+//        if (configType != GlobalConfigType.GLOBAL_CDN_RESIZE) {
+//            return
+//        }
+//
+//        onNewConfigGet(config)
     }
 
     private fun onNewConfigGet(config: List<String>) {

+ 0 - 3
app/src/main/java/com/adealink/weparty/image/datasource/local/ImageLocalService.kt

@@ -5,9 +5,6 @@ import com.adealink.frame.storage.sp.TypeDelegationPrefs
 import com.adealink.frame.util.AppUtil
 import com.adealink.weparty.module.account.AccountModule
 
-/**
- * Created by sunxiaodong on 2024/7/15.
- */
 object ImageLocalService : TypeDelegationPrefs(
     prefs = {
         AppUtil.appContext.getSharedPreferences("pref_image", Context.MODE_PRIVATE)

+ 0 - 582
app/src/main/java/com/adealink/weparty/imageselect/ImageSelectActivity.kt

@@ -1,582 +0,0 @@
-package com.adealink.weparty.imageselect
-
-import android.Manifest
-import android.annotation.SuppressLint
-import android.app.Activity
-import android.content.Intent
-import android.os.Build
-import android.view.View
-import androidx.activity.viewModels
-import androidx.recyclerview.widget.GridLayoutManager
-import androidx.recyclerview.widget.LinearLayoutManager
-import androidx.recyclerview.widget.RecyclerView
-import com.adealink.frame.aab.util.getCompatString
-import com.adealink.frame.base.Rlt
-import com.adealink.frame.base.fastLazy
-import com.adealink.frame.log.Log
-import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.frame.util.DisplayUtil
-import com.adealink.frame.util.FileProvider7
-import com.adealink.weparty.App
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.BaseActivity
-import com.adealink.weparty.commonui.ext.gone
-import com.adealink.weparty.commonui.ext.show
-import com.adealink.weparty.commonui.recycleview.adapter.multitype.MultiTypeAdapter
-import com.adealink.weparty.commonui.recycleview.itemdecoration.GridSpacingItemDecoration
-import com.adealink.weparty.commonui.toast.util.showToast
-import com.adealink.weparty.commonui.widget.CommonDialog
-import com.adealink.weparty.config.GlobalConfigType
-import com.adealink.weparty.config.globalConfigManager
-import com.adealink.weparty.databinding.ActivityImageSelectBinding
-import com.adealink.weparty.hardware.Hardware
-import com.adealink.weparty.imageselect.cache.videoCoverCache
-import com.adealink.weparty.imageselect.clip.ClipImageLifecycleObserver
-import com.adealink.weparty.imageselect.clip.ClipParamData
-import com.adealink.weparty.imageselect.clip.avatarClipParam
-import com.adealink.weparty.imageselect.listener.OnOperateListener
-import com.adealink.weparty.imageselect.model.AddInfo
-import com.adealink.weparty.imageselect.model.LoadMediaConfig
-import com.adealink.weparty.imageselect.model.LocalMedia
-import com.adealink.weparty.imageselect.model.LocalMediaFolder
-import com.adealink.weparty.imageselect.model.MediaInfo
-import com.adealink.weparty.imageselect.model.MediaType
-import com.adealink.weparty.imageselect.selectpreview.SelectPreviewLifecycleObserver
-import com.adealink.weparty.imageselect.selectpreview.SelectPreviewResult
-import com.adealink.weparty.imageselect.takePhoto.TakePhotoLifecycleObserver
-import com.adealink.weparty.imageselect.util.PictureMimeType
-import com.adealink.weparty.imageselect.view.AddItemViewBinder
-import com.adealink.weparty.imageselect.view.ImageFolderItemViewBinder
-import com.adealink.weparty.imageselect.view.ImageItemViewBinder
-import com.adealink.weparty.imageselect.viewmodel.MediaSelectViewModel
-import com.adealink.weparty.permission.PermissionUtils
-import com.adealink.weparty.storage.file.FilePath.clipImagePath
-import com.adealink.weparty.storage.file.FilePath.takePhotoImagePath
-import com.qmuiteam.qmui.widget.util.QMUIStatusBarHelper
-import java.io.File
-
-class ImageSelectActivity : BaseActivity(), OnOperateListener {
-
-    companion object {
-        const val TAG = "ImageSelectActivity"
-        const val SPAN_COUNT = 3
-        const val KEY_SOURCE = "source"
-        const val KEY_MAX_NUM = "key_max_num"
-        const val KEY_CLIP_PARAM_DATA = "key_clip_param_data"
-        const val KEY_MEDIA_TYPE = "key_media_type"
-        const val SELECT_IMAGE_PATH = "select_image_path"
-        const val SELECT_IMAGE_URI = "select_image_uri"
-        const val SELECT_IMAGES = "select_images"
-        const val KEY_GIF_OPTION = "key_gif_option"
-        const val SHOW_MES_TIP = "show_mes_tip"
-        const val MESSAGE_GIF_MAX_SIZE_KB = 5 * 1024 * 1024 //GIF 图片上传最大size
-        const val COVER_EXPIRE_TIME = "cover_expire_time"
-        const val KEY_FROM_POSITION = "from_position"
-        const val KEY_SELECTED_MEDIA_LIST = "selected_media_list"
-        const val KEY_VIDEO_MAX_SECOND = "video_max_second"
-        const val KEY_IMAGE_MIN_SIZE = "image_min_size" //图片最小尺寸,默认800px
-        const val MIN_IMAGE_AVATAR_SIZE = 800 //图片最小尺寸,默认800px
-        const val MIN_IMAGE_NORMAL_SIZE = 400 //常规的图片最小尺寸,默认400px
-        const val TOP_TIPS_STRING = "top_tips_string" //顶部提示文字
-
-
-        fun getUserImageMinSize(): Int {
-            val configList =  globalConfigManager.getConfig(GlobalConfigType.GLOBAL_USER_IMAGE_MIN_SIZE)
-            val size = configList?.getOrNull(0)?.toInt() ?: MIN_IMAGE_AVATAR_SIZE
-            return size
-        }
-
-        fun getNormalImageMinSize(): Int {
-            val configList =  globalConfigManager.getConfig(GlobalConfigType.GLOBAL_NORMAL_IMAGE_MAX_SIZE)
-            val size = configList?.getOrNull(0)?.toInt() ?: MIN_IMAGE_NORMAL_SIZE
-            return size
-        }
-    }
-
-    private val binding by viewBinding(ActivityImageSelectBinding::inflate)
-    private val mediaSelectViewModel by viewModels<MediaSelectViewModel>()
-    private lateinit var imageFolderListAdapter: MultiTypeAdapter
-    private lateinit var selectImageListAdapter: MultiTypeAdapter
-    private lateinit var gridLayoutManager: GridLayoutManager
-    private lateinit var clipImageObserver: ClipImageLifecycleObserver
-    private lateinit var takePhotoObserver: TakePhotoLifecycleObserver
-    private lateinit var selectPreviewObserver: SelectPreviewLifecycleObserver
-    private var takePhotoTempFile: File? = null
-    private var clipImageFile: File? = null
-    private var hasInitViews = false
-    private var isCheckingPermission = false
-    private var source: String = ""
-    private var maxNum: Int = 1
-    private var multiSelect = false
-    private var mediaType: MediaType = MediaType.ALL
-    private var clipParamData: ClipParamData? = null
-    private var gifOpt: Boolean? = null
-    private val fromPosition by fastLazy { intent.getIntExtra(KEY_FROM_POSITION, -1) }
-    private val checkedMedias by fastLazy {
-        intent.getParcelableArrayListExtra<LocalMedia>(KEY_SELECTED_MEDIA_LIST) ?: ArrayList()
-    }
-    private val videoMaxSecond by fastLazy { intent.getIntExtra(KEY_VIDEO_MAX_SECOND, -1) }
-    private val imageMinSize by fastLazy { intent.getIntExtra(KEY_IMAGE_MIN_SIZE, -1) }
-    private var topTipsString: CharSequence? = null // 顶部提示文字
-
-    override fun onBeforeCreate() {
-        super.onBeforeCreate()
-        source = intent.getStringExtra(KEY_SOURCE) ?: ""
-        maxNum = intent.getIntExtra(KEY_MAX_NUM, 1)
-        multiSelect = maxNum > 1
-        clipParamData = intent.getParcelableExtra(KEY_CLIP_PARAM_DATA)
-        mediaType = (intent.getSerializableExtra(KEY_MEDIA_TYPE) as? MediaType) ?: MediaType.ALL
-        gifOpt = intent.getBooleanExtra(KEY_GIF_OPTION, false)
-        topTipsString = intent.getCharSequenceExtra(TOP_TIPS_STRING)
-
-    }
-
-    override fun initViews() {
-        super.initViews()
-        QMUIStatusBarHelper.setStatusBarLightMode(this)
-        setContentView(binding.root)
-        initObserver()
-        checkPermission()
-        updateMesText()
-    }
-
-    override fun observeViewModel() {
-        super.observeViewModel()
-        mediaSelectViewModel.selectFolderLD.observe(this) {
-            onFolderSelected(it)
-        }
-    }
-
-    override fun onResume() {
-        super.onResume()
-        if (!isCheckingPermission && !hasInitViews) {
-            if (PermissionUtils.hasPermissions(this, *getMediaTypePermissionArray())) {
-                initViewsAndShowImages()
-            } else {
-                showPermissionNoGrantedDialog()
-            }
-        }
-    }
-
-    @SuppressLint("CheckResult")
-    private fun checkPermission() {
-        isCheckingPermission = true
-        if (!PermissionUtils.hasPermissions(this, *getMediaTypePermissionArray())) {
-            PermissionUtils.getRxPermissions(this)
-                .request(*getMediaTypePermissionArray()).subscribe { granted ->
-                    isCheckingPermission = false
-                    if (granted) {
-                        initViewsAndShowImages()
-                    } else {
-                        showPermissionNoGrantedDialog()
-                    }
-                }
-        } else {
-            isCheckingPermission = false
-            initViewsAndShowImages()
-        }
-    }
-
-    private fun showPermissionNoGrantedDialog() {
-        CommonDialog.Builder()
-            .message(getCompatString(R.string.image_select_permission_no_granted))
-            .onPositive {
-                PermissionUtils.startPermissionSettingActivity(this)
-            }
-            .onNegative {
-                finish()
-            }
-            .setShowDefaultCancel(true)
-            .build()
-            .show(supportFragmentManager)
-    }
-
-    private fun initViewsAndShowImages() {
-        hasInitViews = true
-        initView()
-        mediaSelectViewModel.loadMedia(
-            LoadMediaConfig(
-                mediaType,
-                gifOpt != true,
-                selectedMediaList = checkedMedias
-            )
-        )
-    }
-
-    private fun initView() {
-        binding.backIv.setOnClickListener {
-            finish()
-        }
-        binding.imageFolderCl.setOnClickListener {
-            hideFolders()
-        }
-        binding.expandDirClickArea.setOnClickListener {
-            if (binding.imageFolderCl.visibility == View.GONE) {
-                showFolders()
-            } else {
-                hideFolders()
-            }
-        }
-        if (multiSelect) {
-            binding.btnConfirm.show()
-            binding.btnConfirm.setOnClickListener {
-                val intent = Intent()
-                intent.putParcelableArrayListExtra(SELECT_IMAGES, checkedMedias)
-                intent.putExtra(KEY_SOURCE, source)
-                setResult(RESULT_OK, intent)
-                finish()
-            }
-        }
-        selectImageListAdapter = MultiTypeAdapter()
-        selectImageListAdapter.register(AddItemViewBinder(this))
-        selectImageListAdapter.register(ImageItemViewBinder(this, multiSelect))
-
-        imageFolderListAdapter = MultiTypeAdapter()
-        imageFolderListAdapter.register(ImageFolderItemViewBinder(this))
-        gridLayoutManager = GridLayoutManager(
-            this@ImageSelectActivity,
-            SPAN_COUNT,
-            RecyclerView.VERTICAL,
-            false
-        )
-
-        binding.imageListRv.apply {
-            layoutManager = gridLayoutManager
-            addItemDecoration(
-                GridSpacingItemDecoration(
-                    SPAN_COUNT,
-                    DisplayUtil.dp2px(4f),
-                    DisplayUtil.dp2px(4f),
-                    true
-                )
-            )
-            adapter = selectImageListAdapter
-        }
-        binding.imageFolderRv.apply {
-            layoutManager = LinearLayoutManager(this@ImageSelectActivity)
-            adapter = imageFolderListAdapter
-        }
-    }
-
-    private fun initObserver() {
-        clipImageObserver = object : ClipImageLifecycleObserver(activityResultRegistry) {
-            override fun onResult(resultCode: Int, inputPath: String, outputPath: String) {
-                if (resultCode == RESULT_CANCELED) {
-                    return
-                }
-
-                onImageFileResult(clipImageFile?.absolutePath, resultCode)
-            }
-        }
-        lifecycle.addObserver(clipImageObserver)
-        takePhotoImagePath?.let {
-            takePhotoTempFile = File(it, "${System.currentTimeMillis()}.jpg")
-        }
-        takePhotoObserver = object : TakePhotoLifecycleObserver(activityResultRegistry) {
-            override fun onResult(resultCode: Int) {
-                Log.i(TAG, "takePhotoObserver onResult: $resultCode")
-                if (resultCode != Activity.RESULT_OK) {
-                    return
-                }
-                handleTakePhotoResult()
-            }
-        }
-        lifecycle.addObserver(takePhotoObserver)
-        selectPreviewObserver = object : SelectPreviewLifecycleObserver(activityResultRegistry) {
-            override fun onResult(result: SelectPreviewResult) {
-                val resultCode = result.resultCode
-                val path = result.path
-                val uri = result.uri
-                if (resultCode != Activity.RESULT_OK) {
-                    return
-                }
-                if (multiSelect) {
-                    return
-                }
-                finishResult(path, uri, resultCode, MediaType.IMAGE)
-            }
-        }
-        lifecycle.addObserver(selectPreviewObserver)
-    }
-
-    private fun showFolders() {
-        binding.imageFolderCl.visibility = View.VISIBLE
-        imageFolderListAdapter.items = mediaSelectViewModel.foldersLD.value ?: arrayListOf()
-        imageFolderListAdapter.notifyDataSetChanged()
-    }
-
-    private fun hideFolders() {
-        binding.imageFolderCl.visibility = View.GONE
-    }
-
-    private fun clipImage(imageInfo: LocalMedia?) {
-        imageInfo?.path?.let { inputFilePath ->
-            clipImageFile = File(
-                clipImagePath ?: filesDir.absolutePath,
-                "${System.currentTimeMillis()}.jpg"
-            )
-            clipImageFile?.let { outputFile ->
-                clipImageObserver.launch(
-                    inputFilePath,
-                    outputFile.absolutePath,
-                    clipParamData ?: avatarClipParam
-                )
-            }
-        }
-    }
-
-    private fun handleTakePhotoResult() {
-        if (takePhotoTempFile?.exists() == true) {
-            val clipParamData = clipParamData
-            if (clipParamData != null) {
-                clipImageFile = File(
-                    clipImagePath ?: filesDir.absolutePath,
-                    "${System.currentTimeMillis()}.jpg"
-                )
-                clipImageFile?.let {
-                    clipImageObserver.launch(
-                        takePhotoTempFile?.absolutePath ?: "",
-                        it.absolutePath, clipParamData
-                    )
-                }
-            } else {
-                selectPreviewObserver.launch(
-                    takePhotoTempFile?.absolutePath,
-                    FileProvider7.getUriForFile(this@ImageSelectActivity, takePhotoTempFile)
-                        ?.toString(),
-                    source
-                )
-            }
-        }
-    }
-
-    private fun onImageFileResult(filePath: String?, resultCode: Int = Activity.RESULT_OK) {
-        var file: File? = null
-        if (filePath != null) {
-            file = File(filePath)
-        }
-        finishResult(
-            filePath,
-            FileProvider7.getUriForFile(this@ImageSelectActivity, file)?.toString(),
-            resultCode,
-            MediaType.IMAGE
-        )
-    }
-
-    private fun finishResult(
-        filePath: String?,
-        fileUri: String?,
-        resultCode: Int = Activity.RESULT_OK,
-        mediaType: MediaType,
-        localMedia: LocalMedia? = null
-    ) {
-        val intent = Intent()
-        intent.putExtra(KEY_SOURCE, source)
-        intent.putExtra(KEY_MEDIA_TYPE, mediaType)
-        intent.putExtra(SELECT_IMAGE_PATH, filePath)
-        intent.putExtra(SELECT_IMAGE_URI, fileUri)
-        if (localMedia != null) {
-            val mediaInfos = ArrayList<LocalMedia>().apply {
-                add(localMedia)
-            }
-            intent.putParcelableArrayListExtra(SELECT_IMAGES, mediaInfos)
-        }
-        intent.putExtra(KEY_FROM_POSITION, fromPosition)
-        setResult(resultCode, intent)
-        finish()
-    }
-
-    private fun onFolderSelected(folder: LocalMediaFolder) {
-        hideFolders()
-        binding.imageDirNameTv.text = folder.name
-        val mediaInfoList = arrayListOf<MediaInfo>()
-        if (mediaType != MediaType.VIDEO) {
-            mediaInfoList.add(AddInfo(mediaType = MediaType.getMediaType(folder.ofAllType)))
-        }
-        val localMediaList = folder.getImages()
-        if (gifOpt == true) {
-            localMediaList.sortBy { !PictureMimeType.isGif(it.mimeType) }
-        }
-
-        mediaInfoList.addAll(localMediaList)
-        selectImageListAdapter.items = mediaInfoList
-        selectImageListAdapter.notifyDataSetChanged()
-    }
-
-    override fun onBackPressed() {
-        if (binding.imageFolderCl.visibility == View.VISIBLE) {
-            hideFolders()
-            return
-        }
-
-        super.onBackPressed()
-    }
-
-    override fun onDestroy() {
-        super.onDestroy()
-        videoCoverCache.evictAll()
-    }
-
-    override fun onSelectFolder(folderInfo: LocalMediaFolder) {
-        mediaSelectViewModel.selectFolder(folderInfo)
-    }
-
-    override fun onSelectImage(imageInfo: LocalMedia) {
-        if (imageMinSize > 0 && PictureMimeType.eqImage(imageInfo.mimeType) && !PictureMimeType.isGif(
-                imageInfo.mimeType
-            )
-        ) {
-            if (imageInfo.width < imageMinSize || imageInfo.height < imageMinSize) {
-                showToast(R.string.photo_size_not_valid)
-                return
-            }
-        }
-
-        val clipParamData = clipParamData
-        if (clipParamData != null && !PictureMimeType.isGif(imageInfo.mimeType)) {
-            clipImage(imageInfo)
-        } else {
-            selectPreviewObserver.launch(imageInfo.path, imageInfo.uri, source, maxNum == 1)
-        }
-    }
-
-    override fun onItemChecked(position: Int) {
-        val item = selectImageListAdapter.items[position]
-        if (item is LocalMedia) {
-            if (!item.isChecked && checkedMedias.size >= maxNum) {
-                return
-            }
-
-            if (imageMinSize > 0 && PictureMimeType.eqImage(item.mimeType) && !PictureMimeType.isGif(
-                    item.mimeType
-                )
-            ) {
-                if (item.width < imageMinSize || item.height < imageMinSize) {
-                    showToast(R.string.photo_size_not_valid)
-                    return
-                }
-            }
-            if (item.isVideo() && videoMaxSecond > 0 && item.duration > videoMaxSecond * 1000L) {
-                showToast(
-                    getCompatString(
-                        R.string.common_video_select_duration_limit_tip,
-                        videoMaxSecond.toString()
-                    )
-                )
-                return
-            }
-
-            item.isChecked = !item.isChecked
-
-            if (item.isChecked) {
-                checkedMedias.add(item)
-                item.num = checkedMedias.size
-                selectImageListAdapter.notifyItemChanged(position)
-            } else {
-                item.num = 0
-                selectImageListAdapter.notifyItemChanged(position)
-
-                // 中间的取消选择后, 从列表中移除, 并改变后面的数字
-                val indexOf = checkedMedias.indexOf(item)
-                if (indexOf != -1) {
-                    checkedMedias.removeAt(indexOf)
-                }
-                for (i in indexOf until checkedMedias.size) {
-                    val mediaInfo = checkedMedias[i]
-                    mediaInfo.num = i + 1
-                    selectImageListAdapter.notifyItemChanged(
-                        selectImageListAdapter.items.indexOf(
-                            mediaInfo
-                        )
-                    )
-                }
-            }
-        }
-    }
-
-    override fun onSelectVideo(videoInfo: LocalMedia) {
-        if (videoMaxSecond > 0 && videoInfo.duration > videoMaxSecond * 1000L) {
-            showToast(
-                getCompatString(
-                    R.string.common_video_select_duration_limit_tip, videoMaxSecond.toString()
-                )
-            )
-            return
-        }
-        finishResult(videoInfo.path, videoInfo.uri, RESULT_OK, MediaType.VIDEO, videoInfo)
-    }
-
-    override fun onTakeAll() {
-        onTakePhoto()
-    }
-
-    @SuppressLint("CheckResult")
-    override fun onTakePhoto() {
-        if (PermissionUtils.hasPermissions(this, Manifest.permission.CAMERA)) {
-            when (val rlt = App.instance.hardwareManager.checkHardwareAvailable(Hardware.CAMERA)) {
-                is Rlt.Failed -> {
-                    showToast(rlt.error.msg)
-                }
-
-                is Rlt.Success -> {
-                    takePhotoTempFile?.let {
-                        takePhotoObserver.launch(it)
-                    }
-                }
-            }
-        } else {
-            PermissionUtils.getRxPermissions(this)
-                .request(Manifest.permission.CAMERA).subscribe { granted ->
-                    if (granted) {
-                        when (val rlt =
-                            App.instance.hardwareManager.checkHardwareAvailable(Hardware.CAMERA)) {
-                            is Rlt.Failed -> {
-                                showToast(rlt.error.msg)
-                            }
-
-                            is Rlt.Success -> {
-                                takePhotoTempFile?.let {
-                                    takePhotoObserver.launch(it)
-                                }
-                            }
-                        }
-                    }
-                }
-        }
-    }
-
-    override fun onTakeVideo() {
-
-    }
-
-    private fun getMediaTypePermissionArray(): Array<String> {
-        if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) {
-            return arrayOf(Manifest.permission.READ_EXTERNAL_STORAGE)
-        }
-        return when (mediaType) {
-            MediaType.ALL -> {
-                arrayOf(Manifest.permission.READ_MEDIA_IMAGES, Manifest.permission.READ_MEDIA_VIDEO)
-            }
-
-            MediaType.IMAGE -> {
-                arrayOf(Manifest.permission.READ_MEDIA_IMAGES)
-            }
-
-            MediaType.VIDEO -> {
-                arrayOf(Manifest.permission.READ_MEDIA_VIDEO)
-            }
-        }
-    }
-
-    private fun updateMesText() {
-        //具体的文案由外部根据业务逻辑进行设置,内部只做展示处理
-        if (topTipsString.isNullOrEmpty()){
-            binding.selectMesTipTv.gone()
-            return
-        }
-        binding.selectMesTipTv.show()
-        binding.selectMesTipTv.text = topTipsString
-    }
-
-
-}

+ 0 - 87
app/src/main/java/com/adealink/weparty/imageselect/SelectImageContract.kt

@@ -1,87 +0,0 @@
-package com.adealink.weparty.imageselect
-
-import android.app.Activity
-import android.content.Context
-import android.content.Intent
-import androidx.activity.result.contract.ActivityResultContract
-import com.adealink.weparty.imageselect.clip.ClipParamData
-import com.adealink.weparty.imageselect.clip.MesTipData
-import com.adealink.weparty.imageselect.model.LocalMedia
-import com.adealink.weparty.imageselect.model.MediaType
-import java.util.ArrayList
-
-data class SelectImageRequest(
-    val maxNum: Int = 1,
-    val source: String = "",
-    val clipParamData: ClipParamData? = null, //裁剪参数,为空则跳过图片裁剪
-    val mediaType: MediaType = MediaType.IMAGE,
-    val gifOpt: Boolean? = false,//是否需要选择GIF图片
-    val mesTip: MesTipData? = null,//显示gif图片的文字信息,
-    val coverExpireTime: Long? = null,
-    val fromPosition: Int? = null, //列表点击来源的位置
-    val selectedLocalMedia: List<LocalMedia>? = null, //已选择图片列表
-    val videoMaxSecond: Int? = null, //视频最长秒数限制
-    val imageMinSize: Int? = null, //图片最小尺寸限制,宽度高度
-    val topTipsString: CharSequence? = null //顶部提示文字,支持富文本
-) {
-    companion object {
-        const val SOURCE_EDIT_PROFILE_COVER = "3" //用户资料页封面
-    }
-}
-
-data class SelectImageResult(
-    val source: String,
-    val resultCode: Int,
-    val path: String?,
-    val uri: String?,
-    val mediaType: MediaType,
-    val mediaInfos: List<LocalMedia>? = null,
-    val clipParamData: ClipParamData? = null,
-    val fromPosition: Int? = null //列表点击来源的位置
-)
-
-class SelectImageContract : ActivityResultContract<SelectImageRequest, SelectImageResult>() {
-
-
-    override fun createIntent(context: Context, input: SelectImageRequest): Intent {
-        return Intent(context, ImageSelectActivity::class.java).apply {
-            putExtra(ImageSelectActivity.KEY_SOURCE, input.source)
-            putExtra(ImageSelectActivity.KEY_MAX_NUM, input.maxNum)
-            putExtra(ImageSelectActivity.KEY_CLIP_PARAM_DATA, input.clipParamData)
-            putExtra(ImageSelectActivity.KEY_MEDIA_TYPE, input.mediaType)
-            putExtra(ImageSelectActivity.KEY_GIF_OPTION, input.gifOpt)
-            putExtra(ImageSelectActivity.SHOW_MES_TIP, input.mesTip)
-            putExtra(ImageSelectActivity.COVER_EXPIRE_TIME, input.coverExpireTime)
-            putExtra(ImageSelectActivity.KEY_FROM_POSITION, input.fromPosition)
-            putParcelableArrayListExtra(ImageSelectActivity.KEY_SELECTED_MEDIA_LIST, input.selectedLocalMedia as? ArrayList)
-            putExtra(ImageSelectActivity.KEY_VIDEO_MAX_SECOND, input.videoMaxSecond)
-            putExtra(ImageSelectActivity.KEY_IMAGE_MIN_SIZE,input.imageMinSize)
-            putExtra(ImageSelectActivity.TOP_TIPS_STRING, input.topTipsString)
-        }
-    }
-
-    override fun parseResult(resultCode: Int, intent: Intent?): SelectImageResult {
-        val source: String =
-            intent?.getStringExtra(ImageSelectActivity.KEY_SOURCE) ?: ""
-        val mediaType =
-            (intent?.getSerializableExtra(ImageSelectActivity.KEY_MEDIA_TYPE) as? MediaType)
-                ?: MediaType.ALL
-        val selectedImagePath: String? =
-            intent?.getStringExtra(ImageSelectActivity.SELECT_IMAGE_PATH)
-        val selectedImageUri: String? =
-            intent?.getStringExtra(ImageSelectActivity.SELECT_IMAGE_URI)
-        val mediaInfos =
-            intent?.getParcelableArrayListExtra<LocalMedia>(ImageSelectActivity.SELECT_IMAGES)
-        val fromPosition = intent?.getIntExtra(ImageSelectActivity.KEY_FROM_POSITION, -1)
-        return SelectImageResult(
-            source,
-            resultCode,
-            if (resultCode == Activity.RESULT_OK) selectedImagePath else null,
-            if (resultCode == Activity.RESULT_OK) selectedImageUri else null,
-            mediaType,
-            mediaInfos,
-            fromPosition = fromPosition
-        )
-    }
-
-}

+ 0 - 121
app/src/main/java/com/adealink/weparty/imageselect/SelectImageLifecycleObserver.kt

@@ -1,121 +0,0 @@
-package com.adealink.weparty.imageselect
-
-import android.os.Build
-import androidx.activity.result.ActivityResultLauncher
-import androidx.activity.result.ActivityResultRegistry
-import androidx.appcompat.app.AppCompatActivity
-import androidx.lifecycle.DefaultLifecycleObserver
-import androidx.lifecycle.LifecycleOwner
-import com.adealink.frame.util.AppUtil
-import com.adealink.frame.util.FileProvider7
-import com.adealink.weparty.imageselect.clip.ClipImageLifecycleObserver
-import com.adealink.weparty.imageselect.clip.ClipParamData
-import com.adealink.weparty.imageselect.clip.MesTipData
-import com.adealink.weparty.imageselect.clip.avatarClipParam
-import com.adealink.weparty.imageselect.model.LocalMedia
-import com.adealink.weparty.imageselect.model.MediaType
-import com.adealink.weparty.storage.file.FilePath.clipImagePath
-import java.io.File
-
-abstract class SelectImageLifecycleObserver(
-    private val registry: ActivityResultRegistry,
-    private val registerKey: String = "SelectImage"
-) :
-    DefaultLifecycleObserver {
-    private lateinit var launcher: ActivityResultLauncher<SelectImageRequest>
-
-    private var source: String = ""
-    private var mediaType: MediaType = MediaType.ALL
-
-    override fun onCreate(owner: LifecycleOwner) {
-        val clipImageObserver =
-            object : ClipImageLifecycleObserver(registry, "${registerKey}ClipImage") {
-                override fun onResult(resultCode: Int, inputPath: String, outputPath: String) {
-                    if (resultCode != AppCompatActivity.RESULT_OK) {
-                        return
-                    }
-
-                    onResult(
-                        source,
-                        resultCode,
-                        outputPath,
-                        FileProvider7.getUriForFile(AppUtil.appContext, File(outputPath))?.toString(),
-                        mediaType
-                    )
-                }
-            }
-        owner.lifecycle.addObserver(clipImageObserver)
-        launcher = registry.register(registerKey, owner, SelectImageContract()) {
-            source = it.source
-            val resultCode = it.resultCode
-            val filePath = it.path
-            val uri = it.uri
-            val clipParamData = it.clipParamData
-            mediaType = it.mediaType
-            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
-                if (mediaType != MediaType.IMAGE) {
-                    onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos,it.fromPosition)
-                    return@register
-                }
-
-                if (filePath.isNullOrEmpty() || clipParamData == null) {
-                    onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos,it.fromPosition)
-                    return@register
-                }
-
-                val outputFile = File(clipImagePath, "${System.currentTimeMillis()}.jpg")
-                val outputFilePath = outputFile.absolutePath
-                clipImageObserver.launch(filePath, outputFilePath, clipParamData)
-            } else {
-                onResult(source, resultCode, filePath, uri, mediaType, it.mediaInfos, it.fromPosition)
-            }
-        }
-    }
-
-    fun launch(
-        source: String = "",
-        clipParamData: ClipParamData? = avatarClipParam,
-        mediaType: MediaType = MediaType.IMAGE,
-        gifOpt: Boolean? = false,
-        mesTip: MesTipData? = null,
-        maxNum: Int = 1,
-        coverExpireTime: Long = 0L,
-        fromPosition: Int? = null,
-        selectedMediaList: List<LocalMedia>? = null,
-        videoMaxSecond: Int? = null,
-        imageMinSize : Int? = null, //图片最小尺寸限制,宽度高度
-        topTipsString: CharSequence? = null
-    ) {
-        launcher.launch(
-            SelectImageRequest(
-                maxNum,
-                source,
-                clipParamData,
-                mediaType,
-                gifOpt,
-                mesTip,
-                coverExpireTime,
-                fromPosition,
-                selectedMediaList,
-                videoMaxSecond,
-                imageMinSize,
-                topTipsString
-            )
-        )
-    }
-
-    abstract fun onResult(
-        source: String,
-        resultCode: Int,
-        path: String?,
-        uri: String?,
-        mediaType: MediaType = MediaType.IMAGE,
-        mediaInfos: List<LocalMedia>? = null,
-        fromPosition: Int? = null
-    )
-
-    override fun onDestroy(owner: LifecycleOwner) {
-        super.onDestroy(owner)
-        launcher.unregister()
-    }
-}

+ 0 - 9
app/src/main/java/com/adealink/weparty/imageselect/cache/VideoCoverCache.kt

@@ -2,14 +2,5 @@ package com.adealink.weparty.imageselect.cache
 
 import android.graphics.Bitmap
 import androidx.collection.LruCache
-import com.adealink.frame.storage.cache.TimeoutLruCache
-
-/**
- * author : qimingfeng
- * e-mail : qimingfengwy@163.com
- * time   : 2025/4/12
- * desc   :
- * version: 1.0
- */
 
 val videoCoverCache by lazy { LruCache<String, Bitmap>(64) }

+ 0 - 29
app/src/main/java/com/adealink/weparty/imageselect/constant/ImageSelectTopTips.kt

@@ -1,29 +0,0 @@
-package com.adealink.weparty.imageselect.constant
-
-import android.text.SpannableStringBuilder
-import com.adealink.frame.aab.util.getCompatString
-import com.adealink.weparty.R
-import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.profile.data.SVIPLevel
-import com.adealink.weparty.module.profile.data.SVIPLevel.Companion.isSatisfyLevel
-
-/**
- * Created by XiaoDongLin.
- * Date: 2025/7/21
- */
-object ImageSelectTopTips {
-
-    /**
-     * 按需构造相应的tips提示
-     */
-    fun gifAvatarTips(): CharSequence {
-        val gifEnable = SVIPLevel.SEVEN.isSatisfyLevel(ProfileModule.getMyUserInfo()?.sVipLevel)
-        if (!gifEnable) {
-            return ""
-        }
-        return SpannableStringBuilder(getCompatString(R.string.set_gif_avatar_tips)).apply {
-
-        }
-    }
-
-}

+ 0 - 3
app/src/main/java/com/adealink/weparty/imageselect/constant/Tags.kt

@@ -1,8 +1,5 @@
 package com.adealink.weparty.imageselect.constant
 
-/**
- * Created by sunxiaodong on 2022/3/17.
- */
 
 const val TAG_IMAGE_SELECT = "tag_image_select"
 const val TAG_IMAGE_SELECT_LOAD = "${TAG_IMAGE_SELECT}_load"

+ 2 - 5
app/src/main/java/com/adealink/weparty/imageselect/model/MediaType.kt

@@ -1,10 +1,5 @@
 package com.adealink.weparty.imageselect.model
 
-import com.adealink.weparty.imageselect.ImageSelectActivity.Companion.MESSAGE_GIF_MAX_SIZE_KB
-
-/**
- * Created by sunxiaodong on 2022/3/16.
- */
 enum class MediaType(val type: Int) {
     ALL(0), //全部
     IMAGE(1), //图片
@@ -36,6 +31,8 @@ enum class MediaType(val type: Int) {
 
 }
 
+const val MESSAGE_GIF_MAX_SIZE_KB = 5 * 1024 * 1024 //GIF 图片上传最大size
+
 data class LoadMediaConfig(
     val mediaType: MediaType,
     val filterGift: Boolean = true,

+ 0 - 2
app/src/main/java/com/adealink/weparty/imageselect/model/SelectImageInfo.kt

@@ -1,8 +1,6 @@
 package com.adealink.weparty.imageselect.model
 
-import android.graphics.Bitmap
 import android.os.Parcelable
-import com.adealink.frame.util.DisplayUtil
 import com.adealink.weparty.imageselect.util.PictureMimeType
 import kotlinx.parcelize.IgnoredOnParcel
 import kotlinx.parcelize.Parcelize

+ 0 - 145
app/src/main/java/com/adealink/weparty/imageselect/selectpreview/SelectPreviewActivity.kt

@@ -1,145 +0,0 @@
-package com.adealink.weparty.imageselect.selectpreview
-
-import android.content.Intent
-import android.view.View
-import com.adealink.frame.aab.util.getCompatString
-import com.adealink.frame.effect.data.INFINITE_LOOP
-import com.adealink.frame.effect.video.controller.VideoScalingMode
-import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.frame.router.Router
-import com.adealink.frame.util.onClick
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.BaseActivity
-import com.adealink.weparty.commonui.ext.isGIFImage
-import com.adealink.weparty.commonui.ext.show
-import com.adealink.weparty.commonui.toast.util.showToast
-import com.adealink.weparty.databinding.ActivitySelectPreviewBinding
-import com.adealink.weparty.imageselect.SelectImageRequest.Companion.SOURCE_EDIT_PROFILE_COVER
-import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.profile.data.SVIPLevel
-import com.adealink.weparty.module.profile.data.SVIPLevel.Companion.isSatisfyLevel
-import com.adealink.weparty.module.webview.Web
-import com.adealink.weparty.url.H5Page
-import com.adealink.weparty.url.urlConfigService
-
-/**
- * 支持预览类型:图片、视频
- */
-class SelectPreviewActivity : BaseActivity() {
-    private val binding by viewBinding(ActivitySelectPreviewBinding::inflate)
-    private var uri = ""
-    private var source = ""
-    private var path = ""
-    private var showConfirm = true
-    private var previewType = SelectPreviewType.IMAGE.name
-
-    override fun onBeforeCreate() {
-        super.onBeforeCreate()
-        uri = intent?.getStringExtra(KEY_URI) ?: ""
-        source = intent?.getStringExtra(KEY_SOURCE) ?: ""
-        path = intent?.getStringExtra(KEY_PATH) ?: ""
-        showConfirm = intent?.getBooleanExtra(KEY_SHOW_CONFIRM, true) ?: true
-        previewType = intent?.getStringExtra(KEY_PREVIEW_TYPE) ?: SelectPreviewType.IMAGE.name
-    }
-
-    override fun initViews() {
-        setContentView(binding.root)
-        if (SelectPreviewType.VIDEO.name == previewType) { // 视频预览
-            binding.ivPhoto.visibility = View.GONE
-            binding.videoView.visibility = View.VISIBLE
-            playVideo(uri)
-        } else { // 图片预览
-            binding.videoView.visibility = View.GONE
-            binding.ivPhoto.visibility = View.VISIBLE
-            binding.ivPhoto.setImagePath(path.ifEmpty { uri })
-        }
-        if (showConfirm) {
-            binding.clBottom.show()
-            //显示SVIP跳转按钮
-            addSVipSkipBtn()
-
-            binding.btnConfirm.setOnClickListener {
-                if (!checkShowSVipNoSatisfy()) { //需要开通SVIP才能选择图片
-                    return@setOnClickListener
-                }
-                val intent = Intent()
-                intent.putExtra(KEY_SOURCE, source)
-                intent.putExtra(KEY_PATH, path)
-                intent.putExtra(KEY_URI, uri)
-                intent.putExtra(KEY_PREVIEW_TYPE, previewType)
-                setResult(RESULT_OK, intent)
-                finish()
-            }
-            binding.btnCancel.setOnClickListener {
-                onCancelAction()
-            }
-        }
-        binding.back.setOnClickListener {
-            onCancelAction()
-        }
-    }
-
-    private fun onCancelAction() {
-        setResult(RESULT_CANCELED)
-        finish()
-    }
-
-    private fun playVideo(url: String) {
-        binding.videoView.setVideoScalingMode(VideoScalingMode.ScaleToFitWithCropping)
-        binding.videoView.setAutoPlay(true)
-        binding.videoView.setLoopCount(INFINITE_LOOP)
-        binding.videoView.setUri(url)
-    }
-
-    /**
-     * 添加SVIP跳转按钮
-     * 满足1:用户资料卡封面;2:Gif图;3:没有满足SVIP等级才显示SVIP跳转按钮
-     */
-    private fun addSVipSkipBtn() {
-        val isSatisfyLevel =
-            SVIPLevel.SEVEN.isSatisfyLevel(ProfileModule.getMyUserInfo()?.sVipLevel)
-        if (source == SOURCE_EDIT_PROFILE_COVER && isGIFImage(path) && !isSatisfyLevel) {
-            binding.clSvipSkip.show()
-            val builder = StringBuilder().append(getScenarioTips()).append(" ")
-                .append(getString(R.string.imageselect_open_svip_go))
-            binding.clSvipSkip.text = builder.toString()
-            binding.clSvipSkip.onClick {
-                Router.build(this, Web.FullScreen.PATH)
-                    .putExtra(Web.Common.EXTRA_URL, urlConfigService.getH5Url(H5Page.SVIP)).start()
-            }
-        }
-    }
-
-    /**
-     * 是否显示SVIP等级不符合提示
-     */
-    private fun checkShowSVipNoSatisfy(): Boolean {
-        val isSatisfyLevel =
-            SVIPLevel.SEVEN.isSatisfyLevel(ProfileModule.getMyUserInfo()?.sVipLevel)
-        if (source == SOURCE_EDIT_PROFILE_COVER && isGIFImage(path) && !isSatisfyLevel) {
-            showToast(getScenarioTips())
-            return false
-        }
-        return true
-    }
-
-
-    private fun getScenarioTips(): String {
-        return when (source) {
-            SOURCE_EDIT_PROFILE_COVER -> {
-                getCompatString(R.string.imageselect_open_svip_tips)
-            }
-
-            else -> ""
-        }
-    }
-
-    companion object {
-        const val TAG = "SelectPreviewActivity"
-        const val KEY_SOURCE = "source"
-        const val KEY_PATH = "select_path"
-        const val KEY_URI = "select_uri"
-        const val KEY_SHOW_CONFIRM = "key_show_confirm"
-        const val KEY_PREVIEW_TYPE = "key_preview_type"
-    }
-}

+ 0 - 56
app/src/main/java/com/adealink/weparty/imageselect/selectpreview/SelectPreviewContract.kt

@@ -1,56 +0,0 @@
-package com.adealink.weparty.imageselect.selectpreview
-
-import android.app.Activity
-import android.content.Context
-import android.content.Intent
-import androidx.activity.result.contract.ActivityResultContract
-
-data class SelectPreviewRequest(
-    val source: String,
-    val path: String?,
-    val uri: String?,
-    val previewType: SelectPreviewType = SelectPreviewType.IMAGE,
-    val showConfirm: Boolean = true,
-)
-
-data class SelectPreviewResult(
-    val source: String,
-    val resultCode: Int,
-    val path: String?,
-    val uri: String?,
-    val previewType: SelectPreviewType?,
-)
-
-// 预览的媒体类型
-enum class SelectPreviewType {
-    IMAGE, VIDEO,
-}
-
-class SelectPreviewContract : ActivityResultContract<SelectPreviewRequest, SelectPreviewResult>() {
-
-    override fun createIntent(context: Context, input: SelectPreviewRequest): Intent {
-        val intent = Intent(context, SelectPreviewActivity::class.java)
-        intent.putExtra(SelectPreviewActivity.KEY_SOURCE, input.source)
-        intent.putExtra(SelectPreviewActivity.KEY_PATH, input.path)
-        intent.putExtra(SelectPreviewActivity.KEY_URI, input.uri)
-        intent.putExtra(SelectPreviewActivity.KEY_SHOW_CONFIRM, input.showConfirm)
-        intent.putExtra(SelectPreviewActivity.KEY_PREVIEW_TYPE, input.previewType.name)
-        return intent
-    }
-
-    override fun parseResult(resultCode: Int, intent: Intent?): SelectPreviewResult {
-        val source: String = intent?.getStringExtra(SelectPreviewActivity.KEY_SOURCE) ?: ""
-        val path: String? = intent?.getStringExtra(SelectPreviewActivity.KEY_PATH)
-        val uri: String? = intent?.getStringExtra(SelectPreviewActivity.KEY_URI)
-        val previewTypeStr: String? = intent?.getStringExtra(SelectPreviewActivity.KEY_PREVIEW_TYPE)
-        val previewType =
-            if (previewTypeStr == SelectPreviewType.VIDEO.name) SelectPreviewType.VIDEO else SelectPreviewType.IMAGE
-        return SelectPreviewResult(
-            source,
-            resultCode,
-            if (resultCode == Activity.RESULT_OK) path else null,
-            if (resultCode == Activity.RESULT_OK) uri else null,
-            if (resultCode == Activity.RESULT_OK) previewType else null,
-        )
-    }
-}

+ 0 - 33
app/src/main/java/com/adealink/weparty/imageselect/selectpreview/SelectPreviewLifecycleObserver.kt

@@ -1,33 +0,0 @@
-package com.adealink.weparty.imageselect.selectpreview
-
-import androidx.activity.result.ActivityResultLauncher
-import androidx.activity.result.ActivityResultRegistry
-import androidx.lifecycle.DefaultLifecycleObserver
-import androidx.lifecycle.LifecycleOwner
-
-abstract class SelectPreviewLifecycleObserver(private val registry: ActivityResultRegistry) :
-    DefaultLifecycleObserver {
-    private lateinit var selectPreviewLauncher: ActivityResultLauncher<SelectPreviewRequest>
-
-    override fun onCreate(owner: LifecycleOwner) {
-        selectPreviewLauncher = registry.register("SelectPreview", owner, SelectPreviewContract()) {
-            onResult(it)
-        }
-    }
-
-    fun launch(
-        path: String?,
-        uri: String?,
-        source: String = "",
-        showConfirm: Boolean = true,
-        previewType: SelectPreviewType = SelectPreviewType.IMAGE,
-    ) {
-        selectPreviewLauncher.launch(
-            SelectPreviewRequest(
-                source, path, uri, previewType, showConfirm
-            )
-        )
-    }
-
-    abstract fun onResult(result: SelectPreviewResult)
-}

+ 0 - 66
app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraActivity.kt

@@ -1,66 +0,0 @@
-package com.adealink.weparty.imageselect.takePhoto
-
-import android.annotation.SuppressLint
-import android.content.Intent
-import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.BaseActivity
-import com.adealink.weparty.databinding.ActivityCameraBinding
-import com.qmuiteam.qmui.widget.util.QMUIStatusBarHelper
-
-/**
- * Created By: duxuefu
- * Creation Date: 2025/3/28 15:21
- * Description: 目前仅支持录制视频,拍照还是使用系统Intent(MediaStore.ACTION_IMAGE_CAPTURE)
- *
- * 1.放弃使用 Intent(MediaStore.ACTION_VIDEO_CAPTURE) :因设置最大录制时长的方法
- * intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 10) 在一些机型上不奏效;
- */
-class CameraActivity : BaseActivity(), RecordVideoFragment.VideoRecordListener {
-
-    private val binding by viewBinding(ActivityCameraBinding::inflate)
-
-    private var limitedDuration: Int = CameraConst.DEF_VIDEO_LIMITED_DURATION // 录制时长限制,单位:秒
-
-    override fun onBeforeCreate() {
-        super.onBeforeCreate()
-        limitedDuration =
-            intent.getIntExtra(EXTRA_LIMITED_DURATION, CameraConst.DEF_VIDEO_LIMITED_DURATION)
-    }
-
-    override fun initViews() {
-        super.initViews()
-        QMUIStatusBarHelper.setStatusBarLightMode(this)
-        setContentView(binding.root)
-        inflateRecordVideoFragment()
-    }
-
-    @SuppressLint("CommitTransaction")
-    private fun inflateRecordVideoFragment() {
-        var fragment =
-            supportFragmentManager.findFragmentByTag(RecordVideoFragment.TAG) as? RecordVideoFragment
-        if (fragment?.isDetached == true) {
-            return
-        }
-
-        fragment = (fragment ?: RecordVideoFragment.newInstance(limitedDuration = limitedDuration))
-        fragment.videoRecordListener = this
-        supportFragmentManager.beginTransaction()
-            .replace(R.id.f_container, fragment, RecordVideoFragment.TAG)
-            .commit()
-    }
-
-    override fun onRecordSuccess(videoInfo: RecordVideoInfo) {
-        val resultIntent = Intent().apply {
-            putExtra(EXTRA_VIDEO, videoInfo)
-        }
-        setResult(RESULT_OK, resultIntent)
-        finish()
-    }
-
-    companion object {
-        // 传参
-        const val EXTRA_LIMITED_DURATION = "limited_duration"
-        const val EXTRA_VIDEO = "key_video_info"
-    }
-}

+ 0 - 10
app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraConst.kt

@@ -1,10 +0,0 @@
-package com.adealink.weparty.imageselect.takePhoto
-
-/**
- * Created By: duxuefu
- * Creation Date: 2025/3/28 19:22
- * Description: 相机相关常量
- */
-object CameraConst {
-    const val DEF_VIDEO_LIMITED_DURATION: Int = 30 // 单位:秒
-}

+ 0 - 77
app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraContract.kt

@@ -1,77 +0,0 @@
-package com.adealink.weparty.imageselect.takePhoto
-
-import android.app.Activity.RESULT_OK
-import android.content.Context
-import android.content.Intent
-import android.net.Uri
-import android.os.Environment
-import android.os.Parcelable
-import android.provider.MediaStore
-import androidx.activity.result.contract.ActivityResultContract
-import com.adealink.frame.util.AppUtil
-import com.adealink.frame.util.FileProvider7
-import kotlinx.parcelize.Parcelize
-import java.io.File
-
-data class TakePhotoRequest(val file: File)
-
-data class TakePhotoResult(val resultCode: Int)
-
-/**
- * 拍照 -> 系统相机
- */
-class TakePhotoContract : ActivityResultContract<TakePhotoRequest, TakePhotoResult>() {
-
-    override fun createIntent(context: Context, input: TakePhotoRequest): Intent {
-        val intent = Intent(MediaStore.ACTION_IMAGE_CAPTURE)
-        val mImageCaptureUri: Uri? =
-            if (Environment.MEDIA_MOUNTED == Environment.getExternalStorageState()) {
-                FileProvider7.getUriForFile(AppUtil.appContext, input.file)
-            } else {
-                Uri.parse("content://eu.janmuller.android.simplecropimage.example/")
-            }
-        intent.putExtra(MediaStore.EXTRA_OUTPUT, mImageCaptureUri)
-        intent.putExtra("return-data", true)
-        return intent
-    }
-
-    override fun parseResult(resultCode: Int, intent: Intent?): TakePhotoResult {
-        return TakePhotoResult(resultCode)
-    }
-}
-
-/**
- * 录制视频 -> 自定义录屏 Activity
- */
-class RecordVideoContract : ActivityResultContract<RecordVideoRequest, RecordVideoInfo>() {
-
-    override fun createIntent(context: Context, input: RecordVideoRequest): Intent {
-        return Intent(context, CameraActivity::class.java).apply {
-            putExtra(CameraActivity.EXTRA_LIMITED_DURATION, input.limitedDuration)
-        }
-    }
-
-    override fun parseResult(resultCode: Int, intent: Intent?): RecordVideoInfo {
-        return when (resultCode) {
-            RESULT_OK -> {
-                val info = intent?.getParcelableExtra<RecordVideoInfo>(CameraActivity.EXTRA_VIDEO)
-                info ?: RecordVideoInfo()
-            }
-
-            else -> {
-                RecordVideoInfo()
-            }
-        }
-    }
-}
-
-data class RecordVideoRequest(
-    val limitedDuration: Int, // 限制录制时长,单位:秒
-)
-
-@Parcelize
-data class RecordVideoInfo(
-    val uri: Uri? = null,
-    val path: String? = null,
-    val duration: Long = 0, // 视频时长, 毫秒
-) : Parcelable

+ 0 - 79
app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraExtensions.kt

@@ -1,79 +0,0 @@
-package com.adealink.weparty.imageselect.takePhoto
-
-import android.content.res.Configuration
-import android.view.View
-import android.view.View.GONE
-import android.view.View.VISIBLE
-import android.view.ViewAnimationUtils
-import android.view.ViewGroup
-import android.view.Window
-import android.widget.ImageButton
-import androidx.annotation.DrawableRes
-import androidx.core.animation.doOnEnd
-import androidx.core.animation.doOnStart
-import androidx.core.view.ViewCompat
-import androidx.core.view.WindowCompat
-import androidx.core.view.WindowInsetsCompat
-
-/**
- * @param flag 当前按钮状态
- */
-fun ImageButton.toggleButton(
-    flag: Boolean, rotationAngle: Float, @DrawableRes falseIcon: Int, @DrawableRes trueIcon: Int,
-    action: (Boolean) -> Unit
-) {
-    // 计算目标旋转角度和对应图标
-    val targetFlag = !flag
-    val targetRotation = if (targetFlag) rotationAngle else 0f
-    val targetIconRes = if (targetFlag) trueIcon else falseIcon
-
-    // 执行旋转动画
-    animate()
-        .rotationY(targetRotation)
-        .setDuration(200)
-        .withEndAction {
-            // 动画结束后同步更新图标和回调状态
-            setImageResource(targetIconRes)
-            action(targetFlag)
-        }
-        .start()
-}
-
-fun ViewGroup.circularReveal(button: ImageButton) {
-    ViewAnimationUtils.createCircularReveal(
-        this,
-        button.x.toInt() + button.width / 2,
-        button.y.toInt() + button.height / 2,
-        0f,
-        if (button.context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) this.width.toFloat() else this.height.toFloat()
-    ).apply {
-        duration = 500
-        doOnStart { visibility = VISIBLE }
-    }.start()
-}
-
-fun ViewGroup.circularClose(button: ImageButton, action: () -> Unit = {}) {
-    ViewAnimationUtils.createCircularReveal(
-        this,
-        button.x.toInt() + button.width / 2,
-        button.y.toInt() + button.height / 2,
-        if (button.context.resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) this.width.toFloat() else this.height.toFloat(),
-        0f
-    ).apply {
-        duration = 500
-        doOnStart { action() }
-        doOnEnd { visibility = GONE }
-    }.start()
-}
-
-fun View.onWindowInsets(action: (View, WindowInsetsCompat) -> Unit) {
-    ViewCompat.requestApplyInsets(this)
-    ViewCompat.setOnApplyWindowInsetsListener(this) { v, insets ->
-        action(v, insets)
-        insets
-    }
-}
-
-fun Window.fitSystemWindows() {
-    WindowCompat.setDecorFitsSystemWindows(this, false)
-}

+ 0 - 49
app/src/main/java/com/adealink/weparty/imageselect/takePhoto/CameraLifecycleObserver.kt

@@ -1,49 +0,0 @@
-package com.adealink.weparty.imageselect.takePhoto
-
-import androidx.activity.result.ActivityResultLauncher
-import androidx.activity.result.ActivityResultRegistry
-import androidx.lifecycle.DefaultLifecycleObserver
-import androidx.lifecycle.LifecycleOwner
-import java.io.File
-
-abstract class TakePhotoLifecycleObserver(private val registry: ActivityResultRegistry) :
-    DefaultLifecycleObserver {
-    private lateinit var takePhotoLauncher: ActivityResultLauncher<TakePhotoRequest>
-
-    override fun onCreate(owner: LifecycleOwner) {
-        takePhotoLauncher = registry.register("TakePhoto", owner, TakePhotoContract(), {
-            onResult(it.resultCode)
-        })
-    }
-
-    fun launch(file: File) {
-        try {
-            takePhotoLauncher.launch(TakePhotoRequest(file))
-        } catch (_: Exception) {
-
-        }
-    }
-
-    abstract fun onResult(resultCode: Int)
-}
-
-abstract class RecordVideoLifecycleObserver(private val registry: ActivityResultRegistry) :
-    DefaultLifecycleObserver {
-    private lateinit var recordVideoLauncher: ActivityResultLauncher<RecordVideoRequest>
-
-    override fun onCreate(owner: LifecycleOwner) {
-        recordVideoLauncher = registry.register("RecordVideo", owner, RecordVideoContract(), {
-            onResult(it)
-        })
-    }
-
-    fun launch(limitedDuration: Int = CameraConst.DEF_VIDEO_LIMITED_DURATION) {
-        try {
-            recordVideoLauncher.launch(RecordVideoRequest(limitedDuration = limitedDuration))
-        } catch (_: Exception) {
-
-        }
-    }
-
-    abstract fun onResult(result: RecordVideoInfo)
-}

+ 0 - 466
app/src/main/java/com/adealink/weparty/imageselect/takePhoto/RecordVideoFragment.kt

@@ -1,466 +0,0 @@
-package com.adealink.weparty.imageselect.takePhoto
-
-import android.Manifest
-import android.annotation.SuppressLint
-import android.content.ContentValues
-import android.content.Context
-import android.content.res.Configuration
-import android.hardware.display.DisplayManager
-import android.net.Uri
-import android.os.Build
-import android.os.Bundle
-import android.provider.MediaStore
-import android.util.DisplayMetrics
-import android.util.Log
-import android.view.View
-import androidx.camera.core.AspectRatio
-import androidx.camera.core.Camera
-import androidx.camera.core.CameraSelector
-import androidx.camera.core.ImageCapture
-import androidx.camera.core.Preview
-import androidx.camera.lifecycle.ProcessCameraProvider
-import androidx.camera.video.FallbackStrategy
-import androidx.camera.video.MediaStoreOutputOptions
-import androidx.camera.video.Quality
-import androidx.camera.video.QualitySelector
-import androidx.camera.video.Recorder
-import androidx.camera.video.Recording
-import androidx.camera.video.VideoCapture
-import androidx.camera.video.VideoRecordEvent
-import androidx.constraintlayout.widget.ConstraintLayout
-import androidx.core.content.ContextCompat
-import androidx.core.view.WindowInsetsCompat
-import androidx.core.view.updateLayoutParams
-import androidx.lifecycle.lifecycleScope
-import com.adealink.frame.base.Rlt
-import com.adealink.frame.mvvm.view.viewBinding
-import com.adealink.weparty.App
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.BaseFragment
-import com.adealink.weparty.commonui.toast.util.showToast
-import com.adealink.weparty.commonui.widget.CircleProgressButtonView
-import com.adealink.weparty.databinding.FragmentRecordVideoBinding
-import com.adealink.weparty.hardware.Hardware
-import com.adealink.weparty.permission.PermissionUtils
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-import kotlin.math.abs
-import kotlin.math.max
-import kotlin.math.min
-import kotlin.properties.Delegates
-
-/**
- * Created By: duxuefu
- * Creation Date: 2025/3/28 15:56
- * Description: 录制视频的Fragment
- */
-class RecordVideoFragment : BaseFragment(R.layout.fragment_record_video) {
-    private val binding by viewBinding(FragmentRecordVideoBinding::bind)
-
-    // An instance for display manager to get display change callbacks
-    private val displayManager by lazy { requireContext().getSystemService(Context.DISPLAY_SERVICE) as DisplayManager }
-
-    private var camera: Camera? = null
-    private var cameraProvider: ProcessCameraProvider? = null
-    private var preview: Preview? = null
-    private var videoCapture: VideoCapture<Recorder>? = null
-
-    private var recording: Recording? = null
-
-    private var displayId = -1
-
-    // Selector showing which camera is selected (front or back)
-    private var lensFacing = CameraSelector.DEFAULT_BACK_CAMERA
-
-    // Selector showing which flash mode is selected (on, off or auto)
-    private var flashMode by Delegates.observable(ImageCapture.FLASH_MODE_OFF) { _, _, new ->
-        binding.btnFlash.setImageResource(
-            when (new) {
-                ImageCapture.FLASH_MODE_ON -> R.drawable.ic_flash_on
-                ImageCapture.FLASH_MODE_AUTO -> R.drawable.ic_flash_auto
-                else -> R.drawable.ic_flash_off
-            }
-        )
-    }
-
-    // Selector showing is grid enabled or not
-    private var hasGrid = false
-
-    // Selector showing is flash enabled or not
-    private var isTorchOn = false
-
-    // Selector showing is recording currently active
-    private var isRecording = false
-
-    /**
-     * A display listener for orientation changes that do not trigger a configuration
-     * change, for example if we choose to override config change in manifest or for 180-degree
-     * orientation changes.
-     */
-    private val displayListener = object : DisplayManager.DisplayListener {
-        override fun onDisplayAdded(displayId: Int) = Unit
-        override fun onDisplayRemoved(displayId: Int) = Unit
-
-        @SuppressLint("UnsafeExperimentalUsageError", "UnsafeOptInUsageError")
-        override fun onDisplayChanged(displayId: Int) = view?.let { view ->
-            if (displayId == this@RecordVideoFragment.displayId) {
-                preview?.targetRotation = view.display.rotation
-                videoCapture?.targetRotation = view.display.rotation
-            }
-        } ?: Unit
-    }
-
-
-    override fun initViews() {
-        super.initViews()
-        // Get the limited duration from arguments
-        val limitedDuration =
-            arguments?.getInt(EXTRA_LIMITED_DURATION) ?: CameraConst.DEF_VIDEO_LIMITED_DURATION
-        binding.btnRecordVideo.setMaxTime(limitedDuration)
-
-        binding.btnGrid.setImageResource(if (hasGrid) R.drawable.ic_grid_on else R.drawable.ic_grid_off)
-        binding.groupGridLines.visibility = if (hasGrid) View.VISIBLE else View.GONE
-
-        adjustInsets()
-
-        displayManager.registerDisplayListener(displayListener, null)
-
-        binding.run {
-            viewFinder.addOnAttachStateChangeListener(object : View.OnAttachStateChangeListener {
-                override fun onViewDetachedFromWindow(v: View) =
-                    displayManager.registerDisplayListener(displayListener, null)
-
-                override fun onViewAttachedToWindow(v: View) =
-                    displayManager.unregisterDisplayListener(displayListener)
-            })
-            btnRecordVideo.onLongClickListener =
-                object : CircleProgressButtonView.OnLongClickListener {
-                    override fun onLongClick() {
-                        startRecordVideo()
-                    }
-
-                    override fun onNoMinRecord() = Unit
-
-                    override fun onRecordFinished() {
-                        stopRecordVideo()
-                    }
-                }
-            btnSwitchCamera.setOnClickListener { toggleCamera() }
-            btnGrid.setOnClickListener { toggleGrid() }
-            btnFlash.setOnClickListener { toggleFlash() }
-        }
-
-        checkPermissions()
-    }
-
-    /**
-     * This methods adds all necessary margins to some views based on window insets and screen orientation
-     * */
-    private fun adjustInsets() {
-        activity?.window?.fitSystemWindows()
-        binding.btnRecordVideo.onWindowInsets { view, windowInsets ->
-            if (resources.configuration.orientation == Configuration.ORIENTATION_PORTRAIT) {
-                view.updateLayoutParams<ConstraintLayout.LayoutParams> {
-                    bottomMargin =
-                        windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()).bottom
-                }
-            } else {
-                view.updateLayoutParams<ConstraintLayout.LayoutParams> {
-                    marginEnd = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()).right
-                }
-            }
-        }
-        binding.btnFlash.onWindowInsets { view, windowInsets ->
-            view.updateLayoutParams<ConstraintLayout.LayoutParams>{
-                topMargin = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars()).top
-            }
-        }
-    }
-
-    /**
-     * Change the facing of camera
-     *  toggleButton() function is an Extension function made to animate button rotation
-     * */
-    private fun toggleCamera() = binding.btnSwitchCamera.toggleButton(
-        flag = lensFacing == CameraSelector.DEFAULT_BACK_CAMERA,
-        rotationAngle = 180f,
-        falseIcon = R.drawable.ic_outline_camera_rear,
-        trueIcon = R.drawable.ic_outline_camera_front,
-    ) {
-        lensFacing = if (it) {
-            CameraSelector.DEFAULT_BACK_CAMERA
-        } else {
-            CameraSelector.DEFAULT_FRONT_CAMERA
-        }
-
-        startCamera()
-    }
-
-    /**
-     * Unbinds all the lifecycles from CameraX, then creates new with new parameters
-     * */
-    private fun startCamera() {
-        // This is the Texture View where the camera will be rendered
-        val viewFinder = binding.viewFinder
-
-        val cameraProviderFuture = ProcessCameraProvider.getInstance(requireContext())
-        cameraProviderFuture.addListener({
-            cameraProvider = cameraProviderFuture.get()
-
-            // The display information
-            val metrics = DisplayMetrics().also { viewFinder.display.getRealMetrics(it) }
-            // The ratio for the output image and preview
-            val aspectRatio = aspectRatio(metrics.widthPixels, metrics.heightPixels)
-            // The display rotation
-            val rotation = viewFinder.display.rotation
-
-            val localCameraProvider =
-                cameraProvider ?: throw IllegalStateException("Camera initialization failed.")
-
-            // The Configuration of camera preview
-            preview =
-                Preview.Builder().setTargetAspectRatio(aspectRatio) // set the camera aspect ratio
-                    .setTargetRotation(rotation) // set the camera rotation
-                    .build()
-
-            val qualitySelector = QualitySelector.fromOrderedList(
-                listOf(Quality.UHD, Quality.FHD, Quality.HD, Quality.SD),
-                FallbackStrategy.lowerQualityOrHigherThan(Quality.SD)
-            )
-            val recorder =
-                Recorder.Builder().setExecutor(ContextCompat.getMainExecutor(requireContext()))
-                    .setQualitySelector(qualitySelector).build()
-            videoCapture = VideoCapture.withOutput(recorder)
-
-            localCameraProvider.unbindAll() // unbind the use-cases before rebinding them
-
-            try {
-                // Bind all use cases to the camera with lifecycle
-                camera = localCameraProvider.bindToLifecycle(
-                    viewLifecycleOwner, // current lifecycle owner
-                    lensFacing, // either front or back facing
-                    preview, // camera preview use case
-                    videoCapture, // video capture use case
-                )
-
-                // Attach the viewfinder's surface provider to preview use case
-                preview?.surfaceProvider = viewFinder.surfaceProvider
-            } catch (e: Exception) {
-                Log.e(TAG, "Failed to bind use cases", e)
-            }
-        }, ContextCompat.getMainExecutor(requireContext()))
-    }
-
-    /**
-     *  Detecting the most suitable aspect ratio for current dimensions
-     *
-     *  @param width - preview width
-     *  @param height - preview height
-     *  @return suitable aspect ratio
-     */
-    private fun aspectRatio(width: Int, height: Int): Int {
-        val previewRatio = max(width, height).toDouble() / min(width, height)
-        if (abs(previewRatio - RATIO_4_3_VALUE) <= abs(previewRatio - RATIO_16_9_VALUE)) {
-            return AspectRatio.RATIO_4_3
-        }
-        return AspectRatio.RATIO_16_9
-    }
-
-    private fun stopRecordVideo() {
-        recording?.stop()
-        recording = null
-    }
-
-    @SuppressLint("MissingPermission")
-    private fun startRecordVideo() {
-        val videoCapture = videoCapture ?: return
-        val context = context ?: return
-
-        val curRecording = recording
-        if (curRecording != null) {
-            // Stop the current recording session.
-            curRecording.stop()
-            recording = null
-            return
-        }
-
-        // Create MediaStoreOutputOptions for our recorder
-        val name = "CameraX-recording-${System.currentTimeMillis()}.mp4"
-        val contentValues = ContentValues().apply {
-            put(MediaStore.Video.Media.DISPLAY_NAME, name)
-            put(MediaStore.MediaColumns.MIME_TYPE, "video/mp4")
-            if (Build.VERSION.SDK_INT > Build.VERSION_CODES.P) {
-                put(MediaStore.Video.Media.RELATIVE_PATH, "Movies/CameraX-Video")
-            }
-        }
-
-        val mediaStoreOutput = MediaStoreOutputOptions.Builder(
-            context.contentResolver, MediaStore.Video.Media.EXTERNAL_CONTENT_URI
-        ).setContentValues(contentValues).build()
-        // Configure Recorder and Start recording to the mediaStoreOutput.
-        recording = videoCapture.output.prepareRecording(context, mediaStoreOutput)
-            .withAudioEnabled().start(ContextCompat.getMainExecutor(context)) { event ->
-                when (event) {
-                    is VideoRecordEvent.Start -> {
-
-                    }
-
-                    is VideoRecordEvent.Finalize -> {
-                        if (!event.hasError()) {
-                            val msg = "Video capture succeeded: ${event.outputResults.outputUri}"
-                            Log.d(TAG, msg)
-                            onVideoCaptureSucceed(uri = event.outputResults.outputUri)
-                        } else {
-                            recording?.close()
-                            recording = null
-                            Log.e(TAG, "Video capture ends with error: ${event.error}")
-                        }
-                    }
-                }
-            }
-        isRecording = !isRecording
-    }
-
-    private fun onVideoCaptureSucceed(uri: Uri) {
-        viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
-            try {
-                // 切换到 IO 线程执行耗时操作
-                val videoInfo = withContext(Dispatchers.IO) {
-                    getRecordedVideoInfo(requireContext(), uri)
-                }
-                Log.d(TAG, "onVideoCaptureSucceed video info: $videoInfo")
-                // 回到主线程更新 UI
-                videoRecordListener?.onRecordSuccess(videoInfo)
-            } catch (e: Exception) {
-                Log.e(TAG, "onVideoCaptureSucceed getRecordedVideoInfo error: ${e.message}")
-            }
-        }
-    }
-
-    private fun getRecordedVideoInfo(context: Context, uri: Uri): RecordVideoInfo {
-        val projection = arrayOf(MediaStore.Video.Media.DATA, MediaStore.Video.Media.DURATION)
-        var path: String? = null
-        var duration: Long = 0
-        val cursor = context.contentResolver.query(uri, projection, null, null, null)
-        cursor?.use {
-            if (it.moveToFirst()) {
-                val columnIndex = it.getColumnIndexOrThrow(MediaStore.Video.Media.DATA)
-                path = it.getString(columnIndex)
-                duration = cursor.getLong(
-                    cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION)
-                )
-            }
-        }
-        return RecordVideoInfo(uri, path, duration)
-    }
-
-    /**
-     * Turns on or off the grid on the screen
-     * */
-    private fun toggleGrid() = binding.btnGrid.toggleButton(
-        flag = hasGrid,
-        rotationAngle = 180f,
-        falseIcon = R.drawable.ic_grid_off,
-        trueIcon = R.drawable.ic_grid_on
-    ) { flag ->
-        hasGrid = flag
-        binding.groupGridLines.visibility = if (flag) View.VISIBLE else View.GONE
-    }
-
-    /**
-     * Turns on or off the flashlight
-     * */
-    private fun toggleFlash() = binding.btnFlash.toggleButton(
-        flag = flashMode == ImageCapture.FLASH_MODE_ON,
-        rotationAngle = 360f,
-        falseIcon = R.drawable.ic_flash_off,
-        trueIcon = R.drawable.ic_flash_on
-    ) { flag ->
-        isTorchOn = flag
-        flashMode = if (flag) ImageCapture.FLASH_MODE_ON else ImageCapture.FLASH_MODE_OFF
-        camera?.cameraControl?.enableTorch(flag)
-    }
-
-    @SuppressLint("CheckResult")
-    private fun checkPermissions() {
-        val act = activity ?: return
-        if (PermissionUtils.hasPermissions(act, *REQUIRED_PERMISSIONS)) {
-            when (val rlt = App.instance.hardwareManager.checkHardwareAvailable(*REQUIRED_HARDWARE)) {
-                is Rlt.Failed -> {
-                    showToast(rlt.error.msg)
-                }
-
-                is Rlt.Success -> {
-                    onPermissionGranted()
-                }
-            }
-        } else {
-            PermissionUtils.getRxPermissions(act).request(*REQUIRED_PERMISSIONS)
-                .subscribe { granted ->
-                    if (granted) {
-                        when (val rlt = App.instance.hardwareManager.checkHardwareAvailable(*REQUIRED_HARDWARE)) {
-                            is Rlt.Failed -> {
-                                showToast(rlt.error.msg)
-                            }
-
-                            is Rlt.Success -> {
-                                onPermissionGranted()
-                            }
-                        }
-                    }
-                }
-        }
-    }
-
-    private fun onPermissionGranted() {
-        // Each time apps is coming to foreground the need permission check is being processed
-        binding.viewFinder.let { vf ->
-            vf.post {
-                // Setting current display ID
-                displayId = vf.display.displayId
-                startCamera()
-                camera?.cameraControl?.enableTorch(isTorchOn)
-            }
-        }
-    }
-
-    override fun onStop() {
-        super.onStop()
-        camera?.cameraControl?.enableTorch(false)
-    }
-
-    interface VideoRecordListener {
-        fun onRecordSuccess(videoInfo: RecordVideoInfo)
-    }
-
-    var videoRecordListener: VideoRecordListener? = null
-
-    companion object {
-        const val TAG = "RecordVideoFragment"
-        private const val RATIO_4_3_VALUE = 4.0 / 3.0 // aspect ratio 4x3
-        private const val RATIO_16_9_VALUE = 16.0 / 9.0 // aspect ratio 16x9
-        private val REQUIRED_PERMISSIONS = mutableListOf(
-            Manifest.permission.CAMERA, Manifest.permission.RECORD_AUDIO
-        ).apply {
-            if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.P) {
-                add(Manifest.permission.WRITE_EXTERNAL_STORAGE)
-            }
-        }.toTypedArray()
-        private val REQUIRED_HARDWARE = arrayOf(
-            Hardware.CAMERA, Hardware.MIC
-        )
-
-        // 传参
-        private const val EXTRA_LIMITED_DURATION = "limited_duration"
-
-        fun newInstance(limitedDuration: Int): RecordVideoFragment {
-            return RecordVideoFragment().apply {
-                val bundle = Bundle()
-                bundle.putInt(EXTRA_LIMITED_DURATION, limitedDuration)
-                this.arguments = bundle
-            }
-        }
-    }
-
-}

+ 0 - 4
app/src/main/java/com/adealink/weparty/imageselect/util/CompressorUtil.kt

@@ -23,10 +23,6 @@ import id.zelory.compressor.constraint.size
 import kotlinx.coroutines.withContext
 import java.io.File
 
-/**
- * Created by sunxiaodong on 2022/7/14.
- */
-
 private const val TAG_COMPRESS = "tag_compress"
 
 data class CompressResult(val path: String, val width: Int, val height: Int)

+ 0 - 35
app/src/main/java/com/adealink/weparty/imageselect/view/AddItemViewBinder.kt

@@ -1,35 +0,0 @@
-package com.adealink.weparty.imageselect.view
-
-import android.view.LayoutInflater
-import android.view.ViewGroup
-import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
-import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
-import com.adealink.weparty.databinding.ItemAddBinding
-import com.adealink.weparty.imageselect.listener.OnOperateListener
-import com.adealink.weparty.imageselect.model.AddInfo
-import com.adealink.weparty.imageselect.model.MediaType
-
-/**
- * Created by sunxiaodong on 2022/3/17.
- */
-class AddItemViewBinder(private val l: OnOperateListener) :
-    ItemViewBinder<AddInfo, BindingViewHolder<ItemAddBinding>>() {
-
-    override fun onCreateViewHolder(
-        inflater: LayoutInflater,
-        parent: ViewGroup
-    ): BindingViewHolder<ItemAddBinding> {
-        return BindingViewHolder(ItemAddBinding.inflate(inflater, parent, false))
-    }
-
-    override fun onBindViewHolder(holder: BindingViewHolder<ItemAddBinding>, item: AddInfo) {
-        holder.binding.root.setOnClickListener {
-            when (item.mediaType) {
-                MediaType.ALL -> l.onTakeAll()
-                MediaType.IMAGE -> l.onTakePhoto()
-                MediaType.VIDEO -> l.onTakeVideo()
-            }
-        }
-    }
-
-}

+ 0 - 35
app/src/main/java/com/adealink/weparty/imageselect/view/ImageFolderItemViewBinder.kt

@@ -1,35 +0,0 @@
-package com.adealink.weparty.imageselect.view
-
-import android.view.LayoutInflater
-import android.view.ViewGroup
-import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
-import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
-import com.adealink.weparty.databinding.ItemImageFolderBinding
-import com.adealink.weparty.imageselect.listener.OnOperateListener
-import com.adealink.weparty.imageselect.model.LocalMediaFolder
-
-class ImageFolderItemViewBinder(val l: OnOperateListener) :
-    ItemViewBinder<LocalMediaFolder, BindingViewHolder<ItemImageFolderBinding>>() {
-
-    override fun onBindViewHolder(
-        holder: BindingViewHolder<ItemImageFolderBinding>,
-        item: LocalMediaFolder
-    ) {
-        val viewBinding = holder.binding
-        item.firstImageUri?.let {
-            viewBinding.folderIv.setImageUrl(it)
-        }
-        viewBinding.folderNameTv.text = item.name
-        viewBinding.folderImageCountTv.text = "${item.imageNum}"
-        viewBinding.root.setOnClickListener {
-            l.onSelectFolder(item)
-        }
-    }
-
-    override fun onCreateViewHolder(
-        inflater: LayoutInflater,
-        parent: ViewGroup
-    ): BindingViewHolder<ItemImageFolderBinding> {
-        return BindingViewHolder(ItemImageFolderBinding.inflate(inflater, parent, false))
-    }
-}

+ 0 - 131
app/src/main/java/com/adealink/weparty/imageselect/view/ImageItemViewBinder.kt

@@ -1,131 +0,0 @@
-package com.adealink.weparty.imageselect.view
-
-import android.annotation.SuppressLint
-import android.media.MediaMetadataRetriever
-import android.media.MediaMetadataRetriever.OPTION_CLOSEST_SYNC
-import android.os.Build
-import android.view.LayoutInflater
-import android.view.View
-import android.view.ViewGroup
-import android.widget.ImageView
-import androidx.core.graphics.scale
-import androidx.core.net.toUri
-import com.adealink.frame.coroutine.dispatcher.Dispatcher
-import com.adealink.frame.log.Log
-import com.adealink.weparty.commonui.ext.gone
-import com.adealink.weparty.commonui.ext.show
-import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
-import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
-import com.adealink.weparty.databinding.ItemImageBinding
-import com.adealink.weparty.imageselect.cache.videoCoverCache
-import com.adealink.weparty.imageselect.listener.OnOperateListener
-import com.adealink.weparty.imageselect.model.LocalMedia
-import com.adealink.weparty.imageselect.util.PictureMimeType
-import kotlinx.coroutines.CoroutineScope
-import kotlinx.coroutines.Dispatchers
-import kotlinx.coroutines.SupervisorJob
-import kotlinx.coroutines.android.asCoroutineDispatcher
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.withContext
-import java.util.Locale
-
-/**
- * Created by sunxiaodong on 2022/3/17.
- */
-class ImageItemViewBinder(
-    private val l: OnOperateListener,
-    private val multiChecked: Boolean = false
-) :
-    ItemViewBinder<LocalMedia, BindingViewHolder<ItemImageBinding>>(), CoroutineScope {
-
-    private val serialHandler = Dispatcher.getSerialHandler()
-    override val coroutineContext = SupervisorJob() + serialHandler.asCoroutineDispatcher()
-
-    override fun onCreateViewHolder(
-        inflater: LayoutInflater,
-        parent: ViewGroup
-    ): BindingViewHolder<ItemImageBinding> {
-        val binding = ItemImageBinding.inflate(inflater, parent, false)
-        binding.vCheckArea.visibility = if (multiChecked) View.VISIBLE else View.GONE
-        binding.tvCount.visibility = if (multiChecked) View.VISIBLE else View.GONE
-        binding.vMask.visibility = if (multiChecked) View.VISIBLE else View.GONE
-        return BindingViewHolder(binding)
-    }
-
-    @SuppressLint("SetTextI18n")
-    override fun onBindViewHolder(holder: BindingViewHolder<ItemImageBinding>, item: LocalMedia) {
-        holder.binding.ivGifTag.visibility =
-            if (PictureMimeType.isGif(item.mimeType)) View.VISIBLE else View.GONE
-
-        holder.binding.root.setOnClickListener {
-            if (PictureMimeType.eqVideo(item.mimeType)) {
-                l.onSelectVideo(item)
-            } else {
-                l.onSelectImage(item)
-            }
-        }
-
-        holder.binding.vCheckArea.setOnClickListener {
-            l.onItemChecked(holder.bindingAdapterPosition)
-        }
-
-        if (item.isChecked) {
-            holder.binding.tvCount.text = item.num.toString()
-            holder.binding.tvCount.isSelected = true
-        } else {
-            holder.binding.tvCount.text = ""
-            holder.binding.tvCount.isSelected = false
-        }
-
-        if (PictureMimeType.eqVideo(item.mimeType)) {
-            holder.binding.videoDurationLayout.show()
-            val seconds = item.duration / 1000
-            val time = String.format(
-                Locale.getDefault(), "%d:%02d",
-                seconds / 60, seconds % 60
-            )
-            holder.binding.videoDurationTv.text = time
-            showVideoCover(holder.binding.imageIv, item.uri)
-        } else {
-            holder.binding.videoDurationLayout.gone()
-            holder.binding.imageIv.setImageUrl(item.uri)
-        }
-    }
-
-    private fun showVideoCover(imageview: ImageView, uri: String?) {
-        if(uri.isNullOrEmpty()) {
-            return
-        }
-        val cache = videoCoverCache[uri]
-        if (cache != null) {
-            imageview.setImageBitmap(cache)
-            return
-        }
-        imageview.setImageBitmap(null)
-        imageview.tag = uri
-        launch(Dispatcher.WENEXT_THREAD_POOL) {
-            val retriever = MediaMetadataRetriever()
-            try {
-                retriever.setDataSource(imageview.context, uri.toUri())
-                val frame = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
-                    retriever.getScaledFrameAtTime(-1, OPTION_CLOSEST_SYNC, 256, 256)
-                } else {
-                    retriever.frameAtTime?.scale(256, 256)
-                }
-                frame?.let {
-                    videoCoverCache.put(uri, it)
-                }
-                withContext(Dispatchers.Main) {
-                    if (imageview.tag == uri) {
-                        imageview.setImageBitmap(frame)
-                    }
-                }
-            } catch (e: Exception) {
-                Log.e("ImageItemViewBinder", "setDataSource failed for uri: $uri", e)
-            } finally {
-                retriever.release()
-            }
-        }
-    }
-
-}

+ 0 - 41
app/src/main/java/com/adealink/weparty/imageselect/view/VideoItemViewBinder.kt

@@ -1,41 +0,0 @@
-package com.adealink.weparty.imageselect.view
-
-import android.view.LayoutInflater
-import android.view.ViewGroup
-import com.adealink.weparty.commonui.recycleview.adapter.BindingViewHolder
-import com.adealink.weparty.commonui.recycleview.adapter.multitype.ItemViewBinder
-import com.adealink.weparty.databinding.ItemVideoBinding
-import com.adealink.weparty.imageselect.listener.OnOperateListener
-import com.adealink.weparty.imageselect.model.LocalMedia
-import java.util.Locale
-
-/**
- * Created by sunxiaodong on 2022/3/17.
- */
-class VideoItemViewBinder(private val l: OnOperateListener) :
-    ItemViewBinder<LocalMedia, BindingViewHolder<ItemVideoBinding>>() {
-
-    override fun onCreateViewHolder(
-        inflater: LayoutInflater,
-        parent: ViewGroup
-    ): BindingViewHolder<ItemVideoBinding> {
-        return BindingViewHolder(ItemVideoBinding.inflate(inflater, parent, false))
-    }
-
-    override fun onBindViewHolder(
-        holder: BindingViewHolder<ItemVideoBinding>,
-        item: LocalMedia
-    ) {
-        holder.binding.coverIv.setImageUrl(item.uri)
-        val seconds = item.duration / 1000
-        val time = String.format(
-            Locale.getDefault(), "%d:%02d",
-            seconds / 60, seconds % 60
-        )
-        holder.binding.videoDurationTv.text = time
-        holder.binding.root.setOnClickListener {
-            l.onSelectVideo(item)
-        }
-    }
-
-}

+ 1 - 19
app/src/main/java/com/adealink/weparty/locale/LanguageConfig.kt

@@ -8,27 +8,9 @@ import java.util.Locale
 class LanguageConfig : ILanguageConfig {
 
     override val supportLocals = listOf(
-        Language.AR,
+        Language.ID,
         Language.EN,
-//        Language.HI,
-//        Language.TR,
-//        Language.TH,
-//        Language.BN,
-//        Language.VI,
-//        Language.UR,
-//        Language.ID,
-//        Language.TL,
-//        Language.MS,
-//        Language.PT,
-//        Language.ES,
-//        Language.RU,
-//        Language.KK,
-//        Language.KY,
-//        Language.UZ,
-//        Language.TK,
-//        Language.TG,
         Language.ZH, //中文放最后
-//        Language.ZH_TW,
     )
 
     override fun getLanguageLocale(): Locale {

+ 0 - 4
app/src/main/java/com/adealink/weparty/location/LocationConfig.kt

@@ -4,11 +4,7 @@ import androidx.fragment.app.FragmentActivity
 import com.adealink.frame.data.PermissionRlt
 import com.adealink.frame.locale.location.config.ILocationConfig
 import com.adealink.weparty.location.datasource.local.LocationLocalService
-import com.adealink.weparty.permission.PermissionUtils
 
-/**
- * Created by sunxiaodong on 2021/6/23.
- */
 class LocationConfig : ILocationConfig {
 
     override fun getUserCountryCode(): String {

+ 0 - 3
app/src/main/java/com/adealink/weparty/location/constant/Error.kt

@@ -2,7 +2,4 @@ package com.adealink.weparty.location.constant
 
 import com.adealink.frame.base.IError
 
-/**
- * Created by sunxiaodong on 2021/6/30.
- */
 class LocationInfoToJsonError : IError()

+ 0 - 3
app/src/main/java/com/adealink/weparty/location/constant/Tags.kt

@@ -2,7 +2,4 @@ package com.adealink.weparty.location.constant
 
 import com.adealink.frame.locale.location.constant.TAG_LOCATION
 
-/**
- * Created by sunxiaodong on 2021/6/30.
- */
 const val TAG_LOCATION_REPORT = "${TAG_LOCATION}_report"

+ 0 - 4
app/src/main/java/com/adealink/weparty/location/data/LocationData.kt

@@ -2,10 +2,6 @@ package com.adealink.weparty.location.data
 
 import com.google.gson.annotations.SerializedName
 
-/**
- * Created by sunxiaodong on 2021/6/24.
- */
-
 data class LocationInfo(
     @SerializedName("latitude")
     val latitude: Long?, /*纬度*/

+ 1 - 3
app/src/main/java/com/adealink/weparty/location/datasource/remote/LocationHttpService.kt

@@ -9,11 +9,9 @@ import retrofit2.http.GET
 import retrofit2.http.POST
 import retrofit2.http.Query
 
-/**
- * Created by sunxiaodong on 2021/6/23.
- */
 interface LocationHttpService {
 
+    // TODO: 地理位置
     @POST("country/report_location")
     suspend fun reportLocation(@Body req: ReportLocationReq): Rlt<Res<Any>>
 

+ 0 - 4
app/src/main/java/com/adealink/weparty/location/viewmodel/ILocationViewModel.kt

@@ -3,10 +3,6 @@ package com.adealink.weparty.location.viewmodel
 import androidx.lifecycle.LiveData
 import com.adealink.frame.base.Rlt
 import com.adealink.weparty.location.data.UserCountryInfo
-
-/**
- * Created by sunxiaodong on 2021/6/23.
- */
 interface ILocationViewModel {
 
     fun reportLocation(): LiveData<Rlt<String>>

+ 0 - 3
app/src/main/java/com/adealink/weparty/location/viewmodel/LocationViewModel.kt

@@ -22,9 +22,6 @@ import com.adealink.weparty.location.datasource.remote.LocationHttpService
 import com.adealink.weparty.module.profile.ProfileModule
 import kotlinx.coroutines.launch
 
-/**
- * Created by sunxiaodong on 2021/6/23.
- */
 class LocationViewModel : BaseViewModel(), ILocationViewModel {
 
     private val locationHttpService by lazy {

+ 0 - 3
app/src/main/java/com/adealink/weparty/log/LogConfig.kt

@@ -5,9 +5,6 @@ import com.adealink.frame.network.INetworkService
 import com.adealink.frame.oss.IOssService
 import com.adealink.weparty.App
 
-/**
- * Created by sunxiaodong on 2021/6/20.
- */
 class LogConfig : ILogConfig {
 
     override val networkService: INetworkService

+ 0 - 18
app/src/main/java/com/adealink/weparty/log/stat/LogErrorStatEvent.kt

@@ -1,18 +0,0 @@
-package com.adealink.weparty.log.stat
-
-import com.adealink.frame.statistics.BaseStatEvent
-import com.adealink.frame.statistics.IEventValue
-
-/**
- * Created by sunxiaodong on 2021/6/20.
- */
-class LogErrorStatEvent(override val action: IEventValue) : BaseStatEvent("log_error") {
-
-    enum class Action(override val value: String, override val desc: String) : IEventValue {
-        LOG("log", "输出log"),
-    }
-
-    val tag = Param("tag")
-    val msg = Param("msg")
-
-}

+ 0 - 3
app/src/main/java/com/adealink/weparty/log/viewmodel/LogViewModelFactory.kt

@@ -5,9 +5,6 @@ import androidx.lifecycle.ViewModelProvider
 import com.adealink.frame.log.viewmodel.LogViewModel
 import com.adealink.weparty.App
 
-/**
- * Created by sunxiaodong on 2025/9/1.
- */
 @Suppress("UNCHECKED_CAST")
 class LogViewModelFactory: ViewModelProvider.NewInstanceFactory() {
 

+ 0 - 207
app/src/main/java/com/adealink/weparty/match/MatchStateMachine.kt

@@ -1,207 +0,0 @@
-package com.adealink.weparty.match
-
-import android.os.Handler
-import android.os.Looper
-import androidx.lifecycle.MutableLiveData
-import com.adealink.frame.coroutine.dispatcher.Dispatcher
-import com.adealink.frame.log.Log
-import kotlinx.coroutines.withContext
-
-/**
- * author: PengWuliang
- * date: 2025/8/15 20:32
- * desc:
- */
-class MatchStateMachine {
-
-    companion object {
-        val instance: MatchStateMachine by lazy { MatchStateMachine() }
-        private const val TAG = "MatchStateMachine"
-    }
-
-    @Volatile
-    private var state = MatchStateEnum.IDLE
-    private val _currentState = MutableLiveData(state)
-    val currentState: MutableLiveData<MatchStateEnum> = _currentState
-
-    private val mainHandler = Handler(Looper.getMainLooper())
-    private var callback: MatchTimeoutCallback? = null
-
-    private val matchTimeout = Runnable {
-        callback?.onMatchTimeout()
-    }
-
-    private var matchStartTime: Long = 0L
-
-    @Synchronized
-    fun getCurrentState(): MatchStateEnum {
-        return state
-    }
-
-    fun setTimeoutCallback(callback: MatchTimeoutCallback) {
-        this.callback = callback
-    }
-
-    /**
-     * 检查是否可以处理某个事件
-     */
-    @Synchronized
-    fun canHandleEvent(event: MatchEvent): Boolean {
-        val currentState = getCurrentState()
-        return getNextState(currentState, event) != null
-    }
-
-    //todo pwl 调用的地方改成handleEventAsync?
-    @Synchronized
-    fun handleEvent(event: MatchEvent): Boolean {
-        val currentState = state
-        val nextState = getNextState(currentState, event)
-
-        if (nextState == null) {
-            Log.i(TAG, "Event $event not allowed in state $currentState")
-            return false
-        }
-
-        if (nextState == currentState && currentState != MatchStateEnum.MATCHING) {
-            Log.i(TAG, "Event $event processed, state remains $currentState")
-            return true
-        }
-        transitionTo(nextState, event)
-        return true
-    }
-
-    /**
-     * 异步处理事件,返回Deferred以等待状态更新完成
-     */
-    suspend fun handleEventAsync(event: MatchEvent): Boolean {
-        return withContext(Dispatcher.UI) {
-            val currentState = state
-            val nextState = getNextState(currentState, event)
-
-            if (nextState == null) {
-                Log.i(TAG, "Event $event not allowed in state $currentState")
-                return@withContext false
-            }
-
-            if (nextState == currentState) {
-                Log.i(TAG, "Event $event processed, state remains $currentState")
-                return@withContext true
-            }
-
-            transitionTo(nextState, event)
-            return@withContext true
-        }
-    }
-
-    private fun getNextState(currentState: MatchStateEnum, event: MatchEvent): MatchStateEnum? {
-        return when (currentState) {
-            MatchStateEnum.IDLE -> when (event) {
-                MatchEvent.START_MATCH -> MatchStateEnum.MATCHING
-                MatchEvent.RECEIVE_REQUEST -> MatchStateEnum.RECEIVE
-                MatchEvent.ACCEPT_REQUEST -> MatchStateEnum.MATCHING //离线通知确认,从IDLE变成MATCHING
-                MatchEvent.REJECT_REQUEST, //离线通知拒绝
-                MatchEvent.MATCH_TIMEOUT, //离线通知超时
-                MatchEvent.MATCH_FAILED,
-                MatchEvent.RESET -> MatchStateEnum.IDLE
-                else -> null
-            }
-
-            MatchStateEnum.MATCHING -> when (event) {
-                MatchEvent.MATCH_SUCCESS -> MatchStateEnum.SUCCESS
-                MatchEvent.START_MATCH -> MatchStateEnum.MATCHING
-                MatchEvent.MATCH_FAILED,
-                MatchEvent.CANCEL_MATCH,
-                MatchEvent.MATCH_TIMEOUT,
-                MatchEvent.RESET -> MatchStateEnum.IDLE
-                else -> null
-            }
-            MatchStateEnum.RECEIVE -> when (event) {
-                MatchEvent.ACCEPT_REQUEST -> MatchStateEnum.MATCHING
-                MatchEvent.REJECT_REQUEST,
-                MatchEvent.MATCH_TIMEOUT,
-                MatchEvent.RESET -> MatchStateEnum.IDLE
-                else -> null
-            }
-
-            MatchStateEnum.SUCCESS -> when (event) {
-                MatchEvent.RESET -> MatchStateEnum.IDLE
-                else -> null
-            }
-        }
-    }
-
-    private fun transitionTo(newState: MatchStateEnum, event: MatchEvent? = null) {
-        val oldState = state
-        // 1、状态切换前的处理
-        onStateExit(oldState)
-
-        // 2、更新状态
-        state = newState
-        if (Looper.myLooper() == Looper.getMainLooper()) {
-            _currentState.value = newState
-        } else {
-            _currentState.postValue(newState)
-        }
-
-        Log.i(TAG, "State transition: $oldState -> $newState, event: $event")
-
-        // 3、状态切换后的处理
-        onStateEnter(newState)
-    }
-
-    private fun onStateExit(state: MatchStateEnum) {
-        when (state) {
-            MatchStateEnum.MATCHING -> {
-                mainHandler.removeCallbacks(matchTimeout)
-            }
-            else -> {
-                // 其他状态无需额外处理
-            }
-        }
-    }
-
-    private fun onStateEnter(state: MatchStateEnum) {
-        when (state) {
-            MatchStateEnum.MATCHING -> {
-                mainHandler.postDelayed(matchTimeout, 60_000)
-            }
-            MatchStateEnum.IDLE -> {
-                matchStartTime = 0L
-            }
-            else -> {
-                // 其他状态无需额外处理
-            }
-        }
-    }
-}
-
-interface MatchTimeoutCallback {
-    fun onMatchTimeout()
-}
-
-enum class MatchEvent(val description: String) {
-    START_MATCH("开始匹配"),
-    CANCEL_MATCH("取消匹配"),
-    MATCH_SUCCESS("匹配成功"),
-    MATCH_FAILED("匹配失败"),
-    MATCH_TIMEOUT("匹配超时"),
-    RECEIVE_REQUEST("收到匹配请求"),
-    ACCEPT_REQUEST("接受请求"),
-    REJECT_REQUEST("拒绝请求"),
-    RESET("重置状态")
-}
-
-enum class MatchStateEnum(val value: Int, val description: String) {
-    IDLE(0, "空闲"),
-    MATCHING(1, "匹配中"),
-    RECEIVE(2, "收到匹配请求"),
-    SUCCESS(3, "匹配成功")
-}
-
-//实时匹配应答类型
-enum class AnswerType(val value: Int) {
-    ACCEPT(1),
-    REJECT(2),
-    TIMEOUT(3),
-    BUSY(4),
-}

+ 0 - 3
app/src/main/java/com/adealink/weparty/media/IMediaManager.kt

@@ -3,9 +3,6 @@ package com.adealink.weparty.media
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.media.MediaInfo
 
-/**
- * Created by sunxiaodong on 2021/10/26.
- */
 interface IMediaManager {
 
     suspend fun conflictHandle(mediaInfo: MediaInfo): Rlt<Any>

+ 2 - 2
app/src/main/java/com/adealink/weparty/media/MediaConfig.kt

@@ -2,6 +2,7 @@ package com.adealink.weparty.media
 
 import android.content.Context
 import com.adealink.frame.base.AppBase
+import com.adealink.frame.base.IError
 import com.adealink.frame.base.Rlt
 import com.adealink.frame.media.config.IMediaConfig
 import com.adealink.frame.media.data.RtcType
@@ -11,7 +12,6 @@ import com.adealink.frame.media.rtc.RtcConfig
 import com.adealink.frame.storage.file.rtcLogPath
 import com.adealink.weparty.App
 import com.adealink.weparty.BuildConfig
-import com.adealink.weparty.module.room.RoomModule
 import com.wenext.agorartc.AgoraRtcEngine
 import com.wenext.trtcpro.TRtcProEngine
 
@@ -53,7 +53,7 @@ object MediaConfig : IMediaConfig {
     }
 
     override suspend fun getChannelToken(channel: String, rtcType: RtcType): Rlt<String> {
-        return RoomModule.getChannelToken(channel, rtcType)
+        return Rlt.Failed(IError("Unsupported"))
     }
 
     override fun onRTCQualityBad() {

+ 2 - 4
app/src/main/java/com/adealink/weparty/media/MediaManager.kt

@@ -6,8 +6,6 @@ import com.adealink.frame.media.IMediaOperatorGet
 import com.adealink.frame.media.MediaInfo
 import com.adealink.frame.media.constant.TAG_MEDIA
 import com.adealink.frame.media.data.RtcType
-import com.adealink.weparty.module.call.CallModule
-import com.adealink.weparty.module.room.RoomModule
 
 enum class MediaType(val type: Int) {
     UNKNOWN(0), //未知
@@ -18,8 +16,8 @@ enum class MediaType(val type: Int) {
 class MediaManager : IMediaManager {
 
     private val mediaOperatorGets = arrayListOf<IMediaOperatorGet>(
-        RoomModule,
-        CallModule
+//        RoomModule,
+//        CallModule
     )
 
     override suspend fun conflictHandle(mediaInfo: MediaInfo): Rlt<Any> {

+ 0 - 3
app/src/main/java/com/adealink/weparty/module/account/AccountLocalService.kt

@@ -4,9 +4,6 @@ import android.content.Context
 import com.adealink.frame.storage.sp.TypeDelegationPrefs
 import com.adealink.frame.util.AppUtil
 
-/**
- * Created by sunxiaodong on 2021/5/29.
- */
 object AccountLocalService : TypeDelegationPrefs(
     prefs = {
         AppUtil.appContext.getSharedPreferences("pref_account", Context.MODE_PRIVATE)

+ 0 - 48
app/src/main/java/com/adealink/weparty/module/account/AccountModule.kt

@@ -1,14 +1,8 @@
 package com.adealink.weparty.module.account
 
 import com.adealink.frame.aab.BaseDynamicModule
-import com.adealink.frame.aab.constant.AABModuleNotInitError
-import com.adealink.frame.base.Rlt
 import com.adealink.weparty.R
-import com.adealink.weparty.module.account.data.SmsCountryInfo
 
-/**
- * Created by sunxiaodong on 2021/3/27.
- */
 object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class), IAccountService {
 
     override val featureName: String
@@ -40,10 +34,6 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
         getService().unregisterListener(l)
     }
 
-    override suspend fun getBindEmail(uid: Long): Rlt<Boolean> {
-        return getService().getBindEmail(uid)
-    }
-
     override fun checkRemoteVirtualAppConfig() {
         getService().checkRemoteVirtualAppConfig()
     }
@@ -53,21 +43,6 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
         getService().onTokenExpire()
     }
 
-    override fun onUserBanned(tipContent: String?) {
-        performDownload()
-        getService().onUserBanned(tipContent)
-    }
-
-    override fun onChangeGender() {
-        performDownload()
-        getService().onChangeGender()
-    }
-
-    override fun onFunctionBlock(reason: String?, expire: Long?) {
-        performDownload()
-        getService().onFunctionBlock(reason, expire)
-    }
-
     override fun emptyService(): IAccountService {
         return object : IAccountService {
 
@@ -109,33 +84,14 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
 
             }
 
-            override suspend fun getBindEmail(uid: Long): Rlt<Boolean> {
-                return Rlt.Failed(AABModuleNotInitError())
-            }
-
             override fun checkRemoteVirtualAppConfig() {
 
             }
 
-            override fun getCountryByCountryCode(countryCode: String): SmsCountryInfo? {
-                return null
-            }
-
             override fun onTokenExpire() {
 
             }
 
-            override fun onUserBanned(tipContent: String?) {
-
-            }
-
-            override fun onChangeGender() {
-
-            }
-
-            override fun onFunctionBlock(reason: String?, expire: Long?) {
-
-            }
         }
     }
 
@@ -150,8 +106,4 @@ object AccountModule : BaseDynamicModule<IAccountService>(IAccountService::class
     override fun refreshToken() {
         getService().refreshToken()
     }
-
-    override fun getCountryByCountryCode(countryCode: String): SmsCountryInfo? {
-        return getService().getCountryByCountryCode(countryCode)
-    }
 }

+ 0 - 14
app/src/main/java/com/adealink/weparty/module/account/IAccountService.kt

@@ -1,12 +1,7 @@
 package com.adealink.weparty.module.account
 
 import com.adealink.frame.aab.IService
-import com.adealink.frame.base.Rlt
-import com.adealink.weparty.module.account.data.SmsCountryInfo
 
-/**
- * Created by sunxiaodong on 2021/3/26.
- */
 interface IAccountService : IService<IAccountService> {
     val uid: Long
 
@@ -16,12 +11,6 @@ interface IAccountService : IService<IAccountService> {
 
     fun onTokenExpire()
 
-    fun onUserBanned(tipContent: String?)
-
-    fun onChangeGender()
-
-    fun onFunctionBlock(reason: String?, expire: Long?)
-
     fun isLogin(): Boolean
 
     fun registerListener(l: ILoginListener)
@@ -37,9 +26,6 @@ interface IAccountService : IService<IAccountService> {
 
     fun refreshToken()
 
-    suspend fun getBindEmail(uid: Long): Rlt<Boolean>
-
     fun checkRemoteVirtualAppConfig()
 
-    fun getCountryByCountryCode(countryCode: String): SmsCountryInfo?
 }

+ 0 - 5
app/src/main/java/com/adealink/weparty/module/account/ILoginListener.kt

@@ -2,15 +2,10 @@ package com.adealink.weparty.module.account
 
 import com.adealink.frame.frame.IListener
 
-/**
- * Created by sunxiaodong on 2021/5/21.
- */
 interface ILoginListener : IListener {
 
     fun onLogin() {}
 
     fun onLogout() {}
 
-    fun onReceiveVerifyCode(verifyCode: String) {}
-
 }

+ 0 - 18
app/src/main/java/com/adealink/weparty/module/account/Router.kt

@@ -47,24 +47,6 @@ interface Account {
         }
     }
 
-    interface RecommendFollow {
-        companion object {
-            const val PATH = "/recommend_follow"
-        }
-    }
-
-    interface GenderSelect {
-        companion object {
-            const val PATH = "/gender_select"
-        }
-    }
-
-    interface BirthdaySelect {
-        companion object {
-            const val PATH = "/birthday_select"
-        }
-    }
-
     interface Email {
         companion object {
             const val PATH_LOGIN = "/account/email/login"

+ 1 - 33
app/src/main/java/com/adealink/weparty/module/account/util/AccountUtil.kt

@@ -1,35 +1,3 @@
 package com.adealink.weparty.module.account.util
 
-import com.adealink.weparty.module.profile.ProfileModule
-import com.adealink.weparty.module.profile.data.Gender
-
-/**
- * Created by sunxiaodong on 2021/6/5.
- */
-
-fun Long?.isUidValid(): Boolean = this != null && this > 0
-
-
-/**
- * 简单封装,方便多处地方的性别判断
- */
-fun getGenderWithCallback(
-    isFamale: () -> Unit = {},
-    isMale: () -> Unit = {},
-    noInit: () -> Unit = {},
-) {
-    val gender = Gender.getGender(ProfileModule.getMyUserInfo()?.gender)
-    when (gender) {
-        Gender.NO_INIT -> {
-            noInit.invoke()
-        }
-
-        Gender.FEMALE -> {
-            isFamale.invoke()
-        }
-
-        Gender.MALE -> {
-            isMale.invoke()
-        }
-    }
-}
+fun Long?.isUidValid(): Boolean = this != null && this > 0

+ 0 - 21
app/src/main/java/com/adealink/weparty/module/call/CallConfig.kt

@@ -1,21 +0,0 @@
-package com.adealink.weparty.module.call
-
-import com.adealink.frame.base.AppBase
-import com.adealink.weparty.BuildConfig
-
-object CallConfig {
-
-    val APP_ID: Int
-        get() = if (AppBase.isProdEnv) {
-            BuildConfig.TRTC_APP_ID
-        } else {
-            BuildConfig.TRTC_APP_ID_DEBUG
-        }
-
-    val SECRET_KEY: String
-        get() = if (AppBase.isProdEnv) {
-            BuildConfig.TRTC_SECRET_KEY
-        } else {
-            BuildConfig.TRTC_SECRET_KEY_DEBUG
-        }
-}

+ 0 - 184
app/src/main/java/com/adealink/weparty/module/call/CallModule.kt

@@ -1,184 +0,0 @@
-package com.adealink.weparty.module.call
-
-import android.app.Application
-import android.content.Context
-import androidx.lifecycle.ViewModelStoreOwner
-import com.adealink.frame.aab.BaseDynamicModule
-import com.adealink.frame.aab.constant.AABModuleNotInitError
-import com.adealink.frame.base.Rlt
-import com.adealink.frame.media.IMediaOperator
-import com.adealink.frame.media.MediaConflictConfig
-import com.adealink.frame.media.MediaInfo
-import com.adealink.weparty.R
-import com.adealink.weparty.commonui.widget.floatview.data.IFloatData
-import com.adealink.weparty.commonui.widget.floatview.view.BaseFloatView
-import com.adealink.weparty.module.call.data.CallerSource
-import com.adealink.weparty.module.call.data.MediaType
-import com.adealink.weparty.module.call.match.IMatchManager
-import com.adealink.weparty.module.call.match.IMatchNotify
-import com.adealink.weparty.module.call.viewmodel.ICallViewModel
-
-object CallModule : BaseDynamicModule<ICallService>(ICallService::class), ICallService {
-
-    override val moduleNameResId: Int
-        get() = R.string.module_call
-
-    override val featureName: String
-        get() = "call"
-
-    override fun emptyService(): ICallService {
-        return object : ICallService {
-
-            override fun call(uid: Long, mediaType: MediaType, callerSource: CallerSource, onSuccess: (() -> Unit)?, onFail: ((errCode: Int, errMsg: String?) -> Unit)?) {
-            }
-
-            override fun getIncomingFloatView(data: IFloatData): BaseFloatView<out IFloatData>? {
-                return null
-            }
-
-            override fun getCallingFloatView(data: IFloatData): BaseFloatView<out IFloatData>? {
-                return null
-            }
-
-            override fun getMatchFloatView(data: IFloatData): BaseFloatView<out IFloatData>? {
-                return null
-            }
-
-            override fun getMatchFloatWindowView(data: IFloatData): BaseFloatView<out IFloatData>? {
-                return null
-            }
-
-            override fun getMatchNotificationView(context: Context): IMatchNotify? {
-                return null
-            }
-
-            override fun getCallViewModel(owner: ViewModelStoreOwner): ICallViewModel? {
-                return null
-            }
-
-            override fun getMatchManager(): IMatchManager? {
-                return null
-            }
-
-            override fun isLogin(): Boolean {
-                return false
-            }
-
-            override fun getService(): ICallService? {
-                return null
-            }
-
-            override fun getMediaOperator(): IMediaOperator {
-                return object : IMediaOperator {
-                    override suspend fun confirmExitConflictMedia(exitMediaInfo: MediaInfo, enterMediaInfo: MediaInfo): Rlt<Any> {
-                        return Rlt.Failed(AABModuleNotInitError())
-                    }
-
-                    override fun getConflictConfig(): MediaConflictConfig {
-                        return MediaConflictConfig(
-                            MediaInfo(
-                                com.adealink.weparty.media.MediaType.UNKNOWN.type,
-                                ""
-                            ), false
-                        )
-                    }
-
-                    override fun getJoinedRoomId(): Long? {
-                        return null
-                    }
-
-                    override suspend fun isMediaIn(): Boolean {
-                        return false
-                    }
-
-                    override suspend fun leaveMedia(): Rlt<Any> {
-                        return Rlt.Failed(AABModuleNotInitError())
-                    }
-
-                    override suspend fun rejoinRoom(): Rlt<Any> {
-                        return Rlt.Failed(AABModuleNotInitError())
-                    }
-
-                }
-            }
-
-            override fun getMediaType(): Int {
-                return 0
-            }
-
-            override fun appOnCreateMainTask(application: Application) {
-            }
-
-            override fun appOnCreateSubTask(application: Application) {
-            }
-
-            override fun activityOnCreateMainTask() {
-            }
-
-            override fun activityOnCreateSubTask() {
-            }
-
-        }
-    }
-
-    override fun call(uid: Long, mediaType: MediaType, callerSource: CallerSource, onSuccess: (() -> Unit)?, onFail: ((errCode: Int, errMsg: String?) -> Unit)?) {
-        getService().call(uid, mediaType, callerSource, onSuccess, onFail)
-    }
-
-    override fun getIncomingFloatView(data: IFloatData): BaseFloatView<out IFloatData>? {
-        return getService().getIncomingFloatView(data)
-    }
-
-    override fun getCallingFloatView(data: IFloatData): BaseFloatView<out IFloatData>? {
-        return getService().getCallingFloatView(data)
-    }
-
-    override fun getMatchFloatView(data: IFloatData): BaseFloatView<out IFloatData>? {
-        return getService().getMatchFloatView(data)
-    }
-
-    override fun getMatchFloatWindowView(data: IFloatData): BaseFloatView<out IFloatData>? {
-        return getService().getMatchFloatWindowView(data)
-    }
-
-    override fun getMatchNotificationView(context: Context): IMatchNotify? {
-        return getService().getMatchNotificationView(context)
-    }
-
-    override fun getCallViewModel(owner: ViewModelStoreOwner): ICallViewModel? {
-        return getService().getCallViewModel(owner)
-    }
-
-    override fun getMatchManager(): IMatchManager? {
-        return getService().getMatchManager()
-    }
-
-    override fun isLogin(): Boolean {
-        return getService().isLogin()
-    }
-
-    override fun getMediaOperator(): IMediaOperator {
-        return getService().getMediaOperator()
-    }
-
-    override fun getMediaType(): Int {
-        return getService().getMediaType()
-    }
-
-    override fun appOnCreateMainTask(application: Application) {
-        return getService().appOnCreateMainTask(application)
-    }
-
-    override fun appOnCreateSubTask(application: Application) {
-        return getService().appOnCreateSubTask(application)
-    }
-
-    override fun activityOnCreateMainTask() {
-        return getService().activityOnCreateMainTask()
-    }
-
-    override fun activityOnCreateSubTask() {
-        return getService().activityOnCreateSubTask()
-    }
-
-}

+ 0 - 44
app/src/main/java/com/adealink/weparty/module/call/ICallService.kt

@@ -1,44 +0,0 @@
-package com.adealink.weparty.module.call
-
-import android.content.Context
-import androidx.lifecycle.ViewModelStoreOwner
-import com.adealink.frame.aab.IService
-import com.adealink.frame.media.IMediaOperatorGet
-import com.adealink.frame.startup.IAppStartUpTask
-import com.adealink.weparty.commonui.widget.floatview.data.IFloatData
-import com.adealink.weparty.commonui.widget.floatview.view.BaseFloatView
-import com.adealink.weparty.module.call.data.CallerSource
-import com.adealink.weparty.module.call.data.MediaType
-import com.adealink.weparty.module.call.match.IMatchManager
-import com.adealink.weparty.module.call.match.IMatchNotify
-import com.adealink.weparty.module.call.viewmodel.ICallViewModel
-
-interface ICallService : IService<ICallService>, IMediaOperatorGet, IAppStartUpTask {
-
-    fun call(
-        uid: Long,
-        mediaType: MediaType,
-        callerSource: CallerSource = CallerSource.CALLER,
-        onSuccess: (() -> Unit)? = null,
-        onFail: ((errCode: Int, errMsg: String?) -> Unit)? = null
-    )
-
-    fun getIncomingFloatView(data: IFloatData): BaseFloatView<out IFloatData>?
-
-    fun getCallingFloatView(data: IFloatData): BaseFloatView<out IFloatData>?
-
-    fun getMatchFloatView(data: IFloatData): BaseFloatView<out IFloatData>?
-
-    fun getMatchFloatWindowView(data: IFloatData): BaseFloatView<out IFloatData>?
-
-    fun getMatchNotificationView(context: Context): IMatchNotify?
-
-    fun getCallViewModel(owner: ViewModelStoreOwner): ICallViewModel?
-
-    fun getMatchManager(): IMatchManager?
-
-    fun isLogin(): Boolean
-
-    fun getMediaType(): Int
-
-}

+ 0 - 52
app/src/main/java/com/adealink/weparty/module/call/Router.kt

@@ -1,52 +0,0 @@
-package com.adealink.weparty.module.call
-
-interface Call {
-
-    interface Common {
-        companion object {
-            const val EXTRA_TARGET_UID = "extra_target_uid"
-        }
-    }
-
-    interface Call {
-        companion object {
-            const val PATH = "/call"
-        }
-    }
-
-    interface CallSettlement {
-        companion object {
-            const val PATH = "/call/settlement"
-            const val EXTRA_DATA = "extra_data"
-        }
-    }
-
-    interface CallMatch {
-        companion object {
-            const val PATH = "/call/match"
-            const val EXTRA_AUTO_MATCH = "extra_auto_match"
-        }
-    }
-
-    interface CallDialog {
-        companion object {
-            const val PATH = "/call/dialog"
-            const val EXTRA_VOICE_CALL_ACTIVE = "extra_voice_call_active"
-            const val EXTRA_VIDEO_CALL_ACTIVE = "extra_video_call_active"
-            const val EXTRA_CALL_PERMISSION_INFO = "extra_call_permission_info"
-        }
-    }
-
-    interface CallMerchantDialog {
-        companion object {
-            const val PATH = "/call_merchant/dialog"
-        }
-    }
-
-
-    interface CallMemberDialog {
-        companion object {
-            const val PATH = "/call/call_member_dialog"
-        }
-    }
-}

+ 0 - 78
app/src/main/java/com/adealink/weparty/module/call/data/CallData.kt

@@ -1,78 +0,0 @@
-package com.adealink.weparty.module.call.data
-
-enum class MediaType(val type: Int) {
-    Unknown(0),
-    Audio(1),
-    Video(2);
-
-    companion object {
-        @JvmStatic
-        fun map(type: Int?): MediaType {
-            return entries.find { it.type == type } ?: Unknown
-        }
-    }
-}
-
-/**
- * 主叫拨号来源
- */
-enum class CallerSource(val source: Int) {
-    CALLER(0), //主动呼叫
-    INVITE(1); //邀请呼叫
-
-    companion object {
-        @JvmStatic
-        fun map(source: Int?): CallerSource? {
-            return entries.find { it.source == source }
-        }
-    }
-}
-
-enum class CallStatus(val status: Int) {
-    None(0),
-    Waiting(1),
-    Accept(2);
-
-    companion object {
-        @JvmStatic
-        fun map(status: Int): CallStatus {
-            return entries.find { it.status == status } ?: None
-        }
-    }
-}
-
-/**
- *
- * 通话结果:
- * Cancel取消:主叫方在接通前取消通话
- * Reject拒接:被叫方拒接
- * NotAnswer 未接听:被叫方超时未接听
- * NormalEnd 完成:通话接通并正常结束
- * CallBusy忙线:通话忙线
- * Interrupt中断:网络等原因导致通话中断
- */
-enum class CallResult(val result: String) {
-    Cancel("Cancel"),
-    Reject("Reject"),
-    NotAnswer("NotAnswer"),
-    NormalEnd("NormalEnd"),
-    CallBusy("CallBusy"),
-    Interrupt("Interrupt");
-
-    companion object {
-        fun map(result: String?): CallResult? {
-            return CallResult.entries.find { it.result == result }
-        }
-    }
-}
-
-enum class CallType(val type: Int) {
-    Voice(1),//语音
-    Video(2);//视频
-    companion object {
-        @JvmStatic
-        fun map(type: Int?): CallType? {
-            return entries.find { it.type == type }
-        }
-    }
-}

+ 0 - 15
app/src/main/java/com/adealink/weparty/module/call/data/Constant.kt

@@ -1,15 +0,0 @@
-package com.adealink.weparty.module.call.data
-
-const val CALL_ERROR_UNKNOWN_MEDIA_TYPE = 0x001
-const val CALL_ERROR_START_CALL_SERVER_ERROR = 0x002
-
-const val FROM_CALL_MANAGER = 1
-const val MATCH_PEER_NOT_SELF = 2
-const val MATCH_FAIL = 3
-const val MATCH_CALL_TIME_OUT = 4
-const val ACCEPT_FAIL = 5
-const val REJECT_SUCCESS = 6
-const val REJECT_FAIL = 7
-const val TIMEOUT_SUCCESS = 8
-const val TIMEOUT_FAIL = 9
-const val FROM_TUI_CALL = 10

+ 0 - 12
app/src/main/java/com/adealink/weparty/module/call/match/IMatchListener.kt

@@ -1,12 +0,0 @@
-package com.adealink.weparty.module.call.match
-
-import com.adealink.frame.frame.IListener
-
-/**
- * author: PengWuliang
- * date: 2025/8/15 20:42
- * desc:
- */
-interface IMatchListener: IListener {
-
-}

+ 0 - 40
app/src/main/java/com/adealink/weparty/module/call/match/IMatchManager.kt

@@ -1,40 +0,0 @@
-package com.adealink.weparty.module.call.match
-
-import com.adealink.frame.frame.IBaseFrame
-
-/**
- * author: PengWuliang
- * date: 2025/8/15 20:36
- * desc:
- */
-interface IMatchManager: IBaseFrame<IMatchListener> {
-
-    fun init()
-
-    fun startMatch()
-
-    fun cancelMatch()
-
-    /**
-     * 匹配结果确认
-     */
-    fun resultAck()
-
-    fun reject(matchId: Long? = null)
-
-    fun accept(matchId: Long? = null)
-
-    fun timeout(matchId: Long? = null)
-
-    fun onBusy(matchId: Long)
-
-    fun isMatchIdValid(): Boolean
-
-    fun getRoomId(): Long
-
-    fun getMatchId(): Long
-
-    fun clearData(from: Int)
-
-    fun removeCallTimeout()
-}

+ 0 - 10
app/src/main/java/com/adealink/weparty/module/call/match/IMatchNotify.kt

@@ -1,10 +0,0 @@
-package com.adealink.weparty.module.call.match
-
-import com.adealink.weparty.module.profile.data.UserInfo
-
-interface IMatchNotify {
-    //timeout单位是秒
-    fun showNotifyView(user: UserInfo, timeout: Long, matchId: Long)
-
-    fun cancelNotifyView()
-}

+ 0 - 162
app/src/main/java/com/adealink/weparty/module/call/match/data/CallMatchData.kt

@@ -1,162 +0,0 @@
-package com.adealink.weparty.module.call.match.data
-
-import com.adealink.frame.base.AppBase
-import com.adealink.frame.util.PackageUtil
-import com.adealink.weparty.module.profile.data.UserInfo
-import com.adealink.weparty.module.profile.tags.data.UserLabel
-import com.google.gson.annotations.Must
-import com.google.gson.annotations.SerializedName
-
-/**
- * Created by sunxiaodong on 2021/10/30.
- */
-
-data class CallMatchConfig(
-    @Must
-    @SerializedName("matchTimeutSeconds") val timeoutS: Long,
-    @Must
-    @SerializedName("matchQueryInterval") val queryIntervalS: Long,
-    @Must
-    @SerializedName("matchChance") val remainTimes: Int,
-    @Must
-    @SerializedName("paidMatchCoinPrice") val coinPrice: Int,
-    @Must
-    @SerializedName("entranceVisible") val entranceVisible: Boolean
-)
-
-enum class MatchType(val type: Int) {
-    IM_CHAT(0), //IM聊天匹配
-    VOICE_CHAT(1); //语音聊天匹配
-}
-
-data class CallMatchReq(
-    @SerializedName("matchId") val matchId: Long,
-    @SerializedName("matchFemaleOrMale") val female: Boolean = true,
-    @SerializedName("matchDeviceId") val deviceId: String = "",
-    @SerializedName("newDeviceId") val newDeviceId: String = "",
-    @SerializedName("matchType") val matchType: Int = MatchType.VOICE_CHAT.type,
-    @SerializedName("paidMatch") val paid: Boolean = false,
-    @SerializedName("platform") val platform: String = AppBase.platform,
-    @SerializedName("clientVersion") val clientVersion: Int = PackageUtil.getVersionCode(),
-)
-
-data class CallMatchResult(
-    @Must
-    @SerializedName("matchId") val matchId: Long,
-    @Must
-    @SerializedName("matchedUid") val matchedUid: Long,
-    @Must
-    @SerializedName("matchVoiceChannel") val channel: Long,
-    @SerializedName("matchedPhase") val matchedPhase: Int,
-    @SerializedName("matchType") val matchType: Int,
-    @SerializedName("matchedUidType") val matchedUserType: Int,
-)
-
-data class PublicMatchUserNotify(
-    @Must
-    @SerializedName("roomId") val roomId: Long,
-    @Must
-    @SerializedName("showUserInfo") val userInfo: com.adealink.weparty.module.profile.data.UserInfo,
-)
-
-data class MatchOrderInfo(
-    @Must
-    @SerializedName("orderId") val orderId: String,
-    @Must
-    @SerializedName("matchLauncher") val launcherUid: Long,
-    @Must
-    @SerializedName("matchID") val matchId: Long,
-)
-
-enum class OrderOpType(val type: Int) {
-    SEND_ORDER(0), //派单
-    TAKEN_ORDER(1), //已被接单
-    CANCEL_ORDER(2) //取消订单
-}
-
-enum class TakeOrderUserType(val type: Int) {
-    ANCHOR(0), //匹配到的用户是主播
-    MATCH_POOL(1), //匹配到的用户来自于匹配池
-    ONLINE_USER(2), //匹配到的用户是在线用户
-    RECENT_ONLINE(3) //匹配到的用户来自于最近在线用户
-}
-
-data class MatchOrderNotify(
-    @Must
-    @SerializedName("matchOrderInfo") val orderInfo: MatchOrderInfo,
-    @Must
-    @SerializedName("orderTTL") val ttlS: Int,
-    @Must
-    @SerializedName("orderNotifyType") val opType: Int,
-    @Must
-    @SerializedName("takeOrderUserType") val userType: Int,
-)
-
-data class CallTopicsReq(@SerializedName("peerMatchedUid") val uid: Long)
-
-data class CallTopicsRes(
-    @SerializedName("commonLabels") val commonLabels: List<UserLabel>,
-    @SerializedName("peerLabels") val peerLabels: List<UserLabel>,
-    @SerializedName("recommendTopics") val topics: List<String>,
-)
-
-data class TakeMatchOrderReq(
-    @SerializedName("matchOrderId") val orderId: String,
-    @SerializedName("takeOrderUserType") val userType: Int,
-    @SerializedName("platform") val platform: String = AppBase.platform,
-    @SerializedName("clientVersion") val clientVersion: Int = PackageUtil.getVersionCode(),
-)
-
-data class TakeMatchOrderRes(
-    @Must
-    @SerializedName("matchOrderInfo") val orderInfo: MatchOrderInfo,
-    @Must
-    @SerializedName("matchVoiceChannel") val channel: Long,
-    @SerializedName("hasTakeOrderReward") val hasReward: Boolean, //本单是否有奖励
-    @SerializedName("rewardVoiceChatDuration") val rewardChatDurationS: Long, //获取奖励需要的聊天时长
-    @SerializedName("rewardCurrency") val rewardCurrency: Int, //奖励货币类型
-    @SerializedName("rewardValue") val rewardValue: Long, //奖励金额
-)
-
-data class CallEndNotify(
-    @Must
-    @SerializedName("notifyId") val notifyId: Long,
-    @Must
-    @SerializedName("roomId") val roomId: Long,
-)
-
-data class CallMatchRewardGiveNotify(
-    @Must
-    @SerializedName("matchChannel") val roomId: Long,
-    @Must
-    @SerializedName("rewardUid") val rewardUid: Long,
-    @Must
-    @SerializedName("currencyType") val currencyType: Int,
-    @Must
-    @SerializedName("currencyValue") val currencyValue: Int,
-)
-
-data class CallMatchReqAsk(
-    @SerializedName("matchId") val matchId: Long,
-    @SerializedName("fromUid") val fromUid: Long,
-    @SerializedName("toUid") val toUid: Long,
-    @SerializedName("matchTimeout") val matchTimeout: Long,
-    @SerializedName("userInfo") val userInfo: UserInfo
-)
-
-data class CallMatchResultNotify(
-    @SerializedName("matchId") val matchId: Long,
-    @SerializedName("fromUid") val fromUid: Long,
-    @SerializedName("peerUid") val peerUid: Long,
-    @SerializedName("matchResult") val matchResult: Int, //参考 MatchResult
-    @SerializedName("enterRoomType") val enterRoomType: Int, //匹配后进入房间类型 参考 CallType
-    @SerializedName("callMode") val callMode: Int, //匹配后通话类型 参考 CallType
-)
-
-//实时匹配结果
-enum class MatchResult(val value: Int) {
-    SUCCESS(1),
-    CANCEL(2),
-    TIMEOUT(3),
-    FAILED(4),
-}

+ 0 - 6
app/src/main/java/com/adealink/weparty/module/call/match/viewmodel/ICallMatchViewModel.kt

@@ -1,6 +0,0 @@
-package com.adealink.weparty.module.call.match.viewmodel
-
-interface ICallMatchViewModel {
-
-
-}

+ 0 - 29
app/src/main/java/com/adealink/weparty/module/call/viewmodel/ICallViewModel.kt

@@ -1,29 +0,0 @@
-package com.adealink.weparty.module.call.viewmodel
-
-import androidx.lifecycle.LiveData
-import com.adealink.frame.base.Rlt
-import com.adealink.frame.network.data.Res
-import com.adealink.weparty.module.backpack.GetExperienceCardRes
-import com.adealink.weparty.module.call.data.CallStatus
-
-interface ICallViewModel {
-    val callStatusLD: LiveData<CallStatus>
-
-    val showMatchEntrance: LiveData<Boolean>
-
-    val experienceCardLd: LiveData<Rlt<Res<GetExperienceCardRes>>>
-
-    fun getCallStatus()
-
-    fun getExperienceCard(type: Int)
-
-    fun getMerchantFreeCall(uid: Long, peerUid: Long)
-
-    fun switchMode(roomId: String, callMode: Int): LiveData<Rlt<Boolean>>
-
-    fun switchModeAnswer(roomId: String, answerType: Int): LiveData<Rlt<Boolean>>
-
-    fun getCallMatchEntrance()
-
-    fun getMatchUserList()
-}

Some files were not shown because too many files changed in this diff