Skip to content

Commit

Permalink
Move to android-job from JobDispatcher for cleanup service
Browse files Browse the repository at this point in the history
- this move removes the dependency from Google Play service

Signed-off-by: Arka Prava Basu <[email protected]>
  • Loading branch information
archie94 committed Nov 5, 2018
1 parent 6be6b28 commit f15d34b
Show file tree
Hide file tree
Showing 13 changed files with 78 additions and 69 deletions.
5 changes: 2 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,6 @@ dependencies {
androidTestImplementation "com.android.support.test.espresso:espresso-intents:3.0.2"
androidTestImplementation "android.arch.persistence.room:testing:1.1.1"

// firebase job dispatcher
implementation 'com.firebase:firebase-jobdispatcher:0.8.3'
implementation 'com.google.android.gms:play-services-base:16.0.1'
// android-job
implementation 'com.evernote:android-job:1.2.6'
}
2 changes: 1 addition & 1 deletion src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@
android:name=".service.MonitorService"
android:exported="false" />

<service android:name=".service.RemoveDeletedFilesService"
<service android:name=".service.RemoveDeletedFilesJob"
android:exported="false" />

<meta-data
Expand Down
20 changes: 19 additions & 1 deletion src/main/java/org/havenapp/main/HavenApp.java
Original file line number Diff line number Diff line change
Expand Up @@ -17,15 +17,18 @@

package org.havenapp.main;

import android.support.annotation.NonNull;
import android.support.multidex.MultiDexApplication;
import android.support.v7.app.AppCompatDelegate;
import android.util.Log;

import com.evernote.android.job.JobManager;
import com.facebook.drawee.backends.pipeline.Fresco;
import com.facebook.imagepipeline.core.ImagePipelineConfig;
import com.facebook.imagepipeline.decoder.SimpleProgressiveJpegConfig;

import org.havenapp.main.database.HavenEventDB;
import org.havenapp.main.service.HavenJobCreator;
import org.havenapp.main.service.WebServer;

import java.io.IOException;
Expand All @@ -40,7 +43,9 @@ public class HavenApp extends MultiDexApplication {

private PreferenceManager mPrefs = null;

public static HavenEventDB dataBaseInstance = null;
private static HavenEventDB dataBaseInstance = null;

private static HavenApp havenApp;

@Override
public void onCreate() {
Expand All @@ -61,7 +66,10 @@ public void onCreate() {
if (mPrefs.getRemoteAccessActive())
startServer();

havenApp = this;
dataBaseInstance = HavenEventDB.getDatabase(this);

JobManager.create(this).addJobCreator(new HavenJobCreator());
}


Expand All @@ -86,4 +94,14 @@ public void stopServer ()
mOnionServer.stop();
}
}

@NonNull
public static HavenApp getInstance() {
return havenApp;
}

@NonNull
public static HavenEventDB getDataBaseInstance() {
return dataBaseInstance;
}
}
37 changes: 2 additions & 35 deletions src/main/java/org/havenapp/main/ListActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,15 +49,6 @@
import android.view.MenuItem;
import android.view.View;

import com.firebase.jobdispatcher.Constraint;
import com.firebase.jobdispatcher.FirebaseJobDispatcher;
import com.firebase.jobdispatcher.GooglePlayDriver;
import com.firebase.jobdispatcher.Job;
import com.firebase.jobdispatcher.Lifetime;
import com.firebase.jobdispatcher.RetryStrategy;
import com.firebase.jobdispatcher.Trigger;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.mikepenz.aboutlibraries.Libs;
import com.mikepenz.aboutlibraries.LibsBuilder;

Expand All @@ -69,7 +60,7 @@
import org.havenapp.main.model.Event;
import org.havenapp.main.resources.IResourceManager;
import org.havenapp.main.resources.ResourceManager;
import org.havenapp.main.service.RemoveDeletedFilesService;
import org.havenapp.main.service.RemoveDeletedFilesJob;
import org.havenapp.main.service.SignalSender;
import org.havenapp.main.ui.EventActivity;
import org.havenapp.main.ui.EventAdapter;
Expand All @@ -84,7 +75,6 @@
import static org.havenapp.main.database.DbConstantsKt.DB_INIT_END;
import static org.havenapp.main.database.DbConstantsKt.DB_INIT_START;
import static org.havenapp.main.database.DbConstantsKt.DB_INIT_STATUS;
import static org.havenapp.main.service.RemoveDeletedFilesServiceKt.SERVICE_TAG;

