Commit 931ff79c authored by shiyl's avatar shiyl

Merge branch 'dev_commodity' into feature/dev_order

# Conflicts:
#	CommonLib/BCommon/src/main/java/com/yidian/bcommon/bean/LocalUploadImageBean.kt
#	CommonLib/BCommon/src/main/java/com/yidian/bcommon/services/ImageService.kt
#	CommonLib/BCommon/src/main/res/drawable-xxhdpi/bg_launcher.9.png
#	CommonLib/BCommon/src/main/res/drawable-xxhdpi/icon_launcher_bg.png
#	Components/BRoot/src/main/res/layout/activity_flash.xml
#	Components/BXBridBusiness/src/main/assets/www
#	Components/BXBridBusiness/src/main/java/com/yidian/shenghuoquan/bxbirdbusiness/ui/CommonWebViewActivity.kt
parents 070ac106 b15ac1b5
package com.yidian.bcommon.bean
import com.yidian.xarc.xrouter.ResultResolver
import java.io.File
/**
* author: yinjiacheng
* date: 7/20/21 11:36 PM
* description: 准备上传的图片数据结构
*/
data class LocalUploadImageBean(val info: LocalSelectedImageBean, val file: File, val resolver: ResultResolver)
...@@ -10,11 +10,8 @@ import com.luck.picture.lib.config.PictureMimeType ...@@ -10,11 +10,8 @@ import com.luck.picture.lib.config.PictureMimeType
import com.luck.picture.lib.entity.LocalMedia import com.luck.picture.lib.entity.LocalMedia
import com.luck.picture.lib.listener.OnResultCallbackListener import com.luck.picture.lib.listener.OnResultCallbackListener
import com.luck.picture.lib.manager.PictureCacheManager import com.luck.picture.lib.manager.PictureCacheManager
import com.yidian.bcommon.bean.*
import com.yidian.bcommon.YdBaseApplication import com.yidian.bcommon.YdBaseApplication
import com.yidian.bcommon.bean.ActionSelectImageParamsBean
import com.yidian.bcommon.bean.LocalSelectedImageBean
import com.yidian.bcommon.bean.SelectedImageBean
import com.yidian.bcommon.bean.UploadImageBean
import com.yidian.bcommon.utils.GlideEngine import com.yidian.bcommon.utils.GlideEngine
import com.yidian.framework.mobile.insight.manage.XInsight import com.yidian.framework.mobile.insight.manage.XInsight
import com.yidian.framework.mobile.insight.storage.ImageUploadListener import com.yidian.framework.mobile.insight.storage.ImageUploadListener
...@@ -24,10 +21,12 @@ import com.yidian.xpage.observer.DStackActivityManager ...@@ -24,10 +21,12 @@ import com.yidian.xpage.observer.DStackActivityManager
import com.yidian.yac.core.zap.ZapService import com.yidian.yac.core.zap.ZapService
import org.json.JSONArray import org.json.JSONArray
import org.json.JSONObject import org.json.JSONObject
import timber.log.Timber
import java.io.File import java.io.File
import java.io.FileInputStream import java.io.FileInputStream
import java.io.FileOutputStream import java.io.FileOutputStream
import java.util.* import java.util.*
import java.util.concurrent.ConcurrentLinkedQueue
import kotlin.collections.ArrayList import kotlin.collections.ArrayList
/** /**
...@@ -94,6 +93,16 @@ class ImageService : ZapService() { ...@@ -94,6 +93,16 @@ class ImageService : ZapService() {
*/ */
private val picOriginalPath by lazy { YdBaseApplication.context.externalCacheDir?.absolutePath + "/picture_selector_original/" } private val picOriginalPath by lazy { YdBaseApplication.context.externalCacheDir?.absolutePath + "/picture_selector_original/" }
/**
* 图片上传队列
*/
private val uploadPicQueue by lazy { ConcurrentLinkedQueue<LocalUploadImageBean>() }
/**
* 准备上传的图片数量
*/
private var uploadPicCount = 0
/** /**
* @param resolver 此参数建议作为具体能力的方法入参 避免使用全局变量(异步回传H5结果时seq顺序错乱) * @param resolver 此参数建议作为具体能力的方法入参 避免使用全局变量(异步回传H5结果时seq顺序错乱)
*/ */
...@@ -167,6 +176,8 @@ class ImageService : ZapService() { ...@@ -167,6 +176,8 @@ class ImageService : ZapService() {
inputStream.close() inputStream.close()
localSelectedImages.add(LocalSelectedImageBean(uuid, it)) localSelectedImages.add(LocalSelectedImageBean(uuid, it))
} }
// 记录需要上传的图片数量
uploadPicCount = selectedList.size
// 成功回传数据 // 成功回传数据
resolver.success(JSONArray(gson.toJson(selectedList))) resolver.success(JSONArray(gson.toJson(selectedList)))
} }
...@@ -198,7 +209,10 @@ class ImageService : ZapService() { ...@@ -198,7 +209,10 @@ class ImageService : ZapService() {
return return
} }
val uuid = UUID.randomUUID().toString() val uuid = UUID.randomUUID().toString()
localSelectedImages.add(LocalSelectedImageBean(uuid, result[0]))
val inputStream = FileInputStream(result[0].compressPath) val inputStream = FileInputStream(result[0].compressPath)
// 记录需要上传的图片数量
uploadPicCount = 1
// 成功回传数据 // 成功回传数据
resolver.success( resolver.success(
JSONArray( JSONArray(
...@@ -213,7 +227,6 @@ class ImageService : ZapService() { ...@@ -213,7 +227,6 @@ class ImageService : ZapService() {
) )
) )
inputStream.close() inputStream.close()
localSelectedImages.add(LocalSelectedImageBean(uuid, result[0]))
} }
override fun onCancel() { override fun onCancel() {
...@@ -251,8 +264,24 @@ class ImageService : ZapService() { ...@@ -251,8 +264,24 @@ class ImageService : ZapService() {
resolver.fail(CODE_FILE_NOT_EXIST, "file not exist", "文件不存在") resolver.fail(CODE_FILE_NOT_EXIST, "file not exist", "文件不存在")
return return
} }
// 需要上传的图片入队列
uploadPicQueue.offer(LocalUploadImageBean(it, file, resolver))
if (uploadPicQueue.size == uploadPicCount) {
// 接收到所有图片的上传请求后 开始图片上传
Timber.tag(TAG).d("receive $uploadPicCount upload request, start upload!")
startUpload()
}
} ?: resolver.fail(CODE_FILE_NOT_EXIST, "file not exist", "文件不存在")
}
/**
* 开始执行图片上传
*/
private fun startUpload() {
val uploadPic = uploadPicQueue.poll() ?: return
Timber.tag(TAG).d("${uploadPic.info.uuid} uploading")
XInsight.uploadImage( XInsight.uploadImage(
file, ScenarioType.COMMODITY.scenario, uploadPic.file, ScenarioType.COMMODITY.scenario,
object : ImageUploadListener { object : ImageUploadListener {
override fun onTaskStart(tag: String?) { override fun onTaskStart(tag: String?) {
...@@ -271,19 +300,29 @@ class ImageService : ZapService() { ...@@ -271,19 +300,29 @@ class ImageService : ZapService() {
} }
override fun onTaskSuccess(bucket: String?, objectKey: String?, imageUploadBean: ImageUploadBean?, tag: String?) { override fun onTaskSuccess(bucket: String?, objectKey: String?, imageUploadBean: ImageUploadBean?, tag: String?) {
resolver.success(JSONObject(gson.toJson(imageUploadBean?.image_id?.let { imageId -> UploadImageBean(id, imageId) }))) Timber.tag(TAG).d("${uploadPic.info.uuid} upload success")
uploadPic.resolver.success(JSONObject(gson.toJson(imageUploadBean?.image_id?.let { imageId ->
UploadImageBean(
uploadPic.info.uuid,
imageId
)
})))
// 删除临时文件 // 删除临时文件
clearCache(picOriginalPath + it.data.fileName, it.data.compressPath) clearCache(picOriginalPath + uploadPic.info.data.fileName, uploadPic.info.data.compressPath)
// 开始下一张图片上传
startUpload()
} }
override fun onTaskFailure(code: Int, msg: String?, tag: String?) { override fun onTaskFailure(code: Int, msg: String?, tag: String?) {
resolver.fail(CODE_FILE_UPLOAD_FAIL, "upload failed", "上传失败") Timber.tag(TAG).d("${uploadPic.info.uuid} upload failure")
uploadPic.resolver.fail(CODE_FILE_UPLOAD_FAIL, "upload failed", "上传失败")
// 删除临时文件 // 删除临时文件
clearCache(picOriginalPath + it.data.fileName, it.data.compressPath) clearCache(picOriginalPath + uploadPic.info.data.fileName, uploadPic.info.data.compressPath)
// 开始下一张图片上传
startUpload()
} }
}, id }, uploadPic.info.uuid
) )
} ?: resolver.fail(CODE_FILE_NOT_EXIST, "file not exist", "文件不存在")
} }
/** /**
......
...@@ -48,4 +48,5 @@ ...@@ -48,4 +48,5 @@
<color name="color_F2F2F2">#F2F2F2</color> <color name="color_F2F2F2">#F2F2F2</color>
<color name="color_3693FF">#3693FF</color> <color name="color_3693FF">#3693FF</color>
<color name="color_1751F1">#1751F1</color> <color name="color_1751F1">#1751F1</color>
<color name="color_FF3A3A">#FF3A3A</color>
</resources> </resources>
...@@ -12,8 +12,8 @@ ...@@ -12,8 +12,8 @@
<!-- Base application theme. --> <!-- Base application theme. -->
<style name="FlashTheme" parent="Theme.AppCompat.Light.NoActionBar"> <style name="FlashTheme" parent="Theme.AppCompat.Light.NoActionBar">
<item name="android:windowIsTranslucent">false</item> <item name="android:windowIsTranslucent">false</item>
<item name="android:windowFullscreen">false</item> <item name="android:windowFullscreen">true</item>
<item name="android:windowBackground">@drawable/icon_launcher_bg</item> <item name="android:windowBackground">@drawable/bg_launcher</item>
</style> </style>
<style name="right_anim_style"> <style name="right_anim_style">
......
...@@ -3,7 +3,6 @@ ...@@ -3,7 +3,6 @@
android:id="@+id/clRoot" android:id="@+id/clRoot"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:background="@drawable/icon_launcher_bg"
android:fitsSystemWindows="true"> android:fitsSystemWindows="true">
</com.yidian.nightmode.widget.YdRelativeLayout> </com.yidian.nightmode.widget.YdRelativeLayout>
\ No newline at end of file
...@@ -7,12 +7,13 @@ import com.yidian.bcommon.XBirdPageConstants ...@@ -7,12 +7,13 @@ import com.yidian.bcommon.XBirdPageConstants
import com.yidian.bcommon.XRouterPathConstants import com.yidian.bcommon.XRouterPathConstants
import com.yidian.bcommon.extensions.initTitleBar import com.yidian.bcommon.extensions.initTitleBar
import com.yidian.bcommon.mvvm.BaseMvvmActivity import com.yidian.bcommon.mvvm.BaseMvvmActivity
import com.yidian.bcommon.utils.DialogUtils
import com.yidian.bcommon.utils.ToastUtils import com.yidian.bcommon.utils.ToastUtils
import com.yidian.bcommon.widget.CommonHintDialog
import com.yidian.shenghuoquan.bxbirdbusiness.R import com.yidian.shenghuoquan.bxbirdbusiness.R
import com.yidian.shenghuoquan.bxbirdbusiness.databinding.XbridActivityCommonWebViewBinding import com.yidian.shenghuoquan.bxbirdbusiness.databinding.XbridActivityCommonWebViewBinding
import com.yidian.xarc.xbrid.XBridManager import com.yidian.xarc.xbrid.XBridManager
import com.yidian.xarc.xbrid.XWebView import com.yidian.xarc.xbrid.XWebView
import com.yidian.xpage.XPageManager
import com.yidian.xpage.XPageViewProtocol import com.yidian.xpage.XPageViewProtocol
import timber.log.Timber import timber.log.Timber
...@@ -95,7 +96,16 @@ class CommonWebViewActivity : BaseMvvmActivity<XbridActivityCommonWebViewBinding ...@@ -95,7 +96,16 @@ class CommonWebViewActivity : BaseMvvmActivity<XbridActivityCommonWebViewBinding
override fun onBackPressed() { override fun onBackPressed() {
when (XBridManager.getXBridPageName(url)) { when (XBridManager.getXBridPageName(url)) {
XBirdPageConstants.COMMODITY_PUBLISH_COMMODITY -> { XBirdPageConstants.COMMODITY_PUBLISH_COMMODITY -> {
DialogUtils.showConfirmDialog(this, "返回后商品将不保存?") CommonHintDialog(this, "返回后,商品信息不会保存", arrayListOf("取消", "返回"), object : CommonHintDialog.OnHintOptionCallback {
override fun onLeftOption() {
}
override fun onRightOption() {
XPageManager.pop(null)
}
}, R.color.color_8F000000, R.color.color_FF3A3A).show()
} }
else -> { else -> {
super.onBackPressed() super.onBackPressed()
......
...@@ -306,7 +306,6 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), Me ...@@ -306,7 +306,6 @@ class MerchantCenterActivity : BaseActivity<ActivityMerchantCenterBinding>(), Me
// 我要发布-招聘 其他服务-职位管理 其他服务-系统设置 其他服务-认证管理 // 我要发布-招聘 其他服务-职位管理 其他服务-系统设置 其他服务-认证管理
functionPermissionList.add(data[0].functions[1].functionId) functionPermissionList.add(data[0].functions[1].functionId)
functionPermissionList.add(data[2].functions[1].functionId) functionPermissionList.add(data[2].functions[1].functionId)
functionPermissionList.add(data[2].functions[2].functionId)
functionPermissionList.add(data[2].functions[3].functionId) functionPermissionList.add(data[2].functions[3].functionId)
functionPermissionList.add(data[2].functions[4].functionId) functionPermissionList.add(data[2].functions[4].functionId)
} }
......
...@@ -48,7 +48,7 @@ ...@@ -48,7 +48,7 @@
android:layout_marginTop="24dp" android:layout_marginTop="24dp"
android:layout_marginEnd="19dp" android:layout_marginEnd="19dp"
app:cardCornerRadius="12dp" app:cardCornerRadius="12dp"
app:cardElevation="3dp" app:cardElevation="2dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_provide_services" /> app:layout_constraintTop_toBottomOf="@id/tv_provide_services" />
...@@ -61,7 +61,7 @@ ...@@ -61,7 +61,7 @@
android:layout_marginTop="19dp" android:layout_marginTop="19dp"
android:layout_marginEnd="19dp" android:layout_marginEnd="19dp"
app:cardCornerRadius="12dp" app:cardCornerRadius="12dp"
app:cardElevation="3dp" app:cardElevation="2dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/view_personal_auth" /> app:layout_constraintTop_toBottomOf="@id/view_personal_auth" />
......
...@@ -13,8 +13,7 @@ ...@@ -13,8 +13,7 @@
<FrameLayout <FrameLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="44dp" android:layout_height="44dp">
android:fitsSystemWindows="true">
<ImageView <ImageView
android:id="@+id/iv_back" android:id="@+id/iv_back"
...@@ -22,12 +21,8 @@ ...@@ -22,12 +21,8 @@
android:layout_height="28dp" android:layout_height="28dp"
android:layout_gravity="center_vertical" android:layout_gravity="center_vertical"
android:layout_marginStart="20dp" android:layout_marginStart="20dp"
android:paddingStart="10dp"
android:paddingTop="5dp"
android:paddingEnd="10dp"
android:paddingBottom="5dp"
android:scaleType="centerCrop" android:scaleType="centerCrop"
android:src="@drawable/big_back" android:src="@drawable/icon_back"
tools:ignore="ContentDescription" /> tools:ignore="ContentDescription" />
<TextView <TextView
...@@ -64,7 +59,8 @@ ...@@ -64,7 +59,8 @@
android:textColor="@color/gray_333" android:textColor="@color/gray_333"
android:textColorHint="@color/account_hint" android:textColorHint="@color/account_hint"
android:textCursorDrawable="@drawable/comment_dialog_cursor" android:textCursorDrawable="@drawable/comment_dialog_cursor"
android:textSize="16sp" /> android:textSize="16sp"
android:textStyle="bold" />
<View <View
android:id="@+id/v_divider" android:id="@+id/v_divider"
...@@ -106,6 +102,7 @@ ...@@ -106,6 +102,7 @@
android:paddingStart="20dp" android:paddingStart="20dp"
android:textColor="@color/gray_333" android:textColor="@color/gray_333"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold"
tools:ignore="RtlSymmetry" tools:ignore="RtlSymmetry"
tools:text="蓝小花15800000001" /> tools:text="蓝小花15800000001" />
......
...@@ -50,7 +50,7 @@ ...@@ -50,7 +50,7 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_marginTop="@dimen/dp32" android:layout_marginTop="@dimen/dp32"
app:cardCornerRadius="12dp" app:cardCornerRadius="12dp"
app:cardElevation="3dp" app:cardElevation="2dp"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/tv_sub_content" /> app:layout_constraintTop_toBottomOf="@id/tv_sub_content" />
......
...@@ -44,6 +44,7 @@ ...@@ -44,6 +44,7 @@
android:textColor="#333333" android:textColor="#333333"
android:textCursorDrawable="@drawable/shape_bg_input_cursor" android:textCursorDrawable="@drawable/shape_bg_input_cursor"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold"
tools:ignore="TextFields" /> tools:ignore="TextFields" />
<ImageView <ImageView
...@@ -59,7 +60,7 @@ ...@@ -59,7 +60,7 @@
<View <View
android:id="@+id/view_divider_mobile" android:id="@+id/view_divider_mobile"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="0.5dp"
android:layout_marginStart="40dp" android:layout_marginStart="40dp"
android:layout_marginEnd="40dp" android:layout_marginEnd="40dp"
android:background="#f2f2f2" /> android:background="#f2f2f2" />
...@@ -106,6 +107,7 @@ ...@@ -106,6 +107,7 @@
android:textColor="#333333" android:textColor="#333333"
android:textCursorDrawable="@drawable/shape_bg_input_cursor" android:textCursorDrawable="@drawable/shape_bg_input_cursor"
android:textSize="16sp" android:textSize="16sp"
android:textStyle="bold"
tools:ignore="TextFields" /> tools:ignore="TextFields" />
</RelativeLayout> </RelativeLayout>
...@@ -113,7 +115,7 @@ ...@@ -113,7 +115,7 @@
<View <View
android:id="@+id/view_divider_password" android:id="@+id/view_divider_password"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="1dp" android:layout_height="0.5dp"
android:layout_marginStart="40dp" android:layout_marginStart="40dp"
android:layout_marginEnd="40dp" android:layout_marginEnd="40dp"
android:background="#f2f2f2" /> android:background="#f2f2f2" />
......
...@@ -30,7 +30,7 @@ ...@@ -30,7 +30,7 @@
android:layout_marginTop="@dimen/dp30" android:layout_marginTop="@dimen/dp30"
android:visibility="gone" android:visibility="gone"
app:cardCornerRadius="@dimen/dp12" app:cardCornerRadius="@dimen/dp12"
app:cardElevation="@dimen/dp3" app:cardElevation="@dimen/dp2"
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/bv_top_bar" /> app:layout_constraintTop_toBottomOf="@id/bv_top_bar" />
......
...@@ -399,5 +399,9 @@ public static final int *; ...@@ -399,5 +399,9 @@ public static final int *;
#XInsight #XInsight
-keep public class com.megvii.**{*;} -keep public class com.megvii.**{*;}
-keep class com.yidian.framework.mobile.insight.**{*;} -keepnames class * implements java.io.Serializable
-keepattributes Signature
-keepattributes *Annotation*
-dontwarn sun.misc.**
-keep class com.google.gson.stream.**{*;}
...@@ -128,9 +128,9 @@ ext.dependencies = [ ...@@ -128,9 +128,9 @@ ext.dependencies = [
'io.reactivex.rxjava3:rxjava:3.0.9', 'io.reactivex.rxjava3:rxjava:3.0.9',
'com.yidian.framework.mobile:ydhttp:1.1.3-SNAPSHOT', 'com.yidian.framework.mobile:ydhttp:1.1.3-SNAPSHOT',
'com.yidian.framework.mobile:ydutils:1.0.1-SNAPSHOT', 'com.yidian.framework.mobile:ydutils:1.0.1-SNAPSHOT',
'com.yidian.framework.mobile:xdiamond:1.0.7', 'com.yidian.framework.mobile:xdiamond:1.0.8',
// 慧眼 // 慧眼
'com.yidian.framework.mobile.xinsight:xinsight:1.1.5', 'com.yidian.framework.mobile.xinsight:xinsight:1.1.7',
'com.loopj.android:android-async-http:1.4.9', 'com.loopj.android:android-async-http:1.4.9',
// 屏幕适配 // 屏幕适配
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment