honghengqiang 2 years ago
parent
commit
28af135cf7
66 changed files with 1188 additions and 265 deletions
  1. 0 1
      .idea/gradle.xml
  2. 4 1
      .idea/misc.xml
  3. 0 1
      app/build.gradle
  4. BIN
      app/release/com.swago.app-release-1.0.5.apk
  5. 3 3
      app/release/output-metadata.json
  6. 1 3
      app/src/main/java/com/swago/app/SplashActivity.kt
  7. 10 0
      app/src/main/java/com/swago/app/SwagoApp.kt
  8. 0 1
      baseswago/src/main/java/com/swago/baseswago/PayVm.kt
  9. 1 1
      baseswago/src/main/java/com/swago/baseswago/activity/BaseActivity.kt
  10. 49 0
      baseswago/src/main/java/com/swago/baseswago/dialog/ForceOfflineDialog.kt
  11. 141 0
      baseswago/src/main/java/com/swago/baseswago/dialog/PayDialog.kt
  12. 2 2
      baseswago/src/main/java/com/swago/baseswago/dialog/RechargeAdapter.kt
  13. 2 0
      baseswago/src/main/java/com/swago/baseswago/http/SwagoInterceptor.kt
  14. 9 0
      baseswago/src/main/java/com/swago/baseswago/model/live/gift/IMGiftModel.java
  15. 30 29
      baseswago/src/main/java/com/swago/baseswago/util/ActivityManagerUtil.java
  16. 1 2
      baseswago/src/main/java/com/swago/baseswago/util/BaseViewModel.kt
  17. 421 0
      baseswago/src/main/java/com/swago/baseswago/util/KeyboardUtils.java
  18. 29 0
      baseswago/src/main/java/com/swago/baseswago/util/SwagoInfo.kt
  19. 0 0
      baseswago/src/main/res/drawable/shape_f7f8fa_5.xml
  20. 0 0
      baseswago/src/main/res/drawable/shape_ff9300_5.xml
  21. 51 0
      baseswago/src/main/res/layout/dialog_off_line.xml
  22. 78 0
      baseswago/src/main/res/layout/dialog_pay.xml
  23. 0 0
      baseswago/src/main/res/layout/item_recharge.xml
  24. 0 0
      baseswago/src/main/res/mipmap-xxhdpi/item_coin.png
  25. 97 0
      baseswago/src/main/res/values-in/strings.xml
  26. 3 1
      baseswago/src/main/res/values-zh/strings.xml
  27. 7 5
      baseswago/src/main/res/values/strings.xml
  28. 6 2
      home/src/main/java/com/swago/home/HomeActivity.kt
  29. 25 10
      home/src/main/java/com/swago/home/MessageFragment.kt
  30. 1 1
      home/src/main/java/com/swago/home/innerhome/HomeAdapter.kt
  31. 1 0
      home/src/main/res/layout/fragment_message.xml
  32. 1 1
      home/src/main/res/values/styles.xml
  33. 2 1
      login/src/main/AndroidManifest.xml
  34. 0 8
      login/src/main/java/com/swago/login/LoginActivity.kt
  35. 4 4
      login/src/main/java/com/swago/login/LoginVm.kt
  36. 0 1
      pay/.gitignore
  37. 0 56
      pay/build.gradle
  38. 0 0
      pay/consumer-rules.pro
  39. 0 21
      pay/proguard-rules.pro
  40. 0 24
      pay/src/androidTest/java/com/swago/pay/ExampleInstrumentedTest.kt
  41. 0 5
      pay/src/main/AndroidManifest.xml
  42. 0 8
      pay/src/main/java/com/swago/pay/Te.java
  43. 0 17
      pay/src/test/java/com/swago/pay/ExampleUnitTest.kt
  44. 6 7
      room/src/main/java/com/swago/room/anchor/AnchorRoomActivity.kt
  45. 15 1
      room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt
  46. 55 1
      room/src/main/java/com/swago/room/base/BaseComFragment.kt
  47. 1 1
      room/src/main/java/com/swago/room/dialog/UserForAnchorCloseDialog.kt
  48. 20 7
      room/src/main/java/com/swago/room/gift/GiftDialog.kt
  49. 4 1
      room/src/main/java/com/swago/room/gift/GiftVm.kt
  50. 15 3
      room/src/main/java/com/swago/room/gift/control/SvgPlayerManager.kt
  51. 4 3
      room/src/main/java/com/swago/room/gift/control/XSvgPlayer.kt
  52. 23 12
      room/src/main/java/com/swago/room/piaotiao/WaftManager.kt
  53. 5 1
      room/src/main/java/com/swago/room/piaotiao/WaftView.kt
  54. 7 4
      room/src/main/java/com/swago/room/user/UserRoomActivity.kt
  55. 12 5
      room/src/main/java/com/swago/room/user/UserRoomFragment.kt
  56. 16 2
      room/src/main/java/com/swago/room/vm/MsgVm.kt
  57. 7 0
      room/src/main/java/com/swago/room/widget/AnchorHeaderView.kt
  58. 8 0
      room/src/main/java/com/swago/room/widget/UserHeaderView.kt
  59. 1 0
      room/src/main/res/layout/dialog_message_list.xml
  60. 1 1
      room/src/main/res/layout/dialog_user_for_anchor_close.xml
  61. 1 0
      room/src/main/res/layout/fragment_base_com.xml
  62. 4 3
      room/src/main/res/layout/item_chat.xml
  63. 0 1
      settings.gradle
  64. 0 1
      user/src/main/java/com/swago/user/SettingActivity.kt
  65. 3 1
      user/src/main/java/com/swago/user/recharge/RechargeActivity.kt
  66. 1 1
      user/src/main/java/com/swago/user/task/TaskAdapter.kt

+ 0 - 1
.idea/gradle.xml

@@ -15,7 +15,6 @@
             <option value="$PROJECT_DIR$/home" />
             <option value="$PROJECT_DIR$/lib_country_picker" />
             <option value="$PROJECT_DIR$/login" />
-            <option value="$PROJECT_DIR$/pay" />
             <option value="$PROJECT_DIR$/room" />
             <option value="$PROJECT_DIR$/tuikit" />
             <option value="$PROJECT_DIR$/user" />

+ 4 - 1
.idea/misc.xml

@@ -25,6 +25,7 @@
         <entry key="baseswago/src/main/res/drawable/shape_black_15.xml" value="0.3177083333333333" />
         <entry key="baseswago/src/main/res/drawable/shape_black_5.xml" value="0.35794871794871796" />
         <entry key="baseswago/src/main/res/drawable/shape_dadada_5.xml" value="0.35794871794871796" />
+        <entry key="baseswago/src/main/res/drawable/shape_f7f8fa_5.xml" value="0.19895833333333332" />
         <entry key="baseswago/src/main/res/drawable/shape_ff9300_20.xml" value="0.21927083333333333" />
         <entry key="baseswago/src/main/res/drawable/shape_touming.xml" value="0.37333333333333335" />
         <entry key="baseswago/src/main/res/drawable/shape_white_20.xml" value="0.35794871794871796" />
@@ -34,10 +35,12 @@
         <entry key="baseswago/src/main/res/layout/activity_web.xml" value="0.19047619047619047" />
         <entry key="baseswago/src/main/res/layout/dialog_loading.xml" value="0.36302083333333335" />
         <entry key="baseswago/src/main/res/layout/dialog_order_lost.xml" value="0.3015625" />
+        <entry key="baseswago/src/main/res/layout/dialog_pay.xml" value="0.335" />
         <entry key="baseswago/src/main/res/layout/dialog_person_data.xml" value="0.36302083333333335" />
         <entry key="baseswago/src/main/res/layout/dialog_report.xml" value="0.3015625" />
         <entry key="baseswago/src/main/res/layout/item_room.xml" value="0.3776041666666667" />
         <entry key="baseswago/src/main/res/layout/layout_list.xml" value="0.17654508611955422" />
+        <entry key="baseswago/src/main/res/layout/layout_off_line.xml" value="0.3619791666666667" />
         <entry key="baseswago/src/main/res/layout/layout_refresh.xml" value="0.303125" />
         <entry key="baseswago/src/main/res/layout/layout_toolbar.xml" value="0.36302083333333335" />
         <entry key="home/src/main/res/drawable/selector_home.xml" value="0.3932291666666667" />
@@ -57,7 +60,7 @@
         <entry key="home/src/main/res/layout/fragment_mine.xml" value="0.36302083333333335" />
         <entry key="home/src/main/res/layout/fragment_moment.xml" value="0.25" />
         <entry key="home/src/main/res/layout/fragment_new.xml" value="0.35" />
-        <entry key="home/src/main/res/layout/item_home.xml" value="0.9" />
+        <entry key="home/src/main/res/layout/item_home.xml" value="0.3964984552008239" />
         <entry key="home/src/main/res/layout/item_official.xml" value="0.3770833333333333" />
         <entry key="home/src/main/res/layout/item_search.xml" value="0.33" />
         <entry key="home/src/main/res/layout/layout_message.xml" value="0.24324324324324326" />

+ 0 - 1
app/build.gradle

@@ -101,7 +101,6 @@ dependencies {
     implementation project(path: ':home')
     implementation project(path: ':tuikit')
     implementation project(path: ':room')
-    implementation project(path: ':pay')
     kapt "com.alibaba:arouter-compiler:1.2.2"
 
 

BIN
app/release/com.swago.app-release-1.0.4.apk → app/release/com.swago.app-release-1.0.5.apk


+ 3 - 3
app/release/output-metadata.json

@@ -10,9 +10,9 @@
     {
       "type": "SINGLE",
       "filters": [],
-      "versionCode": 5,
-      "versionName": "1.0.4",
-      "outputFile": "com.swago.app-release-1.0.4.apk"
+      "versionCode": 6,
+      "versionName": "1.0.5",
+      "outputFile": "com.swago.app-release-1.0.5.apk"
     }
   ]
 }

+ 1 - 3
app/src/main/java/com/swago/app/SplashActivity.kt

@@ -34,6 +34,7 @@ class SplashActivity : AppCompatActivity() {
                     ARouter.getInstance().build(ARouteConstant.Home.home)
                         .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP).navigation()
                     IMUtil.joinGroup(loginFun)
