diff --git a/CLAUDE.md b/CLAUDE.md index af7de61..5081c3a 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -169,6 +169,34 @@ live-size data behind the reference slice. --- +## Theming (colors) — mandatory for all UI + +The app supports light and dark via `DayNight` (toggle in `MainActivity`), but most +screens historically hardcoded dark-tuned hex, so the light theme is broken wherever +that happens. We are migrating to one semantic colour-token system, screen by screen +(refactor-by-feature). + +Rules for any new or migrated UI: + +1. **No hardcoded colours.** No `#RRGGBB` in layouts and no `Color.parseColor("#…")` + / `Color.WHITE` etc. in code. Reference a semantic token instead: + `@color/` in XML, `ContextCompat.getColor(ctx, R.color.)` in code. +2. **Every token has a light value in `values/colors.xml` and a dark twin in + `values-night/colors.xml`.** If you add a token, add both. +3. **Use the semantic families**: surfaces (`surface_background`, `surface_card`, + `surface_section`), text (`text_primary`, `text_secondary`, `text_disabled`, + `text_on_accent`), `accent`/`accent_muted`, status + (`status_success/warning/danger/info`), `divider_line`, and data-viz + (`chart_storage/ram/swap/os/maps/wiki/track`). Pick by role, not by look. +4. **Legitimately fixed colours stay fixed:** a QR must be black/white to scan, so + `qr_foreground`/`qr_background` are mode-independent (no `-night` override). +5. **Verify both modes** on a device before merge. + +Legacy tokens (`dash_*`, `white`, `black`, `section_*`, `btn_*`) are retired as screens +migrate. Reference migration: the Dashboard (`fragment_dashboard` + `DashboardFragment`). + +--- + ## Tech-debt watch list (controller) — opportunistic targets Evident debt noticed while building the pilot. Chip away at these **only when diff --git a/controller/app/src/main/java/org/iiab/controller/DashboardFragment.java b/controller/app/src/main/java/org/iiab/controller/DashboardFragment.java index 17fa200..cecabb5 100644 --- a/controller/app/src/main/java/org/iiab/controller/DashboardFragment.java +++ b/controller/app/src/main/java/org/iiab/controller/DashboardFragment.java @@ -283,8 +283,8 @@ private void updateSystemStats() { int baseColorSwap = ContextCompat.getColor(requireContext(), R.color.dash_bar_swap); int baseColorStorage = ContextCompat.getColor(requireContext(), R.color.dash_bar_storage); - int warnColor = Color.parseColor("#FF9800"); // Orange - int dangerColor = Color.parseColor("#F44336"); // Red + int warnColor = ContextCompat.getColor(requireContext(), R.color.status_warning); // Orange + int dangerColor = ContextCompat.getColor(requireContext(), R.color.status_danger); // Red // RAM Gauge (Warning at 90%, Danger at 95%) int finalColorRam = memProgress >= 95 ? dangerColor : (memProgress >= 90 ? warnColor : baseColorRam); @@ -344,9 +344,9 @@ private void updateSystemStats() { if (batLevel <= 33) { colorBattery = warnColor; // Orange (1-33%) } else if (batLevel <= 66) { - colorBattery = Color.parseColor("#4CAF50"); // Green (34-66%) + colorBattery = ContextCompat.getColor(requireContext(), R.color.status_success); // Green (34-66%) } else { - colorBattery = Color.parseColor("#2196F3"); // Blue (67-100%) + colorBattery = ContextCompat.getColor(requireContext(), R.color.status_info); // Blue (67-100%) } // Update the gauge with the newly assigned 4-parameter method diff --git a/controller/app/src/main/java/org/iiab/controller/DeployFragment.java b/controller/app/src/main/java/org/iiab/controller/DeployFragment.java index c93dfd2..fc41dc2 100644 --- a/controller/app/src/main/java/org/iiab/controller/DeployFragment.java +++ b/controller/app/src/main/java/org/iiab/controller/DeployFragment.java @@ -211,16 +211,16 @@ public void onReceive(Context context, Intent intent) { if ("256".equals(rawPpkValue) || "512".equals(rawPpkValue) || "1024".equals(rawPpkValue)) { ledPpk.setBackgroundResource(R.drawable.led_on_green); } else if ("error".equals(rawPpkValue) || rawPpkValue == null || rawPpkValue.isEmpty()) { - ledPpk.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#FFC107"))); + ledPpk.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_pending))); } else { - ledPpk.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#2196F3"))); + ledPpk.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_info))); } if ("0".equals(cpValue) || "false".equals(cpValue)) { ledDcpr.setBackgroundResource(R.drawable.led_on_green); txtDcpr.setText(android.text.Html.fromHtml(getString(R.string.adb_cp_disabled_ok), android.text.Html.FROM_HTML_MODE_COMPACT)); } else if ("1".equals(cpValue) || "true".equals(cpValue) || "null".equals(cpValue) || cpValue == null) { - ledDcpr.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#F44336"))); + ledDcpr.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_danger))); txtDcpr.setText(android.text.Html.fromHtml(getString(R.string.adb_cp_enabled_limiting), android.text.Html.FROM_HTML_MODE_COMPACT)); } else { txtDcpr.setText(android.text.Html.fromHtml(getString(R.string.adb_cp_unknown), android.text.Html.FROM_HTML_MODE_COMPACT)); @@ -233,9 +233,9 @@ public void onReceive(Context context, Intent intent) { if ("256".equals(rawPpkValue) || "512".equals(rawPpkValue) || "1024".equals(rawPpkValue)) { ledPpk.setBackgroundResource(R.drawable.led_on_green); } else if ("error".equals(rawPpkValue) || rawPpkValue == null || rawPpkValue.isEmpty()) { - ledPpk.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#F44336"))); + ledPpk.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_danger))); } else { - ledPpk.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#FFC107"))); + ledPpk.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_pending))); } } } @@ -312,7 +312,7 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat // Initial States btnLaunchInstall.setEnabled(false); btnLaunchInstall.setAlpha(0.5f); - btnKiwixSettings.setColorFilter(Color.parseColor("#555555")); + btnKiwixSettings.setColorFilter(ContextCompat.getColor(requireContext(), R.color.text_secondary)); btnFastInstall.setAlpha(0.4f); // Handlers @@ -423,7 +423,7 @@ private void focusAdvancedMonitoring() { android.animation.ArgbEvaluator evaluator = new android.animation.ArgbEvaluator(); android.animation.ObjectAnimator animator = android.animation.ObjectAnimator.ofObject( txtAdvMonitoringTitle, "textColor", evaluator, - Color.RED, ContextCompat.getColor(requireContext(), R.color.dash_text_primary) + ContextCompat.getColor(requireContext(), R.color.status_danger), ContextCompat.getColor(requireContext(), R.color.dash_text_primary) ); animator.setDuration(400); animator.setRepeatCount(5); @@ -577,7 +577,7 @@ private void updateDynamicButtons() { if (btnRefreshModules != null) { btnRefreshModules.setEnabled(true); if (isServerRunning || !isProotInstalled) { - btnRefreshModules.setTextColor(Color.parseColor("#9E9E9E")); + btnRefreshModules.setTextColor(ContextCompat.getColor(requireContext(), R.color.text_disabled)); btnRefreshModules.setAlpha(0.6f); btnRefreshModules.setOnClickListener(v -> { if (!isProotInstalled) @@ -586,7 +586,7 @@ else if (isServerRunning) Snackbar.make(v, R.string.install_msg_server_running_lock, Snackbar.LENGTH_LONG).show(); }); } else { - btnRefreshModules.setTextColor(Color.parseColor("#2196F3")); + btnRefreshModules.setTextColor(ContextCompat.getColor(requireContext(), R.color.status_info)); btnRefreshModules.setAlpha(1.0f); btnRefreshModules.setOnClickListener(v -> { v.setAlpha(0.5f); @@ -689,20 +689,20 @@ private void setupPlannerListeners() { rootfsViewModel.state().observe(getViewLifecycleOwner(), this::onRootfsSizeResolved); btnTierBasic.setAlpha(0.5f); - btnTierBasic.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#008000"))); + btnTierBasic.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_success))); btnTierStandard.setAlpha(0.5f); - btnTierStandard.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#333333"))); + btnTierStandard.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.btn_neutral))); btnTierFull.setAlpha(0.5f); - btnTierFull.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#333333"))); + btnTierFull.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.btn_neutral))); View.OnClickListener tierClickListener = v -> { btnTierBasic.setAlpha(1.0f); btnTierStandard.setAlpha(1.0f); btnTierFull.setAlpha(1.0f); - btnTierBasic.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#333333"))); - btnTierStandard.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#333333"))); - btnTierFull.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#333333"))); - v.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#008000"))); + btnTierBasic.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.btn_neutral))); + btnTierStandard.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.btn_neutral))); + btnTierFull.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.btn_neutral))); + v.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_success))); if (v.getId() == R.id.btn_tier_basic) selectedTier = InstallationPlanner.Tier.BASIC; else if (v.getId() == R.id.btn_tier_standard) @@ -820,7 +820,7 @@ public void onCalculated(InstallationPlanner.StorageProjection projection) { // Normal logic for 64-bit if (chkCompanionData.isChecked()) { lblWiki.setText(getString(R.string.install_legend_wiki_lang, projection.resolvedLang.toUpperCase())); - lblWiki.setTextColor(Color.parseColor("#2196F3")); + lblWiki.setTextColor(ContextCompat.getColor(requireContext(), R.color.status_info)); } else { lblWiki.setText(getString(R.string.install_legend_wiki_plain)); lblWiki.setTextColor(ContextCompat.getColor(requireContext(), R.color.dash_text_secondary)); @@ -833,7 +833,7 @@ public void onCalculated(InstallationPlanner.StorageProjection projection) { txtLegendFree.setTextColor(ContextCompat.getColor(requireContext(), R.color.dash_text_inverted)); } else { txtLegendFree.setText("OVERLOAD"); - txtLegendFree.setTextColor(Color.parseColor("#F44336")); + txtLegendFree.setTextColor(ContextCompat.getColor(requireContext(), R.color.status_danger)); } } @@ -847,25 +847,25 @@ public void onCalculated(InstallationPlanner.StorageProjection projection) { if (otherUsedPct > 0) { float draw = Math.min(otherUsedPct, 100f - totalDrawn); - segments.add(new MultiResourceGaugeView.Segment(draw, Color.WHITE)); + segments.add(new MultiResourceGaugeView.Segment(draw, ContextCompat.getColor(requireContext(), R.color.chart_track))); totalDrawn += draw; } if (osPct > 0 && totalDrawn < 100f) { float draw = Math.min(osPct, 100f - totalDrawn); - segments.add(new MultiResourceGaugeView.Segment(draw, Color.parseColor("#00FFFF"))); + segments.add(new MultiResourceGaugeView.Segment(draw, ContextCompat.getColor(requireContext(), R.color.chart_os))); totalDrawn += draw; } if (mapsPct > 0 && totalDrawn < 100f) { float draw = Math.min(mapsPct, 100f - totalDrawn); - segments.add(new MultiResourceGaugeView.Segment(draw, Color.parseColor("#FF9800"))); + segments.add(new MultiResourceGaugeView.Segment(draw, ContextCompat.getColor(requireContext(), R.color.chart_maps))); totalDrawn += draw; } if (kiwixPct > 0 && totalDrawn < 100f) { float draw = Math.min(kiwixPct, 100f - totalDrawn); - segments.add(new MultiResourceGaugeView.Segment(draw, Color.parseColor("#008000"))); + segments.add(new MultiResourceGaugeView.Segment(draw, ContextCompat.getColor(requireContext(), R.color.chart_wiki))); } - int centerColor = (selectedTier == null || isStorageSafe) ? ContextCompat.getColor(requireContext(), R.color.dash_text_inverted) : Color.parseColor("#F44336"); + int centerColor = (selectedTier == null || isStorageSafe) ? ContextCompat.getColor(requireContext(), R.color.dash_text_inverted) : ContextCompat.getColor(requireContext(), R.color.status_danger); storageGauge.updateData(segments, String.format(java.util.Locale.US, "%.1fG", pTotal), centerColor, "Projected", "Storage"); } @@ -1692,14 +1692,14 @@ private void verifyInstallationState(JSONObject jsonVars) { card.setOnClickListener(v -> Snackbar.make(v, R.string.install_msg_confirmed, Snackbar.LENGTH_LONG).show()); } else { led.setBackgroundResource(R.drawable.led_on_green); - led.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#9C27B0"))); + led.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.accent_secondary))); card.setOnClickListener(v -> Snackbar.make(v, R.string.install_msg_offline_trusted, Snackbar.LENGTH_LONG).show()); } } else if (finalDiscrepancyFlag) { checkBox.setVisibility(View.GONE); led.setVisibility(View.VISIBLE); led.setBackgroundResource(R.drawable.led_off); - led.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#FFC107"))); + led.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_pending))); card.setOnClickListener(v -> Snackbar.make(v, R.string.install_warning_discrepancy_msg, Snackbar.LENGTH_LONG).show()); } else { led.setVisibility(View.GONE); @@ -1713,7 +1713,7 @@ private void verifyInstallationState(JSONObject jsonVars) { } else { checkBox.setEnabled(true); card.setAlpha(1.0f); - checkBox.setButtonTintList(ColorStateList.valueOf(Color.WHITE)); + checkBox.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.text_primary))); card.setOnClickListener(v -> checkBox.toggle()); } @@ -1905,7 +1905,7 @@ private void bindBackupButtonLogic(MainActivity mainAct, File backupsDir, File i // 1. We load the native icon android.graphics.drawable.Drawable importIcon = ContextCompat.getDrawable(requireContext(), android.R.drawable.stat_sys_download); if (importIcon != null) { - importIcon.setTint(Color.parseColor("#66BB6A")); + importIcon.setTint(ContextCompat.getColor(requireContext(), R.color.status_success)); btnImportBackup.setCompoundDrawablesWithIntrinsicBounds(importIcon, null, null, null); btnImportBackup.setCompoundDrawablePadding(24); @@ -1942,7 +1942,7 @@ private void bindBackupMenuLogic(File backupsDir) { if (backups == null || backups.length == 0) { TextView noBackups = new TextView(requireContext()); noBackups.setText(getString(R.string.install_msg_no_backups)); - noBackups.setTextColor(Color.parseColor("#FF5555")); + noBackups.setTextColor(ContextCompat.getColor(requireContext(), R.color.status_danger)); containerBackupList.addView(noBackups); } else { java.util.Arrays.sort(backups, (f1, f2) -> Long.compare(f2.lastModified(), f1.lastModified())); @@ -1968,7 +1968,7 @@ private void bindBackupMenuLogic(File backupsDir) { // Apply subtle alternating background color if (isEvenRow) { - row.setBackgroundColor(Color.parseColor("#11ffffff")); // Slightly lighter + row.setBackgroundColor(ContextCompat.getColor(requireContext(), R.color.surface_section)); // Slightly lighter } else { row.setBackgroundColor(Color.TRANSPARENT); // Normal dark } @@ -2007,7 +2007,7 @@ private void bindBackupMenuLogic(File backupsDir) { android.widget.ImageButton btnExport = new android.widget.ImageButton(requireContext()); btnExport.setImageResource(android.R.drawable.stat_sys_upload); btnExport.setBackgroundColor(Color.TRANSPARENT); - btnExport.setColorFilter(Color.parseColor("#66BB6A")); + btnExport.setColorFilter(ContextCompat.getColor(requireContext(), R.color.status_success)); btnExport.setPadding(iconPadding, iconPadding, iconPadding, iconPadding); btnExport.setOnClickListener(btn -> { @@ -2023,7 +2023,7 @@ private void bindBackupMenuLogic(File backupsDir) { android.widget.ImageButton btnDelete = new android.widget.ImageButton(requireContext()); btnDelete.setImageResource(android.R.drawable.ic_menu_close_clear_cancel); btnDelete.setBackgroundColor(Color.TRANSPARENT); - btnDelete.setColorFilter(Color.parseColor("#F44336")); + btnDelete.setColorFilter(ContextCompat.getColor(requireContext(), R.color.status_danger)); btnDelete.setPadding(iconPadding, iconPadding, iconPadding, iconPadding); btnDelete.setOnClickListener(btn -> { @@ -2303,9 +2303,9 @@ private void updateUiState(boolean isConnected) { if (isConnected) { ledAdbStatus.setBackgroundResource(R.drawable.led_on_green); txtAdbLedLabel.setText(getString(R.string.adb_status_connected)); - txtAdbLedLabel.setTextColor(Color.parseColor("#4CAF50")); + txtAdbLedLabel.setTextColor(ContextCompat.getColor(requireContext(), R.color.status_success)); btnAdbAction.setText(getString(R.string.adb_btn_disconnect)); - btnAdbAction.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#F44336"))); + btnAdbAction.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_danger))); txtDcpr.setText(android.text.Html.fromHtml(getString(R.string.adb_ui_checking_cp), android.text.Html.FROM_HTML_MODE_COMPACT)); txtPpk.setText(android.text.Html.fromHtml(getString(R.string.adb_ui_checking_ppk), android.text.Html.FROM_HTML_MODE_COMPACT)); @@ -2318,7 +2318,7 @@ private void updateUiState(boolean isConnected) { txtAdbLedLabel.setText(getString(R.string.adb_status_offline)); txtAdbLedLabel.setTextColor(ContextCompat.getColor(requireContext(), R.color.dash_text_secondary)); btnAdbAction.setText(getString(R.string.adb_btn_connect)); - btnAdbAction.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#2196F3"))); + btnAdbAction.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_info))); txtDcpr.setText(getString(R.string.adb_ui_unknown_cp)); txtPpk.setText(getString(R.string.adb_ui_unknown_ppk)); @@ -2559,7 +2559,7 @@ private void setupCpuChart() { XAxis xAxis = cpuChart.getXAxis(); xAxis.setDrawLabels(false); xAxis.setDrawGridLines(true); - xAxis.setGridColor(Color.parseColor("#333333")); + xAxis.setGridColor(ContextCompat.getColor(requireContext(), R.color.divider_line)); xAxis.setPosition(XAxis.XAxisPosition.BOTTOM); YAxis leftAxis = cpuChart.getAxisLeft(); @@ -2567,7 +2567,7 @@ private void setupCpuChart() { leftAxis.setAxisMaximum(100f); leftAxis.setAxisMinimum(0f); leftAxis.setDrawGridLines(true); - leftAxis.setGridColor(Color.parseColor("#333333")); + leftAxis.setGridColor(ContextCompat.getColor(requireContext(), R.color.divider_line)); cpuChart.getAxisRight().setEnabled(false); cpuChart.setData(new LineData()); @@ -2581,13 +2581,13 @@ private void addCpuEntry(float cpuPercentage) { if (set == null) { LineDataSet newSet = new LineDataSet(null, "CPU"); newSet.setAxisDependency(YAxis.AxisDependency.LEFT); - newSet.setColor(Color.parseColor("#4CAF50")); + newSet.setColor(ContextCompat.getColor(requireContext(), R.color.accent)); newSet.setLineWidth(2f); newSet.setDrawCircles(false); newSet.setDrawValues(false); newSet.setMode(LineDataSet.Mode.CUBIC_BEZIER); newSet.setDrawFilled(true); - newSet.setFillColor(Color.parseColor("#4CAF50")); + newSet.setFillColor(ContextCompat.getColor(requireContext(), R.color.accent)); newSet.setFillAlpha(50); set = newSet; data.addDataSet(set); @@ -2765,7 +2765,7 @@ private void checkInternetAccess() { ledInternet.setBackgroundTintList(null); } else { ledInternet.setBackgroundResource(R.drawable.led_off); - ledInternet.setBackgroundTintList(ColorStateList.valueOf(Color.parseColor("#F44336"))); + ledInternet.setBackgroundTintList(ColorStateList.valueOf(ContextCompat.getColor(requireContext(), R.color.status_danger))); } } }); diff --git a/controller/app/src/main/java/org/iiab/controller/ResourceGaugeView.java b/controller/app/src/main/java/org/iiab/controller/ResourceGaugeView.java index cc507cc..01c3044 100644 --- a/controller/app/src/main/java/org/iiab/controller/ResourceGaugeView.java +++ b/controller/app/src/main/java/org/iiab/controller/ResourceGaugeView.java @@ -11,7 +11,6 @@ import android.animation.ValueAnimator; import android.content.Context; import android.graphics.Canvas; -import android.graphics.Color; import android.graphics.Paint; import android.graphics.RectF; import android.graphics.Typeface; @@ -30,7 +29,7 @@ public class ResourceGaugeView extends View { private String centerText = "0%"; private String bottomText = "-- / --"; - private int currentColor = Color.parseColor("#4CAF50"); + private int currentColor; public ResourceGaugeView(Context context, AttributeSet attrs) { super(context, attrs); @@ -40,10 +39,11 @@ public ResourceGaugeView(Context context, AttributeSet attrs) { private void init(Context context) { setLayerType(View.LAYER_TYPE_SOFTWARE, null); rectF = new RectF(); + currentColor = androidx.core.content.ContextCompat.getColor(context, R.color.status_success); bgArcPaint = new Paint(Paint.ANTI_ALIAS_FLAG); bgArcPaint.setStyle(Paint.Style.STROKE); - bgArcPaint.setColor(Color.parseColor("#333333")); + bgArcPaint.setColor(androidx.core.content.ContextCompat.getColor(context, R.color.chart_track)); bgArcPaint.setStrokeCap(Paint.Cap.ROUND); bgArcPaint.setPathEffect(null); @@ -57,16 +57,16 @@ private void init(Context context) { percentPaint = new Paint(Paint.ANTI_ALIAS_FLAG); percentPaint.setTextAlign(Paint.Align.CENTER); - percentPaint.setColor(androidx.core.content.ContextCompat.getColor(context, R.color.dash_text_inverted)); + percentPaint.setColor(androidx.core.content.ContextCompat.getColor(context, R.color.text_primary)); percentPaint.setFakeBoldText(true); valuePaint = new Paint(Paint.ANTI_ALIAS_FLAG); valuePaint.setTextAlign(Paint.Align.CENTER); - valuePaint.setColor(Color.parseColor("#AAAAAA")); + valuePaint.setColor(androidx.core.content.ContextCompat.getColor(context, R.color.text_secondary)); titlePaint = new Paint(Paint.ANTI_ALIAS_FLAG); titlePaint.setTextAlign(Paint.Align.CENTER); - titlePaint.setColor(Color.parseColor("#CCCCCC")); + titlePaint.setColor(androidx.core.content.ContextCompat.getColor(context, R.color.text_secondary)); titlePaint.setFakeBoldText(true); // LOAD AND APPLY ORBITRON diff --git a/controller/app/src/main/res/layout/dialog_install_planner_settings.xml b/controller/app/src/main/res/layout/dialog_install_planner_settings.xml index d0ba993..8c644f2 100644 --- a/controller/app/src/main/res/layout/dialog_install_planner_settings.xml +++ b/controller/app/src/main/res/layout/dialog_install_planner_settings.xml @@ -60,10 +60,10 @@ android:layout_weight="1" android:layout_marginEnd="8dp" android:text="@string/kiwix_dialog_wipe_cache" - android:textColor="#FFFFFF" + android:textColor="@color/text_on_accent" android:textAllCaps="false" android:background="@drawable/rounded_button" - android:backgroundTint="#0000FF" /> + android:backgroundTint="@color/status_info" />