diff --git a/coalMiningApp/app/build.gradle b/coalMiningApp/app/build.gradle index 29c7e04..c88a755 100644 --- a/coalMiningApp/app/build.gradle +++ b/coalMiningApp/app/build.gradle @@ -78,7 +78,7 @@ android { } dependencies { - + implementation fileTree(include: ['*.jar', '*.aar'], dir: 'libs') api rootProject.ext.androidxLibs // ViewModel and LiveData api rootProject.ext.jetpackLibs @@ -112,4 +112,7 @@ dependencies { implementation 'androidx.fragment:fragment-ktx:1.6.0' +// implementation 'com.zhihu.android:matisse:0.6.0' + implementation project(':matisse') + implementation 'com.github.hackware1993:MagicIndicator:1.7.0' } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/AndroidManifest.xml b/coalMiningApp/app/src/main/AndroidManifest.xml index a80e8ae..2272986 100644 --- a/coalMiningApp/app/src/main/AndroidManifest.xml +++ b/coalMiningApp/app/src/main/AndroidManifest.xml @@ -4,6 +4,7 @@ package="com.zmkg.coaloperation"> + @@ -69,6 +71,7 @@ + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MyApplication.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MyApplication.kt index cf7fbbf..5d52a1e 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MyApplication.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/MyApplication.kt @@ -73,6 +73,8 @@ class MyApplication : Application(), ViewModelStoreOwner { } + + fun initLoginStatusListener() { // TUILogin.addLoginListener(loginStatusListener) } diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoLoggingFaceAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoLoggingFaceAdapter.kt new file mode 100644 index 0000000..ffb1785 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoLoggingFaceAdapter.kt @@ -0,0 +1,32 @@ +package com.zmkg.coaloperation.adapter + +import android.view.LayoutInflater +import android.view.ViewGroup +import com.chad.library.adapter.base.BaseQuickAdapter +import com.chad.library.adapter.base.viewholder.BaseViewHolder +import com.zmkg.coaloperation.R +import com.zmkg.coaloperation.databinding.ItemGeologicalListBinding +import com.zmkg.coaloperation.db.entity.geologging.GeoLoggingFace + +class GeoLoggingFaceAdapter(list: MutableList): + BaseQuickAdapter( + R.layout.item_geological_list, list + ){ + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): VH { + val binding = ItemGeologicalListBinding.inflate( + LayoutInflater.from(context), parent, false + ) + return VH(binding).also { + bindViewClickListener(it, viewType) + } + } + override fun convert( + holder: VH, + item: GeoLoggingFace + ) { + holder.binding.tvFaceName.text = item.surfaceName + } + + inner class VH(var binding: ItemGeologicalListBinding): BaseViewHolder(binding.root) + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointImageAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointImageAdapter.kt index 6d3ff12..2ce5160 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointImageAdapter.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointImageAdapter.kt @@ -7,6 +7,7 @@ import com.chad.library.adapter.base.viewholder.BaseViewHolder import com.zmkg.coaloperation.R import com.zmkg.coaloperation.bean.GeoPointImage import com.zmkg.coaloperation.databinding.ListItemPointImageBinding +import com.zmkg.coaloperation.utils.load class GeoPointImageAdapter(list: MutableList): BaseQuickAdapter( @@ -26,7 +27,13 @@ class GeoPointImageAdapter(list: MutableList): holder: VH, item: GeoPointImage ) { - holder.binding.ivPointImage.setImageResource(R.drawable.ic_add_image) + holder.binding.ivPointImage.let { + if (item.isAddFlag) { + it.load(R.drawable.ic_add_image) + } else { + it.load(item.imagePath) + } + } } inner class VH(var binding: ListItemPointImageBinding): BaseViewHolder(binding.root) diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt index 1009cf5..d8b6880 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/adapter/GeoPointMultiAdapter.kt @@ -1,104 +1,123 @@ package com.zmkg.coaloperation.adapter +import android.Manifest +import android.app.Activity import android.view.LayoutInflater import android.widget.LinearLayout import androidx.core.view.updateLayoutParams import androidx.recyclerview.widget.GridLayoutManager -import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.chad.library.adapter.base.BaseMultiItemQuickAdapter import com.chad.library.adapter.base.viewholder.BaseViewHolder import com.zmkg.coaloperation.R +import com.zmkg.coaloperation.base.BaseActivity import com.zmkg.coaloperation.bean.BaseItem import com.zmkg.coaloperation.bean.GeoPointImage import com.zmkg.coaloperation.bean.GeoPointMultiItem import com.zmkg.coaloperation.databinding.ListItemPointBaseHorizontalBinding import com.zmkg.coaloperation.databinding.ListItemPointBaseVerticalBinding +import com.zmkg.coaloperation.ui.geologging.AddGeologicalPointFragment +import com.zmkg.coaloperation.utils.GalleryUtils import com.zmkg.coaloperation.utils.gone +import com.zmkg.coaloperation.utils.permission.StorageUtils import com.zmkg.coaloperation.utils.visible -class GeoPointMultiAdapter(list: MutableList): - BaseMultiItemQuickAdapter(list){ +class GeoPointMultiAdapter(list: MutableList) : + BaseMultiItemQuickAdapter(list) { - init { - addItemType(GeoPointMultiItem.TYPE_BASE_INFO, R.layout.list_item_point_base_info) - addItemType(GeoPointMultiItem.TYPE_LOGGING_INFO, R.layout.list_item_point_logging_info) - addItemType(GeoPointMultiItem.TYPE_CALCULATE_INFO, R.layout.list_item_point_calculate_info) - addItemType(GeoPointMultiItem.TYPE_UPLOAD_IMAGE, R.layout.list_item_point_upload_image) - } + init { + addItemType(GeoPointMultiItem.TYPE_BASE_INFO, R.layout.list_item_point_base_info) + addItemType(GeoPointMultiItem.TYPE_LOGGING_INFO, R.layout.list_item_point_logging_info) + addItemType(GeoPointMultiItem.TYPE_CALCULATE_INFO, R.layout.list_item_point_calculate_info) + addItemType(GeoPointMultiItem.TYPE_UPLOAD_IMAGE, R.layout.list_item_point_upload_image) + } override fun convert( holder: BaseViewHolder, item: GeoPointMultiItem ) { when (holder.itemViewType) { - GeoPointMultiItem.TYPE_BASE_INFO->{ + GeoPointMultiItem.TYPE_BASE_INFO -> { loadBaseInfo(holder, item) } - GeoPointMultiItem.TYPE_LOGGING_INFO->{ + + GeoPointMultiItem.TYPE_LOGGING_INFO -> { loadLoggingInfo(holder, item) } - GeoPointMultiItem.TYPE_CALCULATE_INFO->{ + + GeoPointMultiItem.TYPE_CALCULATE_INFO -> { loadCalculateInfo(holder, item) } - GeoPointMultiItem.TYPE_UPLOAD_IMAGE->{ + + GeoPointMultiItem.TYPE_UPLOAD_IMAGE -> { loadUploadImage(holder, item) } } } - private fun loadUploadImage(holder: BaseViewHolder,item: GeoPointMultiItem) { + private fun loadUploadImage(holder: BaseViewHolder, item: GeoPointMultiItem) { val rvImageList = holder.itemView.findViewById(R.id.rvImageList) - val images = mutableListOf( - GeoPointImage(), - GeoPointImage(), - GeoPointImage(), - GeoPointImage() - ) - rvImageList.let {rv-> + if (item.images == null) { + item.images = mutableListOf() + } + rvImageList.let { rv -> rv.layoutManager = GridLayoutManager(rv.context, 4, GridLayoutManager.VERTICAL, false) - rv.adapter = GeoPointImageAdapter(images).also { + rv.adapter = GeoPointImageAdapter(item.images!!).also { it.setOnItemClickListener { adapter, view, position -> - - } + if (it.data[position].isAddFlag.not()) { + return@setOnItemClickListener + } + (context as BaseActivity).let { activity -> + StorageUtils.requestPermission(activity) { + GalleryUtils.openGallery(context as Activity, AddGeologicalPointFragment.IMAGE_REQUEST_CODE) + } + } } } } } - private fun loadCalculateInfo(holder: BaseViewHolder,item: GeoPointMultiItem) {} + private fun loadCalculateInfo(holder: BaseViewHolder, item: GeoPointMultiItem) {} - private fun loadLoggingInfo(holder: BaseViewHolder,item: GeoPointMultiItem) { + private fun loadLoggingInfo(holder: BaseViewHolder, item: GeoPointMultiItem) { } - private fun loadBaseInfo(holder: BaseViewHolder,item: GeoPointMultiItem) { + private fun loadBaseInfo(holder: BaseViewHolder, item: GeoPointMultiItem) { val llBaseTop = holder.itemView.findViewById(R.id.llBaseTop) val topList = mutableListOf( - BaseItem(name = "点号", value = "1#"), - BaseItem(name = "点距", value = "1#"), - BaseItem(name = "累距", value = "78.874"), + BaseItem(name = "点号", value = ""), + BaseItem(name = "点距", value = ""), + BaseItem(name = "累距", value = ""), ) val bottomList = mutableListOf( - BaseItem(name = "巷高", value = "2.855"), - BaseItem(name = "顶板", value = "1024.491"), - BaseItem(name = "底板", value = "1018.491"), - BaseItem(name = "巷顶煤厚", value = "0.15"), + BaseItem(name = "巷高", value = ""), + BaseItem(name = "顶板", value = ""), + BaseItem(name = "底板", value = ""), + BaseItem(name = "巷顶煤厚", value = ""), ) topList.forEach { - val itemBinding = ListItemPointBaseHorizontalBinding.inflate(LayoutInflater.from(context), llBaseTop, false) + val itemBinding = ListItemPointBaseHorizontalBinding.inflate( + LayoutInflater.from(context), + llBaseTop, + false + ) itemBinding.run { tvItemName.text = it.name - tvItemValue.text = it.value + etInputValue.setText(it.value) } - llBaseTop.addView(itemBinding.root) + llBaseTop.addView(itemBinding.root) } val llBaseBottom = holder.itemView.findViewById(R.id.llBaseBottom) - bottomList.forEachIndexed {index, it -> - val itemBinding = ListItemPointBaseVerticalBinding.inflate(LayoutInflater.from(context),llBaseBottom, false) + bottomList.forEachIndexed { index, it -> + val itemBinding = ListItemPointBaseVerticalBinding.inflate( + LayoutInflater.from(context), + llBaseBottom, + false + ) itemBinding.run { tvItemName.text = it.name - tvItemValue.text = it.value + etInputValue.setText(it.value) dividerVertical.run { if (index == bottomList.size - 1) gone() else visible() } diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/base/BaseActivity.java b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/base/BaseActivity.java new file mode 100644 index 0000000..f489c33 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/base/BaseActivity.java @@ -0,0 +1,100 @@ +package com.zmkg.coaloperation.base; + +import android.content.Intent; +import android.net.Uri; +import android.os.Bundle; + +import androidx.activity.result.ActivityResultLauncher; +import androidx.activity.result.contract.ActivityResultContracts; +import androidx.appcompat.app.AppCompatActivity; +import com.zmkg.coaloperation.bean.IActivityResult; + +public class BaseActivity extends AppCompatActivity { + +// public static final String COLOR_WHITE = "#FFFFFF"; +// +// public void whiteStatusBar(boolean isFits) { +// whiteStatusBar(isFits, false); +// } +// +// public void whiteStatusBar(boolean isFits, boolean keyboardEnable) { +// hasColorStatusBar(COLOR_WHITE, isFits, true, keyboardEnable); +// } +// +// public void transparentStatusBar(boolean isFits, boolean isDarkFont) { +// ImmersionBar.with(this) +// .fitsSystemWindows(isFits) +// .statusBarDarkFont(isDarkFont) +// .transparentStatusBar() +// .navigationBarColor(R.color.white) +// .navigationBarDarkIcon(true) +// .init(); +// } +// +// public void hasColorStatusBar(String statusBarColor, boolean isFits, boolean isDarkFont) { +// hasColorStatusBar(statusBarColor, isFits, isDarkFont, false); +// } +// +// public void hasColorStatusBar(String statusBarColor, boolean isFits, boolean isDarkFont, boolean keyboardEnable) { +// ImmersionBar.with(this) +// .fitsSystemWindows(isFits) +// .statusBarColor(statusBarColor) +// .statusBarDarkFont(isDarkFont) +// .keyboardEnable(keyboardEnable) +// .navigationBarColor(R.color.white) +// .navigationBarDarkIcon(true) +// .init(); +// } + + private final ActivityResultLauncher activityLauncher = + registerForActivityResult( + new ActivityResultContracts.StartActivityForResult(), + result -> this.launchActivityCallback.callback(result) + ); + private IActivityResult.LaunchActivityCallback launchActivityCallback; + + public void launchActivityResult(Intent intent, IActivityResult.LaunchActivityCallback activityCallback) { + this.launchActivityCallback = activityCallback; + activityLauncher.launch(intent); + } + + private IActivityResult.LaunchTackPictureCallback launchTackPictureCallback; + + private final ActivityResultLauncher tackPictureLauncher = + registerForActivityResult( + new ActivityResultContracts.TakePicture(), + result -> this.launchTackPictureCallback.callback(result) + ); + + public void launchTackPicture(Uri uri, IActivityResult.LaunchTackPictureCallback callback) { + this.launchTackPictureCallback = callback; + tackPictureLauncher.launch(uri); + } + + private IActivityResult.RequestPermissionCallback launchPermissionCallback; + + public void requestSinglePermissionResult(String permission, IActivityResult.RequestPermissionCallback permissionCallback) { + this.launchPermissionCallback = permissionCallback; + permissionLauncher.launch(permission); + } + + private final ActivityResultLauncher permissionLauncher = + registerForActivityResult( + new ActivityResultContracts.RequestPermission(), + result -> this.launchPermissionCallback.callback(result) + ); + + private IActivityResult.RequestMultiplePermissionsCallback launchMultiplePermissionsCallback; + + public void requestMultiplePermissionsResult(String[] permissions, IActivityResult.RequestMultiplePermissionsCallback permissionCallback) { + this.launchMultiplePermissionsCallback = permissionCallback; + multiplePermissionLauncher.launch(permissions); + } + + private final ActivityResultLauncher multiplePermissionLauncher = + registerForActivityResult( + new ActivityResultContracts.RequestMultiplePermissions(), + result -> this.launchMultiplePermissionsCallback.callback(result) + ); + +} diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/base/BaseVMBActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/base/BaseVMBActivity.kt index 669ba93..7747dc6 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/base/BaseVMBActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/base/BaseVMBActivity.kt @@ -55,7 +55,7 @@ import java.sql.SQLException * 封装了ViewModel和DataBinding的Activity基类 */ abstract class BaseVMBActivity(private val contentViewResId: Int) : - AppCompatActivity(), View.OnClickListener { + BaseActivity(), View.OnClickListener { var mContext: Context? = null var mActivity: Activity? = null lateinit var mViewModel: VM @@ -447,4 +447,5 @@ abstract class BaseVMBActivity(private return "0" } } + } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/IActivityResult.java b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/IActivityResult.java new file mode 100644 index 0000000..41775ba --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/IActivityResult.java @@ -0,0 +1,24 @@ +package com.zmkg.coaloperation.bean; + +import androidx.activity.result.ActivityResult; + +import java.util.Map; + +public interface IActivityResult { + + interface LaunchActivityCallback { + void callback(ActivityResult result); + } + + interface LaunchTackPictureCallback { + void callback(boolean result); + } + + interface RequestPermissionCallback { + void callback(boolean result); + } + + interface RequestMultiplePermissionsCallback { + void callback(Map result); + } +} diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt index e3c21eb..319fc5b 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/bean/OtherData.kt @@ -63,6 +63,7 @@ data class GeoPointMultiItem( var pointName: String = "", var pointDistance: String = "", var totalDistance: String = "", + var images: MutableList?=null ): MultiItemEntity { companion object { const val TYPE_BASE_INFO = 1 @@ -73,5 +74,6 @@ data class GeoPointMultiItem( } data class GeoPointImage( - var imagePath: String = "" + var imagePath: String = "", + var isAddFlag:Boolean = false ) \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/geologging/GeoLoggingFace.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/geologging/GeoLoggingFace.kt new file mode 100644 index 0000000..bc64122 --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/db/entity/geologging/GeoLoggingFace.kt @@ -0,0 +1,12 @@ +package com.zmkg.coaloperation.db.entity.geologging + +data class GeoLoggingFace( + var surfaceId: Long = 0, + + var userId: String = "", + + /** + * 工作面名称 + */ + var surfaceName: String? = "", +) diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeoLoggingFaceActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeoLoggingFaceActivity.kt new file mode 100644 index 0000000..bd4cfac --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeoLoggingFaceActivity.kt @@ -0,0 +1,39 @@ +package com.zmkg.coaloperation.ui.geologging + +import android.os.Bundle +import android.view.View +import com.zmkg.coaloperation.R +import com.zmkg.coaloperation.base.BaseVMBActivity +import com.zmkg.coaloperation.base.viewmodel.TestViewModel +import com.zmkg.coaloperation.databinding.ActivityAddGeoLoggingFaceBinding + +class AddGeoLoggingFaceActivity : + BaseVMBActivity( + R.layout.activity_add_geo_logging_face + ) { + + override fun initView(savedInstanceState: Bundle?) { + mBinding.toolbarLay.title = "新增工作面" + mBinding.btnAddFace.setOnClickListener { + val faceName = mBinding.etWorkfaceName.text.toString().trim() + if (faceName.isBlank()) { + showToast("请输入工作面名称") + return@setOnClickListener + } + + } + } + + override fun initData() { + + } + + override fun bindEvent() { + + } + + override fun processClick(v: View?) { + + } + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointActivity.kt index 8694684..eb55ae5 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointActivity.kt @@ -1,19 +1,40 @@ package com.zmkg.coaloperation.ui.geologging +import android.content.Context +import android.content.Intent +import android.graphics.Color +import android.graphics.drawable.GradientDrawable import android.os.Bundle import android.view.View +import android.view.ViewGroup +import android.widget.FrameLayout +import android.widget.LinearLayout +import androidx.core.graphics.toColorInt +import androidx.core.view.marginLeft +import androidx.core.view.marginStart +import androidx.core.view.updateLayoutParams import androidx.fragment.app.Fragment import androidx.fragment.app.commit import com.zmkg.coaloperation.R import com.zmkg.coaloperation.base.BaseVMBActivity import com.zmkg.coaloperation.base.viewmodel.TestViewModel import com.zmkg.coaloperation.databinding.ActivityAddGeologicalPointBinding +import com.zmkg.coaloperation.utils.dp +import com.zmkg.coaloperation.utils.useShapeSetBackground +import net.lucode.hackware.magicindicator.FragmentContainerHelper +import net.lucode.hackware.magicindicator.buildins.commonnavigator.CommonNavigator +import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.CommonNavigatorAdapter +import net.lucode.hackware.magicindicator.buildins.commonnavigator.abs.IPagerTitleView +import net.lucode.hackware.magicindicator.buildins.commonnavigator.indicators.LinePagerIndicator +import net.lucode.hackware.magicindicator.buildins.commonnavigator.titles.ColorTransitionPagerTitleView /** * 地质编录点新增 */ class AddGeologicalPointActivity : - BaseVMBActivity(R.layout.activity_add_geological_point) { + BaseVMBActivity( + R.layout.activity_add_geological_point + ) { override fun initView(savedInstanceState: Bundle?) { @@ -28,6 +49,8 @@ class AddGeologicalPointActivity : show(fragments[0]) setReorderingAllowed(true) } + initMagicIndicator() + showFragment(0) } override fun initData() { @@ -42,27 +65,93 @@ class AddGeologicalPointActivity : private val fragments = mutableListOf() private fun initFragments() { - fragments.apply { - add(AddGeologicalPointFragment()) - add(AddGeologicalPointFragment()) - add(AddGeologicalPointFragment()) - add(AddGeologicalPointFragment()) - add(AddGeologicalPointFragment()) + titles.forEach { _ -> + fragments.add(AddGeologicalPointFragment()) } - supportFragmentManager.commit { -// add(R.id.fragment_container, fragments[0], "volume").hide(fragments[0]) - replace(R.id.frgContainerView, fragments[0], "point01") +// supportFragmentManager.commit { +//// add(R.id.fragment_container, fragments[0], "volume").hide(fragments[0]) +// replace(R.id.frgContainerView, fragments[0], "point01") +// } + } + +// private fun switchFragment(position: Int) { +// supportFragmentManager.commit { +// setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) +// fragments.forEachIndexed { index, fragment -> +// if (index == position) show(fragment) else hide(fragment) +// } +// setReorderingAllowed(true) +// } +// } + + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + fragments[0].onActivityResult(requestCode, resultCode, data) + } + + private val titles = listOf("1#", "2#", "3#", "4#", "5#", "6#") + private fun initMagicIndicator() { + val commonNavigator = CommonNavigator(this).apply { + adapter = object : CommonNavigatorAdapter() { + override fun getCount() = titles.size + override fun getTitleView(context: Context?, index: Int): IPagerTitleView { + return ColorTransitionPagerTitleView(context).apply { +// setPadding( +// if (index == 0) 20.dp else 10.dp, +// 10.dp, +// if (index == titles.size - 1) 20.dp else 10.dp, +// 10.dp +// ) +// setPadding(10.dp, 5.dp,10.dp, 5.dp) + width = 65.dp + text = titles[index] + textSize = 20f + normalColor = Color.WHITE + selectedColor = "#30E0A1".toColorInt() + useShapeSetBackground( + cornerRadius = 12.dp.toFloat(), + solidColor = "#1430E0A1".toColorInt(), + strokeColor = "#0C0D0E".toColorInt(), + strokeWidth = 8.dp + ) +// showToast(parent.javaClass.simpleName) +// updateLayoutParams { +// topMargin = 10.dp +// bottomMargin = 10.dp +// leftMargin = if (index == 0) 20.dp else 10.dp +// rightMargin = if (index == titles.size - 1) 20.dp else 10.dp +// } + setOnClickListener { showFragment(index) } + } + } + + override fun getIndicator(context: Context?) = LinePagerIndicator(context).apply { +// mode = LinePagerIndicator.MODE_WRAP_CONTENT +// setColors("#30E0A1".toColorInt()) +// lineHeight = 1.dp.toFloat() + //lineWidth = 10.dp.toFloat() +// background = GradientDrawable().also { +// it.shape = GradientDrawable.RECTANGLE +// it.cornerRadius = 5.dp.toFloat() +// it.setColor("#30E0A1".toColorInt()) +//// it.setStroke(strokeWidth, strokeColor) +// } + } + } + } + mBinding.magicIndicator.let { + fragmentContainerHelper = FragmentContainerHelper(it) + it.navigator = commonNavigator } } - private fun switchFragment(position: Int) { - supportFragmentManager.commit { - setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out) - fragments.forEachIndexed { index, fragment -> - if (index == position) show(fragment) else hide(fragment) - } - setReorderingAllowed(true) - } + private lateinit var fragmentContainerHelper:FragmentContainerHelper + + private fun showFragment(position: Int) { + supportFragmentManager.beginTransaction() + .replace(R.id.frgContainerView, fragments[position]) + .commit() + fragmentContainerHelper.handlePageSelected(position) } } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt index 9dcdc75..d6311b0 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/AddGeologicalPointFragment.kt @@ -1,29 +1,44 @@ package com.zmkg.coaloperation.ui.geologging +import android.app.Activity +import android.content.Intent import android.os.Bundle import android.view.View import androidx.recyclerview.widget.LinearLayoutManager +import com.zhihu.matisse.Matisse import com.zmkg.coaloperation.R import com.zmkg.coaloperation.adapter.GeoPointMultiAdapter import com.zmkg.coaloperation.base.BaseVMBFragment import com.zmkg.coaloperation.base.viewmodel.TestViewModel +import com.zmkg.coaloperation.bean.GeoPointImage import com.zmkg.coaloperation.bean.GeoPointMultiItem import com.zmkg.coaloperation.databinding.FragmentAddGeologicalPointBinding class AddGeologicalPointFragment : BaseVMBFragment(R.layout.fragment_add_geological_point) { + companion object { + const val IMAGE_REQUEST_CODE = 1000 + } + private val geoPointList: MutableList = mutableListOf() private val geoPointAdapter by lazy { GeoPointMultiAdapter(geoPointList) } override fun initView(root: View?, savedInstanceState: Bundle?) { + val imageList = mutableListOf() + imageList.add(GeoPointImage(isAddFlag = true)) geoPointList.run { add(GeoPointMultiItem(itemType = GeoPointMultiItem.TYPE_BASE_INFO)) add(GeoPointMultiItem(itemType = GeoPointMultiItem.TYPE_LOGGING_INFO)) add(GeoPointMultiItem(itemType = GeoPointMultiItem.TYPE_CALCULATE_INFO)) - add(GeoPointMultiItem(itemType = GeoPointMultiItem.TYPE_UPLOAD_IMAGE)) + add( + GeoPointMultiItem( + itemType = GeoPointMultiItem.TYPE_UPLOAD_IMAGE, + images = imageList + ) + ) } mBinding.rvPointList.let { it.layoutManager = LinearLayoutManager(it.context) @@ -39,4 +54,21 @@ class AddGeologicalPointFragment : } + @Deprecated("Deprecated in Java") + override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { + super.onActivityResult(requestCode, resultCode, data) + if (requestCode == IMAGE_REQUEST_CODE && resultCode == Activity.RESULT_OK) { + val uris = Matisse.obtainResult(data) // 获取选中URI列表 + val paths = Matisse.obtainPathResult(data) // 获取文件路径列表 + + geoPointList[3].let { + paths?.forEach { path -> + val size = it.images!!.size + it.images!!.add(size - 1, GeoPointImage(imagePath = path)) + } + } + geoPointAdapter.notifyItemChanged(3) + } + } + } \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/GeologicalActivity.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/GeologicalActivity.kt index f3dc1eb..45b2528 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/GeologicalActivity.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/ui/geologging/GeologicalActivity.kt @@ -2,10 +2,13 @@ package com.zmkg.coaloperation.ui.geologging import android.os.Bundle import android.view.View +import androidx.recyclerview.widget.LinearLayoutManager import com.zmkg.coaloperation.R +import com.zmkg.coaloperation.adapter.GeoLoggingFaceAdapter import com.zmkg.coaloperation.base.BaseVMBActivity import com.zmkg.coaloperation.base.viewmodel.TestViewModel import com.zmkg.coaloperation.databinding.ActivityGeologicalBinding +import com.zmkg.coaloperation.db.entity.geologging.GeoLoggingFace /** * 地质编录 @@ -13,11 +16,36 @@ import com.zmkg.coaloperation.databinding.ActivityGeologicalBinding class GeologicalActivity : BaseVMBActivity(R.layout.activity_geological) { + val faceList: MutableList = mutableListOf() + val faceAdapter by lazy { + GeoLoggingFaceAdapter(faceList).apply { + setOnItemClickListener { adapter, view, position -> + toActivity(GeologicalPointActivity::class.java) + } + } + } + override fun initView(savedInstanceState: Bundle?) { mBinding.toolbarLay.title = "编录位置选择" mBinding.toolbarLay.rightText = "新增工作面" mBinding.toolbarLay.titleTvRight.setOnClickListener { - toActivity(GeologicalPointActivity::class.java) + toActivity(AddGeoLoggingFaceActivity::class.java) + } + + faceList.run { + add(GeoLoggingFace(surfaceName = "5-20304回风工作面")) + add(GeoLoggingFace(surfaceName = "5-20305回风工作面")) + add(GeoLoggingFace(surfaceName = "5-20306回风工作面")) + add(GeoLoggingFace(surfaceName = "5-20307回风工作面")) + add(GeoLoggingFace(surfaceName = "5-20308回风工作面")) + add(GeoLoggingFace(surfaceName = "5-20309回风工作面")) + add(GeoLoggingFace(surfaceName = "5-20310回风工作面")) + add(GeoLoggingFace(surfaceName = "5-20311回风工作面")) + } + + mBinding.rvGeoLogging.let { + it.layoutManager = LinearLayoutManager(this) + it.adapter = faceAdapter } } diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/Ext.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/Ext.kt index 4af5820..35cebd1 100644 --- a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/Ext.kt +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/Ext.kt @@ -7,6 +7,8 @@ import android.graphics.Color import android.graphics.drawable.GradientDrawable import android.util.TypedValue import android.view.View +import android.widget.ImageView +import com.bumptech.glide.Glide import kotlinx.coroutines.CoroutineScope import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Job @@ -126,4 +128,8 @@ fun View.useShapeSetBackground( this.background = shape } +fun ImageView.load(any:Any) { + Glide.with(this.context).load(any).into(this) +} + diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/GalleryUtils.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/GalleryUtils.kt new file mode 100644 index 0000000..89d34ac --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/GalleryUtils.kt @@ -0,0 +1,28 @@ +package com.zmkg.coaloperation.utils + +import android.app.Activity +import android.content.pm.ActivityInfo +import com.zhihu.matisse.Matisse +import com.zhihu.matisse.MimeType +import com.zhihu.matisse.R +import com.zhihu.matisse.engine.impl.GlideEngine +import com.zhihu.matisse.internal.entity.CaptureStrategy + +object GalleryUtils { + + fun openGallery(activity: Activity, requestCode:Int) { + Matisse.from(activity) + .choose(MimeType.ofImage(),false) // 只选图片 + .capture(true) + .captureStrategy(CaptureStrategy(true, "${activity.packageName}.fileprovider", "coalImage")) + .countable(true) // 显示选中数量 + .maxSelectable(9) // 最多选9张 + .gridExpectedSize(120.dp) + .restrictOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT) + .thumbnailScale(0.8f) + .theme(R.style.Matisse_Dracula) + .imageEngine(GlideEngine()) // 必须设置引擎 + .forResult(requestCode) + } + +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/InvisibleFragment.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/InvisibleFragment.kt new file mode 100644 index 0000000..f1f8def --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/InvisibleFragment.kt @@ -0,0 +1,80 @@ +package com.zmkg.coaloperation.utils.permission//package com.dheaven.mscapp.SIGFFCNFN.permission +// +//import androidx.activity.result.contract.ActivityResultContracts +//import androidx.fragment.app.Fragment +// +//class InvisibleFragment : Fragment() { +// +// private var singlePermissionAction: ((Boolean) -> Unit)? = null +// private var multiplePermissionAction: ((MutableMap) -> Unit)? = null +// +// private val singlePermissionLauncher = registerForActivityResult( +// ActivityResultContracts.RequestPermission() +// ) { +// singlePermissionAction?.invoke(it) +// } +// private val multiplePermissionLauncher = registerForActivityResult( +// ActivityResultContracts.RequestMultiplePermissions() +// ) { +// multiplePermissionAction?.invoke(it) +// } +// +// private fun requestSinglePermission(permission: String, action: (Boolean) -> Unit) { +// singlePermissionAction = action +// singlePermissionLauncher.launch(permission) +// } +// private fun requestMultiplePermission(permission: Array, action: (MutableMap) -> Unit) { +// multiplePermissionAction = action +// multiplePermissionLauncher.launch(permission) +// } +// fun requestNow( +// callback: (granted: Boolean, deniedList: List) -> Unit, +// args: Array +// ) { +// permissionCallback = callback +//// requestPermissions(args, 1) +// +// if (args.size == 1) { +// requestSinglePermission(args[0]) { +// val deniedList = mutableListOf() +// if (it.not()) { +// deniedList.add(args[0]) +// } +// callback(it, deniedList) +// } +// return +// } +// requestMultiplePermission(args){ +// val deniedList = mutableListOf() +// it.entries.forEach { entry -> +// entry.apply { +// if (value.not()) { +// deniedList.add(key) +// } +// } +// } +// val granted = deniedList.isEmpty() +// callback(granted, deniedList) +// } +// } +// +//// override fun onRequestPermissionsResult( +//// requestCode: Int, +//// permissions: Array, +//// grantResults: IntArray +//// ) { +//// super.onRequestPermissionsResult(requestCode, permissions, grantResults) +//// if (requestCode == 1) { +//// val deniedList: MutableList = ArrayList() +//// for (i in grantResults.indices) { +//// if (grantResults[i] != PackageManager.PERMISSION_GRANTED) { +//// deniedList.add(permissions[i]) +//// } +//// } +//// val allGranted = deniedList.isEmpty() +//// permissionCallback?.invoke(allGranted, deniedList) +//// } +//// } +// +// private var permissionCallback: ((granted: Boolean, deniedList: List) -> Unit)? = null +//} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/PermissionUtils.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/PermissionUtils.kt new file mode 100644 index 0000000..67316ab --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/PermissionUtils.kt @@ -0,0 +1,51 @@ +package com.dheaven.mscapp.SIGFFCNFN.permission + +import com.zmkg.coaloperation.base.BaseActivity + +object PermissionUtils { +// private const val TAG = "InvisibleFragment" + fun request( + activity: BaseActivity, + permissions: Array, + callback: (granted: Boolean, deniedList: List) -> Unit + ) { + if (permissions.isEmpty()) { + return + } +// val fragmentManager = activity.supportFragmentManager +// val fragment = fragmentManager.findFragmentByTag(TAG) +// var invisibleFragment: InvisibleFragment? = null +// if (invisibleFragment == null) { +// invisibleFragment = InvisibleFragment() +// fragmentManager.beginTransaction().add(invisibleFragment, TAG).commitNow() +// } else { +// invisibleFragment = fragment as InvisibleFragment +// } +// invisibleFragment.requestNow(callback, permissions) + //单权限请求 + if (permissions.size == 1) { + val permission = permissions[0] + activity.requestSinglePermissionResult(permission) { + val deniedList = mutableListOf() + if (it.not()) { + deniedList.add(permission) + } + callback(it, deniedList) + } + return + } + //多权限请求 + activity.requestMultiplePermissionsResult(permissions) { + val deniedList = mutableListOf() + it.entries.forEach { entry -> + entry.apply { + if (value.not()) { + deniedList.add(key) + } + } + } + val granted = deniedList.isEmpty() + callback(granted, deniedList) + } + } +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/StorageUtils.kt b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/StorageUtils.kt new file mode 100644 index 0000000..1734a9a --- /dev/null +++ b/coalMiningApp/app/src/main/java/com/zmkg/coaloperation/utils/permission/StorageUtils.kt @@ -0,0 +1,31 @@ +package com.zmkg.coaloperation.utils.permission + +import android.Manifest +import android.content.Intent +import android.os.Build +import android.os.Environment +import android.provider.Settings +import com.zmkg.coaloperation.base.BaseActivity + +object StorageUtils { + + fun requestPermission(activity: BaseActivity, callback: () -> Unit) { + activity.requestSinglePermissionResult(Manifest.permission.CAMERA) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + if (Environment.isExternalStorageManager()) { + callback() + } else { + val intent = Intent(Settings.ACTION_MANAGE_ALL_FILES_ACCESS_PERMISSION) +// activity.startActivityForResult(intent, MANAGE_REQUEST_CODE) + activity.launchActivityResult(intent) { + callback() + } + } + } else { + activity.requestSinglePermissionResult(Manifest.permission.WRITE_EXTERNAL_STORAGE) { + callback() + } + } + } + } +} \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/drawable-xxhdpi/ic_add_image.png b/coalMiningApp/app/src/main/res/drawable-xxhdpi/ic_add_image.png index 2bf0f7b..3cb65b3 100644 Binary files a/coalMiningApp/app/src/main/res/drawable-xxhdpi/ic_add_image.png and b/coalMiningApp/app/src/main/res/drawable-xxhdpi/ic_add_image.png differ diff --git a/coalMiningApp/app/src/main/res/layout/activity_add_geo_logging_face.xml b/coalMiningApp/app/src/main/res/layout/activity_add_geo_logging_face.xml new file mode 100644 index 0000000..d0cda87 --- /dev/null +++ b/coalMiningApp/app/src/main/res/layout/activity_add_geo_logging_face.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/activity_add_geological_point.xml b/coalMiningApp/app/src/main/res/layout/activity_add_geological_point.xml index ac758c5..9420261 100644 --- a/coalMiningApp/app/src/main/res/layout/activity_add_geological_point.xml +++ b/coalMiningApp/app/src/main/res/layout/activity_add_geological_point.xml @@ -37,77 +37,9 @@ app:shapeCornersRadius="36dp" app:shapeSolidColor="#21A69A" /> - - - - - - - - - - - - - - + android:layout_height="56dp"/> \ No newline at end of file diff --git a/coalMiningApp/app/src/main/res/layout/activity_geological.xml b/coalMiningApp/app/src/main/res/layout/activity_geological.xml index 21c01d9..c1d0465 100644 --- a/coalMiningApp/app/src/main/res/layout/activity_geological.xml +++ b/coalMiningApp/app/src/main/res/layout/activity_geological.xml @@ -21,6 +21,7 @@ android:id="@+id/rvGeoLogging" android:layout_width="match_parent" android:layout_height="match_parent" + android:overScrollMode="never" tools:listitem="@layout/item_geological_list" /> diff --git a/coalMiningApp/app/src/main/res/layout/activity_geological_point.xml b/coalMiningApp/app/src/main/res/layout/activity_geological_point.xml index a7bf641..94ffe02 100644 --- a/coalMiningApp/app/src/main/res/layout/activity_geological_point.xml +++ b/coalMiningApp/app/src/main/res/layout/activity_geological_point.xml @@ -38,25 +38,25 @@ android:paddingBottom="20dp">