Skip to content

Commit b3e757a

Browse files
committed
Added setting for Alarm Frequency
1 parent 2a37a57 commit b3e757a

File tree

5 files changed

+72
-4
lines changed

5 files changed

+72
-4
lines changed

app/src/main/java/com/apkupdater/ui/component/Icons.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ fun IgnoreIcon(ignored: Boolean, onClick: () -> Unit, modifier: Modifier = Modif
7676
painter = painterResource(
7777
id = if(ignored) R.drawable.ic_visible_off else R.drawable.ic_visible
7878
),
79-
contentDescription = stringResource(R.string.ignored_cd),
79+
contentDescription = stringResource(if (ignored) R.string.unignore_cd else R.string.ignore_cd),
8080
modifier = Modifier.clickableNoRipple(onClick).then(modifier)
8181
)
8282

app/src/main/java/com/apkupdater/ui/component/Settings.kt

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,11 @@ import androidx.compose.foundation.layout.fillMaxWidth
66
import androidx.compose.foundation.layout.height
77
import androidx.compose.foundation.layout.padding
88
import androidx.compose.foundation.layout.width
9+
import androidx.compose.material3.DropdownMenuItem
10+
import androidx.compose.material3.ExperimentalMaterial3Api
11+
import androidx.compose.material3.ExposedDropdownMenuBox
12+
import androidx.compose.material3.ExposedDropdownMenuDefaults
13+
import androidx.compose.material3.OutlinedTextField
914
import androidx.compose.material3.Slider
1015
import androidx.compose.material3.Switch
1116
import androidx.compose.material3.Text
@@ -63,3 +68,45 @@ fun SwitchSetting(
6368
modifier = Modifier.align(Alignment.CenterEnd)
6469
)
6570
}
71+
72+
@OptIn(ExperimentalMaterial3Api::class)
73+
@Composable
74+
fun DropDownSetting(
75+
text: String,
76+
options: List<String>,
77+
getValue: () -> Int,
78+
setValue: (Int) -> Unit
79+
) = Box(Modifier.padding(16.dp).fillMaxWidth()) {
80+
var expanded by remember { mutableStateOf(false) }
81+
var selectedOptionText by remember { mutableStateOf(options[getValue()]) }
82+
83+
Text(text, modifier = Modifier.align(Alignment.CenterStart))
84+
ExposedDropdownMenuBox(
85+
expanded = expanded,
86+
onExpandedChange = { expanded = !expanded },
87+
modifier = Modifier.align(Alignment.CenterEnd).width(150.dp)
88+
) {
89+
OutlinedTextField(
90+
readOnly = true,
91+
value = selectedOptionText,
92+
onValueChange = { setValue(options.indexOf(it)) },
93+
modifier = Modifier.menuAnchor(),
94+
trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) },
95+
colors = ExposedDropdownMenuDefaults.textFieldColors()
96+
)
97+
ExposedDropdownMenu(
98+
expanded = expanded,
99+
onDismissRequest = { expanded = false }
100+
) {
101+
options.forEach { option ->
102+
DropdownMenuItem(
103+
text = { Text(text = option) },
104+
onClick = {
105+
selectedOptionText = option
106+
expanded = false
107+
}
108+
)
109+
}
110+
}
111+
}
112+
}

app/src/main/java/com/apkupdater/ui/screen/SettingsScreen.kt

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import androidx.compose.ui.Modifier
1515
import androidx.compose.ui.res.stringResource
1616
import androidx.compose.ui.unit.dp
1717
import com.apkupdater.R
18+
import com.apkupdater.ui.component.DropDownSetting
1819
import com.apkupdater.ui.component.SliderSetting
1920
import com.apkupdater.ui.component.SwitchSetting
2021
import com.apkupdater.ui.component.TitleText
@@ -95,7 +96,16 @@ fun SettingsScreen(viewModel: SettingsViewModel = koinViewModel()) = Column {
9596
valueRange = 0f..23f,
9697
steps = 23
9798
)
98-
Text("Alarm Frequency Daily", Modifier.padding(start = 16.dp, end = 16.dp, bottom = 16.dp))
99+
DropDownSetting(
100+
"Frequency",
101+
listOf(
102+
stringResource(R.string.settings_alarm_daily),
103+
stringResource(R.string.settings_alarm_3day),
104+
stringResource(R.string.settings_alarm_weekly)
105+
),
106+
{ viewModel.getAlarmFrequency() },
107+
{ viewModel.setAlarmFrequency(it) }
108+
)
99109
}
100110
}
101111
}

app/src/main/java/com/apkupdater/worker/UpdatesWorker.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,18 @@ class UpdatesWorker(
2626
fun cancel(workManager: WorkManager) = workManager.cancelUniqueWork(TAG)
2727

2828
fun launch(workManager: WorkManager) {
29-
val request = PeriodicWorkRequestBuilder<UpdatesWorker>(1L, TimeUnit.DAYS)
29+
val request = PeriodicWorkRequestBuilder<UpdatesWorker>(getDays(), TimeUnit.DAYS)
3030
.setInitialDelay(millisUntilHour(prefs.alarmHour.get()), TimeUnit.MILLISECONDS)
3131
.build()
3232
workManager.enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.UPDATE, request)
3333
}
34+
35+
private fun getDays() = when(prefs.alarmFrequency.get()) {
36+
0 -> 1L
37+
1 -> 3L
38+
2 -> 7L
39+
else -> 1L
40+
}
3441
}
3542

3643
private val updatesRepository: UpdatesRepository by inject()

app/src/main/res/values/strings.xml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
<string name="tab_updates">Updates</string>
77
<string name="tab_settings">Settings</string>
88
<string name="something_went_wrong">"Something went wrong\n\uD83E\uDD26"</string>
9-
<string name="ignored_cd">Ignore App</string>
9+
<string name="ignore_cd">Ignore App</string>
10+
<string name="unignore_cd">Unignore App</string>
1011
<string name="refresh_apps">Refresh App List</string>
1112
<string name="refresh_updates">Look for Updates</string>
1213
<string name="exclude_system_apps">Exclude System Apps</string>
@@ -26,6 +27,9 @@
2627
<string name="settings_alarm">Alarm</string>
2728
<string name="settings_options">Options</string>
2829
<string name="settings_hour">Alarm Hour</string>
30+
<string name="settings_alarm_daily">Daily</string>
31+
<string name="settings_alarm_3day">3-Day</string>
32+
<string name="settings_alarm_weekly">Weekly</string>
2933
<string name="ignore_alpha">Ignore Alpha</string>
3034
<string name="ignore_beta">Ignore Beta</string>
3135
<string name="source_apkmirror">ApkMirror</string>

0 commit comments

Comments
 (0)