diff --git a/android/app/src/main/kotlin/dev/so1ve/bitree/TimetableWidget.kt b/android/app/src/main/kotlin/dev/so1ve/bitree/TimetableWidget.kt
index 4b5ea0d..83ea23a 100644
--- a/android/app/src/main/kotlin/dev/so1ve/bitree/TimetableWidget.kt
+++ b/android/app/src/main/kotlin/dev/so1ve/bitree/TimetableWidget.kt
@@ -4,6 +4,7 @@ import android.app.AlarmManager
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
+import android.appwidget.AppWidgetProviderInfo
import android.content.ComponentName
import android.content.Context
import android.content.Intent
@@ -76,7 +77,26 @@ open class TimetableWidget : AppWidgetProvider() {
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE,
)
widgets.forEach { (id, columns) ->
- val views = RemoteViews(context.packageName, R.layout.timetable_widget)
+ val options = manager.getAppWidgetOptions(id)
+ val hostCategory = options.getInt(
+ AppWidgetManager.OPTION_APPWIDGET_HOST_CATEGORY,
+ AppWidgetProviderInfo.WIDGET_CATEGORY_HOME_SCREEN,
+ )
+ // The lock-screen host controls the slot width independently of targetCellWidth.
+ val compactKeyguard = columns == 1 &&
+ (hostCategory and AppWidgetProviderInfo.WIDGET_CATEGORY_KEYGUARD) != 0
+ val hostWidthPx = widgetWidthPx(context, manager, id)
+ val widthPx = if (compactKeyguard) {
+ hostWidthPx * 0.6f
+ } else {
+ hostWidthPx
+ }
+ val layout = if (compactKeyguard) {
+ R.layout.timetable_widget_compact_keyguard
+ } else {
+ R.layout.timetable_widget
+ }
+ val views = RemoteViews(context.packageName, layout)
views.setInt(
R.id.widget_content, "setBackgroundColor", WidgetColors.background(context),
)
@@ -102,7 +122,6 @@ open class TimetableWidget : AppWidgetProvider() {
)
}
- val widthPx = widgetWidthPx(context, manager, id)
val heightPx = widgetContentMinHeightPx(context, manager, id)
val items = entryItems(context, content.entries, widthPx, heightPx, columns)
diff --git a/android/app/src/main/res/layout/timetable_widget_compact_keyguard.xml b/android/app/src/main/res/layout/timetable_widget_compact_keyguard.xml
new file mode 100644
index 0000000..f33596a
--- /dev/null
+++ b/android/app/src/main/res/layout/timetable_widget_compact_keyguard.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
diff --git a/android/app/src/main/res/layout/timetable_widget_preview.xml b/android/app/src/main/res/layout/timetable_widget_preview.xml
index 38c8e0b..4958115 100644
--- a/android/app/src/main/res/layout/timetable_widget_preview.xml
+++ b/android/app/src/main/res/layout/timetable_widget_preview.xml
@@ -1,6 +1,6 @@
+ 146dp
14dp
6dp
10dp
diff --git a/android/app/src/main/res/xml/timetable_widget_info.xml b/android/app/src/main/res/xml/timetable_widget_info.xml
index 688ebff..12444c3 100644
--- a/android/app/src/main/res/xml/timetable_widget_info.xml
+++ b/android/app/src/main/res/xml/timetable_widget_info.xml
@@ -6,8 +6,9 @@
android:targetCellWidth="2"
android:targetCellHeight="2"
android:initialLayout="@layout/timetable_widget"
+ android:initialKeyguardLayout="@layout/timetable_widget_compact_keyguard"
android:previewLayout="@layout/timetable_widget_preview"
android:description="@string/widget_description"
android:updatePeriodMillis="0"
android:resizeMode="vertical"
- android:widgetCategory="home_screen" />
+ android:widgetCategory="home_screen|keyguard" />
diff --git a/android/app/src/main/res/xml/timetable_widget_wide_info.xml b/android/app/src/main/res/xml/timetable_widget_wide_info.xml
index c4a6fe0..1284979 100644
--- a/android/app/src/main/res/xml/timetable_widget_wide_info.xml
+++ b/android/app/src/main/res/xml/timetable_widget_wide_info.xml
@@ -10,4 +10,4 @@
android:description="@string/widget_description"
android:updatePeriodMillis="0"
android:resizeMode="vertical"
- android:widgetCategory="home_screen" />
+ android:widgetCategory="home_screen|keyguard" />