package com.jdroid.android.usecase.service;
import android.annotation.SuppressLint;
import android.content.Intent;
import com.jdroid.android.application.AbstractApplication;
import com.jdroid.android.notification.NotificationUtils;
import com.jdroid.android.service.WorkerService;
import com.jdroid.android.usecase.AbstractUseCase;
import com.jdroid.java.concurrent.ExecutorUtils;
@SuppressLint("Registered")
public class UseCaseService extends WorkerService {
private final static String USE_CASE = "useCase";
private final static String NOTIFICATION_TO_CANCEL_ID = "notificationToCancelId";
@Override
protected void doExecute(Intent intent) {
int notificationToCancelId = intent.getIntExtra(NOTIFICATION_TO_CANCEL_ID, 0);
if (notificationToCancelId != 0) {
NotificationUtils.cancelNotification(notificationToCancelId);
}
AbstractUseCase useCase = (AbstractUseCase)intent.getSerializableExtra(USE_CASE);
useCase.run();
}
@Override
protected Boolean enableTimingTracking() {
return false;
}
public static void schedule(final AbstractUseCase useCase, Long delaySeconds) {
ExecutorUtils.schedule(new Runnable() {
@Override
public void run() {
execute(useCase);
}
}, delaySeconds);
}
public static void execute(AbstractUseCase useCase) {
WorkerService.runIntentInService(AbstractApplication.get(), getServiceIntent(useCase, null), UseCaseService.class);
}
public static Intent getServiceIntent(AbstractUseCase useCase, Integer notificationToCancelId) {
Intent intent = new Intent();
intent.putExtra(USE_CASE, useCase);
intent.putExtra(NOTIFICATION_TO_CANCEL_ID, notificationToCancelId);
return WorkerService.getServiceIntent(AbstractApplication.get(), intent, UseCaseService.class);
}
}