code: Делаю
This commit is contained in:
parent
a1827a4db3
commit
a62ba9da82
@ -22,7 +22,7 @@
|
||||
<activity
|
||||
android:name=".ui.RootActivity"
|
||||
android:exported="true"
|
||||
android:theme="@android:style/Theme.NoTitleBar">
|
||||
android:theme="@style/Theme.MaterialComponents.DayNight.NoActionBar">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN" />
|
||||
|
||||
|
@ -36,6 +36,6 @@ object NetworkModule {
|
||||
@Provides
|
||||
@Singleton
|
||||
fun provideApiServiceScan(retrofitClient: RetrofitClient): ApiServiceScan {
|
||||
return retrofitClient.getApiServiceScan()
|
||||
return retrofitClient.getApiServiceScanAuth()
|
||||
}
|
||||
}
|
@ -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)
|
||||
}
|
||||
}
|
@ -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<Void>
|
||||
}
|
@ -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<Void>
|
||||
@GET("api/auth")
|
||||
fun authenticate(): Call<Void>
|
||||
}
|
@ -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<UserInfo>
|
||||
}
|
@ -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<Void>
|
||||
}
|
@ -1,5 +1,12 @@
|
||||
package ru.myitschool.work.api.scan
|
||||
|
||||
class CodeJson(
|
||||
private var value: String? = null
|
||||
)
|
||||
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"
|
||||
}
|
@ -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()
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -20,11 +20,11 @@ class LoginViewModel @Inject constructor(
|
||||
private val _state = MutableStateFlow<LoginState>(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<Void> {
|
||||
apiService.authenticate().enqueue(object : retrofit2.Callback<Void> {
|
||||
override fun onResponse(call: Call<Void>, response: Response<Void>) {
|
||||
Log.d("Authentication", "Response code: ${response.code()}")
|
||||
|
||||
|
@ -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() {
|
||||
|
10
app/src/main/java/ru/myitschool/work/utils/GetCurrentTime.kt
Normal file
10
app/src/main/java/ru/myitschool/work/utils/GetCurrentTime.kt
Normal file
@ -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())
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user