Parcourir la source

优化广告以及集成rk3566的SDK

ccc il y a 4 mois
Parent
commit
be5a285978
25 fichiers modifiés avec 239 ajouts et 130 suppressions
  1. 1 0
      lib_base/build.gradle
  2. BIN
      lib_base/libs/xzjh_interface_20240731.jar
  3. 4 1
      module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt
  4. 4 1
      module_backstage/src/main/java/com/module/backstage/fragment/ErrorStatFragment.kt
  5. 4 1
      module_backstage/src/main/java/com/module/backstage/fragment/date/HistogramDataFragment.kt
  6. 3 1
      module_backstage/src/main/java/com/module/backstage/fragment/date/OrderDataFragment.kt
  7. 4 1
      module_backstage/src/main/java/com/module/backstage/fragment/other/OtherFragment.kt
  8. 4 1
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugAlarmFragment.kt
  9. 3 1
      module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt
  10. 4 1
      module_backstage/src/main/java/com/module/backstage/fragment/param/GeneralParamFragment.kt
  11. 1 2
      module_home/src/main/AndroidManifest.xml
  12. 4 1
      module_home/src/main/java/com/quyunshuo/module/home/activity/lock/LockActivity.kt
  13. 3 46
      module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt
  14. 4 1
      module_home/src/main/java/com/quyunshuo/module/home/activity/sleep/SleepActivity.kt
  15. 2 0
      module_home/src/main/java/com/quyunshuo/module/home/dialog/PayChooseDialogFragment.kt
  16. 2 0
      module_home/src/main/java/com/quyunshuo/module/home/dialog/ShoppingCartDialogFragment.kt
  17. 13 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt
  18. 52 17
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/UserLoginFragment.kt
  19. 4 1
      module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/QrCodeFragment.kt
  20. 54 51
      module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/BuyFragmentVM.kt
  21. 2 1
      module_home/src/main/java/com/quyunshuo/module/home/utils/SimplePlayerUtil.kt
  22. BIN
      module_home/src/main/res/drawable/ico_contact2.png
  23. 10 0
      module_home/src/main/res/drawable/shape_name_phone.xml
  24. 49 0
      module_home/src/main/res/layout/home_contact.xml
  25. 8 1
      module_home/src/main/res/layout/home_fragment_buy.xml

+ 1 - 0
lib_base/build.gradle

