From f09397277900bb710579bdf151d1770d75fc32a5 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Mon, 2 Jan 2023 17:36:15 -0700 Subject: [PATCH] new release --- app/build.gradle | 4 +- .../java/asgardius/page/s3manager/Share.java | 201 +++++++++++++----- app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values/strings.xml | 1 + 4 files changed, 149 insertions(+), 58 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 26f9407..25e292c 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "asgardius.page.s3manager" minSdk 23 targetSdk 33 - versionCode 60 - versionName "0.6.2" + versionCode 61 + versionName "0.7.0" setProperty("archivesBaseName", "s3-manager-$versionName") testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/asgardius/page/s3manager/Share.java b/app/src/main/java/asgardius/page/s3manager/Share.java index d2a79fc..8d87a78 100644 --- a/app/src/main/java/asgardius/page/s3manager/Share.java +++ b/app/src/main/java/asgardius/page/s3manager/Share.java @@ -2,10 +2,12 @@ package asgardius.page.s3manager; import androidx.appcompat.app.AppCompatActivity; +import android.app.Activity; import android.content.ClipData; import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; +import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.view.View; @@ -24,8 +26,8 @@ import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.S3ObjectSummary; +import java.io.OutputStreamWriter; import java.net.URL; -import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; @@ -45,6 +47,8 @@ public class Share extends AppCompatActivity { GeneratePresignedUrlRequest request; Date expiration; URL objectURL; + Uri fileuri; + Intent intent; int videotime, playlisttime; public static String URLify(String str) { @@ -170,65 +174,13 @@ public class Share extends AppCompatActivity { @Override public void onClick(View view) { //buttonaction - Thread getLinks = new Thread(new Runnable() { + Thread copyLinks = new Thread(new Runnable() { @Override public void run() { try { //load media file - if (datepick.getText().toString().equals("")) { - date = 0; - } else { - date = Integer.parseInt(datepick.getText().toString()); - } - if (hourpick.getText().toString().equals("")) { - hour = 0; - } else { - hour = Integer.parseInt(hourpick.getText().toString()); - } - if (minutepick.getText().toString().equals("")) { - minute = 0; - } else { - minute = Integer.parseInt(minutepick.getText().toString()); - } - expiration = new Date(); - //System.out.println("today is " + mycal.getTime()); - mycal.setTime(expiration); - if (date == 0 && hour == 0 && minute == 0) { - if (mediafile) { - mycal.add(Calendar.HOUR, playlisttime); - } else { - mycal.add(Calendar.MINUTE, 15); - } - } else { - mycal.add(Calendar.DATE, date); - mycal.add(Calendar.HOUR, hour); - mycal.add(Calendar.MINUTE, minute); - } - //System.out.println("Expiration date: " + mycal.getTime()); - expiration = mycal.getTime(); - //System.out.println(expiration); - if (object == null) { - orequest = new ListObjectsRequest().withBucketName(bucket).withMaxKeys(1000); - } else { - orequest = new ListObjectsRequest().withBucketName(bucket).withPrefix(object).withMaxKeys(1000); - } - ObjectListing result = s3client.listObjects(orequest); - objectlist = ""; - List objects = result.getObjectSummaries(); - for (S3ObjectSummary os : objects) { - request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); - objectlist = objectlist+s3client.generatePresignedUrl(request).toString()+"\n"; - } - while (result.isTruncated()) { - result = s3client.listNextBatchOfObjects (result); - objects = result.getObjectSummaries(); - for (S3ObjectSummary os : objects) { - request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); - objectlist = objectlist+s3client.generatePresignedUrl(request).toString()+"\n"; - } - - } + getLinks(); runOnUiThread(new Runnable() { @@ -259,9 +211,146 @@ public class Share extends AppCompatActivity { } } }); - getLinks.start(); + copyLinks.start(); + } + + }); + savelinks.setOnClickListener(new View.OnClickListener(){ + @Override + public void onClick(View view) { + //buttonaction + performFileSearch("Select download location"); } }); } + + private void performFileSearch(String messageTitle) { + //uri = Uri.parse("content://com.android.externalstorage.documents/document/home"); + intent = new Intent(); + intent.setAction(Intent.ACTION_CREATE_DOCUMENT); + //intent.addCategory(Intent.CATEGORY_OPENABLE); + //intent.putExtra(Intent.EXTRA_LOCAL_ONLY, true); + //intent.putExtra("android.provider.extra.INITIAL_URI", uri); + intent.putExtra(Intent.EXTRA_TITLE, "links.txt"); + intent.setType("*/*"); + ((Activity) this).startActivityForResult(intent, 70); + } + + @Override + public void onActivityResult(int requestCode, int resultCode, final Intent resultData) { + // The ACTION_OPEN_DOCUMENT intent was sent with the request code OPEN_DIRECTORY_REQUEST_CODE. + // If the request code seen here doesn't match, it's the response to some other intent, + // and the below code shouldn't run at all. + super.onActivityResult(requestCode, resultCode, resultData); + if (requestCode == 70) { + if (resultCode == Activity.RESULT_OK) { + // The document selected by the user won't be returned in the intent. + // Instead, a URI to that document will be contained in the return intent + // provided to this method as a parameter. Pull that uri using "resultData.getData()" + if (resultData != null && resultData.getData() != null) { + fileuri = resultData.getData(); + System.out.println(fileuri.toString()); + savelinks(); + //System.out.println("File selected successfully"); + //System.out.println("content://com.android.externalstorage.documents"+file.getPath()); + } else { + Toast.makeText(Share.this, getResources().getString(R.string.file_path_fail), Toast.LENGTH_SHORT).show(); + finish(); + } + } else { + //System.out.println("User cancelled file browsing {}"); + finish(); + } + } + } + + private void getLinks() { + if (datepick.getText().toString().equals("")) { + date = 0; + } else { + date = Integer.parseInt(datepick.getText().toString()); + } + if (hourpick.getText().toString().equals("")) { + hour = 0; + } else { + hour = Integer.parseInt(hourpick.getText().toString()); + } + if (minutepick.getText().toString().equals("")) { + minute = 0; + } else { + minute = Integer.parseInt(minutepick.getText().toString()); + } + expiration = new Date(); + //System.out.println("today is " + mycal.getTime()); + mycal.setTime(expiration); + if (date == 0 && hour == 0 && minute == 0) { + mycal.add(Calendar.HOUR, playlisttime); + } else { + mycal.add(Calendar.DATE, date); + mycal.add(Calendar.HOUR, hour); + mycal.add(Calendar.MINUTE, minute); + } + //System.out.println("Expiration date: " + mycal.getTime()); + expiration = mycal.getTime(); + //System.out.println(expiration); + if (object == null) { + orequest = new ListObjectsRequest().withBucketName(bucket).withMaxKeys(1000); + } else { + orequest = new ListObjectsRequest().withBucketName(bucket).withPrefix(object).withMaxKeys(1000); + } + ObjectListing result = s3client.listObjects(orequest); + objectlist = ""; + List objects = result.getObjectSummaries(); + for (S3ObjectSummary os : objects) { + request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); + objectlist = objectlist+s3client.generatePresignedUrl(request).toString()+"\n"; + } + while (result.isTruncated()) { + result = s3client.listNextBatchOfObjects (result); + objects = result.getObjectSummaries(); + for (S3ObjectSummary os : objects) { + request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); + objectlist = objectlist+s3client.generatePresignedUrl(request).toString()+"\n"; + } + + } + } + + private void savelinks() { + Thread saveLinks = new Thread(new Runnable() { + + @Override + public void run() { + try { + getLinks(); + OutputStreamWriter outputStreamWriter = new OutputStreamWriter(getContentResolver().openOutputStream(fileuri)); + outputStreamWriter.write(objectlist); + outputStreamWriter.close(); + + runOnUiThread(new Runnable() { + + @Override + public void run() { + // Sending reference and data to Adapter + Toast.makeText(getApplicationContext(),getResources().getString(R.string.save_ok), Toast.LENGTH_SHORT).show(); + } + }); + //System.out.println("tree "+treelevel); + //System.out.println("prefix "+prefix); + + } catch (Exception e) { + e.printStackTrace(); + runOnUiThread(new Runnable() { + + @Override + public void run() { + Toast.makeText(getApplicationContext(),getResources().getString(R.string.invalid_expiration_date), Toast.LENGTH_SHORT).show(); + } + }); + } + } + }); + saveLinks.start(); + } } \ No newline at end of file diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index a8075fc..5002e24 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -121,4 +121,5 @@ Imagen demasiado grande Guardar enlaces en archivo Copiar enlaces al potapapeles + Archivo guardado exitosamente \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index eeb278c..575297e 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -123,5 +123,6 @@ Calculating folder size Picture too big Save links to file + File saved successfully Copy links to clipboard \ No newline at end of file