Convert some files to kotlin
parent
5386d72456
commit
94e47a194c
|
@ -1,5 +1,6 @@
|
|||
plugins {
|
||||
id 'com.android.application'
|
||||
id 'kotlin-android'
|
||||
}
|
||||
|
||||
android {
|
||||
|
@ -32,8 +33,10 @@ android {
|
|||
}
|
||||
|
||||
dependencies {
|
||||
implementation 'androidx.core:core-ktx:1.10.1'
|
||||
implementation "org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version"
|
||||
implementation 'androidx.appcompat:appcompat:1.6.1'
|
||||
implementation 'com.google.android.material:material:1.8.0'
|
||||
implementation 'com.google.android.material:material:1.9.0'
|
||||
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
|
||||
implementation 'androidx.navigation:navigation-fragment:2.5.3'
|
||||
implementation 'androidx.navigation:navigation-ui:2.5.3'
|
||||
|
|
|
@ -1,18 +0,0 @@
|
|||
package gallery.memories.service;
|
||||
|
||||
import android.app.DownloadManager;
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.widget.Toast;
|
||||
|
||||
import gallery.memories.NativeX;
|
||||
|
||||
public class DownloadBroadcastReceiver extends BroadcastReceiver {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
if (NativeX.mDlService != null) {
|
||||
NativeX.mDlService.runDownloadCallback(intent);
|
||||
}
|
||||
}
|
||||
}
|
|
@ -0,0 +1,12 @@
|
|||
package gallery.memories.service
|
||||
|
||||
import android.content.BroadcastReceiver
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import gallery.memories.NativeX
|
||||
|
||||
class DownloadBroadcastReceiver : BroadcastReceiver() {
|
||||
override fun onReceive(context: Context, intent: Intent) {
|
||||
NativeX.mDlService?.runDownloadCallback(intent)
|
||||
}
|
||||
}
|
|
@ -1,135 +0,0 @@
|
|||
package gallery.memories.service;
|
||||
|
||||
import android.app.DownloadManager;
|
||||
import android.content.ContentUris;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.provider.MediaStore;
|
||||
import android.webkit.CookieManager;
|
||||
import android.widget.Toast;
|
||||
|
||||
import androidx.appcompat.app.AppCompatActivity;
|
||||
import androidx.collection.ArrayMap;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
public class DownloadService {
|
||||
class DownloadCallback {
|
||||
public void onComplete(Intent intent) {
|
||||
}
|
||||
}
|
||||
|
||||
final AppCompatActivity mActivity;
|
||||
final Map<Long, DownloadCallback> mDownloads = new ArrayMap<>();
|
||||
|
||||
public DownloadService(AppCompatActivity activity) {
|
||||
mActivity = activity;
|
||||
}
|
||||
|
||||
public void runDownloadCallback(Intent intent) {
|
||||
if (mActivity.isDestroyed()) return;
|
||||
|
||||
String action = intent.getAction();
|
||||
|
||||
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE.equals(action)) {
|
||||
long id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0);
|
||||
synchronized (mDownloads) {
|
||||
DownloadCallback callback = mDownloads.get(id);
|
||||
if (callback != null) {
|
||||
callback.onComplete(intent);
|
||||
mDownloads.remove(id);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Toast.makeText(mActivity, "Download Complete", Toast.LENGTH_SHORT).show();
|
||||
}
|
||||
}
|
||||
|
||||
public long queue(final String url, final String filename) {
|
||||
Uri uri = Uri.parse(url);
|
||||
DownloadManager manager = (DownloadManager) mActivity.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
DownloadManager.Request request = new DownloadManager.Request(uri);
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE);
|
||||
|
||||
// Copy all cookies from the webview to the download request
|
||||
String cookies = CookieManager.getInstance().getCookie(url);
|
||||
request.addRequestHeader("cookie", cookies);
|
||||
|
||||
if (!filename.equals("")) {
|
||||
// Save the file to external storage
|
||||
request.setDestinationInExternalPublicDir(android.os.Environment.DIRECTORY_DOWNLOADS, "memories/" + filename);
|
||||
}
|
||||
|
||||
// Start the download
|
||||
return manager.enqueue(request);
|
||||
}
|
||||
|
||||
public Boolean shareUrl(final String url) {
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.setType("text/plain");
|
||||
intent.putExtra(Intent.EXTRA_TEXT, url);
|
||||
mActivity.startActivity(Intent.createChooser(intent, null));
|
||||
return true;
|
||||
}
|
||||
|
||||
public Boolean shareBlobFromUrl(final String url) throws Exception {
|
||||
final long id = queue(url, "");
|
||||
final Object sync = new Object();
|
||||
|
||||
synchronized (mDownloads) {
|
||||
mDownloads.put(id, new DownloadCallback() {
|
||||
@Override
|
||||
public void onComplete(Intent intent) {
|
||||
synchronized (sync) {
|
||||
sync.notify();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
synchronized (sync) {
|
||||
sync.wait();
|
||||
}
|
||||
|
||||
// Get the URI of the downloaded file
|
||||
String sUri = getDownloadedFileURI(id);
|
||||
if (sUri == null) {
|
||||
throw new Exception("Failed to download file");
|
||||
}
|
||||
Uri uri = Uri.parse(sUri);
|
||||
|
||||
// Create sharing intent
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.setType(mActivity.getContentResolver().getType(uri));
|
||||
intent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||
mActivity.startActivity(Intent.createChooser(intent, null));
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
public Boolean shareLocal(final long id) throws Exception {
|
||||
Uri uri = ContentUris.withAppendedId(MediaStore.Files.getContentUri("external"), id);
|
||||
Intent intent = new Intent(Intent.ACTION_SEND);
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
|
||||
intent.setType(mActivity.getContentResolver().getType(uri));
|
||||
intent.putExtra(Intent.EXTRA_STREAM, uri);
|
||||
mActivity.startActivity(Intent.createChooser(intent, null));
|
||||
return true;
|
||||
}
|
||||
|
||||
protected String getDownloadedFileURI(long downloadId) {
|
||||
DownloadManager downloadManager = (DownloadManager) mActivity.getSystemService(Context.DOWNLOAD_SERVICE);
|
||||
DownloadManager.Query query = new DownloadManager.Query();
|
||||
query.setFilterById(downloadId);
|
||||
Cursor cursor = downloadManager.query(query);
|
||||
if (cursor.moveToFirst()) {
|
||||
int columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI);
|
||||
return cursor.getString(columnIndex);
|
||||
}
|
||||
cursor.close();
|
||||
return null;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,106 @@
|
|||
package gallery.memories.service
|
||||
|
||||
import android.app.DownloadManager
|
||||
import android.content.ContentUris
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.Environment
|
||||
import android.provider.MediaStore
|
||||
import android.webkit.CookieManager
|
||||
import android.widget.Toast
|
||||
import androidx.appcompat.app.AppCompatActivity
|
||||
import androidx.collection.ArrayMap
|
||||
import java.util.concurrent.CountDownLatch
|
||||
|
||||
class DownloadService(val mActivity: AppCompatActivity) {
|
||||
private val mDownloads: MutableMap<Long, () -> Unit> = ArrayMap()
|
||||
|
||||
fun runDownloadCallback(intent: Intent) {
|
||||
if (mActivity.isDestroyed) return
|
||||
|
||||
if (DownloadManager.ACTION_DOWNLOAD_COMPLETE == intent.action) {
|
||||
val id = intent.getLongExtra(DownloadManager.EXTRA_DOWNLOAD_ID, 0)
|
||||
synchronized(mDownloads) {
|
||||
mDownloads[id]?.let {
|
||||
it()
|
||||
mDownloads.remove(id)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
Toast.makeText(mActivity, "Download Complete", Toast.LENGTH_SHORT).show()
|
||||
}
|
||||
}
|
||||
|
||||
fun queue(url: String, filename: String): Long {
|
||||
val uri = Uri.parse(url)
|
||||
val manager = mActivity.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
|
||||
val request = DownloadManager.Request(uri)
|
||||
request.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE)
|
||||
|
||||
// Copy all cookies from the webview to the download request
|
||||
val cookies = CookieManager.getInstance().getCookie(url)
|
||||
request.addRequestHeader("cookie", cookies)
|
||||
if (filename != "") {
|
||||
// Save the file to external storage
|
||||
request.setDestinationInExternalPublicDir(Environment.DIRECTORY_DOWNLOADS, "memories/$filename")
|
||||
}
|
||||
|
||||
// Start the download
|
||||
return manager.enqueue(request)
|
||||
}
|
||||
|
||||
fun shareUrl(url: String): Boolean {
|
||||
val intent = Intent(Intent.ACTION_SEND)
|
||||
intent.type = "text/plain"
|
||||
intent.putExtra(Intent.EXTRA_TEXT, url)
|
||||
mActivity.startActivity(Intent.createChooser(intent, null))
|
||||
return true
|
||||
}
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun shareBlobFromUrl(url: String): Boolean {
|
||||
val id = queue(url, "")
|
||||
val latch = CountDownLatch(1)
|
||||
synchronized(mDownloads) {
|
||||
mDownloads.put(id, fun() { latch.countDown() })
|
||||
}
|
||||
latch.await()
|
||||
|
||||
// Get the URI of the downloaded file
|
||||
val sUri = getDownloadedFileURI(id) ?: throw Exception("Failed to download file")
|
||||
val uri = Uri.parse(sUri)
|
||||
|
||||
// Create sharing intent
|
||||
val intent = Intent(Intent.ACTION_SEND)
|
||||
intent.type = mActivity.contentResolver.getType(uri)
|
||||
intent.putExtra(Intent.EXTRA_STREAM, uri)
|
||||
mActivity.startActivity(Intent.createChooser(intent, null))
|
||||
return true
|
||||
}
|
||||
|
||||
@Throws(Exception::class)
|
||||
fun shareLocal(id: Long): Boolean {
|
||||
val uri = ContentUris.withAppendedId(MediaStore.Files.getContentUri("external"), id)
|
||||
val intent = Intent(Intent.ACTION_SEND)
|
||||
intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
|
||||
intent.type = mActivity.contentResolver.getType(uri)
|
||||
intent.putExtra(Intent.EXTRA_STREAM, uri)
|
||||
mActivity.startActivity(Intent.createChooser(intent, null))
|
||||
return true
|
||||
}
|
||||
|
||||
private fun getDownloadedFileURI(downloadId: Long): String? {
|
||||
val downloadManager = mActivity.getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
|
||||
val query = DownloadManager.Query()
|
||||
query.setFilterById(downloadId)
|
||||
val cursor = downloadManager.query(query)
|
||||
if (cursor.moveToFirst()) {
|
||||
val columnIndex = cursor.getColumnIndex(DownloadManager.COLUMN_LOCAL_URI)
|
||||
return cursor.getString(columnIndex)
|
||||
}
|
||||
cursor.close()
|
||||
return null
|
||||
}
|
||||
}
|
|
@ -1,27 +0,0 @@
|
|||
package gallery.memories.service;
|
||||
|
||||
public class Fields {
|
||||
public final static class Photo {
|
||||
public static final String FILEID = "fileid";
|
||||
public static final String BASENAME = "basename";
|
||||
public static final String MIMETYPE = "mimetype";
|
||||
public static final String HEIGHT = "h";
|
||||
public static final String WIDTH = "w";
|
||||
public static final String SIZE = "size";
|
||||
public static final String ETAG = "etag";
|
||||
public static final String DATETAKEN = "datetaken";
|
||||
public static final String DAYID = "dayid";
|
||||
public static final String ISVIDEO = "isvideo";
|
||||
public static final String VIDEO_DURATION = "video_duration";
|
||||
public static final String EXIF = "exif";
|
||||
public static final String PERMISSIONS = "permissions";
|
||||
}
|
||||
|
||||
public final static class Perm {
|
||||
public static final String DELETE = "D";
|
||||
}
|
||||
|
||||
public final static class Exif {
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,23 @@
|
|||
package gallery.memories.service
|
||||
|
||||
class Fields {
|
||||
object Photo {
|
||||
const val FILEID = "fileid"
|
||||
const val BASENAME = "basename"
|
||||
const val MIMETYPE = "mimetype"
|
||||
const val HEIGHT = "h"
|
||||
const val WIDTH = "w"
|
||||
const val SIZE = "size"
|
||||
const val ETAG = "etag"
|
||||
const val DATETAKEN = "datetaken"
|
||||
const val DAYID = "dayid"
|
||||
const val ISVIDEO = "isvideo"
|
||||
const val VIDEO_DURATION = "video_duration"
|
||||
const val EXIF = "exif"
|
||||
const val PERMISSIONS = "permissions"
|
||||
}
|
||||
|
||||
object Perm {
|
||||
const val DELETE = "D"
|
||||
}
|
||||
}
|
|
@ -1,4 +1,10 @@
|
|||
// Top-level build file where you can add configuration options common to all sub-projects/modules.
|
||||
buildscript {
|
||||
ext.kotlin_version = '1.8.10'
|
||||
dependencies {
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
}
|
||||
}
|
||||
|
||||
plugins {
|
||||
id 'com.android.application' version '7.3.1' apply false
|
||||
id 'com.android.library' version '7.3.1' apply false
|
||||
|
|
Loading…
Reference in New Issue