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" />