diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 7deb6c6..90144cc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,6 +23,7 @@ android:supportsRtl="true" android:theme="@style/AppTheme" android:localeConfig="@xml/locale_config" + android:networkSecurityConfig="@xml/network_security_config" tools:targetApi="36" android:memtagMode="async"> - - - - - - + + + + + @@ -76,4 +76,4 @@ android:name=".internal.installer.PackageInstallerStatusReceiver" android:exported="false" /> - + \ No newline at end of file diff --git a/app/src/main/java/dev/mi6e4ka/openstore/MainActivity.kt b/app/src/main/java/dev/mi6e4ka/openstore/MainActivity.kt index 5df0999..df8e860 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/MainActivity.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/MainActivity.kt @@ -3,7 +3,6 @@ package dev.mi6e4ka.openstore import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent -import androidx.activity.enableEdgeToEdge import androidx.compose.animation.AnimatedContentTransitionScope import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.core.tween @@ -36,7 +35,6 @@ import dev.mi6e4ka.openstore.ui.theme.AppTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { - enableEdgeToEdge() super.onCreate(savedInstanceState) val cacheDir = externalCacheDir ?: cacheDir cacheDir.listFiles()?.forEach { file -> diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/components/Gallery.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/components/Gallery.kt index 4fc242d..0865a21 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/components/Gallery.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/components/Gallery.kt @@ -33,9 +33,6 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.layout.ContentScale -import androidx.compose.ui.semantics.clearAndSetSemantics -import androidx.compose.ui.semantics.hideFromAccessibility -import androidx.compose.ui.semantics.semantics import androidx.compose.ui.unit.dp import androidx.compose.ui.window.Dialog import androidx.compose.ui.window.DialogProperties @@ -65,8 +62,7 @@ fun GalleryWithPager(images: List) { modifier = Modifier.height(250.dp) ) { LazyRow( - horizontalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier.clearAndSetSemantics{} + horizontalArrangement = Arrangement.spacedBy(8.dp) ) { itemsIndexed(images) { i, file -> var isLoading by remember { mutableStateOf(true) } diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/details/DetailsScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/details/DetailsScreen.kt index 1601359..8212a32 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/details/DetailsScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/details/DetailsScreen.kt @@ -86,9 +86,6 @@ import kotlinx.datetime.toLocalDateTime import android.Manifest import androidx.activity.compose.rememberLauncherForActivityResult import androidx.activity.result.contract.ActivityResultContracts -import androidx.compose.ui.semantics.clearAndSetSemantics -import androidx.compose.ui.semantics.contentDescription -import androidx.compose.ui.semantics.semantics import kotlin.time.ExperimentalTime import kotlin.time.Instant @@ -144,7 +141,7 @@ fun DetailsScreen( IconButton(onClick = { navController.popBackStack() }) { Icon( painter = painterResource(R.drawable.ic_arrow_back_24px), - contentDescription = stringResource(R.string.back_button_desc) + contentDescription = "Back" ) } }, @@ -156,10 +153,7 @@ fun DetailsScreen( } } ){ - Icon( - painterResource(R.drawable.ic_link_24px), - stringResource(R.string.copy_link_desc) - ) + Icon(painterResource(R.drawable.ic_link_24px), null) } IconButton( { @@ -181,10 +175,7 @@ fun DetailsScreen( } } ){ - Icon( - painterResource(R.drawable.apk_install_24px), - stringResource(R.string.download_apk_desc) - ) + Icon(painterResource(R.drawable.apk_install_24px), null) } IconButton(onClick = { val intent = Intent(Intent.ACTION_VIEW, "https://www.rustore.ru/catalog/app/${state.item?.packageName ?: ""}".toUri()).apply { @@ -193,10 +184,7 @@ fun DetailsScreen( } context.startActivity(intent) }, enabled = state.item != null) { - Icon( - painterResource(R.drawable.ic_captive_portal_24px), - stringResource(R.string.open_in_browser_desc) - ) + Icon(painterResource(R.drawable.ic_captive_portal_24px), null) } } ) } @@ -344,7 +332,7 @@ fun DetailsScreen( verticalArrangement = Arrangement.spacedBy(4.dp) ) { Text(item.appName, fontSize = 24.sp, fontWeight = FontWeight.Bold, maxLines = 2, overflow = TextOverflow.Ellipsis) - Text(item.aggregatorInfo?.companyName ?: item.companyName, maxLines = 2, overflow = TextOverflow.Ellipsis, modifier = Modifier.clearAndSetSemantics(){contentDescription = "Разработчик: ${item.aggregatorInfo?.companyName ?: item.companyName}"}) + Text(item.aggregatorInfo?.companyName ?: item.companyName, maxLines = 2, overflow = TextOverflow.Ellipsis) } } if (!state.isSupported) { @@ -445,30 +433,18 @@ fun DetailsScreen( (state.appFiles?.sumOf { it.size } ?: 0L) / 1024.0 / 1024.0) ) }, - leadingIcon = { - Icon( - painterResource(R.drawable.ic_upload_file_24px), - stringResource(R.string.app_size_desc) - )}, + leadingIcon = {Icon(painterResource(R.drawable.ic_upload_file_24px), contentDescription = null)}, onClick = {}, ) AssistChip( onClick = {}, label = {Text(item.versionName)}, - leadingIcon = { - Icon( - painterResource(R.drawable.ic_arrow_circle_up_24px), - stringResource(R.string.latest_version_desc) - )} + leadingIcon = {Icon(painterResource(R.drawable.ic_arrow_circle_up_24px), contentDescription = null)} ) AssistChip( onClick = {}, label = {FormattedDateText(item.appVerUpdatedAt)}, - leadingIcon = { - Icon( - painterResource(R.drawable.ic_update_24px), - stringResource(R.string.last_update_desc) - )} + leadingIcon = {Icon(painterResource(R.drawable.ic_update_24px), contentDescription = null)} ) var detailedApiVersion by remember { mutableStateOf(false) } AssistChip( @@ -482,38 +458,22 @@ fun DetailsScreen( Text("API ${item.minSdkVersion} +") } }, - leadingIcon = { - Icon( - painterResource(R.drawable.ic_android_24px), - stringResource(R.string.min_api_desc) - )} + leadingIcon = {Icon(painterResource(R.drawable.ic_android_24px), contentDescription = null)} ) AssistChip( onClick = {}, label = {Text(if ((state.appFiles?.size ?: 1) > 1) "${state.appFiles?.size} Split APKs" else "APK")}, - leadingIcon = { - Icon( - painterResource(R.drawable.ic_adb_24px), - stringResource(R.string.installer_type_desc) - )} + leadingIcon = {Icon(painterResource(R.drawable.ic_adb_24px), contentDescription = null)} ) AssistChip( onClick = {}, label = {Text(item.roundedDownloadsText)}, - leadingIcon = { - Icon( - painterResource(R.drawable.ic_download_24px), - stringResource(R.string.downloads_desc) - )} + leadingIcon = {Icon(painterResource(R.drawable.ic_download_24px), contentDescription = null)} ) AssistChip( onClick = {}, label = {Text(item.ageLegal)}, - leadingIcon = { - Icon( - painterResource(R.drawable.ic_supervised_user_circle_24px), - stringResource(R.string.age_legal_desc) - )} + leadingIcon = {Icon(painterResource(R.drawable.ic_supervised_user_circle_24px), contentDescription = null)} ) } GalleryWithPager(item.fileUrls) @@ -579,13 +539,6 @@ fun DetailsScreen( restoreState = true } }) - .clearAndSetSemantics { - contentDescription = context.getString( - R.string.reviews_desc, - state.rating?.averageUserRating ?: 0, - state.rating?.totalRatings ?: 0 - ) - } ) { Row( Modifier diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/results/ResultsScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/results/ResultsScreen.kt index 811dd57..9e26e5f 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/results/ResultsScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/results/ResultsScreen.kt @@ -35,8 +35,6 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.semantics.hideFromAccessibility -import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp @@ -70,7 +68,7 @@ fun ResultsScreen( IconButton(onClick = { navController.popBackStack() }) { Icon( painterResource(R.drawable.ic_arrow_back_24px), - contentDescription = stringResource(R.string.back_button_desc) + contentDescription = "Back" ) } }, @@ -83,10 +81,7 @@ fun ResultsScreen( } TextButton({platformSelectorExpanded = true}) { - Icon( - painterResource(state.selectedPlatform.icon), - contentDescription = stringResource(R.string.tts_current_platform) - ) + Icon(painterResource(state.selectedPlatform.icon), null) Spacer(Modifier.size(8.dp)) Text(stringResource(state.selectedPlatform.label)) } @@ -130,16 +125,7 @@ fun ResultsScreen( modifier = Modifier.weight(1f).padding(start = 16.dp,end = 4.dp) ) { Text(text = app.appName, maxLines = 1, overflow = TextOverflow.Ellipsis) - Text( - text = app.packageName, - fontSize = 14.sp, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - color = MaterialTheme.colorScheme.secondary, - modifier = Modifier.semantics{ - hideFromAccessibility() - } - ) + Text(text = app.packageName, fontSize = 14.sp, maxLines = 1, overflow = TextOverflow.Ellipsis, color = MaterialTheme.colorScheme.secondary) } } } diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/reviews/ReviewsScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/reviews/ReviewsScreen.kt index 56eea6e..2ac553e 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/reviews/ReviewsScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/reviews/ReviewsScreen.kt @@ -35,12 +35,8 @@ import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color -import androidx.compose.ui.platform.LocalContext import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource -import androidx.compose.ui.semantics.clearAndSetSemantics -import androidx.compose.ui.semantics.contentDescription -import androidx.compose.ui.semantics.semantics import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.unit.dp import androidx.navigation.NavController @@ -99,7 +95,7 @@ fun ReviewsScreen(packageName: String, navController: NavController = rememberNa IconButton(onClick = { navController.popBackStack() }) { Icon( painterResource(R.drawable.ic_arrow_back_24px), - contentDescription = stringResource(R.string.back_button_desc) + contentDescription = "Back" ) } }, @@ -139,12 +135,11 @@ fun ReviewsScreen(packageName: String, navController: NavController = rememberNa } items(reviews ?: listOf()) { review -> Card( - Modifier.fillMaxWidth().semantics(mergeDescendants = true){} + Modifier.fillMaxWidth() ) { Column( Modifier.padding(16.dp) ) { - val context = LocalContext.current Row( Modifier.fillMaxWidth(), horizontalArrangement = Arrangement.SpaceBetween, @@ -160,10 +155,7 @@ fun ReviewsScreen(packageName: String, navController: NavController = rememberNa } Spacer(Modifier.height(8.dp)) Row( - verticalAlignment = Alignment.CenterVertically, - modifier = Modifier.clearAndSetSemantics{ - contentDescription = context.getString(R.string.review_rating_desc, review.appRating) - } + verticalAlignment = Alignment.CenterVertically ) { repeat(review.appRating) { Icon(painterResource(R.drawable.ic_star_filled_24px), null, Modifier.size(16.dp), tint = MaterialTheme.colorScheme.primary) @@ -179,12 +171,12 @@ fun ReviewsScreen(packageName: String, navController: NavController = rememberNa horizontalArrangement = Arrangement.spacedBy(16.dp) ) { Row(verticalAlignment = Alignment.CenterVertically) { - Icon(painterResource(R.drawable.ic_thumb_up_24px), contentDescription = stringResource(R.string.likes_desc), Modifier.size(20.dp), tint = MaterialTheme.colorScheme.secondary) + Icon(painterResource(R.drawable.ic_thumb_up_24px), contentDescription = null, Modifier.size(20.dp), tint = MaterialTheme.colorScheme.secondary) Spacer(Modifier.width(4.dp)) Text("${review.likeCounter}") } Row(verticalAlignment = Alignment.CenterVertically) { - Icon(painterResource(R.drawable.ic_thumb_down_24px), contentDescription = stringResource(R.string.dislikes_desc), Modifier.size(20.dp), tint = MaterialTheme.colorScheme.secondary) + Icon(painterResource(R.drawable.ic_thumb_down_24px), contentDescription = null, Modifier.size(20.dp), tint = MaterialTheme.colorScheme.secondary) Spacer(Modifier.width(6.dp)) Text("${review.dislikeCounter}") } diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt index e5c319b..0b21410 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/search/SearchScreen.kt @@ -98,10 +98,7 @@ fun SearchScreen(navController: NavController = rememberNavController()) { ) } IconButton({navController.navigate("settings")}) { - Icon( - painterResource(R.drawable.ic_settings_24px), - contentDescription = stringResource(R.string.settings_title) - ) + Icon(painterResource(R.drawable.ic_settings_24px), "settings") } } ) }, @@ -154,7 +151,7 @@ fun SearchScreen(navController: NavController = rememberNavController()) { onValueChange = {s -> search=s}, leadingIcon = { Icon(painterResource(R.drawable.ic_search_24px), contentDescription = null) }, modifier = Modifier.fillMaxWidth().semantics{ - contentDescription = context.getString(R.string.search_title) + contentDescription = "Search" }, singleLine = true, keyboardOptions = KeyboardOptions( diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt index a5cbd2f..0a863c7 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/settings/SettingsScreen.kt @@ -156,10 +156,7 @@ fun SettingsScreen( } } ) { - Icon( - painterResource(R.drawable.ic_arrow_back_24px), - stringResource(R.string.back_button_desc) - ) + Icon(painterResource(R.drawable.ic_arrow_back_24px), "back") } } ) diff --git a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt index ac422c0..f628c66 100644 --- a/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt +++ b/app/src/main/java/dev/mi6e4ka/openstore/ui/screen/updates/UpdatesScreen.kt @@ -114,7 +114,7 @@ fun UpdatesScreen(navController: NavController) { IconButton(onClick = { navController.popBackStack() }) { Icon( painter = painterResource(R.drawable.ic_arrow_back_24px), - contentDescription = stringResource(R.string.back_button_desc) + contentDescription = "Back" ) } }, diff --git a/app/src/main/res/values-en/strings.xml b/app/src/main/res/values-en/strings.xml index 43e6f88..16d0b51 100644 --- a/app/src/main/res/values-en/strings.xml +++ b/app/src/main/res/values-en/strings.xml @@ -73,6 +73,4 @@ Auto Dark Light - Back - Apps for platfom \ No newline at end of file diff --git a/app/src/main/res/values-night/themes.xml b/app/src/main/res/values-night/themes.xml index 45af79c..8bede2e 100644 --- a/app/src/main/res/values-night/themes.xml +++ b/app/src/main/res/values-night/themes.xml @@ -1,3 +1,6 @@ - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index cc0eee6..9224639 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -73,20 +73,4 @@ Тёмная Светлая Обновления будут проверяться для приложений из выбранных источников - Назад - Приложения для платформы - Скопировать ссылку на apk - Скачать apk без установки - Открыть страницу приложения в браузере - Вес приложения - Текущая версия - Последнее обновление - Минимальная версия android - Тип установочного файла - Количество установок - Возрастная категория - Рейтинг и отзывы\nСредняя оценка: %1$.2f\nВсего оценок: %2$d - оценка: %1$d - Лайки - Дизлайки \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml index 6872e24..4ada25c 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -1,3 +1,6 @@ - diff --git a/app/src/main/res/xml/network_security_config.xml b/app/src/main/res/xml/network_security_config.xml new file mode 100644 index 0000000..ad43458 --- /dev/null +++ b/app/src/main/res/xml/network_security_config.xml @@ -0,0 +1,9 @@ + + + + rustore.ru + + hETpgVvaLC0bvcGG3t0cuqiHvr4XyP2MTwCiqhgRWwU= + + + \ No newline at end of file