Skip to content

Commit 26a048a

Browse files
committed
Almost done integrating cloud backup
1 parent 1706373 commit 26a048a

7 files changed

Lines changed: 187 additions & 173 deletions

File tree

app/src/main/java/in/hridayan/ashell/settings/presentation/components/dialog/BackupDestinationDialog.kt

Lines changed: 66 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@
22

33
package `in`.hridayan.ashell.settings.presentation.components.dialog
44

5-
import androidx.compose.foundation.clickable
5+
import androidx.compose.foundation.layout.Arrangement
66
import androidx.compose.foundation.layout.Column
77
import androidx.compose.foundation.layout.Row
88
import androidx.compose.foundation.layout.Spacer
99
import androidx.compose.foundation.layout.fillMaxWidth
1010
import androidx.compose.foundation.layout.height
1111
import androidx.compose.foundation.layout.padding
12-
import androidx.compose.foundation.layout.size
1312
import androidx.compose.foundation.layout.widthIn
14-
import androidx.compose.material.icons.Icons
15-
import androidx.compose.material.icons.rounded.CloudUpload
16-
import androidx.compose.material.icons.rounded.FolderOpen
1713
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
1814
import androidx.compose.material3.Icon
1915
import androidx.compose.material3.MaterialTheme
@@ -22,13 +18,15 @@ import androidx.compose.material3.Text
2218
import androidx.compose.runtime.Composable
2319
import androidx.compose.ui.Alignment
2420
import androidx.compose.ui.Modifier
25-
import androidx.compose.ui.draw.clip
26-
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
21+
import androidx.compose.ui.res.painterResource
2722
import androidx.compose.ui.res.stringResource
23+
import androidx.compose.ui.text.style.TextAlign
2824
import androidx.compose.ui.unit.dp
2925
import androidx.compose.ui.window.Dialog
3026
import androidx.compose.ui.window.DialogProperties
3127
import `in`.hridayan.ashell.R
28+
import `in`.hridayan.ashell.core.presentation.components.card.BottomCornerRoundedCard
29+
import `in`.hridayan.ashell.core.presentation.components.card.TopCornerRoundedCard
3230
import `in`.hridayan.ashell.core.presentation.components.haptic.withHaptic
3331
import `in`.hridayan.ashell.core.presentation.components.text.AutoResizeableText
3432

