123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331 |
- package com.cr.cruav
- import android.Manifest
- import android.app.Activity
- import android.content.Context
- import android.content.pm.PackageManager
- import android.os.Build
- import android.os.Bundle
- import android.util.DisplayMetrics
- import android.util.Log
- import android.view.View
- import android.view.View.OnClickListener
- import android.widget.Switch
- import android.widget.TextView
- import androidx.core.app.ActivityCompat
- import androidx.core.content.ContextCompat
- import com.cr.common.DataManager
- import com.cr.common.DatabaseManager
- import com.cr.common.FileManager
- import com.cr.data.CrConfig
- import com.cr.data.CrUtil
- import com.cr.data.CrUtil.Companion.onStart
- import com.cr.dialog.DialogNormal
- import com.cr.dialog.DialogNormal.DialogNormalListener
- import com.cr.event.EventFragmentBarAction
- import com.cr.models.UserModel
- import com.cr.network.NetManager
- import com.cr.network.TCPDataTask
- import com.cr.pages.FragmentSetIpAndCom
- import com.cr.widget.CrEditTextWidget
- import com.squareup.otto.Subscribe
- import kotlinx.android.synthetic.main.av_login.*
- import org.json.JSONArray
- class AvLogin : CrActivity(), OnClickListener {
- // define: 2023/3/31 权限列表
- val REQUIRED_PERMISSION_LIST = arrayOf(
- Manifest.permission.VIBRATE, // VARIABLE: 4/8/21
- Manifest.permission.INTERNET, // VARIABLE: 4/8/21 网路权限
- Manifest.permission.ACCESS_WIFI_STATE, // VARIABLE: 4/8/21 监测WIFI状态权限
- Manifest.permission.ACCESS_COARSE_LOCATION, // Maps
- Manifest.permission.ACCESS_NETWORK_STATE, // VARIABLE: 4/8/21 检测网络状态权限
- Manifest.permission.ACCESS_FINE_LOCATION, // VARIABLE: 4/8/21 定位权限
- Manifest.permission.CHANGE_WIFI_STATE, // VARIABLE: 4/8/21 检测Wifi或USB的连接
- Manifest.permission.WRITE_EXTERNAL_STORAGE, // Log files
- Manifest.permission.BLUETOOTH, // VARIABLE: 4/8/21 蓝牙权限
- Manifest.permission.BLUETOOTH_ADMIN, // VARIABLE: 4/8/21 蓝牙权限
- Manifest.permission.READ_EXTERNAL_STORAGE, // Log files
- Manifest.permission.READ_PHONE_STATE, // VARIABLE: 4/8/21 读取手机状态权限
- Manifest.permission.RECORD_AUDIO // VARIABLE: 4/8/21 录音权限
- )
- // define: 2023/3/31 动态权限列表
- private val missingPermission = arrayListOf<String>()
- // define: 2023/3/31 权限检测返回码
- private val REQUEST_PERMISSION_CODE: Int = 12345
- // define: 2023/3/30 设置页面
- var fragIpAndCom: FragmentSetIpAndCom? = null
- // define: 2023/4/6 初始化控件
- var lblVersion: TextView? = null
- var txtUserName: CrEditTextWidget? = null
- var txtPassword: CrEditTextWidget? = null
- var switchSavePassword: Switch? = null
- /**
- * 创建视图
- * @param savedInstanceState Bundle?
- */
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- setContentView(R.layout.av_login)
- // todo: 2023/4/10 初始化上下文
- this.context = this
- // todo: 2023/3/30 初始化页面
- fragIpAndCom = FragmentSetIpAndCom()
- fragIpAndCom?.let {
- addFragment(it, R.id.av_frm_left_panel)
- hideFragment(it)
- }
- // todo: 2023/4/6 初始化控件
- joinControls()
- // todo: 2023/3/30 注册事件
- registerListener();
- // todo: 2023/3/31 检测权限
- checkAndRequestPermissions()
- // var displayMetrics = DisplayMetrics()
- // var windowManager: WindowManager =
- // this.getSystemService(Context.WINDOW_SERVICE) as WindowManager
- // windowManager.defaultDisplay.getMetrics(displayMetrics)
- // var screenWidth = this.convertPixelsToDp(displayMetrics.widthPixels.toFloat())
- // var screenHeight = this.convertPixelsToDp(displayMetrics.heightPixels.toFloat())
- //
- // CrUtil.print("---w:$screenWidth---h:$screenHeight")
- // todo: 2023/4/3 订阅事件
- CrApplication.getEventBus().register(this)
- }
- fun Context.convertPixelsToDp(px: Float): Float {
- val resources = this.resources
- val metrics = resources.displayMetrics
- return px / (metrics.densityDpi.toFloat() / DisplayMetrics.DENSITY_DEFAULT)
- }
- /**
- * 重写挂载控件事件
- */
- override fun joinControls() {
- super.joinControls()
- // todo: 2023/4/6 初始化版本信息
- lblVersion = findViewById(R.id.login_version)
- lblVersion?.text = "{${CrUtil.getVersionName(this)}}"
- // todo: 2023/4/6 初始化账号密码
- txtUserName = findViewById(R.id.login_username)
- txtPassword = findViewById(R.id.login_password)
- txtPassword?.setIsPassword(true)
- switchSavePassword = findViewById(R.id.switch_password)
- }
- /**
- * 页面初始化
- */
- private fun initPage() {
- // todo: 2023/4/6 获取存储的用户并显示
- var user: UserModel = DataManager.getUser()
- txtUserName?.setContent(user.userId!!)
- txtPassword?.setContent(user.userPwd!!)
- }
- /**
- * 重写注册事件
- */
- override fun registerListener() {
- super.registerListener()
- // todo: 2023/3/30 挂在开关事件
- switch_password.setOnCheckedChangeListener { compoundButton, b ->
- Log.i(compoundButton.toString(), b.toString());
- switch_password.setSwitchTextAppearance(this, R.style.switch_text_on);
- }
- // todo: 2023/3/30 注册登录事件
- login_btn_login.setOnClickListener(this)
- // todo: 2023/3/30 注册设置事件
- login_btn_set.setOnClickListener(this)
- }
- /**
- * 覆写点击事件
- * @param p0 View
- */
- override fun onClick(p0: View?) {
- when (p0!!.id) {
- R.id.login_btn_login -> {
- var userName: String? = txtUserName?.checkBlank("请输入账号!") ?: return
- var passWord: String? = txtPassword?.checkBlank("请输入密码!") ?: return
- var isSave: Boolean? = switchSavePassword?.isChecked
- checkUserInfo(userName!!, passWord!!, isSave!!)
- }
- R.id.login_btn_set -> {
- fragIpAndCom?.let {
- showFragment(it)
- }
- }
- }
- }
- /**
- * 登录验证
- * @param userName String 账号
- * @param password String 密码
- * @param isSave Boolean 是否保存
- */
- private fun checkUserInfo(userName: String, password: String, isSave: Boolean) {
- if (isSave) {
- if (DataManager.saveUser(userName, password)) {
- // todo: 2023/4/10 登录系统
- login(userName, password)
- }
- } else {
- if (DataManager.deleteUser())
- // todo: 2023/4/10 登录系统
- login(userName, password)
- }
- }
- /**
- * 登录系统
- * @param userName String 账号Id
- * @param password String 密码
- */
- private fun login(userName: String, password: String) {
- var user = UserModel(userName, password)
- // todo: 2023/4/10 向服务器发起认证消息
- TCPDataTask.getInstance().sendJSON(
- NetManager.getServerUrl("appQueryUser"),
- user,
- object : TCPDataTask.OnChangeListener {
- // todo: 2023/4/10 成功
- override fun onSuccess(jsonArray: JSONArray) {
- CrConfig.user = UserModel.toModel(jsonArray.optString(0))
- context!!.onStart<AvMain>()
- }
- // todo: 2023/4/10 失败
- override fun onFailed(message: String) {
- showError(message)
- }
- },context,"认证中...")
- }
- /**
- * 检测权限
- */
- private fun checkAndRequestPermissions() {
- for (eachPermission in REQUIRED_PERMISSION_LIST) {
- if (ContextCompat.checkSelfPermission(
- this,
- eachPermission
- ) != PackageManager.PERMISSION_GRANTED
- ) {
- missingPermission.add(eachPermission)
- }
- }
- // TODO: 4/8/21 请求缺少的权限
- if (missingPermission.isEmpty()) {
- init()
- } else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
- ActivityCompat.requestPermissions(
- (this as Activity?)!!,
- missingPermission.toTypedArray<String>(),
- REQUEST_PERMISSION_CODE
- )
- // todo: 2023/3/31 权限不足 重启App
- DialogNormal(this, "操作提示", "权限检测异常,请手动开启后重启App!", object : DialogNormalListener {
- override fun completion() {
- checkAndRequestPermissions()
- }
- override fun close() {
- }
- }).show()
- }
- }
- /**
- * 初始化
- */
- private fun init() {
- // todo: 2023/3/31 检查并创建工程文件夹
- if (!FileManager.isExists(CrUtil.PROJECT_PATH)) {
- if (!FileManager.createFolder(CrUtil.PROJECT_PATH)) {
- CrUtil.showMessage("工程文件夹创建失败,请检查权限!")
- }
- }
- // todo: 2023/3/31 检查并创建资源文件夹
- if (!FileManager.isExists(CrUtil.IMAGE_PATH)) {
- if (!FileManager.createFolder(CrUtil.IMAGE_PATH)) {
- CrUtil.showMessage("资源文件夹创建失败,请检查权限!")
- }
- }
- // todo: 2023/3/31 检查并创建缓存文件夹
- if (!FileManager.isExists(CrUtil.PROJECT_CACHE_PATH)) {
- if (!FileManager.createFolder(CrUtil.PROJECT_CACHE_PATH)) {
- CrUtil.showMessage("缓存文件夹创建失败,请检查权限!")
- }
- }
- // todo: 2023/3/31 检查并创建配置文件夹
- if (!FileManager.isExists(CrUtil.CONFIG_PATH)) {
- if (!FileManager.createFolder(CrUtil.CONFIG_PATH)) {
- CrUtil.showMessage("配置文件夹创建失败,请检查权限!")
- }
- }
- // todo: 2023/4/3 拷贝配置库
- FileManager.MoveDataBase(this)
- // todo: 2023/4/3 判断数据库是否存在 存在则启动
- var databaseIsOpen: Boolean = DatabaseManager.getInstance().openConfigDatabase()
- // todo: 2023/4/3 最终判断是否可以正常使用App
- if (FileManager.isExists(CrUtil.PROJECT_PATH) && FileManager.isExists(CrUtil.IMAGE_PATH) && FileManager.isExists(
- CrUtil.PROJECT_CACHE_PATH
- ) && FileManager.isExists(CrUtil.CONFIG_PATH) && FileManager.isExists(CrUtil.DATABASE_PATH) && databaseIsOpen
- ) {
- // todo: 2023/4/3 自检通过 可正常使用
- DialogNormal(this, "操作提示", "系统自检通过,可正常使用!").show()
- // todo: 2023/4/6 页面初始化显示
- initPage()
- } else {
- // todo: 2023/4/3 自检异常 重启App自检
- DialogNormal(this, "操作提示", "系统自检异常,请重启App!", object : DialogNormalListener {
- override fun completion() {
- init()
- }
- override fun close() {
- }
- }).show()
- }
- }
- /**
- * 订阅Fragment管理事件
- * @param event EventFragmentBarAction
- */
- @Subscribe
- fun onFragmentBar(event: EventFragmentBarAction) {
- hideFragment(fragIpAndCom!!)
- }
- // todo: 2023/4/3 生命周期相关方法
- /**
- * 销毁
- */
- override fun onDestroy() {
- CrApplication.getEventBus().unregister(this)
- super.onDestroy()
- }
- /**
- * 重新激活
- */
- override fun onResume() {
- super.onResume()
- }
- }
|