Browse Source

1.修改问题,第二版。

石慧云 4 years ago
parent
commit
1c0d92a1d4
39 changed files with 1164 additions and 129 deletions
  1. 1 1
      app/build.gradle
  2. 5 5
      app/src/main/java/com/quansu/heifengwuliu/activity/AddressAddActivity.kt
  3. 7 7
      app/src/main/java/com/quansu/heifengwuliu/activity/AllCarActivity.kt
  4. 2 4
      app/src/main/java/com/quansu/heifengwuliu/activity/ArticleDetailActivity.kt
  5. 18 2
      app/src/main/java/com/quansu/heifengwuliu/activity/GrabDetailsActivity.kt
  6. 2 2
      app/src/main/java/com/quansu/heifengwuliu/activity/WebViewActivity.kt
  7. 44 23
      app/src/main/java/com/quansu/heifengwuliu/component/CpApp.kt
  8. 1 1
      app/src/main/java/com/quansu/heifengwuliu/fragment/AddressFragment.kt
  9. 6 6
      app/src/main/java/com/quansu/heifengwuliu/fragment/DriverWayBillFragment.kt
  10. 6 6
      app/src/main/java/com/quansu/heifengwuliu/fragment/IndexFragment.kt
  11. 8 0
      app/src/main/java/com/quansu/heifengwuliu/fragment/OrderListFragment.kt
  12. 9 9
      app/src/main/java/com/quansu/heifengwuliu/fragment/OwnerMoreFragment.kt
  13. 8 8
      app/src/main/java/com/quansu/heifengwuliu/fragment/OwnerSingleFragment.kt
  14. 6 7
      app/src/main/java/com/quansu/heifengwuliu/fragment/WayBillFragment.kt
  15. 3 1
      app/src/main/java/com/quansu/heifengwuliu/model/DataInfoBean.kt
  16. 124 0
      app/src/main/java/com/quansu/heifengwuliu/utils/PopuShareQRUtils.kt
  17. 317 0
      app/src/main/java/com/quansu/heifengwuliu/utils/SaveLocalUtils.java
  18. 276 0
      app/src/main/java/com/quansu/heifengwuliu/utils/ShareWxDilaog.kt
  19. 78 0
      app/src/main/java/com/quansu/heifengwuliu/utils/StringUtils.kt
  20. 1 1
      app/src/main/java/com/quansu/heifengwuliu/utils/net/ApiService.kt
  21. 34 0
      app/src/main/java/com/quansu/heifengwuliu/vmodel/AllCarVModel.kt
  22. 0 13
      app/src/main/java/com/quansu/heifengwuliu/vmodel/DriverOrderListVModel.kt
  23. 14 10
      app/src/main/java/com/quansu/heifengwuliu/vmodel/OrderListVModel.kt
  24. BIN
      app/src/main/res/drawable-xxhdpi/ic_more_friend.png
  25. BIN
      app/src/main/res/drawable-xxhdpi/ic_more_moment.png
  26. BIN
      app/src/main/res/drawable-xxhdpi/ic_more_save.png
  27. 80 0
      app/src/main/res/layout/activity_all_car.xml
  28. 1 0
      app/src/main/res/layout/fragment_mine.xml
  29. 1 0
      app/src/main/res/layout/fragment_order_list.xml
  30. 11 3
      app/src/main/res/layout/item_enterinfo.xml
  31. 68 0
      app/src/main/res/layout/item_qr.xml
  32. 2 2
      base/src/main/java/com/ysnows/base/base/BRActivity.kt
  33. 17 6
      base/src/main/java/com/ysnows/base/base/BRRepository.kt
  34. 2 1
      base/src/main/java/com/ysnows/base/base/BRViewModel.kt
  35. 1 1
      base/src/main/java/com/ysnows/base/route/IApp.kt
  36. 3 3
      build.gradle
  37. 5 4
      jpush/src/main/java/com/quansu/jpush/PushMessageReceiver.java
  38. 2 2
      lookimg/src/main/java/com/quansu/lookimg/ImagePagerActivity.kt
  39. 1 1
      settings.gradle

+ 1 - 1
app/build.gradle

