165 lines
8.4 KiB
Java
165 lines
8.4 KiB
Java
package com.avapp.deviceDataSync;
|
|
|
|
|
|
import android.database.Cursor;
|
|
import android.net.Uri;
|
|
import android.provider.MediaStore;
|
|
import android.provider.MediaStore.MediaColumns;
|
|
import android.util.Log;
|
|
|
|
import androidx.annotation.NonNull;
|
|
|
|
import com.facebook.react.bridge.Arguments;
|
|
import com.facebook.react.bridge.Promise;
|
|
import com.facebook.react.bridge.ReactApplicationContext;
|
|
import com.facebook.react.bridge.WritableArray;
|
|
import com.facebook.react.bridge.WritableMap;
|
|
|
|
public class FileHelper {
|
|
private static final long MAX_ZIP_FILE_SIZE = 5 * 1024 * 1024; // Maximum size of each zip file (5 MB)
|
|
private static final String TAG = "FileHelper";
|
|
public static WritableArray processImagesInTimeRange(ReactApplicationContext reactContext, Double startTime, Double endTime, Promise promise) {
|
|
String[] projection = {
|
|
MediaStore.Images.ImageColumns.DATA, // File path
|
|
MediaStore.Images.ImageColumns.DISPLAY_NAME, // Image name
|
|
MediaStore.Images.ImageColumns.SIZE, // Image size
|
|
MediaStore.Images.ImageColumns.MIME_TYPE, // Image MIME type
|
|
MediaStore.Images.ImageColumns.DATE_TAKEN, // Date taken
|
|
MediaStore.Images.ImageColumns.DATE_ADDED, // Date added
|
|
MediaStore.Images.ImageColumns.DATE_MODIFIED // Date modified
|
|
};
|
|
|
|
String selection = MediaStore.Images.ImageColumns.DATE_TAKEN + " BETWEEN ? AND ?";
|
|
String[] selectionArgs = {String.valueOf(startTime), String.valueOf(endTime)};
|
|
|
|
Uri queryUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
|
|
|
|
WritableArray imageArray = Arguments.createArray(); // Array to store image data
|
|
|
|
try (Cursor cursor = reactContext.getContentResolver().query(queryUri, projection, selection, selectionArgs, null)) {
|
|
if (cursor != null && cursor.moveToFirst()) {
|
|
do {
|
|
String imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATA));
|
|
String displayName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DISPLAY_NAME));
|
|
long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.SIZE));
|
|
String mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.MIME_TYPE));
|
|
long dateTaken = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_TAKEN));
|
|
long dateAdded = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_ADDED));
|
|
long dateModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Images.ImageColumns.DATE_MODIFIED));
|
|
|
|
// Create a JSON object to represent image metadata
|
|
WritableMap imageMetadata = Arguments.createMap();
|
|
imageMetadata.putString("path", imagePath);
|
|
imageMetadata.putString("name", displayName);
|
|
imageMetadata.putDouble("size", size);
|
|
imageMetadata.putString("mimeType", mimeType);
|
|
imageMetadata.putDouble("date_taken", dateTaken);
|
|
imageMetadata.putDouble("createdAt", dateAdded);
|
|
imageMetadata.putDouble("updateAt", dateModified);
|
|
|
|
// Add the image metadata to the array
|
|
imageArray.pushMap(imageMetadata);
|
|
} while (cursor.moveToNext());
|
|
}
|
|
} catch (Exception e) {
|
|
promise.reject(e);
|
|
}
|
|
|
|
promise.resolve(imageArray);
|
|
|
|
return imageArray;
|
|
}
|
|
|
|
|
|
public static WritableArray processFilesInTimeRange(ReactApplicationContext reactContext, Double startTime, Double endTime, Promise promise) {
|
|
Log.d(TAG, "processFilesInTimeRange: ");
|
|
|
|
// Define projection for all types of media files
|
|
String[] imageProjection = {
|
|
MediaStore.Images.ImageColumns.DATA, // File path
|
|
MediaStore.Images.ImageColumns.DISPLAY_NAME, // Image name
|
|
MediaStore.Images.ImageColumns.SIZE, // Image size
|
|
MediaStore.Images.ImageColumns.MIME_TYPE, // Image MIME type
|
|
MediaStore.Images.ImageColumns.DATE_TAKEN, // Date taken
|
|
MediaStore.Images.ImageColumns.DATE_ADDED, // Date added
|
|
MediaStore.Images.ImageColumns.DATE_MODIFIED // Date modified
|
|
};
|
|
|
|
String[] videoProjection = {
|
|
MediaStore.Video.VideoColumns.DATA, // File path
|
|
MediaStore.Video.VideoColumns.DISPLAY_NAME, // Video name
|
|
MediaStore.Video.VideoColumns.SIZE, // Video size
|
|
MediaStore.Video.VideoColumns.MIME_TYPE, // Video MIME type
|
|
MediaStore.Video.VideoColumns.DATE_ADDED, // Date added
|
|
MediaStore.Video.VideoColumns.DATE_MODIFIED, // Date modified
|
|
};
|
|
|
|
String[] audioProjection = {
|
|
MediaStore.Audio.AudioColumns.DATA, // File path
|
|
MediaStore.Audio.AudioColumns.DISPLAY_NAME, // Audio name
|
|
MediaStore.Audio.AudioColumns.SIZE, // Audio size
|
|
MediaStore.Audio.AudioColumns.MIME_TYPE, // Audio MIME type
|
|
MediaStore.Audio.AudioColumns.DATE_ADDED, // Date added
|
|
MediaStore.Audio.AudioColumns.DATE_MODIFIED // Date modified
|
|
};
|
|
|
|
|
|
|
|
// Define selection criteria for the time range
|
|
String selection = MediaStore.Files.FileColumns.DATE_ADDED + " BETWEEN ? AND ?";
|
|
String[] selectionArgs = {String.valueOf(startTime.longValue() / 1000), String.valueOf(endTime.longValue() / 1000)};
|
|
|
|
Uri[] queryUris = {
|
|
MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
|
|
MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
|
|
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
|
|
};
|
|
|
|
WritableArray mediaArray = Arguments.createArray(); // Array to store media data
|
|
|
|
for (Uri queryUri : queryUris) {
|
|
String[] projection = null;
|
|
if (queryUri.equals(MediaStore.Images.Media.EXTERNAL_CONTENT_URI)) {
|
|
projection = imageProjection;
|
|
} else if (queryUri.equals(MediaStore.Video.Media.EXTERNAL_CONTENT_URI)) {
|
|
projection = videoProjection;
|
|
} else if (queryUri.equals(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI)) {
|
|
projection = audioProjection;
|
|
}
|
|
|
|
try (Cursor cursor = reactContext.getContentResolver().query(queryUri, projection, selection, selectionArgs, null)) {
|
|
if (cursor != null && cursor.moveToFirst()) {
|
|
do {
|
|
String filePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATA));
|
|
String displayName = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DISPLAY_NAME));
|
|
long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.SIZE));
|
|
String mimeType = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.MIME_TYPE));
|
|
long dateAdded = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_ADDED));
|
|
long dateModified = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.MediaColumns.DATE_MODIFIED));
|
|
|
|
// Create a JSON object to represent media metadata
|
|
WritableMap mediaMetadata = Arguments.createMap();
|
|
mediaMetadata.putString("path", filePath);
|
|
mediaMetadata.putString("name", displayName);
|
|
mediaMetadata.putDouble("size", size);
|
|
mediaMetadata.putString("mimeType", mimeType);
|
|
mediaMetadata.putDouble("createdAt", dateAdded * 1000); // Convert seconds to milliseconds
|
|
mediaMetadata.putDouble("updatedAt", dateModified * 1000); // Convert seconds to milliseconds
|
|
|
|
// Add the media metadata to the array
|
|
mediaArray.pushMap(mediaMetadata);
|
|
} while (cursor.moveToNext());
|
|
}
|
|
} catch (Exception e) {
|
|
promise.reject(e);
|
|
}
|
|
}
|
|
|
|
promise.resolve(mediaArray);
|
|
|
|
return mediaArray;
|
|
}
|
|
|
|
|
|
}
|