+
                 }
 
                 override fun onError(module: String?, errCode: Int, errMsg: String?) {
@@ -50,10 +51,7 @@ class SplashActivity : AppCompatActivity() {
             TUIKit.login(it.user_account,it.user_sig,object:
                 IUIKitCallBack {
                 override fun onSuccess(data: Any?) {
-                    ARouter.getInstance().build(ARouteConstant.Home.home)
-                        .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP).navigation()
                     IMUtil.joinGroup(null)
-                    finish()
                 }
 
                 override fun onError(module: String?, errCode: Int, errMsg: String?) {

+ 10 - 0
app/src/main/java/com/swago/app/SwagoApp.kt

@@ -5,9 +5,12 @@ import android.content.Context
 import android.net.http.HttpResponseCache
 import androidx.multidex.MultiDex
 import com.alibaba.android.arouter.launcher.ARouter
+import com.swago.baseswago.dialog.ForceOfflineDialog
 import com.swago.baseswago.util.ActivityManagerUtil
 import com.swago.baseswago.util.AppContext
 import com.tencent.qcloud.tim.uikit.TUIKit
+import com.tencent.qcloud.tim.uikit.TUIKitImpl
+import com.tencent.qcloud.tim.uikit.base.IMEventListener
 import com.tencent.qcloud.tim.uikit.config.TUIKitConfigs
 import com.zy.multistatepage.MultiStateConfig
 import com.zy.multistatepage.MultiStatePage
@@ -44,6 +47,13 @@ class SwagoApp : Application() {
             .errorMsg("Load data error")
             .build()
         MultiStatePage.config(config)
+
+        TUIKitImpl.addIMEventListener(object:IMEventListener(){
+            override fun onForceOffline() {
+                super.onForceOffline()
+                ForceOfflineDialog.newInstance().show(ActivityManagerUtil.get().currentActivity().supportFragmentManager,"ForceOfflineDialog")
+            }
+        })
     }
 
     override fun attachBaseContext(base: Context?) {

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

@@ -58,7 +58,6 @@ class PayVm(application: Application) : BaseViewModel(application) {
     fun payOrderToServer(purchase: Purchase?, payType: Int) {
         requestData2 {
             requestData {
-                SwagoLoading.showLoadingDialog(ActivityManagerUtil.get().currentActivity())
                 if (payType == 1 || payType == 4) {
                     purchase?.let {
                         ApiManager.payApi.payOrderToServer(

+ 1 - 1
baseswago/src/main/java/com/swago/baseswago/activity/BaseActivity.kt

@@ -25,7 +25,7 @@ abstract class BaseActivity<T:ViewBinding> : AppCompatActivity() {
 
     override fun onCreate(savedInstanceState: Bundle?) {
         super.onCreate(savedInstanceState)
-        setImmersionBar(darkFont = true, fitSystemWindow = false)
+        setImmersionBar(darkFont = false, fitSystemWindow = false)
         binding = getViewBindingForActivity(layoutInflater)
         setContentView(binding.root)
 

+ 49 - 0
baseswago/src/main/java/com/swago/baseswago/dialog/ForceOfflineDialog.kt

@@ -0,0 +1,49 @@
+package com.swago.baseswago.dialog
+
+import android.content.Intent
+import android.os.Bundle
+import com.alibaba.android.arouter.launcher.ARouter
+import com.swago.baseswago.constant.ARouteConstant
+import com.swago.baseswago.databinding.DialogOffLineBinding
+import com.swago.baseswago.util.NoDoubleClickListener
+import com.swago.baseswago.util.SpUtil
+import com.swago.baseswago.util.UserInfo
+
+/**
+ *@date 2021/12/18 17:11
+ *description:
+ */
+class ForceOfflineDialog : BaseXDFragment<DialogOffLineBinding>(){
+
+    init {
+        setCanCancel(false)
+    }
+
+    companion object{
+        fun newInstance():ForceOfflineDialog{
+            val forceDialog = ForceOfflineDialog()
+            val bundle = Bundle()
+            forceDialog.arguments = bundle
+            return forceDialog
+        }
+    }
+
+    override fun initOther() {
+        binding.tvOk.setOnClickListener(object:NoDoubleClickListener(){
+            override fun onClick() {
+                UserInfo.clearUserInfo()
+                SpUtil.clearSp()
+                ARouter.getInstance().build(ARouteConstant.Login.login)
+                    .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
+                    .navigation()
+                dismissAllowingStateLoss()
+            }
+        })
+    }
+
+    override fun initLiveData() {
+
+    }
+
+
+}

+ 141 - 0
baseswago/src/main/java/com/swago/baseswago/dialog/PayDialog.kt

@@ -0,0 +1,141 @@
+package com.swago.baseswago.dialog
+
+import android.graphics.Rect
+import android.os.Bundle
+import android.view.Gravity
+import android.view.View
+import android.widget.Toast
+import androidx.fragment.app.viewModels
+import androidx.recyclerview.widget.GridLayoutManager
+import androidx.recyclerview.widget.RecyclerView
+import com.android.billingclient.api.Purchase
+import com.swago.baseswago.PayVm
+import com.swago.baseswago.R
+import com.swago.baseswago.databinding.DialogPayBinding
+import com.swago.baseswago.libpay.IPayCallback
+import com.swago.baseswago.libpay.PayManager
+import com.swago.baseswago.model.pay.PayModel
+import com.swago.baseswago.util.AppContext
+import com.swago.baseswago.util.DpPxUtil
+import com.swago.baseswago.util.SwagoLoading
+
+/**
+ *@date 2021/12/18 09:14
+ *description:
+ */
+class PayDialog : BaseXDFragment<DialogPayBinding>(), IPayCallback {
+
+    private val payVm by viewModels<PayVm>()
+    private val adapter by lazy {
+        RechargeAdapter()
+    }
+
+
+    init {
+        setGravity(Gravity.BOTTOM)
+        setDimAmount(0f)
+    }
+
+
+    companion object{
+        fun newInstance():PayDialog{
+            val dialog = PayDialog()
+            val bundle = Bundle()
+            dialog.arguments = bundle
+            return dialog
+        }
+    }
+
+    override fun initOther() {
+        PayManager.listener.add(this)
+        binding.recyclerView.layoutManager = GridLayoutManager(context, 3)
+        binding.recyclerView.addItemDecoration(GridItemDecoration())
+        binding.recyclerView.adapter = adapter
+
+        payVm.getCoins()
+        payVm.getProductList()
+    }
+
+    override fun initLiveData() {
+        payVm.coinLiveData.observe(this){
+            binding.tvBalanceValue.text = it.user_coins
+        }
+    }
+
+    override fun onDestroyView() {
+        PayManager.listener.remove(this)
+        super.onDestroyView()
+    }
+
+    override fun onConnectedServer() {
+    }
+
+    override fun onPaySuccess(data: List<Purchase>?) {
+        data?.forEach {
+            payVm.payOrderToServer(it, 1)
+        }
+    }
+
+    override fun onQueryProductPrice(data: List<PayModel>) {
+        SwagoLoading.cancelLoadingDialog()
+        adapter.setNewData(data)
+        PayManager.queryUnConsumeOrder(null,"","")
+    }
+
+    override fun onPayError(code: Int) {
+        SwagoLoading.cancelLoadingDialog()
+        Toast.makeText(AppContext.getContext(), AppContext.getContext().resources.getString(R.string.pay_fail)+"-$code", Toast.LENGTH_SHORT).show()
+        payVm.payOrderToServer(null, 2)
+    }
+
+    override fun onPayCancel() {
+        Toast.makeText(AppContext.getContext(), AppContext.getContext().resources.getString(R.string.pay_cancel), Toast.LENGTH_SHORT).show()
+        payVm.payOrderToServer(null, 3)
+    }
+
+    override fun onUnConsumeOrder(data: List<Purchase>) {
+        data.forEach {
+            val orderLostDialog = OrderLostDialog.newInstance(it.orderId)
+            orderLostDialog.commitLostOrderFun = {
+                payVm.payOrderToServer(it,4)
+            }
+            orderLostDialog.show(childFragmentManager, "OrderLostDialog")
+        }
+    }
+
+    override fun consumeOrderSuccess() {
+
+    }
+
+    override fun consumeOrderFail(code: Int) {
+
+    }
+
+    inner class GridItemDecoration : RecyclerView.ItemDecoration() {
+        override fun getItemOffsets(
+            outRect: Rect,
+            view: View,
+            parent: RecyclerView,
+            state: RecyclerView.State
+        ) {
+            val itemPosition = (view.layoutParams as RecyclerView.LayoutParams).viewLayoutPosition
+            val column = itemPosition % 3
+            val margin = DpPxUtil.dip2px(20f)
+            val middle = DpPxUtil.dip2px(5f)
+            val bottom = DpPxUtil.dip2px(15f)
+            when (column) {
+                0 -> {
+                    outRect.set(margin, 0, middle, bottom)
+                }
+
+                1 -> {
+                    outRect.set(middle, 0, middle, bottom)
+                }
+
+                2 -> {
+                    outRect.set(middle, 0, margin, bottom)
+                }
+            }
+        }
+    }
+}

+ 2 - 2
user/src/main/java/com/swago/user/recharge/RechargeAdapter.kt → baseswago/src/main/java/com/swago/baseswago/dialog/RechargeAdapter.kt

@@ -1,9 +1,9 @@
-package com.swago.user.recharge
+package com.swago.baseswago.dialog
 
 import com.chad.library.adapter.base.BaseQuickAdapter
 import com.chad.library.adapter.base.BaseViewHolder
+import com.swago.baseswago.R
 import com.swago.baseswago.model.pay.PayModel
-import com.swago.user.R
 
 /**
  *@date 2021/11/25 20:13

+ 2 - 0
baseswago/src/main/java/com/swago/baseswago/http/SwagoInterceptor.kt

@@ -1,5 +1,6 @@
 package com.swago.baseswago.http
 
+import com.swago.baseswago.util.SwagoInfo
 import com.swago.baseswago.util.UserInfo.getLoginModel
 import okhttp3.Interceptor
 import okhttp3.Request
@@ -15,6 +16,7 @@ class SwagoInterceptor : Interceptor {
         val request: Request = chain.request()
             .newBuilder()
             .addHeader("apiToken", getLoginModel()?.token?:"")
+            .addHeader("languageCode",SwagoInfo.getLanguageCode())
             .build()
         return chain.proceed(request)
     }

+ 9 - 0
baseswago/src/main/java/com/swago/baseswago/model/live/gift/IMGiftModel.java

@@ -43,6 +43,7 @@ public class IMGiftModel {
     private String svga;
     private String incomeCount;
     private int multiple;
+    private int giftType;
 
     public String getRoomId() {
         return roomId;
@@ -179,4 +180,12 @@ public class IMGiftModel {
     public void setMultiple(int multiple) {
         this.multiple = multiple;
     }
+
+    public int getGiftType() {
+        return giftType;
+    }
+
+    public void setGiftType(int giftType) {
+        this.giftType = giftType;
+    }
 }

+ 30 - 29
baseswago/src/main/java/com/swago/baseswago/util/ActivityManagerUtil.java

@@ -10,6 +10,7 @@ import android.os.Bundle;
 import android.util.Log;
 
 import androidx.annotation.RequiresPermission;
+import androidx.fragment.app.FragmentActivity;
 
 import java.lang.ref.WeakReference;
 import java.util.List;
@@ -21,11 +22,11 @@ import java.util.Stack;
  */
 public class ActivityManagerUtil {
 
-    private static Stack<WeakReference<Activity>> activityStack;
+    private static Stack<WeakReference<FragmentActivity>> activityStack;
     private static ActivityManagerUtil instance;
 
     private ActivityManagerUtil() {
-        activityStack = new Stack<WeakReference<Activity>>();
+        activityStack = new Stack<WeakReference<FragmentActivity>>();
     }
 
     public static ActivityManagerUtil get() {
@@ -48,7 +49,7 @@ public class ActivityManagerUtil {
      */
     public int size() {
         if (activityStack == null) {
-            activityStack = new Stack<WeakReference<Activity>>();
+            activityStack = new Stack<WeakReference<FragmentActivity>>();
         }
         return activityStack.size();
     }
@@ -59,7 +60,7 @@ public class ActivityManagerUtil {
      * @param cls
      * @return
      */
-    public boolean hasActivity(Class<? extends Activity> cls) {
+    public boolean hasActivity(Class<? extends FragmentActivity> cls) {
         for (int i = 0; i < activityStack.size(); i++) {
             if (activityStack.get(i) != null & activityStack.get(i).get() != null && activityStack.get(i).get().getClass().equals(cls)) {
                 return true;
@@ -71,16 +72,16 @@ public class ActivityManagerUtil {
     /**
      * 获取指定的Activity
      */
-    public static Activity getActivity(Class<? extends Activity> cls) {
-        WeakReference<Activity> weakReference = findWeakByActivityCls(cls);
+    public static FragmentActivity getActivity(Class<? extends FragmentActivity> cls) {
+        WeakReference<FragmentActivity> weakReference = findWeakByActivityCls(cls);
         if (weakReference != null) {
             return weakReference.get();
         }
         return null;
     }
 
-    private static WeakReference<Activity> findWeakByActivity(Activity activity) {
-        for (WeakReference<Activity> weakReference : activityStack) {
+    private static WeakReference<FragmentActivity> findWeakByActivity(FragmentActivity activity) {
+        for (WeakReference<FragmentActivity> weakReference : activityStack) {
             if (weakReference.get() != null && weakReference.get() == activity) {
                 return weakReference;
             }
@@ -88,8 +89,8 @@ public class ActivityManagerUtil {
         return null;
     }
 
-    private static WeakReference<Activity> findWeakByActivityCls(Class<? extends Activity> activityClass) {
-        for (WeakReference<Activity> weakReference : activityStack) {
+    private static WeakReference<FragmentActivity> findWeakByActivityCls(Class<? extends FragmentActivity> activityClass) {
+        for (WeakReference<FragmentActivity> weakReference : activityStack) {
             if (weakReference.get() != null && weakReference.get().getClass().equals(activityClass)) {
                 return weakReference;
             }
@@ -102,9 +103,9 @@ public class ActivityManagerUtil {
      *
      * @return
      */
-    public Activity currentActivity() {
+    public FragmentActivity currentActivity() {
         if (!activityStack.isEmpty()) {
-            WeakReference<Activity> temp = activityStack.lastElement();
+            WeakReference<FragmentActivity> temp = activityStack.lastElement();
             if (temp.get() != null) {
                 return temp.get();
             }
@@ -116,7 +117,7 @@ public class ActivityManagerUtil {
      * 销毁栈顶的activity
      */
     public void finishTopActivity() {
-        WeakReference<Activity> activity = activityStack.lastElement();
+        WeakReference<FragmentActivity> activity = activityStack.lastElement();
         if (activity != null && activity.get() != null) {
             activity.get().finish();
 
@@ -129,9 +130,9 @@ public class ActivityManagerUtil {
      *
      * @param activityClass
      */
-    public void finishActivity(Class<? extends Activity> activityClass) {
+    public void finishActivity(Class<? extends FragmentActivity> activityClass) {
         for (int i = 0; i < activityStack.size(); i++) {
-            WeakReference<Activity> activity = activityStack.elementAt(i);
+            WeakReference<FragmentActivity> activity = activityStack.elementAt(i);
             if (activity != null && activity.get() != null && activity.get().getClass().equals(activityClass)) {
                 finishActivity(activity.get());
                 return;
@@ -144,9 +145,9 @@ public class ActivityManagerUtil {
      *
      * @param activity
      */
-    public void finishActivity(Activity activity) {
+    public void finishActivity(FragmentActivity activity) {
         if (activity != null) {
-            WeakReference<Activity> weakReference = findWeakByActivity(activity);
+            WeakReference<FragmentActivity> weakReference = findWeakByActivity(activity);
             if (weakReference != null) {
                 if (weakReference.get() != null) {
                     weakReference.get().finish();
@@ -163,7 +164,7 @@ public class ActivityManagerUtil {
         if (activityStack == null || activityStack.isEmpty()) {
             return;
         }
-        for (WeakReference<Activity> weakReference : activityStack) {
+        for (WeakReference<FragmentActivity> weakReference : activityStack) {
             if (weakReference != null && weakReference.get() != null) {
                 weakReference.get().finish();
             }
@@ -182,7 +183,7 @@ public class ActivityManagerUtil {
             if (size() <= 1) {
                 break;
             }
-            Activity activity = currentActivity();
+            FragmentActivity activity = currentActivity();
             if (activity == null) {
                 break;
             }
@@ -195,7 +196,7 @@ public class ActivityManagerUtil {
      *
      * @param cls
      */
-    public void popAllActivityExceptOne(Class<? extends Activity> cls) {
+    public void popAllActivityExceptOne(Class<? extends FragmentActivity> cls) {
         if (activityStack.isEmpty()) {
             return;
         }
@@ -205,7 +206,7 @@ public class ActivityManagerUtil {
             if (i >= size) {
                 return;
             }
-            WeakReference<Activity> weakReference = activityStack.get(i);
+            WeakReference<FragmentActivity> weakReference = activityStack.get(i);
             i++;
             if (weakReference == null || weakReference.get() == null) {
                 i--;
@@ -246,14 +247,14 @@ public class ActivityManagerUtil {
      *
      * @param activity
      */
-    private void pushActivity(Activity activity) {
+    private void pushActivity(FragmentActivity activity) {
         Log.i("ActivityManager", "当前入栈activity ===>>>" + activity.getClass().getSimpleName());
         if (activityStack == null) {
-            activityStack = new Stack<WeakReference<Activity>>();
+            activityStack = new Stack<WeakReference<FragmentActivity>>();
         }
-        WeakReference<Activity> item = findWeakByActivity(activity);
+        WeakReference<FragmentActivity> item = findWeakByActivity(activity);
         if (item == null) {
-            activityStack.add(new WeakReference<Activity>(activity));
+            activityStack.add(new WeakReference<FragmentActivity>(activity));
         }
     }
 
@@ -262,9 +263,9 @@ public class ActivityManagerUtil {
      *
      * @param activity
      */
-    private void removeActivity(Activity activity) {
+    private void removeActivity(FragmentActivity activity) {
         Log.i("ActivityManager", "当前出栈activity ===>>>" + activity.getClass().getSimpleName());
-        for (WeakReference<Activity> weakReference : activityStack) {
+        for (WeakReference<FragmentActivity> weakReference : activityStack) {
             if (weakReference != null && weakReference.get() != null && weakReference.get() == activity) {
                 activityStack.remove(weakReference);
                 return;
@@ -276,7 +277,7 @@ public class ActivityManagerUtil {
 
         @Override
         public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
-            pushActivity(activity);
+            pushActivity((FragmentActivity) activity);
         }
 
         @Override
@@ -306,7 +307,7 @@ public class ActivityManagerUtil {
 
         @Override
         public void onActivityDestroyed(Activity activity) {
-            removeActivity(activity);
+            removeActivity((FragmentActivity) activity);
         }
     }
 

+ 1 - 2
baseswago/src/main/java/com/swago/baseswago/util/BaseViewModel.kt

@@ -78,9 +78,8 @@ open class BaseViewModel(application: Application) : AndroidViewModel(applicatio
                                 .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
                                 .navigation()
                         }
-                    }else{
-                        block.requestError.invoke(e)
                     }
+                    block.requestError.invoke(e)
                 }else{
                     block.requestError.invoke(e)
                 }

+ 421 - 0
baseswago/src/main/java/com/swago/baseswago/util/KeyboardUtils.java

@@ -0,0 +1,421 @@
+package com.swago.baseswago.util;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.res.Resources;
+import android.graphics.Rect;
+import android.os.Build;
+import android.os.Bundle;
+import android.os.Handler;
+import android.os.ResultReceiver;
+import android.os.SystemClock;
+import android.util.Log;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
+import android.view.Window;
+import android.view.WindowManager;
+import android.view.inputmethod.InputMethodManager;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+
+import java.lang.reflect.Field;
+
+/**
+ * @date 2021/12/19 12:11
+ * description:
+ */
+public class KeyboardUtils {
+
+    private static final int TAG_ON_GLOBAL_LAYOUT_LISTENER = -8;
+
+    private KeyboardUtils() {
+        throw new UnsupportedOperationException("u can't instantiate me...");
+    }
+
+    /**
+     * Show the soft input.
+     */
+    public static void showSoftInput() {
+        InputMethodManager imm =
+                (InputMethodManager) AppContext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm == null) {
+            return;
+        }
+        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
+    }
+
+    /**
+     * Show the soft input.
+     */
+    public static void showSoftInput(@Nullable Activity activity) {
+        if (activity == null) {
+            return;
+        }
+        if (!isSoftInputVisible(activity)) {
+            toggleSoftInput();
+        }
+    }
+
+    /**
+     * Show the soft input.
+     *
+     * @param view The view.
+     */
+    public static void showSoftInput(@NonNull final View view) {
+        showSoftInput(view, 0);
+    }
+
+    /**
+     * Show the soft input.
+     *
+     * @param view The view.
+     * @param flags Provides additional operating flags.  Currently may be
+     * 0 or have the {@link InputMethodManager#SHOW_IMPLICIT} bit set.
+     */
+    public static void showSoftInput(@NonNull final View view, final int flags) {
+        InputMethodManager imm =
+                (InputMethodManager) AppContext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm == null) {
+            return;
+        }
+        view.setFocusable(true);
+        view.setFocusableInTouchMode(true);
+        view.requestFocus();
+        imm.showSoftInput(view, flags, new ResultReceiver(new Handler()) {
+            @Override
+            protected void onReceiveResult(int resultCode, Bundle resultData) {
+                if (resultCode == InputMethodManager.RESULT_UNCHANGED_HIDDEN
+                        || resultCode == InputMethodManager.RESULT_HIDDEN) {
+                    toggleSoftInput();
+                }
+            }
+        });
+        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
+    }
+
+    /**
+     * Hide the soft input.
+     *
+     * @param activity The activity.
+     */
+    public static void hideSoftInput(@Nullable final Activity activity) {
+        if (activity == null) {
+            return;
+        }
+        hideSoftInput(activity.getWindow());
+    }
+
+    /**
+     * Hide the soft input.
+     *
+     * @param window The window.
+     */
+    public static void hideSoftInput(@Nullable final Window window) {
+        if (window == null) {
+            return;
+        }
+        View view = window.getCurrentFocus();
+        if (view == null) {
+            View decorView = window.getDecorView();
+            View focusView = decorView.findViewWithTag("keyboardTagView");
+            if (focusView == null) {
+                view = new EditText(window.getContext());
+                view.setTag("keyboardTagView");
+                ((ViewGroup) decorView).addView(view, 0, 0);
+            } else {
+                view = focusView;
+            }
+            view.requestFocus();
+        }
+        hideSoftInput(view);
+    }
+
+    /**
+     * Hide the soft input.
+     *
+     * @param view The view.
+     */
+    public static void hideSoftInput(@NonNull final View view) {
+        InputMethodManager imm =
+                (InputMethodManager) AppContext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm == null) {
+            return;
+        }
+        imm.hideSoftInputFromWindow(view.getWindowToken(), 0);
+    }
+
+    private static long millis;
+
+    /**
+     * Hide the soft input.
+     *
+     * @param activity The activity.
+     */
+    public static void hideSoftInputByToggle(@Nullable final Activity activity) {
+        if (activity == null) {
+            return;
+        }
+        long nowMillis = SystemClock.elapsedRealtime();
+        long delta = nowMillis - millis;
+        if (Math.abs(delta) > 500 && KeyboardUtils.isSoftInputVisible(activity)) {
+            KeyboardUtils.toggleSoftInput();
+        }
+        millis = nowMillis;
+    }
+
+    /**
+     * Toggle the soft input display or not.
+     */
+    public static void toggleSoftInput() {
+        InputMethodManager imm =
+                (InputMethodManager) AppContext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm == null) {
+            return;
+        }
+        imm.toggleSoftInput(0, 0);
+    }
+
+    private static int sDecorViewDelta = 0;
+
+    /**
+     * Return whether soft input is visible.
+     *
+     * @param activity The activity.
+     * @return {@code true}: yes<br>{@code false}: no
+     */
+    public static boolean isSoftInputVisible(@NonNull final Activity activity) {
+        return getDecorViewInvisibleHeight(activity.getWindow()) > 0;
+    }
+
+    private static int getDecorViewInvisibleHeight(@NonNull final Window window) {
+        final View decorView = window.getDecorView();
+        final Rect outRect = new Rect();
+        decorView.getWindowVisibleDisplayFrame(outRect);
+        Log.d("KeyboardUtils",
+                "getDecorViewInvisibleHeight: " + (decorView.getBottom() - outRect.bottom));
+        int delta = Math.abs(decorView.getBottom() - outRect.bottom);
+        if (delta <= getNavBarHeight() + getStatusBarHeight()) {
+            sDecorViewDelta = delta;
+            return 0;
+        }
+        return delta - sDecorViewDelta;
+    }
+
+    /**
+     * Register soft input changed listener.
+     *
+     * @param activity The activity.
+     * @param listener The soft input changed listener.
+     */
+    public static void registerSoftInputChangedListener(@NonNull final Activity activity,
+                                                        @NonNull
+                                                        final OnSoftInputChangedListener listener) {
+        registerSoftInputChangedListener(activity.getWindow(), listener);
+    }
+
+    /**
+     * Register soft input changed listener.
+     *
+     * @param window The window.
+     * @param listener The soft input changed listener.
+     */
+    public static void registerSoftInputChangedListener(@NonNull final Window window,
+                                                        @NonNull
+                                                        final OnSoftInputChangedListener listener) {
+        final int flags = window.getAttributes().flags;
+        if ((flags & WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS) != 0) {
+            window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
+        }
+        final FrameLayout contentView = window.findViewById(android.R.id.content);
+        final int[] decorViewInvisibleHeightPre = { getDecorViewInvisibleHeight(window) };
+        ViewTreeObserver.OnGlobalLayoutListener onGlobalLayoutListener = new ViewTreeObserver.OnGlobalLayoutListener() {
+            @Override
+            public void onGlobalLayout() {
+                int height = getDecorViewInvisibleHeight(window);
+                if (decorViewInvisibleHeightPre[0] != height) {
+                    listener.onSoftInputChanged(height);
+                    decorViewInvisibleHeightPre[0] = height;
+                }
+            }
+        };
+        contentView.getViewTreeObserver().addOnGlobalLayoutListener(onGlobalLayoutListener);
+        contentView.setTag(TAG_ON_GLOBAL_LAYOUT_LISTENER, onGlobalLayoutListener);
+    }
+
+    /**
+     * Unregister soft input changed listener.
+     *
+     * @param window The window.
+     */
+    public static void unregisterSoftInputChangedListener(@NonNull final Window window) {
+        final View contentView = window.findViewById(android.R.id.content);
+        if (contentView == null) {
+            return;
+        }
+        Object tag = contentView.getTag(TAG_ON_GLOBAL_LAYOUT_LISTENER);
+        if (tag instanceof ViewTreeObserver.OnGlobalLayoutListener) {
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
+                contentView.getViewTreeObserver().removeOnGlobalLayoutListener((ViewTreeObserver.OnGlobalLayoutListener) tag);
+                //这里会发生内存泄漏 如果不设置为null
+                contentView.setTag(TAG_ON_GLOBAL_LAYOUT_LISTENER, null);
+            }
+        }
+    }
+
+    /**
+     * Fix the bug of 5497 in Android.
+     * <p>Don't set adjustResize</p>
+     *
+     * @param activity The activity.
+     */
+    public static void fixAndroidBug5497(@NonNull final Activity activity) {
+        fixAndroidBug5497(activity.getWindow());
+    }
+
+    /**
+     * Fix the bug of 5497 in Android.
+     * <p>It will clean the adjustResize</p>
+     *
+     * @param window The window.
+     */
+    public static void fixAndroidBug5497(@NonNull final Window window) {
+        int softInputMode = window.getAttributes().softInputMode;
+        window.setSoftInputMode(
+                softInputMode & ~WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
+        final FrameLayout contentView = window.findViewById(android.R.id.content);
+        final View contentViewChild = contentView.getChildAt(0);
+        final int paddingBottom = contentViewChild.getPaddingBottom();
+        final int[] contentViewInvisibleHeightPre5497 = { getContentViewInvisibleHeight(window) };
+        contentView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
+            @Override
+            public void onGlobalLayout() {
+                int height = getContentViewInvisibleHeight(window);
+                if (contentViewInvisibleHeightPre5497[0] != height) {
+                    contentViewChild.setPadding(contentViewChild.getPaddingLeft(),
+                            contentViewChild.getPaddingTop(), contentViewChild.getPaddingRight(),
+                            paddingBottom + getDecorViewInvisibleHeight(window));
+                    contentViewInvisibleHeightPre5497[0] = height;
+                }
+            }
+        });
+    }
+
+    private static int getContentViewInvisibleHeight(final Window window) {
+        final View contentView = window.findViewById(android.R.id.content);
+        if (contentView == null) {
+            return 0;
+        }
+        final Rect outRect = new Rect();
+        contentView.getWindowVisibleDisplayFrame(outRect);
+        Log.d("KeyboardUtils",
+                "getContentViewInvisibleHeight: " + (contentView.getBottom() - outRect.bottom));
+        int delta = Math.abs(contentView.getBottom() - outRect.bottom);
+        if (delta <= getStatusBarHeight() + getNavBarHeight()) {
+            return 0;
+        }
+        return delta;
+    }
+
+    /**
+     * Fix the leaks of soft input.
+     *
+     * @param activity The activity.
+     */
+    public static void fixSoftInputLeaks(@NonNull final Activity activity) {
+        fixSoftInputLeaks(activity.getWindow());
+    }
+
+    /**
+     * Fix the leaks of soft input.
+     *
+     * @param window The window.
+     */
+    public static void fixSoftInputLeaks(@NonNull final Window window) {
+        InputMethodManager imm =
+                (InputMethodManager) AppContext.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
+        if (imm == null) {
+            return;
+        }
+        String[] leakViews =
+                new String[] { "mLastSrvView", "mCurRootView", "mServedView", "mNextServedView" };
+        for (String leakView : leakViews) {
+            try {
+                Field leakViewField = InputMethodManager.class.getDeclaredField(leakView);
+                if (!leakViewField.isAccessible()) {
+                    leakViewField.setAccessible(true);
+                }
+                Object obj = leakViewField.get(imm);
+                if (!(obj instanceof View)) {
+                    continue;
+                }
+                View view = (View) obj;
+                if (view.getRootView() == window.getDecorView().getRootView()) {
+                    leakViewField.set(imm, null);
+                }
+            } catch (Throwable ignore) {/**/}
+        }
+    }
+
+    /**
+     * Click blank area to hide soft input.
+     * <p>Copy the following code in ur activity.</p>
+     */
+    public static void clickBlankArea2HideSoftInput() {
+        Log.i("KeyboardUtils", "Please refer to the following code.");
+        /*
+        @Override
+        public boolean dispatchTouchEvent(MotionEvent ev) {
+            if (ev.getAction() == MotionEvent.ACTION_DOWN) {
+                View v = getCurrentFocus();
+                if (isShouldHideKeyboard(v, ev)) {
+                    KeyboardUtils.hideSoftInput(this);
+                }
+            }
+            return super.dispatchTouchEvent(ev);
+        }
+        // Return whether touch the view.
+        private boolean isShouldHideKeyboard(View v, MotionEvent event) {
+            if ((v instanceof EditText)) {
+                int[] l = {0, 0};
+                v.getLocationOnScreen(l);
+                int left = l[0],
+                        top = l[1],
+                        bottom = top + v.getHeight(),
+                        right = left + v.getWidth();
+                return !(event.getRawX() > left && event.getRawX() < right
+                        && event.getRawY() > top && event.getRawY() < bottom);
+            }
+            return false;
+        }
+        */
+    }
+
+    ///////////////////////////////////////////////////////////////////////////
+    // interface
+    ///////////////////////////////////////////////////////////////////////////
+    public interface OnSoftInputChangedListener {
+        void onSoftInputChanged(int height);
+    }
+
+
+    public static int getNavBarHeight() {
+        Resources res = AppContext.getContext().getResources();
+        int resourceId = res.getIdentifier("navigation_bar_height", "dimen", "android");
+        if (resourceId != 0) {
+            return res.getDimensionPixelSize(resourceId);
+        } else {
+            return 0;
+        }
+    }
+
+    public static int getStatusBarHeight() {
+        Resources resources = AppContext.getContext().getResources();
+        int resourceId = resources.getIdentifier("status_bar_height", "dimen", "android");
+        return resources.getDimensionPixelSize(resourceId);
+    }
+
+}

+ 29 - 0
baseswago/src/main/java/com/swago/baseswago/util/SwagoInfo.kt

@@ -0,0 +1,29 @@
+package com.swago.baseswago.util
+
+import java.util.*
+
+/**
+ *@date 2021/12/18 16:16
+ *description:
+ */
+object SwagoInfo {
+
+    private var languageCode = "en"
+
+    fun getLanguageCode(): String {
+        val language = Locale.getDefault().language
+        languageCode = when (language) {
+            "en" -> {
+                "en"
+            }
+            "in" -> {
+                "id"
+            }
+            else -> {
+                "en"
+            }
+        }
+        return languageCode
+    }
+
+}

+ 0 - 0
user/src/main/res/drawable/shape_f7f8fa_5.xml → baseswago/src/main/res/drawable/shape_f7f8fa_5.xml


+ 0 - 0
user/src/main/res/drawable/shape_ff9300_5.xml → baseswago/src/main/res/drawable/shape_ff9300_5.xml


+ 51 - 0
baseswago/src/main/res/layout/dialog_off_line.xml

@@ -0,0 +1,51 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto">
+
+    <LinearLayout
+        android:orientation="vertical"
+        app:layout_constraintTop_toTopOf="parent"
+        app:layout_constraintBottom_toBottomOf="parent"
+        android:layout_marginStart="60dp"
+        android:layout_marginEnd="60dp"
+        android:background="@drawable/shape_white_20"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <TextView
+            android:id="@+id/tvTitle"
+            android:text="@string/tips"
+            android:textSize="18dp"
+            android:textColor="#000"
+            android:gravity="center"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="50dp"/>
+
+        <TextView
+            android:id="@+id/tvContent"
+            android:text="@string/login_anthor_device"
+            android:textSize="16dp"
+            android:textColor="#000"
+            android:gravity="center"
+            android:layout_gravity="center"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+
+        <TextView
+            android:id="@+id/tvOk"
+            android:gravity="center"
+            android:textSize="16dp"
+            android:textColor="#000"
+            android:layout_marginTop="10dp"
+            android:text="@string/sure_close"
+            android:layout_width="match_parent"
+            android:layout_height="40dp"/>
+
+    </LinearLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 78 - 0
baseswago/src/main/res/layout/dialog_pay.xml

@@ -0,0 +1,78 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools">
+
+
+    <androidx.constraintlayout.widget.ConstraintLayout
+        app:layout_constraintTop_toTopOf="parent"
+        android:background="@drawable/shape_white_top_20"
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content">
+
+        <TextView
+            android:id="@+id/tv"
+            android:text="@string/recharge"
+            android:textColor="#000"
+            android:textSize="18dp"
+            android:gravity="center"
+            app:layout_constraintTop_toTopOf="parent"
+            android:layout_marginTop="10dp"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"/>
+
+        <TextView
+            android:id="@+id/tvBalance"
+            app:layout_constraintStart_toStartOf="parent"
+            app:layout_constraintTop_toBottomOf="@+id/tv"
+            android:layout_marginTop="15dp"
+            android:textSize="14dp"
+            android:textColor="#000"
+            android:layout_marginStart="20dp"
+            android:text="@string/balance"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+        <TextView
+            android:id="@+id/tvBalanceValue"
+            app:layout_constraintStart_toEndOf="@+id/tvBalance"
+            app:layout_constraintTop_toBottomOf="@+id/tv"
+            android:drawableStart="@mipmap/item_coin"
+            android:layout_marginTop="15dp"
+            android:textSize="14dp"
+            android:textColor="#000"
+            tools:text="3000"
+            android:drawablePadding="2dp"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"/>
+
+        <androidx.recyclerview.widget.RecyclerView
+            android:id="@+id/recyclerView"
+            android:layout_marginTop="45dp"
+            app:layout_constraintTop_toBottomOf="@+id/tv"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"/>
+
+
+        <TextView
+            android:id="@+id/tvRecharge"
+            android:textSize="16dp"
+            android:textColor="#fff"
+            android:text="@string/recharge"
+            android:gravity="center"
+            android:background="@drawable/shape_black_5"
+            android:layout_marginStart="20dp"
+            android:layout_marginEnd="20dp"
+            android:layout_marginTop="10dp"
+            app:layout_constraintTop_toBottomOf="@+id/recyclerView"
+            app:layout_constraintBottom_toBottomOf="parent"
+            android:layout_marginBottom="20dp"
+            android:layout_width="match_parent"
+            android:layout_height="44dp"/>
+
+    </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 0 - 0
user/src/main/res/layout/item_recharge.xml → baseswago/src/main/res/layout/item_recharge.xml


+ 0 - 0
user/src/main/res/mipmap-xxhdpi/item_coin.png → baseswago/src/main/res/mipmap-xxhdpi/item_coin.png


+ 97 - 0
baseswago/src/main/res/values-in/strings.xml

@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <string name="user_agreement">Perjanjian Pengguna</string>
+    <string name="privacy_policy">Kebijakan Privasi</string>
+    <string name="and">dan</string>
+    <string name="explain">Dengan masuk, kamu menyetujui Perjanjian pengguna dan Kebijakan Privasi</string>
+    <string name="follow">Ikut</string>
+    <string name="fans">Pengikut</string>
+    <string name="following">Mengikuti</string>
+    <string name="followers">Pengikut</string>
+    <string name="current_version">Versi</string>
+    <string name="logout">Log out</string>
+    <string name="blacklist">Daftar Blokir</string>
+    <string name="setting">Atur</string>
+    <string name="edit_profile">Edit Profil</string>
+    <string name="male">Pria</string>
+    <string name="female">Wanita</string>
+    <string name="save">Simpan</string>
+    <string name="start_live">Go Live</string>
+    <string name="room_has_been_closed">Live ini telah terakhir</string>
+    <string name="leave">Keluarkan</string>
+    <string name="join_room">bergabung di live room</string>
+    <string name="id_x">ID:%s</string>
+    <string name="swago_offical_msg">Informasi resmi Swago</string>
+    <string name="message">Pesan</string>
+    <string name="coin">Koin</string>
+    <string name="diamond">Diamond</string>
+    <string name="my_level">Level saya</string>
+    <string name="top_up_center">Pusat Top up</string>
+    <string name="task_center">Pusat Tugas</string>
+    <string name="contact_service">Layanan Pelanggan</string>
+    <string name="sex">Jenis kelamin</string>
+    <string name="age">Umur</string>
+    <string name="constellation">Konstelasi</string>
+    <string name="country">Negara</string>
+    <string name="sign">Tanda tangan</string>
+    <string name="selecte_country">Pilih negaramu</string>
+    <string name="rich_level">Level kekayaan</string>
+    <string name="anchor_level">Level Host</string>
+    <string name="get_exp">Dapatkan poin pengalaman</string>
+    <string name="level_up_exp">Pengalaman yang dibutuhkan untuk meningkatkan:%s</string>
+    <string name="know_detail">Belajar lebih banyak</string>
+    <string name="level_medal">Lencana</string>
+    <string name="show_first">Tampilan prioritas</string>
+    <string name="vip_server">Layanan Pelanggan Khusus</string>
+    <string name="level_privilege">hak istimewa Level</string>
+    <string name="levek_compare_table">Tabel perbandingan level </string>
+    <string name="home_hot">Host</string>
+    <string name="home_new">New Star</string>
+    <string name="home_follow">Mengikuti</string>
+    <string name="mine_balance">Saldo saya</string>
+    <string name="recharge_gear">List isi ulang</string>
+    <string name="recharge">Isi ulang</string>
+    <string name="daily_task">Tugas Harian</string>
+    <string name="newer_task">Tugas pengguna baru</string>
+    <string name="reward">Bonus:</string>
+    <string name="exp">Pengalaman</string>
+    <string name="receive">Terima</string>
+    <string name="uncomplete">Belum selesar</string>
+    <string name="complete">Selesai</string>
+    <string name="live_end">Live ini telah terakhir</string>
+    <string name="sure_close">Mengonfirmasi</string>
+    <string name="search_name_or_id">Mencari nickname/ID</string>
+    <string name="fans_list">Peringkat Fans</string>
+    <string name="daily">Harian</string>
+    <string name="weekly">Mingguan</string>
+    <string name="monthly">Bulanan</string>
+    <string name="need_exp">Poin pengalaman yang diperlukan</string>
+    <string name="exp_explain">Untuk setiap hadiah 10 koin yg dikasih, poin pengalaman +1</string>
+    <string name="exp_explain2">ntuk setiap hadiah 10 koin yang diterima, poin pengalaman +1</string>
+    <string name="level">Lv.%s</string>
+    <string name="report">Laporan</string>
+    <string name="report_success">Melaporkan sukses</string>
+    <string name="report_one">Kontennya tidak nyaman atau menyinggung</string>
+    <string name="report_two">Pidato politik yang dicurigai</string>
+    <string name="report_three">Nickname nya ilegal</string>
+    <string name="report_four">Diduga menghina pengguna dan ucapan kekerasan</string>
+    <string name="tips">mengingatkan</string>
+    <string name="consume_order">Pesanan\n%s\n tidak berhasil, silakan tagih balik sekarang!</string>
+    <string name="sure_consume">立即补单</string>
+    <string name="send">Memberikan</string>
+    <string name="hot">Hot</string>
+    <string name="luxury">Premium Hadiah</string>
+    <string name="pay_cancel">Pembatalan pembayaran</string>
+    <string name="pay_fail">Eror pembayaran Google</string>
+    <string name="send_to">Hadiah untuk %s</string>
+    <string name="install_facebook">Silakan instal Facebook dulu</string>
+    <string name="acccount_login">Account login</string>
+    <string name="input_account">Silahkan masuk ID akun</string>
+    <string name="input_secret">Silakan masuk password</string>
+    <string name="login">Login</string>
+    <string name="facebook_google_login">Metode masuk lainnya</string>
+    <string name="google_service_error">Ada masalah dengan layanan Google Anda</string>
+    <string name="big_gift_msg">%s memberikan %s kepada %s, yang sangat membanggakan!</string>
+    <string name="balance">Saldo: </string>
+    <string name="login_anthor_device">Akun Anda sudah masuk di perangkat lain</string>
+</resources>

+ 3 - 1
baseswago/src/main/res/values-zh/strings.xml

@@ -85,11 +85,13 @@
     <string name="pay_fail">谷歌支付异常</string>
     <string name="send_to">赠送给%s</string>
     <string name="install_facebook">请您先安装Facebook</string>
-    <string name="acccount_login">账号登</string>
+    <string name="acccount_login">账号登</string>
     <string name="input_account">请输入账号</string>
     <string name="input_secret">请输入密码</string>
     <string name="login">登录</string>
     <string name="facebook_google_login">其他登录方式</string>
     <string name="google_service_error">您的谷歌服务存在问题</string>
     <string name="big_gift_msg">%s赠送了一个%s给%s,真是豪气冲天!</string>
+    <string name="balance">余额:</string>
+    <string name="login_anthor_device">您的账号已在另一台设备上登录</string>
 </resources>

+ 7 - 5
baseswago/src/main/res/values/strings.xml

@@ -88,13 +88,15 @@
     <string name="luxury">Luxury</string>
     <string name="pay_cancel">Pay Cancel</string>
     <string name="pay_fail">GooglePay is error</string>
-    <string name="send_to">Send to %s</string>
-    <string name="install_facebook">Please install Facebook Application</string>
+    <string name="send_to">Gift to %s</string>
+    <string name="install_facebook">Please install Facebook first</string>
     <string name="acccount_login">Account Login</string>
     <string name="input_account">Please input your account</string>
     <string name="input_secret">Please input your secret</string>
     <string name="login">Login</string>
-    <string name="facebook_google_login">Other login ways</string>
-    <string name="google_service_error">Your google service is abnormal</string>
-    <string name="big_gift_msg">%s赠送了一个%s给%s,真是豪气冲天!</string>
+    <string name="facebook_google_login">Other login methods</string>
+    <string name="google_service_error">There is a problem with your Google service</string>
+    <string name="big_gift_msg">%s gave a %s to %s, which is so proud!</string>
+    <string name="balance">Balance: </string>
+    <string name="login_anthor_device">Your account is already logged in on another device</string>
 </resources>

+ 6 - 2
home/src/main/java/com/swago/home/HomeActivity.kt

@@ -49,10 +49,10 @@ class HomeActivity : BaseXActivity<ActivityHomeBinding>(), IPayCallback {
         binding.rg.setOnCheckedChangeListener { _, checkedId ->
             when (checkedId) {
                 R.id.rbCircle -> {
-                    binding.viewPager.currentItem = 1
+                    binding.viewPager.currentItem = 0
                 }
                 R.id.rbHome -> {
-                    binding.viewPager.currentItem = 0
+                    binding.viewPager.currentItem = 1
                 }
                 R.id.rbMessage -> {
                     binding.viewPager.currentItem = 2
@@ -176,4 +176,8 @@ class HomeActivity : BaseXActivity<ActivityHomeBinding>(), IPayCallback {
 
     override fun consumeOrderFail(code: Int) {
     }
+
+    override fun onBackPressed() {
+        moveTaskToBack(true)
+    }
 }

+ 25 - 10
home/src/main/java/com/swago/home/MessageFragment.kt

@@ -1,13 +1,16 @@
 package com.swago.home
 
+import android.Manifest
 import android.content.Intent
 import android.util.Log
 import android.view.View
+import android.widget.Toast
 import androidx.activity.viewModels
 import androidx.fragment.app.activityViewModels
 import androidx.fragment.app.viewModels
 import com.alibaba.android.arouter.launcher.ARouter
 import com.bumptech.glide.Glide
+import com.permissionx.guolindev.PermissionX
 import com.swago.baseswago.UserVm
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.fragment.BaseXFragment
@@ -35,10 +38,22 @@ class MessageFragment : BaseXFragment<FragmentMessageBinding>() {
     override fun initOther() {
         binding.conversation.initDefault()
         binding.conversation.conversationList.setOnItemClickListener { view, position, messageInfo ->
-            ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
-                .withInt("type",V2TIMConversation.V2TIM_C2C)
-                .withString("id",messageInfo.id)
-                .withString("chatName",messageInfo.title).navigation()
+            PermissionX.init(this)
+                .permissions(Manifest.permission.RECORD_AUDIO,Manifest.permission.CAMERA,Manifest.permission.READ_EXTERNAL_STORAGE)
+                .request { allGranted, grantedList, deniedList ->
+                    if (allGranted) {
+                        ARouter.getInstance().build(ARouteConstant.Home.chatDetail)
+                            .withInt("type", V2TIMConversation.V2TIM_C2C)
+                            .withString("id", messageInfo.id)
+                            .withString("chatName", messageInfo.title).navigation()
+                    } else {
+                        Toast.makeText(
+                            AppContext.getContext(),
+                            "These permissions are denied: $deniedList",
+                            Toast.LENGTH_LONG
+                        ).show()
+                    }
+                }
         }
 
         binding.conversation.conversationList.setOnItemLongClickListener { view, position, messageInfo ->
@@ -46,28 +61,28 @@ class MessageFragment : BaseXFragment<FragmentMessageBinding>() {
         }
 
 
-        binding.ivSetRead.setOnClickListener(object:NoDoubleClickListener(){
+        binding.ivSetRead.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
 
             }
         })
 
-        binding.clOfficialMsg.setOnClickListener(object:NoDoubleClickListener(){
+        binding.clOfficialMsg.setOnClickListener(object : NoDoubleClickListener() {
             override fun onClick() {
                 binding.tvCount.visibility = View.GONE
-                startActivity(Intent(activity,OfficialMessageActivity::class.java))
+                startActivity(Intent(activity, OfficialMessageActivity::class.java))
             }
         })
 
     }
 
     override fun initLiveData() {
-        officialVm.officialSumLiveData.observe(this){
+        officialVm.officialSumLiveData.observe(this) {
             binding.tvContent.text = it.message_content
             binding.tvTime.text = it.message_time
-            if (it.unread_total.toInt() == 0){
+            if (it.unread_total.toInt() == 0) {
                 binding.tvCount.visibility = View.GONE
-            }else{
+            } else {
                 binding.tvCount.text = it.unread_total
                 binding.tvCount.visibility = View.VISIBLE
             }

+ 1 - 1
home/src/main/java/com/swago/home/innerhome/HomeAdapter.kt

@@ -25,7 +25,7 @@ class HomeAdapter  : BaseQuickAdapter<MomentModel, BaseViewHolder>(R.layout.item
             val imageView = itemView.findViewById<ShapeableImageView>(R.id.ivAvatar)
             Glide.with(itemView.context).load(item.user_head_img_url).centerCrop().into(imageView)
             setText(R.id.tvHot,item.broadcast_hot)
-            setImageResource(R.id.ivCountry,R.drawable.flag_ac)
+//            setImageResource(R.id.ivCountry,R.drawable.flag_ac)
         }
     }
 }

+ 1 - 0
home/src/main/res/layout/fragment_message.xml

@@ -29,6 +29,7 @@
         android:id="@+id/ivSetRead"
         android:src="@mipmap/icon_set_read"
         android:layout_marginEnd="10dp"
+        android:visibility="gone"
         app:layout_constraintEnd_toEndOf="parent"
         app:layout_constraintTop_toTopOf="@+id/title"
         app:layout_constraintBottom_toBottomOf="@+id/title"

+ 1 - 1
home/src/main/res/values/styles.xml

@@ -2,6 +2,6 @@
 <resources>
     <style name="fourCornerImageStyle">
         <item name="cornerFamily">rounded</item>
-        <item name="cornerSize">4dp</item>
+        <item name="cornerSize">10dp</item>
     </style>
 </resources>

+ 2 - 1
login/src/main/AndroidManifest.xml

@@ -3,6 +3,7 @@
     package="com.swago.login">
     <application>
         <activity android:name=".LoginActivity"
-            android:screenOrientation="portrait"/>
+            android:screenOrientation="portrait"
+            android:launchMode="singleTask"/>
     </application>
 </manifest>

+ 0 - 8
login/src/main/java/com/swago/login/LoginActivity.kt

@@ -45,7 +45,6 @@ class LoginActivity : BaseXActivity<ActivityLoginBinding>() {
         GoogleLogin.init(this)
         FBLogin.init(object : IFacebook {
             override fun getToken(token: String) {
-                SwagoLoading.showLoadingDialog(this@LoginActivity)
                 loginVm.login("facebook", token)
             }
         })
@@ -56,8 +55,6 @@ class LoginActivity : BaseXActivity<ActivityLoginBinding>() {
                 if (isInstall(this@LoginActivity,FACEBOOK)){
                     PermissionX.init(this@LoginActivity)
                         .permissions(
-                            Manifest.permission.CAMERA,
-                            Manifest.permission.RECORD_AUDIO,
                             Manifest.permission.READ_EXTERNAL_STORAGE
                         )
                         .request { allGranted, grantedList, deniedList ->
@@ -82,8 +79,6 @@ class LoginActivity : BaseXActivity<ActivityLoginBinding>() {
                 if (isInstall(this@LoginActivity,GOOGLE)) {
                     PermissionX.init(this@LoginActivity)
                         .permissions(
-                            Manifest.permission.CAMERA,
-                            Manifest.permission.RECORD_AUDIO,
                             Manifest.permission.READ_EXTERNAL_STORAGE
                         )
                         .request { allGranted, grantedList, deniedList ->
@@ -153,8 +148,6 @@ class LoginActivity : BaseXActivity<ActivityLoginBinding>() {
             override fun onClick() {
                 PermissionX.init(this@LoginActivity)
                     .permissions(
-                        Manifest.permission.CAMERA,
-                        Manifest.permission.RECORD_AUDIO,
                         Manifest.permission.READ_EXTERNAL_STORAGE
                     )
                     .request { allGranted, grantedList, deniedList ->
@@ -187,7 +180,6 @@ class LoginActivity : BaseXActivity<ActivityLoginBinding>() {
                     val result = task.getResult(ApiException::class.java)
                     result?.let {
                         it.idToken?.apply {
-                            SwagoLoading.showLoadingDialog(this@LoginActivity)
                             loginVm.login("google", this)
                         }
                     }

+ 4 - 4
login/src/main/java/com/swago/login/LoginVm.kt

@@ -8,6 +8,7 @@ import androidx.lifecycle.MutableLiveData
 import com.alibaba.android.arouter.launcher.ARouter
 import com.google.gson.Gson
 import com.swago.baseswago.constant.ARouteConstant
+import com.swago.baseswago.http.SwagoException
 import com.swago.baseswago.inter.ApiManager
 import com.swago.baseswago.util.*
 import com.tencent.imsdk.v2.V2TIMCallback
@@ -25,7 +26,6 @@ class LoginVm(application: Application) : BaseViewModel(application) {
             requestData {
                 val data = ApiManager.loginApi.login(source,token)
                 SpUtil.putString("login_info", Gson().toJson(data))
-                SwagoLoading.cancelLoadingDialog()
                 TUIKit.login(data.user_account,data.user_sig,object:
                     IUIKitCallBack {
                     override fun onSuccess(data: Any?) {
@@ -42,7 +42,6 @@ class LoginVm(application: Application) : BaseViewModel(application) {
             }
 
             requestError {
-                SwagoLoading.cancelLoadingDialog()
             }
         }
     }
@@ -86,8 +85,9 @@ class LoginVm(application: Application) : BaseViewModel(application) {
             }
 
             requestError {
-                Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT).show()
-                SwagoLoading.cancelLoadingDialog()
+                if (it is SwagoException){
+                    SwagoLoading.cancelLoadingDialog()
+                }
             }
         }
     }

+ 0 - 1
pay/.gitignore

@@ -1 +0,0 @@
-/build

+ 0 - 56
pay/build.gradle

@@ -1,56 +0,0 @@
-plugins {
-    id 'com.android.library'
-    id 'kotlin-android'
-    id 'kotlin-kapt'
-}
-
-android {
-    compileSdkVersion 30
-
-    defaultConfig {
-        minSdkVersion 21
-        targetSdkVersion 30
-        versionCode 1
-        versionName "1.0"
-
-        testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
-        consumerProguardFiles "consumer-rules.pro"
-
-        kapt {
-            arguments {
-                arg("AROUTER_MODULE_NAME", project.getName())
-            }
-        }
-    }
-
-    buildTypes {
-        release {
-            minifyEnabled false
-            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
-        }
-    }
-    compileOptions {
-        sourceCompatibility JavaVersion.VERSION_1_8
-        targetCompatibility JavaVersion.VERSION_1_8
-    }
-    kotlinOptions {
-        jvmTarget = '1.8'
-    }
-
-    buildFeatures{
-        viewBinding = true
-    }
-}
-
-dependencies {
-
-    implementation 'androidx.core:core-ktx:1.3.2'
-    implementation 'androidx.appcompat:appcompat:1.2.0'
-    implementation 'com.google.android.material:material:1.3.0'
-    testImplementation 'junit:junit:4.+'
-    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
-    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
-    kapt "com.alibaba:arouter-compiler:1.2.2"
-    implementation project(path: ':baseswago')
-
-}

+ 0 - 0
pay/consumer-rules.pro


+ 0 - 21
pay/proguard-rules.pro

@@ -1,21 +0,0 @@
-# Add project specific ProGuard rules here.
-# You can control the set of applied configuration files using the
-# proguardFiles setting in build.gradle.
-#
-# For more details, see
-#   http://developer.android.com/guide/developing/tools/proguard.html
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-#   public *;
-#}
-
-# Uncomment this to preserve the line number information for
-# debugging stack traces.
-#-keepattributes SourceFile,LineNumberTable
-
-# If you keep the line number information, uncomment this to
-# hide the original source file name.
-#-renamesourcefileattribute SourceFile

+ 0 - 24
pay/src/androidTest/java/com/swago/pay/ExampleInstrumentedTest.kt

@@ -1,24 +0,0 @@
-package com.swago.pay
-
-import androidx.test.platform.app.InstrumentationRegistry
-import androidx.test.ext.junit.runners.AndroidJUnit4
-
-import org.junit.Test
-import org.junit.runner.RunWith
-
-import org.junit.Assert.*
-
-/**
- * Instrumented test, which will execute on an Android device.
- *
- * See [testing documentation](http://d.android.com/tools/testing).
- */
-@RunWith(AndroidJUnit4::class)
-class ExampleInstrumentedTest {
-    @Test
-    fun useAppContext() {
-        // Context of the app under test.
-        val appContext = InstrumentationRegistry.getInstrumentation().targetContext
-        assertEquals("com.swago.pay.test", appContext.packageName)
-    }
-}

+ 0 - 5
pay/src/main/AndroidManifest.xml

@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    package="com.swago.pay">
-
-</manifest>

+ 0 - 8
pay/src/main/java/com/swago/pay/Te.java

@@ -1,8 +0,0 @@
-package com.swago.pay;
-
-/**
- * @date 2021/11/8 20:03
- * description:
- */
-class Te {
-}

+ 0 - 17
pay/src/test/java/com/swago/pay/ExampleUnitTest.kt

@@ -1,17 +0,0 @@
-package com.swago.pay
-
-import org.junit.Test
-
-import org.junit.Assert.*
-
-/**
- * Example local unit test, which will execute on the development machine (host).
- *
- * See [testing documentation](http://d.android.com/tools/testing).
- */
-class ExampleUnitTest {
-    @Test
-    fun addition_isCorrect() {
-        assertEquals(4, 2 + 2)
-    }
-}

+ 6 - 7
room/src/main/java/com/swago/room/anchor/AnchorRoomActivity.kt

@@ -1,10 +1,12 @@
 package com.swago.room.anchor
 
 import android.content.Intent
+import android.os.Bundle
 import android.view.View
 import android.view.WindowManager
 import androidx.activity.viewModels
 import com.alibaba.android.arouter.facade.annotation.Route
+import com.gyf.immersionbar.ImmersionBar
 import com.swago.baseswago.SwagoAdapter
 import com.swago.baseswago.agora.AgoraManager
 import com.swago.baseswago.baseroom.IRoomInfo
@@ -37,19 +39,17 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding,IRoomInfo
     private val roomVm by viewModels<RoomVm>()
     private val msgVm by viewModels<MsgVm>()
 
-    private var imAllListener = object: IMEventListener(){}
-
     private var agoraService : Intent? = null
 
     private val fragments = arrayListOf(NoContentFragment(),AnchorRoomFragment())
 
     private val adapter = SwagoAdapter(fragments,supportFragmentManager)
 
-    override fun loadData() {
-    }
+    override fun loadData() {}
+
+    private var anchorRoomFragment:AnchorRoomFragment? = null
 
     override fun initLiveData() {
-        TUIKitImpl.addIMEventListener(imAllListener)
         roomVm.init()
         msgVm.init()
         window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
@@ -58,7 +58,7 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding,IRoomInfo
         AgoraManager.setVideoConfiguration()
         AgoraManager.setClientRole(RoleType.anchor)
         AgoraManager.setupLocalVideo(this,binding.flLocal)
-
+        anchorRoomFragment = fragments[1] as AnchorRoomFragment
         binding.viewPager.adapter = adapter
 
         binding.clPrepare.setOnTouchListener { v, event ->
@@ -152,7 +152,6 @@ class AnchorRoomActivity : AbsAnchorActivity<ActivityAnchorRoomBinding,IRoomInfo
     }
 
     override fun onDestroy() {
-        TUIKitImpl.removeIMEventListener(imAllListener)
         agoraService?.let { stopService(it) }
         super.onDestroy()
     }

+ 15 - 1
room/src/main/java/com/swago/room/anchor/AnchorRoomFragment.kt

@@ -1,6 +1,11 @@
 package com.swago.room.anchor
 
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
 import androidx.fragment.app.activityViewModels
+import com.gyf.immersionbar.ImmersionBar
 import com.swago.baseswago.PersonDataDFragment
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.room.base.BaseComFragment
@@ -21,7 +26,6 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
         super.initOther()
     }
 
-
     override fun initLiveData() {
         super.initLiveData()
         roomVm.roomUserDataLiveData.observe(this){
@@ -41,8 +45,18 @@ class AnchorRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
         headerView.showUserInfo = {
             PersonDataDFragment.newInstance(it).show(childFragmentManager,"PersonDataDFragment")
         }
+
+        msgVm.inComeChange = {
+            headerView.updateIncome(it)
+        }
+
+        msgVm.updateHotValue = {
+            headerView.updateHotValue(it)
+        }
     }
 
+
+
     override fun changeRoom(iRoomInfo: IRoomInfo) {
     }
 

+ 55 - 1
room/src/main/java/com/swago/room/base/BaseComFragment.kt

@@ -1,7 +1,9 @@
 package com.swago.room.base
 
 import android.graphics.Rect
+import android.util.Log
 import android.view.View
+import android.view.ViewGroup
 import androidx.constraintlayout.widget.ConstraintLayout
 import androidx.fragment.app.activityViewModels
 import androidx.recyclerview.widget.LinearLayoutManager
@@ -13,7 +15,9 @@ import com.swago.baseswago.fragment.BaseXFragment
 import com.swago.baseswago.im.IRoomChat
 import com.swago.baseswago.model.live.gift.IMGiftModel
 import com.swago.baseswago.util.DpPxUtil
+import com.swago.baseswago.util.KeyboardUtils
 import com.swago.baseswago.util.NoDoubleClickListener
+import com.swago.room.R
 import com.swago.room.adapter.RoomChatAdapter
 import com.swago.room.databinding.FragmentBaseComBinding
 import com.swago.room.dialog.MessageListDialog
@@ -69,13 +73,27 @@ abstract class BaseComFragment<T:FragmentBaseComBinding> : BaseXFragment<T>(),IR
         waftManager.waftViewList.add(binding.waftView)
         waftManager.waftViewList.add(binding.waftView2)
 
-        binding.rv.layoutManager = LinearLayoutManager(context)
+        val layoutManager = LinearLayoutManager(context)
+        layoutManager.stackFromEnd = true
+        binding.rv.layoutManager = layoutManager
         binding.rv.addItemDecoration(RoomChatItemDecoration())
         binding.rv.adapter = chatAdapter
         chatAdapter.setNewData(dataChatList)
         context?.let {
             svgPlayerManager.init(it,binding.xSvgaPlayer)
         }
+
+        activity?.let {
+            KeyboardUtils.registerSoftInputChangedListener(it.window,listener)
+        }
+    }
+
+    var listener = KeyboardUtils.OnSoftInputChangedListener {
+        if (it==0){
+            setChatRvPop(false,it)
+        }else{
+            setChatRvPop(true,it)
+        }
     }
 
     private fun setHeaderViewPosition() {
@@ -108,8 +126,44 @@ abstract class BaseComFragment<T:FragmentBaseComBinding> : BaseXFragment<T>(),IR
         }
     }
 
+
+    private var keyboardUpRvLayoutParams:ViewGroup.LayoutParams? = null
+    private var keyboardCloseRvLayoutParams:ViewGroup.LayoutParams? = null
+    private fun setChatRvPop(isPopUp:Boolean,height:Int){
+        if (isPopUp){
+            if (keyboardUpRvLayoutParams == null){
+                keyboardUpRvLayoutParams = ConstraintLayout.LayoutParams(0,DpPxUtil.dip2px(170f)).apply {
+                    bottomToBottom = R.id.cl
+                    startToStart = R.id.cl
+                    endToEnd = R.id.cl
+                    marginStart = DpPxUtil.dip2px(10f)
+                    marginEnd = DpPxUtil.dip2px(10f)
+                    bottomMargin = height + DpPxUtil.dip2px(55f)
+                }
+            }
+            binding.rv.layoutParams = keyboardUpRvLayoutParams
+        }else{
+            if (keyboardCloseRvLayoutParams == null){
+                keyboardCloseRvLayoutParams = ConstraintLayout.LayoutParams(0,DpPxUtil.dip2px(170f)).apply {
+                    bottomToBottom = R.id.cl
+                    startToStart = R.id.cl
+                    endToEnd = R.id.cl
+                    marginStart = DpPxUtil.dip2px(10f)
+                    marginEnd = DpPxUtil.dip2px(10f)
+                    bottomMargin = DpPxUtil.dip2px(70f)
+                }
+            }
+            binding.rv.layoutParams = keyboardCloseRvLayoutParams
+        }
+
+    }
+
+
     override fun onDestroyView() {
         super.onDestroyView()
+        activity?.let {
+            KeyboardUtils.unregisterSoftInputChangedListener(it.window)
+        }
         SwagoRoomManager.removeListener(this)
     }
 

+ 1 - 1
room/src/main/java/com/swago/room/dialog/UserForAnchorCloseDialog.kt

@@ -32,7 +32,7 @@ class UserForAnchorCloseDialog : BaseXDFragment<DialogUserForAnchorCloseBinding>
                 .apply(RequestOptions.bitmapTransform(BlurTransformation(5,100)))
                 .into(binding.ivCloseBg)
             binding.tvName.text = it.getAnchorName()
-            binding.tvID.text = AppContext.getContext().resources.getString(R.string.id_x).format(it.getAnchorId())
+            binding.tvID.text = AppContext.getContext().resources.getString(R.string.id_x).format(it.getAnchorCode())
         }
     }
 

+ 20 - 7
room/src/main/java/com/swago/room/gift/GiftDialog.kt

@@ -12,11 +12,9 @@ import com.swago.baseswago.GradientIndicator
 import com.swago.baseswago.SwagoAdapter
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.dialog.BaseXDFragment
+import com.swago.baseswago.dialog.PayDialog
 import com.swago.baseswago.model.live.gift.GiftModel
-import com.swago.baseswago.util.AppContext
-import com.swago.baseswago.util.DpPxUtil
-import com.swago.baseswago.util.LogUtil
-import com.swago.baseswago.util.UserInfo
+import com.swago.baseswago.util.*
 import com.swago.room.R
 import com.swago.room.databinding.DialogGiftBinding
 import com.swago.room.gift.GiftConfig.giftSelectedWhichType
@@ -164,6 +162,14 @@ class GiftDialog : BaseXDFragment<DialogGiftBinding>() {
                 }
             })
 
+            binding.tvCoins.setOnClickListener(object:NoDoubleClickListener(){
+                override fun onClick() {
+                    val dialog = PayDialog.newInstance()
+                    dialog.show(parentFragmentManager,"PayDialog")
+                    dismissAllowingStateLoss()
+                }
+            })
+
             when(GiftConfig.giftSelectedWhichType){
                 1 -> {
                     binding.viewPager.currentItem = 0
@@ -221,10 +227,17 @@ class GiftDialog : BaseXDFragment<DialogGiftBinding>() {
 
     override fun initLiveData() {
         giftVm.sendResultLiveData.observe(this){
-            if (returnGiftBatch<it.gift_batch){
-                binding.tvCoins.text = it.user_coins?:"0"
-                returnGiftBatch = it.gift_batch
+            if (it != null){
+                if (returnGiftBatch<it.gift_batch){
+                    binding.tvCoins.text = it.user_coins?:"0"
+                    returnGiftBatch = it.gift_batch
+                }
+            }else{
+                val payDialog = PayDialog.newInstance()
+                payDialog.show(parentFragmentManager,"PayDialog")
+                dismissAllowingStateLoss()
             }
+
         }
     }
 }

+ 4 - 1
room/src/main/java/com/swago/room/gift/GiftVm.kt

@@ -35,7 +35,7 @@ class GiftVm(application: Application) : BaseViewModel(application) {
      * 送礼
      */
     val sendResultLiveData by lazy {
-        MutableLiveData<GiftSendModel>()
+        MutableLiveData<GiftSendModel?>()
     }
 
     fun sendGift(
@@ -55,6 +55,9 @@ class GiftVm(application: Application) : BaseViewModel(application) {
             requestError {
                 if (it is SwagoException){
                     Toast.makeText(AppContext.getContext(), it.message, Toast.LENGTH_SHORT).show()
+                    if (it.code == 517){
+                        sendResultLiveData.value = null
+                    }
                 }
             }
         }

+ 15 - 3
room/src/main/java/com/swago/room/gift/control/SvgPlayerManager.kt

@@ -6,6 +6,7 @@ import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.model.live.gift.IMGiftModel
+import com.swago.baseswago.util.LogUtil
 import java.util.*
 
 /**
@@ -25,8 +26,18 @@ class SvgPlayerManager : IRoomActiveListener {
         this.xSvgPlayer?.nextSvgPlay = {
             svgListQueue.poll()
             val imGiftModel = svgListQueue.peek()
-            imGiftModel?.let {
-                this.xSvgPlayer?.playSvga(imGiftModel)
+            LogUtil.d("SvgPlayerManager","${svgListQueue.size}")
+            if (imGiftModel==null){
+                LogUtil.d("SvgPlayerManager","clear svgListQueue")
+                svgListQueue.clear()
+            }else{
+                if (this.xSvgPlayer==null){
+                    svgListQueue.clear()
+                    LogUtil.d("SvgPlayerManager","xSvgPlayer 为空")
+                }else{
+                    this.xSvgPlayer!!.playSvga(imGiftModel)
+                }
+
             }
         }
     }
@@ -51,11 +62,12 @@ class SvgPlayerManager : IRoomActiveListener {
     override fun closeRoomed() {
         svgListQueue.clear()
         xSvgPlayer?.clear()
-        SwagoRoomManager.addListener(this)
+        SwagoRoomManager.removeListener(this)
     }
 
 
     fun addSvgUrl(imGiftModel: IMGiftModel?) {
+        LogUtil.d("SvgPlayerManager","数据")
         imGiftModel?.let {
             if (svgListQueue.isEmpty()) {
                 svgListQueue.add(it)

+ 4 - 3
room/src/main/java/com/swago/room/gift/control/XSvgPlayer.kt

@@ -39,17 +39,17 @@ class XSvgPlayer : ConstraintLayout {
 
 
     fun playSvga(imGiftModel:IMGiftModel){
-        svgaParser?.let {
+        svgaParser!!.let {
             isCanplay = true
             it.parse(URL(imGiftModel.svga),object:SVGAParser.ParseCompletion{
                 override fun onComplete(videoItem: SVGAVideoEntity) {
-                    binding?.apply {
+                    binding!!.apply {
                         val drawable = SVGADrawable(videoItem)
                         svgaImageView.visibility = View.VISIBLE
                         svgaImageView.setImageDrawable(drawable)
                         svgaImageView.loops = 1
                         svgaImageView.callback = callback
-                        Log.d("svgPlayer","dddd")
+                        Log.d("svgPlayer","dddd--$isCanplay")
                         if (isCanplay){
                             svgaImageView.startAnimation()
                         }
@@ -81,6 +81,7 @@ class XSvgPlayer : ConstraintLayout {
     private var callback = object:SVGACallback {
 
         override fun onFinished() {
+            Log.d("svgPlayer","dddd--结束")
             binding?.svgaImageView?.visibility = View.GONE
             nextSvgPlay?.invoke()
         }

+ 23 - 12
room/src/main/java/com/swago/room/piaotiao/WaftManager.kt

@@ -4,6 +4,7 @@ import com.swago.baseswago.baseroom.IRoomActiveListener
 import com.swago.baseswago.baseroom.IRoomInfo
 import com.swago.baseswago.baseroom.SwagoRoomManager
 import com.swago.baseswago.model.live.gift.IMGiftModel
+import com.swago.baseswago.util.LogUtil
 import kotlinx.coroutines.*
 import java.util.*
 import kotlin.collections.ArrayList
@@ -63,36 +64,46 @@ class WaftManager : IRoomActiveListener {
     private fun initQueue(){
         loopJob = GlobalScope.launch(Dispatchers.Main,start = CoroutineStart.LAZY) {
             var isLoop = true
+            //用来在都忙的时候往
             while (isLoop){
                 val imGiftModel  = giftModelList.peek()
+                LogUtil.d("waftViewList","peek")
                 if (imGiftModel!=null){
                     //用来判断是否有未使用的飘条 把数据添加进去
                     var isSetData = false
-                    waftViewList.forEach {
-                        if (!it.isBusy){
-                            it.addData(imGiftModel)
+
+                    for (index in 0 until waftViewList.size){
+                        if (!waftViewList[index].isBusy){
+                            LogUtil.d("waftViewList","ddddd-$index")
+                            waftViewList[index].addData(imGiftModel)
                             isSetData = true
-                            return@forEach
+                            break
                         }
                     }
 
                     if (!isSetData){
                         //表示此事所有飘条都在忙 那么按顺序添加
-                        if (waftViewCount<waftViewList.size){
-                            waftViewList[waftViewCount].addData(imGiftModel)
-                            waftViewCount++
-                        }else{
-                            val index = waftViewCount%waftViewList.size
-                            waftViewList[index].addData(imGiftModel)
-                            waftViewCount++
+                        LogUtil.d("waftViewList","${waftViewCount%waftViewList.size}----$waftViewCount")
+                        when(waftViewCount%waftViewList.size){
+                            0 -> {
+                                waftViewCount++
+                                waftViewList[0].addData(imGiftModel)
+                                LogUtil.d("waftViewList","ddddd1")
+                            }
+                            1 -> {
+                                waftViewCount++
+                                waftViewList[1].addData(imGiftModel)
+                                LogUtil.d("waftViewList","ddddd2")
+                            }
                         }
+                    }else{
+                        waftViewCount = 0
                     }
 
                     giftModelList.poll()
                     if (giftModelList.isEmpty()){
                         isLoop = false
                         loopJob= null
-                        waftViewCount = 0
                     }
                 }else{
                     isLoop = false

+ 5 - 1
room/src/main/java/com/swago/room/piaotiao/WaftView.kt

@@ -33,8 +33,11 @@ class WaftView : FrameLayout {
 
 
     fun addData(imGiftModel: IMGiftModel) {
+        isBusy = true
         imGiftModelList.add(imGiftModel)
-
+        if (animatorSet?.isRunning !=true){
+            loopNextWaft()
+        }
     }
 
     private var animatorSet: AnimatorSet? = null
@@ -74,6 +77,7 @@ class WaftView : FrameLayout {
 
     private fun loopNextWaft() {
         if (imGiftModelList.isEmpty()) {
+            isBusy = false
             return
         }
         val next = imGiftModelList.pop()

+ 7 - 4
room/src/main/java/com/swago/room/user/UserRoomActivity.kt

@@ -1,12 +1,15 @@
 package com.swago.room.user
 
 import android.content.Intent
+import android.os.Bundle
 import android.view.ViewGroup
 import android.view.WindowManager
 import androidx.activity.viewModels
 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.gyf.immersionbar.ImmersionBar
+import com.gyf.immersionbar.OnKeyboardListener
 import com.swago.baseswago.SwagoAdapter
 import com.swago.baseswago.UserVm
 import com.swago.baseswago.agora.AgoraManager
@@ -48,8 +51,6 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
 
     private val adapter = SwagoAdapter(fragments,supportFragmentManager)
 
-    private var imAllListener = object:IMEventListener(){}
-
     @Autowired
     @JvmField
     var position: Int = 0
@@ -60,6 +61,8 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
 
     lateinit var bindingCoverView:LayoutUserRoomBinding
 
+    private var userRoomFragment:UserRoomFragment? = null
+
     override val roomCoverView: ViewGroup by lazy {
         bindingCoverView = LayoutUserRoomBinding.inflate(layoutInflater)
         bindingCoverView.viewPager.adapter = adapter
@@ -77,10 +80,10 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
         mCurrentPosition = position
         RoomDataManager.initData(data)
         super.initOther()
+        userRoomFragment = fragments[1] as UserRoomFragment
     }
 
     override fun initUserRoomView() {
-        TUIKitImpl.addIMEventListener(imAllListener)
         roomVm.init()
         msgVm.init()
         window.addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON)
@@ -101,6 +104,7 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
 
     override fun initLiveData() {
         msgVm.anchorRoomClosed = {
+            userRoomFragment?.dismissDialog()
             val closeDialog = UserForAnchorCloseDialog()
             closeDialog.show(supportFragmentManager,"UserForAnchorCloseDialog")
         }
@@ -153,7 +157,6 @@ class UserRoomActivity : AbsUserActivity<ActivityAbsRoomUserBinding, UserRoomMod
     }
 
     override fun onDestroy() {
-        TUIKitImpl.removeIMEventListener(imAllListener)
         agoraService?.let { stopService(it) }
         super.onDestroy()
     }

+ 12 - 5
room/src/main/java/com/swago/room/user/UserRoomFragment.kt

@@ -53,11 +53,6 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
             iHeader.updateRoomUser(it)
         }
 
-        msgVm.anchorRoomClosed = {
-            giftDialog?.dismissAllowingStateLoss()
-        }
-
-
         val footerView = iFooter as UserFooterView
         footerView.openSendMsgDialog = {
             openSendMessageDialog()
@@ -131,6 +126,18 @@ class UserRoomFragment : BaseComFragment<FragmentBaseComBinding>() {
                 }
             }
         }
+
+        msgVm.inComeChange = {
+            headerView.updateIncome(it)
+        }
+
+        msgVm.updateHotValue = {
+            headerView.updateHotValue(it)
+        }
+    }
+
+    fun dismissDialog(){
+        giftDialog?.dismissAllowingStateLoss()
     }
 
     override fun changeRoom(iRoomInfo: IRoomInfo) {

+ 16 - 2
room/src/main/java/com/swago/room/vm/MsgVm.kt

@@ -29,6 +29,10 @@ class MsgVm (application: Application) : AbsMsgVm(application){
 
     var anchorRoomClosed:((data:AnchorRoomClosedBean?)->Unit)? = null
 
+    var inComeChange:((income:String)->Unit)? = null
+
+    var updateHotValue:((hotValue:String)->Unit)? = null
+
     /**
      * 播放svg动画
      */
@@ -44,7 +48,11 @@ class MsgVm (application: Application) : AbsMsgVm(application){
         imGroupNewMsgListener.handleMsgType<CusNewMsgBean<UserJoinRoomBean>>(user_join_room){
             if (it.getGroupId() == SwagoRoomManager.iRoomInfo?.getRoomGroupId()?:""){
                 if (SwagoRoomManager.roleType == RoleType.user || it.data?.senderCode != UserInfo.getUserInfo()?.user_account) {
-                    newChatMsgFun?.invoke(it.data)
+                    it.data?.let {
+                        newChatMsgFun?.invoke(it)
+                        updateHotValue?.invoke(it.hotValue)
+                    }
+
                 }
             }
         }
@@ -60,8 +68,14 @@ class MsgVm (application: Application) : AbsMsgVm(application){
             SwagoRoomManager.iRoomInfo?.let { iRoomInfo ->
                 if (isReady&&iRoomInfo.getRoomId()== it.data?.roomId?:""){
                     it.data?.let {
-                        playSvgUrl?.invoke(it)
+                        if (it.giftType == 1||it.giftType == 2){
+                            playSvgUrl?.invoke(it)
+                        }
+
+                        inComeChange?.invoke(it.incomeCount)
                     }
+
+
                 }
             }
         }

+ 7 - 0
room/src/main/java/com/swago/room/widget/AnchorHeaderView.kt

@@ -67,6 +67,13 @@ class AnchorHeaderView : ConstraintLayout, IRoomActiveListener,IHeader{
         }
     }
 
+    fun updateIncome(income:String){
+        binding.tvIncome.text = income
+    }
+
+    fun updateHotValue(hotValue:String){
+        binding.tvHot.text = hotValue
+    }
 
     override fun changeRoom(iRoomInfo: IRoomInfo) {
         visibility = View.GONE

+ 8 - 0
room/src/main/java/com/swago/room/widget/UserHeaderView.kt

@@ -86,6 +86,14 @@ class UserHeaderView : ConstraintLayout, IRoomActiveListener,IHeader {
     }
 
 
+    fun updateIncome(income:String){
+        binding.tvIncome.text = income
+    }
+
+    fun updateHotValue(hotValue:String){
+        binding.tvHot.text = hotValue
+    }
+
     override fun changeRoom(iRoomInfo: IRoomInfo) {
         visibility = View.GONE
     }

+ 1 - 0
room/src/main/res/layout/dialog_message_list.xml

@@ -11,6 +11,7 @@
         android:textSize="16dp"
         android:text="@string/message"
         android:gravity="center"
+        android:background="@drawable/shape_white_top_20"
         app:layout_constraintBottom_toTopOf="@+id/conversation"
         android:layout_width="match_parent"
         android:layout_height="40dp"/>

+ 1 - 1
room/src/main/res/layout/dialog_user_for_anchor_close.xml

@@ -2,12 +2,12 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:app="http://schemas.android.com/apk/res-auto"
     xmlns:tools="http://schemas.android.com/tools"
-    android:background="@mipmap/anchor_close_bg"
     android:layout_width="match_parent"
     android:layout_height="match_parent">
 
     <ImageView
         android:id="@+id/ivCloseBg"
+        android:scaleType="centerCrop"
         android:layout_width="match_parent"
         android:layout_height="match_parent"/>
 

+ 1 - 0
room/src/main/res/layout/fragment_base_com.xml

@@ -2,6 +2,7 @@
 <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
     android:layout_width="match_parent"
     android:layout_height="match_parent"
+    android:id="@+id/cl"
     xmlns:app="http://schemas.android.com/apk/res-auto">
 
     <FrameLayout

+ 4 - 3
room/src/main/res/layout/item_chat.xml

@@ -9,12 +9,13 @@
         android:id="@+id/tv"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:paddingStart="5dp"
+        android:paddingStart="8dp"
         android:paddingTop="2dp"
-        android:paddingEnd="5dp"
-        android:paddingBottom="2dp"
+        android:paddingEnd="8dp"
+        android:paddingBottom="3dp"
         android:textColor="#000"
         android:textSize="14dp"
+        android:gravity="center"
         android:background="@drawable/shape_white_20"
         app:layout_constraintStart_toStartOf="parent"
         app:layout_constraintTop_toTopOf="parent"

+ 0 - 1
settings.gradle

@@ -6,5 +6,4 @@ include ':user'
 include ':home'
 include ':tuikit'
 include ':room'
-include ':pay'
 include ':lib_country_picker'

+ 0 - 1
user/src/main/java/com/swago/user/SettingActivity.kt

@@ -79,7 +79,6 @@ class SettingActivity : BaseXActivity<ActivitySettingBinding>() {
             ARouter.getInstance().build(ARouteConstant.Login.login)
                 .withFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP)
                 .navigation()
-            SpUtil.clearSp()
         })
     }
 

+ 3 - 1
user/src/main/java/com/swago/user/recharge/RechargeActivity.kt

@@ -12,6 +12,7 @@ import com.swago.baseswago.PayVm
 import com.swago.baseswago.activity.BaseXActivity
 import com.swago.baseswago.constant.ARouteConstant
 import com.swago.baseswago.dialog.OrderLostDialog
+import com.swago.baseswago.dialog.RechargeAdapter
 import com.swago.baseswago.libpay.IPayCallback
 import com.swago.baseswago.libpay.PayManager
 import com.swago.baseswago.model.pay.PayModel
@@ -57,7 +58,7 @@ class RechargeActivity : BaseXActivity<ActivityRechargeBinding>(), IPayCallback
         adapter.setOnItemClickListener { _, _, position ->
             if (selectedPosition != position) {
                 adapter.data[selectedPosition].isSelected = false
-                adapter.data[position].isSelected = false
+                adapter.data[position].isSelected = true
                 adapter.notifyItemChanged(selectedPosition)
                 adapter.notifyItemChanged(position)
                 selectedPosition = position
@@ -118,6 +119,7 @@ class RechargeActivity : BaseXActivity<ActivityRechargeBinding>(), IPayCallback
 
     override fun onPaySuccess(data: List<Purchase>?) {
         data?.forEach {
+            SwagoLoading.showLoadingDialog(this)
             payVm.payOrderToServer(it, 1)
         }
     }

+ 1 - 1
user/src/main/java/com/swago/user/task/TaskAdapter.kt

@@ -22,7 +22,7 @@ class TaskAdapter : BaseQuickAdapter<TaskModel, BaseViewHolder>(
             }else if (item.task_reward_type == 2){
                 setText(R.id.tvRewardType,R.string.coin)
             }
-            setText(R.id.tvRewardTypeValue,item.task_reward_value)
+            setText(R.id.tvRewardTypeValue,"+${item.task_reward_value}")
             //0领取1待完成2已完成
             when(item.task_status){
                 0 -> {