diff --git a/app/build.gradle b/app/build.gradle index 166d246..c2a2c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.4' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/build.gradle b/app/build.gradle index 166d246..c2a2c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.4' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3674d6d..5eb52f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,14 +1,33 @@ - + - + + + + + + + + + + + + @@ -31,6 +50,10 @@ + + diff --git a/app/build.gradle b/app/build.gradle index 166d246..c2a2c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.4' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3674d6d..5eb52f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,14 +1,33 @@ - + - + + + + + + + + + + + + @@ -31,6 +50,10 @@ + + diff --git a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt index ff353d3..6e4e62a 100644 --- a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt +++ b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt @@ -23,7 +23,7 @@ override fun onCreate() { super.onCreate() - Log.d(kTag, "onCreate => ") + Log.d(kTag, "onCreate => $kTag") } @@ -77,6 +77,6 @@ override fun onDestroy() { super.onDestroy() - Log.d(kTag, "onDestroy => ") + Log.d(kTag, "onDestroy => $kTag") } } \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 166d246..c2a2c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.4' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3674d6d..5eb52f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,14 +1,33 @@ - + - + + + + + + + + + + + + @@ -31,6 +50,10 @@ + + diff --git a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt index ff353d3..6e4e62a 100644 --- a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt +++ b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt @@ -23,7 +23,7 @@ override fun onCreate() { super.onCreate() - Log.d(kTag, "onCreate => ") + Log.d(kTag, "onCreate => $kTag") } @@ -77,6 +77,6 @@ override fun onDestroy() { super.onDestroy() - Log.d(kTag, "onDestroy => ") + Log.d(kTag, "onDestroy => $kTag") } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt index 6c561a8..b60ea2c 100644 --- a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt +++ b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt @@ -1,8 +1,51 @@ package com.casic.endoscope.utils +import android.Manifest +import android.os.Build import java.util.Stack object ProjectConstant { + val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } + + const val PERMISSIONS_CODE = 999 + //海康摄像头参数 const val HK_NET_IP = "192.168.43.121" const val HK_NET_PORT = "8000" diff --git a/app/build.gradle b/app/build.gradle index 166d246..c2a2c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.4' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3674d6d..5eb52f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,14 +1,33 @@ - + - + + + + + + + + + + + + @@ -31,6 +50,10 @@ + + diff --git a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt index ff353d3..6e4e62a 100644 --- a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt +++ b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt @@ -23,7 +23,7 @@ override fun onCreate() { super.onCreate() - Log.d(kTag, "onCreate => ") + Log.d(kTag, "onCreate => $kTag") } @@ -77,6 +77,6 @@ override fun onDestroy() { super.onDestroy() - Log.d(kTag, "onDestroy => ") + Log.d(kTag, "onDestroy => $kTag") } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt index 6c561a8..b60ea2c 100644 --- a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt +++ b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt @@ -1,8 +1,51 @@ package com.casic.endoscope.utils +import android.Manifest +import android.os.Build import java.util.Stack object ProjectConstant { + val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } + + const val PERMISSIONS_CODE = 999 + //海康摄像头参数 const val HK_NET_IP = "192.168.43.121" const val HK_NET_PORT = "8000" diff --git a/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt b/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt new file mode 100644 index 0000000..ed85113 --- /dev/null +++ b/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt @@ -0,0 +1,57 @@ +package com.casic.endoscope.view + +import android.os.Bundle +import com.casic.endoscope.R +import com.casic.endoscope.databinding.ActivityPermissionBinding +import com.casic.endoscope.utils.ProjectConstant +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (EasyPermissions.hasPermissions(this, *ProjectConstant.USER_PERMISSIONS)) { + navigatePageTo() + finish() + } else { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + ProjectConstant.PERMISSIONS_CODE, *ProjectConstant.USER_PERMISSIONS + ) + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + navigatePageTo() + finish() + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + finish() + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 166d246..c2a2c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.4' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3674d6d..5eb52f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,14 +1,33 @@ - + - + + + + + + + + + + + + @@ -31,6 +50,10 @@ + + diff --git a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt index ff353d3..6e4e62a 100644 --- a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt +++ b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt @@ -23,7 +23,7 @@ override fun onCreate() { super.onCreate() - Log.d(kTag, "onCreate => ") + Log.d(kTag, "onCreate => $kTag") } @@ -77,6 +77,6 @@ override fun onDestroy() { super.onDestroy() - Log.d(kTag, "onDestroy => ") + Log.d(kTag, "onDestroy => $kTag") } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt index 6c561a8..b60ea2c 100644 --- a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt +++ b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt @@ -1,8 +1,51 @@ package com.casic.endoscope.utils +import android.Manifest +import android.os.Build import java.util.Stack object ProjectConstant { + val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } + + const val PERMISSIONS_CODE = 999 + //海康摄像头参数 const val HK_NET_IP = "192.168.43.121" const val HK_NET_PORT = "8000" diff --git a/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt b/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt new file mode 100644 index 0000000..ed85113 --- /dev/null +++ b/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt @@ -0,0 +1,57 @@ +package com.casic.endoscope.view + +import android.os.Bundle +import com.casic.endoscope.R +import com.casic.endoscope.databinding.ActivityPermissionBinding +import com.casic.endoscope.utils.ProjectConstant +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (EasyPermissions.hasPermissions(this, *ProjectConstant.USER_PERMISSIONS)) { + navigatePageTo() + finish() + } else { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + ProjectConstant.PERMISSIONS_CODE, *ProjectConstant.USER_PERMISSIONS + ) + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + navigatePageTo() + finish() + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + finish() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/widgets/BluetoothDeviceDialog.kt b/app/src/main/java/com/casic/endoscope/widgets/BluetoothDeviceDialog.kt new file mode 100644 index 0000000..6ae91ba --- /dev/null +++ b/app/src/main/java/com/casic/endoscope/widgets/BluetoothDeviceDialog.kt @@ -0,0 +1,149 @@ +package com.casic.endoscope.widgets + +import android.annotation.SuppressLint +import android.app.Dialog +import android.bluetooth.BluetoothDevice +import android.content.Context +import android.graphics.Color +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.endoscope.R +import com.casic.endoscope.databinding.DialogBluetoothDeviceBinding +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.initDialogLayoutParams + +class BluetoothDeviceDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + private val kTag = "AddCameraPointDialog" + private val ctx = builder.context + private var beans = builder.beans + private val negativeBtn = builder.negativeBtn + private val positiveBtn = builder.positiveBtn + private val listener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var beans: ArrayList + lateinit var negativeBtn: String + lateinit var positiveBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setDeviceArray(beans: ArrayList): Builder { + this.beans = beans + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): BluetoothDeviceDialog { + return BluetoothDeviceDialog(this) + } + } + + private val binding: DialogBluetoothDeviceBinding by binding() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(0.3f) + setContentView(R.layout.dialog_bluetooth_device) + setCanceledOnTouchOutside(false) + initView() + } + + private fun initView() { + binding.cancelButton.text = negativeBtn + binding.cancelButton.setOnClickListener { + dismiss() + listener.onCancelClick() + } + + binding.confirmButton.text = positiveBtn + binding.confirmButton.setOnClickListener { + dismiss() + listener.onRetryClick() + } + + binding.listView.adapter = ItemListAdapter(ctx) + binding.listView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, position, _ -> + dismiss() + listener.onItemClick(position) + } + } + + inner class ItemListAdapter(context: Context) : BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = beans.size + + override fun getItem(position: Int): Any = beans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + @SuppressLint("MissingPermission") + override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup?): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(com.pengxh.kt.lite.R.layout.item_action_sheet, null) + holder.itemView = view.findViewById(R.id.sheetItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + holder.itemView.setBackgroundResource(R.drawable.sheet_item_middle_selector) + holder.itemView.text = beans[position].name + holder.itemView.textSize = 16f + holder.itemView.setTextColor(Color.BLUE) + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, 55.dp2px(ctx) + ) + view.layoutParams = param + return view + } + + } + + internal class ItemViewHolder { + lateinit var itemView: TextView + } + + interface OnDialogButtonClickListener { + fun onRetryClick() + + fun onItemClick(position: Int) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 166d246..c2a2c53 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -72,7 +72,7 @@ dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') //基础依赖库 - implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.3' + implementation 'com.github.AndroidCoderPeng:Kotlin-lite-lib:1.0.5.4' implementation 'androidx.core:core-ktx:1.9.0' implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.cardview:cardview:1.0.0' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3674d6d..5eb52f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,14 +1,33 @@ - + - + + + + + + + + + + + + @@ -31,6 +50,10 @@ + + diff --git a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt index ff353d3..6e4e62a 100644 --- a/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt +++ b/app/src/main/java/com/casic/endoscope/service/VideoTranscodeService.kt @@ -23,7 +23,7 @@ override fun onCreate() { super.onCreate() - Log.d(kTag, "onCreate => ") + Log.d(kTag, "onCreate => $kTag") } @@ -77,6 +77,6 @@ override fun onDestroy() { super.onDestroy() - Log.d(kTag, "onDestroy => ") + Log.d(kTag, "onDestroy => $kTag") } } \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt index 6c561a8..b60ea2c 100644 --- a/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt +++ b/app/src/main/java/com/casic/endoscope/utils/ProjectConstant.kt @@ -1,8 +1,51 @@ package com.casic.endoscope.utils +import android.Manifest +import android.os.Build import java.util.Stack object ProjectConstant { + val USER_PERMISSIONS = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.READ_MEDIA_IMAGES, + Manifest.permission.READ_MEDIA_VIDEO, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.BLUETOOTH_CONNECT, + Manifest.permission.BLUETOOTH_SCAN, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.MANAGE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } else { + arrayOf( + Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE, + Manifest.permission.ACCESS_COARSE_LOCATION, + Manifest.permission.ACCESS_FINE_LOCATION + ) + } + + const val PERMISSIONS_CODE = 999 + //海康摄像头参数 const val HK_NET_IP = "192.168.43.121" const val HK_NET_PORT = "8000" diff --git a/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt b/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt new file mode 100644 index 0000000..ed85113 --- /dev/null +++ b/app/src/main/java/com/casic/endoscope/view/PermissionActivity.kt @@ -0,0 +1,57 @@ +package com.casic.endoscope.view + +import android.os.Bundle +import com.casic.endoscope.R +import com.casic.endoscope.databinding.ActivityPermissionBinding +import com.casic.endoscope.utils.ProjectConstant +import com.gyf.immersionbar.ImmersionBar +import com.pengxh.kt.lite.base.KotlinBaseActivity +import com.pengxh.kt.lite.extensions.navigatePageTo +import pub.devrel.easypermissions.EasyPermissions + +class PermissionActivity : KotlinBaseActivity(), + EasyPermissions.PermissionCallbacks { + override fun initEvent() { + + } + + override fun initOnCreate(savedInstanceState: Bundle?) { + if (EasyPermissions.hasPermissions(this, *ProjectConstant.USER_PERMISSIONS)) { + navigatePageTo() + finish() + } else { + EasyPermissions.requestPermissions( + this, resources.getString(R.string.app_name) + "需要获取必要权限", + ProjectConstant.PERMISSIONS_CODE, *ProjectConstant.USER_PERMISSIONS + ) + } + } + + override fun initViewBinding(): ActivityPermissionBinding { + return ActivityPermissionBinding.inflate(layoutInflater) + } + + override fun observeRequestState() { + + } + + override fun setupTopBarLayout() { + ImmersionBar.with(this).statusBarDarkFont(false).init() + } + + override fun onRequestPermissionsResult( + requestCode: Int, permissions: Array, grantResults: IntArray + ) { + super.onRequestPermissionsResult(requestCode, permissions, grantResults) + EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this) + } + + override fun onPermissionsGranted(requestCode: Int, perms: MutableList) { + navigatePageTo() + finish() + } + + override fun onPermissionsDenied(requestCode: Int, perms: MutableList) { + finish() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/casic/endoscope/widgets/BluetoothDeviceDialog.kt b/app/src/main/java/com/casic/endoscope/widgets/BluetoothDeviceDialog.kt new file mode 100644 index 0000000..6ae91ba --- /dev/null +++ b/app/src/main/java/com/casic/endoscope/widgets/BluetoothDeviceDialog.kt @@ -0,0 +1,149 @@ +package com.casic.endoscope.widgets + +import android.annotation.SuppressLint +import android.app.Dialog +import android.bluetooth.BluetoothDevice +import android.content.Context +import android.graphics.Color +import android.os.Bundle +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import android.view.WindowManager +import android.widget.AbsListView +import android.widget.AdapterView +import android.widget.BaseAdapter +import android.widget.TextView +import com.casic.endoscope.R +import com.casic.endoscope.databinding.DialogBluetoothDeviceBinding +import com.pengxh.kt.lite.extensions.binding +import com.pengxh.kt.lite.extensions.dp2px +import com.pengxh.kt.lite.extensions.initDialogLayoutParams + +class BluetoothDeviceDialog private constructor(builder: Builder) : Dialog( + builder.context, R.style.UserDefinedDialogStyle +) { + private val kTag = "AddCameraPointDialog" + private val ctx = builder.context + private var beans = builder.beans + private val negativeBtn = builder.negativeBtn + private val positiveBtn = builder.positiveBtn + private val listener = builder.listener + + class Builder { + lateinit var context: Context + lateinit var beans: ArrayList + lateinit var negativeBtn: String + lateinit var positiveBtn: String + lateinit var listener: OnDialogButtonClickListener + + fun setContext(context: Context): Builder { + this.context = context + return this + } + + fun setDeviceArray(beans: ArrayList): Builder { + this.beans = beans + return this + } + + fun setNegativeButton(name: String): Builder { + this.negativeBtn = name + return this + } + + fun setPositiveButton(name: String): Builder { + this.positiveBtn = name + return this + } + + fun setOnDialogButtonClickListener(listener: OnDialogButtonClickListener): Builder { + this.listener = listener + return this + } + + fun build(): BluetoothDeviceDialog { + return BluetoothDeviceDialog(this) + } + } + + private val binding: DialogBluetoothDeviceBinding by binding() + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + this.initDialogLayoutParams(0.3f) + setContentView(R.layout.dialog_bluetooth_device) + setCanceledOnTouchOutside(false) + initView() + } + + private fun initView() { + binding.cancelButton.text = negativeBtn + binding.cancelButton.setOnClickListener { + dismiss() + listener.onCancelClick() + } + + binding.confirmButton.text = positiveBtn + binding.confirmButton.setOnClickListener { + dismiss() + listener.onRetryClick() + } + + binding.listView.adapter = ItemListAdapter(ctx) + binding.listView.onItemClickListener = + AdapterView.OnItemClickListener { _, _, position, _ -> + dismiss() + listener.onItemClick(position) + } + } + + inner class ItemListAdapter(context: Context) : BaseAdapter() { + + private val inflater: LayoutInflater = LayoutInflater.from(context) + + override fun getCount(): Int = beans.size + + override fun getItem(position: Int): Any = beans[position] + + override fun getItemId(position: Int): Long = position.toLong() + + @SuppressLint("MissingPermission") + override fun getView(position: Int, convertView: View?, viewGroup: ViewGroup?): View { + val view: View + val holder: ItemViewHolder + if (convertView == null) { + holder = ItemViewHolder() + view = inflater.inflate(com.pengxh.kt.lite.R.layout.item_action_sheet, null) + holder.itemView = view.findViewById(R.id.sheetItemView) + view.tag = holder + } else { + view = convertView + holder = view.tag as ItemViewHolder + } + holder.itemView.setBackgroundResource(R.drawable.sheet_item_middle_selector) + holder.itemView.text = beans[position].name + holder.itemView.textSize = 16f + holder.itemView.setTextColor(Color.BLUE) + //需要动态设置item的高度 + val param = AbsListView.LayoutParams( + WindowManager.LayoutParams.MATCH_PARENT, 55.dp2px(ctx) + ) + view.layoutParams = param + return view + } + + } + + internal class ItemViewHolder { + lateinit var itemView: TextView + } + + interface OnDialogButtonClickListener { + fun onRetryClick() + + fun onItemClick(position: Int) + + fun onCancelClick() + } +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 549967b..287cc58 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -40,6 +40,13 @@ android:layout_marginEnd="@dimen/dp_10" android:background="@null" android:src="@mipmap/image_button" /> + +