Update tq

pull/653/merge
Varun Patil 2023-05-07 18:57:29 -07:00
parent 535daadc51
commit cd131797cc
2 changed files with 67 additions and 55 deletions

View File

@ -4,12 +4,12 @@ plugins {
android {
namespace 'gallery.memories'
compileSdk 32
compileSdk 33
defaultConfig {
applicationId "gallery.memories"
minSdk 27
targetSdk 32
targetSdk 33
versionCode 1
versionName "1.0"
@ -32,13 +32,13 @@ android {
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.4.1'
implementation 'com.google.android.material:material:1.5.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
implementation 'androidx.navigation:navigation-fragment:2.4.1'
implementation 'androidx.navigation:navigation-ui:2.4.1'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
implementation 'androidx.navigation:navigation-fragment:2.5.3'
implementation 'androidx.navigation:navigation-ui:2.5.3'
implementation 'androidx.exifinterface:exifinterface:1.3.6'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
androidTestImplementation 'androidx.test.ext:junit:1.1.5'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.5.1'
}

View File

@ -4,9 +4,10 @@ import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.icu.text.SimpleDateFormat;
import android.media.ExifInterface;
import androidx.exifinterface.media.ExifInterface;
import android.net.Uri;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import org.json.JSONArray;
@ -16,7 +17,8 @@ import org.json.JSONObject;
import java.io.IOException;
import java.text.ParseException;
import java.util.ArrayList;
import java.util.TimeZone;
import java.util.HashMap;
import java.util.Map;
public class TimelineQuery {
final static String TAG = "TimelineQuery";
@ -31,47 +33,56 @@ public class TimelineQuery {
}
public JSONArray getByDayId(final long dayId) {
Uri collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// Get list of images from DB
final ArrayList<Long> imageIds = new ArrayList();
final Map<Long, Long> datesTaken = new HashMap<>();
try (Cursor cursor = mDb.rawQuery(
"SELECT local_id, date_taken FROM images WHERE dayid = ?",
new String[] { Long.toString(dayId) }
)) {
while (cursor.moveToNext()) {
final long localId = cursor.getLong(0);
final long dateTaken = cursor.getLong(1);
imageIds.add(localId);
datesTaken.put(localId, dateTaken);
}
}
// Offset of current timezone from UTC
long utcOffset = TimeZone.getDefault().getOffset(System.currentTimeMillis());
// Nothing to do
if (imageIds.size() == 0) {
return new JSONArray();
}
// All external storage images
Uri collection = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// Same fields as server response
String[] projection = new String[] {
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.MIME_TYPE,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.HEIGHT,
MediaStore.Images.Media.WIDTH,
MediaStore.Images.Media.SIZE,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.MIME_TYPE,
MediaStore.Images.Media.HEIGHT,
MediaStore.Images.Media.WIDTH,
MediaStore.Images.Media.SIZE,
};
// Filter for given day
String selection = MediaStore.Images.Media.DATE_TAKEN + " >= ? AND "
+ MediaStore.Images.Media.DATE_TAKEN + " <= ?";
String[] selectionArgs = new String[] {
Long.toString(dayId * 86400000L - utcOffset),
Long.toString(((dayId+1) * 86400000L - utcOffset)),
};
// Sort by name? TODO: fix this
String sortOrder = MediaStore.Images.Media.DISPLAY_NAME + " ASC";
String selection = MediaStore.Images.Media._ID
+ " IN (" + TextUtils.join(",", imageIds) + ")";
// Make list of files
ArrayList<JSONObject> files = new ArrayList<>();
try (Cursor cursor = mCtx.getContentResolver().query(
collection,
projection,
selection,
selectionArgs,
sortOrder
collection,
projection,
selection,
null,
null
)) {
int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
int nameColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DISPLAY_NAME);
int mimeColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.MIME_TYPE);
int dateColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATE_TAKEN);
int heightColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.HEIGHT);
int widthColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.WIDTH);
int sizeColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.SIZE);
@ -80,20 +91,21 @@ public class TimelineQuery {
long id = cursor.getLong(idColumn);
String name = cursor.getString(nameColumn);
String mime = cursor.getString(mimeColumn);
long dateTaken = cursor.getLong(dateColumn);
long height = cursor.getLong(heightColumn);
long width = cursor.getLong(widthColumn);
long size = cursor.getLong(sizeColumn);
long dateTaken = datesTaken.get(id);
try {
JSONObject file = new JSONObject()
.put("fileid", id)
.put("basename", name)
.put("mimetype", mime)
.put("dayid", (dateTaken / 86400000))
.put("h", height)
.put("w", width)
.put("size", size);
.put("fileid", id)
.put("basename", name)
.put("mimetype", mime)
.put("dayid", dayId)
.put("datetaken", dateTaken)
.put("h", height)
.put("w", width)
.put("size", size);
files.add(file);
} catch (JSONException e) {
Log.e(TAG, "JSON error");
@ -113,19 +125,19 @@ public class TimelineQuery {
// Same fields as server response
String[] projection = new String[] {
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.DATE_MODIFIED,
MediaStore.Images.Media._ID,
MediaStore.Images.Media.DATA,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.DATE_MODIFIED,
};
try (Cursor cursor = mCtx.getContentResolver().query(
collection,
projection,
null,
null,
null
collection,
projection,
null,
null,
null
)) {
int idColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID);
int uriColumn = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);