Prechádzať zdrojové kódy

@fun: LoginScreen.kt

bai 3 rokov pred
rodič
commit
5a2eb3c248

+ 26 - 24
adm-android-base/src/main/java/com/ys/bdtp/android/base/SOptions.kt

@@ -1,119 +1,121 @@
 package com.ys.bdtp.android.base
 
 import android.content.SharedPreferences
-import org.jetbrains.anko.defaultSharedPreferences
+
+//import android.content.SharedPreferences
+//import org.jetbrains.anko.defaultSharedPreferences
 
 /**
  * 保存应用系统设置
  *
  * @author  庞利祥(sybotan@126.com)
  */
-open class SOptions {
-    /** 共享存储对象 */
+/*open class SOptions {
+    *//** 共享存储对象 *//*
     private var pref: SharedPreferences = SApplication.app.defaultSharedPreferences
 
-    /**
+    *//**
      * 获得Boolean类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getBoolean(key: String, default: Boolean): Boolean {
         return pref.getBoolean(key, default)
     } // Function getBoolean()
 
-    /**
+    *//**
      * 设置Boolean类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putBoolean(key: String, value: Boolean) {
         pref.edit().putBoolean(key, value).apply()
         return
     } // Function putBoolean()
 
-    /**
+    *//**
      * 获得Float类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getFloat(key: String, default: Float): Float {
         return pref.getFloat(key, default)
     } // Function getFloat()
 
-    /**
+    *//**
      * 设置Float类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putFloat(key: String, value: Float) {
         pref.edit().putFloat(key, value).apply()
         return
     } // Function putFloat()
 
-    /**
+    *//**
      * 获得Int类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getInt(key: String, default: Int): Int {
         return pref.getInt(key, default)
     } // Function getInt()
 
-    /**
+    *//**
      * 设置Int类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putInt(key: String, value: Int) {
         pref.edit().putInt(key, value).apply()
         return
     } // Function putInt()
 
-    /**
+    *//**
      * 获得Long类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getLong(key: String, default: Long): Long {
         return pref.getLong(key, default)
     } // Function getLong()
 
-    /**
+    *//**
      * 设置Long类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putLong(key: String, value: Long) {
         pref.edit().putLong(key, value).apply()
         return
     } // Function putLong()
 
-    /**
+    *//**
      * 获得String类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getString(key: String, default: String): String {
         return pref.getString(key, default)!!
     } // Function getString()
 
-    /**
+    *//**
      * 设置String类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putString(key: String, value: String) {
         pref.edit().putString(key, value).apply()
         return
     } // Function putString()
-} // Class SOptions
+}*/ // Class SOptions

+ 2 - 2
adm-base/build.gradle.kts

@@ -37,9 +37,9 @@ dependencies {
     implementation("androidx.core:core-ktx:1.7.0")
     implementation("androidx.appcompat:appcompat:1.4.0")
     implementation("com.google.android.material:material:1.4.0")
-    implementation("com.google.zxing:core:3.3.0")
+    implementation("com.google.zxing:core:3.4.1")
     //implementation("cn.sagacloud:saga-kotlin-base:1.4.105")
-    //implementation("pub.devrel:easypermissions:1.2.0")
+    implementation("pub.devrel:easypermissions:3.0.0")
 
     testImplementation("junit:junit:4.13.2")
     androidTestImplementation("androidx.test.ext:junit:1.1.3")

+ 24 - 25
adm-base/src/main/java/com/ys/bdtp/base/SOptions.kt

@@ -1,120 +1,119 @@
 
 package com.ys.bdtp.base
 
-import android.content.SharedPreferences
-import org.jetbrains.anko.defaultSharedPreferences
+
 
 /**
  * 保存应用系统设置
  *
  * @author  庞利祥(sybotan@126.com)
  */
-open class SOptions {
-    /** 共享存储对象 */
+/*open class SOptions {
+    *//** 共享存储对象 *//*
     private var pref: SharedPreferences = SApplication.app.defaultSharedPreferences
 
-    /**
+    *//**
      * 获得Boolean类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getBoolean(key: String, default: Boolean): Boolean {
         return pref.getBoolean(key, default)
     } // Function getBoolean()
 
-    /**
+    *//**
      * 设置Boolean类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putBoolean(key: String, value: Boolean) {
         pref.edit().putBoolean(key, value).apply()
         return
     } // Function putBoolean()
 
-    /**
+    *//**
      * 获得Float类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getFloat(key: String, default: Float): Float {
         return pref.getFloat(key, default)
     } // Function getFloat()
 
-    /**
+    *//**
      * 设置Float类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putFloat(key: String, value: Float) {
         pref.edit().putFloat(key, value).apply()
         return
     } // Function putFloat()
 
-    /**
+    *//**
      * 获得Int类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getInt(key: String, default: Int): Int {
         return pref.getInt(key, default)
     } // Function getInt()
 
-    /**
+    *//**
      * 设置Int类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putInt(key: String, value: Int) {
         pref.edit().putInt(key, value).apply()
         return
     } // Function putInt()
 
-    /**
+    *//**
      * 获得Long类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getLong(key: String, default: Long): Long {
         return pref.getLong(key, default)
     } // Function getLong()
 
-    /**
+    *//**
      * 设置Long类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putLong(key: String, value: Long) {
         pref.edit().putLong(key, value).apply()
         return
     } // Function putLong()
 
-    /**
+    *//**
      * 获得String类型的值
      *
      * @param   key         键
      * @param   default     默认值
-     */
+     *//*
     fun getString(key: String, default: String): String {
         return pref.getString(key, default)!!
     } // Function getString()
 
-    /**
+    *//**
      * 设置String类型的值
      *
      * @param   key         键
      * @param   value       值
-     */
+     *//*
     fun putString(key: String, value: String) {
         pref.edit().putString(key, value).apply()
         return
     } // Function putString()
-} // Class SOptions
+}*/ // Class SOptions

+ 6 - 3
adm-base/src/main/java/com/ys/bdtp/base/activities/SBaseActivity.kt

@@ -1,7 +1,8 @@
 package com.ys.bdtp.base.activities
 
+import android.widget.Toast
 import androidx.appcompat.app.AppCompatActivity
-import org.jetbrains.anko.toast
+//import org.jetbrains.anko.toast
 import pub.devrel.easypermissions.AppSettingsDialog
 import pub.devrel.easypermissions.EasyPermissions
 
@@ -36,7 +37,8 @@ open class SBaseActivity : AppCompatActivity(), EasyPermissions.PermissionCallba
      * @param   perms           请求权限列表
      */
     override fun onPermissionsDenied(requestCode: Int, perms: MutableList<String>) {
-        toast("用户授权失败!")
+        // toast("用户授权失败!")
+        Toast.makeText(this, "用户授权失败!", Toast.LENGTH_LONG).show()
         /**
          * 若是在权限弹窗中,用户勾选了'NEVER ASK AGAIN.'或者'不在提示',且拒绝权限。
          * 这时候,需要跳转到设置界面去,让用户手动开启。
@@ -58,7 +60,8 @@ open class SBaseActivity : AppCompatActivity(), EasyPermissions.PermissionCallba
      * @param   perms           请求权限列表
      */
     override fun onPermissionsGranted(requestCode: Int, perms: MutableList<String>) {
-        toast("用户授权成功!")
+        // toast("用户授权成功!")
+        Toast.makeText(this, "用户授权失败!", Toast.LENGTH_LONG).show()
         return
     } // Function onPermissionsGranted()
 

+ 2 - 1
adm-graph/src/main/java/com/ys/bdtp/graph/SGraphyItem.kt

@@ -399,7 +399,8 @@ open class SGraphyItem(parent: SGraphyItem? = null) {
                     matrix.preTranslate(src[2], src[5])
                     matrix.preScale(item.scale.x, item.scale.y)
                     matrix.preRotate(item.rotate)
-                    canvas.matrix = matrix
+                    //canvas.matrix = matrix
+                    canvas.setMatrix(matrix)
 //                    matrix.getValues(src)
 //                    item._inverseScaleX = 1.0f/src[0]
 //                    item._inverseScaleY = 1.0f/src[4]

+ 4 - 4
adm-graph/src/main/java/com/ys/bdtp/graph/SGraphyView.kt

@@ -23,7 +23,7 @@ import kotlin.math.min
  * @author  庞利祥(sybotan@126.com)
  */
 open class SGraphyView(context: Context, attrs: AttributeSet? = null) : SurfaceView(context, attrs),
-    SurfaceHolder.Callback, View.OnTouchListener, GestureDetector.OnGestureListener, Runnable {
+    SurfaceHolder.Callback, View.OnTouchListener, GestureDetector.OnGestureListener, Runnable { // Class SGraphyView
 
     /**
      * 类对象
@@ -249,7 +249,7 @@ open class SGraphyView(context: Context, attrs: AttributeSet? = null) : SurfaceV
      *
      * @param   holder      surface创建成功时的保持器。
      */
-    override fun surfaceCreated(holder: SurfaceHolder?) {
+    override fun surfaceCreated(holder: SurfaceHolder) {
         Log.d(TAG, "surfaceCreated")
 
         isDrawing = true
@@ -268,7 +268,7 @@ open class SGraphyView(context: Context, attrs: AttributeSet? = null) : SurfaceV
      * @param   width       宽度
      * @param   height      高度
      */
-    override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) {
+    override fun surfaceChanged(holder: SurfaceHolder, format: Int, width: Int, height: Int) {
         Log.d(TAG, "surfaceChanged:width=$width, height=$height")
 
         return
@@ -279,7 +279,7 @@ open class SGraphyView(context: Context, attrs: AttributeSet? = null) : SurfaceV
      *
      * @param   holder      surface销毁时的保持器。
      */
-    override fun surfaceDestroyed(holder: SurfaceHolder?) {
+    override fun surfaceDestroyed(holder: SurfaceHolder) {
         Log.d(TAG, "surfaceDestroyed")
 
         paintThread!!.interrupt()

+ 1 - 1
app/src/main/java/com/ys/bdtp/adm/app/Constants.kt

@@ -9,7 +9,7 @@ const val test2IP = "http://192.168.0.11:8876/"
 
 const val tencentIP = "http://82.157.28.170:8876/"
 
-const val JdIP = "http://82.157.151.123/adm-poc-backend/"
+const val JdIP = "http://www.ysbdtp.com/adm-poc-backend/"
 
 const val IP = JdIP
 

+ 1 - 1
app/src/main/java/com/ys/bdtp/adm/mvvm/model/Data.kt

@@ -1,7 +1,7 @@
 package com.ys.bdtp.adm.mvvm.model
 
 /**
- * UI 数据类
+ * UI 数据类
  *
  * @param state : 数据状态
  * @param  data : 真实数据

+ 6 - 1
app/src/main/java/com/ys/bdtp/adm/mvvm/model/nt/Api.kt

@@ -1,3 +1,8 @@
 package com.ys.bdtp.adm.mvvm.model.nt
 
-interface Api
+import retrofit2.http.GET
+
+interface Api {
+    @GET("")
+    fun login()
+}

+ 4 - 2
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/flash/FlashScreen.kt

@@ -2,13 +2,15 @@ package com.ys.bdtp.adm.mvvm.ui.flash
 
 import androidx.compose.foundation.layout.Box
 import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.width
 import androidx.compose.material.Text
 import androidx.compose.runtime.Composable
 import androidx.compose.ui.Modifier
+import androidx.compose.ui.unit.dp
 
 @Composable
 fun FlashScreen() {
-    Box(modifier = Modifier.fillMaxSize()) {
-        Text("Flash")
+    Box(modifier = Modifier.fillMaxSize().width(404.dp)) {
+        Text(text = "Flash")
     }
 }

+ 156 - 0
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/login/LoginScreen.kt

@@ -0,0 +1,156 @@
+package com.ys.bdtp.adm.mvvm.ui.login
+
+import androidx.compose.foundation.background
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Spacer
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.shape.RoundedCornerShape
+import androidx.compose.material.Button
+import androidx.compose.material.ButtonDefaults
+import androidx.compose.material.Icon
+import androidx.compose.material.IconButton
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Text
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.res.painterResource
+import androidx.compose.ui.text.input.PasswordVisualTransformation
+import androidx.compose.ui.text.input.VisualTransformation
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import androidx.compose.ui.unit.sp
+import com.ys.bdtp.adm.R
+import com.ys.bdtp.adm.mvvm.vm.login.LoginViewModel
+import org.kodein.di.compose.rememberViewModel
+
+@Composable
+fun LoginScreen() {
+    val vm by rememberViewModel<LoginViewModel>()
+
+    var isShowPassword by remember { mutableStateOf(false) }
+    var isLoginBtnEnable by remember { mutableStateOf(false) }
+
+    var account by remember { mutableStateOf("") }
+    var password by remember { mutableStateOf("") }
+
+    var visualState: VisualTransformation by remember { mutableStateOf(PasswordVisualTransformation()) }
+
+
+    Column(
+        modifier = Modifier
+            .width(404.dp)
+            .height(444.dp)
+            .background(Color.White)
+            .padding(start = 32.dp, top = 48.dp, end = 32.dp, bottom = 56.dp)
+    ) {
+        Text(text = "账号登录", fontSize = 28.sp)
+        Spacer(modifier = Modifier.height(10.dp))
+        Text(text = "你好,欢迎来到工单系统", color = Color(0xFF8D9399), fontSize = 12.sp)
+        Spacer(modifier = Modifier.height(36.dp))
+
+        // 账号文本框
+        OutlinedTextField(
+            value = account,
+            modifier = Modifier.fillMaxWidth(),
+            onValueChange = {
+                account = it
+                isLoginBtnEnable = account.isNotEmpty() && password.isNotEmpty()
+            },
+            label = {
+                Text(text = "请输入账号", color = Color(0xFFC3C7CB))
+            },
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                textColor = Color(0xFF1F2529),
+                cursorColor = Color(0xFF0091FF),
+                focusedBorderColor = Color(0xFF0091FF),
+                focusedLabelColor = Color(0xFF0091FF),
+                backgroundColor = Color.Transparent
+            ),
+            trailingIcon = {
+                IconButton(
+                    onClick = { account = "" },
+                    enabled = account.isNotEmpty()
+                ) {
+                    if (account.isNotBlank())
+                        Icon(
+                            painter = painterResource(R.drawable.icon_trailing_del),
+                            contentDescription = "",
+                            modifier = Modifier.size(16.dp),
+                            tint = Color(0xFFC3C6CB)
+                        )
+                }
+            }
+        )
+
+        Spacer(modifier = Modifier.height(16.dp))
+
+        // 密码文本框
+        OutlinedTextField(
+            value = password,
+            modifier = Modifier.fillMaxWidth(),
+            onValueChange = {
+                password = it
+                isLoginBtnEnable = account.isNotEmpty() && password.isNotEmpty()
+            }, label = {
+                Text(text = "请输入密码", color = Color(0xFFC3C7CB))
+            },
+            colors = TextFieldDefaults.outlinedTextFieldColors(
+                textColor = Color(0xFF1F2529),
+                cursorColor = Color(0xFF0091FF),
+                focusedBorderColor = Color(0xFF0091FF),
+                focusedLabelColor = Color(0xFF0091FF),
+                backgroundColor = Color.Transparent
+            ),
+            visualTransformation = visualState,
+            trailingIcon = {
+                IconButton(onClick = { isShowPassword = !isShowPassword }) {
+                    val icon =
+                        if (isShowPassword) R.drawable.icon_trailing_pwd_show else R.drawable.icon_trailing_pwd_hide
+                    visualState =
+                        if (isShowPassword) VisualTransformation.None else PasswordVisualTransformation()
+                    val description = if (isShowPassword) "Show password" else "Hide password"
+                    Icon(
+                        painter = painterResource(icon),
+                        contentDescription = description,
+                        modifier = Modifier.size(16.dp),
+                        tint = Color(0xFFC3C6CB)
+                    )
+                }
+            }
+        )
+
+        Spacer(modifier = Modifier.height(48.dp))
+
+        Button(
+            onClick = {
+                // TODO
+                // 处理完后清空数据
+                isLoginBtnEnable = account.isNotEmpty() && password.isNotEmpty()
+            },
+            enabled = isLoginBtnEnable,
+            modifier = Modifier.fillMaxWidth().height(50.dp),
+            shape = RoundedCornerShape(50),
+            colors = ButtonDefaults.buttonColors(
+                backgroundColor = Color(0xFF0091FF)
+            )
+        ) {
+            Text(text = "登录", color = Color(0XFFFFFFFF), fontSize = 16.sp)
+        }
+    }
+}
+
+@Preview
+@Composable
+fun PreviewLoginScreen() {
+    LoginScreen()
+}

+ 0 - 9
app/src/main/java/com/ys/bdtp/adm/mvvm/ui/login/LoginScrren.kt

@@ -1,9 +0,0 @@
-package com.ys.bdtp.adm.mvvm.ui.login
-
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.ComposeCompilerApi
-
-@Composable
-fun LoginScreen() {
-
-}

BIN
app/src/main/res/drawable-xxhdpi/icon_trailing_del.png


BIN
app/src/main/res/drawable-xxhdpi/icon_trailing_pwd_hide.png


BIN
app/src/main/res/drawable-xxhdpi/icon_trailing_pwd_show.png