Skip to content

Commit 4c1cbf0

Browse files
author
LeanBitLab
committed
Fix slider visual bug and add Light Theme toggle
1 parent 992f5c8 commit 4c1cbf0

7 files changed

Lines changed: 109 additions & 10 deletions

File tree

app/src/main/java/com/leanbitlab/lwidget/AwidgetProvider.kt

Lines changed: 30 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -107,24 +107,48 @@ class AwidgetProvider : AppWidgetProvider() {
107107
val sizeEvents = prefs.getFloat("size_events", 14f)
108108

109109
val showOutline = prefs.getBoolean("show_outline", false)
110+
val useLightTheme = prefs.getBoolean("use_light_theme", false)
110111

111-
// --- Apply Outline ---
112-
views.setInt(R.id.widget_root, "setBackgroundResource", if (showOutline) R.drawable.background_glow else R.drawable.background_dark)
112+
// --- Theme Setup ---
113+
val bgRes = if (useLightTheme) {
114+
if (showOutline) R.drawable.background_glow_light else R.drawable.background_light
115+
} else {
116+
if (showOutline) R.drawable.background_glow else R.drawable.background_dark
117+
}
118+
119+
val primaryColor = if (useLightTheme) {
120+
context.getColor(R.color.widget_text_light)
121+
} else {
122+
android.graphics.Color.WHITE
123+
}
124+
125+
val secondaryColor = if (useLightTheme) {
126+
context.getColor(R.color.widget_text_secondary_light)
127+
} else {
128+
android.graphics.Color.parseColor("#CCFFFFFF")
129+
}
130+
131+
// --- Apply Outline / Background ---
132+
views.setInt(R.id.widget_root, "setBackgroundResource", bgRes)
113133

114134
// --- Apply Time ---
115135
views.setViewVisibility(R.id.clock_time, if (showTime) android.view.View.VISIBLE else android.view.View.GONE)
116136
views.setTextViewTextSize(R.id.clock_time, android.util.TypedValue.COMPLEX_UNIT_SP, sizeTime)
137+
views.setTextColor(R.id.clock_time, primaryColor)
117138

118139
// --- Apply Date ---
119140
views.setViewVisibility(R.id.clock_date, if (showDate) android.view.View.VISIBLE else android.view.View.GONE)
120-
views.setTextViewTextSize(R.id.clock_date, android.util.TypedValue.COMPLEX_UNIT_SP, sizeDate) // Using prefs default 18f or saved
141+
views.setTextViewTextSize(R.id.clock_date, android.util.TypedValue.COMPLEX_UNIT_SP, sizeDate)
142+
views.setTextColor(R.id.clock_date, secondaryColor)
121143

122144
// --- Apply Battery & Temp ---
123145
views.setViewVisibility(R.id.text_battery, if (showBattery) android.view.View.VISIBLE else android.view.View.GONE)
124146
views.setTextViewTextSize(R.id.text_battery, android.util.TypedValue.COMPLEX_UNIT_SP, sizeBattery)
147+
views.setTextColor(R.id.text_battery, primaryColor)
125148

126149
views.setViewVisibility(R.id.text_temp, if (showTemp) android.view.View.VISIBLE else android.view.View.GONE)
127150
views.setTextViewTextSize(R.id.text_temp, android.util.TypedValue.COMPLEX_UNIT_SP, sizeTemp)
151+
views.setTextColor(R.id.text_temp, secondaryColor)
128152

129153
// --- Fetch & Update Data (Battery) ---
130154
val batteryStatus: Intent? = IntentFilter(Intent.ACTION_BATTERY_CHANGED).let { ifilter ->
@@ -168,7 +192,7 @@ class AwidgetProvider : AppWidgetProvider() {
168192
// --- Calendar Events ---
169193
views.setViewVisibility(R.id.events_container, if (showEvents) android.view.View.VISIBLE else android.view.View.GONE)
170194
if (showEvents) {
171-
loadCalendarEvents(context, views, sizeEvents)
195+
loadCalendarEvents(context, views, sizeEvents, primaryColor, secondaryColor)
172196
}
173197

174198
// Click on events container to refresh widget
@@ -187,7 +211,7 @@ class AwidgetProvider : AppWidgetProvider() {
187211
}
188212

189213

190-
private fun loadCalendarEvents(context: Context, views: RemoteViews, textSizeSp: Float) {
214+
private fun loadCalendarEvents(context: Context, views: RemoteViews, textSizeSp: Float, primaryColor: Int, secondaryColor: Int) {
191215
// Check permission
192216
if (androidx.core.content.ContextCompat.checkSelfPermission(
193217
context, android.Manifest.permission.READ_CALENDAR
@@ -276,10 +300,6 @@ class AwidgetProvider : AppWidgetProvider() {
276300
val timeFormat = java.text.SimpleDateFormat("h:mm a", java.util.Locale.getDefault())
277301
val dayFormat = java.text.SimpleDateFormat("EEE", java.util.Locale.getDefault())
278302

279-
// Colors: Local events brighter, holidays dimmer
280-
val localColor = android.graphics.Color.parseColor("#FFFFFF") // Bright white
281-
val holidayColor = android.graphics.Color.parseColor("#99FFFFFF") // Dimmer
282-
283303
for (i in eventViews.indices) {
284304
if (i < events.size) {
285305
val event = events[i]
@@ -289,7 +309,7 @@ class AwidgetProvider : AppWidgetProvider() {
289309
"${dayFormat.format(java.util.Date(event.begin))} ${timeFormat.format(java.util.Date(event.begin))}"
290310
}
291311
views.setTextViewText(eventViews[i], "$timeText ${event.title}")
292-
views.setTextColor(eventViews[i], if (event.isLocal) localColor else holidayColor)
312+
views.setTextColor(eventViews[i], if (event.isLocal) primaryColor else secondaryColor)
293313
views.setTextViewTextSize(eventViews[i], android.util.TypedValue.COMPLEX_UNIT_SP, textSizeSp)
294314
views.setViewVisibility(eventViews[i], android.view.View.VISIBLE)
295315
} else {

app/src/main/java/com/leanbitlab/lwidget/MainActivity.kt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,9 @@ class MainActivity : AppCompatActivity() {
9999

100100
// Outline Glow: Def False
101101
bindToggle(R.id.section_outline, "Outline Glow", "show_outline", false)
102+
103+
// Light Theme: Def False
104+
bindToggle(R.id.section_theme, "Light Theme", "use_light_theme", false)
102105
}
103106

104107
private fun bindSection(
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<!-- Simulated Gaussian Blur with Layer List -->
3+
<!-- Stacking 6 layers with decreasing width and increasing opacity. -->
4+
<!-- Order: Outer (faint + wide) -> Inner (solid + narrow) -->
5+
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
6+
7+
<!-- Layer 1: Very Faint, Wide (5%) -->
8+
<item>
9+
<shape>
10+
<solid android:color="@android:color/transparent"/>
11+
<stroke android:width="12dp" android:color="@color/glow_05"/>
12+
<corners android:radius="@dimen/widget_radius_outer"/>
13+
</shape>
14+
</item>
15+
16+
<!-- Layer 2: Faint, Wide (15%) -->
17+
<item android:top="1dp" android:bottom="1dp" android:left="1dp" android:right="1dp">
18+
<shape>
19+
<solid android:color="@android:color/transparent"/>
20+
<stroke android:width="10dp" android:color="@color/widget_outline_soft"/>
21+
<corners android:radius="@dimen/widget_radius_mid1"/>
22+
</shape>
23+
</item>
24+
25+
<!-- Layer 3: Mild, Medium (30%) -->
26+
<item android:top="2dp" android:bottom="2dp" android:left="2dp" android:right="2dp">
27+
<shape>
28+
<solid android:color="@android:color/transparent"/>
29+
<stroke android:width="8dp" android:color="@color/glow_30"/>
30+
<corners android:radius="@dimen/widget_radius_mid2"/>
31+
</shape>
32+
</item>
33+
34+
<!-- Layer 4: Medium (50%) -->
35+
<item android:top="3dp" android:bottom="3dp" android:left="3dp" android:right="3dp">
36+
<shape>
37+
<solid android:color="@android:color/transparent"/>
38+
<stroke android:width="6dp" android:color="@color/widget_outline_medium"/>
39+
<corners android:radius="@dimen/widget_radius_mid3"/>
40+
</shape>
41+
</item>
42+
43+
<!-- Layer 5: Strong (75%) -->
44+
<item android:top="4dp" android:bottom="4dp" android:left="4dp" android:right="4dp">
45+
<shape>
46+
<solid android:color="@android:color/transparent"/>
47+
<stroke android:width="4dp" android:color="@color/glow_75"/>
48+
<corners android:radius="@dimen/widget_radius_mid4"/>
49+
</shape>
50+
</item>
51+
52+
<!-- Layer 6: Solid Inner Line + Fill (100%) -->
53+
<item android:top="5dp" android:bottom="5dp" android:left="5dp" android:right="5dp">
54+
<shape>
55+
<solid android:color="@color/widget_background_light"/>
56+
<stroke android:width="2dp" android:color="@color/widget_outline"/>
57+
<corners android:radius="@dimen/widget_radius_inner"/>
58+
</shape>
59+
</item>
60+
61+
</layer-list>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
3+
<solid android:color="@color/widget_background_light" />
4+
<corners android:radius="@dimen/widget_radius" />
5+
</shape>

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,9 @@
8989
<!-- Events Settings -->
9090
<include layout="@layout/settings_card_item" android:id="@+id/section_events"/>
9191

92+
<!-- Light Theme Settings -->
93+
<include layout="@layout/settings_card_item" android:id="@+id/section_theme"/>
94+
9295
<!-- Outline Glow Settings -->
9396
<include layout="@layout/settings_card_item" android:id="@+id/section_outline"/>
9497

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
android:id="@+id/item_switch"
3737
android:layout_width="wrap_content"
3838
android:layout_height="wrap_content"
39+
android:saveEnabled="false"
3940
app:thumbTint="?attr/colorOnPrimaryContainer"
4041
app:trackTint="?attr/colorPrimaryContainer"/>
4142
</LinearLayout>
@@ -59,6 +60,7 @@
5960
android:id="@+id/item_slider"
6061
android:layout_width="match_parent"
6162
android:layout_height="wrap_content"
63+
android:saveEnabled="false"
6264
android:valueFrom="8.0"
6365
android:valueTo="72.0"
6466
android:stepSize="1.0"

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,4 +2,9 @@
22
<resources>
33
<color name="widget_background">#FF1C1B1F</color> <!-- Dark gray fallback -->
44
<color name="widget_outline">#FFD0BCFF</color> <!-- Light purple (Material 3 default accent) fallback -->
5+
6+
<!-- Light Theme Colors -->
7+
<color name="widget_background_light">#FFFDF8FD</color>
8+
<color name="widget_text_light">#FF1C1B1F</color>
9+
<color name="widget_text_secondary_light">#FF49454F</color>
510
</resources>

0 commit comments

Comments
 (0)