tongmengxiao 11 meses atrás
pai
commit
7d4265ae72

+ 7 - 1
app/proguard-rules.pro

@@ -247,4 +247,10 @@
 -keepclassmembers class com.facebook.applinks.** { *; }
 -keepclassmembers class com.facebook.applinks.** { *; }
 -keep class com.facebook.FacebookSdk { *; }
 -keep class com.facebook.FacebookSdk { *; }
 -keep class com.huawei.hms.ads.** { *; }
 -keep class com.huawei.hms.ads.** { *; }
--keep class com.facebook.login.** { *; }
+-keep class com.facebook.login.** { *; }
+
+-keep class com.uc.crashsdk.** { *; }
+-keep interface com.uc.crashsdk.** { *; }
+-keep class com.aliyun.sls.android.producer.* { *; }
+-keep interface com.aliyun.sls.android.producer.* { *; }
+-keep class com.aliyun.sls.android.** { *; }

+ 19 - 3
app/src/main/java/com/swago/app/SwagoApp.kt

@@ -6,6 +6,8 @@ import android.net.http.HttpResponseCache
 import androidx.fragment.app.FragmentActivity
 import androidx.fragment.app.FragmentActivity
 import androidx.multidex.MultiDex
 import androidx.multidex.MultiDex
 import com.alibaba.android.arouter.launcher.ARouter
 import com.alibaba.android.arouter.launcher.ARouter
+import com.aliyun.sls.android.core.SLSAndroid
+import com.aliyun.sls.android.core.configuration.Credentials
 import com.facebook.FacebookSdk
 import com.facebook.FacebookSdk
 import com.google.firebase.analytics.ktx.analytics
 import com.google.firebase.analytics.ktx.analytics
 import com.google.firebase.crashlytics.ktx.crashlytics
 import com.google.firebase.crashlytics.ktx.crashlytics
@@ -75,6 +77,11 @@ class SwagoApp : Application() {
         })
         })
     }
     }
 
 
+    override fun attachBaseContext(base: Context?) {
+        super.attachBaseContext(base)
+        MultiDex.install(this)
+    }
+
     private fun pushCrash() {
     private fun pushCrash() {
         Thread.setDefaultUncaughtExceptionHandler { t, ex ->
         Thread.setDefaultUncaughtExceptionHandler { t, ex ->
             runBlocking {
             runBlocking {
@@ -91,8 +98,17 @@ class SwagoApp : Application() {
         }
         }
     }
     }
 
 
-    override fun attachBaseContext(base: Context?) {
-        super.attachBaseContext(base)
-        MultiDex.install(this)
+    private fun crashReporter(){
+        val credentials = Credentials()
+        credentials.instanceId = ""
+        credentials.endpoint = ""
+        credentials.project = ""
+        credentials.accessKeyId = ""
+        credentials.accessKeySecret = ""
+        SLSAndroid.initialize(this , credentials) {
+            it.enableCrashReporter = true
+            it.enableBlockDetection = true
+            it.enableTracerLog
+        }
     }
     }
 }
 }

+ 5 - 0
baseswago/build.gradle

@@ -133,4 +133,9 @@ dependencies {
     api 'com.duolingo.open:rtl-viewpager:2.0.0'
     api 'com.duolingo.open:rtl-viewpager:2.0.0'
     //lottie
     //lottie
     api 'com.airbnb.android:lottie:4.0.0'
     api 'com.airbnb.android:lottie:4.0.0'
+
+    //阿里
+    api 'com.aliyun.openservices:aliyun-log-android-sdk:latest.release'
+    api 'com.aliyun.openservices:sls-android-core:latest.release'
+
 }
 }

+ 1 - 0
baseswago/src/main/java/com/swago/baseswago/constant/ARouteConstant.kt

