Skip to content

Commit

Permalink
Updates for background JobService and WorkManager support as well as …
Browse files Browse the repository at this point in the history
…SDK updates
  • Loading branch information
n8fr8 committed Dec 15, 2023
1 parent c71e1e9 commit eaa6142
Show file tree
Hide file tree
Showing 8 changed files with 93 additions and 53 deletions.
1 change: 1 addition & 0 deletions android-libproofmode/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@ xmlns:tools="http://schemas.android.com/tools"

<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"
/>
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />

</manifest>

Original file line number Diff line number Diff line change
Expand Up @@ -142,17 +142,14 @@ private static void addCameraEventListeners (Context context, CameraEventReceive

public static void stopBackgroundService (Context context)
{
if (Build.VERSION.SDK_INT >= 24) {
PhotosContentJob.cancelJob(context);
VideosContentJob.cancelJob(context);
}
else
{
if (mReceiver != null)
context.unregisterReceiver(mReceiver);

LocalBroadcastManager.getInstance(context).unregisterReceiver(mReceiver);
}
PhotosContentJob.cancelJob(context);
VideosContentJob.cancelJob(context);

if (mReceiver != null)
context.unregisterReceiver(mReceiver);

LocalBroadcastManager.getInstance(context).unregisterReceiver(mReceiver);

MediaWatcher.getInstance(context).stop();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@
@TargetApi(24)
public class PhotosContentJob extends JobService {

public static int PHOTOS_CONTENT_JOB = 10001;
private static int PHOTOS_CONTENT_JOB = 10001;

JobParameters mRunningParams;

Expand Down Expand Up @@ -65,6 +65,7 @@ public static void cancelJob(Context context) {
public boolean onStartJob(JobParameters params) {
Timber.d("Photos JOB STARTED!");
mRunningParams = params;

doWork ();
jobFinished(mRunningParams, false);

Expand Down Expand Up @@ -111,22 +112,9 @@ public void run() {
uri = MediaStore.setRequireOriginal(uri);
}

String mediaHash = null;
try {
MediaWatcher mw = MediaWatcher.getInstance(PhotosContentJob.this);

// mediaHash = mw.generateHash(uri);

//if (mediaHash != null && (!mw.proofExists(PhotosContentJob.this,mediaHash))) {

String resultProofHash = mw.processUri(uri, true, null);

if (!TextUtils.isEmpty(resultProofHash)) {
// mHandler.post(() -> Toast.makeText(getApplicationContext(), R.string.proof_generated_success, Toast.LENGTH_SHORT).show());

}
//}

String resultProofHash = mw.processUri(uri, true, null);
mUriStack.remove(uri);

} catch (RuntimeException e) {
Expand Down Expand Up @@ -163,6 +151,8 @@ public boolean onStopJob(JobParameters params) {


public static void scheduleJob(Context context) {
PHOTOS_CONTENT_JOB++;

JobScheduler js =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(
Expand All @@ -179,11 +169,9 @@ public static void scheduleJob(Context context) {
new JobInfo.TriggerContentUri(Uri.parse("content://media/external_primary"),
JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));


// Get all media changes within a tenth of a second.
builder.setTriggerContentUpdateDelay(1);
builder.setTriggerContentMaxDelay(100);

builder.setTriggerContentUpdateDelay(1000);
builder.setTriggerContentMaxDelay(1000);
js.schedule(builder.build());
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,33 +3,23 @@
/**
* Created by n8fr8 on 3/3/17.
*/

import android.annotation.TargetApi;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.job.JobInfo;
import android.app.job.JobParameters;
import android.app.job.JobScheduler;
import android.app.job.JobService;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;

import org.witness.proofmode.library.R;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Set;
import java.util.Timer;
import java.util.TimerTask;

Expand All @@ -42,11 +32,13 @@
@TargetApi(24)
public class VideosContentJob extends JobService {

public static int VIDEO_JOB_ID = 10003;
public static int VIDEO_JOB_ID = 990003;

JobParameters mRunningParams;

public static void scheduleJob(Context context) {
VIDEO_JOB_ID++;

JobScheduler js =
(JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
JobInfo.Builder builder = new JobInfo.Builder(
Expand All @@ -63,8 +55,8 @@ public static void scheduleJob(Context context) {
// JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));

// Get all media changes within a tenth of a second.
builder.setTriggerContentUpdateDelay(1);
builder.setTriggerContentMaxDelay(100);
builder.setTriggerContentUpdateDelay(1000);
builder.setTriggerContentMaxDelay(1000);

js.schedule(builder.build());
}
Expand Down
9 changes: 9 additions & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,15 @@ dependencies {
implementation "ch.acra:acra-mail:5.11.3"
implementation "ch.acra:acra-dialog:5.11.3"

//background service worker
def work_version = "2.9.0"

// (Java only)
implementation "androidx.work:work-runtime:$work_version"

// Kotlin + coroutines
implementation "androidx.work:work-runtime-ktx:$work_version"




Expand Down
16 changes: 6 additions & 10 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -76,12 +76,6 @@
android:theme="@style/AppTheme"
android:requestLegacyExternalStorage="true"
>
<service
android:name=".ProofService"
android:enabled="true"
android:exported="true"
android:foregroundServiceType="dataSync|location"
/>

<activity android:name=".PermissionActivity" />
<activity
Expand Down Expand Up @@ -212,10 +206,6 @@
android:name=".service.VideosContentJob"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".service.AudioContentJob"
android:exported="true"
android:permission="android.permission.BIND_JOB_SERVICE" />
<service
android:name=".ProofModeTileService"
android:icon="@drawable/ic_stat_proofmodewhite"
Expand Down Expand Up @@ -268,6 +258,12 @@
android:name="android.support.FILE_PROVIDER_PATHS"
android:resource="@xml/provider_paths" />
</provider>

<provider
android:name="androidx.startup.InitializationProvider"
android:authorities="${applicationId}.androidx-startup"
tools:node="remove">
</provider>
</application>

</manifest>
46 changes: 46 additions & 0 deletions app/src/main/java/org/witness/proofmode/ProofBackgroundWorker.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
package org.witness.proofmode.org.witness.proofmode

import android.content.Context
import android.provider.MediaStore
import androidx.work.Constraints
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequest
import androidx.work.WorkManager
import androidx.work.Worker
import androidx.work.WorkerParameters
import org.witness.proofmode.service.MediaWatcher

class ProofBackgroundWorker (appContext: Context, workerParams: WorkerParameters):
Worker(appContext, workerParams) {

override fun doWork(): Result {

// Do the work here--in this case, process new media items

// val mw = MediaWatcher.getInstance(applicationContext)
//val resultProofHash = mw.processUri(uri, true, null)

// Indicate whether the work finished successfully with the Result
scheduleWork(applicationContext)
return Result.success()
}

companion object {
fun scheduleWork(context: Context) {

val photoCheckBuilder = OneTimeWorkRequest.Builder(ProofBackgroundWorker::class.java)
photoCheckBuilder.setConstraints(
Constraints.Builder()
.addContentUriTrigger(MediaStore.Images.Media.INTERNAL_CONTENT_URI, true)
.addContentUriTrigger(MediaStore.Images.Media.EXTERNAL_CONTENT_URI, true)
.build()
)
var tag = "proofwork"
val photoCheckWork: OneTimeWorkRequest = photoCheckBuilder.build()
WorkManager.getInstance(context).enqueueUniqueWork(
tag,
ExistingWorkPolicy.REPLACE, photoCheckWork
)
}
}
}
11 changes: 11 additions & 0 deletions app/src/main/java/org/witness/proofmode/ProofModeApp.kt
Original file line number Diff line number Diff line change
@@ -1,12 +1,21 @@
package org.witness.proofmode

import android.R.attr.tag
import android.content.Context
import android.os.Handler
import android.os.Looper
import android.preference.PreferenceManager
import android.provider.MediaStore
import android.widget.Toast
import androidx.multidex.BuildConfig
import androidx.multidex.MultiDexApplication
import androidx.work.Constraints
import androidx.work.ExistingPeriodicWorkPolicy
import androidx.work.ExistingWorkPolicy
import androidx.work.OneTimeWorkRequest
import androidx.work.OneTimeWorkRequestBuilder
import androidx.work.WorkManager
import androidx.work.WorkRequest
import org.acra.config.dialog
import org.acra.config.mailSender
import org.acra.data.StringFormat
Expand All @@ -19,6 +28,7 @@ import org.witness.proofmode.notaries.GoogleSafetyNetNotarizationProvider
import org.witness.proofmode.notaries.OpenTimestampsNotarizationProvider
import org.witness.proofmode.notaries.SafetyNetCheck
import org.witness.proofmode.notarization.NotarizationProvider
import org.witness.proofmode.org.witness.proofmode.ProofBackgroundWorker
import timber.log.Timber
import java.io.IOException
import java.util.concurrent.Executors
Expand Down Expand Up @@ -106,6 +116,7 @@ class ProofModeApp : MultiDexApplication() {


ProofMode.initBackgroundService(this)
// ProofBackgroundWorker.scheduleWork(this)

/**
val intentService = Intent(context, ProofService::class.java)
Expand Down

0 comments on commit eaa6142

Please sign in to comment.