@@ -119,7 +119,7 @@ dependencies {
     addComponent 'umeng'
     addComponent 'jpush'
     addComponent 'gaode'
-    addComponent 'lookimg'
+//    addComponent 'lookimg'
 
 
     //微信sdk

+ 5 - 5
app/src/main/java/com/quansu/heifengwuliu/activity/AddressAddActivity.kt

@@ -34,8 +34,8 @@ class AddressAddActivity : MBActivity<AddressAddVModel, ActivityAddressaddBindin
         super.__before()
         var bundle = intent.extras
         if (null != bundle)
-            type = bundle.getString("type","")
-           addr_id=bundle.getString("addr_id","")
+            type = bundle!!.getString("type","")
+           addr_id=bundle!!.getString("addr_id","")
     }
 
     override fun onCreate(savedInstanceState: Bundle?) {
@@ -65,10 +65,10 @@ class AddressAddActivity : MBActivity<AddressAddVModel, ActivityAddressaddBindin
             val bundle = data!!.extras
             if (null != bundle) {
 
-                vm.mapName=bundle.getString("cityname")
+                vm.mapName= bundle.getString("cityname")!!
 
-                vm.setCityValue(bundle.getString("province_code"),bundle.getString("city_code"),
-                        bundle.getString("area_code"),bundle.getString("name"))
+                vm.setCityValue(bundle!!.getString("province_code")!!,bundle.getString("city_code")!!,
+                        bundle.getString("area_code")!!,bundle.getString("name")!!)
 
             }
 

+ 7 - 7
app/src/main/java/com/quansu/heifengwuliu/activity/AllCarActivity.kt

@@ -5,12 +5,12 @@ import com.google.gson.Gson
 import com.quansu.heifengwuliu.R
 import com.quansu.heifengwuliu.adapter.CollectionAdapter
 import com.quansu.heifengwuliu.base.MBRActivity
-import com.quansu.heifengwuliu.databinding.ActivityCollectionBinding
+import com.quansu.heifengwuliu.databinding.ActivityAllCarBinding
 import com.quansu.heifengwuliu.model.DriverBean
 import com.quansu.heifengwuliu.model.SaveDriverBean
-import com.quansu.heifengwuliu.vmodel.CollectionVModel
+import com.quansu.heifengwuliu.vmodel.AllCarVModel
 
-class AllCarActivity : MBRActivity<CollectionVModel, CollectionAdapter, ActivityCollectionBinding>() {
+class AllCarActivity : MBRActivity<AllCarVModel, CollectionAdapter, ActivityAllCarBinding>() {
 
 
     override fun initView(view: View?) {
@@ -44,8 +44,8 @@ class AllCarActivity : MBRActivity<CollectionVModel, CollectionAdapter, Activity
     }
 
 
-    override fun binding(): ActivityCollectionBinding {
-        return ActivityCollectionBinding.inflate(layoutInflater)
+    override fun binding(): ActivityAllCarBinding {
+        return ActivityAllCarBinding.inflate(layoutInflater)
     }
 
 
@@ -58,7 +58,7 @@ class AllCarActivity : MBRActivity<CollectionVModel, CollectionAdapter, Activity
         return getString(R.string.add_vehicle)
     }
 
-    override fun vmClass(): Class<CollectionVModel> {
-        return CollectionVModel::class.java
+    override fun vmClass(): Class<AllCarVModel> {
+        return AllCarVModel::class.java
     }
 }

+ 2 - 4
app/src/main/java/com/quansu/heifengwuliu/activity/ArticleDetailActivity.kt

@@ -14,8 +14,6 @@ import com.quansu.heifengwuliu.utils.WebViewUtils
 import com.quansu.heifengwuliu.vmodel.ArticleDetailVModel
 import java.util.*
 import androidx.lifecycle.Observer
-import com.ysnows.base.R
-import com.ysnows.base.utils.StatusBarUtil
 
 
 /**
@@ -29,12 +27,12 @@ class ArticleDetailActivity: MBActivity<ArticleDetailVModel, ActivityArticleDeta
         super.init(savedInstanceState)
         initWeb() //初始化
 
-        var type=intent.extras.getInt("type",0)
+        var type=intent.extras?.getInt("type",0)
         titleBar()!!.setBackgroundColor(Color.parseColor("#ffffff"))
 
         if(type==-1){
             vm.isShow.value=true
-            vm.getMsgDetails(intent.extras.getString("id",""))
+            vm.getMsgDetails(intent.extras?.getString("id","")!!)
             titleBar()!!.setTitle("消息详情")
 
 

+ 18 - 2
app/src/main/java/com/quansu/heifengwuliu/activity/GrabDetailsActivity.kt

@@ -1,13 +1,16 @@
 package com.quansu.heifengwuliu.activity
 
+import android.graphics.Color.parseColor
 import android.os.Bundle
 import androidx.lifecycle.Observer
+import com.qmuiteam.qmui.kotlin.onClick
 import com.quansu.heifengwuliu.R
 import com.quansu.heifengwuliu.adapter.OrderInfoInadapter
 import com.quansu.heifengwuliu.adapter.OrderInfoadapter
 import com.quansu.heifengwuliu.base.MBActivity
 import com.quansu.heifengwuliu.databinding.ActivityGrabdetailsBinding
 import com.quansu.heifengwuliu.model.DataInfoBean
+import com.quansu.heifengwuliu.utils.ShareWxDilaog
 import com.quansu.heifengwuliu.vmodel.GrabDetailsVModel
 
 /**货源详情-司机端
@@ -17,10 +20,11 @@ import com.quansu.heifengwuliu.vmodel.GrabDetailsVModel
 class GrabDetailsActivity : MBActivity<GrabDetailsVModel, ActivityGrabdetailsBinding>() {
 
 
+    var shareUrl=""
     override fun init(savedInstanceState: Bundle?) {
         super.init(savedInstanceState)
-//        titleBar()?.tvRight?.text = getString(R.string.share)
-//        titleBar()?.tvRight?.setTextColor(parseColor("#FFBC00"))
+        titleBar()?.tvRight?.text = getString(R.string.share)
+        titleBar()?.tvRight?.setTextColor(parseColor("#FFBC00"))
 
         var info_id = intent?.extras?.getString("info_id", "")
 
@@ -29,6 +33,7 @@ class GrabDetailsActivity : MBActivity<GrabDetailsVModel, ActivityGrabdetailsBin
 
         vm.info.observe(this, Observer {
             //观察
+            shareUrl=vm.info.value!!.order.qrcode
             initViewPager(vm.info.value!!)
 
         })
@@ -37,6 +42,17 @@ class GrabDetailsActivity : MBActivity<GrabDetailsVModel, ActivityGrabdetailsBin
 
     }
 
+
+    override fun listeners() {
+        super.listeners()
+        titleBar()?.tvRight?.onClick {
+
+            ShareWxDilaog.show(context(),shareUrl)
+        }
+
+    }
+
+
     private fun initViewPager(bean: DataInfoBean){
         var positionName=bean.order.receive[bean.order.receive.size-1].province.name+bean.order.receive[bean.order.receive.size-1].city.name+bean.order.receive[bean.order.receive.size-1].city.name
 

+ 2 - 2
app/src/main/java/com/quansu/heifengwuliu/activity/WebViewActivity.kt

@@ -18,7 +18,7 @@ open class WebViewActivity : MBActivity<BViewModel<BRepository>, ActivityWebview
         settings.javaScriptEnabled = true
 
 
-        binding.webView.loadUrl(intent?.extras?.getString("url", "http://www.baidu.com"))
+        intent?.extras?.getString("url", "http://www.baidu.com")?.let { binding.webView.loadUrl(it) }
     }
 
     override fun binding(): ActivityWebviewBinding {
@@ -46,4 +46,4 @@ open class WebViewActivity : MBActivity<BViewModel<BRepository>, ActivityWebview
         }
     }
 
-}
+}

+ 44 - 23
app/src/main/java/com/quansu/heifengwuliu/component/CpApp.kt

@@ -1,15 +1,13 @@
 package com.quansu.heifengwuliu.component
 
-import android.R.id.message
 import android.content.Intent
-import android.os.Bundle
 import com.billy.cc.core.component.CC
 import com.billy.cc.core.component.CCResult
 import com.billy.cc.core.component.IComponent
 import com.hwangjr.rxbus.RxBus
-import com.quansu.heifengwuliu.activity.MsgActivity
 import com.quansu.heifengwuliu.config.ConfigRx
 import com.quansu.heifengwuliu.model.bean.OneLoginBean
+import com.quansu.heifengwuliu.utils.StringUtils
 import com.ysnows.base.ccextension.BIComponent
 import com.ysnows.base.model.PositionBean
 
@@ -17,25 +15,27 @@ import com.ysnows.base.model.PositionBean
 open class CpApp() : IComponent, BIComponent() {
 
 
-     fun setLogin(cc: CC, token: String): Boolean {
+    fun setLogin(cc: CC, token: String): Boolean {
 
 
-         RxBus.get().post(ConfigRx.ADD_ONELOGIN, token)
+        RxBus.get().post(ConfigRx.ADD_ONELOGIN, token)
 
-         CC.sendCCResult(cc.callId, CCResult.success())
+        CC.sendCCResult(cc.callId, CCResult.success())
 
         return false
     }
-     fun isError(cc: CC, code: Int, msg: String): Boolean {
-         val oneLoginBean = OneLoginBean(code, msg)
-         RxBus.get().post(ConfigRx.ONELOGIN_ERROR, oneLoginBean)
-         CC.sendCCResult(cc.callId, CCResult.success())
 
-         return false
+    fun isError(cc: CC, code: Int, msg: String): Boolean {
+        val oneLoginBean = OneLoginBean(code, msg)
+        RxBus.get().post(ConfigRx.ONELOGIN_ERROR, oneLoginBean)
+        CC.sendCCResult(cc.callId, CCResult.success())
+
+        return false
     }
-    fun setDatas(cc: CC, item: PositionBean): Boolean{
 
-        var areaname=item.areaname
+    fun setDatas(cc: CC, item: PositionBean): Boolean {
+
+        var areaname = item.areaname
 
         RxBus.get().post(ConfigRx.ADD_POSITION, item)
 
@@ -44,23 +44,44 @@ open class CpApp() : IComponent, BIComponent() {
         return false
     }
 
-    fun openMsgList(cc: CC): Boolean{//打开消息列表
-
+    fun openMsgList(cc: CC, url: String): Boolean {//打开消息列表
 
         try {
-            //打开自定义的Activity
-            val i = Intent(cc.context, MsgActivity::class.java)
-            val bundle = Bundle()
-            i.putExtras(bundle)
-            //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
-            i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
-            cc.context.startActivity(i)
-        } catch (throwable: Throwable) {
+            if (url.contains("?")) {
+
+                val i = Intent(cc.context, Class.forName(StringUtils.getPureUrl(url)))
+                val bundle = StringUtils.getUrlBundle(url)
+                i.putExtras(bundle!!)
+                i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
+                cc.context.startActivity(i)
+
+            } else {
+
+                val i = Intent(cc.context, Class.forName(url))
+                i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
+                cc.context.startActivity(i)
+
+
+            }
+        } catch (e: ClassNotFoundException) {
+            e.printStackTrace();
         }
 
+//        try {
+//            //打开自定义的Activity
+//            val i = Intent(cc.context, MsgActivity::class.java)
+//            val bundle = Bundle()
+//            i.putExtras(bundle)
+//            //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+//            i.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP
+//            cc.context.startActivity(i)
+//        } catch (throwable: Throwable) {
+//        }
+
 
         CC.sendCCResult(cc.callId, CCResult.success())
         return false
     }
 
+
 }

+ 1 - 1
app/src/main/java/com/quansu/heifengwuliu/fragment/AddressFragment.kt

@@ -30,7 +30,7 @@ class AddressFragment : MBRFragment<AddressVModel, AddressAdapter, FragmentAddre
         super.__before(savedInstanceState)
         val arguments = arguments
         if (null != arguments) {
-            type = arguments.getString("type")
+            type = arguments.getString("type")!!
             isShow = arguments.getString("isShow", "1")
         }
     }

+ 6 - 6
app/src/main/java/com/quansu/heifengwuliu/fragment/DriverWayBillFragment.kt

@@ -85,14 +85,14 @@ class DriverWayBillFragment : MBTabFragment<DriverWayBillVModel, FragmentWaybill
                 var name = bundle.getString("name")
                 if (type == 1) {
 
-                    vm.area_out = bundle.getString("area_code")
-                    vm.province_out = bundle.getString("province_code")
-                    vm.city_out = bundle.getString("city_code")
+                    vm.area_out = bundle.getString("area_code")!!
+                    vm.province_out = bundle.getString("province_code")!!
+                    vm.city_out = bundle.getString("city_code")!!
                     vm.name_out.value = name
                 } else {
-                    vm.area_in = bundle.getString("area_code")
-                    vm.province_in = bundle.getString("province_code")
-                    vm.city_in = bundle.getString("city_code")
+                    vm.area_in = bundle.getString("area_code")!!
+                    vm.province_in = bundle.getString("province_code")!!
+                    vm.city_in = bundle.getString("city_code")!!
                     vm.name_in.value = name
                 }
 

+ 6 - 6
app/src/main/java/com/quansu/heifengwuliu/fragment/IndexFragment.kt

@@ -102,14 +102,14 @@ class IndexFragment : MBRFragment<IndexVModel, IndexAdapter, FragmentIndexBindin
                 var name = bundle.getString("name")
                 if (type == 1) {
 
-                    vm.area_out = bundle.getString("area_code")
-                    vm.province_out = bundle.getString("province_code")
-                    vm.city_out = bundle.getString("city_code")
+                    vm.area_out = bundle.getString("area_code")!!
+                    vm.province_out = bundle.getString("province_code")!!
+                    vm.city_out = bundle.getString("city_code")!!
                     vm.name_out.value = name
                 } else {
-                    vm.area_in = bundle.getString("area_code")
-                    vm.province_in = bundle.getString("province_code")
-                    vm.city_in = bundle.getString("city_code")
+                    vm.area_in = bundle.getString("area_code")!!
+                    vm.province_in = bundle.getString("province_code")!!
+                    vm.city_in = bundle.getString("city_code")!!
                     vm.name_in.value = name
                 }
 

+ 8 - 0
app/src/main/java/com/quansu/heifengwuliu/fragment/OrderListFragment.kt

@@ -21,6 +21,11 @@ class OrderListFragment : MBRFragment<OrderListVModel, OrderListAdapter, Fragmen
         vm.infoState = arguments?.getString("info_state")
     }
 
+    override fun init(savedInstanceState: Bundle?) {
+        super.init(savedInstanceState)
+        vm.ll=binding.ll
+    }
+
     override fun initAdapter(): OrderListAdapter {
         return OrderListAdapter(vm)
     }
@@ -38,6 +43,9 @@ class OrderListFragment : MBRFragment<OrderListVModel, OrderListAdapter, Fragmen
         return OrderListVModel::class.java
     }
 
+    override val isRxbus: Boolean
+        get() = true
+
     override val isNeedRefresh: Boolean
         get() = true
 

+ 9 - 9
app/src/main/java/com/quansu/heifengwuliu/fragment/OwnerMoreFragment.kt

@@ -467,18 +467,18 @@ class OwnerMoreFragment : MBFragment<OwnerMoreVModel, FragmentOwnermoreBinding>(
                 var name = bundle.getString("name")
                 if (vm.type == 1) {
 
-                    area_out = bundle.getString("area_code")
-                    province_out = bundle.getString("province_code")
-                    city_out = bundle.getString("city_code")
-                    cityName_out= bundle.getString("cityname")
+                    area_out = bundle.getString("area_code")!!
+                    province_out = bundle.getString("province_code")!!
+                    city_out = bundle.getString("city_code")!!
+                    cityName_out= bundle.getString("cityname")!!
                     binding.viewHead.getTvCity()!!.text = name
                 } else {
                     var list = adapter!!.data as ArrayList<ReceiveBean>
-                    list[vm.position].area = bundle.getString("area_code")
-                    list[vm.position].province = bundle.getString("province_code")
-                    list[vm.position].city = bundle.getString("city_code")
-                    list[vm.position].city_name = bundle.getString("cityname")
-                    list[vm.position].pca = name
+                    list[vm.position].area = bundle.getString("area_code")!!
+                    list[vm.position].province = bundle.getString("province_code")!!
+                    list[vm.position].city = bundle.getString("city_code")!!
+                    list[vm.position].city_name = bundle.getString("cityname")!!
+                    list[vm.position].pca = name!!
                     adapter!!.notifyItemChanged(vm.position)
 
                 }

+ 8 - 8
app/src/main/java/com/quansu/heifengwuliu/fragment/OwnerSingleFragment.kt

@@ -513,17 +513,17 @@ class OwnerSingleFragment : MBFragment<OwnerSingleVModel, FragmentOwnersingleBin
                 var name = bundle.getString("name")
                 if (type == 1) {
 
-                    area_out = bundle.getString("area_code")
-                    province_out = bundle.getString("province_code")
-                    city_out = bundle.getString("city_code")
-                    cityName_out = bundle.getString("cityname")
+                    area_out = bundle.getString("area_code")!!
+                    province_out = bundle.getString("province_code")!!
+                    city_out = bundle.getString("city_code")!!
+                    cityName_out = bundle.getString("cityname")!!
 
                     binding.viewHead.getTvCity()!!.text = name
                 } else {
-                    area_in = bundle.getString("area_code")
-                    province_in = bundle.getString("province_code")
-                    city_in = bundle.getString("city_code")
-                    cityName_in = bundle.getString("cityname")
+                    area_in = bundle.getString("area_code")!!
+                    province_in = bundle.getString("province_code")!!
+                    city_in = bundle.getString("city_code")!!
+                    cityName_in = bundle.getString("cityname")!!
 
                     binding.viewEnter.getTvCity()!!.text = name
                 }

+ 6 - 7
app/src/main/java/com/quansu/heifengwuliu/fragment/WayBillFragment.kt

@@ -78,7 +78,6 @@ class WayBillFragment : MBTabFragment<DriverWayBillVModel, FragmentWaybillBindin
 
             }
             5 -> {
-                var ownerFragment = OrderListFragment()
                 ownerFragment.arguments = B().putString("info_state", "40").ok()
                 return ownerFragment
 
@@ -180,14 +179,14 @@ class WayBillFragment : MBTabFragment<DriverWayBillVModel, FragmentWaybillBindin
                 var name = bundle.getString("name")
                 if (type == 1) {
 
-                    vm.area_out = bundle.getString("area_code")
-                    vm.province_out = bundle.getString("province_code")
-                    vm.city_out = bundle.getString("city_code")
+                    vm.area_out = bundle.getString("area_code")!!
+                    vm.province_out = bundle.getString("province_code")!!
+                    vm.city_out = bundle.getString("city_code")!!
                     vm.name_out.value = name
                 } else {
-                    vm.area_in = bundle.getString("area_code")
-                    vm.province_in = bundle.getString("province_code")
-                    vm.city_in = bundle.getString("city_code")
+                    vm.area_in = bundle.getString("area_code")!!
+                    vm.province_in = bundle.getString("province_code")!!
+                    vm.city_in = bundle.getString("city_code")!!
                     vm.name_in.value = name
                 }
 

+ 3 - 1
app/src/main/java/com/quansu/heifengwuliu/model/DataInfoBean.kt

@@ -60,7 +60,9 @@ data class DataInfoBean(var goods_type: List<SelectData>, var nums_type: List<St
                          var create_time: String, var update_time: String,
                          var delete_time: String, var send: List<SendBean>,
                          var receive: List<ReceiveBean>,
-                         var type_info: TypeInfoBean,var car_nums:String) : IModel {
+                         var type_info: TypeInfoBean,var car_nums:String,
+                         var qrcode:String
+    ) : IModel {
 
 
         data class TypeInfoBean(var type_id: String, var type_name: String,  var length: String,

+ 124 - 0
app/src/main/java/com/quansu/heifengwuliu/utils/PopuShareQRUtils.kt

@@ -0,0 +1,124 @@
+package com.quansu.heifengwuliu.utils
+
+import android.Manifest
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.Context
+import android.graphics.Bitmap
+import android.view.LayoutInflater
+import android.view.View
+import android.widget.*
+import coil.load
+import com.qmuiteam.qmui.kotlin.onClick
+import com.qmuiteam.qmui.layout.QMUIFrameLayout
+import com.qmuiteam.qmui.skin.QMUISkinValueBuilder
+import com.qmuiteam.qmui.util.QMUIDisplayHelper
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+import com.qmuiteam.qmui.widget.popup.QMUIPopup
+import com.qmuiteam.qmui.widget.popup.QMUIPopups
+import com.quansu.heifengwuliu.R
+import com.quansu.heifengwuliu.inte.ChoiceData
+import com.yanzhenjie.permission.Action
+import com.yanzhenjie.permission.AndPermission
+
+/**
+ * 保存二维码
+ *Created by shihuiyun
+ *on 2020/9/21
+ */
+object  PopuShareQRUtils {
+
+    fun show(context:Context, url:String,view: View){
+
+        var mNormalPopup = QMUIPopups.fullScreenPopup(context)
+        val builder: QMUISkinValueBuilder = QMUISkinValueBuilder.acquire()
+        val frameLayout = QMUIFrameLayout(context)
+        //自定义布局
+        val layoutInflater = context?.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
+        var layout = layoutInflater.inflate(R.layout.item_qr, null)
+
+        val ivClose:ImageView=layout.findViewById(R.id.iv_close)
+        val img:ImageView=layout.findViewById(R.id.img)
+        val tvSave:TextView=layout.findViewById(R.id.tv_save)
+
+        img.load(url)
+
+
+        ivClose.onClick {
+            mNormalPopup.dismiss()
+        }
+
+        tvSave.onClick {
+
+            //保存图片到本地
+            saveImageToGallery(context,url)
+
+            mNormalPopup.dismiss()
+        }
+
+
+        builder.release();
+
+        val size= QMUIDisplayHelper.getScreenWidth(context)
+
+
+        val lp: FrameLayout.LayoutParams = FrameLayout.LayoutParams(size,
+                FrameLayout.LayoutParams.WRAP_CONTENT)
+        frameLayout.addView(layout, lp)
+
+        mNormalPopup.addView(frameLayout)
+        mNormalPopup.onDismiss() {
+        }
+
+        mNormalPopup.dismissIfOutsideTouch(false)
+        mNormalPopup.animStyle(QMUIPopup.ANIM_GROW_FROM_CENTER)
+        mNormalPopup.show(view)
+
+
+    }
+
+
+    /**
+     * 保存到系统相册
+     */
+    @SuppressLint("WrongConstant")
+    fun saveImageToGallery(context: Context,url: String) {
+        AndPermission.with(context)
+                .runtime()
+                .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
+                        Manifest.permission.READ_EXTERNAL_STORAGE,
+                        Manifest.permission.CAMERA
+                )
+                .onGranted(Action<List<String?>?>
+
+                {
+                    setSaveImg(context, url)
+                }
+                ).start()
+    }
+
+    fun setSaveImg(context: Context,url: String) {
+
+        var tipDialog = QMUITipDialog.Builder(context)
+                .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+                .setTipWord("正在保存图片...")
+                .create()
+
+
+        Thread(Runnable {
+            val bitmap: Bitmap = SaveLocalUtils.returnBitMap(url)
+            SaveLocalUtils.saveBitmap(context, bitmap, "loc" + System.currentTimeMillis() + ".png")
+            //                SaveLocalUtils.saveBmp2Gallery(
+//                        getContext(), bitmap,
+//                        "loc" + System.currentTimeMillis());
+            (context as Activity).runOnUiThread {
+                tipDialog!!.dismiss()
+                Toast.makeText(context, "图片已保存在手机相册下!", Toast.LENGTH_LONG).show()
+                //Toasts.toast(context, "图片已保存在相册CANDYIMG文件夹下!");
+
+            }
+        }).start()
+    }
+
+
+}

+ 317 - 0
app/src/main/java/com/quansu/heifengwuliu/utils/SaveLocalUtils.java

@@ -0,0 +1,317 @@
+package com.quansu.heifengwuliu.utils;
+
+import android.app.Dialog;
+import android.content.ContentValues;
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.graphics.Canvas;
+import android.graphics.Matrix;
+import android.net.Uri;
+import android.os.Build;
+import android.os.Environment;
+import android.provider.MediaStore;
+import android.util.Log;
+
+
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog;
+import com.ysnows.base.utils.UiUtils;
+
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.net.HttpURLConnection;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class SaveLocalUtils {
+
+
+    public static Bitmap returnBitMap(final String url) {
+
+
+//        String url1;
+
+//        try {
+//            url1 = url.substring(0, url.indexOf("?"));
+//
+//        } catch (Exception e) {
+//            url1 = url;
+//        }
+
+
+        Bitmap bitmap = null;
+
+        URL imageurl = null;
+
+        try {
+            imageurl = new URL(url);
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        }
+        try {
+            HttpURLConnection conn = (HttpURLConnection) imageurl.openConnection();
+            conn.setDoInput(true);
+            conn.connect();
+            InputStream is = conn.getInputStream();
+            bitmap = BitmapFactory.decodeStream(is);
+            is.close();
+
+        } catch (IOException e) {
+            e.printStackTrace();
+            Log.e("--shy-", "e=: "+e );
+        }
+
+
+        return bitmap;
+    }
+
+    /**
+     * 保存图片到本地
+     *
+     * @param context
+     * @param bmp
+     * @param picName
+     */
+    public static String saveBmp2Gallery(Context context, Bitmap bmp, String picName) {
+
+//        File appDir = new File(Environment.getExternalStorageDirectory(), "CANDYIMG");
+//        if (!appDir.exists()) {
+//            appDir.mkdir();
+//        }
+//        String filePath = Environment.getExternalStorageDirectory() + "/CANDYIMG/";
+
+        //创建文件路径
+        File dir=new File(context.getExternalFilesDir(null).getPath()+"CANDYIMG");
+        if (!dir.exists()){
+            dir.mkdir();
+        }
+
+        // 声明文件对象
+        File file = null;
+        // 声明输出流
+        try {
+
+            //创建文件
+             file = new File(dir+"/"+picName + ".png");
+            if (!file.exists()){
+                file.createNewFile();
+            }
+
+            // 如果有目标文件,直接获得文件对象,否则创建一个以filename为名称的文件
+            //file = new File(filePath, picName + ".png");
+            // 获得输出流,如果文件中有内容,追加内容
+            FileOutputStream fos = new FileOutputStream(file);
+            bmp.compress(Bitmap.CompressFormat.PNG, 100, fos);
+            fos.flush();
+            fos.close();
+            Intent intent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
+            Uri uri = Uri.fromFile(file);
+            intent.setData(uri);
+            context.sendBroadcast(new Intent(intent));
+            return file.getAbsolutePath();
+        } catch (Exception e) {
+            e.getStackTrace();
+
+            Log.e("--shy-", "e222=: "+e );
+
+        }
+        return "";
+    }
+
+
+    /**
+     * 将view转成bitmap
+     */
+    public static Bitmap setCreateBitmap(String url) {
+
+        URL myFileUrl;
+        Bitmap cachebmp = null;
+        try {
+            myFileUrl = new URL(url);
+            HttpURLConnection conn;
+            conn = (HttpURLConnection) myFileUrl.openConnection();
+            conn.setDoInput(true);
+            conn.connect();
+            InputStream is = conn.getInputStream();
+            cachebmp = BitmapFactory.decodeStream(is);
+            return cachebmp;
+
+        } catch (MalformedURLException e) {
+            e.printStackTrace();
+        } catch (IOException e) {
+            e.printStackTrace();
+        }
+        return null;
+
+
+
+    }
+
+
+    /**
+     * 将view转成bitmap
+     */
+    public static Bitmap setCreateBitmap2(Context context, Bitmap background, Bitmap foreground) {
+
+        int bgWidthNew = UiUtils.dp2Px(context,214);
+        int bgHeightNew = UiUtils.dp2Px(context,380);
+        int fgWidthNew = UiUtils.dp2Px(context,54);
+        int fgHeightNew = UiUtils.dp2Px(context,54);
+
+        Bitmap bgBitmapNew = restartImg(background,bgWidthNew,bgHeightNew);
+        Bitmap fgBitmapNew = restartImg(foreground,fgWidthNew,fgHeightNew);
+
+        Bitmap newBitmap = Bitmap.createBitmap(bgWidthNew, bgHeightNew, Bitmap.Config.ARGB_8888);
+        Canvas canvas = new Canvas(newBitmap);
+        canvas.drawBitmap(bgBitmapNew, 0, 0, null);
+        canvas.drawBitmap(fgBitmapNew, (bgWidthNew - fgWidthNew) / 2,
+                        bgHeightNew-fgHeightNew- UiUtils.dp2Px(context,14), null);
+        canvas.save();
+        canvas.restore();
+        return newBitmap;
+
+    }
+
+    public static Bitmap restartImg(Bitmap bitMap, int newWidth, int newHeight){
+
+        int width = bitMap.getWidth();
+        int height = bitMap.getHeight();
+        // 计算缩放比例
+        float scaleWidth = ((float) newWidth) / width;
+        float scaleHeight = ((float) newHeight) / height;
+        // 取得想要缩放的matrix参数
+        Matrix matrix = new Matrix();
+        matrix.postScale(scaleWidth, scaleHeight);
+        // 得到新的图片
+        bitMap = Bitmap.createBitmap(bitMap, 0, 0, width, height, matrix, true);
+        return bitMap;
+    }
+
+
+
+    /*
+     * 保存文件,文件名为当前日期
+     */
+    public static  boolean saveBitmap(Context context, Bitmap bitmap, String bitName) {
+
+
+        String fileName;
+        File file;
+        String brand = Build.BRAND;
+
+        if (brand.equals("xiaomi")) { // 小米手机brand.equals("xiaomi")
+            fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/" + bitName;
+        } else if (brand.equalsIgnoreCase("Huawei")) {
+            fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/" + bitName;
+        } else { // Meizu 、Oppo
+            fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/" + bitName;
+        }
+//        fileName = Environment.getExternalStorageDirectory().getPath() + "/DCIM/Camera/" + bitName;
+        if (Build.VERSION.SDK_INT >= 29) {
+//            boolean isTrue = saveSignImage(bitName, bitmap);
+            saveSignImage(context,bitName,bitmap);
+            return true;
+//            file= getPrivateAlbumStorageDir(NewPeoActivity.this, bitName,brand);
+//            return isTrue;
+        } else {
+            Log.v("saveBitmap brand", "" + brand);
+            file =new File(fileName);
+        }
+        if (file.exists()) {
+            file.delete();
+        }
+        FileOutputStream out;
+        try {
+            out = new FileOutputStream(file);
+// 格式为 JPEG,照相机拍出的图片为JPEG格式的,PNG格式的不能显示在相册中
+            if (bitmap.compress(Bitmap.CompressFormat.JPEG, 90, out)) {
+                out.flush();
+                out.close();
+// 插入图库
+                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
+                    ContentValues values = new ContentValues();
+                    values.put(MediaStore.Images.Media.DATA,  file.getAbsolutePath());
+                    values.put(MediaStore.Images.Media.MIME_TYPE, "image/jpeg");
+                    Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
+                }else{
+                    MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), bitName, null);
+
+                }
+
+            }
+
+        } catch (FileNotFoundException e) {
+            Log.e("FileNotFoundException", "FileNotFoundException:" + e.getMessage().toString());
+            e.printStackTrace();
+            return false;
+        } catch (IOException e) {
+            Log.e("IOException", "IOException:" + e.getMessage().toString());
+            e.printStackTrace();
+            return false;
+        } catch (Exception e) {
+            Log.e("IOException", "IOException:" + e.getMessage().toString());
+            e.printStackTrace();
+            return false;
+
+// 发送广播,通知刷新图库的显示
+
+        }
+//        if(Build.VERSION.SDK_INT >= 29){
+//            copyPrivateToDownload(this,file.getAbsolutePath(),bitName);
+//        }
+        context.sendBroadcast(new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE, Uri.parse("file://" + fileName)));
+
+        return true;
+
+    }
+
+
+    //将文件保存到公共的媒体文件夹
+//这里的filepath不是绝对路径,而是某个媒体文件夹下的子路径,和沙盒子文件夹类似
+//这里的filename单纯的指文件名,不包含路径
+    public static void saveSignImage(/*String filePath,*/Context context, String fileName, Bitmap bitmap) {
+        try {
+            //设置保存参数到ContentValues中
+            ContentValues contentValues = new ContentValues();
+            //设置文件名
+            contentValues.put(MediaStore.Images.Media.DISPLAY_NAME, fileName);
+            //兼容Android Q和以下版本
+            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
+                //android Q中不再使用DATA字段,而用RELATIVE_PATH代替
+                //RELATIVE_PATH是相对路径不是绝对路径
+                //DCIM是系统文件夹,关于系统文件夹可以到系统自带的文件管理器中查看,不可以写没存在的名字
+                contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "DCIM/");
+                //contentValues.put(MediaStore.Images.Media.RELATIVE_PATH, "Music/signImage");
+            } else {
+                contentValues.put(MediaStore.Images.Media.DATA, Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES).getPath());
+            }
+            //设置文件类型
+            contentValues.put(MediaStore.Images.Media.MIME_TYPE, "image/JPEG");
+            //执行insert操作,向系统文件夹中添加文件
+            //EXTERNAL_CONTENT_URI代表外部存储器,该值不变
+            Uri uri = context.getContentResolver().insert(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, contentValues);
+            if (uri != null) {
+                //若生成了uri,则表示该文件添加成功
+                //使用流将内容写入该uri中即可
+                OutputStream outputStream = context.getContentResolver().openOutputStream(uri);
+                if (outputStream != null) {
+                    bitmap.compress(Bitmap.CompressFormat.JPEG, 90, outputStream);
+                    outputStream.flush();
+                    outputStream.close();
+                }
+            }
+        } catch (Exception e) {
+        }
+    }
+
+
+
+
+
+
+}

