From 1da0e75b1e1793fb6a727a8daa3778f34f26f71f Mon Sep 17 00:00:00 2001
From: Minyeong Lee <13619@snu.ac.kr>
Date: Sun, 26 Nov 2023 23:25:54 +0900
Subject: [PATCH 1/6] :sparkles: Implement auto backup
---
.../com/example/speechbuddy/AuthActivity.kt | 83 ++++++++++++++++++-
.../speechbuddy/compose/SpeechBuddyAuth.kt | 13 ++-
.../compose/landing/LandingScreen.kt | 27 ++++--
.../viewmodel/BackupSettingsViewModel.kt | 1 -
frontend/app/src/main/res/values/strings.xml | 1 +
5 files changed, 109 insertions(+), 16 deletions(-)
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
index 45d36c79..1c47c430 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
@@ -1,23 +1,31 @@
package com.example.speechbuddy
import android.content.Intent
+import android.os.Build
import android.os.Bundle
import android.view.MotionEvent
import android.view.inputmethod.InputMethodManager
import androidx.activity.compose.setContent
import androidx.activity.viewModels
+import androidx.annotation.RequiresApi
+import androidx.compose.runtime.mutableStateOf
+import androidx.lifecycle.lifecycleScope
import com.example.speechbuddy.compose.SpeechBuddyAuth
import com.example.speechbuddy.ui.SpeechBuddyTheme
+import com.example.speechbuddy.utils.ResponseCode
import com.example.speechbuddy.viewmodel.DisplaySettingsViewModel
import com.example.speechbuddy.viewmodel.LoginViewModel
import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
@AndroidEntryPoint
class AuthActivity : BaseActivity() {
private val loginViewModel: LoginViewModel by viewModels()
private val displaySettingsViewModel: DisplaySettingsViewModel by viewModels()
+ private val isBackupCompleted = mutableStateOf(false)
+ @RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -29,17 +37,34 @@ class AuthActivity : BaseActivity() {
settingsRepository = settingsRepository,
initialDarkMode = getInitialDarkMode()
) {
- SpeechBuddyAuth()
+ SpeechBuddyAuth(isBackup = false)
}
}
}
+ @RequiresApi(Build.VERSION_CODES.O)
private fun subscribeObservers() {
sessionManager.isAuthorized.observe(this) { isAuthorized ->
- if (isAuthorized) navHomeActivity()
+ if (isAuthorized) autoBackup()
+ // 로그인 아님, 게스트 아님, 날짜 지남
+ else navHomeActivity()
}
}
+ @RequiresApi(Build.VERSION_CODES.O)
+ private fun autoBackup() {
+ setContent {
+ SpeechBuddyTheme(
+ settingsRepository = settingsRepository,
+ initialDarkMode = getInitialDarkMode()
+ ) {
+ SpeechBuddyAuth(isBackup = true)
+ }
+ }
+ displayBackup()
+ if (isBackupCompleted.value) navHomeActivity()
+ }
+
private fun navHomeActivity() {
val intent = Intent(this, HomeActivity::class.java)
startActivity(intent)
@@ -67,4 +92,58 @@ class AuthActivity : BaseActivity() {
return super.dispatchTouchEvent(event)
}
+ @RequiresApi(Build.VERSION_CODES.O)
+ private fun displayBackup() {
+ lifecycleScope.launch {
+ settingsRepository.displayBackup().collect { result ->
+ when (result.code()) {
+ ResponseCode.SUCCESS.value -> { symbolListBackup() }
+
+ ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ }
+ }
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ private fun symbolListBackup() {
+ lifecycleScope.launch {
+ settingsRepository.symbolListBackup().collect { result ->
+ when (result.code()) {
+ ResponseCode.SUCCESS.value -> { favoriteSymbolBackup() }
+
+ ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ }
+
+ }
+ }
+
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ private fun favoriteSymbolBackup() {
+ lifecycleScope.launch {
+ settingsRepository.favoriteSymbolBackup().collect { result ->
+ when (result.code()) {
+ ResponseCode.SUCCESS.value -> { weightTableBackup() }
+
+ ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ }
+ }
+ }
+ }
+
+ @RequiresApi(Build.VERSION_CODES.O)
+ private fun weightTableBackup() {
+ lifecycleScope.launch {
+ settingsRepository.weightTableBackup().collect { result ->
+ when (result.code()) {
+ ResponseCode.SUCCESS.value -> { isBackupCompleted.value = true }
+
+ ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ }
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/compose/SpeechBuddyAuth.kt b/frontend/app/src/main/java/com/example/speechbuddy/compose/SpeechBuddyAuth.kt
index b73d7693..18ef1a68 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/compose/SpeechBuddyAuth.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/compose/SpeechBuddyAuth.kt
@@ -12,23 +12,28 @@ import com.example.speechbuddy.compose.resetpassword.ResetPasswordScreen
import com.example.speechbuddy.compose.signup.SignupScreen
@Composable
-fun SpeechBuddyAuth() {
+fun SpeechBuddyAuth(
+ isBackup: Boolean
+) {
val navController = rememberNavController()
SpeechBuddyAuthNavHost(
- navController = navController
+ navController = navController,
+ isBackup = isBackup
)
}
@Composable
fun SpeechBuddyAuthNavHost(
- navController: NavHostController
+ navController: NavHostController,
+ isBackup: Boolean
) {
NavHost(navController = navController, startDestination = "landing") {
composable("landing") {
LandingScreen(
onLoginClick = {
navController.navigate("login")
- }
+ },
+ isBackup = isBackup
)
}
composable("login") {
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt b/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
index 2ec6c9e3..73d1d968 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
@@ -8,8 +8,11 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.wrapContentSize
+import androidx.compose.material3.CircularProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
+import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@@ -22,12 +25,14 @@ import com.example.speechbuddy.R
import com.example.speechbuddy.compose.utils.ButtonUi
import com.example.speechbuddy.ui.SpeechBuddyTheme
import com.example.speechbuddy.viewmodel.LoginViewModel
+import org.w3c.dom.Text
@Composable
fun LandingScreen(
modifier: Modifier = Modifier,
onLoginClick: () -> Unit,
- viewModel: LoginViewModel = hiltViewModel()
+ viewModel: LoginViewModel = hiltViewModel(),
+ isBackup: Boolean
) {
Surface(
modifier = modifier.fillMaxSize(),
@@ -46,14 +51,18 @@ fun LandingScreen(
modifier = Modifier.padding(horizontal = 24.dp, vertical = 64.dp),
contentAlignment = Alignment.BottomCenter
) {
- Column(
- verticalArrangement = Arrangement.spacedBy(14.dp)
- ) {
- ButtonUi(
- text = stringResource(id = R.string.start_guest_mode),
- onClick = { viewModel.enterGuestMode() }
- )
- ButtonUi(text = stringResource(id = R.string.do_login), onClick = onLoginClick)
+ if (!isBackup) {
+ Column(
+ verticalArrangement = Arrangement.spacedBy(14.dp)
+ ) {
+ ButtonUi(
+ text = stringResource(id = R.string.start_guest_mode),
+ onClick = { viewModel.enterGuestMode() }
+ )
+ ButtonUi(text = stringResource(id = R.string.do_login), onClick = onLoginClick)
+ }
+ } else {
+ Text(text = stringResource(id = R.string.backup_info))
}
}
}
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/viewmodel/BackupSettingsViewModel.kt b/frontend/app/src/main/java/com/example/speechbuddy/viewmodel/BackupSettingsViewModel.kt
index 0bfd52c0..a902a185 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/viewmodel/BackupSettingsViewModel.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/viewmodel/BackupSettingsViewModel.kt
@@ -44,7 +44,6 @@ class BackupSettingsViewModel @Inject internal constructor(
viewModelScope.launch {
repository.setAutoBackup(value)
}
- // TODO: Implement automated backup
}
private fun setLastBackupDate(value: String) {
diff --git a/frontend/app/src/main/res/values/strings.xml b/frontend/app/src/main/res/values/strings.xml
index 787531ca..39a346e5 100644
--- a/frontend/app/src/main/res/values/strings.xml
+++ b/frontend/app/src/main/res/values/strings.xml
@@ -15,6 +15,7 @@
이메일 인증을 먼저 진행해주세요
비밀번호 변경을 위해 이메일 인증을 먼저 진행해주세요
회원가입을 위해 이메일 인증을 먼저 진행해주세요
+ 자동 백업중입니다. 자동 백업을 원하시지 않으시면 설정에서 자동 백업을 꺼 주세요.
이메일
From 8fe4bee5c0b5f12e6d824adcb502c990e4c19a8b Mon Sep 17 00:00:00 2001
From: =Minyeong Lee <13619@snu.ac.kr>
Date: Tue, 28 Nov 2023 19:15:07 +0900
Subject: [PATCH 2/6] :sparkles: Implement auto backup feature
---
.../com/example/speechbuddy/AuthActivity.kt | 42 ++++++++++++++-----
.../speechbuddy/domain/SessionManager.kt | 10 +++++
.../speechbuddy/repository/AuthRepository.kt | 1 +
3 files changed, 43 insertions(+), 10 deletions(-)
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
index 1c47c430..e3287316 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
@@ -3,6 +3,7 @@ package com.example.speechbuddy
import android.content.Intent
import android.os.Build
import android.os.Bundle
+import android.util.Log
import android.view.MotionEvent
import android.view.inputmethod.InputMethodManager
import androidx.activity.compose.setContent
@@ -23,10 +24,10 @@ class AuthActivity : BaseActivity() {
private val loginViewModel: LoginViewModel by viewModels()
private val displaySettingsViewModel: DisplaySettingsViewModel by viewModels()
- private val isBackupCompleted = mutableStateOf(false)
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
+
super.onCreate(savedInstanceState)
subscribeObservers()
@@ -45,9 +46,16 @@ class AuthActivity : BaseActivity() {
@RequiresApi(Build.VERSION_CODES.O)
private fun subscribeObservers() {
sessionManager.isAuthorized.observe(this) { isAuthorized ->
- if (isAuthorized) autoBackup()
+ if (isAuthorized &&
+ sessionManager.userId.value != -1 &&
+ sessionManager.isLogin.value != true
+ ) {
+ Log.d("where", sessionManager.isLogin.value.toString())
+ autoBackup()
+ } else if (isAuthorized){
+ navHomeActivity()
+ }
// 로그인 아님, 게스트 아님, 날짜 지남
- else navHomeActivity()
}
}
@@ -62,7 +70,6 @@ class AuthActivity : BaseActivity() {
}
}
displayBackup()
- if (isBackupCompleted.value) navHomeActivity()
}
private fun navHomeActivity() {
@@ -99,7 +106,10 @@ class AuthActivity : BaseActivity() {
when (result.code()) {
ResponseCode.SUCCESS.value -> { symbolListBackup() }
- ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ ResponseCode.NO_INTERNET_CONNECTION.value -> {
+ sessionManager.setIsLogin(false)
+ navHomeActivity()
+ }
}
}
}
@@ -112,7 +122,10 @@ class AuthActivity : BaseActivity() {
when (result.code()) {
ResponseCode.SUCCESS.value -> { favoriteSymbolBackup() }
- ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ ResponseCode.NO_INTERNET_CONNECTION.value -> {
+ sessionManager.setIsLogin(false)
+ navHomeActivity()
+ }
}
}
@@ -127,7 +140,10 @@ class AuthActivity : BaseActivity() {
when (result.code()) {
ResponseCode.SUCCESS.value -> { weightTableBackup() }
- ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ ResponseCode.NO_INTERNET_CONNECTION.value -> {
+ sessionManager.setIsLogin(false)
+ navHomeActivity()
+ }
}
}
}
@@ -138,9 +154,15 @@ class AuthActivity : BaseActivity() {
lifecycleScope.launch {
settingsRepository.weightTableBackup().collect { result ->
when (result.code()) {
- ResponseCode.SUCCESS.value -> { isBackupCompleted.value = true }
-
- ResponseCode.NO_INTERNET_CONNECTION.value -> { isBackupCompleted.value = true }
+ ResponseCode.SUCCESS.value -> {
+ sessionManager.setIsLogin(false)
+ navHomeActivity()
+ }
+
+ ResponseCode.NO_INTERNET_CONNECTION.value -> {
+ sessionManager.setIsLogin(false)
+ navHomeActivity()
+ }
}
}
}
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/domain/SessionManager.kt b/frontend/app/src/main/java/com/example/speechbuddy/domain/SessionManager.kt
index cd6facce..a89fa64b 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/domain/SessionManager.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/domain/SessionManager.kt
@@ -12,6 +12,7 @@ class SessionManager {
private val _cachedToken = MutableLiveData()
private val _userId = MutableLiveData(null)
+ private val _isLogin = MutableLiveData(false)
val cachedToken: LiveData
get() = _cachedToken
@@ -19,6 +20,15 @@ class SessionManager {
val userId: LiveData
get() = _userId
+ val isLogin: LiveData
+ get() = _isLogin
+
+ fun setIsLogin(value: Boolean) {
+ CoroutineScope(Dispatchers.Main).launch {
+ _isLogin.value = value
+ }
+ }
+
/**
* Authorized only when _userId is set to GUEST or refreshToken is not null
* (because accessToken is temporarily set in case of 'reset password')
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/repository/AuthRepository.kt b/frontend/app/src/main/java/com/example/speechbuddy/repository/AuthRepository.kt
index 2cda5ca1..f35a87ef 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/repository/AuthRepository.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/repository/AuthRepository.kt
@@ -51,6 +51,7 @@ class AuthRepository @Inject constructor(
response.body()?.let { authTokenDto ->
authTokenDto.let {
val authToken = authTokenDtoMapper.mapToDomainModel(authTokenDto)
+ sessionManager.setIsLogin(true)
authTokenPrefsManager.saveAuthToken(authToken)
Resource.success(authToken)
}
From 2b5510c44693dfef29c0366c4331fd7bf73bb533 Mon Sep 17 00:00:00 2001
From: Minyeong Lee <13619@snu.ac.kr>
Date: Tue, 28 Nov 2023 20:53:15 +0900
Subject: [PATCH 3/6] :sparkles: Complete implementing auto backup
---
.../com/example/speechbuddy/AuthActivity.kt | 36 +++++++++++--
.../com/example/speechbuddy/HomeActivity.kt | 20 ++++++--
.../compose/landing/LandingScreen.kt | 50 ++++++++++++++++---
frontend/app/src/main/res/values/strings.xml | 5 +-
4 files changed, 95 insertions(+), 16 deletions(-)
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
index e3287316..e90506e1 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
@@ -18,12 +18,12 @@ import com.example.speechbuddy.viewmodel.DisplaySettingsViewModel
import com.example.speechbuddy.viewmodel.LoginViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
+import java.time.LocalDate
@AndroidEntryPoint
class AuthActivity : BaseActivity() {
private val loginViewModel: LoginViewModel by viewModels()
- private val displaySettingsViewModel: DisplaySettingsViewModel by viewModels()
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -48,14 +48,14 @@ class AuthActivity : BaseActivity() {
sessionManager.isAuthorized.observe(this) { isAuthorized ->
if (isAuthorized &&
sessionManager.userId.value != -1 &&
- sessionManager.isLogin.value != true
+ sessionManager.isLogin.value != true &&
+ getAutoBackup() &&
+ getLastBackupDate() != LocalDate.now().toString()
) {
- Log.d("where", sessionManager.isLogin.value.toString())
autoBackup()
} else if (isAuthorized){
navHomeActivity()
}
- // 로그인 아님, 게스트 아님, 날짜 지남
}
}
@@ -79,7 +79,33 @@ class AuthActivity : BaseActivity() {
}
private fun getInitialDarkMode(): Boolean {
- return displaySettingsViewModel.getDarkMode()
+ var darkMode = false
+ lifecycleScope.launch {
+ settingsRepository.getDarkMode().collect {
+ darkMode = it.data?: false
+ }
+ }
+ return darkMode
+ }
+
+ private fun getAutoBackup(): Boolean {
+ var autoBackup = true
+ lifecycleScope.launch {
+ settingsRepository.getAutoBackup().collect {
+ autoBackup = it.data?: true
+ }
+ }
+ return autoBackup
+ }
+
+ private fun getLastBackupDate(): String {
+ var lastBackupDate = ""
+ lifecycleScope.launch {
+ settingsRepository.getLastBackupDate().collect {
+ lastBackupDate = it.data?: ""
+ }
+ }
+ return lastBackupDate
}
private fun checkPreviousAuthUser() {
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
index eff5d85f..398a6833 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
@@ -12,16 +12,16 @@ import androidx.annotation.RequiresApi
import androidx.compose.runtime.mutableStateOf
import androidx.core.view.WindowCompat
import androidx.lifecycle.Observer
+import androidx.lifecycle.lifecycleScope
import com.example.speechbuddy.compose.SpeechBuddyHome
import com.example.speechbuddy.ui.SpeechBuddyTheme
import com.example.speechbuddy.viewmodel.DisplaySettingsViewModel
import dagger.hilt.android.AndroidEntryPoint
+import kotlinx.coroutines.launch
@AndroidEntryPoint
class HomeActivity : BaseActivity() {
- private val displaySettingsViewModel: DisplaySettingsViewModel by viewModels()
-
@RequiresApi(Build.VERSION_CODES.O)
override fun onCreate(savedInstanceState: Bundle?) {
@@ -52,11 +52,23 @@ class HomeActivity : BaseActivity() {
}
private fun getInitialPage(): Boolean {
- return displaySettingsViewModel.getInitialPage()
+ var initialPage = false
+ lifecycleScope.launch {
+ settingsRepository.getInitialPage().collect {
+ initialPage = it.data?: false
+ }
+ }
+ return initialPage
}
private fun getInitialDarkMode(): Boolean {
- return displaySettingsViewModel.getDarkMode()
+ var darkMode = false
+ lifecycleScope.launch {
+ settingsRepository.getDarkMode().collect {
+ darkMode = it.data?: false
+ }
+ }
+ return darkMode
}
// hides keyboard
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt b/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
index 73d1d968..170d6586 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
@@ -1,15 +1,19 @@
package com.example.speechbuddy.compose.landing
import androidx.compose.foundation.Image
+import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.offset
+import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.CircularProgressIndicator
+import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
@@ -18,14 +22,12 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
+import androidx.compose.ui.window.Dialog
import androidx.hilt.navigation.compose.hiltViewModel
import com.example.speechbuddy.R
import com.example.speechbuddy.compose.utils.ButtonUi
-import com.example.speechbuddy.ui.SpeechBuddyTheme
import com.example.speechbuddy.viewmodel.LoginViewModel
-import org.w3c.dom.Text
@Composable
fun LandingScreen(
@@ -61,9 +63,45 @@ fun LandingScreen(
)
ButtonUi(text = stringResource(id = R.string.do_login), onClick = onLoginClick)
}
- } else {
- Text(text = stringResource(id = R.string.backup_info))
}
}
}
+
+ if (isBackup) {
+ Dialog(
+ onDismissRequest = {}
+ ) {
+ Box(
+ modifier = Modifier
+ .wrapContentSize()
+ .background(MaterialTheme.colorScheme.surface)
+ .padding(24.dp)
+ ) {
+ Column(
+ modifier = Modifier
+ .wrapContentSize()
+ ) {
+ Text(
+ text = stringResource(id = R.string.auto_backup_title),
+ style = MaterialTheme.typography.headlineSmall
+ )
+ Spacer(modifier = Modifier.height(24.dp))
+ Row(
+ modifier = Modifier
+ .wrapContentSize(),
+ verticalAlignment = Alignment.CenterVertically
+ ) {
+ CircularProgressIndicator(
+ color = MaterialTheme.colorScheme.primary
+ )
+ Text(
+ text = stringResource(id = R.string.auto_backup_info),
+ modifier = Modifier.padding(start = 20.dp)
+ )
+ }
+ }
+ }
+ }
+ }
+
}
\ No newline at end of file
diff --git a/frontend/app/src/main/res/values/strings.xml b/frontend/app/src/main/res/values/strings.xml
index 39a346e5..a430665d 100644
--- a/frontend/app/src/main/res/values/strings.xml
+++ b/frontend/app/src/main/res/values/strings.xml
@@ -8,6 +8,9 @@
비밀번호 변경
이메일 인증
+
+ 자동 백업 중
+
로그인해 SpeechBuddy의 다양한 기능을 사용해보세요
SpeechBuddy에 오신 것을 환영합니다!
@@ -15,7 +18,7 @@
이메일 인증을 먼저 진행해주세요
비밀번호 변경을 위해 이메일 인증을 먼저 진행해주세요
회원가입을 위해 이메일 인증을 먼저 진행해주세요
- 자동 백업중입니다. 자동 백업을 원하시지 않으시면 설정에서 자동 백업을 꺼 주세요.
+ 자동 백업을 원하시지 않으시면 설정의 서버에 백업하기 메뉴에서 자동 백업을 꺼 주세요.
이메일
From e5f45a81fdeae8a17f6828ea38fd7ddc3d7af278 Mon Sep 17 00:00:00 2001
From: Minyeong Lee <13619@snu.ac.kr>
Date: Tue, 28 Nov 2023 20:56:51 +0900
Subject: [PATCH 4/6] :fire: Remove unused imports
---
.../src/main/java/com/example/speechbuddy/AuthActivity.kt | 3 ---
.../src/main/java/com/example/speechbuddy/HomeActivity.kt | 6 ------
.../example/speechbuddy/compose/landing/LandingScreen.kt | 1 -
3 files changed, 10 deletions(-)
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
index e90506e1..198cd971 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
@@ -3,18 +3,15 @@ package com.example.speechbuddy
import android.content.Intent
import android.os.Build
import android.os.Bundle
-import android.util.Log
import android.view.MotionEvent
import android.view.inputmethod.InputMethodManager
import androidx.activity.compose.setContent
import androidx.activity.viewModels
import androidx.annotation.RequiresApi
-import androidx.compose.runtime.mutableStateOf
import androidx.lifecycle.lifecycleScope
import com.example.speechbuddy.compose.SpeechBuddyAuth
import com.example.speechbuddy.ui.SpeechBuddyTheme
import com.example.speechbuddy.utils.ResponseCode
-import com.example.speechbuddy.viewmodel.DisplaySettingsViewModel
import com.example.speechbuddy.viewmodel.LoginViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
index 398a6833..9b51c476 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
@@ -6,16 +6,10 @@ import android.os.Bundle
import android.view.MotionEvent
import android.view.inputmethod.InputMethodManager
import androidx.activity.compose.setContent
-import androidx.activity.enableEdgeToEdge
-import androidx.activity.viewModels
import androidx.annotation.RequiresApi
-import androidx.compose.runtime.mutableStateOf
-import androidx.core.view.WindowCompat
-import androidx.lifecycle.Observer
import androidx.lifecycle.lifecycleScope
import com.example.speechbuddy.compose.SpeechBuddyHome
import com.example.speechbuddy.ui.SpeechBuddyTheme
-import com.example.speechbuddy.viewmodel.DisplaySettingsViewModel
import dagger.hilt.android.AndroidEntryPoint
import kotlinx.coroutines.launch
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt b/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
index 170d6586..19e3ce3a 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/compose/landing/LandingScreen.kt
@@ -13,7 +13,6 @@ import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.wrapContentSize
import androidx.compose.material3.CircularProgressIndicator
-import androidx.compose.material3.LinearProgressIndicator
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Surface
import androidx.compose.material3.Text
From 1343bac172f2195b3b992e190bf1c78a7ef419cf Mon Sep 17 00:00:00 2001
From: Minyeong Lee <13619@snu.ac.kr>
Date: Thu, 30 Nov 2023 19:49:34 +0900
Subject: [PATCH 5/6] :art: Change -1 to GUEST
---
.../src/main/java/com/example/speechbuddy/AuthActivity.kt | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
index 198cd971..3b9b2b21 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/AuthActivity.kt
@@ -44,7 +44,7 @@ class AuthActivity : BaseActivity() {
private fun subscribeObservers() {
sessionManager.isAuthorized.observe(this) { isAuthorized ->
if (isAuthorized &&
- sessionManager.userId.value != -1 &&
+ sessionManager.userId.value != GUEST &&
sessionManager.isLogin.value != true &&
getAutoBackup() &&
getLastBackupDate() != LocalDate.now().toString()
@@ -56,6 +56,10 @@ class AuthActivity : BaseActivity() {
}
}
+ companion object {
+ const val GUEST = -1
+ }
+
@RequiresApi(Build.VERSION_CODES.O)
private fun autoBackup() {
setContent {
From 791f569eb1ccecd704f9a029589e8731e04a6e02 Mon Sep 17 00:00:00 2001
From: YeonJeong Kim
Date: Thu, 30 Nov 2023 21:37:12 +0900
Subject: [PATCH 6/6] :lipstick: Delete unused imports in HomeActivity
---
.../app/src/main/java/com/example/speechbuddy/HomeActivity.kt | 1 -
1 file changed, 1 deletion(-)
diff --git a/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt b/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
index 1377d686..89b3ba2f 100644
--- a/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
+++ b/frontend/app/src/main/java/com/example/speechbuddy/HomeActivity.kt
@@ -8,7 +8,6 @@ import android.view.inputmethod.InputMethodManager
import androidx.activity.compose.setContent
import androidx.annotation.RequiresApi
import androidx.lifecycle.lifecycleScope
-import androidx.activity.viewModels
import com.example.speechbuddy.compose.SpeechBuddyHome
import com.example.speechbuddy.ui.SpeechBuddyTheme
import dagger.hilt.android.AndroidEntryPoint