From 4f35864b68315b3c051a0ee4bc80fa1a37e169e2 Mon Sep 17 00:00:00 2001 From: Timofei Pushkin Date: Wed, 13 May 2026 21:03:58 +0200 Subject: [PATCH 1/7] Update dependencies --- app/build.gradle.kts | 27 ++++++------- app/proguard-rules.pro | 4 +- app/src/main/AndroidManifest.xml | 3 +- .../data/preferences/PreferencesManager.kt | 2 +- .../spbu/depnav/ui/component/FloorSwitch.kt | 16 ++++---- .../spbu/depnav/ui/component/MainMenuSheet.kt | 9 ++--- .../spbu/depnav/ui/component/MapSearchBar.kt | 38 ++++++++----------- .../spbu/depnav/ui/component/MarkerCluster.kt | 4 ++ .../ru/spbu/depnav/ui/component/MarkerView.kt | 9 +++++ .../ru/spbu/depnav/ui/component/PinPointer.kt | 7 +++- .../spbu/depnav/ui/component/SearchResults.kt | 20 +++++----- .../java/ru/spbu/depnav/ui/theme/Theme.kt | 1 + .../spbu/depnav/ui/viewmodel/MapViewModel.kt | 9 ++++- .../ru/spbu/depnav/utils/map/Clustering.kt | 1 + .../ru/spbu/depnav/utils/map/LineSegment.kt | 4 +- app/src/main/res/drawable/ic_arrow_back.xml | 10 +++++ app/src/main/res/drawable/ic_close.xml | 9 +++++ app/src/main/res/drawable/ic_info.xml | 9 +++++ .../res/drawable/ic_keyboard_arrow_up.xml | 9 +++++ app/src/main/res/drawable/ic_menu.xml | 9 +++++ app/src/main/res/drawable/ic_settings.xml | 9 +++++ .../res/mipmap-anydpi-v26/ic_launcher.xml | 2 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 2 +- app/src/main/res/raw/ru_spbu_depnav_keep.xml | 3 ++ app/src/main/res/values-ru/strings.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- app/src/main/res/values/themes.xml | 2 +- build.gradle.kts | 8 +++- gradle/gradle-daemon-jvm.properties | 13 +++++++ gradle/libs.versions.toml | 33 ++++++++-------- gradle/wrapper/gradle-wrapper.properties | 4 +- settings.gradle.kts | 10 +++-- 32 files changed, 190 insertions(+), 100 deletions(-) create mode 100644 app/src/main/res/drawable/ic_arrow_back.xml create mode 100644 app/src/main/res/drawable/ic_close.xml create mode 100644 app/src/main/res/drawable/ic_info.xml create mode 100644 app/src/main/res/drawable/ic_keyboard_arrow_up.xml create mode 100644 app/src/main/res/drawable/ic_menu.xml create mode 100644 app/src/main/res/drawable/ic_settings.xml create mode 100644 app/src/main/res/raw/ru_spbu_depnav_keep.xml create mode 100644 gradle/gradle-daemon-jvm.properties diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 6f6345f4..9e54fdf5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -2,7 +2,6 @@ import java.util.Properties plugins { alias(libs.plugins.android.application) - alias(libs.plugins.jetbrains.kotlin.android) alias(libs.plugins.jetbrains.kotlin.plugin.compose) alias(libs.plugins.androidx.room) alias(libs.plugins.google.dagger.hilt.android) @@ -21,18 +20,18 @@ object Version { kotlin { jvmToolchain(17) compilerOptions { - freeCompilerArgs.add("-opt-in=kotlin.RequiresOptIn") + freeCompilerArgs.add("-XXLanguage:+PropertyParamAnnotationDefaultTargetMode") } } android { namespace = "ru.spbu.depnav" - compileSdk = 36 + compileSdk = 37 defaultConfig { applicationId = "ru.spbu.depnav" - minSdk = 21 - targetSdk = 36 + minSdk = 24 // ModalNavigationDrawer crashes on 23 + targetSdk = 37 versionCode = Version.CODE versionName = Version.NAME @@ -42,8 +41,8 @@ android { signingConfigs { val keystorePropertiesFile = rootProject.file("keystore.properties") if (keystorePropertiesFile.exists()) { - val keystoreProperties = Properties().apply { - load(keystorePropertiesFile.inputStream()) + val keystoreProperties = keystorePropertiesFile.inputStream().use { + Properties().apply { load(it) } } create("release") { storeFile = file(keystoreProperties.getProperty("storeFile")) @@ -57,6 +56,7 @@ android { buildTypes { release { isMinifyEnabled = true + isShrinkResources = true proguardFiles( getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro" @@ -68,11 +68,10 @@ android { buildFeatures { compose = true } - packaging { - resources { - excludes += "/META-INF/{AL2.0,LGPL2.1}" - } - } +} + +room { + schemaDirectory("$projectDir/schemas") } dependencies { @@ -103,7 +102,3 @@ dependencies { androidTestImplementation(libs.androidx.test.rules) androidTestImplementation(libs.androidx.test.extJunit) } - -room { - schemaDirectory("$projectDir/schemas") -} diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index 3f1d6fb7..2dbaacce 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -12,13 +12,15 @@ # public *; #} +-dontobfuscate + # Uncomment this to preserve the line number information for # debugging stack traces. -keepattributes SourceFile,LineNumberTable # If you keep the line number information, uncomment this to # hide the original source file name. --renamesourcefileattribute SourceFile +#-renamesourcefileattribute SourceFile # Remove logging (https://www.guardsquare.com/manual/configuration/examples#logging) -assumenosideeffects class android.util.Log { diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 3718c613..27c7dfdb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -14,10 +14,9 @@ android:exported="true"> - - \ No newline at end of file + diff --git a/app/src/main/java/ru/spbu/depnav/data/preferences/PreferencesManager.kt b/app/src/main/java/ru/spbu/depnav/data/preferences/PreferencesManager.kt index 786a24e1..1d19a15a 100644 --- a/app/src/main/java/ru/spbu/depnav/data/preferences/PreferencesManager.kt +++ b/app/src/main/java/ru/spbu/depnav/data/preferences/PreferencesManager.kt @@ -38,7 +38,7 @@ private const val ENABLE_ROTATION_DEFAULT = false private const val SELECTED_MAP_KEY = "map" -/** Helper class to load ans save user settings. */ +/** Helper class to load and save user settings. */ @Singleton class PreferencesManager @Inject constructor(@ApplicationContext context: Context) { private val prefs = context.getSharedPreferences(PREFERENCES_FILE_NAME, Context.MODE_PRIVATE) diff --git a/app/src/main/java/ru/spbu/depnav/ui/component/FloorSwitch.kt b/app/src/main/java/ru/spbu/depnav/ui/component/FloorSwitch.kt index 6cb98387..79809881 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/component/FloorSwitch.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/component/FloorSwitch.kt @@ -27,9 +27,6 @@ import androidx.compose.animation.slideOutVertically import androidx.compose.animation.togetherWith import androidx.compose.foundation.layout.Column import androidx.compose.foundation.shape.CircleShape -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.KeyboardArrowDown -import androidx.compose.material.icons.rounded.KeyboardArrowUp import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.MaterialTheme @@ -38,6 +35,8 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.graphicsLayer +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import ru.spbu.depnav.R @@ -65,7 +64,7 @@ fun FloorSwitch( enabled = floor < maxFloor ) { Icon( - Icons.Rounded.KeyboardArrowUp, + painterResource(R.drawable.ic_keyboard_arrow_up), contentDescription = stringResource(R.string.label_to_floor_above) ) } @@ -75,10 +74,10 @@ fun FloorSwitch( transitionSpec = { if (targetState > initialState) { slideInVertically { height -> -height } + fadeIn() togetherWith - slideOutVertically { height -> height } + fadeOut() + slideOutVertically { height -> height } + fadeOut() } else { slideInVertically { height -> height } + fadeIn() togetherWith - slideOutVertically { height -> -height } + fadeOut() + slideOutVertically { height -> -height } + fadeOut() } using SizeTransform(clip = false) }, label = "floor switch scroll" @@ -91,8 +90,9 @@ fun FloorSwitch( enabled = floor > MIN_FLOOR ) { Icon( - Icons.Rounded.KeyboardArrowDown, - contentDescription = stringResource(R.string.label_to_floor_below) + painterResource(R.drawable.ic_keyboard_arrow_up), + contentDescription = stringResource(R.string.label_to_floor_below), + modifier = Modifier.graphicsLayer { rotationZ = 180f } ) } } diff --git a/app/src/main/java/ru/spbu/depnav/ui/component/MainMenuSheet.kt b/app/src/main/java/ru/spbu/depnav/ui/component/MainMenuSheet.kt index e338a1f6..6ddbcffe 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/component/MainMenuSheet.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/component/MainMenuSheet.kt @@ -26,9 +26,6 @@ import androidx.compose.foundation.layout.ColumnScope import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.size -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.rounded.Info -import androidx.compose.material.icons.rounded.Settings import androidx.compose.material3.HorizontalDivider import androidx.compose.material3.Icon import androidx.compose.material3.MaterialTheme @@ -40,12 +37,12 @@ import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.platform.LocalContext +import androidx.compose.ui.platform.LocalResources import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.dp import ru.spbu.depnav.R import ru.spbu.depnav.ui.viewmodel.AvailableMap -import androidx.compose.ui.platform.LocalResources // https://m3.material.io/components/navigation-drawer/specs#368147de-9661-4a28-9fc1-ce2f8c9eac40 private val ITEM_HEIGHT = 56.dp @@ -77,7 +74,7 @@ fun MainMenuSheet( MiscItem( icon = { Icon( - Icons.Rounded.Settings, + painterResource(R.drawable.ic_settings), contentDescription = stringResource(R.string.label_open_settings) ) }, @@ -88,7 +85,7 @@ fun MainMenuSheet( MiscItem( icon = { Icon( - Icons.Rounded.Info, + painterResource(R.drawable.ic_info), contentDescription = stringResource(R.string.label_open_map_legend) ) }, diff --git a/app/src/main/java/ru/spbu/depnav/ui/component/MapSearchBar.kt b/app/src/main/java/ru/spbu/depnav/ui/component/MapSearchBar.kt index 79e30ff1..f4c1f43b 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/component/MapSearchBar.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/component/MapSearchBar.kt @@ -31,16 +31,9 @@ import androidx.compose.foundation.layout.WindowInsetsSides import androidx.compose.foundation.layout.asPaddingValues import androidx.compose.foundation.layout.only import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.layout.safeDrawing -import androidx.compose.foundation.layout.windowInsetsPadding -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.automirrored.rounded.ArrowBack -import androidx.compose.material.icons.rounded.Clear -import androidx.compose.material.icons.rounded.Menu import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton -import androidx.compose.material3.MaterialTheme import androidx.compose.material3.SearchBar import androidx.compose.material3.SearchBarDefaults import androidx.compose.material3.Text @@ -48,10 +41,10 @@ import androidx.compose.material3.minimumInteractiveComponentSize import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.ui.Modifier -import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.platform.LocalSoftwareKeyboardController +import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextOverflow import ovh.plrapps.mapcompose.utils.lerp @@ -94,19 +87,18 @@ fun MapSearchBar( animationSpec = if (expanded) EXPANSION_ENTER_SPEC else EXPANSION_EXIT_SPEC, label = "Map search bar activation animation progress" ) - + // SearchBar always consumes the insets but adds padding only when collapsed + val horizontalInsetsPadding = + (SearchBarDefaults.windowInsets.only(WindowInsetsSides.Horizontal) * + expansionAnimationProgress).asPaddingValues() SearchBar( inputField = { SearchBarDefaults.InputField( query = query, onQueryChange = onQueryChange, - onSearch = with (LocalFocusManager.current) { { clearFocus() } }, + onSearch = with(LocalFocusManager.current) { { clearFocus() } }, expanded = expanded, onExpandedChange = onExpandedChange, - modifier = Modifier.windowInsetsPadding( - WindowInsets.safeDrawing.only(WindowInsetsSides.Horizontal) * - expansionAnimationProgress - ), placeholder = { Text( stringResource(R.string.search_on_map, mapTitle), @@ -127,20 +119,20 @@ fun MapSearchBar( queryEmpty = query.isEmpty(), onClearClick = { onQueryChange("") } ) - } + }, + modifier = Modifier.padding(horizontalInsetsPadding) ) }, expanded = expanded, onExpandedChange = onExpandedChange, modifier = modifier, colors = SearchBarDefaults.colors( - containerColor = MaterialTheme.colorScheme.surfaceVariant.copy( + containerColor = SearchBarDefaults.colors().containerColor.copy( alpha = lerp(ON_MAP_SURFACE_ALPHA, 1f, expansionAnimationProgress) ) - ), + ) ) { val keyboard = LocalSoftwareKeyboardController.current - SearchResultsView( results, onScroll = { onTop -> keyboard?.apply { if (onTop) show() else hide() } }, @@ -149,7 +141,7 @@ fun MapSearchBar( onResultClick(it) }, modifier = Modifier - .windowInsetsPadding(WindowInsets.safeDrawing) + .padding(horizontalInsetsPadding) .padding(horizontal = DEFAULT_PADDING * 1.5f) ) } @@ -157,7 +149,7 @@ fun MapSearchBar( @Composable private operator fun WindowInsets.times(num: Float): WindowInsets { - val paddings = asPaddingValues(LocalDensity.current) + val paddings = asPaddingValues() val layoutDirection = LocalLayoutDirection.current return WindowInsets( paddings.calculateLeftPadding(layoutDirection) * num, @@ -182,14 +174,14 @@ private fun AnimatedLeadingIcon( if (active) { IconButton(onClick = onNavigateBackClick) { Icon( - Icons.AutoMirrored.Rounded.ArrowBack, + painterResource(R.drawable.ic_arrow_back), contentDescription = stringResource(R.string.label_navigate_back) ) } } else { IconButton(onClick = onMenuClick) { Icon( - Icons.Rounded.Menu, + painterResource(R.drawable.ic_menu), contentDescription = stringResource(R.string.label_open_main_menu) ) } @@ -218,7 +210,7 @@ private fun AnimatedTrailingIcon( } else { IconButton(onClick = onClearClick) { Icon( - Icons.Rounded.Clear, + painterResource(R.drawable.ic_close), contentDescription = stringResource(R.string.label_clear_text_field) ) } diff --git a/app/src/main/java/ru/spbu/depnav/ui/component/MarkerCluster.kt b/app/src/main/java/ru/spbu/depnav/ui/component/MarkerCluster.kt index cadb4959..f65782a3 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/component/MarkerCluster.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/component/MarkerCluster.kt @@ -55,12 +55,16 @@ fun MarkersCluster( Marker.MarkerType.ROOM -> RoomMarkersCluster(markerIds, modifier) Marker.MarkerType.ENTRANCE -> NonRoomMarkersCluster(painterResource(R.drawable.mrk_entrance), modifier) + Marker.MarkerType.STAIRS_UP, Marker.MarkerType.STAIRS_DOWN, Marker.MarkerType.STAIRS_BOTH -> NonRoomMarkersCluster(painterResource(R.drawable.mrk_stairs), modifier) + Marker.MarkerType.ELEVATOR -> NonRoomMarkersCluster(painterResource(R.drawable.mrk_elevator), modifier) + Marker.MarkerType.WC_MAN, Marker.MarkerType.WC_WOMAN, Marker.MarkerType.WC -> NonRoomMarkersCluster(painterResource(R.drawable.mrk_wc), modifier) + Marker.MarkerType.OTHER -> NonRoomMarkersCluster(painterResource(R.drawable.mrk_other), modifier) } diff --git a/app/src/main/java/ru/spbu/depnav/ui/component/MarkerView.kt b/app/src/main/java/ru/spbu/depnav/ui/component/MarkerView.kt index a955363b..7431e5c8 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/component/MarkerView.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/component/MarkerView.kt @@ -59,46 +59,55 @@ fun MarkerView( modifier = modifier ) } + MarkerType.ENTRANCE -> MarkerIcon( painter = painterResource(R.drawable.mrk_entrance), contentDescription = stringResource(R.string.label_entrance_icon), modifier = modifier ) + MarkerType.STAIRS_UP -> MarkerIcon( painter = painterResource(R.drawable.mrk_stairs_up), contentDescription = stringResource(R.string.label_stairs_up_icon), modifier = modifier ) + MarkerType.STAIRS_DOWN -> MarkerIcon( painter = painterResource(R.drawable.mrk_stairs_down), contentDescription = stringResource(R.string.label_stairs_down_icon), modifier = modifier ) + MarkerType.STAIRS_BOTH -> MarkerIcon( painter = painterResource(R.drawable.mrk_stairs), contentDescription = stringResource(R.string.label_stairs_both_icon), modifier = modifier ) + MarkerType.ELEVATOR -> MarkerIcon( painter = painterResource(R.drawable.mrk_elevator), contentDescription = stringResource(R.string.label_elevator_icon), modifier = modifier ) + MarkerType.WC_MAN -> MarkerIcon( painter = painterResource(R.drawable.mrk_wc_man), contentDescription = stringResource(R.string.label_wc_man_icon), modifier = modifier ) + MarkerType.WC_WOMAN -> MarkerIcon( painter = painterResource(R.drawable.mrk_wc_woman), contentDescription = stringResource(R.string.label_wc_woman_icon), modifier = modifier ) + MarkerType.WC -> MarkerIcon( painter = painterResource(R.drawable.mrk_wc), contentDescription = stringResource(R.string.label_wc_icon), modifier = modifier ) + MarkerType.OTHER -> MarkerIcon( painter = painterResource(R.drawable.mrk_other), contentDescription = stringResource(R.string.label_other_icon), diff --git a/app/src/main/java/ru/spbu/depnav/ui/component/PinPointer.kt b/app/src/main/java/ru/spbu/depnav/ui/component/PinPointer.kt index 833b7b93..a4c224ad 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/component/PinPointer.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/component/PinPointer.kt @@ -57,7 +57,7 @@ import ru.spbu.depnav.utils.map.rotation import ru.spbu.depnav.utils.map.top /** - * When the pin is outside of the map area visible on the screen, shows a pointer towards the pin. + * When the pin is outside the map area visible on the screen, shows a pointer towards the pin. * * It is intended to be placed exactly over the map's composable. */ @@ -87,7 +87,7 @@ fun PinPointer(mapState: MapState, pin: Marker?) { ) { calculatePointerPose(visibleArea, pinPoint) } else { - null // There is no pin or it is visible on the screen + null // There is no pin, or it is visible on the screen } // Have to remember the latest non-null pointer pose to continue showing it while the exit @@ -127,18 +127,21 @@ private data class PinPointerPose( .toInt() .coerceIn(0, boxSize.height - pinSize) ) + Side.RIGHT -> IntOffset( x = (boxSize.width - pinSize).coerceAtLeast(0), y = (boxSize.height * sideFraction - pinSize / 2f) .toInt() .coerceIn(0, boxSize.height - pinSize) ) + Side.TOP -> IntOffset( x = (boxSize.width * sideFraction - pinSize / 2f) .toInt() .coerceIn(0, boxSize.width - pinSize), y = 0 ) + Side.BOTTOM -> IntOffset( x = (boxSize.width * sideFraction - pinSize / 2f) .toInt() diff --git a/app/src/main/java/ru/spbu/depnav/ui/component/SearchResults.kt b/app/src/main/java/ru/spbu/depnav/ui/component/SearchResults.kt index 3d4a0529..83e03673 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/component/SearchResults.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/component/SearchResults.kt @@ -86,16 +86,16 @@ fun SearchResultsView( markerText = markerText, onClick = onResultClick, trailingIcon = ( - @Composable { - Icon( - painter = painterResource(R.drawable.ic_searched_for), - contentDescription = null, - modifier = Modifier - .size(26.dp) - .alpha(DISABLED_ALPHA) - ) - } - ).takeIf { results.isHistory } + @Composable { + Icon( + painter = painterResource(R.drawable.ic_searched_for), + contentDescription = null, + modifier = Modifier + .size(26.dp) + .alpha(DISABLED_ALPHA) + ) + } + ).takeIf { results.isHistory } ) } } diff --git a/app/src/main/java/ru/spbu/depnav/ui/theme/Theme.kt b/app/src/main/java/ru/spbu/depnav/ui/theme/Theme.kt index d95ec879..bc1d0259 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/theme/Theme.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/theme/Theme.kt @@ -114,6 +114,7 @@ fun DepNavTheme( val context = LocalContext.current if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) } + darkTheme -> DarkColorScheme else -> LightColorScheme } diff --git a/app/src/main/java/ru/spbu/depnav/ui/viewmodel/MapViewModel.kt b/app/src/main/java/ru/spbu/depnav/ui/viewmodel/MapViewModel.kt index 0d27059b..440eed38 100644 --- a/app/src/main/java/ru/spbu/depnav/ui/viewmodel/MapViewModel.kt +++ b/app/src/main/java/ru/spbu/depnav/ui/viewmodel/MapViewModel.kt @@ -120,7 +120,14 @@ class MapViewModel @Inject constructor( val floor: Floor ) { constructor(mapInfo: MapInfo, mapState: MapState, title: String, floor: Floor) : - this(mapInfo.id, mapInfo.internalName, mapState, title, mapInfo.floorsNum, floor) + this( + mapInfo.id, + mapInfo.internalName, + mapState, + title, + mapInfo.floorsNum, + floor + ) } fun toMapUiState() = if (displayedMap == null) { diff --git a/app/src/main/java/ru/spbu/depnav/utils/map/Clustering.kt b/app/src/main/java/ru/spbu/depnav/utils/map/Clustering.kt index 8269ca3f..ac252a46 100644 --- a/app/src/main/java/ru/spbu/depnav/utils/map/Clustering.kt +++ b/app/src/main/java/ru/spbu/depnav/utils/map/Clustering.kt @@ -89,6 +89,7 @@ fun getClustererId(markerType: Marker.MarkerType) = when (markerType) { Marker.MarkerType.ENTRANCE -> ENTRANCE_CLUSTERER_ID Marker.MarkerType.STAIRS_UP, Marker.MarkerType.STAIRS_DOWN, Marker.MarkerType.STAIRS_BOTH -> STAIRS_CLUSTERER_ID + Marker.MarkerType.ELEVATOR -> ELEVATOR_CLUSTERER_ID Marker.MarkerType.WC_MAN, Marker.MarkerType.WC_WOMAN, Marker.MarkerType.WC -> WC_CLUSTERER_ID Marker.MarkerType.OTHER -> OTHER_CLUSTERER_ID diff --git a/app/src/main/java/ru/spbu/depnav/utils/map/LineSegment.kt b/app/src/main/java/ru/spbu/depnav/utils/map/LineSegment.kt index ec0dd1eb..001da071 100644 --- a/app/src/main/java/ru/spbu/depnav/utils/map/LineSegment.kt +++ b/app/src/main/java/ru/spbu/depnav/utils/map/LineSegment.kt @@ -49,13 +49,13 @@ data class LineSegment(val p1: Point, val p2: Point) { val numerator1 = (p1.x - l.p1.x) * (l.p1.y - l.p2.y) - (p1.y - l.p1.y) * (l.p1.x - l.p2.x) val t1 = numerator1 / denominator - if (t1 < 0 || t1 > 1) { + if (t1 !in 0.0..1.0) { return null } val numerator2 = (p1.x - p2.x) * (p1.y - l.p1.y) - (p1.y - p2.y) * (p1.x - l.p1.x) val t2 = -(numerator2 / denominator) - if (t2 < 0 || t2 > 1) { + if (t2 !in 0.0..1.0) { return null } diff --git a/app/src/main/res/drawable/ic_arrow_back.xml b/app/src/main/res/drawable/ic_arrow_back.xml new file mode 100644 index 00000000..814f759c --- /dev/null +++ b/app/src/main/res/drawable/ic_arrow_back.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_close.xml b/app/src/main/res/drawable/ic_close.xml new file mode 100644 index 00000000..0740ec7f --- /dev/null +++ b/app/src/main/res/drawable/ic_close.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_info.xml b/app/src/main/res/drawable/ic_info.xml new file mode 100644 index 00000000..ec28677b --- /dev/null +++ b/app/src/main/res/drawable/ic_info.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_keyboard_arrow_up.xml b/app/src/main/res/drawable/ic_keyboard_arrow_up.xml new file mode 100644 index 00000000..5ba60b8f --- /dev/null +++ b/app/src/main/res/drawable/ic_keyboard_arrow_up.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_menu.xml b/app/src/main/res/drawable/ic_menu.xml new file mode 100644 index 00000000..09b6854b --- /dev/null +++ b/app/src/main/res/drawable/ic_menu.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_settings.xml b/app/src/main/res/drawable/ic_settings.xml new file mode 100644 index 00000000..f1ab6fdb --- /dev/null +++ b/app/src/main/res/drawable/ic_settings.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml index b070c763..8fde4563 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -3,4 +3,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml index b070c763..8fde4563 100644 --- a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -3,4 +3,4 @@ - \ No newline at end of file + diff --git a/app/src/main/res/raw/ru_spbu_depnav_keep.xml b/app/src/main/res/raw/ru_spbu_depnav_keep.xml new file mode 100644 index 00000000..66d7a124 --- /dev/null +++ b/app/src/main/res/raw/ru_spbu_depnav_keep.xml @@ -0,0 +1,3 @@ + + diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index 8310b126..46c87099 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -52,4 +52,4 @@ Открыть настройки Вернуться назад Очистить поле ввода - \ No newline at end of file + diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b214b3ab..02518385 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -56,4 +56,4 @@ Open settings Navigate back Clear text field - \ 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 61f3b0c8..5ce19f20 100644 --- a/app/src/main/res/values/themes.xml +++ b/app/src/main/res/values/themes.xml @@ -2,4 +2,4 @@ + +