Skip to content

Commit

Permalink
fixes for photos and video capture to fix duplicate display and other…
Browse files Browse the repository at this point in the history
… improvements
  • Loading branch information
n8fr8 committed Oct 18, 2024
1 parent 578b6c2 commit 1edd248
Show file tree
Hide file tree
Showing 15 changed files with 53 additions and 37 deletions.
4 changes: 2 additions & 2 deletions android-libproofcam/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ dependencies {
implementation(project(":android-libproofmode"))

//new C2PA content authenticity support
api ("info.guardianproject:simple_c2pa:0.0.14")
implementation ("net.java.dev.jna:jna:5.13.0@aar")
//api ("info.guardianproject:simple_c2pa:0.0.14")
// implementation ("net.java.dev.jna:jna:5.13.0@aar")

implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.4")

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ import coil.transform.CircleCropTransformation
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import org.witness.proofmode.c2pa.C2paUtils
import org.witness.proofmode.camera.CameraActivity
import org.witness.proofmode.camera.R
import org.witness.proofmode.camera.c2pa.C2paUtils
import org.witness.proofmode.camera.databinding.FragmentCameraBinding
import org.witness.proofmode.camera.enums.CameraTimer
import org.witness.proofmode.camera.utils.*
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,9 @@ import coil.request.ImageRequest
import coil.transform.CircleCropTransformation
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import org.witness.proofmode.c2pa.C2paUtils
import org.witness.proofmode.camera.CameraActivity
import org.witness.proofmode.camera.R
import org.witness.proofmode.camera.c2pa.C2paUtils
import org.witness.proofmode.camera.databinding.FragmentVideoBinding
import org.witness.proofmode.camera.fragments.VideoFragment.CameraConstants.NEW_MEDIA_EVENT
import org.witness.proofmode.camera.utils.*
Expand Down Expand Up @@ -385,7 +385,7 @@ class VideoFragment : BaseFragment<FragmentVideoBinding>(R.layout.fragment_video
allowMachineLearning
)

// proofUri = Uri.fromFile(fileOut)
// proofUri = Uri.fromFile(fileOut)

}

Expand Down
3 changes: 1 addition & 2 deletions android-libproofmode/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -69,10 +69,9 @@ dependencies {
// Required -- JUnit 4 framework
androidTestImplementation 'junit:junit:4.13.2'


//new C2PA content authenticity support
api ("info.guardianproject:simple_c2pa:0.0.14")
implementation ("net.java.dev.jna:jna:5.13.0@aar")
api ("net.java.dev.jna:jna:5.13.0@aar")


// Testing-only dependencies
Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.witness.proofmode.camera.c2pa
package org.witness.proofmode.c2pa

import android.content.Context
import android.content.SharedPreferences
Expand Down Expand Up @@ -290,7 +290,10 @@ class C2paUtils {
var exifData = ExifData(exifGpsVersion, exifLat, exifLong, null, exifAlt, exifTimestamp, null, null, null, null, null, null, null, null, null, null, null, exifMake, exifModel, null, null, null)
contentCreds?.addExifAssertion(exifData)

contentCreds?.embedManifest(fileImageOut.absolutePath)
if (isDirectCapture)
contentCreds?.embedManifest(fileImageOut.absolutePath)
else
contentCreds?.exportManifest(fileImageOut.absolutePath)

}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
package org.witness.proofmode.camera.c2pa;
package org.witness.proofmode.c2pa;


import android.Manifest;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -223,7 +223,7 @@ public void queueMedia(Uri uriMedia, boolean autogen, Date createdAt) {
});
}

