From a62ba9da823b203ba353c5d4cd8aace8f1ab7771 Mon Sep 17 00:00:00 2001 From: DKaverznev Date: Wed, 19 Feb 2025 12:55:52 +0300 Subject: [PATCH] =?UTF-8?q?code:=20=D0=94=D0=B5=D0=BB=D0=B0=D1=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/AndroidManifest.xml | 2 +- .../ru/myitschool/work/api/NetworkModule.kt | 2 +- .../ru/myitschool/work/api/RetrofitClient.kt | 22 +++++++++---------- .../work/api/list/ApiServiceList.kt | 10 +++++++++ .../work/api/login/ApiServiceLogin.kt | 7 ++++-- .../work/api/main/ApiServiceMain.kt | 2 +- .../work/api/scan/ApiServiceScan.kt | 2 +- .../ru/myitschool/work/api/scan/CodeJson.kt | 11 ++++++++-- .../myitschool/work/ui/login/LoginFragment.kt | 18 +++++++++------ .../work/ui/login/LoginViewModel.kt | 4 ++-- .../work/ui/result/ResultFragment.kt | 11 +++++++++- .../myitschool/work/utils/GetCurrentTime.kt | 10 +++++++++ 12 files changed, 71 insertions(+), 30 deletions(-) create mode 100644 app/src/main/java/ru/myitschool/work/api/list/ApiServiceList.kt create mode 100644 app/src/main/java/ru/myitschool/work/utils/GetCurrentTime.kt diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a3ed9a6..16342fd 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -22,7 +22,7 @@ + android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar"> diff --git a/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt b/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt index 715f06f..23aabc8 100644 --- a/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt +++ b/app/src/main/java/ru/myitschool/work/api/NetworkModule.kt @@ -36,6 +36,6 @@ object NetworkModule { @Provides @Singleton fun provideApiServiceScan(retrofitClient: RetrofitClient): ApiServiceScan { - return retrofitClient.getApiServiceScan() + return retrofitClient.getApiServiceScanAuth() } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt b/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt index afe3f13..1f1e59d 100644 --- a/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt +++ b/app/src/main/java/ru/myitschool/work/api/RetrofitClient.kt @@ -1,7 +1,6 @@ package ru.myitschool.work.api import android.content.Context -import androidx.core.content.ContentProviderCompat.requireContext import okhttp3.OkHttpClient import retrofit2.Retrofit import retrofit2.converter.gson.GsonConverterFactory @@ -12,38 +11,37 @@ import ru.myitschool.work.core.Constants.SERVER_ADDRESS import ru.myitschool.work.utils.AuthPreferences import java.util.concurrent.TimeUnit - -class RetrofitClient(private val context: Context) { +class RetrofitClient(context: Context) { private val serverAddress = SERVER_ADDRESS private var authPreferences: AuthPreferences = AuthPreferences(context) - private val httpClient = OkHttpClient.Builder() - .connectTimeout(30, TimeUnit.SECONDS) + private val httpClientWithAuth = OkHttpClient.Builder() + .connectTimeout(5, TimeUnit.SECONDS) .addInterceptor(BasicAuthInterceptor( authPreferences.getLogin() ?: "", authPreferences.getPassword() ?: "" )) - .readTimeout(30, TimeUnit.SECONDS) + .readTimeout(5, TimeUnit.SECONDS) .build() - private val retrofit: Retrofit by lazy { + private val retrofitWithAuth: Retrofit by lazy { Retrofit.Builder() .baseUrl(serverAddress) - .client(httpClient) + .client(httpClientWithAuth) .addConverterFactory(GsonConverterFactory.create()) .build() } fun getApiServiceLogin(): ApiServiceLogin { - return retrofit.create(ApiServiceLogin::class.java) + return retrofitWithAuth.create(ApiServiceLogin::class.java) } fun getApiServiceMain(): ApiServiceMain { - return retrofit.create(ApiServiceMain::class.java) + return retrofitWithAuth.create(ApiServiceMain::class.java) } - fun getApiServiceScan(): ApiServiceScan { - return retrofit.create(ApiServiceScan::class.java) + fun getApiServiceScanAuth(): ApiServiceScan { + return retrofitWithAuth.create(ApiServiceScan::class.java) } } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/api/list/ApiServiceList.kt b/app/src/main/java/ru/myitschool/work/api/list/ApiServiceList.kt new file mode 100644 index 0000000..a0e52ac --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/api/list/ApiServiceList.kt @@ -0,0 +1,10 @@ +package ru.myitschool.work.api.list + +import retrofit2.Call +import retrofit2.http.GET +import retrofit2.http.Path + +interface ApiServiceList { + @GET("api/auth/{login}") + fun authenticate(@Path("login") login: String): Call +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/api/login/ApiServiceLogin.kt b/app/src/main/java/ru/myitschool/work/api/login/ApiServiceLogin.kt index ed7b501..a99eb33 100644 --- a/app/src/main/java/ru/myitschool/work/api/login/ApiServiceLogin.kt +++ b/app/src/main/java/ru/myitschool/work/api/login/ApiServiceLogin.kt @@ -1,10 +1,13 @@ package ru.myitschool.work.api.login import retrofit2.Call +import retrofit2.http.Body import retrofit2.http.GET +import retrofit2.http.POST import retrofit2.http.Path +import ru.myitschool.work.api.main.UserInfo interface ApiServiceLogin { - @GET("api/{login}/auth") - fun authenticate(@Path("login") login: String): Call + @GET("api/auth") + fun authenticate(): Call } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/api/main/ApiServiceMain.kt b/app/src/main/java/ru/myitschool/work/api/main/ApiServiceMain.kt index 496b32e..c99468c 100644 --- a/app/src/main/java/ru/myitschool/work/api/main/ApiServiceMain.kt +++ b/app/src/main/java/ru/myitschool/work/api/main/ApiServiceMain.kt @@ -5,6 +5,6 @@ import retrofit2.http.GET import retrofit2.http.Path interface ApiServiceMain { - @GET("api/{login}/info") + @GET("api/info/{login}") fun getDataUser(@Path("login") login: String): Call } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/api/scan/ApiServiceScan.kt b/app/src/main/java/ru/myitschool/work/api/scan/ApiServiceScan.kt index 093cd5f..b3d48e3 100644 --- a/app/src/main/java/ru/myitschool/work/api/scan/ApiServiceScan.kt +++ b/app/src/main/java/ru/myitschool/work/api/scan/ApiServiceScan.kt @@ -6,6 +6,6 @@ import retrofit2.http.PATCH import retrofit2.http.Path interface ApiServiceScan { - @PATCH("api/{login}/info") + @PATCH("api/info/{login}") fun open(@Path("login") login: String, @Body data: CodeJson): Call } \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/api/scan/CodeJson.kt b/app/src/main/java/ru/myitschool/work/api/scan/CodeJson.kt index 44615b1..e4934ce 100644 --- a/app/src/main/java/ru/myitschool/work/api/scan/CodeJson.kt +++ b/app/src/main/java/ru/myitschool/work/api/scan/CodeJson.kt @@ -1,5 +1,12 @@ package ru.myitschool.work.api.scan class CodeJson( - private var value: String? = null -) \ No newline at end of file + private var value: String? = null, + private var type: String? = null, + private var time: String? = null +) + +object OpenType { + const val QR_TYPE = "qr" + const val NFC_TYPE = "card" +} \ No newline at end of file diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt index 8e3ab00..60695ac 100644 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginFragment.kt @@ -51,10 +51,6 @@ class LoginFragment : Fragment(R.layout.fragment_login) { addTextChangedListener(object : TextWatcher { override fun afterTextChanged(s: Editable?) { val login = s.toString() - - authPreferences.saveLogin(binding.username.text.toString()) - authPreferences.savePassword(binding.password.text.toString()) - binding.login.isEnabled = validateLogin(login) } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} @@ -64,7 +60,12 @@ class LoginFragment : Fragment(R.layout.fragment_login) { binding.login.setOnClickListener { val login = binding.username.text.toString() - performLogin(login) + val password = binding.password.text.toString() + + authPreferences.saveLogin(login) + authPreferences.savePassword(password) + + performLogin() } binding.loading.visibleOrGone(false) @@ -82,6 +83,9 @@ class LoginFragment : Fragment(R.layout.fragment_login) { binding.loading.visibleOrGone(false) binding.error.visibleOrGone(false) + authPreferences.saveLogin(binding.username.text.toString()) + authPreferences.savePassword(binding.password.text.toString()) + authPreferences.saveLoginState(true) navigateToMainScreen() @@ -110,9 +114,9 @@ class LoginFragment : Fragment(R.layout.fragment_login) { } } - private fun performLogin(login: String) { + private fun performLogin() { lifecycleScope.launch { - viewModel.authenticate(login) + viewModel.authenticate() } } diff --git a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt b/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt index f8f94d0..8996957 100644 --- a/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt +++ b/app/src/main/java/ru/myitschool/work/ui/login/LoginViewModel.kt @@ -20,11 +20,11 @@ class LoginViewModel @Inject constructor( private val _state = MutableStateFlow(LoginState.Initial) val state = _state.asStateFlow() - fun authenticate(login: String) { + fun authenticate() { viewModelScope.launch { _state.value = LoginState.Loading - apiService.authenticate(login).enqueue(object : retrofit2.Callback { + apiService.authenticate().enqueue(object : retrofit2.Callback { override fun onResponse(call: Call, response: Response) { Log.d("Authentication", "Response code: ${response.code()}") diff --git a/app/src/main/java/ru/myitschool/work/ui/result/ResultFragment.kt b/app/src/main/java/ru/myitschool/work/ui/result/ResultFragment.kt index 7032f34..a37d36e 100644 --- a/app/src/main/java/ru/myitschool/work/ui/result/ResultFragment.kt +++ b/app/src/main/java/ru/myitschool/work/ui/result/ResultFragment.kt @@ -10,11 +10,13 @@ import androidx.navigation.fragment.findNavController import dagger.hilt.android.AndroidEntryPoint import ru.myitschool.work.R import ru.myitschool.work.api.scan.CodeJson +import ru.myitschool.work.api.scan.OpenType import ru.myitschool.work.databinding.FragmentScanResultBinding import ru.myitschool.work.ui.main.MainDestination import ru.myitschool.work.ui.qr.scan.QrScanDestination import ru.myitschool.work.utils.AuthPreferences import ru.myitschool.work.utils.collectWhenStarted +import ru.myitschool.work.utils.getCurrentTime import ru.myitschool.work.utils.visibleOrGone @AndroidEntryPoint @@ -48,7 +50,14 @@ class ResultFragment : Fragment(R.layout.fragment_scan_result) { } val qrData = QrScanDestination.getDataIfExist(arguments ?: Bundle()) - authPreferences.getLogin()?.let { viewModel.open(it, CodeJson(qrData)) } + authPreferences.getLogin()?.let { login -> + val currentTime = getCurrentTime() + viewModel.open(login, CodeJson( + value = qrData, + type = OpenType.QR_TYPE, + time = currentTime + )) + } } private fun observeOpenState() { diff --git a/app/src/main/java/ru/myitschool/work/utils/GetCurrentTime.kt b/app/src/main/java/ru/myitschool/work/utils/GetCurrentTime.kt new file mode 100644 index 0000000..31d412d --- /dev/null +++ b/app/src/main/java/ru/myitschool/work/utils/GetCurrentTime.kt @@ -0,0 +1,10 @@ +package ru.myitschool.work.utils + +import java.text.SimpleDateFormat +import java.util.Date +import java.util.Locale + +fun getCurrentTime(): String { + val dateFormat = SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault()) + return dateFormat.format(Date()) +} \ No newline at end of file