public class ListActivity extends AppCompatActivity {

Expand Down Expand Up @@ -210,7 +200,7 @@ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {

fetchEventList();

scheduleCleanupJob(this);
RemoveDeletedFilesJob.Companion.schedule();
}

private void initializeRecyclerViewComponents() {
Expand Down Expand Up @@ -247,29 +237,6 @@ private void fetchEventList() {
}
}

private static void scheduleCleanupJob(Context context) {
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) != ConnectionResult.SUCCESS) {
return;
}

FirebaseJobDispatcher dispatcher = new
FirebaseJobDispatcher(new GooglePlayDriver(context));
dispatcher.mustSchedule(createJob(dispatcher));
}

private static Job createJob(FirebaseJobDispatcher dispatcher) {
return dispatcher.newJobBuilder()
.setLifetime(Lifetime.FOREVER)
.setService(RemoveDeletedFilesService.class)
.setTag(SERVICE_TAG)
.setReplaceCurrent(true)
.setRecurring(true)
.setTrigger(Trigger.executionWindow(0, 24 * 60 * 60))
.setRetryStrategy(RetryStrategy.DEFAULT_LINEAR)
.setConstraints(Constraint.DEVICE_CHARGING)
.build();
}

private void showEmptyState() {
recyclerView.setVisibility(View.GONE);
findViewById(R.id.empty_view).setVisibility(View.VISIBLE);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.havenapp.main.model.Event
class EventDeleteAllAsync(private val listener: EventDeleteAllListener)
: AsyncTask<List<Event>, Unit, Unit>() {
override fun doInBackground(vararg params: List<Event>) {
HavenApp.dataBaseInstance.getEventDAO().deleteAll(params.get(0))
HavenApp.getDataBaseInstance().getEventDAO().deleteAll(params.get(0))
}

override fun onPostExecute(result: Unit?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.havenapp.main.model.Event
class EventDeleteAsync(private val listener: EventDeleteListener)
: AsyncTask<Event, Unit, Unit>() {
override fun doInBackground(vararg params: Event) {
HavenApp.dataBaseInstance.getEventDAO().delete(params.get(0))
HavenApp.getDataBaseInstance().getEventDAO().delete(params.get(0))
}

override fun onPostExecute(result: Unit?) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.havenapp.main.model.Event
class EventInsertAllAsync(private val listener: EventInsertListener)
: AsyncTask<List<Event>, Unit, List<Long>>() {
override fun doInBackground(vararg params: List<Event>): List<Long> {
return HavenApp.dataBaseInstance.getEventDAO().insertAll(params.get(0))
return HavenApp.getDataBaseInstance().getEventDAO().insertAll(params.get(0))
}

override fun onPostExecute(result: List<Long>) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.havenapp.main.model.Event
class EventInsertAsync(val listener: EventInsertListener): AsyncTask<Event, Unit, Long>() {
override fun doInBackground(vararg params: Event): Long {
val event = params.get(0)
return HavenApp.dataBaseInstance.getEventDAO().insert(event)
return HavenApp.getDataBaseInstance().getEventDAO().insert(event)
}

override fun onPostExecute(result: Long) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.havenapp.main.model.EventTrigger
class EventTriggerDeleteAsync(private val callback: DeleteCallback)
: AsyncTask<EventTrigger, Unit, Unit>() {
override fun doInBackground(vararg params: EventTrigger) {
HavenApp.dataBaseInstance.getEventTriggerDAO().delete(params.get(0))
HavenApp.getDataBaseInstance().getEventTriggerDAO().delete(params.get(0))
// todo delete file here?
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import org.havenapp.main.model.EventTrigger
class EventTriggerInsertAsync(private val callback: InsertCallback)
: AsyncTask<EventTrigger, Unit, Long>() {
override fun doInBackground(vararg params: EventTrigger): Long {
return HavenApp.dataBaseInstance.getEventTriggerDAO().insert(params.get(0))
return HavenApp.getDataBaseInstance().getEventTriggerDAO().insert(params.get(0))
}

override fun onPostExecute(result: Long) {
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/org/havenapp/main/model/Event.kt
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class Event {
fun getEventTriggers() : MutableList<EventTrigger> {

if (mEventTriggers.size == 0) {
val eventTriggers = HavenApp.dataBaseInstance.getEventTriggerDAO().getEventTriggerList(id)
val eventTriggers = HavenApp.getDataBaseInstance().getEventTriggerDAO().getEventTriggerList(id)
mEventTriggers.addAll(eventTriggers)
}

Expand Down
20 changes: 20 additions & 0 deletions src/main/java/org/havenapp/main/service/HavenJobCreator.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package org.havenapp.main.service

import com.evernote.android.job.Job
import com.evernote.android.job.JobCreator

/**
* Created by Arka Prava Basu <[email protected]> on 04/11/18.
*/
class HavenJobCreator : JobCreator {
override fun create(tag: String): Job? {
return when (tag) {
SERVICE_TAG -> {
RemoveDeletedFilesJob()
}
else -> {
null
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,41 +2,46 @@ package org.havenapp.main.service

import android.os.Environment
import android.util.Log
import com.firebase.jobdispatcher.JobParameters
import com.firebase.jobdispatcher.JobService
import com.evernote.android.job.Job
import com.evernote.android.job.JobRequest
import org.havenapp.main.HavenApp
import org.havenapp.main.PreferenceManager
import org.havenapp.main.database.HavenEventDB
import org.havenapp.main.model.EventTrigger
import java.io.File

/**
* A [JobService] to delete files related to deleted logs.
* A [Job] to delete files related to deleted logs.
* <p>
* Created by Arka Prava Basu <[email protected]> on 28/10/18.
*/

const val SERVICE_TAG = "HavenCleanupService"
const val SERVICE_TAG = "HavenCleanupJob"

class RemoveDeletedFilesService: JobService() {
override fun onStopJob(job: JobParameters?): Boolean {
Log.d(SERVICE_TAG, "Cleanup Service interrupted")
return false
class RemoveDeletedFilesJob: Job() {

companion object {
fun schedule(): Int {
return JobRequest.Builder(SERVICE_TAG)
.setPeriodic(24 * 60 * 60 * 1000L) // run once every 24 hrs
.setRequiresCharging(true)
.setUpdateCurrent(true)
.build()
.schedule()
}
}

override fun onStartJob(job: JobParameters): Boolean {
Log.d(SERVICE_TAG, "Starting Cleanup Service")
Thread {
// remove all deleted logs from disk and reschedule this task
removeDeletedLogsFromDisk()
jobFinished(job, true)
Log.d(SERVICE_TAG, "Stopping Cleanup service")
}.start()
override fun onRunJob(params: Params): Result {
Log.d(SERVICE_TAG, "Starting Cleanup. Job Id: ${params.id}")

// remove all deleted logs from disk and reschedule this task
removeDeletedLogsFromDisk()

return true
Log.d(SERVICE_TAG, "Stopping Cleanup. Job Id: ${params.id}")
return Result.SUCCESS
}

private fun removeDeletedLogsFromDisk() {
val database = HavenEventDB.getDatabase(this)
val database = HavenApp.getDataBaseInstance()

val eventList = database.getEventDAO().getAllEvent()
val eventTriggerList = database.getEventTriggerDAO().getAllEventTriggers()
Expand All @@ -60,7 +65,7 @@ class RemoveDeletedFilesService: JobService() {

private fun getAllFilesToBeDeleted(targetFileList: MutableList<File>) {
val storageDir = File(Environment.getExternalStorageDirectory(),
PreferenceManager(this).baseStoragePath)
PreferenceManager(HavenApp.getInstance()).baseStoragePath)

if (!storageDir.exists())
return
Expand All @@ -73,7 +78,7 @@ class RemoveDeletedFilesService: JobService() {

private fun deleteEmptyDirs() {
val storageDir = File(Environment.getExternalStorageDirectory(),
PreferenceManager(this).baseStoragePath)
PreferenceManager(HavenApp.getInstance()).baseStoragePath)

if (!storageDir.exists())
return
Expand Down Expand Up @@ -112,7 +117,7 @@ class RemoveDeletedFilesService: JobService() {
}

private fun getAllEventTriggerPath(): List<String> {
val database = HavenEventDB.getDatabase(this)
val database = HavenApp.getDataBaseInstance()
val eventTriggerPathList = mutableListOf<String>()
database.getEventTriggerDAO().getAllEventTriggers().filter { it.mPath != null }
.mapTo(eventTriggerPathList) { it.mPath!! }
Expand Down

0 comments on commit f15d34b

Please sign in to comment.