From 84591d4f6f28deeb493fed810f5fcc762462b1e0 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sat, 1 Oct 2022 19:39:14 -0700 Subject: [PATCH 1/8] first step --- .../main/java/asgardius/page/s3manager/ObjectSelect.java | 9 +++++++-- app/src/main/java/asgardius/page/s3manager/Share.java | 2 ++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java index 84f670f..95090ba 100644 --- a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java @@ -338,7 +338,11 @@ public class ObjectSelect extends AppCompatActivity { //Toast.makeText(ObjectSelect.this, getResources().getString(R.string.pending_feature), Toast.LENGTH_SHORT).show(); upload(); } else if (menuItem.getTitle() == getResources().getString(R.string.create_link)) { - share(prefix + Name.get(position).toString()); + if (Img.get(position).equals(R.drawable.audiofile) || Img.get(position).equals(R.drawable.videofile)) { + share(prefix + Name.get(position).toString(), true); + } else { + share(prefix + Name.get(position).toString(), false); + } } else if (menuItem.getTitle() == getResources().getString(R.string.object_info)) { objectInfo(prefix + Name.get(position).toString()); } else if (menuItem.getTitle() == getResources().getString(R.string.file_del)) { @@ -408,7 +412,7 @@ public class ObjectSelect extends AppCompatActivity { } - private void share(String object) { + private void share(String object, boolean mediafile) { Intent intent = new Intent(this, Share.class); //treelevel ++; @@ -418,6 +422,7 @@ public class ObjectSelect extends AppCompatActivity { intent.putExtra("bucket", bucket); intent.putExtra("object", object); intent.putExtra("region", location); + intent.putExtra("mediafile", mediafile); startActivity(intent); } diff --git a/app/src/main/java/asgardius/page/s3manager/Share.java b/app/src/main/java/asgardius/page/s3manager/Share.java index d46e657..e4b98a7 100644 --- a/app/src/main/java/asgardius/page/s3manager/Share.java +++ b/app/src/main/java/asgardius/page/s3manager/Share.java @@ -24,6 +24,7 @@ import java.util.Date; public class Share extends AppCompatActivity { String username, password, endpoint, bucket, object, location; + boolean mediafile; Region region; S3ClientOptions s3ClientOptions; AWSCredentials myCredentials; @@ -80,6 +81,7 @@ public class Share extends AppCompatActivity { bucket = getIntent().getStringExtra("bucket"); location = getIntent().getStringExtra("region"); object = getIntent().getStringExtra("object"); + mediafile = getIntent().getBooleanExtra("mediafile", false); region = Region.getRegion(location); s3ClientOptions = S3ClientOptions.builder().build(); myCredentials = new BasicAWSCredentials(username, password); From a546960cbe12988ac166a3989d54b4879f5d4f0e Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 2 Oct 2022 09:47:56 -0700 Subject: [PATCH 2/8] fix expiration time on videos --- .../asgardius/page/s3manager/ObjectSelect.java | 11 ++++++++++- .../java/asgardius/page/s3manager/Share.java | 18 +++++++++++++++--- 2 files changed, 25 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java index 95090ba..3574974 100644 --- a/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java +++ b/app/src/main/java/asgardius/page/s3manager/ObjectSelect.java @@ -30,6 +30,8 @@ import com.amazonaws.services.s3.model.S3ObjectSummary; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; import java.util.LinkedHashSet; import java.util.List; import java.util.Locale; @@ -277,7 +279,14 @@ public class ObjectSelect extends AppCompatActivity { } else if (Img.get(position).equals(R.drawable.audiofile) || Img.get(position).equals(R.drawable.videofile)) { //load media file try { - GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString()); + Date expiration = new Date(); + Calendar mycal = Calendar.getInstance(); + mycal.setTime(expiration); + //System.out.println("today is " + mycal.getTime()); + mycal.add(Calendar.HOUR, 6); + //System.out.println("Expiration date: " + mycal.getTime()); + expiration = mycal.getTime(); + GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, prefix + Name.get(position).toString()).withExpiration(expiration);; URL objectURL = s3client.generatePresignedUrl(request); videoPlayer(objectURL.toString()); } catch (Exception e) { diff --git a/app/src/main/java/asgardius/page/s3manager/Share.java b/app/src/main/java/asgardius/page/s3manager/Share.java index e4b98a7..55b8187 100644 --- a/app/src/main/java/asgardius/page/s3manager/Share.java +++ b/app/src/main/java/asgardius/page/s3manager/Share.java @@ -33,6 +33,8 @@ public class Share extends AppCompatActivity { EditText datepick, monthpick, yearpick, hourpick, minutepick; int date, month, year, hour, minute; Button share, external; + GeneratePresignedUrlRequest request; + Date expiration; public static String URLify(String str) { str = str.trim(); @@ -116,9 +118,9 @@ public class Share extends AppCompatActivity { mycal.set(Calendar.HOUR, hour); mycal.set(Calendar.MINUTE, minute); mycal.set(Calendar.SECOND, 0); - Date expiration = mycal.getTime(); + expiration = mycal.getTime(); //System.out.println(expiration); - GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); + request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); URL objectURL = s3client.generatePresignedUrl(request); //System.out.println(URLify(objectURL.toString())); Intent shareIntent = new Intent(Intent.ACTION_SEND); @@ -137,7 +139,17 @@ public class Share extends AppCompatActivity { public void onClick(View view) { //buttonaction try { - GeneratePresignedUrlRequest request = new GeneratePresignedUrlRequest(bucket, object); + if (mediafile) { + expiration = new Date(); + mycal.setTime(expiration); + //System.out.println("today is " + mycal.getTime()); + mycal.add(Calendar.HOUR, 6); + //System.out.println("Expiration date: " + mycal.getTime()); + expiration = mycal.getTime(); + request = new GeneratePresignedUrlRequest(bucket, object).withExpiration(expiration); + } else { + request = new GeneratePresignedUrlRequest(bucket, object); + } URL objectURL = s3client.generatePresignedUrl(request); //System.out.println(URLify(objectURL.toString())); Intent shareIntent = new Intent(Intent.ACTION_SEND); From 6dc131b5494815770fa8603949a98c59bca9c52e Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 2 Oct 2022 10:32:50 -0700 Subject: [PATCH 3/8] update description --- README.md | 4 ++++ fastlane/metadata/android/en-US/full_description.txt | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/README.md b/README.md index 100443d..c57626c 100644 --- a/README.md +++ b/README.md @@ -33,6 +33,10 @@ You need to setup a pdf.js server to use pdf viewer. Just download latest versio Steps to joining to Google Play Alpha testing channel are available at https://forum.asgardius.company/d/1-asgardius-s3-manager-testing +You can find it on Google Play using following link https://play.google.com/store/apps/details?id=asgardius.page.s3manager + +You can get help at https://forum.asgardius.company/t/s3-manager + Supported languages * English diff --git a/fastlane/metadata/android/en-US/full_description.txt b/fastlane/metadata/android/en-US/full_description.txt index e282b37..ba1210f 100644 --- a/fastlane/metadata/android/en-US/full_description.txt +++ b/fastlane/metadata/android/en-US/full_description.txt @@ -50,3 +50,7 @@ Known not supported providers
  • Google Cloud
  • Please report all issues at https://forum.asgardius.company/t/s3-manager + +This app has nonfreenet antifeature because its compatibility list. + +You can use MinIO to have a FOSS selfhosted server to use with this app From 4e0ed14ed5cd880f61d32d482fd7a2aac67f5608 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 2 Oct 2022 11:56:13 -0700 Subject: [PATCH 4/8] update description --- README.md | 10 ++++++++-- app-store-badges/fdroid.png | Bin 0 -> 14224 bytes app-store-badges/play-store.png | Bin 0 -> 13957 bytes 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 app-store-badges/fdroid.png create mode 100644 app-store-badges/play-store.png diff --git a/README.md b/README.md index c57626c..834f6d5 100644 --- a/README.md +++ b/README.md @@ -31,9 +31,15 @@ This app is a work in progress, so it have some bugs that need to be fixed You need to setup a pdf.js server to use pdf viewer. Just download latest version from official website and upload to any web server with ssl on same root domain than S3 server (can be same subdomain or a different one). Then set url to pdfjs root folder like https://example.com/pdfjs-dist -Steps to joining to Google Play Alpha testing channel are available at https://forum.asgardius.company/d/1-asgardius-s3-manager-testing +[Get it on F-Droid](https://f-droid.org/packages/asgardius.page.s3manager/) -You can find it on Google Play using following link https://play.google.com/store/apps/details?id=asgardius.page.s3manager +[Get it on Google Play](https://play.google.com/store/apps/details?id=asgardius.page.s3manager) + +Steps to joining to Google Play Alpha testing channel are available at https://forum.asgardius.company/d/1-asgardius-s3-manager-testing You can get help at https://forum.asgardius.company/t/s3-manager diff --git a/app-store-badges/fdroid.png b/app-store-badges/fdroid.png new file mode 100644 index 0000000000000000000000000000000000000000..afa603cf6df6cb9f13a4d4cd568e279caa5b0e6e GIT binary patch literal 14224 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 X%LPP+756@c3` Date: Sun, 2 Oct 2022 12:01:10 -0700 Subject: [PATCH 5/8] update description --- README.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index 834f6d5..b0466c5 100644 --- a/README.md +++ b/README.md @@ -39,7 +39,9 @@ You need to setup a pdf.js server to use pdf viewer. Just download latest versio alt="Get it on Google Play" height="80">](https://play.google.com/store/apps/details?id=asgardius.page.s3manager) -Steps to joining to Google Play Alpha testing channel are available at https://forum.asgardius.company/d/1-asgardius-s3-manager-testing +F-droid release may take a few days to get updated [More info here](https://www.f-droid.org/en/docs/FAQ_-_App_Developers/#ive-published-a-new-release-why-is-it-not-in-the-repository) + +[Steps to joining to Google Play Alpha testing channel are available here](https://forum.asgardius.company/d/1-asgardius-s3-manager-testing) You can get help at https://forum.asgardius.company/t/s3-manager From 3d44114747eb127dcdc20c1d68c8ae1f846140e3 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 2 Oct 2022 12:18:24 -0700 Subject: [PATCH 6/8] documentation --- .../java/asgardius/page/s3manager/MainActivity.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/app/src/main/java/asgardius/page/s3manager/MainActivity.java b/app/src/main/java/asgardius/page/s3manager/MainActivity.java index 8170d46..99de11f 100644 --- a/app/src/main/java/asgardius/page/s3manager/MainActivity.java +++ b/app/src/main/java/asgardius/page/s3manager/MainActivity.java @@ -98,6 +98,7 @@ public class MainActivity extends AppCompatActivity { if (db != null) { // Database Queries try { + //This retrieves credentials from selected account String query = "SELECT endpoint, username, password, region, pdfendpoint FROM account where id=\""+ Name.get(position).toString()+ "\""; Cursor cursor = db.rawQuery(query,null); if (cursor.moveToNext()){ @@ -107,6 +108,7 @@ public class MainActivity extends AppCompatActivity { location = cursor.getString(3); pdfendpoint = cursor.getString(4); db.close(); + //This launch file explorer using selected account explorer(); } } catch (Exception e) { @@ -132,6 +134,7 @@ public class MainActivity extends AppCompatActivity { if (menuItem.getTitle() == getResources().getString(R.string.accountedit_button)) { try { db = dbHelper.getWritableDatabase(); + //This retrieves credentials from selected account String query = "SELECT id, endpoint, username, password, region, pdfendpoint FROM account where id=\""+ Name.get(position).toString()+ "\""; System.out.println(query); Cursor cursor = db.rawQuery(query,null); @@ -144,6 +147,7 @@ public class MainActivity extends AppCompatActivity { pdfendpoint = cursor.getString(5); } db.close(); + //This launch account editor addaccount(true); //Toast.makeText(MainActivity.this, "This feature is not yet implemented", Toast.LENGTH_SHORT).show(); } catch (Exception e) { @@ -161,7 +165,7 @@ public class MainActivity extends AppCompatActivity { public void onClick(DialogInterface dialog, int which) { db = dbHelper.getWritableDatabase(); if (db != null) { - // Database Queries + // This remove selected user account from local database try { db.execSQL("DELETE FROM account where id=\""+ Name.get(position).toString()+ "\""); Toast.makeText(getApplicationContext(),getResources().getString(R.string.accountdel_success), Toast.LENGTH_SHORT).show(); @@ -192,17 +196,18 @@ public class MainActivity extends AppCompatActivity { } })); - //This is to launch video playback test + //This is to add new user account Button addaccount = (Button)findViewById(R.id.addaccount); addaccount.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { //buttonaction + //This launch account add screen addaccount(false); } }); - //This is to launch file explorer test + //This is to view app credits Button about = (Button)findViewById(R.id.about_button); about.setOnClickListener(new View.OnClickListener(){ @Override From 6cbcedd2fe8776342a127f419621114ef772922a Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 2 Oct 2022 17:13:18 -0700 Subject: [PATCH 7/8] fix date fields --- app/src/main/res/layout/activity_share.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/app/src/main/res/layout/activity_share.xml b/app/src/main/res/layout/activity_share.xml index aba7813..e8a8220 100644 --- a/app/src/main/res/layout/activity_share.xml +++ b/app/src/main/res/layout/activity_share.xml @@ -30,6 +30,7 @@ android:layout_weight="1" android:focusable="true" android:hint="@string/share_date" + android:maxLength="2" android:inputType="date" android:textColorHint="?attr/colorOnSecondary" tools:ignore="MissingConstraints" /> @@ -41,6 +42,7 @@ android:layout_weight="1" android:focusable="true" android:hint="@string/share_month" + android:maxLength="2" android:inputType="date" android:textColorHint="?attr/colorOnSecondary" tools:ignore="MissingConstraints" /> @@ -52,6 +54,7 @@ android:layout_weight="1" android:focusable="true" android:hint="@string/share_year" + android:maxLength="4" android:inputType="date" android:textColorHint="?attr/colorOnSecondary" tools:ignore="MissingConstraints" /> @@ -81,6 +84,7 @@ android:layout_weight="1" android:focusable="true" android:hint="@string/share_hour" + android:maxLength="2" android:inputType="date" android:textColorHint="?attr/colorOnSecondary" tools:ignore="MissingConstraints" /> @@ -92,6 +96,7 @@ android:layout_weight="1" android:focusable="true" android:hint="@string/share_minute" + android:maxLength="2" android:inputType="date" android:textColorHint="?attr/colorOnSecondary" tools:ignore="MissingConstraints" /> From b26bf9ff071010e1245a8315d9aebcc8b283e851 Mon Sep 17 00:00:00 2001 From: Page Asgardius Date: Sun, 2 Oct 2022 18:33:55 -0700 Subject: [PATCH 8/8] new release --- app/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/build.gradle b/app/build.gradle index 590c914..a7d1f9d 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "asgardius.page.s3manager" minSdk 24 targetSdk 33 - versionCode 18 - versionName "0.1.16" + versionCode 19 + versionName "0.1.17" setProperty("archivesBaseName", "s3-manager-$versionName") testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"