Исправлено ещё несколько deprecated предупреждений

This commit is contained in:
2026-05-17 19:39:21 +03:00
parent 2e23d0da0a
commit fe0c0e3f8f
2 changed files with 30 additions and 22 deletions

View File

@@ -190,10 +190,7 @@ class YandexDiskRepository(
when { when {
resp.isSuccessful -> { resp.isSuccessful -> {
val body = resp.body val body = resp.body
val stream = body?.byteStream() ?: run { val stream = body.byteStream()
resp.close()
throw IOException("Download failed: missing body")
}
return@withContext object : FilterInputStream(stream) { return@withContext object : FilterInputStream(stream) {
override fun close() { override fun close() {
`in`.use { `in`.use {

View File

@@ -1,22 +1,27 @@
package com.github.nullptroma.wallenc.ui.screens.main.screens.storage.twofa package com.github.nullptroma.wallenc.ui.screens.main.screens.storage.twofa
import android.Manifest import android.Manifest
import android.content.ClipData
import android.content.pm.PackageManager import android.content.pm.PackageManager
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.WindowInsets import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxHeight
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.heightIn import androidx.compose.foundation.layout.heightIn
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size import androidx.compose.foundation.layout.size
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Add import androidx.compose.material.icons.filled.Add
import androidx.compose.material.icons.filled.ContentCopy import androidx.compose.material.icons.filled.ContentCopy
@@ -28,7 +33,10 @@ import androidx.compose.material3.AlertDialog
import androidx.compose.material3.Card import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CircularProgressIndicator import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.DropdownMenu
import androidx.compose.material3.DropdownMenuItem import androidx.compose.material3.DropdownMenuItem
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.ExposedDropdownMenuAnchorType
import androidx.compose.material3.ExposedDropdownMenuBox import androidx.compose.material3.ExposedDropdownMenuBox
import androidx.compose.material3.ExposedDropdownMenuDefaults import androidx.compose.material3.ExposedDropdownMenuDefaults
import androidx.compose.material3.FloatingActionButton import androidx.compose.material3.FloatingActionButton
@@ -41,7 +49,6 @@ import androidx.compose.material3.Scaffold
import androidx.compose.material3.Slider import androidx.compose.material3.Slider
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.material3.TextButton import androidx.compose.material3.TextButton
import androidx.compose.material3.DropdownMenu
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue import androidx.compose.runtime.getValue
@@ -50,27 +57,24 @@ import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.produceState import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.runtime.snapshotFlow import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.alpha import androidx.compose.ui.draw.alpha
import androidx.compose.ui.Alignment import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.onSizeChanged import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalClipboard
import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.toClipEntry
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.font.FontFamily import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.AnnotatedString
import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp import androidx.compose.ui.unit.sp
import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.result.contract.ActivityResultContracts
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.offset
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalClipboard
import androidx.core.content.ContextCompat import androidx.core.content.ContextCompat
import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel import androidx.hilt.lifecycle.viewmodel.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle import androidx.lifecycle.compose.collectAsStateWithLifecycle
@@ -81,8 +85,8 @@ import com.github.nullptroma.wallenc.usecases.TwoFaCodeState
import com.github.nullptroma.wallenc.usecases.buildTwoFaCodeState import com.github.nullptroma.wallenc.usecases.buildTwoFaCodeState
import kotlinx.coroutines.delay import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.collectLatest
import kotlinx.coroutines.launch
import kotlin.math.roundToInt import kotlin.math.roundToInt
import androidx.compose.ui.unit.IntOffset
@Composable @Composable
fun TwoFaTokensScreen( fun TwoFaTokensScreen(
@@ -91,6 +95,7 @@ fun TwoFaTokensScreen(
) { ) {
val uiState by viewModel.state.collectAsStateWithLifecycle() val uiState by viewModel.state.collectAsStateWithLifecycle()
val clipboard = LocalClipboard.current val clipboard = LocalClipboard.current
val scope = rememberCoroutineScope()
val nowMillis by produceState(initialValue = System.currentTimeMillis()) { val nowMillis by produceState(initialValue = System.currentTimeMillis()) {
while (true) { while (true) {
value = System.currentTimeMillis() value = System.currentTimeMillis()
@@ -231,7 +236,10 @@ fun TwoFaTokensScreen(
Card( Card(
onClick = { onClick = {
codeState?.let { codeState?.let {
clipboard.setText(AnnotatedString(it.code)) scope.launch {
val clipData = ClipData.newPlainText(it.code, it.code)
clipboard.setClipEntry(clipData.toClipEntry())
}
} }
}, },
enabled = codeState != null, enabled = codeState != null,
@@ -413,14 +421,17 @@ private fun TwoFaTokenEditDialog(
expanded = algorithmExpanded, expanded = algorithmExpanded,
onExpandedChange = { if (!isBusy) algorithmExpanded = !algorithmExpanded }, onExpandedChange = { if (!isBusy) algorithmExpanded = !algorithmExpanded },
) { ) {
val fillMaxWidth = Modifier
.fillMaxWidth()
OutlinedTextField( OutlinedTextField(
value = algorithmValue, value = algorithmValue,
onValueChange = {}, onValueChange = {},
readOnly = true, readOnly = true,
enabled = !isBusy, enabled = !isBusy,
modifier = Modifier modifier = fillMaxWidth.menuAnchor(
.fillMaxWidth() type = ExposedDropdownMenuAnchorType.PrimaryNotEditable,
.menuAnchor(), enabled = !isBusy,
),
trailingIcon = { trailingIcon = {
ExposedDropdownMenuDefaults.TrailingIcon(expanded = algorithmExpanded) ExposedDropdownMenuDefaults.TrailingIcon(expanded = algorithmExpanded)
}, },