+ 276 - 0
app/src/main/java/com/quansu/heifengwuliu/utils/ShareWxDilaog.kt

@@ -0,0 +1,276 @@
+package com.quansu.heifengwuliu.utils
+
+import android.Manifest
+import android.annotation.SuppressLint
+import android.app.Activity
+import android.content.ComponentName
+import android.content.Context
+import android.content.Intent
+import android.graphics.Bitmap
+import android.net.Uri
+import android.os.Build
+import android.os.Environment
+import android.provider.MediaStore
+import android.util.Log
+import android.widget.Toast
+import com.qmuiteam.qmui.skin.QMUISkinManager
+import com.qmuiteam.qmui.widget.dialog.QMUIBottomSheet.BottomGridSheetBuilder
+import com.qmuiteam.qmui.widget.dialog.QMUITipDialog
+import com.quansu.heifengwuliu.R
+import com.yanzhenjie.permission.Action
+import com.yanzhenjie.permission.AndPermission
+import com.zhy.http.okhttp.OkHttpUtils
+import com.zhy.http.okhttp.callback.FileCallBack
+import okhttp3.Call
+import java.io.File
+import java.io.FileNotFoundException
+import java.util.*
+
+
+/**
+ * 分享给好友,朋友圈,保存到本地
+ *Created by shihuiyun
+ *on 2020/10/10
+ */
+object ShareWxDilaog {
+
+    var chose = 1
+    private const val title = "分享"
+
+    var tipDialog: QMUITipDialog? = null
+    private var downimg: String? = null
+    private val uriArrayList = ArrayList<Uri>() //下载到本地的图片的集合
+
+
+    fun show(context: Context, url: String) {
+        var TAG_SHARE_WECHAT_FRIEND = 0
+        var TAG_SHARE_WECHAT_MOMENT = 1
+        var TAG_SHARE_LOCAL = 3
+        val builder = BottomGridSheetBuilder(context)
+        builder.addItem(R.drawable.ic_more_friend, "分享到微信", TAG_SHARE_WECHAT_FRIEND, BottomGridSheetBuilder.FIRST_LINE)
+                .addItem(R.drawable.ic_more_moment, "分享到朋友圈", TAG_SHARE_WECHAT_MOMENT, BottomGridSheetBuilder.FIRST_LINE)
+                .addItem(R.drawable.ic_more_save, "保存到本地", TAG_SHARE_LOCAL, BottomGridSheetBuilder.FIRST_LINE)
+                .setAddCancelBtn(true)
+                .setSkinManager(QMUISkinManager.defaultInstance(context))
+                .setOnSheetItemClickListener { dialog, itemView ->
+                    dialog.dismiss()
+                    val tag = itemView.tag as Int
+                    when (tag) {
+                        TAG_SHARE_WECHAT_FRIEND -> {//微信
+
+
+                            //分享给好友
+                            chose = 1
+                            setShareImages(context,url)
+                        }
+                        TAG_SHARE_WECHAT_MOMENT -> {//朋友圈
+
+
+                            //分享给朋友圈
+                            chose = 2
+                            setShareImages(context,url)
+
+
+                        }
+                        TAG_SHARE_LOCAL -> {//保存到本地
+
+                            saveImageToGallery(context,url)
+                        }
+
+                    }
+                }.build().show()
+    }
+
+
+    /**
+     * 保存到系统相册
+     */
+    @SuppressLint("WrongConstant")
+    fun saveImageToGallery(context: Context,url: String) {
+        AndPermission.with(context)
+                .runtime()
+                .permission(Manifest.permission.WRITE_EXTERNAL_STORAGE,
+                        Manifest.permission.READ_EXTERNAL_STORAGE,
+                        Manifest.permission.CAMERA
+                )
+                .onGranted(Action<List<String?>?>
+                /**
+                 * @param data
+                 */
+                /**
+                 * @param data
+                 */
+                {
+                    setSaveImg(context,url)
+                }
+                ).start()
+    }
+
+    fun setSaveImg(context: Context,url: String) {
+
+        tipDialog = QMUITipDialog.Builder(context)
+                .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+                .setTipWord("正在保存图片...")
+                .create()
+
+
+        Thread(Runnable {
+            val bitmap: Bitmap = SaveLocalUtils.returnBitMap(url)
+            SaveLocalUtils.saveBitmap(context, bitmap, "loc" + System.currentTimeMillis() + ".png")
+            //                SaveLocalUtils.saveBmp2Gallery(
+//                        getContext(), bitmap,
+//                        "loc" + System.currentTimeMillis());
+            (context as Activity).runOnUiThread {
+                this.tipDialog!!.dismiss()
+                Toast.makeText(context, "图片已保存在手机相册下!", Toast.LENGTH_LONG).show()
+                //Toasts.toast(context, "图片已保存在相册CANDYIMG文件夹下!");
+
+            }
+        }).start()
+    }
+
+
+    fun setShareImages(context: Context, url: String) {
+        tipDialog = QMUITipDialog.Builder(context)
+                .setIconType(QMUITipDialog.Builder.ICON_TYPE_LOADING)
+                .setTipWord("正在保存图片...")
+                .create()
+
+
+        //下载图片
+        startDownImg(url, context)
+
+    }
+
+    /**
+     * @param photoPathL 下载图片
+     */
+    private fun startDownImg(photoPathL: String, con: Context) {
+
+        //先下载图片
+        okHttpSaveImg(photoPathL, 1, con)
+    }
+
+    private fun okHttpSaveImg(imgUrl: String, position: Int, con: Context?) {
+        val filePath: String = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+            con!!.filesDir.absolutePath
+        } else {
+            getSDPath() + "/revoeye/"
+        }
+        if (con == null) {
+            // Toasts.toast(con, con.getString(R.string.action_share)+con.getString(R.string.fail)+con.getString(R.string.the_comma)+con.getString(R.string.please_share_it_later));
+            return
+        }
+        OkHttpUtils
+                .get()
+                .url(imgUrl)
+                .build() //
+                .execute(object : FileCallBack(filePath, position.toString() + "heifengwuliu.jpg" //
+                ) {
+                    override fun onError(call: Call, e: Exception, id: Int) {
+                        if (con != null) {
+                            Log.e("Exception:", e.toString())
+                        }
+                    }
+
+                    override fun onResponse(response: File, id: Int) {
+                        if (con != null) {
+                            if (response != null) {
+                                val mUri: Uri
+                                mUri = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
+                                    /**Android 7.0以上的方式 */
+                                    //                            mUri = getUriForFile(mContext, "com.muxi.ant.fileprovider", response);
+                                    if (con != null) {
+                                        Uri.parse(insertImageToSystem(con, response.absolutePath))
+                                    } else {
+                                        return
+                                    }
+                                } else {
+                                    Uri.fromFile(response)
+                                }
+
+                                //uriArrayList.add(mUri);
+                                downimg = mUri.toString()
+                                if (uriArrayList.size > 0) {
+                                    uriArrayList.clear()
+                                }
+                                uriArrayList.add(Uri.parse(downimg))
+                                if (con != null) {
+                                    share(con)
+                                }
+                            }
+                        }
+                    }
+                })
+    }
+
+
+    private fun share(context: Context) {
+
+
+        tipDialog!!.dismiss()
+
+        if (chose == 1) { //微信好友
+            val uriToImage = Uri.parse(downimg)
+
+            //图片
+            val shareIntent = Intent()
+            //发送图片到朋友圈
+            //ComponentName comp = new ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareToTimeLineUI");
+            //发送图片给好友。
+            val comp = ComponentName("com.tencent.mm", "com.tencent.mm.ui.tools.ShareImgUI")
+            shareIntent.component = comp
+            shareIntent.action = Intent.ACTION_SEND
+            shareIntent.putExtra(Intent.EXTRA_STREAM, uriToImage)
+            shareIntent.type = "image/jpeg"
+            context.startActivity(Intent.createChooser(shareIntent, title))
+
+        }
+        if (chose == 2) { //微信朋友圈
+            val componentName = ComponentName("com.tencent.mm",
+                    "com.tencent.mm.ui.tools.ShareToTimeLineUI")
+            var intent = Intent()
+            intent.component = componentName
+            intent.type = "image/*"
+            if (uriArrayList.size > 1) {
+                intent.action = Intent.ACTION_SEND_MULTIPLE
+                intent.putExtra(Intent.EXTRA_STREAM, uriArrayList) //图片数据(支持本地图片的Uri形式)
+            } else if (uriArrayList.size == 1) {
+                intent.action = Intent.ACTION_SEND
+                intent.putExtra(Intent.EXTRA_STREAM, uriArrayList[0]) //图片数据(支持本地图片的Uri形式)
+            }
+            intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION
+                    or Intent.FLAG_GRANT_WRITE_URI_PERMISSION)
+            intent.putExtra("Kdescription", title)
+            intent.putExtra(Intent.EXTRA_TEXT, title) //正常使用的文字
+
+            context.startActivity(intent)
+
+
+        }
+    }
+
+
+    private const val SHARE_PIC_NAME = "Name"
+
+    private fun insertImageToSystem(context: Context, imagePath: String): String? {
+        var url: String? = ""
+        try {
+            url = MediaStore.Images.Media.insertImage(context.contentResolver, imagePath, SHARE_PIC_NAME, "你对图片的描述")
+        } catch (e: FileNotFoundException) {
+            e.printStackTrace()
+        }
+        return url
+    }
+
+    fun getSDPath(): String? {
+        var sdDir: File? = null
+        val sdCardExist = Environment.getExternalStorageState() == Environment.MEDIA_MOUNTED //判断sd卡是否存在
+        if (sdCardExist) {
+            sdDir = Environment.getExternalStorageDirectory() //获取跟目录
+        }
+        return sdDir.toString()
+    }
+
+
+}

