From ee7c4b06a1d7e7407a2868ead3f62223d26c2bda Mon Sep 17 00:00:00 2001 From: n08i40k Date: Sun, 15 Sep 2024 21:12:18 +0400 Subject: [PATCH] =?UTF-8?q?=D0=A0=D0=B5=D0=BB=D0=B8=D0=B7=201.1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Исправлена установка группы пользователя при регистрации. Во вкладке профиля добавлена кнопка для выхода из аккаунта. --- app/build.gradle.kts | 4 +-- .../next/PolytechnicApplication.kt | 1 + .../polytechnic/next/data/AppContainer.kt | 9 +++---- .../n08i40k/polytechnic/next/data/MyResult.kt | 3 --- .../schedule/impl/FakeScheduleRepository.kt | 3 ++- .../schedule/impl/RemoteScheduleRepository.kt | 3 +-- .../n08i40k/polytechnic/next/model/Group.kt | 2 ++ .../polytechnic/next/network/NetworkValues.kt | 2 +- .../polytechnic/next/network/Response.kt | 7 ----- .../polytechnic/next/ui/PolytechnicApp.kt | 2 -- .../polytechnic/next/ui/auth/AuthScreen.kt | 9 +++++++ .../next/ui/main/profile/ChangeGroupDialog.kt | 2 +- .../next/ui/main/profile/ProfileCard.kt | 18 +++++++++++++ .../next/ui/main/profile/ProfileScreen.kt | 6 +++-- .../next/ui/main/schedule/DayPager.kt | 1 - .../next/ui/main/schedule/ScheduleScreen.kt | 6 +++-- .../polytechnic/next/ui/theme/Theme.kt | 4 ++- .../polytechnic/next/utils/ErrorMessage.kt | 3 --- app/src/main/res/raw/ssl.pem | 27 ------------------- app/src/main/res/values-ru/strings.xml | 1 + app/src/main/res/values/colors.xml | 6 ----- app/src/main/res/values/strings.xml | 1 + 22 files changed, 53 insertions(+), 67 deletions(-) delete mode 100644 app/src/main/java/ru/n08i40k/polytechnic/next/network/Response.kt delete mode 100644 app/src/main/java/ru/n08i40k/polytechnic/next/utils/ErrorMessage.kt delete mode 100644 app/src/main/res/raw/ssl.pem diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 2101c07..27e25b0 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -32,8 +32,8 @@ android { applicationId = "ru.n08i40k.polytechnic.next" minSdk = 26 targetSdk = 35 - versionCode = 1 - versionName = "1.0" + versionCode = 2 + versionName = "1.1" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" vectorDrawables { diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/PolytechnicApplication.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/PolytechnicApplication.kt index 8f0def4..5ce1553 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/PolytechnicApplication.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/PolytechnicApplication.kt @@ -7,6 +7,7 @@ import javax.inject.Inject @HiltAndroidApp class PolytechnicApplication : Application() { + @Suppress("unused") @Inject lateinit var container: AppContainer } \ No newline at end of file diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/data/AppContainer.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/data/AppContainer.kt index 83f38f0..e1753f9 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/data/AppContainer.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/data/AppContainer.kt @@ -4,17 +4,14 @@ import android.app.Application import android.content.Context import dagger.Module import dagger.Provides -import dagger.hilt.EntryPoint import dagger.hilt.InstallIn -import dagger.hilt.android.components.ActivityComponent import dagger.hilt.components.SingletonComponent -import ru.n08i40k.polytechnic.next.PolytechnicApplication -import ru.n08i40k.polytechnic.next.data.users.ProfileRepository -import ru.n08i40k.polytechnic.next.data.users.impl.FakeProfileRepository -import ru.n08i40k.polytechnic.next.data.users.impl.RemoteProfileRepository import ru.n08i40k.polytechnic.next.data.schedule.ScheduleRepository import ru.n08i40k.polytechnic.next.data.schedule.impl.FakeScheduleRepository import ru.n08i40k.polytechnic.next.data.schedule.impl.RemoteScheduleRepository +import ru.n08i40k.polytechnic.next.data.users.ProfileRepository +import ru.n08i40k.polytechnic.next.data.users.impl.FakeProfileRepository +import ru.n08i40k.polytechnic.next.data.users.impl.RemoteProfileRepository import javax.inject.Singleton interface AppContainer { diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/data/MyResult.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/data/MyResult.kt index aad1ad8..272e3b2 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/data/MyResult.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/data/MyResult.kt @@ -7,6 +7,3 @@ sealed interface MyResult { data class Failure(val exception: Exception) : MyResult } -fun MyResult.successOr(fallback: T): T { - return (this as? MyResult.Success)?.data ?: fallback -} \ No newline at end of file diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/FakeScheduleRepository.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/FakeScheduleRepository.kt index bee3e44..1ccb7db 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/FakeScheduleRepository.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/FakeScheduleRepository.kt @@ -10,9 +10,10 @@ import ru.n08i40k.polytechnic.next.data.schedule.ScheduleRepository import ru.n08i40k.polytechnic.next.model.Lesson import ru.n08i40k.polytechnic.next.model.LessonTime import ru.n08i40k.polytechnic.next.model.LessonType -import ru.n08i40k.polytechnic.next.data.MyResult; +import ru.n08i40k.polytechnic.next.data.MyResult class FakeScheduleRepository : ScheduleRepository { + @Suppress("SpellCheckingInspection") companion object { val exampleGroup = Group( name = "ИС-214/23", days = arrayListOf( diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/RemoteScheduleRepository.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/RemoteScheduleRepository.kt index b5c6d80..f460137 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/RemoteScheduleRepository.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/data/schedule/impl/RemoteScheduleRepository.kt @@ -14,7 +14,6 @@ import ru.n08i40k.polytechnic.next.network.data.schedule.ScheduleGetRequest import ru.n08i40k.polytechnic.next.network.data.schedule.ScheduleGetRequestData import ru.n08i40k.polytechnic.next.network.data.schedule.ScheduleGetResponse import ru.n08i40k.polytechnic.next.settings.settingsDataStore -import java.lang.Thread.sleep class RemoteScheduleRepository(private val context: Context) : ScheduleRepository { override suspend fun getGroup(): MyResult { @@ -24,7 +23,7 @@ class RemoteScheduleRepository(private val context: Context) : ScheduleRepositor } if (groupName.isEmpty()) - return@withContext MyResult.Failure(RuntimeException("No group name provided!")) + return@withContext MyResult.Failure(IllegalArgumentException("No group name provided!")) val responseFuture = RequestFuture.newFuture() ScheduleGetRequest( diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/model/Group.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/model/Group.kt index d2a36b1..225f4c5 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/model/Group.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/model/Group.kt @@ -1,3 +1,5 @@ +@file:Suppress("unused") + package ru.n08i40k.polytechnic.next.model import kotlinx.serialization.Serializable diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/network/NetworkValues.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/network/NetworkValues.kt index d9f94e5..c22dd08 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/network/NetworkValues.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/network/NetworkValues.kt @@ -1,5 +1,5 @@ package ru.n08i40k.polytechnic.next.network object NetworkValues { - const val API_HOST = "https://192.168.0.103:5050/api/v1/" + const val API_HOST = "https://polytechnic.n08i40k.ru:5050/api/v1/" } \ No newline at end of file diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/network/Response.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/network/Response.kt deleted file mode 100644 index f8c5d3a..0000000 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/network/Response.kt +++ /dev/null @@ -1,7 +0,0 @@ -package ru.n08i40k.polytechnic.next.network - -class ResponseBase { - fun handleResponse(response: String?) { - - } -} \ No newline at end of file diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/PolytechnicApp.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/PolytechnicApp.kt index 58d3f18..160eeb9 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/PolytechnicApp.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/PolytechnicApp.kt @@ -5,8 +5,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.navigation.compose.NavHost import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController -import ru.n08i40k.polytechnic.next.data.AppContainer -import ru.n08i40k.polytechnic.next.data.MockAppContainer import ru.n08i40k.polytechnic.next.ui.auth.AuthScreen import ru.n08i40k.polytechnic.next.ui.main.MainScreen import ru.n08i40k.polytechnic.next.ui.theme.AppTheme diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/auth/AuthScreen.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/auth/AuthScreen.kt index 81f3ab1..4f9f7bb 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/auth/AuthScreen.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/auth/AuthScreen.kt @@ -447,6 +447,15 @@ fun tryRegister( } } + runBlocking { + context.settingsDataStore.updateData { currentSettings -> + currentSettings + .toBuilder() + .setGroup(group) + .build() + } + } + navController.navigate("main") }, { isLoading = false diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ChangeGroupDialog.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ChangeGroupDialog.kt index 5369019..b53c4bb 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ChangeGroupDialog.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ChangeGroupDialog.kt @@ -60,7 +60,7 @@ private fun tryChangeGroup( @Composable private fun getGroups(context: Context): ArrayList { - val groupPlaceholder = stringResource(R.string.loading); + val groupPlaceholder = stringResource(R.string.loading) val groups = remember { arrayListOf(groupPlaceholder) } diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileCard.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileCard.kt index 9b92a0b..021aca8 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileCard.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileCard.kt @@ -10,6 +10,7 @@ import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.AccountCircle import androidx.compose.material.icons.filled.Email import androidx.compose.material.icons.filled.Lock +import androidx.compose.material3.Button import androidx.compose.material3.Card import androidx.compose.material3.CardDefaults import androidx.compose.material3.Icon @@ -137,6 +138,23 @@ internal fun ProfileCard(profile: Profile = FakeProfileRepository.exampleProfile }, ) + Button(onClick = { + runBlocking { + context.settingsDataStore.updateData { + it + .toBuilder() + .setGroup("") + .setAccessToken("") + .setUserId("") + .build() + } + } + + context.profileViewModel!!.onUnauthorized() + }) { + Text(stringResource(R.string.sign_out)) + } + if (passwordChanging) { ChangePasswordDialog( context, diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileScreen.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileScreen.kt index 8ec80d6..277f407 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileScreen.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/profile/ProfileScreen.kt @@ -41,8 +41,10 @@ fun ProfileScreen( } is ProfileUiState.NoProfile -> { - TextButton(onClick = onRefreshProfile, modifier = Modifier.fillMaxSize()) { - Text(stringResource(R.string.reload), textAlign = TextAlign.Center) + if (!uiState.isLoading) { + TextButton(onClick = onRefreshProfile, modifier = Modifier.fillMaxSize()) { + Text(stringResource(R.string.reload), textAlign = TextAlign.Center) + } } } } diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/DayPager.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/DayPager.kt index 2a61ea9..836d4f8 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/DayPager.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/DayPager.kt @@ -1,7 +1,6 @@ package ru.n08i40k.polytechnic.next.ui.main.schedule import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.pager.HorizontalPager import androidx.compose.foundation.pager.rememberPagerState import androidx.compose.runtime.Composable diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/ScheduleScreen.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/ScheduleScreen.kt index 6ff49e1..25aa69a 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/ScheduleScreen.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/main/schedule/ScheduleScreen.kt @@ -38,8 +38,10 @@ fun ScheduleScreen( } is ScheduleUiState.NoSchedule -> { - TextButton(onClick = onRefreshSchedule, modifier = Modifier.fillMaxSize()) { - Text(stringResource(R.string.reload), textAlign = TextAlign.Center) + if (!uiState.isLoading) { + TextButton(onClick = onRefreshSchedule, modifier = Modifier.fillMaxSize()) { + Text(stringResource(R.string.reload), textAlign = TextAlign.Center) + } } } } diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/theme/Theme.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/theme/Theme.kt index 77b2e3d..3eccab2 100644 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/ui/theme/Theme.kt +++ b/app/src/main/java/ru/n08i40k/polytechnic/next/ui/theme/Theme.kt @@ -1,3 +1,5 @@ +@file:Suppress("unused") + package ru.n08i40k.polytechnic.next.ui.theme import android.os.Build @@ -257,7 +259,7 @@ fun AppTheme( darkTheme: Boolean = isSystemInDarkTheme(), // Dynamic color is available on Android 12+ dynamicColor: Boolean = true, - content: @Composable() () -> Unit + content: @Composable () -> Unit ) { val colorScheme = when { dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { diff --git a/app/src/main/java/ru/n08i40k/polytechnic/next/utils/ErrorMessage.kt b/app/src/main/java/ru/n08i40k/polytechnic/next/utils/ErrorMessage.kt deleted file mode 100644 index 2c84cd5..0000000 --- a/app/src/main/java/ru/n08i40k/polytechnic/next/utils/ErrorMessage.kt +++ /dev/null @@ -1,3 +0,0 @@ -package ru.n08i40k.polytechnic.next.utils - -data class ErrorMessage(val message: String) \ No newline at end of file diff --git a/app/src/main/res/raw/ssl.pem b/app/src/main/res/raw/ssl.pem deleted file mode 100644 index dd5a581..0000000 --- a/app/src/main/res/raw/ssl.pem +++ /dev/null @@ -1,27 +0,0 @@ ------BEGIN CERTIFICATE----- -MIIEpjCCAw6gAwIBAgIRAO5cnXTnxJXAIMgjHjt8VNAwDQYJKoZIhvcNAQELBQAw -azEeMBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMSAwHgYDVQQLDBdIT01F -LVBDXG4wOGk0MGtASE9NRS1QQzEnMCUGA1UEAwwebWtjZXJ0IEhPTUUtUENcbjA4 -aTQwa0BIT01FLVBDMB4XDTI0MDQyMTIyMjE1MVoXDTM0MDQyMTIyMjE1MVowazEe -MBwGA1UEChMVbWtjZXJ0IGRldmVsb3BtZW50IENBMSAwHgYDVQQLDBdIT01FLVBD -XG4wOGk0MGtASE9NRS1QQzEnMCUGA1UEAwwebWtjZXJ0IEhPTUUtUENcbjA4aTQw -a0BIT01FLVBDMIIBojANBgkqhkiG9w0BAQEFAAOCAY8AMIIBigKCAYEAxdT1huby -eoG+X/kJoh1tn6jVJB/zN1r0/O7PZSZXJ9qYHufl6IwEfPlKJPNfpYifiSZ1x/R+ -flzmfk8Q3L/njIh3WOURmKhPuHyUnruVQnM/66FqRAp0gSntuGnQ8y/JEkSRtzRI -p75Rp/1NktDRqi8UOq1+aXCKwyh/jcu2gaJ9L0EKRqpxrGjm2hF3yYRQU/DRcWhc -VJKpMW4TpelRxUTM5QSdqsoe+GoKgLQeHzLXRSmRdTMFql/yG3Cy3MfYNR/oA+Nu -Nlt1ozPBTrtQ0LhTlToJkALB2cBxodRGJs871eDqzTzDHbJ6+OjlNy4xtZEgDTqt -XIl0wexOTjVk+31ClLsaqtfWDsyFPpAG4G7+eAUNPXY1MSiui3SmF5G3tLKUMmci -A6hV7MSBOhSF+Rl0pzZ6t8/aANmZerpALymRRzpp93z3evdQqRtki1oi4x1SIb5h -cNHgvwTzb6vSxd17lTiB78bWGVsDO3wy7JMuWRdA/AClxufeA8d7RlkPAgMBAAGj -RTBDMA4GA1UdDwEB/wQEAwICBDASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQW -BBRR8ZgtYNodDB7WWBFlx8lNwWlkZDANBgkqhkiG9w0BAQsFAAOCAYEAtMxjGIF0 -7I3UzM/2e/VWV8zaKRP4y7Nc3SbmygPi1kE+MJUtGyGqnOtVvTwVqmN1YMYe7Z3f -/IsjuMJfmDGq71gNf/frGDykOojpGnzk7R0d4VDWGA3cP+urSumilcz5a/nCfrps -zU5ZIM53t30Eg1FUdpJ84a9n2MF5rTBoFwez1JoeUUYdSI2SpbOHCAIzH3VLfQX0 -n/80aWxrykpPsvqVE171fpq7JHYXgftCR/aEOrMNpq0mlv3uQ8nJ0ejLcHG5FOCn -0sjx3ol/5VbVQItfhUHzQab0ubNaxl3VhxJEuqlvqJn0A0VoisCARPp1k9IIwz78 -LuuPUMjzmazBWgtE4Sj95M159f+A7tHeTXRDElSVb1QOAiHiFwBR6Eiw4jfjzJMi -RbZTh4aZ7YNtMFLROv3B8CP9TfcdyX/SeKRFwBp9mCotg9pxNuDwrwQ36+zyxv4N -W98lNodK590KS7F7P1P1oFS+cguzxiGJ3du4O5TTOY7VdgS+gz8DlBE+ ------END CERTIFICATE----- diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml index c0a1767..3c738be 100644 --- a/app/src/main/res/values-ru/strings.xml +++ b/app/src/main/res/values-ru/strings.xml @@ -30,4 +30,5 @@ Сменить пароль Сменить имя пользователя Сменить группу + Выйти с аккаунта \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f8c6127..028dd59 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -1,10 +1,4 @@ - #FFBB86FC - #FF6200EE - #FF3700B3 - #FF03DAC5 - #FF018786 - #FF000000 #FFFFFFFF \ 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 45308c9..f6a808c 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -30,4 +30,5 @@ Change username Loading… Change group + Sign out \ No newline at end of file