Skip to content

Commit 6f17d87

Browse files
committed
Simplify App Detail quick actions to single grid - Single grid with 3 columns, ordered by safety level - Row 1: Force Stop, Freeze, App Info (safe) - Row 2: Clear Cache, Clear Data (warning), Uninstall (danger) - Row 3: Restrict BG, Allow BG - Background status refreshes after restrict/allow actions - Remove Danger Zone section for cleaner look
1 parent 1b1c08b commit 6f17d87

File tree

2 files changed

+95
-70
lines changed

2 files changed

+95
-70
lines changed

app/src/main/java/com/appcontrolx/ui/AppDetailBottomSheet.kt

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -239,14 +239,14 @@ class AppDetailBottomSheet : BottomSheetDialogFragment() {
239239

240240
binding.btnRestrictBg.setOnClickListener {
241241
if (isForceStopOnly || isCritical) { showProtectedWarning(); return@setOnClickListener }
242-
executeActionWithLoading(getString(R.string.action_restrict_bg)) {
242+
executeBackgroundAction(getString(R.string.action_restrict_bg)) {
243243
policyManager?.restrictBackground(appInfo!!.packageName)
244244
}
245245
}
246246

247247
binding.btnAllowBg.setOnClickListener {
248248
if (isForceStopOnly || isCritical) { showProtectedWarning(); return@setOnClickListener }
249-
executeActionWithLoading(getString(R.string.action_allow_bg)) {
249+
executeBackgroundAction(getString(R.string.action_allow_bg)) {
250250
policyManager?.allowBackground(appInfo!!.packageName)
251251
}
252252
}
@@ -331,6 +331,47 @@ class AppDetailBottomSheet : BottomSheetDialogFragment() {
331331
}
332332
}
333333

334+
private fun executeBackgroundAction(actionName: String, action: suspend () -> Result<Unit>?) {
335+
if (policyManager == null) {
336+
Toast.makeText(context, R.string.error_mode_required_message, Toast.LENGTH_SHORT).show()
337+
return
338+
}
339+
340+
binding.progressBar.visibility = View.VISIBLE
341+
binding.tvActionStatus.visibility = View.VISIBLE
342+
binding.tvActionStatus.text = getString(R.string.action_processing, actionName)
343+
setButtonsEnabled(false)
344+
345+
lifecycleScope.launch {
346+
try {
347+
val result = withContext(Dispatchers.IO) { action() }
348+
if (result?.isSuccess == true) {
349+
// Refresh background status
350+
val packageName = appInfo?.packageName ?: return@launch
351+
currentBgStatus = withContext(Dispatchers.IO) {
352+
policyManager?.getBackgroundStatus(packageName) ?: BackgroundStatus.DEFAULT
353+
}
354+
updateBatteryStatusUI()
355+
356+
binding.tvActionStatus.text = getString(R.string.action_completed, actionName)
357+
binding.tvActionStatus.setTextColor(resources.getColor(R.color.status_positive, null))
358+
onActionCompleted?.invoke()
359+
setButtonsEnabled(true)
360+
} else {
361+
binding.tvActionStatus.text = getString(R.string.action_failed_name, actionName)
362+
binding.tvActionStatus.setTextColor(resources.getColor(R.color.status_negative, null))
363+
setButtonsEnabled(true)
364+
}
365+
} catch (e: Exception) {
366+
binding.tvActionStatus.text = e.message ?: getString(R.string.error_unknown)
367+
binding.tvActionStatus.setTextColor(resources.getColor(R.color.status_negative, null))
368+
setButtonsEnabled(true)
369+
} finally {
370+
binding.progressBar.visibility = View.GONE
371+
}
372+
}
373+
}
374+
334375
private fun setButtonsEnabled(enabled: Boolean) {
335376
binding.btnForceStop.isEnabled = enabled
336377
binding.btnToggleEnable.isEnabled = enabled

app/src/main/res/layout/bottom_sheet_app_detail.xml

Lines changed: 52 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -295,25 +295,26 @@
295295
android:textStyle="bold"
296296
android:textSize="14sp" />
297297

298-
<!-- Safe Actions - 3 column grid -->
298+
<!-- Actions Grid - 3 columns, ordered by safety -->
299299
<GridLayout
300300
android:layout_width="match_parent"
301301
android:layout_height="wrap_content"
302302
android:layout_marginTop="12dp"
303303
android:columnCount="3"
304304
android:useDefaultMargins="true">
305305

306+
<!-- Row 1: Force Stop, Freeze, App Info -->
306307
<com.google.android.material.button.MaterialButton
307308
android:id="@+id/btnForceStop"
308309
android:layout_width="0dp"
309310
android:layout_height="wrap_content"
310311
android:layout_columnWeight="1"
311312
android:text="@string/action_force_stop"
312-
android:textSize="11sp"
313+
android:textSize="10sp"
313314
app:icon="@drawable/ic_stop"
314-
app:iconSize="18dp"
315+
app:iconSize="20dp"
315316
app:iconGravity="top"
316-
app:iconPadding="4dp"
317+
app:iconPadding="2dp"
317318
style="@style/Widget.Material3.Button.TonalButton" />
318319

319320
<com.google.android.material.button.MaterialButton
@@ -322,113 +323,96 @@
322323
android:layout_height="wrap_content"
323324
android:layout_columnWeight="1"
324325
android:text="@string/action_freeze"
325-
android:textSize="11sp"
326+
android:textSize="10sp"
326327
app:icon="@drawable/ic_freeze"
327-
app:iconSize="18dp"
328+
app:iconSize="20dp"
328329
app:iconGravity="top"
329-
app:iconPadding="4dp"
330+
app:iconPadding="2dp"
330331
style="@style/Widget.Material3.Button.TonalButton" />
331332

332333
<com.google.android.material.button.MaterialButton
333-
android:id="@+id/btnRestrictBg"
334+
android:id="@+id/btnOpenSettings"
334335
android:layout_width="0dp"
335336
android:layout_height="wrap_content"
336337
android:layout_columnWeight="1"
337-
android:text="@string/action_restrict_bg"
338-
android:textSize="11sp"
339-
app:icon="@drawable/ic_battery_alert"
340-
app:iconSize="18dp"
338+
android:text="@string/btn_info"
339+
android:textSize="10sp"
340+
app:icon="@drawable/ic_info"
341+
app:iconSize="20dp"
341342
app:iconGravity="top"
342-
app:iconPadding="4dp"
343+
app:iconPadding="2dp"
343344
style="@style/Widget.Material3.Button.TonalButton" />
344345

346+
<!-- Row 2: Clear Cache, Clear Data, Uninstall -->
345347
<com.google.android.material.button.MaterialButton
346-
android:id="@+id/btnAllowBg"
348+
android:id="@+id/btnClearCache"
347349
android:layout_width="0dp"
348350
android:layout_height="wrap_content"
349351
android:layout_columnWeight="1"
350-
android:text="@string/action_allow_bg"
351-
android:textSize="11sp"
352-
app:icon="@drawable/ic_check_circle"
353-
app:iconSize="18dp"
352+
android:text="@string/action_clear_cache"
353+
android:textSize="10sp"
354+
app:icon="@drawable/ic_cleaning"
355+
app:iconSize="20dp"
354356
app:iconGravity="top"
355-
app:iconPadding="4dp"
357+
app:iconPadding="2dp"
356358
style="@style/Widget.Material3.Button.TonalButton" />
357359

358360
<com.google.android.material.button.MaterialButton
359-
android:id="@+id/btnClearCache"
361+
android:id="@+id/btnClearData"
360362
android:layout_width="0dp"
361363
android:layout_height="wrap_content"
362364
android:layout_columnWeight="1"
363-
android:text="@string/action_clear_cache"
364-
android:textSize="11sp"
365-
app:icon="@drawable/ic_cleaning"
366-
app:iconSize="18dp"
365+
android:text="@string/action_clear_data"
366+
android:textSize="10sp"
367+
android:textColor="@color/warning_color"
368+
app:icon="@drawable/ic_delete_sweep"
369+
app:iconSize="20dp"
367370
app:iconGravity="top"
368-
app:iconPadding="4dp"
371+
app:iconPadding="2dp"
372+
app:iconTint="@color/warning_color"
369373
style="@style/Widget.Material3.Button.TonalButton" />
370374

371375
<com.google.android.material.button.MaterialButton
372-
android:id="@+id/btnOpenSettings"
376+
android:id="@+id/btnUninstall"
373377
android:layout_width="0dp"
374378
android:layout_height="wrap_content"
375379
android:layout_columnWeight="1"
376-
android:text="@string/btn_info"
377-
android:textSize="11sp"
378-
app:icon="@drawable/ic_info"
379-
app:iconSize="18dp"
380+
android:text="@string/action_uninstall"
381+
android:textSize="10sp"
382+
android:textColor="@color/status_negative"
383+
app:icon="@drawable/ic_delete"
384+
app:iconSize="20dp"
380385
app:iconGravity="top"
381-
app:iconPadding="4dp"
386+
app:iconPadding="2dp"
387+
app:iconTint="@color/status_negative"
382388
style="@style/Widget.Material3.Button.TonalButton" />
383389

384-
</GridLayout>
385-
386-
<!-- Danger Actions -->
387-
<TextView
388-
android:layout_width="wrap_content"
389-
android:layout_height="wrap_content"
390-
android:layout_marginTop="16dp"
391-
android:text="@string/action_danger_zone"
392-
android:textStyle="bold"
393-
android:textSize="12sp"
394-
android:textColor="@color/status_negative" />
395-
396-
<GridLayout
397-
android:layout_width="match_parent"
398-
android:layout_height="wrap_content"
399-
android:layout_marginTop="8dp"
400-
android:columnCount="3"
401-
android:useDefaultMargins="true">
402-
390+
<!-- Row 3: Restrict BG, Allow BG -->
403391
<com.google.android.material.button.MaterialButton
404-
android:id="@+id/btnClearData"
392+
android:id="@+id/btnRestrictBg"
405393
android:layout_width="0dp"
406394
android:layout_height="wrap_content"
407395
android:layout_columnWeight="1"
408-
android:text="@string/action_clear_data"
409-
android:textSize="11sp"
410-
android:textColor="@color/status_negative"
411-
app:icon="@drawable/ic_delete_sweep"
412-
app:iconSize="18dp"
396+
android:text="@string/action_restrict_bg"
397+
android:textSize="10sp"
398+
app:icon="@drawable/ic_battery_alert"
399+
app:iconSize="20dp"
413400
app:iconGravity="top"
414-
app:iconPadding="4dp"
415-
app:iconTint="@color/status_negative"
416-
style="@style/Widget.Material3.Button.OutlinedButton" />
401+
app:iconPadding="2dp"
402+
style="@style/Widget.Material3.Button.TonalButton" />
417403

418404
<com.google.android.material.button.MaterialButton
419-
android:id="@+id/btnUninstall"
405+
android:id="@+id/btnAllowBg"
420406
android:layout_width="0dp"
421407
android:layout_height="wrap_content"
422408
android:layout_columnWeight="1"
423-
android:text="@string/action_uninstall"
424-
android:textSize="11sp"
425-
android:textColor="@color/status_negative"
426-
app:icon="@drawable/ic_delete"
427-
app:iconSize="18dp"
409+
android:text="@string/action_allow_bg"
410+
android:textSize="10sp"
411+
app:icon="@drawable/ic_check_circle"
412+
app:iconSize="20dp"
428413
app:iconGravity="top"
429-
app:iconPadding="4dp"
430-
app:iconTint="@color/status_negative"
431-
style="@style/Widget.Material3.Button.OutlinedButton" />
414+
app:iconPadding="2dp"
415+
style="@style/Widget.Material3.Button.TonalButton" />
432416

433417
</GridLayout>
434418
</LinearLayout>

0 commit comments

Comments
 (0)