diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
-
-
-
-
+
-
-
-
-
+
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
index bca9c08..e8c1e45 100644
--- a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
+++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
@@ -2,7 +2,7 @@
-
+
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
index bca9c08..e8c1e45 100644
--- a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
+++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
@@ -2,7 +2,7 @@
-
+
-
+ android:text="燃气智能监测管盯" />
+ android:src="@mipmap/well_location" />
@@ -177,6 +172,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:nestedScrollingEnabled="false"
android:scrollbars="none"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
@@ -204,6 +200,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_stroke_layout_radius_3"
android:gravity="top"
android:inputType="textMultiLine"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
index bca9c08..e8c1e45 100644
--- a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
+++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
@@ -2,7 +2,7 @@
-
+
-
+ android:text="燃气智能监测管盯" />
+ android:src="@mipmap/well_location" />
@@ -177,6 +172,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:nestedScrollingEnabled="false"
android:scrollbars="none"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
@@ -204,6 +200,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_stroke_layout_radius_3"
android:gravity="top"
android:inputType="textMultiLine"
diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml
new file mode 100644
index 0000000..8a87ae6
--- /dev/null
+++ b/app/src/main/res/layout/activity_big_image.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
index bca9c08..e8c1e45 100644
--- a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
+++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
@@ -2,7 +2,7 @@
-
+
-
+ android:text="燃气智能监测管盯" />
+ android:src="@mipmap/well_location" />
@@ -177,6 +172,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:nestedScrollingEnabled="false"
android:scrollbars="none"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
@@ -204,6 +200,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_stroke_layout_radius_3"
android:gravity="top"
android:inputType="textMultiLine"
diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml
new file mode 100644
index 0000000..8a87ae6
--- /dev/null
+++ b/app/src/main/res/layout/activity_big_image.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8157f41..a2a0bcd 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -91,7 +91,6 @@
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
android:theme="@style/Theme.MaterialComponents"
- android:visibility="gone"
app:backgroundTint="@color/mainThemeColor"
app:icon="@drawable/ic_add"
app:iconPadding="0dp"
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
index bca9c08..e8c1e45 100644
--- a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
+++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
@@ -2,7 +2,7 @@
-
+
-
+ android:text="燃气智能监测管盯" />
+ android:src="@mipmap/well_location" />
@@ -177,6 +172,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:nestedScrollingEnabled="false"
android:scrollbars="none"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
@@ -204,6 +200,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_stroke_layout_radius_3"
android:gravity="top"
android:inputType="textMultiLine"
diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml
new file mode 100644
index 0000000..8a87ae6
--- /dev/null
+++ b/app/src/main/res/layout/activity_big_image.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8157f41..a2a0bcd 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -91,7 +91,6 @@
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
android:theme="@style/Theme.MaterialComponents"
- android:visibility="gone"
app:backgroundTint="@color/mainThemeColor"
app:icon="@drawable/ic_add"
app:iconPadding="0dp"
diff --git a/app/src/main/res/layout/item_big_picture.xml b/app/src/main/res/layout/item_big_picture.xml
new file mode 100644
index 0000000..d90eb44
--- /dev/null
+++ b/app/src/main/res/layout/item_big_picture.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
index bca9c08..e8c1e45 100644
--- a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
+++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
@@ -2,7 +2,7 @@
-
+
-
+ android:text="燃气智能监测管盯" />
+ android:src="@mipmap/well_location" />
@@ -177,6 +172,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:nestedScrollingEnabled="false"
android:scrollbars="none"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
@@ -204,6 +200,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_stroke_layout_radius_3"
android:gravity="top"
android:inputType="textMultiLine"
diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml
new file mode 100644
index 0000000..8a87ae6
--- /dev/null
+++ b/app/src/main/res/layout/activity_big_image.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8157f41..a2a0bcd 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -91,7 +91,6 @@
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
android:theme="@style/Theme.MaterialComponents"
- android:visibility="gone"
app:backgroundTint="@color/mainThemeColor"
app:icon="@drawable/ic_add"
app:iconPadding="0dp"
diff --git a/app/src/main/res/layout/item_big_picture.xml b/app/src/main/res/layout/item_big_picture.xml
new file mode 100644
index 0000000..d90eb44
--- /dev/null
+++ b/app/src/main/res/layout/item_big_picture.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index f37c9bb..085f3af 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -114,4 +114,14 @@
- @color/white
- @dimen/sp_16
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 3d8ef3b..26d9a8f 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -50,10 +50,9 @@
-
-
-
-
+
= ArrayList() //服务器返回的拍照数据集
private val realPaths: ArrayList = ArrayList() //真实图片路径
+ private val frequency = listOf("1min", "2min", "5min", "10min", "15min", "30min", "60min")
+ private var selectedImages = ArrayList()
override fun initLayoutView(): Int = R.layout.activity_add_device
@@ -57,16 +63,15 @@
override fun initData() {
weakReferenceHandler = WeakReferenceHandler(callback)
-
uploadImageViewModel = ViewModelProvider(this).get(UploadImageViewModel::class.java)
+ }
+ override fun initEvent() {
val manager = QrManager.getInstance().init(QrConfigCreator.create(this))
scannerView.setOnClickListener {
manager.startScan(this) {
- //TODO isNumber方法无效
if (it.content.isNumber()) {
deviceCodeView.setText(it.content)
- deviceNameView.setText(String.format("管盯${it.content}"))
} else {
"设备编号错误,请检查标签".show(context)
}
@@ -74,49 +79,35 @@
}
ownerShipView.setOnClickListener {
- "尽情期待~".show(this)
+ AlertInputDialog.Builder()
+ .setContext(context)
+ .setTitle("提示")
+ .setHintMessage("请输入该设备所属项目名,如:项目203")
+ .setNegativeButton("取消")
+ .setPositiveButton("确定")
+ .setOnDialogButtonClickListener(object :
+ AlertInputDialog.OnDialogButtonClickListener {
+ override fun onCancelClick() {
+
+ }
+
+ override fun onConfirmClick(value: String) {
+ ownerShipView.text = value
+ }
+ })
+ .build().show()
}
+ //默认频率1min
+ collectIntervalView.text = frequency[0]
collectIntervalView.setOnClickListener {
BottomActionSheet.Builder()
.setContext(this)
.setItemTextColor(Color.BLUE)
- .setActionItemTitle(
- listOf(
- "1min",
- "2min",
- "5min",
- "10min",
- "15min",
- "30min",
- "60min"
- )
- )
+ .setActionItemTitle(frequency)
.setOnActionSheetListener(object : BottomActionSheet.OnActionSheetListener {
override fun onActionItemClick(position: Int) {
- when (position) {
- 0 -> {
-
- }
- 1 -> {
-
- }
- 2 -> {
-
- }
- 3 -> {
-
- }
- 4 -> {
-
- }
- 5 -> {
-
- }
- 6 -> {
-
- }
- }
+ collectIntervalView.text = frequency[position]
}
}).build().show()
}
@@ -146,11 +137,6 @@
imageAdapter = EditableImageAdapter(this, 3, 13f)
addImageRecyclerView.adapter = imageAdapter
-
- addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
- }
-
- override fun initEvent() {
imageAdapter.setOnItemClickListener(object : EditableImageAdapter.OnItemClickListener {
override fun onAddImageClick() {
selectPicture()
@@ -160,7 +146,7 @@
if (realPaths[position].isEmpty()) {
"图片加载失败,无法查看大图".show(context)
} else {
-// navigatePageTo(position, realPaths)
+ navigatePageTo(position, realPaths)
}
}
@@ -172,8 +158,10 @@
uploadImageViewModel.resultModel.observe(this, {
if (it.code == 200) {
- val sumItemCount: Int = imageAdapter.itemCount + 1 //每上传一张图片,图片总数都是在原有的基础上+1
- if (sumItemCount <= 4) {
+ if (imageAdapter.itemCount == selectedImages.size) {
+ DialogHelper.dismissLoadingDialog()
+ }
+ if (imageAdapter.itemCount <= 3) {
val url = it.data.toString()
if (url.isNotBlank()) {
imagePaths.add(url)
@@ -185,16 +173,6 @@
}
}
})
- uploadImageViewModel.loadState.observe(this, {
- when (it) {
- LoadState.Loading -> {
- DialogHelper.showLoadingDialog(this, "图片上传中,请稍后...")
- }
- else -> {
- DialogHelper.dismissLoadingDialog()
- }
- }
- })
sceneEditView.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
@@ -216,6 +194,13 @@
}
}
})
+
+ addDeviceTimeView.text = System.currentTimeMillis().timestampToCompleteDate()
+
+ //TODO 添加设备
+ submitButton.setOnClickListener {
+
+ }
}
private fun selectPicture() {
@@ -235,6 +220,10 @@
"拍照保存失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
analyticalSelectResults(result[0])
}
@@ -258,6 +247,10 @@
"选择照片失败,请重试".show(context)
return
}
+ DialogHelper.showLoadingDialog(
+ this@AddDeviceActivity, "图片上传中,请稍后..."
+ )
+ selectedImages = result
// 线程控制图片压缩上传过程,防止速度过快导致压缩失败
val sum = (result.size * 500).toLong()
object : CountDownTimer(sum, 500) {
@@ -293,16 +286,6 @@
}
private fun analyticalSelectResults(result: LocalMedia) {
- //压缩图片
-// val realPath = if (Build.VERSION.SDK_INT < Build.VERSION_CODES.Q) {
-// result.realPath
-// } else {
-// result.sandboxPath
-// }
-// Log.d(kTag, "初始路径:" + result.path)
-// Log.d(kTag, "绝对路径:" + result.realPath)
-// Log.d(kTag, "原图路径:" + result.originalPath)
-// Log.d(kTag, "沙盒路径:" + result.sandboxPath)
result.realPath.compressImage(this, object : OnImageCompressListener {
override fun onSuccess(file: File) {
Log.d(kTag, "onSuccess: " + file.absolutePath)
diff --git a/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
new file mode 100644
index 0000000..2b9c7b2
--- /dev/null
+++ b/app/src/main/java/com/casic/smarttube/view/BigImageActivity.kt
@@ -0,0 +1,95 @@
+package com.casic.smarttube.view
+
+import android.content.Context
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import android.widget.ImageView
+import androidx.core.content.ContextCompat
+import androidx.viewpager.widget.PagerAdapter
+import androidx.viewpager.widget.ViewPager
+import com.bumptech.glide.Glide
+import com.casic.smarttube.R
+import com.gyf.immersionbar.ImmersionBar
+import com.luck.picture.lib.photoview.PhotoView
+import com.pengxh.kt.lite.base.KotlinBaseActivity
+import com.pengxh.kt.lite.utils.Constant
+import com.pengxh.kt.lite.utils.ImmerseStatusBarUtil
+import com.pengxh.kt.lite.utils.PageNavigationManager
+import kotlinx.android.synthetic.main.activity_big_image.*
+import java.util.*
+
+
+class BigImageActivity : KotlinBaseActivity() {
+
+ override fun initLayoutView(): Int = R.layout.activity_big_image
+
+ override fun setupTopBarLayout() {
+ PageNavigationManager.addActivity(this)
+ ImmerseStatusBarUtil.setColor(this, ContextCompat.getColor(this, R.color.black))
+ ImmersionBar.with(this).statusBarDarkFont(false).init()
+ }
+
+ override fun initData() {
+ val index = intent.getIntExtra(Constant.BIG_IMAGE_INTENT_INDEX_KEY, 0)
+ val urls = intent.getStringArrayListExtra(Constant.BIG_IMAGE_INTENT_DATA_KEY)
+ if (urls == null || urls.size == 0) {
+ return
+ }
+ pageNumberView.text = String.format("(" + (index + 1) + "/" + urls.size + ")")
+ imagePagerView.adapter = BigImageAdapter(this, urls)
+ imagePagerView.currentItem = index
+ imagePagerView.addOnPageChangeListener(object : ViewPager.OnPageChangeListener {
+ override fun onPageScrollStateChanged(state: Int) {
+
+ }
+
+ override fun onPageScrolled(
+ position: Int,
+ positionOffset: Float,
+ positionOffsetPixels: Int
+ ) {
+
+ }
+
+ override fun onPageSelected(position: Int) {
+ pageNumberView.text = String.format("(" + (position + 1) + "/" + urls.size + ")")
+ }
+ })
+ }
+
+ override fun initEvent() {
+ leftBackView.setOnClickListener { this.finish() }
+ }
+
+ class BigImageAdapter(private var context: Context, imageList: ArrayList) :
+ PagerAdapter() {
+
+ private var images: ArrayList = imageList
+
+ override fun getCount(): Int = images.size
+
+ override fun isViewFromObject(view: View, obj: Any): Boolean = view == obj
+
+ override fun instantiateItem(container: ViewGroup, position: Int): Any {
+ val view = LayoutInflater.from(context).inflate(
+ R.layout.item_big_picture,
+ container,
+ false
+ )
+ val photoView: PhotoView = view.findViewById(R.id.photoView)
+ Glide.with(context).load(images[position]).into(photoView)
+ photoView.scaleType = ImageView.ScaleType.CENTER_INSIDE
+ container.addView(view)
+ //点击大图取消预览
+ photoView.setOnClickListener {
+ PageNavigationManager.currentActivity().finish()
+ }
+ return view
+ }
+
+ override fun destroyItem(container: ViewGroup, position: Int, obj: Any) {
+ container.removeView(obj as View)
+ }
+ }
+}
diff --git a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
index badeda3..b3e7390 100644
--- a/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
+++ b/app/src/main/java/com/casic/smarttube/vm/UploadImageViewModel.kt
@@ -11,7 +11,6 @@
import com.pengxh.kt.lite.extensions.launch
import com.pengxh.kt.lite.extensions.show
import com.pengxh.kt.lite.vm.BaseViewModel
-import com.pengxh.kt.lite.vm.LoadState
import java.io.File
class UploadImageViewModel : BaseViewModel() {
@@ -20,20 +19,16 @@
val resultModel = MutableLiveData()
fun uploadImage(image: File) = launch({
- loadState.value = LoadState.Loading
val response = RetrofitServiceManager.uploadImage(image)
val responseCode = response.separateResponseCode()
if (responseCode == 200) {
- loadState.value = LoadState.Success
resultModel.value = gson.fromJson(
response, object : TypeToken() {}.type
)
} else {
- loadState.value = LoadState.Fail
response.toErrorMessage().show(BaseApplication.obtainInstance())
}
}, {
- loadState.value = LoadState.Fail
it.printStackTrace()
})
}
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_in.xml b/app/src/main/res/anim/activity_in.xml
new file mode 100644
index 0000000..f2696ba
--- /dev/null
+++ b/app/src/main/res/anim/activity_in.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/anim/activity_out.xml b/app/src/main/res/anim/activity_out.xml
new file mode 100644
index 0000000..1e424a5
--- /dev/null
+++ b/app/src/main/res/anim/activity_out.xml
@@ -0,0 +1,7 @@
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
index bca9c08..e8c1e45 100644
--- a/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
+++ b/app/src/main/res/drawable/bg_stroke_layout_radius_3.xml
@@ -2,7 +2,7 @@
-
+
-
+ android:text="燃气智能监测管盯" />
+ android:src="@mipmap/well_location" />
@@ -177,6 +172,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:nestedScrollingEnabled="false"
android:scrollbars="none"
app:layoutManager="androidx.recyclerview.widget.GridLayoutManager"
@@ -204,6 +200,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginHorizontal="@dimen/dp_10"
+ android:layout_marginBottom="@dimen/dp_10"
android:background="@drawable/bg_stroke_layout_radius_3"
android:gravity="top"
android:inputType="textMultiLine"
diff --git a/app/src/main/res/layout/activity_big_image.xml b/app/src/main/res/layout/activity_big_image.xml
new file mode 100644
index 0000000..8a87ae6
--- /dev/null
+++ b/app/src/main/res/layout/activity_big_image.xml
@@ -0,0 +1,38 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml
index 8157f41..a2a0bcd 100644
--- a/app/src/main/res/layout/fragment_home.xml
+++ b/app/src/main/res/layout/fragment_home.xml
@@ -91,7 +91,6 @@
android:textColor="@color/white"
android:textSize="@dimen/sp_12"
android:theme="@style/Theme.MaterialComponents"
- android:visibility="gone"
app:backgroundTint="@color/mainThemeColor"
app:icon="@drawable/ic_add"
app:iconPadding="0dp"
diff --git a/app/src/main/res/layout/item_big_picture.xml b/app/src/main/res/layout/item_big_picture.xml
new file mode 100644
index 0000000..d90eb44
--- /dev/null
+++ b/app/src/main/res/layout/item_big_picture.xml
@@ -0,0 +1,13 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index f37c9bb..085f3af 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -114,4 +114,14 @@
- @color/white
- @dimen/sp_16
+
+
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index 08b5d46..fd0a39a 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,4 +1,6 @@
-
+
\ No newline at end of file