@@ -83,6 +83,7 @@ dependencies {
     api "com.github.weilinhu:mylibaray:1.0" //https://github.com/weilinhu/mylibaray //监听网络情况。
     api 'com.github.ldt-libs:SpringBackLayout:1.0' //回弹效果
     api 'com.github.kabouzeid:RecyclerView-FastScroll:1.0.16-kmod'
+    api files('libs\\xzjh_interface_20240731.jar')
 
     kapt DependencyConfig.GitHub.ARouteCompiler
     kapt DependencyConfig.GitHub.EventBusAPT

BIN
lib_base/libs/xzjh_interface_20240731.jar


+ 4 - 1
module_backstage/src/main/java/com/module/backstage/activity/setting/SettingActivity.kt

@@ -21,6 +21,7 @@ import androidx.activity.viewModels
 import androidx.annotation.RequiresApi
 import androidx.core.content.ContextCompat
 import androidx.core.view.get
+import androidx.lifecycle.LifecycleObserver
 import androidx.navigation.findNavController
 import androidx.navigation.fragment.findNavController
 import com.alibaba.android.arouter.facade.annotation.Route
@@ -80,7 +81,7 @@ import java.io.File
 @Route(path = RouteUrl.Home.SettingActivity)
 @AndroidEntryPoint
 @RegisterEventBus
-class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingViewModel>(),
+class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingViewModel>(),LifecycleObserver,
     View.OnClickListener {
     private val TAG = "SettingActivity"
     private var backPressedTime: Long = 0
@@ -206,6 +207,8 @@ class SettingActivity : BaseActivity<BackstageActivitySettingBinding, SettingVie
         observeLiveData(mViewModel.isM3Success, ::closeDialog)
         observeLiveData(mViewModel.connectState, ::connectState)
         observeLiveData(mViewModel.apkInfo, ::updateApp)
+        lifecycle.addObserver(this)
+
     }
 
     private fun updateApp(apkInfoBean: ApkInfoBean) {

+ 4 - 1
module_backstage/src/main/java/com/module/backstage/fragment/ErrorStatFragment.kt

@@ -4,6 +4,7 @@ package com.module.backstage.fragment
 import android.view.LayoutInflater
 import android.view.View
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.chad.library.adapter.base.BaseQuickAdapter
 import com.hboxs.serialport.plc.DialogClickListener
@@ -24,7 +25,7 @@ import dagger.hilt.android.AndroidEntryPoint
  * @since 2021/8/1 11:46 下午
  */
 @AndroidEntryPoint
-class ErrorStatFragment : BaseFragment<BackstageFragmentErrorstatBinding, ErrorStatFragmentVM>() {
+class ErrorStatFragment : BaseFragment<BackstageFragmentErrorstatBinding, ErrorStatFragmentVM>(),LifecycleObserver {
 
     override val mViewModel: ErrorStatFragmentVM by viewModels()
     private var errorAdapter: ErrorAdapter? = null
@@ -41,6 +42,8 @@ class ErrorStatFragment : BaseFragment<BackstageFragmentErrorstatBinding, ErrorS
 
     override fun initObserve() {
         observeLiveData(mViewModel.allWarringData, ::getAllWarringData)
+        lifecycle.addObserver(this)
+
     }
 
     private fun getAllWarringData(warringBeans: MutableList<WarringBean>?) {

+ 4 - 1
module_backstage/src/main/java/com/module/backstage/fragment/date/HistogramDataFragment.kt

@@ -5,6 +5,7 @@ import android.util.Log
 import android.view.MotionEvent
 import android.view.View
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import com.github.mikephil.charting.listener.ChartTouchListener
 import com.github.mikephil.charting.listener.OnChartGestureListener
 import com.hboxs.serialport.plc.DialogClickListener
@@ -28,7 +29,7 @@ import kotlin.math.max
  * @since 2021/8/1 11:46 下午
  */
 @AndroidEntryPoint
-class HistogramDataFragment : BaseFragment<BackstageFragmentHistogramDataBinding, HistogramDataFragmentVM>(),
+class HistogramDataFragment : BaseFragment<BackstageFragmentHistogramDataBinding, HistogramDataFragmentVM>(),LifecycleObserver,
     View.OnClickListener {
 
     private var hour: Int = 0;
@@ -134,6 +135,8 @@ class HistogramDataFragment : BaseFragment<BackstageFragmentHistogramDataBinding
 
     override fun initObserve() {
         observeLiveData(mViewModel.allLocalOrder, ::setData)
+        lifecycle.addObserver(this)
+
     }
 
     fun allLocalOrder(localOrderBeans: List<LocalOrderBean>?) {

+ 3 - 1
module_backstage/src/main/java/com/module/backstage/fragment/date/OrderDataFragment.kt

@@ -3,6 +3,7 @@ package com.module.backstage.fragment.date
 import android.util.Log
 import android.view.View
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import androidx.recyclerview.widget.LinearLayoutManager
 import com.hboxs.serialport.plc.DialogClickListener
 import com.module.backstage.adapter.OrderDataAdapter
@@ -22,7 +23,7 @@ import dagger.hilt.android.AndroidEntryPoint
  * @since 2021/8/1 11:46 下午
  */
 @AndroidEntryPoint
-class OrderDataFragment : BaseFragment<BackstageFragmentOrderDataBinding, OrderDataFragmentVM>(),
+class OrderDataFragment : BaseFragment<BackstageFragmentOrderDataBinding, OrderDataFragmentVM>(),LifecycleObserver,
     View.OnClickListener {
 
     private var hour: Int = 0;
@@ -76,6 +77,7 @@ class OrderDataFragment : BaseFragment<BackstageFragmentOrderDataBinding, OrderD
 
     override fun initObserve() {
         observeLiveData(mViewModel.allLocalOrder, ::allLocalOrder)
+        lifecycle.addObserver(this)
     }
 
     fun allLocalOrder(list: MutableList<LocalOrderBean>) {

+ 4 - 1
module_backstage/src/main/java/com/module/backstage/fragment/other/OtherFragment.kt

@@ -7,6 +7,7 @@ import android.os.Bundle
 import android.util.Log
 import android.view.View
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import androidx.navigation.Navigation
 import androidx.recyclerview.widget.GridLayoutManager
 import com.module.backstage.R
@@ -36,7 +37,7 @@ import java.util.Arrays
  * @since 2021/8/1 11:46 下午
  */
 @AndroidEntryPoint
-class OtherFragment : BaseFragment<BackstageFragmentOtherBinding, OtherFragmentVM>() {
+class OtherFragment : BaseFragment<BackstageFragmentOtherBinding, OtherFragmentVM>(),LifecycleObserver {
     private  val TAG = "OtherFragment"
     private val CHANNELS = arrayOf(
         UiUtil.getStringRes(R.string.base_other1),
@@ -101,6 +102,8 @@ class OtherFragment : BaseFragment<BackstageFragmentOtherBinding, OtherFragmentV
 
     override fun initObserve() {
         observeLiveData(mViewModel.readAllDataSuccess,::searchResult)
+        lifecycle.addObserver(this)
+
     }
 
     /**

+ 4 - 1
module_backstage/src/main/java/com/module/backstage/fragment/param/DebugAlarmFragment.kt

@@ -5,6 +5,7 @@ import android.util.Log
 import android.view.View
 import android.widget.CheckBox
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import androidx.recyclerview.widget.GridLayoutManager
 import com.hboxs.serialport.plc.DialogClickListener
 import com.hboxs.serialport.sbc.VBoxMessage
@@ -40,7 +41,7 @@ import org.greenrobot.eventbus.ThreadMode
 @RegisterEventBus
 @AndroidEntryPoint
 class DebugAlarmFragment :
-    BaseFragment<BackstageFragmentDebugAlarmBinding, DebugAlarmFragmentVM>() {
+    BaseFragment<BackstageFragmentDebugAlarmBinding, DebugAlarmFragmentVM>(),LifecycleObserver {
     private val TAG = "DebugParamFragment"
     private var debugAlarmAdapter: DebugAlarmAdapter? = null
     var okCancelDialog: OKCancelDialog? = null
@@ -83,6 +84,8 @@ class DebugAlarmFragment :
         observeLiveData(mViewModel.paramDataList,::paramDataList)
         observeLiveData(mViewModel.refreshPage,::refreshPage)
         observeLiveData(mViewModel.loading,::setLoading)
+        lifecycle.addObserver(this)
+
     }
 
     private fun setLoading(b: Boolean?) {

+ 3 - 1
module_backstage/src/main/java/com/module/backstage/fragment/param/DebugParamFragment.kt

@@ -5,6 +5,7 @@ import android.util.Log
 import android.view.View
 import android.widget.CheckBox
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import androidx.recyclerview.widget.GridLayoutManager
 import com.hboxs.serialport.plc.DialogClickListener
 import com.hboxs.serialport.sbc.SBCHeartbeat
@@ -41,7 +42,7 @@ import org.greenrobot.eventbus.ThreadMode
 @RegisterEventBus
 @AndroidEntryPoint
 class DebugParamFragment :
-    BaseFragment<BackstageFragmentDebugParamBinding, DebugParamFragmentVM>() {
+    BaseFragment<BackstageFragmentDebugParamBinding, DebugParamFragmentVM>() ,LifecycleObserver{
     private val TAG = "DebugParamFragment"
     private var debugParamAdapter: DebugParamAdapter? = null
     var okCancelDialog: OKCancelDialog? = null
@@ -89,6 +90,7 @@ class DebugParamFragment :
         observeLiveData(mViewModel.paramDataList3,::paramDataList3)
         observeLiveData(mViewModel.refreshPage,::refreshPage)
         observeLiveData(mViewModel.loading,::setLoading)
+        lifecycle.addObserver(this)
 
     }
     private fun setLoading(b: Boolean?) {

+ 4 - 1
module_backstage/src/main/java/com/module/backstage/fragment/param/GeneralParamFragment.kt

@@ -3,6 +3,7 @@ package com.module.backstage.fragment.param
 import android.util.Log
 import android.view.View
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import androidx.recyclerview.widget.GridLayoutManager
 import com.hboxs.serialport.plc.DialogClickListener
 import com.hboxs.serialport.plc.message.Message
@@ -32,7 +33,7 @@ import org.greenrobot.eventbus.ThreadMode
  */
 @RegisterEventBus
 @AndroidEntryPoint
-class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding, GeneralParamFragmentVM>() {
+class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding, GeneralParamFragmentVM>() ,LifecycleObserver{
 
     private val TAG = "GeneralParamFragment"
     var okCancelDialog: OKCancelDialog? = null
@@ -83,6 +84,8 @@ class GeneralParamFragment : BaseFragment<BackstageFragmentGeneralParamBinding,
         lifecycle.addObserver(mViewModel.getThreadGeneralParam())
         observeLiveData(mViewModel.readAllDataSuccess,::readAllDataSuccess)
         observeLiveData(mViewModel.clickPosition,::clickPosition)
+        lifecycle.addObserver(this)
+
     }
 
     private fun clickPosition(i: Int) {

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

@@ -8,8 +8,7 @@
     <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
     <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
-    <application
-        android:hardwareAccelerated="true">
+    <application>
         <!--  Main 首页  -->
         <activity
             android:name=".activity.main.MainActivity"

+ 4 - 1
module_home/src/main/java/com/quyunshuo/module/home/activity/lock/LockActivity.kt

@@ -2,6 +2,7 @@ package com.quyunshuo.module.home.activity.main
 
 import android.widget.Toast
 import androidx.activity.viewModels
+import androidx.lifecycle.LifecycleObserver
 import com.quyunshuo.androidbaseframemvvm.base.ktx.observeLiveData
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseActivity
 import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
@@ -16,7 +17,7 @@ import dagger.hilt.android.AndroidEntryPoint
  * @since 5/22/21 2:26 PM
  */
 @AndroidEntryPoint
-class LockActivity : BaseActivity<HomeActivityLockBinding, LockViewModel>() {
+class LockActivity : BaseActivity<HomeActivityLockBinding, LockViewModel>() ,LifecycleObserver{
     private var backPressedTime:Long = 0
     /**
      * 通过 viewModels() + Hilt 获取 ViewModel 实例
@@ -29,6 +30,8 @@ class LockActivity : BaseActivity<HomeActivityLockBinding, LockViewModel>() {
 
     override fun initObserve() {
         observeLiveData(mViewModel.data, ::processData)
+        lifecycle.addObserver(this)
+
     }
 
     private fun processData(data: String) {

+ 3 - 46
module_home/src/main/java/com/quyunshuo/module/home/activity/main/MainActivity.kt

@@ -4,6 +4,7 @@ import android.content.Context
 import android.util.Log
 import android.widget.Toast
 import androidx.activity.viewModels
+import androidx.lifecycle.LifecycleObserver
 import androidx.navigation.findNavController
 import com.alibaba.android.arouter.facade.annotation.Route
 import com.quyunshuo.androidbaseframemvvm.base.ktx.observeLiveData
@@ -35,7 +36,7 @@ import java.io.File
 @RegisterEventBus
 @Route(path = RouteUrl.Main.MainActivity)
 @AndroidEntryPoint
-class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>() {
+class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>(),LifecycleObserver {
     private var backPressedTime: Long = 0
     private val TAG = "MainActivity"
 
@@ -54,52 +55,9 @@ class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>() {
 
     override fun onStart() {
         super.onStart()
-        CacheCleaner.clearApplicationCache(this)
         devState()
     }
 
-    //    清理缓存
-    object CacheCleaner {
-        private const val TAG = "MainActivity"
-        fun clearApplicationCache(context: Context) {
-            Log.d(TAG, "clearApplicationCache: ")
-            try {
-                // 清理内部缓存
-                val cacheDir = context.cacheDir
-                if (cacheDir != null && cacheDir.isDirectory) {
-                    deleteDir(cacheDir)
-                }
-
-                // 清理外部缓存
-                val externalCacheDir = context.externalCacheDir
-                if (externalCacheDir != null && externalCacheDir.isDirectory) {
-                    deleteDir(externalCacheDir)
-                }
-
-                // 清理应用数据(可选)
-                // val packageName = context.packageName
-                // val pm = context.getSystemService(Context.POWER_SERVICE) as PackageManager
-                // pm.clearApplicationUserData(packageName, null)
-            } catch (e: Exception) {
-                e.printStackTrace()
-            }
-        }
-
-        private fun deleteDir(dir: File?): Boolean {
-            if (dir != null && dir.isDirectory) {
-                val children = dir.list()
-                if (children != null) {
-                    for (child in children) {
-                        val success = deleteDir(File(dir, child))
-                        if (!success) {
-                            return false
-                        }
-                    }
-                }
-            }
-            return dir!!.delete()
-        }
-    }
     /**
      * 设备状态,如果是休眠,直接休眠,如果是锁机,直接锁机
      */
@@ -116,12 +74,11 @@ class MainActivity : BaseActivity<HomeActivityMainBinding, MainViewModel>() {
             val navController = findNavController(mBinding.homeFragmentcontainerview.id)
             navController.navigate(R.id.home_sleepfragment)
         }
-
-
     }
 
     override fun initObserve() {
         observeLiveData(mViewModel.data, ::processData)
+        lifecycle.addObserver(this)
     }
 
     private fun processData(data: String) {

+ 4 - 1
module_home/src/main/java/com/quyunshuo/module/home/activity/sleep/SleepActivity.kt

@@ -2,6 +2,7 @@ package com.quyunshuo.module.home.activity.main
 
 import android.widget.Toast
 import androidx.activity.viewModels
+import androidx.lifecycle.LifecycleObserver
 import com.quyunshuo.androidbaseframemvvm.base.ktx.observeLiveData
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseActivity
 import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
@@ -17,7 +18,7 @@ import dagger.hilt.android.AndroidEntryPoint
  * @since 5/22/21 2:26 PM
  */
 @AndroidEntryPoint
-class SleepActivity : BaseActivity<HomeActivitySleepBinding, SleepViewModel>() {
+class SleepActivity : BaseActivity<HomeActivitySleepBinding, SleepViewModel>(),LifecycleObserver {
     private var backPressedTime:Long = 0
     /**
      * 通过 viewModels() + Hilt 获取 ViewModel 实例
@@ -30,6 +31,8 @@ class SleepActivity : BaseActivity<HomeActivitySleepBinding, SleepViewModel>() {
 
     override fun initObserve() {
         observeLiveData(mViewModel.data, ::processData)
+        lifecycle.addObserver(this)
+
     }
 
     private fun processData(data: String) {

+ 2 - 0
module_home/src/main/java/com/quyunshuo/module/home/dialog/PayChooseDialogFragment.kt

@@ -136,6 +136,8 @@ class PayChooseDialogFragment :
     override fun createVB() = HomeDialogPayChooseBinding.inflate(layoutInflater)
     override fun initObserve() {
         lifecycle.addObserver(myHandler)
+        lifecycle.addObserver(this)
+
     }
 
     override fun initRequestData() {

+ 2 - 0
module_home/src/main/java/com/quyunshuo/module/home/dialog/ShoppingCartDialogFragment.kt

@@ -111,6 +111,8 @@ class ShoppingCartDialogFragment :
     override fun initObserve() {
         lifecycle.addObserver(myHandler)
         observeLiveData(homeFragmentVM!!.shoppingCarSumPrice,::shoppingCarSumPrice)
+        lifecycle.addObserver(this)
+
     }
 
     private fun shoppingCarSumPrice(d: Double) {

+ 13 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/BuyFragment.kt

@@ -24,6 +24,8 @@ import com.quyunshuo.androidbaseframemvvm.base.utils.RegisterEventBus
 import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
 import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseFragment
+import com.quyunshuo.androidbaseframemvvm.common.util.FileUtil
+import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil
 import com.quyunshuo.module.home.R
 import com.quyunshuo.module.home.databinding.HomeFragmentBuyBinding
@@ -67,8 +69,15 @@ class BuyFragment : BaseFragment<HomeFragmentBuyBinding, BuyFragmentVM>(),
     override fun HomeFragmentBuyBinding.initView() {
         startRefreshime()
 
+        val deviceId = FileUtil.getDeviceId()
+        if (deviceId.isNotEmpty()) {
+            tvClientId.text =
+                UiUtil.getStringRes(R.string.home_dev_id) + deviceId.substring(deviceId.length - 6)
+        }
+
         simplePlayerUtil = SimplePlayerUtil(svVideo)
         svVideo.setOnTouchListener(this@BuyFragment)
+
         if (Build.VERSION.SDK_INT >= 23) {
             if (!Settings.canDrawOverlays(this@BuyFragment.context)) {
                 val intent: Intent = Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION)
@@ -82,6 +91,9 @@ class BuyFragment : BaseFragment<HomeFragmentBuyBinding, BuyFragmentVM>(),
             restCoin()
         }
 
+        ilContact.tvContact.text = SpUtils.getString(MMKVName.CONTACT,"name")
+        ilContact.tvContactWay.text = SpUtils.getString(MMKVName.CONTACT_WAY,"123456")
+
         val logoIcon = SpUtils.getString(MMKVName.LOGO_TEXT, "7777")
         val enumByValue = LogoEnum.getEnumByValue(logoIcon!!)
         val layoutParams = ivLogo.layoutParams
@@ -158,7 +170,7 @@ class BuyFragment : BaseFragment<HomeFragmentBuyBinding, BuyFragmentVM>(),
 
     override fun initRequestData() {
         Log.d(TAG, "initRequestData: ")
-        simplePlayerUtil?.let { mViewModel.playvideo(it) }
+        simplePlayerUtil?.let { mViewModel.playVideo(it) }
     }
 
 

+ 52 - 17
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/UserLoginFragment.kt

@@ -1,5 +1,8 @@
 package com.quyunshuo.module.home.fragment.fragment
 
+import ZtlApi.ZtlManager
+import android.app.XzjhSystemManager
+import android.os.Build
 import android.os.Handler
 import android.util.Log
 import android.view.View
@@ -13,10 +16,13 @@ import androidx.lifecycle.OnLifecycleEvent
 import androidx.navigation.fragment.findNavController
 import com.alibaba.android.arouter.launcher.ARouter
 import com.quyunshuo.androidbaseframemvvm.base.ktx.observeLiveData
+import com.quyunshuo.androidbaseframemvvm.base.utils.SpUtils
+import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
 import com.quyunshuo.androidbaseframemvvm.common.constant.RouteUrl
 import com.quyunshuo.androidbaseframemvvm.common.keyboard.KeyboardView
 import com.quyunshuo.androidbaseframemvvm.common.ui.BaseFragment
 import com.quyunshuo.androidbaseframemvvm.common.util.FileUtil
+import com.quyunshuo.androidbaseframemvvm.common.util.LongClickUtils
 import com.quyunshuo.androidbaseframemvvm.common.util.ToastUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.UiUtil
 import com.quyunshuo.androidbaseframemvvm.common.util.XLogUtil
@@ -63,25 +69,24 @@ class UserLoginFragment : BaseFragment<HomeFragmentUserloginBinding, UserLoginFr
         selectUserName = usernamesNew[0]
         homeReturnToUpperLevel.setOnClickListener(this@UserLoginFragment)
         homeLoginSetting.setOnClickListener(this@UserLoginFragment)
-        Log.d(TAG, "backstage_product_2 initView1: "+UiUtil.getStringRes(R.string.home_login))
-        tvDeviceId.text = UiUtil.getStringRes(R.string.home_dev_id)+ FileUtil.getDeviceId()
+        Log.d(TAG, "backstage_product_2 initView1: " + UiUtil.getStringRes(R.string.home_login))
+        tvDeviceId.text = UiUtil.getStringRes(R.string.home_dev_id) + FileUtil.getDeviceId()
         language2ArrayAdapter =
             this@UserLoginFragment.context?.let { ArrayAdapter<String>(it, R.layout.spinner_login) }
-        language2ArrayAdapter!!.addAll(*usernamesNew )
+        language2ArrayAdapter!!.addAll(*usernamesNew)
         etHomeUsername.setAdapter(language2ArrayAdapter)
         etHomeUsername.setSelection(
             language2ArrayAdapter!!.getPosition(usernamesNew.get(0)),
             true
         )
-
-        etHomeUsername.setOnItemSelectedListener(object :AdapterView.OnItemSelectedListener{
+        etHomeUsername.setOnItemSelectedListener(object : AdapterView.OnItemSelectedListener {
             override fun onItemSelected(
                 parent: AdapterView<*>?,
                 view: View?,
                 position: Int,
                 id: Long
             ) {
-                Log.d(TAG, "onItemSelected: "+usernamesNew[position])
+                Log.d(TAG, "onItemSelected: " + usernamesNew[position])
                 when (position) {
                     0 -> selectUserName = usernamesNew[position]
                     1 -> selectUserName = usernamesNew[position]
@@ -92,10 +97,21 @@ class UserLoginFragment : BaseFragment<HomeFragmentUserloginBinding, UserLoginFr
             override fun onNothingSelected(parent: AdapterView<*>?) {
             }
         })
+
+        LongClickUtils.setLongClick(Handler(), ivClogo, 5000) { v ->
+            val statusBar = SpUtils.getBoolean(MMKVName.LONG_CLICK_SHOW_STATUS_BAR, true)
+            if (statusBar == true) {
+                showHideSar()
+            } else {
+                ToastUtil.showToast("asdaf")
+            }
+            XLogUtil.d("导航栏被操作。")
+            false
+        }
     }
 
     override fun initObserve() {
-        observeLiveData(mViewModel.checkResult,::processData)
+        observeLiveData(mViewModel.checkResult, ::processData)
         lifecycle.addObserver(myHandler)
     }
 
@@ -117,7 +133,7 @@ class UserLoginFragment : BaseFragment<HomeFragmentUserloginBinding, UserLoginFr
                 //检查密码是否合法。
                 val userPassword = mBinding.etHomePassword.text.toString().trim()
                 //进行密码对比。
-                selectUserName?.let { mViewModel.checkUser(it,userPassword) }
+                selectUserName?.let { mViewModel.checkUser(it, userPassword) }
 
 
             }
@@ -131,14 +147,14 @@ class UserLoginFragment : BaseFragment<HomeFragmentUserloginBinding, UserLoginFr
     }
 
     private fun processData(data: LiveDataBean<String>) {
-        if(data.code==1){
+        if (data.code == 1) {
             ToastUtil.switchToastStyleToSuccess(data.data)
             ARouter.getInstance()
                 .build(RouteUrl.Home.SettingActivity)
-                .withString("loginName",selectUserName)
+                .withString("loginName", selectUserName)
                 .navigation()
             requireActivity().finish()
-        }else{
+        } else {
             ToastUtil.switchToastStyleToWarn(data.data)
 
         }
@@ -166,12 +182,12 @@ class UserLoginFragment : BaseFragment<HomeFragmentUserloginBinding, UserLoginFr
          */
         private fun setTimeDate(fragment: UserLoginFragment) {
             fragment.mBinding.tvBackTime.text = fragment.backTime.toString()
-            XLogUtil.d("倒计时:"+fragment.backTime)
-                fragment.backTime--
-                if (fragment.backTime == 0) {
-                    val findNavController = fragment.findNavController()
-                    findNavController.navigate(R.id.home_action_home_userloginfragment_to_home_homefragment2)
-                }
+            XLogUtil.d("倒计时:" + fragment.backTime)
+            fragment.backTime--
+            if (fragment.backTime == 0) {
+                val findNavController = fragment.findNavController()
+                findNavController.navigate(R.id.home_action_home_userloginfragment_to_home_homefragment2)
+            }
         }
 
         @OnLifecycleEvent(Lifecycle.Event.ON_STOP)
@@ -205,4 +221,23 @@ class UserLoginFragment : BaseFragment<HomeFragmentUserloginBinding, UserLoginFr
         stopRefreshTime()
         super.onStop()
     }
+
+    fun showHideSar(){
+        val manager = requireActivity().getSystemService("xzjh_server") as XzjhSystemManager?
+        if (Build.VERSION.SDK_INT > Build.VERSION_CODES.M) {
+            ZtlManager.GetInstance().openSystemBar(ZtlManager.GetInstance().isSystemBarOpen)
+            if (manager != null) {
+                if ("rk3566_r" == Build.MODEL) {
+                    manager.xzjhSetSystemBarEnable(!manager.xzjhGetSystemBarEnable())
+                }
+            }
+        } else {
+            ZtlManager.GetInstance().openSystemBar(!ZtlManager.GetInstance().isSystemBarOpen)
+            if (manager != null) {
+                if ("rk3566_r" == Build.MODEL) {
+                    manager.xzjhSetSystemBarEnable(manager.xzjhGetSystemBarEnable())
+                }
+            }
+        }
+    }
 }

+ 4 - 1
module_home/src/main/java/com/quyunshuo/module/home/fragment/fragment/pay/QrCodeFragment.kt

@@ -7,6 +7,7 @@ import android.util.Base64
 import android.util.Log
 import android.view.View
 import androidx.fragment.app.viewModels
+import androidx.lifecycle.LifecycleObserver
 import com.google.gson.Gson
 import com.google.gson.reflect.TypeToken
 import com.quyunshuo.androidbaseframemvvm.base.ktx.observeLiveData
@@ -30,7 +31,7 @@ import org.greenrobot.eventbus.EventBus
  * @since 2021/8/1 11:46 下午
  */
 @AndroidEntryPoint
-class QrCodeFragment : BaseFragment<HomeFragmentQrCodeBinding, QrCodeFragmentVM>() {
+class QrCodeFragment : BaseFragment<HomeFragmentQrCodeBinding, QrCodeFragmentVM>(),LifecycleObserver {
 
     override val mViewModel: QrCodeFragmentVM by viewModels()
     override fun createVB() = HomeFragmentQrCodeBinding.inflate(layoutInflater)
@@ -51,6 +52,8 @@ class QrCodeFragment : BaseFragment<HomeFragmentQrCodeBinding, QrCodeFragmentVM>
 
     override fun initObserve() {
         observeLiveData(mViewModel.qrCode, ::showQrCode)
+        lifecycle.addObserver(this)
+
     }
 
     private fun showQrCode(qrCode: String) {

+ 54 - 51
module_home/src/main/java/com/quyunshuo/module/home/fragment/vm/BuyFragmentVM.kt

@@ -12,6 +12,7 @@ import com.quyunshuo.androidbaseframemvvm.common.constant.MMKVName
 import com.quyunshuo.androidbaseframemvvm.common.util.FileUtil
 import com.quyunshuo.module.home.fragment.repo.BuyFragmentRepo
 import com.quyunshuo.module.home.utils.SimplePlayerUtil
+import com.tencent.mmkv.MMKV
 import dagger.hilt.android.lifecycle.HiltViewModel
 import java.io.File
 import javax.inject.Inject
@@ -26,68 +27,73 @@ import javax.inject.Inject
 class BuyFragmentVM @Inject constructor(private val mRepo: BuyFragmentRepo) : BaseViewModel() {
     private val TAG = "BuyFragmentVM"
     private var simplePlayerUtil: SimplePlayerUtil? = null
-    private var playVideos: ArrayList<File>? = null
-    private var playVideoIndex:Int = 0;
-
+    private var playVideos: ArrayList<File> = arrayListOf()
+    private var playVideoIndex: Int = 0
 
     /**
-     * 获得可以播放的视频
+     * 获得可以播放的视频(根据广告规则播放)
      */
-    fun getPlayVideos(): ArrayList<File> {
-        var playVideos = ArrayList<File>()
-        //获得可以播放的video
-        val gson = Gson()
-
-        //存储广告规则 ,用于前台播放。
+    private fun getPlayVideos(): ArrayList<File> {
+        val playVideos = ArrayList<File>()
         val playRules = SpUtils.getString(MMKVName.PLAY_RULE, "")
-        if (playRules == "") {
-            return playVideos
-        }
-        var list = gson.fromJson<ArrayList<String>>(
-            playRules,
-            object : TypeToken<ArrayList<String?>?>() {}.type
-        )
-        if (list.size < 1) {
-            return playVideos
-        }
 
-        //1 本地的所有广告数据
-        val allFiles = FileUtil.getAllFiles(
-            Environment.getExternalStorageDirectory().path + "/adB/",
-            ""
-        )
-        if (allFiles == null || allFiles.size < 1) {
-            return playVideos
-        }
+        if (playRules!!.isEmpty()) return playVideos
+
+        val list: List<String> = Gson().fromJson(playRules, object : TypeToken<List<String>>() {}.type)
+
+        if (list.isEmpty()) return playVideos
 
-        //创建一个可以播放的list
-        allFiles!!.forEach {
-            for ((index, s) in list.withIndex()) {
-                if (it.name.split(".")[0] == s) {
-                    playVideos.add(it)
-                    Log.d(TAG, "getPlayVideos1: $playVideos")
-                    break
+        // 获取本地所有广告数据
+        val allFiles = FileUtil.getAllFiles("${Environment.getExternalStorageDirectory().path}/adB/", "")
+
+        allFiles?.forEach { file ->
+            list.forEach { rule ->
+                if (file.name.removeSuffix(".${file.extension}") == rule) {
+                    playVideos.add(file)
+                    Log.d(TAG, "Added to playVideos: $file")
+                    return@forEach
                 }
             }
         }
 
-        Log.d(TAG, "getPlayVideos2: $playVideos")
+        Log.d(TAG, "Total videos to play: ${playVideos.size}")
         return playVideos
     }
 
-    //开始播放
-    fun playvideo(simplePlayerUtil:SimplePlayerUtil) {
+    /**
+     * 获得可以播放的视频(读取本地文件)
+     */
+    private fun getPlayVideosLocal(): ArrayList<File> {
+        val playVideos = ArrayList<File>()
+        val allFiles = FileUtil.getAllFiles("${Environment.getExternalStorageDirectory().path}/adB/", "")
+
+        allFiles?.forEach { file ->
+            playVideos.add(file)
+            Log.d(TAG, "Added to local playVideos: $file")
+        }
+
+        Log.d(TAG, "Total local videos: ${playVideos.size}")
+        return playVideos
+    }
+
+    /**
+     * 开始播放
+     */
+    fun playVideo(simplePlayerUtil: SimplePlayerUtil) {
         playVideoIndex = 0
-        playVideos = getPlayVideos()
+        //是否根据广告规则播放
+        if (SpUtils.getBoolean(MMKVName.AD_RULE, true) == true) {
+            playVideos = getPlayVideos()
+        }else{
+            playVideos = getPlayVideosLocal()
+        }
+
         this.simplePlayerUtil = simplePlayerUtil
         with(simplePlayerUtil) {
-            setOnErrorListener(object : MediaPlayer.OnErrorListener {
-                override fun onError(mp: MediaPlayer?, what: Int, extra: Int): Boolean {
-                    Log.d(TAG, "onError: ")
-                    return true
-                }
-
-            })
+            setOnErrorListener { mp, what, extra ->
+                Log.d(TAG, "onError: ")
+                true
+            }
             setOnCompletionListener {
                 if (playVideoIndex >= playVideos!!.size) {
                     playVideoIndex = 0
@@ -102,15 +108,12 @@ class BuyFragmentVM @Inject constructor(private val mRepo: BuyFragmentRepo) : Ba
             setOnPreparedListener { Log.d(TAG, "onPrepared: ") }
 
             if (playVideos!!.size > 0) {
-                Log.d(TAG, "playvideo: "+playVideos!!.size+"...."+playVideoIndex)
+                Log.d(TAG, "playvideo: " + playVideos!!.size + "...." + playVideoIndex)
                 Log.d(TAG, "initRequestData: " + playVideos!![playVideoIndex])
                 simplePlayerUtil.setUrl(playVideos!![playVideoIndex].absolutePath)
-                Log.d(TAG, "onCompletion: " + playVideoIndex+":"+playVideos!!.size)
+                Log.d(TAG, "onCompletion: " + playVideoIndex + ":" + playVideos!!.size)
                 playVideoIndex++
             }
         }
     }
-
-
-
 }

+ 2 - 1
module_home/src/main/java/com/quyunshuo/module/home/utils/SimplePlayerUtil.kt

@@ -129,6 +129,7 @@ class SimplePlayerUtil : OnPreparedListener, OnCompletionListener,
                 onError(null, 0, 0)
             }
         }
+
     }
 
 
@@ -218,4 +219,4 @@ class SimplePlayerUtil : OnPreparedListener, OnCompletionListener,
     companion object {
         private const val TAG = "SimplePlayer"
     }
-}
+}

BIN
module_home/src/main/res/drawable/ico_contact2.png


+ 10 - 0
module_home/src/main/res/drawable/shape_name_phone.xml

@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+    android:shape="rectangle">
+    <solid android:color="#ffecf5" />
+    <corners
+        android:bottomLeftRadius="40dp"
+        android:bottomRightRadius="40dp"
+        android:topLeftRadius="40dp"
+        android:topRightRadius="40dp" />
+</shape>

+ 49 - 0
module_home/src/main/res/layout/home_contact.xml

@@ -0,0 +1,49 @@
+<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:id="@+id/ll_namePhone"
+    android:layout_width="wrap_content"
+    android:layout_height="wrap_content"
+    android:layout_alignParentBottom="true"
+    android:background="@drawable/shape_name_phone"
+    android:gravity="center_vertical"
+    android:paddingVertical="6dp"
+    android:paddingStart="6dp"
+    android:paddingRight="30dp"
+    app:layout_constraintBottom_toBottomOf="parent"
+    app:layout_constraintStart_toStartOf="parent">
+
+    <ImageView
+        android:id="@+id/home_imageview6"
+        android:layout_width="170dp"
+        android:layout_height="170dp"
+        android:layout_gravity="center"
+        android:src="@drawable/ico_contact2"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+
+    <TextView
+        android:id="@+id/tv_contact"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:layout_marginHorizontal="10dp"
+        android:text="联系人"
+        android:textColor="#8f4d7d"
+        android:textSize="52sp"
+        android:textStyle="bold"
+        app:layout_constraintStart_toEndOf="@+id/home_imageview6"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <TextView
+        android:id="@+id/tv_contact_way"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:text="联系方式"
+        android:textColor="#E45DBF"
+        android:textSize="52sp"
+        android:textStyle="bold"
+        app:layout_constraintStart_toStartOf="@+id/tv_contact"
+        app:layout_constraintTop_toBottomOf="@+id/tv_contact" />
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 8 - 1
module_home/src/main/res/layout/home_fragment_buy.xml

@@ -71,5 +71,12 @@
             app:layout_constraintStart_toStartOf="parent"
             app:layout_constraintTop_toBottomOf="@+id/tv_time" />
     </androidx.constraintlayout.widget.ConstraintLayout>
-
+    <!-- 引入复用的布局 -->
+    <include
+        android:id="@+id/il_contact"
+        layout="@layout/home_contact"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"/>
 </androidx.constraintlayout.widget.ConstraintLayout>