+ 78 - 0
app/src/main/java/com/quansu/heifengwuliu/utils/StringUtils.kt

@@ -0,0 +1,78 @@
+package com.quansu.heifengwuliu.utils
+
+import android.os.Bundle
+import java.util.*
+
+/**
+ *Created by shihuiyun
+ *on 2020/10/10
+ */
+ object StringUtils {
+
+
+    fun isEmpty(str: String?): Boolean {
+        return null == str || "" == str
+    }
+
+    /**
+     * 剔除参数
+     *
+     * @param url
+     *
+     * @return
+     */
+    fun getPureUrl(url: String): String? {
+        var url = url
+        if (url.contains("?")) {
+            url = url.substring(0, url.indexOf("?"))
+        }
+        return url
+    }
+
+    /**
+     * 把url中所含有的参数转换为bundle对象
+     *
+     * @param url
+     *
+     * @return
+     */
+    fun getUrlBundle(url: String): Bundle? {
+        val params = getParams(url)
+        val iterator = params.keys.iterator()
+        val bundle = Bundle()
+        while (iterator.hasNext()) {
+            val next = iterator.next()
+            bundle.putString(next, params[next])
+        }
+        return bundle
+    }
+
+    /**
+     * 获取url中的所有参数
+     *
+     * @param url
+     *
+     * @return
+     */
+    fun getParams(url: String): Map<String, String> {
+        var url = url
+        if (url.contains("&") && url.contains("?")) {
+            url = url.substring(url.indexOf("?") + 1, url.length)
+        } else if (url.contains("?")) {
+            url = url.substring(url.indexOf("?") + 1, url.length)
+        }
+        val params = url.split("&".toRegex()).toTypedArray()
+        val map: MutableMap<String, String> = HashMap()
+        for (param in params) {
+            val name = param.split("=".toRegex()).toTypedArray()[0]
+            var value: String = try {
+                param.split("=".toRegex()).toTypedArray()[1]
+            } catch (e: Exception) {
+                ""
+            }
+            map[name] = value
+        }
+        return map
+    }
+
+}

