From 81693d37db41d340ab1ab4b258aca78a38d96807 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 22 Jan 2023 07:16:09 -0700 Subject: [PATCH] new release --- app/build.gradle | 4 +- .../page/s3manager/BucketPolicy.java | 2 +- .../java/asgardius/page/s3manager/Share.java | 163 +++++++++++++----- app/src/main/res/layout/activity_share.xml | 22 ++- app/src/main/res/values-es/strings.xml | 1 + app/src/main/res/values/strings.xml | 3 +- .../metadata/android/en-US/changelogs/70.txt | 1 + 7 files changed, 146 insertions(+), 50 deletions(-) create mode 100644 fastlane/metadata/android/en-US/changelogs/70.txt diff --git a/app/build.gradle b/app/build.gradle index 1e54642..16dc86a 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "asgardius.page.s3manager" minSdk 23 targetSdk 33 - versionCode 69 - versionName "0.7.7" + versionCode 70 + versionName "0.8.0" setProperty("archivesBaseName", "s3-manager-$versionName") testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" diff --git a/app/src/main/java/asgardius/page/s3manager/BucketPolicy.java b/app/src/main/java/asgardius/page/s3manager/BucketPolicy.java index 0f20536..2843c06 100644 --- a/app/src/main/java/asgardius/page/s3manager/BucketPolicy.java +++ b/app/src/main/java/asgardius/page/s3manager/BucketPolicy.java @@ -61,7 +61,7 @@ public class BucketPolicy extends AppCompatActivity { try { //Your code goes here String policy = s3client.getBucketPolicy(bucket).getPolicyText(); - System.out.println(policy); + //System.out.println(policy); runOnUiThread(new Runnable() { diff --git a/app/src/main/java/asgardius/page/s3manager/Share.java b/app/src/main/java/asgardius/page/s3manager/Share.java index ab1bc07..9bee03e 100644 --- a/app/src/main/java/asgardius/page/s3manager/Share.java +++ b/app/src/main/java/asgardius/page/s3manager/Share.java @@ -13,6 +13,8 @@ import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; +import android.widget.ProgressBar; +import android.widget.TextView; import android.widget.Toast; import com.amazonaws.auth.AWSCredentials; @@ -34,7 +36,9 @@ import java.util.List; public class Share extends AppCompatActivity { String username, password, endpoint, bucket, object, location, title, objectlist; - boolean mediafile, style; + boolean mediafile, style, publicbucket; + TextView expirationtext; + ProgressBar simpleProgressBar; Region region; S3ClientOptions s3ClientOptions; AWSCredentials myCredentials; @@ -84,6 +88,8 @@ public class Share extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_share); + simpleProgressBar = (ProgressBar) findViewById(R.id.simpleProgressBar); + expirationtext = (TextView) findViewById(R.id.expirationtext); mycal = Calendar.getInstance(); datepick = (EditText)findViewById(R.id.Date); hourpick = (EditText)findViewById(R.id.Hour); @@ -114,13 +120,68 @@ public class Share extends AppCompatActivity { s3client.setEndpoint(endpoint); s3ClientOptions.setPathStyleAccess(style); s3client.setS3ClientOptions(s3ClientOptions); - if(object == null || object.endsWith("/")) { - copylinks.setVisibility(View.VISIBLE); - savelinks.setVisibility(View.VISIBLE); - } else { - share.setVisibility(View.VISIBLE); - copylinks.setVisibility(View.VISIBLE); - } + Thread getPolicy = new Thread(new Runnable() { + + @Override + public void run() { + try { + //Your code goes here + String policy = s3client.getBucketPolicy(bucket).getPolicyText(); + //System.out.println(policy); + + runOnUiThread(new Runnable() { + + @Override + public void run() { + //Your code goes here + if(policy.contains("\"Resource\":[\"arn:aws:s3:::"+bucket+"/*")){ + publicbucket = true; + expirationtext.setText(getResources().getString(R.string.expiration_not_required)); + + } else { + publicbucket = false; + datepick.setEnabled(true); + hourpick.setEnabled(true); + minutepick.setEnabled(true); + expirationtext.setText(getResources().getString(R.string.expiration_time)); + } + if(object == null || object.endsWith("/")) { + copylinks.setVisibility(View.VISIBLE); + savelinks.setVisibility(View.VISIBLE); + } else { + share.setVisibility(View.VISIBLE); + copylinks.setVisibility(View.VISIBLE); + } + simpleProgressBar.setVisibility(View.INVISIBLE); + } + }); + + } catch (Exception e) { + e.printStackTrace(); + runOnUiThread(new Runnable() { + + @Override + public void run() { + publicbucket = false; + datepick.setEnabled(true); + hourpick.setEnabled(true); + minutepick.setEnabled(true); + expirationtext.setText(getResources().getString(R.string.expiration_time)); + if(object == null || object.endsWith("/")) { + copylinks.setVisibility(View.VISIBLE); + savelinks.setVisibility(View.VISIBLE); + } else { + share.setVisibility(View.VISIBLE); + copylinks.setVisibility(View.VISIBLE); + } + simpleProgressBar.setVisibility(View.INVISIBLE); + } + }); + //Toast.makeText(getApplicationContext(),getResources().getString(R.string.media_list_fail), Toast.LENGTH_SHORT).show(); + } + } + }); + getPolicy.start(); share.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { @@ -142,6 +203,9 @@ public class Share extends AppCompatActivity { @Override public void onClick(View view) { //buttonaction + if(object == null || object.endsWith("/")) { + simpleProgressBar.setVisibility(View.VISIBLE); + } Thread copyLinks = new Thread(new Runnable() { @Override @@ -155,6 +219,7 @@ public class Share extends AppCompatActivity { @Override public void run() { // Sending reference and data to Adapter + simpleProgressBar.setVisibility(View.INVISIBLE); ClipboardManager clipboard = (ClipboardManager) getSystemService(Context.CLIPBOARD_SERVICE); ClipData clip; clip = ClipData.newPlainText("name", objectlist); @@ -289,58 +354,71 @@ public class Share extends AppCompatActivity { objectlist = ""; List objects = result.getObjectSummaries(); for (S3ObjectSummary os : objects) { - request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); - objectlist = objectlist+s3client.generatePresignedUrl(request).toString()+"\n"; + if(publicbucket) { + objectlist = objectlist+s3client.getUrl(bucket, os.getKey()).toString()+"\n"; + } else { + 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"; + if(publicbucket) { + objectlist = objectlist+s3client.getUrl(bucket, os.getKey()).toString()+"\n"; + } else { + request = new GeneratePresignedUrlRequest(bucket, os.getKey()).withExpiration(expiration); + objectlist = objectlist+s3client.generatePresignedUrl(request).toString()+"\n"; + } } } } private void sharefile() { - if (datepick.getText().toString().equals("")) { - date = 0; + if(publicbucket) { + objectURL = s3client.getUrl(bucket, object); } 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, videotime); + if (datepick.getText().toString().equals("")) { + date = 0; } else { - mycal.add(Calendar.MINUTE, 15); + date = Integer.parseInt(datepick.getText().toString()); } - } else { - mycal.add(Calendar.DATE, date); - mycal.add(Calendar.HOUR, hour); - mycal.add(Calendar.MINUTE, minute); + 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, videotime); + } 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); + request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); + objectURL = s3client.generatePresignedUrl(request); } - //System.out.println("Expiration date: " + mycal.getTime()); - expiration = mycal.getTime(); - //System.out.println(expiration); - request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); - objectURL = s3client.generatePresignedUrl(request); } private void savelinks() { + simpleProgressBar.setVisibility(View.VISIBLE); Thread saveLinks = new Thread(new Runnable() { @Override @@ -356,6 +434,7 @@ public class Share extends AppCompatActivity { @Override public void run() { // Sending reference and data to Adapter + simpleProgressBar.setVisibility(View.INVISIBLE); Toast.makeText(getApplicationContext(),getResources().getString(R.string.save_ok), Toast.LENGTH_SHORT).show(); } }); diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml index 62d11f5..f638260 100644 --- a/app/src/main/res/layout/activity_share.xml +++ b/app/src/main/res/layout/activity_share.xml @@ -1,5 +1,5 @@ - + android:layout_height="wrap_content" + tools:ignore="MissingConstraints"> @@ -38,6 +39,7 @@ android:layout_height="48dp" android:layout_weight="1" android:focusable="true" + android:enabled="false" android:hint="@string/share_date" android:maxLength="1" android:inputType="date" @@ -50,6 +52,7 @@ android:layout_height="48dp" android:layout_weight="1" android:focusable="true" + android:enabled="false" android:hint="@string/share_hour" android:maxLength="2" android:inputType="date" @@ -62,6 +65,7 @@ android:layout_height="48dp" android:layout_weight="1" android:focusable="true" + android:enabled="false" android:hint="@string/share_minute" android:maxLength="2" android:inputType="date" @@ -97,4 +101,14 @@ - \ No newline at end of file + + + \ 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 89591bd..ea8aca9 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -121,4 +121,5 @@ Política personalizada Establecer bucket como público Establecer bucket como privado + Fecha de expiración no requerida \ 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 3f724ef..d6b2d37 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -122,7 +122,8 @@ Access permissions Public bucket Private bucket - Private bucket + Custom policy Set bucket as public Set bucket as private + Expiration date not required \ No newline at end of file diff --git a/fastlane/metadata/android/en-US/changelogs/70.txt b/fastlane/metadata/android/en-US/changelogs/70.txt new file mode 100644 index 0000000..f6e3e39 --- /dev/null +++ b/fastlane/metadata/android/en-US/changelogs/70.txt @@ -0,0 +1 @@ +* Set bucket as public or private \ No newline at end of file