diff --git a/modules/widget/android/src/main/AndroidManifest.xml b/modules/widget/android/src/main/AndroidManifest.xml index 6da85b5..eb8fcc9 100644 --- a/modules/widget/android/src/main/AndroidManifest.xml +++ b/modules/widget/android/src/main/AndroidManifest.xml @@ -1,5 +1,4 @@ - nowMin } - val combined = (upcomingToday.map { it to true } + tomorrowCourses.map { it to false }).take(2) + val combined = + (upcomingToday.map { it to true } + tomorrowCourses.map { it to false }).take(2) if (combined.isEmpty()) { views.setViewVisibility(R.id.course_group, View.GONE) @@ -112,16 +120,34 @@ class ScheduleWidget : AppWidgetProvider() { if (upcomingToday.isEmpty() && tomorrowCourses.isEmpty()) { hintText = "今天和明天都没有课啦~" } else { - val todayHint = if (upcomingToday.isEmpty()) "今天没有课啦," else "今天还有${upcomingToday.size}节课," - val tomorrowHint = if (tomorrowCourses.isEmpty()) "明天没有课啦~" else "明天还有${tomorrowCourses.size}节课" + val todayHint = + if (upcomingToday.isEmpty()) "今天没有课啦," else "今天还有${upcomingToday.size}节课," + val tomorrowHint = + if (tomorrowCourses.isEmpty()) "明天没有课啦~" else "明天还有${tomorrowCourses.size}节课" hintText = todayHint + tomorrowHint } views.setViewVisibility(R.id.tv_course_hint, View.VISIBLE) views.setTextViewText(R.id.tv_course_hint, hintText) + setOnClickAction(context, views) appWidgetManager.updateAppWidget(appWidgetId, views) } + fun setOnClickAction(context: Context, views: RemoteViews) { + context.packageManager + .getLaunchIntentForPackage(context.packageName) + ?.let { + it.flags = Intent.FLAG_ACTIVITY_NEW_TASK + views.setOnClickPendingIntent( + R.id.widget_root, + PendingIntent.getActivity( + context, ACTIVITY_REQUEST_CODE, it, + PendingIntent.FLAG_IMMUTABLE or PendingIntent.FLAG_CANCEL_CURRENT + ) + ) + } + } + fun scheduleNextAlarm(context: Context) { val data = ScheduleData.load(context) ?: return if (data.termStart.isEmpty()) return @@ -148,12 +174,12 @@ class ScheduleWidget : AppWidgetProvider() { action = ACTION_AUTO_REFRESH } val pendingIntent = PendingIntent.getBroadcast( - context, 0, intent, + context, BROADCAST_REQUEST_CODE, intent, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE ) val alarmManager = context.getSystemService(Context.ALARM_SERVICE) as AlarmManager - alarmManager.setExactAndAllowWhileIdle( + alarmManager.set( AlarmManager.RTC_WAKEUP, alarmTime.timeInMillis, pendingIntent