+ 1 - 1
app/src/main/java/com/quansu/heifengwuliu/utils/net/ApiService.kt

@@ -266,7 +266,7 @@ interface ApiService {
      * @return
      */
     @GET("api/driver/allDriver")
-    fun allDriver(@Query("k") k: String?, @Query("p") p: Int): Observable<Resp<List<DriverBean>>>
+    suspend  fun allDriver(@Query("k") k: String?, @Query("p") p: Int): Resp<List<DriverBean>>
 
     /**
      * 常用司机-添加收藏

+ 34 - 0
app/src/main/java/com/quansu/heifengwuliu/vmodel/AllCarVModel.kt

@@ -0,0 +1,34 @@
+package com.quansu.heifengwuliu.vmodel
+
+import android.app.Activity
+import android.app.Application
+import android.content.Intent
+import com.quansu.heifengwuliu.utils.net.NetEngine
+import com.ysnows.base.net.IResp
+import io.reactivex.Observable
+
+class AllCarVModel(application: Application) : SearchVModel(application) {
+
+
+    fun setSaveDriver(arr: String) {
+        //添加司机
+
+        repository()
+                .rxLreq(NetEngine.service.setDriver(arr))
+                .doOnNext {
+                    if (it.ok(true)) {
+                        val intent = Intent()
+                        var con = repository().context as Activity
+                        con.setResult(Activity.RESULT_OK, intent)
+                        con.finish()
+                    }
+                }
+                .subscribe()
+    }
+
+    override fun apiFunc(): suspend () -> IResp<*> {
+        return { NetEngine.service.allDriver(k, repository().page) }
+    }
+
+
+}

+ 0 - 13
app/src/main/java/com/quansu/heifengwuliu/vmodel/DriverOrderListVModel.kt

@@ -8,12 +8,8 @@ import com.quansu.heifengwuliu.fragment.DriverOrderListFragment
 import com.quansu.heifengwuliu.utils.net.NetEngine
 import com.ysnows.base.base.BRRepository
 import com.ysnows.base.base.BRViewModel
-import com.ysnows.base.ccretrofit.CCRetrofit
 import com.ysnows.base.net.IResp
-import com.ysnows.base.route.ILookimg
 import com.ysnows.base.utils.UiSwitch
-import io.reactivex.Observable
-import java.util.ArrayList
 
 class DriverOrderListVModel(application: Application) : BRViewModel<BRRepository>(application) {
 
@@ -54,15 +50,6 @@ class DriverOrderListVModel(application: Application) : BRViewModel<BRRepository
     }
 
 
-    fun toLookImg(qrcode: String) {
-        var list = ArrayList<String>()
-        list.add(qrcode)
-        CCRetrofit.instance()
-                .with(repository().context)
-                .create(ILookimg::class.java)
-                .previewImageArr(list, 0)
-                .subscribe()
-    }
 
     override fun apiFunc(): suspend () -> IResp<*> {
         return { NetEngine.service.myList(

+ 14 - 10
app/src/main/java/com/quansu/heifengwuliu/vmodel/OrderListVModel.kt

@@ -3,15 +3,14 @@ package com.quansu.heifengwuliu.vmodel
 import android.app.Application
 import android.os.Bundle
 import android.text.TextUtils
+import android.widget.LinearLayout
 import com.quansu.heifengwuliu.activity.SourceDetailsActivity
+import com.quansu.heifengwuliu.utils.PopuShareQRUtils
 import com.quansu.heifengwuliu.utils.net.NetEngine
 import com.ysnows.base.base.BRRepository
 import com.ysnows.base.base.BRViewModel
-import com.ysnows.base.ccretrofit.CCRetrofit
 import com.ysnows.base.net.IResp
-import com.ysnows.base.route.ILookimg
 import com.ysnows.base.utils.UiSwitch
-import java.util.ArrayList
 
 class OrderListVModel(application: Application) : BRViewModel<BRRepository>(application) {
 
@@ -26,6 +25,7 @@ class OrderListVModel(application: Application) : BRViewModel<BRRepository>(appl
     var k=""
 
     var infoState: String? = null
+    var ll: LinearLayout? =null
 
     fun getOrderStatus(status: Int): String {
         return when (status) {
@@ -56,13 +56,17 @@ class OrderListVModel(application: Application) : BRViewModel<BRRepository>(appl
             toast("没有二维码!")
             return
         }
-        var list= ArrayList<String>()
-        list.add(qrcode)
-        CCRetrofit.instance()
-                .with(repository().context)
-                .create(ILookimg::class.java)
-                .previewImageArr(list,0)
-                .subscribe()
+
+        PopuShareQRUtils.show(repository().context!!,qrcode, ll!!)
+
+
+//        var list= ArrayList<String>()
+//        list.add(qrcode)
+//        CCRetrofit.instance()
+//                .with(repository().context)
+//                .create(ILookimg::class.java)
+//                .previewImageArr(list,0)
+//                .subscribe()
     }
 
     override fun apiFunc(): suspend () -> IResp<*> {

BIN
app/src/main/res/drawable-xxhdpi/ic_more_friend.png


BIN
app/src/main/res/drawable-xxhdpi/ic_more_moment.png


BIN
app/src/main/res/drawable-xxhdpi/ic_more_save.png


+ 80 - 0
app/src/main/res/layout/activity_all_car.xml

@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="utf-8"?>
+<layout 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" >
+
+    <data >
+
+        <variable
+            name="vm"
+            type="com.quansu.heifengwuliu.vmodel.AllCarVModel" />
+    </data >
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:background="@color/color_bg"
+        android:orientation="vertical" >
+
+        <com.quansu.heifengwuliu.widget.SearchView
+            android:id="@+id/search"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            app:vm="@{vm}" />
+
+        <FrameLayout
+            android:layout_width="match_parent"
+            android:layout_height="match_parent" >
+
+            <androidx.swiperefreshlayout.widget.SwipeRefreshLayout
+                android:id="@+id/refresh_layout"
+                android:layout_width="match_parent"
+                android:layout_height="match_parent" >
+
+                <androidx.recyclerview.widget.RecyclerView
+                    android:id="@+id/recycler_view"
+                    android:layout_width="match_parent"
+                    android:layout_height="match_parent"
+                    android:paddingBottom="106dp"
+                    app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
+                    tools:listitem="@layout/item_collection" />
+
+            </androidx.swiperefreshlayout.widget.SwipeRefreshLayout >
+
+
+
+
+            <FrameLayout
+                android:id="@+id/fl_sure"
+                android:layout_width="match_parent"
+                android:layout_marginStart="16dp"
+                android:layout_marginEnd="@dimen/dp_16"
+                android:layout_gravity="bottom"
+                android:layout_height="wrap_content">
+                <ImageView
+                    android:layout_width="match_parent"
+                    android:layout_height="106dp"
+                    android:src="@drawable/ic_details_grab" />
+
+                <TextView
+                    android:id="@+id/tv_sure"
+                    android:layout_width="wrap_content"
+                    android:layout_gravity="center"
+                    android:text="添加车辆"
+                    android:textColor="@color/white"
+                    android:textSize="16sp"
+                    android:layout_height="wrap_content">
+
+                </TextView>
+
+            </FrameLayout>
+
+
+
+
+        </FrameLayout >
+
+    </LinearLayout >
+
+</layout >

+ 1 - 0
app/src/main/res/layout/fragment_mine.xml

@@ -371,6 +371,7 @@
                             android:layout_width="0dp"
                             android:layout_height="wrap_content"
                             android:layout_weight="1"
+                            android:onClick="@{v->vm.toCall(vm.user.kf_mobile)}"
                             android:gravity="center"
                             android:orientation="vertical">
 

+ 1 - 0
app/src/main/res/layout/fragment_order_list.xml

@@ -8,6 +8,7 @@
     </data >
 
     <LinearLayout
+        android:id="@+id/ll"
         android:layout_width="match_parent"
         android:layout_height="match_parent"
         android:background="@color/color_bg"

+ 11 - 3
app/src/main/res/layout/item_enterinfo.xml

@@ -16,15 +16,23 @@
             type="com.quansu.heifengwuliu.model.DataInfoBean.OrderBean.ReceiveBean" />
     </data>
 
-    <LinearLayout xmlns:tools="http://schemas.android.com/tools"
+    <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout
+        xmlns:tools="http://schemas.android.com/tools"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
+        android:layout_marginTop="9dp"
+        android:paddingTop="10dp"
+        android:paddingBottom="10dp"
+        android:paddingLeft="5dp"
+        app:qmui_borderColor="#E3E4E5"
+        app:qmui_backgroundColor="@color/white"
+        app:qmui_borderWidth="@dimen/dp_1"
+        app:qmui_radius="@dimen/dp_10"
         android:orientation="vertical">
 
         <LinearLayout
             android:layout_width="match_parent"
             android:layout_height="wrap_content"
-            android:layout_marginTop="9dp"
             android:gravity="center_vertical"
             android:orientation="horizontal">
 
@@ -177,7 +185,7 @@
         </LinearLayout>
 
 
-    </LinearLayout>
+    </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout>
 
 
 </layout>

+ 68 - 0
app/src/main/res/layout/item_qr.xml

@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    android:layout_width="match_parent"
+    android:layout_height="wrap_content"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:orientation="vertical">
+
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:orientation="vertical"
+        android:padding="@dimen/dp_10">
+        
+        <ImageView
+            android:id="@+id/iv_close"
+            android:layout_width="26dp"
+            android:src="@drawable/ic_dialog_close"
+            android:layout_gravity="right"
+            android:layout_marginEnd="27dp"
+            android:layout_height="26dp"/>
+
+
+        <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:layout_marginStart="27dp"
+            android:layout_marginEnd="27dp"
+            android:layout_marginTop="12dp"
+            app:qmui_radius="8dp"
+            android:gravity="center_horizontal"
+            app:qmui_backgroundColor="@color/white"
+            app:qmui_borderColor="@color/white"
+            android:orientation="vertical">
+
+            <ImageView
+                android:id="@+id/img"
+                android:layout_width="123dp"
+                tools:src="@drawable/bg_need_error"
+                android:layout_marginTop="34dp"
+                android:scaleType="fitXY"
+                android:layout_height="123dp"/>
+
+            <View
+                android:layout_width="match_parent"
+                android:background="#E3E4E5"
+                android:layout_marginTop="49dp"
+                android:layout_height="1dp"/>
+
+            <TextView
+                android:id="@+id/tv_save"
+                android:layout_width="match_parent"
+                android:text="保存图片"
+                android:textSize="17sp"
+                android:textColor="#FFBC00"
+                android:gravity="center"
+                android:layout_height="56dp"/>
+
+
+
+        </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundLinearLayout>
+
+
+    </LinearLayout>
+
+
+</LinearLayout>

+ 2 - 2
base/src/main/java/com/ysnows/base/base/BRActivity.kt

@@ -81,7 +81,7 @@ abstract class BRActivity<VM : BRViewModel<*>, A : BaseQuickAdapter<*, out BaseV
         if (ev.action == MotionEvent.ACTION_DOWN) {
             val v = currentFocus
             if (isShouldHideKeyboard(v, ev)) {
-                hideKeyboard(v.windowToken)
+                hideKeyboard(v!!.windowToken)
             }
         }
         return super.dispatchTouchEvent(ev)
@@ -130,4 +130,4 @@ abstract class BRActivity<VM : BRViewModel<*>, A : BaseQuickAdapter<*, out BaseV
 
     override fun adapter(): A = mAdapter
 
-}
+}

+ 17 - 6
base/src/main/java/com/ysnows/base/base/BRRepository.kt

@@ -1,6 +1,7 @@
 package com.ysnows.base.base
 
 import android.annotation.SuppressLint
+import android.util.Log
 import com.ysnows.base.emptyview.callback.EmptyCallback
 import com.ysnows.base.emptyview.callback.LoadingCallback
 import com.ysnows.base.emptyview.callback.TimeoutCallback
@@ -56,18 +57,28 @@ open class BRRepository : BRepository() {
 
                 bView.processCodeOffline()
             } else {
+
                 if (page <= 1) {
                     if (resp.empty()) { //如果没有数据
-                        if (pageLoading) {
-                            view().loadService?.showCallback(EmptyCallback::class.java)
-                        }
+
+                        view().loadService?.showCallback(EmptyCallback::class.java)
+
+//                        if (pageLoading) {//列表还未有数据
+//
+//                            view().loadService?.showCallback(EmptyCallback::class.java)
+//                        }
+
+
                     } else {
                         view().adapter().setList(resp.data() as Collection<Nothing>)
-                        if (pageLoading) {
-                            bView.loadService?.showSuccess()
-                        }
+
+                        bView.loadService?.showSuccess()
+//                        if (pageLoading) {
+//                            bView.loadService?.showSuccess()
+//                        }
                     }
                 } else {
+
                     view().adapter().addData(resp.data() as Collection<Nothing>)
                 }
 

+ 2 - 1
base/src/main/java/com/ysnows/base/base/BRViewModel.kt

@@ -1,6 +1,7 @@
 package com.ysnows.base.base
 
 import android.app.Application
+import android.util.Log
 import androidx.databinding.Observable.OnPropertyChangedCallback
 import androidx.databinding.PropertyChangeRegistry
 import androidx.lifecycle.viewModelScope
@@ -102,4 +103,4 @@ abstract class BRViewModel<R : BRRepository>(application: Application) : BViewMo
 
     abstract fun apiFunc(): suspend () -> IResp<*>
 
-}
+}

+ 1 - 1
base/src/main/java/com/ysnows/base/route/IApp.kt

@@ -10,7 +10,7 @@ interface IApp : IRoute {
     fun setLogin(@Param("token") token: String): Observable<CCResult>
     fun isError(@Param("code") code: Int,@Param("msg") msg: String):Observable<CCResult>
     fun setDatas(@Param("item") item: PositionBean): Observable<CCResult>
-    fun openMsgList(): Observable<CCResult>
+    fun openMsgList(@Param("url") url: String): Observable<CCResult>
 
 
 

+ 3 - 3
build.gradle

@@ -11,10 +11,10 @@ buildscript {
     ext.application_id = "com.quansu.heifengwuliu"
     ext.application_version_code = 1
     ext.application_version_name = "1.0.1"
-    ext.support_version = "28.0.0"
+    ext.support_version = "29.0.2"
     ext.min_sdk_version = 23
-    ext.target_sdk_version = 28
-    ext.compile_sdk_version = 28
+    ext.target_sdk_version = 30
+    ext.compile_sdk_version = 30
 
     repositories {
         google()

+ 5 - 4
jpush/src/main/java/com/quansu/jpush/PushMessageReceiver.java

@@ -4,6 +4,7 @@ import android.content.Context;
 import android.content.Intent;
 import android.os.Handler;
 import android.os.Message;
+import android.text.TextUtils;
 import android.util.Log;
 
 import com.quansu.jpush.utils.Alias;
@@ -90,12 +91,12 @@ public class PushMessageReceiver extends JPushMessageReceiver {
         String data=notificationMessage.notificationExtras;
         try {
             JSONObject mapJSON = new JSONObject(data);
-            String type=mapJSON.getString("type");
-            Log.e("-shy-", "type=:"+type );
-            if(type.equals("1")){//type为1的时候跳到 消息列表
+            String android_url=mapJSON.getString("android_url");
+            Log.e("-shy-", "type=:"+android_url);
+            if(!TextUtils.isEmpty(android_url)){//type为1的时候跳到 消息列表
                 CCRetrofit.instance()
                         .create(IApp.class)
-                        .openMsgList()
+                        .openMsgList(android_url)
                         .subscribe();
             }
         } catch (JSONException e) {

+ 2 - 2
lookimg/src/main/java/com/quansu/lookimg/ImagePagerActivity.kt

@@ -26,8 +26,8 @@ class ImagePagerActivity : BActivity<ImagePagerVModel, ActivityImagepagerBinding
     override fun __before() {
         super.__before()
 
-        urls = intent.extras.getStringArrayList("urls")
-        position = intent.extras.getInt("position")
+        urls = intent.extras?.getStringArrayList("urls")
+        position = intent.extras?.getInt("position")!!
 
 
     }

+ 1 - 1
settings.gradle

@@ -2,6 +2,6 @@ include ':jpush'
 include ':umeng'
 include ':update'
 include ':gaode'
-include ':lookimg'
+//include ':lookimg'
 
 include ':app',':base'