Skip to content

Commit

Permalink
Initial setup for cleanup with JobService
Browse files Browse the repository at this point in the history
Signed-off-by: Arka Prava Basu <arkaprava94@gmail.com>
  • Loading branch information
archie94 committed Nov 1, 2018
1 parent 448a1fd commit d10bcdb
Show file tree
Hide file tree
Showing 4 changed files with 106 additions and 0 deletions.
4 changes: 4 additions & 0 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -168,4 +168,8 @@ dependencies {
androidTestImplementation "com.android.support.test.espresso:espresso-core:3.0.2"
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'
}
3 changes: 3 additions & 0 deletions src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@
android:name=".service.MonitorService"
android:exported="false" />

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

<meta-data
android:name="DATABASE"
android:value="haven.db" />
Expand Down
35 changes: 35 additions & 0 deletions src/main/java/org/havenapp/main/ListActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,14 @@
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.GoogleApiAvailability;
import com.mikepenz.aboutlibraries.Libs;
import com.mikepenz.aboutlibraries.LibsBuilder;

Expand All @@ -60,6 +68,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.SignalSender;
import org.havenapp.main.ui.EventActivity;
import org.havenapp.main.ui.EventAdapter;
Expand All @@ -74,6 +83,7 @@
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 @@ -198,6 +208,8 @@ public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) {
initializeRecyclerViewComponents();

fetchEventList();

scheduleCleanupJob(this);
}

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

private static void scheduleCleanupJob(Context context) {
if (GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(context) == 0) {
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.ON_ANY_NETWORK, 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
@@ -0,0 +1,64 @@
package org.havenapp.main.service

import android.util.Log
import com.firebase.jobdispatcher.JobParameters
import com.firebase.jobdispatcher.JobService
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.
* <p>
* Created by Arka Prava Basu <arka.basu@zomato.com> on 28/10/18.
*/

const val SERVICE_TAG = "HavenCleanupService"

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

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")
}

return true
}

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

val eventList = database.getEventDAO().getAllEvent()
val eventTriggerList = database.getEventTriggerDAO().getAllEventTriggers()

// keep a list of all invalid event triggers
val inValidEventTriggerList = mutableListOf<EventTrigger>()
eventTriggerList.filter { it.mEventId !in eventList.map { it.id } }.mapTo(inValidEventTriggerList) { it }

val currentFileList = mutableListOf<File>()
val storageDir = File(PreferenceManager(this).defaultMediaStoragePath)
currentFileList.addAll(storageDir.listFiles())

val targetFileList = mutableListOf<File>()
currentFileList.filter { it.absolutePath in inValidEventTriggerList.map { it.mPath } }.mapTo(targetFileList) { it }

// delete these files from disk
for (file in targetFileList) {
file.delete()
}

// remove entry of all invalid event triggers from database
for (inValidEventTrigger in inValidEventTriggerList) {
database.getEventTriggerDAO().delete(inValidEventTrigger)
}
}
}

0 comments on commit d10bcdb

Please sign in to comment.