public synchronized String processUri (Uri uriMedia, boolean autogen, Date createdAt) {
public String processUri (Uri uriMedia, boolean autogen, Date createdAt) {

Intent intent = new Intent();
intent.setPackage("org.witness.proofmode");
Expand Down Expand Up @@ -304,7 +304,7 @@ public String processUri(Uri fileUri, String proofHash, boolean autogenerated, D
}
}

public synchronized String processUri(final Context context, final Uri uriMedia, String mediaHash, boolean autogenerated, Date createdAt) throws IOException, PGPException {
public String processUri(final Context context, final Uri uriMedia, String mediaHash, boolean autogenerated, Date createdAt) throws IOException, PGPException {

if (mPrefs == null)
mPrefs = PreferenceManager.getDefaultSharedPreferences(context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,16 +17,19 @@
import android.provider.MediaStore;
import android.text.TextUtils;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Objects;
import java.util.Timer;
import java.util.TimerTask;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

import timber.log.Timber;

import org.witness.proofmode.c2pa.C2paUtils;
/**
* Job to monitor when there is a change to photos in the media provider.
*/
Expand Down Expand Up @@ -96,8 +99,9 @@ private void doWork ()

String mediaPath = MediaWatcher.getMediaPath(PhotosContentJob.this, uri);

//if we can get to the direct file path, we should!
if (mediaPath != null)
uriList.put(mediaPath, uri);
uriList.put(mediaPath, Uri.fromFile(new File(mediaPath)));
else
uriList.put(uri.toString(), uri);
}
Expand All @@ -109,6 +113,10 @@ private void doWork ()

executor.execute(() -> {
try {

if (Objects.equals(uriProcess.getScheme(), "file"))
C2paUtils.Companion.addContentCredentials(PhotosContentJob.this, uriProcess, true, true);

MediaWatcher mw = MediaWatcher.getInstance(PhotosContentJob.this);
String resultProofHash = mw.processUri(uriProcess, true, null);
Timber.d("generated hash via job: " + resultProofHash);
Expand Down Expand Up @@ -158,9 +166,9 @@ public static void scheduleJob(Context context) {
new JobInfo.TriggerContentUri(MediaStore.Images.Media.INTERNAL_CONTENT_URI,
JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));

builder.addTriggerContentUri(
new JobInfo.TriggerContentUri(Uri.parse("content://media/external_primary"),
JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
// builder.addTriggerContentUri(
// 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(1000);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -46,9 +46,11 @@ public static void scheduleJob(Context context) {
JobInfo.Builder builder = new JobInfo.Builder(
VIDEO_JOB_ID,
new ComponentName(context, VideosContentJob.class));

builder.addTriggerContentUri(
new JobInfo.TriggerContentUri(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));

builder.addTriggerContentUri(
new JobInfo.TriggerContentUri(MediaStore.Video.Media.INTERNAL_CONTENT_URI,
JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
Expand Down
1 change: 1 addition & 0 deletions app/src/main/java/org/witness/proofmode/Activities.kt
Original file line number Diff line number Diff line change
Expand Up @@ -299,6 +299,7 @@ object Activities: ViewModel()
}

fun getProofableItem(context: Context, selectId: String): List<ProofableItem> {
getDB(context)

var listItems = ArrayList<ProofableItem>()

Expand Down
1 change: 0 additions & 1 deletion app/src/main/java/org/witness/proofmode/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,6 @@ import org.witness.proofmode.ProofMode.PREF_OPTION_CREDENTIALS_DEFAULT
import org.witness.proofmode.ProofModeConstants.PREFS_KEY_PASSPHRASE
import org.witness.proofmode.ProofModeConstants.PREFS_KEY_PASSPHRASE_DEFAULT
import org.witness.proofmode.camera.CameraActivity
import org.witness.proofmode.camera.c2pa.C2paUtils
import org.witness.proofmode.crypto.pgp.PgpUtils
import org.witness.proofmode.databinding.ActivityMainBinding
import org.witness.proofmode.onboarding.OnboardingActivity
Expand Down
36 changes: 20 additions & 16 deletions app/src/main/java/org/witness/proofmode/ProofEventReceiver.kt
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,9 @@ import android.content.BroadcastReceiver
import android.content.Context
import android.content.Intent
import android.net.Uri
import android.util.Log
import android.widget.Toast
import androidx.compose.runtime.mutableStateListOf
import timber.log.Timber
import java.util.Date
import java.util.UUID

class ProofEventReceiver : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
Expand All @@ -23,21 +20,28 @@ class ProofEventReceiver : BroadcastReceiver() {
).show()
**/

var uriMedia = intent?.getStringExtra(ProofMode.EVENT_PROOF_EXTRA_URI)?.let {

if (context != null) {
Activities.addActivity(
Activity(
it, ActivityType.MediaCaptured(
items = mutableStateListOf(
ProofableItem(it, Uri.parse(it))
)
), Date()
), context
)
val uriMedia = intent?.getStringExtra(ProofMode.EVENT_PROOF_EXTRA_URI)
val proofHash = intent?.getStringExtra(ProofMode.EVENT_PROOF_EXTRA_HASH)

uriMedia?.let {

if (context != null && proofHash != null) {

if (Activities.getProofableItem(context, proofHash).isEmpty()) {

Activities.addActivity(
Activity(
it, ActivityType.MediaCaptured(
items = mutableStateListOf(
ProofableItem(proofHash, Uri.parse(it))
)
), Date()
), context
)
}
}

Timber.tag("ProofEventReceiver").i("New Proof Event: " + it)
Timber.tag("ProofEventReceiver").i("New Proof Event: %s", it)
}
}

Expand Down
2 changes: 1 addition & 1 deletion app/src/main/java/org/witness/proofmode/ProofModeApp.kt
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ import org.bouncycastle.openpgp.PGPException
import org.bouncycastle.openpgp.PGPUtil
import org.witness.proofmode.ProofModeConstants.PREFS_KEY_PASSPHRASE
import org.witness.proofmode.ProofModeConstants.PREFS_KEY_PASSPHRASE_DEFAULT
import org.witness.proofmode.camera.c2pa.C2paUtils
import org.witness.proofmode.c2pa.C2paUtils
import org.witness.proofmode.crypto.pgp.PgpUtils
import org.witness.proofmode.notaries.GoogleSafetyNetNotarizationProvider
import org.witness.proofmode.notaries.OpenTimestampsNotarizationProvider
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ import org.witness.proofmode.PermissionActivity
import org.witness.proofmode.PermissionActivity.Companion.hasPermissions
import org.witness.proofmode.ProofMode.PREF_CREDENTIALS_PRIMARY
import org.witness.proofmode.ProofMode.PREF_OPTION_AI_DEFAULT
import org.witness.proofmode.camera.c2pa.C2paUtils
import org.witness.proofmode.c2pa.C2paUtils
import org.witness.proofmode.crypto.pgp.PgpUtils
import org.witness.proofmode.databinding.ActivitySettingsBinding
import org.witness.proofmode.util.GPSTracker
Expand Down
4 changes: 2 additions & 2 deletions app/src/main/java/org/witness/proofmode/ShareProofActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -45,8 +45,8 @@ import org.witness.proofmode.ProofMode.PREF_OPTION_AI
import org.witness.proofmode.ProofMode.PREF_OPTION_AI_DEFAULT
import org.witness.proofmode.ProofModeConstants.PREFS_KEY_PASSPHRASE
import org.witness.proofmode.ProofModeConstants.PREFS_KEY_PASSPHRASE_DEFAULT
import org.witness.proofmode.camera.c2pa.C2paUtils
import org.witness.proofmode.camera.c2pa.C2paUtils.Companion.C2PA_CERT_PATH
import org.witness.proofmode.c2pa.C2paUtils
import org.witness.proofmode.c2pa.C2paUtils.Companion.C2PA_CERT_PATH
import org.witness.proofmode.crypto.HashUtils
import org.witness.proofmode.crypto.pgp.PgpUtils
import org.witness.proofmode.databinding.ActivityShareBinding
Expand Down

0 comments on commit 1edd248

Please sign in to comment.