diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 7c0fe3a..822ff04 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -40,6 +40,8 @@ android { } dependencies { + implementation(libs.lifecycle.view.model) + implementation(libs.fragment.navigation) implementation(libs.ktor.client.core) implementation(libs.zbar.code) implementation(libs.ktor.serialization.json) diff --git a/app/src/main/java/com/example/nto_2024_client/MainActivity.kt b/app/src/main/java/com/example/nto_2024_client/MainActivity.kt index 6822cc4..f78c441 100644 --- a/app/src/main/java/com/example/nto_2024_client/MainActivity.kt +++ b/app/src/main/java/com/example/nto_2024_client/MainActivity.kt @@ -9,6 +9,8 @@ import androidx.core.app.ActivityCompat import androidx.core.content.ContextCompat import androidx.core.view.ViewCompat import androidx.core.view.WindowInsetsCompat +import androidx.navigation.fragment.NavHostFragment +import com.example.nto_2024_client.login.LoginFragment import com.example.nto_2024_client.qr.QrFragment class MainActivity : AppCompatActivity() { @@ -21,6 +23,8 @@ class MainActivity : AppCompatActivity() { v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom) insets } +// val navHostFragment = supportFragmentManager.findFragmentById(R.id.fragmentContainerView) as NavHostFragment +// val navController = navHostFragment.navController checkPermissions() } @@ -29,7 +33,7 @@ class MainActivity : AppCompatActivity() { ActivityCompat.requestPermissions(this, arrayOf(android.Manifest.permission.CAMERA),12) } else{ - supportFragmentManager.beginTransaction().replace(R.id.fragment_login,QrFragment()).commit() + supportFragmentManager.beginTransaction().replace(R.id.fragment_login,LoginFragment()).commit() } } @@ -43,7 +47,7 @@ class MainActivity : AppCompatActivity() { if(requestCode == 12){ if(grantResults[0] == PackageManager.PERMISSION_GRANTED){ - supportFragmentManager.beginTransaction().replace(R.id.fragment_login,QrFragment()).commit() + supportFragmentManager.beginTransaction().replace(R.id.fragment_login,LoginFragment()).commit() Log.d("MyResp","GOOOL") } diff --git a/app/src/main/java/com/example/nto_2024_client/list/ListFragment.kt b/app/src/main/java/com/example/nto_2024_client/list/ListFragment.kt new file mode 100644 index 0000000..e31259c --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/ListFragment.kt @@ -0,0 +1,26 @@ +package com.example.nto_2024_client.list + +import android.os.Bundle +import android.view.View +import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Observer +import com.example.nto_2024_client.R +import com.example.nto_2024_client.databinding.FragmentListBinding +import com.example.nto_2024_client.list.adapter.ListAdapter + +class ListFragment:Fragment(R.layout.fragment_list) { + private lateinit var binding:FragmentListBinding + private val listViewModel:ListViewModel by activityViewModels() + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + val adapter = ListAdapter() + binding.rvView.adapter=adapter + binding = FragmentListBinding.bind(view) + listViewModel.entry.observe(viewLifecycleOwner, Observer { it-> + for (listEnterEntity in it){ + adapter.addEnter(listEnterEntity) + } + }) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/list/ListViewModel.kt b/app/src/main/java/com/example/nto_2024_client/list/ListViewModel.kt new file mode 100644 index 0000000..da32b35 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/ListViewModel.kt @@ -0,0 +1,33 @@ +package com.example.nto_2024_client.list + +import android.util.Log +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.nto_2024_client.list.models.ListEnterEntity +import com.example.nto_2024_client.list.network.ListEnterRepoImpl +import com.example.nto_2024_client.list.network.ListNetworkEnter +import kotlinx.coroutines.launch + +class ListViewModel:ViewModel() { + private val listNetworkEnter:ListNetworkEnter = ListNetworkEnter() + private val listEnterRepoImpl:ListEnterRepoImpl = ListEnterRepoImpl(listNetworkEnter) + + val entry:MutableLiveData> by lazy { + MutableLiveData>() + } + + fun getEntry(username:String,password:String){ + viewModelScope.launch { + val result = listEnterRepoImpl.lastEntry(username,password) + result.onSuccess { listEntry-> + entry.value = listEntry + Log.d("MyListEntry",entry.value.toString()) + + } + result.onFailure { + Log.d("MyListEntry","Mda") + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/list/adapter/ListAdapter.kt b/app/src/main/java/com/example/nto_2024_client/list/adapter/ListAdapter.kt new file mode 100644 index 0000000..ff86ede --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/adapter/ListAdapter.kt @@ -0,0 +1,44 @@ +package com.example.nto_2024_client.list.adapter + +import android.annotation.SuppressLint +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import androidx.recyclerview.widget.ListAdapter +import androidx.recyclerview.widget.RecyclerView +import com.example.nto_2024_client.R +import com.example.nto_2024_client.databinding.EntryItemBinding +import com.example.nto_2024_client.list.models.ListEnterEntity + +class ListAdapter:RecyclerView.Adapter() { + + + val entryItem=ArrayList() + inner class EntryHolder(item: View):RecyclerView.ViewHolder(item){ + val binding=EntryItemBinding.bind(item) + fun bind(item: ListEnterEntity){ + binding.textView.text = item.lastEntry + } + + } + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): EntryHolder { + val view = LayoutInflater.from(parent.context).inflate(R.layout.entry_item,parent,false) + return EntryHolder(view) + } + + override fun getItemCount(): Int { + return entryItem.size + } + + override fun onBindViewHolder(holder: EntryHolder, position: Int) { + holder.bind(entryItem[position]) + } + + @SuppressLint("NotifyDataSetChanged") + fun addEnter(lastEnterEntity: ListEnterEntity){ + entryItem.add(lastEnterEntity) + notifyDataSetChanged() + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/list/models/ListEnterDTO.kt b/app/src/main/java/com/example/nto_2024_client/list/models/ListEnterDTO.kt new file mode 100644 index 0000000..f0fe758 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/models/ListEnterDTO.kt @@ -0,0 +1,10 @@ +package com.example.nto_2024_client.list.models + +import kotlinx.serialization.SerialName +import kotlinx.serialization.Serializable + +@Serializable +class ListEnterDTO ( + @SerialName("lastEntry") + val lastEntry:String +) \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/list/models/ListEnterEntity.kt b/app/src/main/java/com/example/nto_2024_client/list/models/ListEnterEntity.kt new file mode 100644 index 0000000..a7c9398 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/models/ListEnterEntity.kt @@ -0,0 +1,5 @@ +package com.example.nto_2024_client.list.models + +class ListEnterEntity ( + val lastEntry:String +) \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/list/network/ListEnterRepo.kt b/app/src/main/java/com/example/nto_2024_client/list/network/ListEnterRepo.kt new file mode 100644 index 0000000..b146523 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/network/ListEnterRepo.kt @@ -0,0 +1,7 @@ +package com.example.nto_2024_client.list.network + +import com.example.nto_2024_client.list.models.ListEnterEntity + +interface ListEnterRepo { + suspend fun lastEntry(login:String,password:String):Result> +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/list/network/ListEnterRepoImpl.kt b/app/src/main/java/com/example/nto_2024_client/list/network/ListEnterRepoImpl.kt new file mode 100644 index 0000000..39d03b8 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/network/ListEnterRepoImpl.kt @@ -0,0 +1,16 @@ +package com.example.nto_2024_client.list.network + +import com.example.nto_2024_client.list.models.ListEnterEntity + +class ListEnterRepoImpl (val listNetworkEnter: ListNetworkEnter):ListEnterRepo{ + override suspend fun lastEntry(login: String, password: String): Result> { + return listNetworkEnter.findLastEntry(login,password).map { listDTO-> + listDTO.mapNotNull { dto-> + ListEnterEntity( + lastEntry = dto.lastEntry + ) + + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/list/network/ListNetworkEnter.kt b/app/src/main/java/com/example/nto_2024_client/list/network/ListNetworkEnter.kt new file mode 100644 index 0000000..f219221 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/list/network/ListNetworkEnter.kt @@ -0,0 +1,36 @@ +package com.example.nto_2024_client.list.network + +import com.example.nto_2024_client.list.models.ListEnterDTO +import com.example.nto_2024_client.login.models.UserDTO +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.engine.cio.CIO +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.request.basicAuth +import io.ktor.client.request.get +import io.ktor.client.request.setBody +import io.ktor.serialization.kotlinx.json.json +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.serialization.json.Json +import kotlin.math.log + +class ListNetworkEnter { + val client = HttpClient(CIO){ + install(ContentNegotiation){ + json(Json { + isLenient = true + ignoreUnknownKeys = true + }) + + } + } + suspend fun findLastEntry(login:String,password:String):Result> = withContext(Dispatchers.IO){ + runCatching { + val result = client.get("http://10.6.66.81:8080/api/enter/${login}") + result.body() + } + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/login/LoginFragment.kt b/app/src/main/java/com/example/nto_2024_client/login/LoginFragment.kt index fcecb9e..49eb400 100644 --- a/app/src/main/java/com/example/nto_2024_client/login/LoginFragment.kt +++ b/app/src/main/java/com/example/nto_2024_client/login/LoginFragment.kt @@ -1,6 +1,41 @@ package com.example.nto_2024_client.login +import android.os.Bundle +import android.util.Log +import android.view.View import androidx.fragment.app.Fragment +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Observer +import com.example.nto_2024_client.R +import com.example.nto_2024_client.databinding.FragmentLoginBinding +import com.example.nto_2024_client.list.ListViewModel +import com.example.nto_2024_client.login.network.LoginNetwork +import com.example.nto_2024_client.login.network.LoginRepoImpl +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch + +class LoginFragment:Fragment(R.layout.fragment_login) { + private lateinit var binding:FragmentLoginBinding + private val loginNetwork: LoginNetwork = LoginNetwork() + private val loginRepoImpl: LoginRepoImpl = LoginRepoImpl(loginNetwork) + private val loginViewModel:LoginViewModel by activityViewModels() + private val listViewModel:ListViewModel by activityViewModels() + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding = FragmentLoginBinding.bind(view) + binding.button2.setOnClickListener{ + CoroutineScope(Dispatchers.Main).launch{ + val result = loginNetwork.login("gnazarov","admin") + result.onSuccess { + Log.d("MyLog","Good") + } + result.onFailure { + Log.d("MyLog","Fail") + } + } + } + } + -class LoginFragment:Fragment() { } \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/login/LoginViewModel.kt b/app/src/main/java/com/example/nto_2024_client/login/LoginViewModel.kt index f3eb1e3..36aba92 100644 --- a/app/src/main/java/com/example/nto_2024_client/login/LoginViewModel.kt +++ b/app/src/main/java/com/example/nto_2024_client/login/LoginViewModel.kt @@ -1,6 +1,33 @@ package com.example.nto_2024_client.login +import android.util.Log +import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import androidx.lifecycle.viewModelScope +import com.example.nto_2024_client.login.network.LoginNetwork +import com.example.nto_2024_client.login.network.LoginRepoImpl +import kotlinx.coroutines.launch class LoginViewModel:ViewModel() { + private val loginNetwork:LoginNetwork = LoginNetwork() + private val loginRepoImpl:LoginRepoImpl = LoginRepoImpl(loginNetwork) + + val message:MutableLiveData by lazy { + MutableLiveData() + } + + + fun login(login:String,password:String){ + viewModelScope.launch { + val result = loginNetwork.login("gnazarov","admin") + result.onSuccess { + message.value = "cool" + Log.d("MyLogin","True") + } + result.onFailure { + Log.d("MyLogin","Fail") + } + } + } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/register/models/RegisterDTO.kt b/app/src/main/java/com/example/nto_2024_client/login/models/UserDTO.kt similarity index 53% rename from app/src/main/java/com/example/nto_2024_client/register/models/RegisterDTO.kt rename to app/src/main/java/com/example/nto_2024_client/login/models/UserDTO.kt index 8e890fe..00b22a4 100644 --- a/app/src/main/java/com/example/nto_2024_client/register/models/RegisterDTO.kt +++ b/app/src/main/java/com/example/nto_2024_client/login/models/UserDTO.kt @@ -1,18 +1,18 @@ -package com.example.nto_2024_client.register.models +package com.example.nto_2024_client.login.models -import android.icu.text.Transliterator.Position import kotlinx.serialization.SerialName import kotlinx.serialization.Serializable -import kotlinx.serialization.Serializer @Serializable -data class RegisterDTO ( +data class UserDTO( @SerialName("name") val name:String, @SerialName("username") val username:String, @SerialName("password") val password:String, - @SerialName("position") - val position: String -) + @SerialName("photo") + val photo:String, + @SerialName("jobPos") + val jobPos:String +) \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/login/models/UserEntity.kt b/app/src/main/java/com/example/nto_2024_client/login/models/UserEntity.kt new file mode 100644 index 0000000..38efd83 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/login/models/UserEntity.kt @@ -0,0 +1,9 @@ +package com.example.nto_2024_client.login.models + +class UserEntity( + val name:String, + val username:String, + val password:String, + val photo:String, + val jobPos:String + ) \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/login/network/LoginNetwork.kt b/app/src/main/java/com/example/nto_2024_client/login/network/LoginNetwork.kt new file mode 100644 index 0000000..1009099 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/login/network/LoginNetwork.kt @@ -0,0 +1,52 @@ +package com.example.nto_2024_client.login.network + +import android.net.Credentials +import android.util.Log +import io.ktor.client.HttpClient +import io.ktor.client.call.body +import io.ktor.client.engine.cio.CIO +import io.ktor.client.plugins.auth.Auth +import io.ktor.client.plugins.auth.providers.BasicAuthCredentials +import io.ktor.client.plugins.auth.providers.basic +import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.request.basicAuth +import io.ktor.client.request.get +import io.ktor.client.request.headers +import io.ktor.client.utils.EmptyContent.headers +import io.ktor.http.HttpHeaders +import io.ktor.http.HttpStatusCode +import io.ktor.serialization.kotlinx.json.json +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext +import kotlinx.serialization.json.Json + +class LoginNetwork { + + val client = HttpClient(CIO) { + install(ContentNegotiation) { + json(Json { + isLenient = true + ignoreUnknownKeys = true + }) + + } + install(Auth) { + basic { + sendWithoutRequest { true } + credentials { + BasicAuthCredentials(username = "gnazarov", password = "admin") + } + } + } + } + + suspend fun login(login: String, password: String): Result = withContext(Dispatchers.IO) { + runCatching { + val result = client.get("http://10.6.66.81:8080/api/employee/login") + if (result.status!= HttpStatusCode.OK){ + error("jopa") + } + Unit + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/login/network/LoginRepo.kt b/app/src/main/java/com/example/nto_2024_client/login/network/LoginRepo.kt new file mode 100644 index 0000000..c10fb8a --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/login/network/LoginRepo.kt @@ -0,0 +1,4 @@ +package com.example.nto_2024_client.login.network + interface LoginRepo { + suspend fun login(login:String,password:String):Result +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/login/network/LoginRepoImpl.kt b/app/src/main/java/com/example/nto_2024_client/login/network/LoginRepoImpl.kt new file mode 100644 index 0000000..1fb77e6 --- /dev/null +++ b/app/src/main/java/com/example/nto_2024_client/login/network/LoginRepoImpl.kt @@ -0,0 +1,7 @@ +package com.example.nto_2024_client.login.network + +class LoginRepoImpl(val loginNetwork: LoginNetwork):LoginRepo { + override suspend fun login(login: String, password: String): Result { + return loginNetwork.login(login,password) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/login/LoginNetwork.kt b/app/src/main/java/com/example/nto_2024_client/qr/network/QrNetwork.kt similarity index 59% rename from app/src/main/java/com/example/nto_2024_client/login/LoginNetwork.kt rename to app/src/main/java/com/example/nto_2024_client/qr/network/QrNetwork.kt index e21d681..cea2c18 100644 --- a/app/src/main/java/com/example/nto_2024_client/login/LoginNetwork.kt +++ b/app/src/main/java/com/example/nto_2024_client/qr/network/QrNetwork.kt @@ -1,16 +1,18 @@ -package com.example.nto_2024_client.login +package com.example.nto_2024_client.qr.network +import com.example.nto_2024_client.login.models.UserDTO import io.ktor.client.HttpClient +import io.ktor.client.call.body import io.ktor.client.engine.cio.CIO import io.ktor.client.plugins.contentnegotiation.ContentNegotiation +import io.ktor.client.request.basicAuth import io.ktor.client.request.get import io.ktor.serialization.kotlinx.json.json import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.withContext import kotlinx.serialization.json.Json -class LoginNetwork { - +class QrNetwork { val client = HttpClient(CIO){ install(ContentNegotiation){ json(Json { @@ -21,9 +23,12 @@ class LoginNetwork { } } - suspend fun login(login:String,password:String):Result = withContext(Dispatchers.IO){ + + suspend fun findQrCode(qrCode:String):Result = withContext(Dispatchers.IO){ runCatching { - val result = client.get("") + val result = client.get("http://10.6.66.81:8080/api/registration") + result.body() } } + } \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/register/RegisterFragment.kt b/app/src/main/java/com/example/nto_2024_client/register/RegisterFragment.kt deleted file mode 100644 index 91b0117..0000000 --- a/app/src/main/java/com/example/nto_2024_client/register/RegisterFragment.kt +++ /dev/null @@ -1,7 +0,0 @@ -package com.example.nto_2024_client.register - -import androidx.fragment.app.Fragment - -class RegisterFragment:Fragment() { - -} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/register/RegisterNetwork.kt b/app/src/main/java/com/example/nto_2024_client/register/RegisterNetwork.kt deleted file mode 100644 index e3a8b5d..0000000 --- a/app/src/main/java/com/example/nto_2024_client/register/RegisterNetwork.kt +++ /dev/null @@ -1,43 +0,0 @@ -package com.example.nto_2024_client.register - -import android.icu.text.Transliterator.Position -import com.example.nto_2024_client.register.models.RegisterDTO -import io.ktor.client.HttpClient -import io.ktor.client.engine.cio.CIO -import io.ktor.client.plugins.contentnegotiation.ContentNegotiation -import io.ktor.client.request.basicAuth -import io.ktor.client.request.get -import io.ktor.client.request.post -import io.ktor.client.request.setBody -import io.ktor.serialization.kotlinx.json.json -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import kotlinx.serialization.json.Json - -class RegisterNetwork { - val client = HttpClient(CIO){ - install(ContentNegotiation){ - json(Json { - isLenient = true - ignoreUnknownKeys = true - }) - - } - } - - suspend fun register(name:String,password:String,login:String,position:String,):Result = withContext(Dispatchers.IO){ - runCatching { - val result = client.post("http://10.6.66.81:8080/api/registration"){ - basicAuth(login,password) - setBody(RegisterDTO( - name = name, - password = password, - username = login, - position = position - )) - } - } - } - - -} \ No newline at end of file diff --git a/app/src/main/java/com/example/nto_2024_client/register/RegisterViewModel.kt b/app/src/main/java/com/example/nto_2024_client/register/RegisterViewModel.kt deleted file mode 100644 index 27671f2..0000000 --- a/app/src/main/java/com/example/nto_2024_client/register/RegisterViewModel.kt +++ /dev/null @@ -1,8 +0,0 @@ -package com.example.nto_2024_client.register - -import androidx.lifecycle.ViewModel - -class RegisterViewModel: ViewModel() { - - -} \ 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 ae14594..ae35acd 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -1,12 +1,22 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/main_qr.xml b/app/src/main/res/layout/fragment_list.xml similarity index 81% rename from app/src/main/res/layout/main_qr.xml rename to app/src/main/res/layout/fragment_list.xml index 2ab8edd..040afae 100644 --- a/app/src/main/res/layout/main_qr.xml +++ b/app/src/main/res/layout/fragment_list.xml @@ -5,7 +5,7 @@ android:background="@color/background" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" - tools:context=".ListActivity"> + > + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index 5d07b36..75d3d85 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -30,7 +30,7 @@ android:background="@drawable/shape_rectangle3" android:gravity="center" android:inputType="text" - android:text="Логин" + android:hint="Логин" android:textColor="@color/dark_grey" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -44,8 +44,8 @@ android:layout_marginBottom="16dp" android:background="@drawable/shape_rectangle3" android:gravity="center" - android:inputType="text" - android:text="Пароль" + android:inputType="textPassword" + android:hint="Пароль" android:textColor="@color/dark_grey" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -54,6 +54,7 @@ app:layout_constraintVertical_bias="0.076" /> - - - diff --git a/app/src/main/res/layout/menu/top_app_bar.xml b/app/src/main/res/layout/menu/top_app_bar.xml deleted file mode 100644 index a1190dc..0000000 --- a/app/src/main/res/layout/menu/top_app_bar.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - \ No newline at end of file diff --git a/app/src/main/res/navigation/nav_host.xml b/app/src/main/res/navigation/nav_host.xml new file mode 100644 index 0000000..cbc2c81 --- /dev/null +++ b/app/src/main/res/navigation/nav_host.xml @@ -0,0 +1,19 @@ + + + + + + + + \ No newline at end of file diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index a15c945..900c400 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -1,5 +1,5 @@ [versions] -agp = "8.7.3" +agp = "8.8.0" kotlin = "2.0.0-RC1" coreKtx = "1.15.0" junit = "4.13.2" @@ -9,7 +9,9 @@ appcompat = "1.6.1" material = "1.10.0" activity = "1.10.0" constraintlayout = "2.1.4" +lifecycleView = "2.8.7" ktor ="3.0.3" +navFrag = "2.8.7" zbar = "1.9.7" kotlinSerialization="1.8.0" @@ -23,6 +25,8 @@ material = { group = "com.google.android.material", name = "material", version.r androidx-activity = { group = "androidx.activity", name = "activity", version.ref = "activity" } ktor-client-core = {module = "io.ktor:ktor-client-core",version.ref="ktor"} ktor-client-auth = {group="io.ktor",name="ktor-client-auth",version.ref="ktor"} +lifecycle-view-model={group="androidx.lifecycle",name="lifecycle-viewmodel-ktx",version.ref="lifecycleView"} +fragment-navigation = {group="androidx.navigation",name="navigation-fragment-ktx",version.ref="navFrag"} zbar-code = {group="me.dm7.barcodescanner",name="zbar",version.ref="zbar"} ktor-client-cio = {module="io.ktor:ktor-client-cio",version.ref="ktor"} ktor-client-content-negotiation={module="io.ktor:ktor-client-content-negotiation",version.ref="ktor"}