@@ -53,79 +51,81 @@ fun BackupDestinationDialog(
5351
.padding(24.dp)
5452
.widthIn(min = 280.dp)
5553
) {
56-
AutoResizeableText(
57-
text = stringResource(R.string.choose_backup_destination),
54+
Text(
55+
text = stringResource(R.string.backup_destination),
5856
style = MaterialTheme.typography.titleLarge,
5957
color = MaterialTheme.colorScheme.onSurface,
58+
textAlign = TextAlign.Center,
59+
modifier = Modifier
60+
.fillMaxWidth()
61+
.align(Alignment.CenterHorizontally)
6062
)
6163

62-
Spacer(modifier = Modifier.height(20.dp))
64+
Spacer(modifier = Modifier.height(24.dp))
6365

64-
// Local file option
65-
Row(
66+
TopCornerRoundedCard(
6667
modifier = Modifier
6768
.fillMaxWidth()
68-
.clip(MaterialTheme.shapes.medium)
69-
.clickable(
70-
onClick = withHaptic(HapticFeedbackType.Confirm) {
71-
onLocalBackup()
72-
onDismiss()
73-
}
74-
)
75-
.padding(16.dp),
76-
verticalAlignment = Alignment.CenterVertically
69+
.padding(bottom = 2.dp),
70+
onClick = withHaptic {
71+
onLocalBackup()
72+
},
73+
containerColor = MaterialTheme.colorScheme.tertiaryContainer,
74+
contentColor = MaterialTheme.colorScheme.onTertiaryContainer
7775
) {
78-
Icon(
79-
imageVector = Icons.Rounded.FolderOpen,
80-
contentDescription = null,
81-
tint = MaterialTheme.colorScheme.primary,
82-
modifier = Modifier.size(24.dp)
83-
)
84-
Column(modifier = Modifier.padding(start = 16.dp)) {
85-
Text(
86-
text = stringResource(R.string.local_file),
87-
style = MaterialTheme.typography.bodyLarge,
88-
color = MaterialTheme.colorScheme.onSurface
89-
)
90-
Text(
91-
text = stringResource(R.string.des_local_backup),
92-
style = MaterialTheme.typography.bodySmall,
93-
color = MaterialTheme.colorScheme.onSurfaceVariant
76+
Row(
77+
modifier = Modifier
78+
.fillMaxWidth()
79+
.padding(horizontal = 20.dp, vertical = 15.dp),
80+
verticalAlignment = Alignment.CenterVertically,
81+
horizontalArrangement = Arrangement.spacedBy(15.dp)
82+
) {
83+
Icon(
84+
painter = painterResource(R.drawable.ic_directory),
85+
contentDescription = null,
9486
)
87+
Column(verticalArrangement = Arrangement.spacedBy(5.dp)) {
88+
AutoResizeableText(
89+
text = stringResource(R.string.local_file),
90+
style = MaterialTheme.typography.titleMediumEmphasized
91+
)
92+
Text(
93+
text = stringResource(R.string.des_local_backup),
94+
style = MaterialTheme.typography.bodySmall
95+
)
96+
}
9597
}
9698
}
9799

98-
// Google Drive option
99-
Row(
100-
modifier = Modifier
101-
.fillMaxWidth()
102-
.clip(MaterialTheme.shapes.medium)
103-
.clickable(
104-
onClick = withHaptic(HapticFeedbackType.Confirm) {
105-
onGoogleDriveBackup()
106-
onDismiss()
107-
}
108-
)
109-
.padding(16.dp),
110-
verticalAlignment = Alignment.CenterVertically
100+
BottomCornerRoundedCard(
101+
modifier = Modifier.fillMaxWidth(),
102+
onClick = withHaptic {
103+
onGoogleDriveBackup()
104+
},
105+
containerColor = MaterialTheme.colorScheme.tertiaryContainer,
106+
contentColor = MaterialTheme.colorScheme.onTertiaryContainer
111107
) {
112-
Icon(
113-
imageVector = Icons.Rounded.CloudUpload,
114-
contentDescription = null,
115-
tint = MaterialTheme.colorScheme.primary,
116-
modifier = Modifier.size(24.dp)
117-
)
118-
Column(modifier = Modifier.padding(start = 16.dp)) {
119-
Text(
120-
text = stringResource(R.string.google_drive),
121-
style = MaterialTheme.typography.bodyLarge,
122-
color = MaterialTheme.colorScheme.onSurface
123-
)
124-
Text(
125-
text = stringResource(R.string.des_drive_backup),
126-
style = MaterialTheme.typography.bodySmall,
127-
color = MaterialTheme.colorScheme.onSurfaceVariant
108+
Row(
109+
modifier = Modifier
110+
.fillMaxWidth()
111+
.padding(horizontal = 20.dp, vertical = 15.dp),
112+
verticalAlignment = Alignment.CenterVertically,
113+
horizontalArrangement = Arrangement.spacedBy(15.dp)
114+
) {
115+
Icon(
116+
painter = painterResource(R.drawable.ic_cloud_upload),
117+
contentDescription = null,
128118
)
119+
Column(verticalArrangement = Arrangement.spacedBy(5.dp)) {
120+
AutoResizeableText(
121+
text = stringResource(R.string.google_drive),
122+
style = MaterialTheme.typography.titleMediumEmphasized
123+
)
124+
Text(
125+
text = stringResource(R.string.des_drive_backup),
126+
style = MaterialTheme.typography.bodySmall
127+
)
128+
}
129129
}
130130
}
131131
}

app/src/main/java/in/hridayan/ashell/settings/presentation/components/dialog/RestoreSourceDialog.kt

Lines changed: 66 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -2,18 +2,14 @@
22

33
package `in`.hridayan.ashell.settings.presentation.components.dialog
44

5-
import androidx.compose.foundation.clickable
5+
import androidx.compose.foundation.layout.Arrangement
66
import androidx.compose.foundation.layout.Column
77
import androidx.compose.foundation.layout.Row
88
import androidx.compose.foundation.layout.Spacer
99
import androidx.compose.foundation.layout.fillMaxWidth
1010
import androidx.compose.foundation.layout.height
1111
import androidx.compose.foundation.layout.padding
12-
import androidx.compose.foundation.layout.size
1312
import androidx.compose.foundation.layout.widthIn
14-
import androidx.compose.material.icons.Icons
15-
import androidx.compose.material.icons.rounded.CloudDownload
16-
import androidx.compose.material.icons.rounded.FolderOpen
1713
import androidx.compose.material3.ExperimentalMaterial3ExpressiveApi
1814
import androidx.compose.material3.Icon
1915
import androidx.compose.material3.MaterialTheme
@@ -22,13 +18,15 @@ import androidx.compose.material3.Text
2218
import androidx.compose.runtime.Composable
2319
import androidx.compose.ui.Alignment
2420
import androidx.compose.ui.Modifier
25-
import androidx.compose.ui.draw.clip
26-
import androidx.compose.ui.hapticfeedback.HapticFeedbackType
21+
import androidx.compose.ui.res.painterResource
2722
import androidx.compose.ui.res.stringResource
23+
import androidx.compose.ui.text.style.TextAlign
2824
import androidx.compose.ui.unit.dp
2925
import androidx.compose.ui.window.Dialog
3026
import androidx.compose.ui.window.DialogProperties
3127
import `in`.hridayan.ashell.R
28+
import `in`.hridayan.ashell.core.presentation.components.card.BottomCornerRoundedCard
29+
import `in`.hridayan.ashell.core.presentation.components.card.TopCornerRoundedCard
3230
import `in`.hridayan.ashell.core.presentation.components.haptic.withHaptic
3331
import `in`.hridayan.ashell.core.presentation.components.text.AutoResizeableText
3432

@@ -53,79 +51,81 @@ fun RestoreSourceDialog(
5351
.padding(24.dp)
5452
.widthIn(min = 280.dp)
5553
) {
56-
AutoResizeableText(
57-
text = stringResource(R.string.choose_restore_source),
54+
Text(
55+
text = stringResource(R.string.restore_from),
5856
style = MaterialTheme.typography.titleLarge,
5957
color = MaterialTheme.colorScheme.onSurface,
58+
textAlign = TextAlign.Center,
59+
modifier = Modifier
60+
.fillMaxWidth()
61+
.align(Alignment.CenterHorizontally)
6062
)
6163

62-
Spacer(modifier = Modifier.height(20.dp))
64+
Spacer(modifier = Modifier.height(24.dp))
6365

64-
// Local file option
65-
Row(
66+
TopCornerRoundedCard(
6667
modifier = Modifier
6768
.fillMaxWidth()
68-
.clip(MaterialTheme.shapes.medium)
69-
.clickable(
70-
onClick = withHaptic(HapticFeedbackType.Confirm) {
71-
onLocalRestore()
72-
onDismiss()
73-
}
74-
)
75-
.padding(16.dp),
76-
verticalAlignment = Alignment.CenterVertically
69+
.padding(bottom = 2.dp),
70+
onClick = withHaptic {
71+
onLocalRestore()
72+
},
73+
containerColor = MaterialTheme.colorScheme.tertiaryContainer,
74+
contentColor = MaterialTheme.colorScheme.onTertiaryContainer
7775
) {
78-
Icon(
79-
imageVector = Icons.Rounded.FolderOpen,
80-
contentDescription = null,
81-
tint = MaterialTheme.colorScheme.primary,
82-
modifier = Modifier.size(24.dp)
83-
)
84-
Column(modifier = Modifier.padding(start = 16.dp)) {
85-
Text(
86-
text = stringResource(R.string.local_file),
87-
style = MaterialTheme.typography.bodyLarge,
88-
color = MaterialTheme.colorScheme.onSurface
89-
)
90-
Text(
91-
text = stringResource(R.string.des_local_restore),
92-
style = MaterialTheme.typography.bodySmall,
93-
color = MaterialTheme.colorScheme.onSurfaceVariant
76+
Row(
77+
modifier = Modifier
78+
.fillMaxWidth()
79+
.padding(horizontal = 20.dp, vertical = 15.dp),
80+
verticalAlignment = Alignment.CenterVertically,
81+
horizontalArrangement = Arrangement.spacedBy(15.dp)
82+
) {
83+
Icon(
84+
painter = painterResource(R.drawable.ic_directory),
85+
contentDescription = null,
9486
)
87+
Column(verticalArrangement = Arrangement.spacedBy(5.dp)) {
88+
AutoResizeableText(
89+
text = stringResource(R.string.local_file),
90+
style = MaterialTheme.typography.titleMediumEmphasized
91+
)
92+
Text(
93+
text = stringResource(R.string.des_local_restore),
94+
style = MaterialTheme.typography.bodySmall
95+
)
96+
}
9597
}
9698
}
9799

98-
// Google Drive option
99-
Row(
100-
modifier = Modifier
101-
.fillMaxWidth()
102-
.clip(MaterialTheme.shapes.medium)
103-
.clickable(
104-
onClick = withHaptic(HapticFeedbackType.Confirm) {
105-
onGoogleDriveRestore()
106-
onDismiss()
107-
}
108-
)
109-
.padding(16.dp),
110-
verticalAlignment = Alignment.CenterVertically
100+
BottomCornerRoundedCard(
101+
modifier = Modifier.fillMaxWidth(),
102+
onClick = withHaptic {
103+
onGoogleDriveRestore()
104+
},
105+
containerColor = MaterialTheme.colorScheme.tertiaryContainer,
106+
contentColor = MaterialTheme.colorScheme.onTertiaryContainer
111107
) {
112-
Icon(
113-
imageVector = Icons.Rounded.CloudDownload,
114-
contentDescription = null,
115-
tint = MaterialTheme.colorScheme.primary,
116-
modifier = Modifier.size(24.dp)
117-
)
118-
Column(modifier = Modifier.padding(start = 16.dp)) {
119-
Text(
120-
text = stringResource(R.string.google_drive),
121-
style = MaterialTheme.typography.bodyLarge,
122-
color = MaterialTheme.colorScheme.onSurface
123-
)
124-
Text(
125-
text = stringResource(R.string.des_drive_restore),
126-
style = MaterialTheme.typography.bodySmall,
127-
color = MaterialTheme.colorScheme.onSurfaceVariant
108+
Row(
109+
modifier = Modifier
110+
.fillMaxWidth()
111+
.padding(horizontal = 20.dp, vertical = 15.dp),
112+
verticalAlignment = Alignment.CenterVertically,
113+
horizontalArrangement = Arrangement.spacedBy(15.dp)
114+
) {
115+
Icon(
116+
painter = painterResource(R.drawable.ic_cloud_download),
117+
contentDescription = null,
128118
)
119+
Column(verticalArrangement = Arrangement.spacedBy(5.dp)) {
120+
AutoResizeableText(
121+
text = stringResource(R.string.google_drive),
122+
style = MaterialTheme.typography.titleMediumEmphasized
123+
)
124+
Text(
125+
text = stringResource(R.string.des_drive_restore),
126+
style = MaterialTheme.typography.bodySmall
127+
)
128+
}
129129
}
130130
}
131131
}

app/src/main/java/in/hridayan/ashell/settings/presentation/page/backup/screens/BackupAndRestoreScreen.kt

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -305,7 +305,6 @@ fun BackupAndRestoreScreen(
305305
)
306306
}
307307

308-
// Restore source dialog (Local vs Google Drive)
309308
DialogKey.Settings.RestoreSource.createDialog { dialogViewModel ->
310309
RestoreSourceDialog(
311310
onDismiss = { dialogViewModel.dismiss() },
@@ -318,12 +317,10 @@ fun BackupAndRestoreScreen(
318317
)
319318
}
320319

321-
// Cloud operation loading dialog
322320
cloudOperationMessage?.let { message ->
323321
CloudOperationDialog(message = message)
324322
}
325323

326-
// Cloud restore confirm dialog (after download, before apply)
327324
if (showCloudRestoreConfirm) {
328325
RestoreBackupDialog(
329326
onDismiss = { backupAndRestoreViewModel.cancelCloudRestore() },

app/src/main/java/in/hridayan/ashell/shell/wifi_adb_shell/presentation/component/dialog/PairModeChooseDialog.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,10 @@ fun PairModeChooseDialog(
5555
text = stringResource(R.string.which_device_to_pair),
5656
style = MaterialTheme.typography.titleLarge,
5757
color = MaterialTheme.colorScheme.onSurface,
58-
textAlign = TextAlign.Center
58+
textAlign = TextAlign.Center,
59+
modifier = Modifier
60+
.fillMaxWidth()
61+
.align(Alignment.CenterHorizontally)
5962
)
6063

6164
Spacer(modifier = Modifier.height(24.dp))

0 commit comments

Comments
 (0)