Релиз 1.1

Исправлена установка группы пользователя при регистрации.

Во вкладке профиля добавлена кнопка для выхода из аккаунта.
This commit is contained in:
2024-09-15 21:12:18 +04:00
parent 6c17d967d1
commit ee7c4b06a1
22 changed files with 53 additions and 67 deletions

View File

@@ -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 {

View File

@@ -7,6 +7,7 @@ import javax.inject.Inject
@HiltAndroidApp
class PolytechnicApplication : Application() {
@Suppress("unused")
@Inject
lateinit var container: AppContainer
}

View File

@@ -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 {

View File

@@ -7,6 +7,3 @@ sealed interface MyResult<out R> {
data class Failure(val exception: Exception) : MyResult<Nothing>
}
fun <T> MyResult<T>.successOr(fallback: T): T {
return (this as? MyResult.Success<T>)?.data ?: fallback
}

View File

@@ -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(

View File

@@ -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<Group> {
@@ -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<ScheduleGetResponse>()
ScheduleGetRequest(

View File

@@ -1,3 +1,5 @@
@file:Suppress("unused")
package ru.n08i40k.polytechnic.next.model
import kotlinx.serialization.Serializable

View File

@@ -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/"
}

View File

@@ -1,7 +0,0 @@
package ru.n08i40k.polytechnic.next.network
class ResponseBase {
fun handleResponse(response: String?) {
}
}

View File

@@ -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

View File

@@ -447,6 +447,15 @@ fun tryRegister(
}
}
runBlocking {
context.settingsDataStore.updateData { currentSettings ->
currentSettings
.toBuilder()
.setGroup(group)
.build()
}
}
navController.navigate("main")
}, {
isLoading = false

View File

@@ -60,7 +60,7 @@ private fun tryChangeGroup(
@Composable
private fun getGroups(context: Context): ArrayList<String> {
val groupPlaceholder = stringResource(R.string.loading);
val groupPlaceholder = stringResource(R.string.loading)
val groups = remember { arrayListOf(groupPlaceholder) }

View File

@@ -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,

View File

@@ -41,10 +41,12 @@ fun ProfileScreen(
}
is ProfileUiState.NoProfile -> {
if (!uiState.isLoading) {
TextButton(onClick = onRefreshProfile, modifier = Modifier.fillMaxSize()) {
Text(stringResource(R.string.reload), textAlign = TextAlign.Center)
}
}
}
}
}
}

View File

@@ -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

View File

@@ -38,10 +38,12 @@ fun ScheduleScreen(
}
is ScheduleUiState.NoSchedule -> {
if (!uiState.isLoading) {
TextButton(onClick = onRefreshSchedule, modifier = Modifier.fillMaxSize()) {
Text(stringResource(R.string.reload), textAlign = TextAlign.Center)
}
}
}
}
}
}

View File

@@ -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 -> {

View File

@@ -1,3 +0,0 @@
package ru.n08i40k.polytechnic.next.utils
data class ErrorMessage(val message: String)

View File

@@ -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-----

View File

@@ -30,4 +30,5 @@
<string name="change_password">Сменить пароль</string>
<string name="change_username">Сменить имя пользователя</string>
<string name="change_group">Сменить группу</string>
<string name="sign_out">Выйти с аккаунта</string>
</resources>

View File

@@ -1,10 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="purple_200">#FFBB86FC</color>
<color name="purple_500">#FF6200EE</color>
<color name="purple_700">#FF3700B3</color>
<color name="teal_200">#FF03DAC5</color>
<color name="teal_700">#FF018786</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>

View File

@@ -30,4 +30,5 @@
<string name="change_username">Change username</string>
<string name="loading">Loading…</string>
<string name="change_group">Change group</string>
<string name="sign_out">Sign out</string>
</resources>