@@ -42,6 +42,7 @@ object ARouteConstant {
         const val anchor = "$rootPath/AnchorRoomActivity"
         const val anchor = "$rootPath/AnchorRoomActivity"
         const val user = "$rootPath/UserRoomActivity"
         const val user = "$rootPath/UserRoomActivity"
         const val rankList = "$rootPath/RankListActivity"
         const val rankList = "$rootPath/RankListActivity"
+        const val black = "$rootPath/BlackRoomActivity"
     }
     }
 
 
 }
 }

+ 5 - 4
home/src/main/java/com/swago/home/innerhome/FollowFragment.kt

@@ -50,10 +50,11 @@ class FollowFragment : BaseListFragment<FragmentHotBinding, MomentModel>(){
                         .withParcelableArrayList("data",adapter.data as ArrayList<MomentModel>)
                         .withParcelableArrayList("data",adapter.data as ArrayList<MomentModel>)
                         .navigation()
                         .navigation()
                 }else{
                 }else{
-                    PersonDataDFragment.newInstance(adapter.data[position].id,
-                        isAnchor = true,
-                        inRoom = false
-                    ).show(childFragmentManager,"PersonDataDFragment")
+                    ARouter.getInstance()
+                        .build(ARouteConstant.Room.black)
+                        .withInt("position",position)
+                        .withParcelableArrayList("data",adapter.data as ArrayList<MomentModel>)
+                        .navigation()
                 }
                 }
             }
             }
 
 

+ 2 - 0
room/src/main/AndroidManifest.xml

@@ -14,6 +14,8 @@
             android:screenOrientation="portrait"/>
             android:screenOrientation="portrait"/>
         <activity android:name=".wishgift.FanClubRuleActivity"
         <activity android:name=".wishgift.FanClubRuleActivity"
             android:screenOrientation="portrait"/>
             android:screenOrientation="portrait"/>
+        <activity android:name=".black.BlackRoomActivity"
+            android:screenOrientation="portrait"/>
         <service android:name=".service.AgoraForegroundService"/>
         <service android:name=".service.AgoraForegroundService"/>
     </application>
     </application>
 
 

+ 232 - 0
room/src/main/java/com/swago/room/black/BlackRoomActivity.kt

