132 lines
No EOL
5.1 KiB
Java
132 lines
No EOL
5.1 KiB
Java
package com.kbs.kbsintranett;
|
|
|
|
import android.app.AlarmManager;
|
|
import android.app.PendingIntent;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.os.Build;
|
|
import android.util.Log;
|
|
import androidx.annotation.NonNull;
|
|
import androidx.work.Worker;
|
|
import androidx.work.WorkerParameters;
|
|
import java.io.IOException;
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Date;
|
|
import java.util.List;
|
|
import java.util.Locale;
|
|
import retrofit2.Response;
|
|
|
|
public class NotificationWorker extends Worker {
|
|
|
|
private static final String TAG = "KBS_DEBUG";
|
|
|
|
public NotificationWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
|
|
super(context, workerParams);
|
|
}
|
|
|
|
@NonNull
|
|
@Override
|
|
public Result doWork() {
|
|
Log.d(TAG, "NotificationWorker: Starter sjekk av kalender...");
|
|
|
|
try {
|
|
String url = CalendarManager.getGoogleCalendarUrl();
|
|
Response<GoogleCalendarModels.Response> response = RetrofitClient.getApiService().getDirectGoogleEvents(url).execute();
|
|
|
|
if (response.isSuccessful() && response.body() != null) {
|
|
List<CalendarEvent> events = CalendarManager.convertGoogleResponse(response.body());
|
|
scheduleAlarms(events);
|
|
return Result.success();
|
|
} else {
|
|
Log.e(TAG, "NotificationWorker: API-kall feilet. Kode: " + response.code());
|
|
return Result.retry();
|
|
}
|
|
} catch (IOException e) {
|
|
Log.e(TAG, "NotificationWorker: Nettverksfeil", e);
|
|
return Result.retry();
|
|
}
|
|
}
|
|
|
|
private void scheduleAlarms(List<CalendarEvent> events) {
|
|
Context context = getApplicationContext();
|
|
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
|
|
if (!alarmManager.canScheduleExactAlarms()) {
|
|
Log.e(TAG, "NotificationWorker: MANGLER fortsatt tillatelse!");
|
|
return;
|
|
}
|
|
}
|
|
|
|
long now = System.currentTimeMillis();
|
|
SimpleDateFormat isoFormat = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss", Locale.getDefault());
|
|
int countSet = 0;
|
|
|
|
for (CalendarEvent event : events) {
|
|
try {
|
|
if (event.getRawDate().length() == 10) continue;
|
|
|
|
Date eventDate = null;
|
|
if (event.getRawDate().contains("T")) {
|
|
String raw = event.getRawDate();
|
|
if (raw.length() > 19) raw = raw.substring(0, 19);
|
|
eventDate = isoFormat.parse(raw);
|
|
}
|
|
|
|
if (eventDate == null) continue;
|
|
|
|
long triggerTime = eventDate.getTime() - (event.getReminderMinutes() * 60 * 1000L);
|
|
|
|
// --- DETALJERT LOGGING FOR Å FEILSØKE ---
|
|
if (event.getTitle().toLowerCase().contains("test")) {
|
|
Log.d(TAG, "SJEKKER TEST-EVENT:");
|
|
Log.d(TAG, " Start: " + eventDate);
|
|
Log.d(TAG, " Varsling valgt: " + event.getReminderMinutes() + " min før");
|
|
Log.d(TAG, " Alarmtid: " + new Date(triggerTime));
|
|
Log.d(TAG, " Nå: " + new Date(now));
|
|
|
|
if (triggerTime > now) {
|
|
Log.d(TAG, " Status: I FREMTIDEN (Alarm skal settes)");
|
|
} else {
|
|
Log.d(TAG, " Status: I FORTIDEN (Hoppes over)");
|
|
}
|
|
}
|
|
// ----------------------------------------
|
|
|
|
if (triggerTime > now && triggerTime < (now + 24 * 60 * 60 * 1000L)) {
|
|
|
|
String uniqueIdString = event.getTitle() + event.getRawDate();
|
|
int alarmId = uniqueIdString.hashCode();
|
|
|
|
Intent intent = new Intent(context, AlarmReceiver.class);
|
|
intent.putExtra("TITLE", event.getTitle());
|
|
intent.putExtra("MESSAGE", "Starter kl " + event.getTime());
|
|
intent.putExtra("ID", alarmId);
|
|
|
|
PendingIntent pendingIntent = PendingIntent.getBroadcast(
|
|
context,
|
|
alarmId,
|
|
intent,
|
|
PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE
|
|
);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
|
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
|
|
} else {
|
|
alarmManager.setExact(AlarmManager.RTC_WAKEUP, triggerTime, pendingIntent);
|
|
}
|
|
|
|
Log.i(TAG, ">>> ALARM SATT: " + event.getTitle());
|
|
countSet++;
|
|
}
|
|
|
|
} catch (Exception e) {
|
|
Log.e(TAG, "Feil ved behandling av event: " + event.getTitle(), e);
|
|
}
|
|
}
|
|
|
|
if (countSet == 0) {
|
|
Log.d(TAG, "Ingen nye alarmer satt (ingen hendelser innenfor neste 24t).");
|
|
}
|
|
}
|
|
} |