Files
address-verification-app/android/app/src/main/java/com/avapp/deviceDataSync/FileHelper.java
2024-04-24 10:17:37 +05:30

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;
}
}