@@ -0,0 +1,232 @@
+package com.swago.room.black
+
+import android.view.View
+import android.view.ViewGroup
+import android.view.WindowManager
+import android.widget.FrameLayout
+import android.widget.ImageView
+import android.widget.Toast
+import androidx.activity.viewModels
+import androidx.constraintlayout.widget.ConstraintLayout
+import com.alibaba.android.arouter.facade.annotation.Autowired
+import com.alibaba.android.arouter.facade.annotation.Route
+import com.alibaba.android.arouter.launcher.ARouter
+import com.bumptech.glide.Glide
+import com.bumptech.glide.request.RequestOptions
+import com.gyf.immersionbar.ImmersionBar
+import com.swago.baseswago.SwagoAdapter
+import com.swago.baseswago.agora.AgoraManager
+import com.swago.baseswago.baseroom.IRoomInfo
+import com.swago.baseswago.baseroom.SwagoRoomManager
+import com.swago.baseswago.baseroom.ui.AbsUserActivity
+import com.swago.baseswago.constant.ARouteConstant
+import com.swago.baseswago.databinding.ActivityAbsRoomUserBinding
+import com.swago.baseswago.model.MomentModel
+import com.swago.baseswago.util.*
+import com.swago.room.R
+import com.swago.room.audio.AudioRoomManager
+import com.swago.room.base.NoContentFragment
+import com.swago.room.bean.UserRoomModel
+import com.swago.room.data.RoomDataManager
+import com.swago.room.enum.RoomType
+import com.swago.room.lianmai.LianMaiManager
+import com.swago.room.pk.PKStateManager
+import com.swago.room.user.UserRoomFragment
+import com.swago.room.vm.MsgVm
+import com.swago.room.vm.RoomVm
+import com.swago.room.widget.ChoiceViewPager
+import com.swago.room.widget.UserShowAnchorCloseView
+import jp.wasabeef.glide.transformations.BlurTransformation
+import java.util.concurrent.CopyOnWriteArrayList
+
+@Route(path = ARouteConstant.Room.black)
+class BlackRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomModel>(){
+
+    private val roomVm by viewModels<RoomVm>()
+    private val msgVm by viewModels<MsgVm>()
+
+    private val fragments by lazy{
+        listOf(NoContentFragment(), UserRoomFragment())
+    }
+
+    @Autowired
+    @JvmField
+    var position: Int = 0
+
+    @Autowired
+    @JvmField
+    var data: ArrayList<MomentModel>? = null
+
+    private var userRoomFragment: UserRoomFragment? = null
+
+    private var ivClose: ImageView? = null
+    private var ivCover: ImageView? = null
+    private var userShowAnchorCloseView: UserShowAnchorCloseView? = null
+    private var flRoot: FrameLayout? = null
+    private var peerFl: FrameLayout? = null
+    private var choiceViewPager:ChoiceViewPager? = null
+
+    override val roomCoverView: ViewGroup by lazy {
+        val userRoomView = layoutInflater.inflate(R.layout.layout_user_room, null) as ViewGroup
+        choiceViewPager = userRoomView.findViewById<ChoiceViewPager>(R.id.viewPager)
+        ivClose = userRoomView.findViewById(R.id.ivClose)
+        userShowAnchorCloseView = userRoomView.findViewById(R.id.userShowAnchorCloseView)
+//        ivCover = userRoomView.findViewById(R.id.ivCover)
+        flRoot = userRoomView.findViewById(R.id.flRoot)
+        peerFl = userRoomView.findViewById(R.id.peerFl)
+        choiceViewPager?.adapter = SwagoAdapter(fragments, supportFragmentManager)
+        choiceViewPager?.currentItem = 1
+        userRoomView
+    }
+
+
+    override var mCurrentPosition: Int = position
+    override var iRoomInfos: CopyOnWriteArrayList<UserRoomModel> = RoomDataManager.data
+
+    override fun initUserRoomView() {
+        ARouter.getInstance().inject(this)
+        mCurrentPosition = position
+        RoomDataManager.initData(data)
+        userRoomFragment = fragments[1] as UserRoomFragment
+
+        roomVm.init()
+        msgVm.init()
+        initPeerAnchorLayoutParams()
+        window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
+
+        ivClose?.setOnClickListener(object : NoDoubleClickListener() {
+            override fun onClick() {
+
+                finish()
+
+            }
+        })
+
+
+    }
+
+    override fun initLiveData() {
+        msgVm.anchorRoomClosed = {
+            userShowAnchorCloseView?.visibility = View.VISIBLE
+            it?.let { userShowAnchorCloseView?.setData(it) }
+            SwagoRoomManager.receiveStopLive()
+        }
+
+        msgVm.kickFromRoom = {
+            Toast.makeText(
+                AppContext.getContext(),
+                AppContext.getContext().resources.getString(R.string.be_kick_out),
+                Toast.LENGTH_SHORT
+            ).show()
+            SwagoRoomManager.closeRoom()
+        }
+
+        roomVm.roomClosedLiveData.observe(this) {
+            userShowAnchorCloseView?.visibility = View.VISIBLE
+            it?.let { userShowAnchorCloseView?.setData(it) }
+        }
+
+        roomVm.momentModelLiveData.observe(this) {
+            val userRoomModel = UserRoomModel()
+            userRoomModel.momentModel = it
+            iRoomInfos.add(userRoomModel)
+            scrollToPosition(iRoomInfos.lastIndex)
+        }
+    }
+
+    override fun changeRoom(iRoomInfo: IRoomInfo) {
+        isRobot = iRoomInfo.getIsRobot()
+        ivCover?.let {
+            Glide.with(this)
+                .load(iRoomInfo.getRoomCover())
+                .dontAnimate()
+                .apply(RequestOptions.bitmapTransform(BlurTransformation(5, 100)))
+                .into(it)
+        }
+        ivCover?.visibility = View.VISIBLE
+        userShowAnchorCloseView?.visibility = View.INVISIBLE
+
+        when(iRoomInfo.getRoomType()){
+            RoomType.VIDEO.type -> {
+                choiceViewPager?.setCanScroll(true)
+                AgoraManager.setVideoAudio(
+                    pullVideo = true,
+                    pullAudio = true,
+                    pushVideo = false,
+                    pushAudio = false
+                )
+            }
+
+            RoomType.AUDIO.type -> {
+                choiceViewPager?.setCanScroll(false)
+                AgoraManager.setVideoAudio(
+                    pullVideo = false,
+                    pullAudio = true,
+                    pushVideo = false,
+                    pushAudio = false
+                )
+            }
+
+            RoomType.NULL.type -> {}
+        }
+    }
+
+    override fun leaveRoom(iRoomInfo: IRoomInfo) {
+
+    }
+
+    override fun joinedRoom(iRoomInfo: IRoomInfo) {
+            ivCover?.visibility = View.GONE
+    }
+
+    override fun receiveStopLive() {
+        AudioRoomManager.resetData()
+        SwagoRoomManager.iRoomInfo?.let {
+            if (it.getRoomType() == RoomType.AUDIO.type){
+                AgoraManager.setVideoAudio(
+                    pullVideo = false,
+                    pullAudio = false,
+                    pushVideo = false,
+                    pushAudio = false
+                )
+            }
+        }
+    }
+
+    override fun endRoom(iRoomInfo: IRoomInfo?) {
+    }
+
+    override fun closeRoomed() {
+    }
+
+    override fun onBackPressed() {
+        SwagoRoomManager.closeRoom()
+    }
+
+    override fun onDestroy() {
+        super.onDestroy()
+    }
+
+    private var isRobot = false
+
+
+    private val marginTopValue by lazy {
+        ImmersionBar.getStatusBarHeight(this) + DpPxUtil.dip2px(78f)
+    }
+
+    private fun initPeerAnchorLayoutParams() {
+        val x = DpPxUtil.getScreenWidth() / 2
+        val y = DpPxUtil.getScreenWidth() * 275 / 360
+        val params = ConstraintLayout.LayoutParams(x, y)
+        params.topToTop = R.id.rootUserView
+        params.endToEnd = R.id.rootUserView
+        params.width = x
+        params.height = y
+        params.topMargin = marginTopValue
+        peerFl?.layoutParams = params
+    }
+
+    override fun moveTaskToBack(nonRoot: Boolean): Boolean {
+        return super.moveTaskToBack(true)
+    }
+}

+ 1 - 1
room/src/main/java/com/swago/room/widget/UserFooterView.kt

@@ -110,7 +110,7 @@ class UserFooterView : ConstraintLayout, IFooter,IRoomActiveListener {
         visibility = View.VISIBLE
         visibility = View.VISIBLE
         if (iRoomInfo.getRoomType() == RoomType.AUDIO.type){
         if (iRoomInfo.getRoomType() == RoomType.AUDIO.type){
             binding.ivLianMai.visibility = View.GONE
             binding.ivLianMai.visibility = View.GONE
-            binding.ivShare.visibility = View.GONE
+            binding.ivShare.visibility = View.VISIBLE
         }else if(iRoomInfo.getRoomType() == RoomType.VIDEO.type){
         }else if(iRoomInfo.getRoomType() == RoomType.VIDEO.type){
             binding.ivLianMai.visibility = View.VISIBLE
             binding.ivLianMai.visibility = View.VISIBLE
             binding.ivShare.visibility = View.VISIBLE
             binding.ivShare.visibility = View.VISIBLE