Compare commits

...

16 commits
0.0.2 ... main

Author SHA1 Message Date
0c59f14fd5 new release 2024-08-20 10:06:15 -07:00
6a84adfc13 update readme 2024-08-10 11:44:17 -07:00
4c1b1cbbcf test release 2024-08-10 11:07:17 -07:00
27d415a8d2 test release 2024-08-10 11:04:40 -07:00
19d6e682b8 update images 2024-08-10 07:30:02 -07:00
f5447f84b6 deprecation 2024-01-29 08:42:13 -07:00
34d176efe1 new release 2023-12-07 05:44:20 -07:00
7149bd22fc update readme 2023-10-18 16:47:36 -07:00
b47a7c8ab6 update readme 2023-10-18 16:45:18 -07:00
1454f63ad4 new release 2023-07-28 04:48:00 -07:00
03b5f4f19a new release 2023-07-27 15:32:48 -07:00
29f5aa5b60 new release 2023-06-25 19:10:33 -07:00
d9e22dcc92 update readme 2023-06-22 09:34:17 -07:00
e0a01c29f2 new release 2023-06-07 11:22:26 -07:00
1258781d01 new release 2023-05-05 17:47:10 -07:00
ebd7a94930 new release 2023-04-21 07:16:09 -07:00
39 changed files with 413 additions and 136 deletions

View file

@ -1,6 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="CompilerConfiguration"> <component name="CompilerConfiguration">
<bytecodeTargetLevel target="11" /> <bytecodeTargetLevel target="17" />
</component> </component>
</project> </project>

View file

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="deploymentTargetSelector">
<selectionStates>
<SelectionState runConfigName="app">
<option name="selectionMode" value="DROPDOWN" />
</SelectionState>
</selectionStates>
</component>
</project>

View file

@ -4,16 +4,26 @@
<component name="GradleSettings"> <component name="GradleSettings">
<option name="linkedExternalProjectsSettings"> <option name="linkedExternalProjectsSettings">
<GradleProjectSettings> <GradleProjectSettings>
<option name="testRunner" value="GRADLE" /> <option name="externalProjectPath" value="/data/2/asgardius/StudioProjects/s3music" />
<option name="distributionType" value="DEFAULT_WRAPPED" /> <option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="Embedded JDK" />
<option name="modules"> <option name="modules">
<set> <set>
<option value="$PROJECT_DIR$" /> <option value="/data/2/asgardius/StudioProjects/s3music" />
<option value="$PROJECT_DIR$/app" /> <option value="/data/2/asgardius/StudioProjects/s3music/app" />
</set> </set>
</option> </option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings>
<GradleProjectSettings>
<option name="externalProjectPath" value="$PROJECT_DIR$" />
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
<option name="modules">
<set>
<option value="/data/2/asgardius/StudioProjects/s3music" />
<option value="/data/2/asgardius/StudioProjects/s3music/app" />
</set>
</option>
<option name="resolveExternalAnnotations" value="false" />
</GradleProjectSettings> </GradleProjectSettings>
</option> </option>
</component> </component>

11
.idea/migrations.xml Normal file
View file

@ -0,0 +1,11 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="ProjectMigrations">
<option name="MigrateToGradleLocalJavaHome">
<set>
<option value="/data/2/asgardius/StudioProjects/s3music" />
<option value="$PROJECT_DIR$" />
</set>
</option>
</component>
</project>

View file

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4"> <project version="4">
<component name="DesignSurface"> <component name="DesignSurface">
<option name="filePathToZoomLevelMap"> <option name="filePathToZoomLevelMap">
@ -28,7 +27,7 @@
</map> </map>
</option> </option>
</component> </component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_11" default="true" project-jdk-name="11" project-jdk-type="JavaSDK"> <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="jbr-17" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/build/classes" /> <output url="file://$PROJECT_DIR$/build/classes" />
</component> </component>
<component name="ProjectType"> <component name="ProjectType">

252
.idea/other.xml Normal file
View file

@ -0,0 +1,252 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="direct_access_persist.xml">
<option name="deviceSelectionList">
<list>
<PersistentDeviceSelectionData>
<option name="api" value="27" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="F01L" />
<option name="id" value="F01L" />
<option name="manufacturer" value="FUJITSU" />
<option name="name" value="F-01L" />
<option name="screenDensity" value="360" />
<option name="screenX" value="720" />
<option name="screenY" value="1280" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="28" />
<option name="brand" value="DOCOMO" />
<option name="codename" value="SH-01L" />
<option name="id" value="SH-01L" />
<option name="manufacturer" value="SHARP" />
<option name="name" value="AQUOS sense2 SH-01L" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1080" />
<option name="screenY" value="2160" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="samsung" />
<option name="codename" value="a51" />
<option name="id" value="a51" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy A51" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="akita" />
<option name="id" value="akita" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="b0q" />
<option name="id" value="b0q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S22 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="32" />
<option name="brand" value="google" />
<option name="codename" value="bluejay" />
<option name="id" value="bluejay" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="29" />
<option name="brand" value="samsung" />
<option name="codename" value="crownqlteue" />
<option name="id" value="crownqlteue" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Note9" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2220" />
<option name="screenY" value="1080" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="dm3q" />
<option name="id" value="dm3q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S23 Ultra" />
<option name="screenDensity" value="600" />
<option name="screenX" value="1440" />
<option name="screenY" value="3088" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix" />
<option name="id" value="felix" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="felix_camera" />
<option name="id" value="felix_camera" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Fold (Camera-enabled)" />
<option name="screenDensity" value="420" />
<option name="screenX" value="2208" />
<option name="screenY" value="1840" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="samsung" />
<option name="codename" value="gts8uwifi" />
<option name="id" value="gts8uwifi" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Tab S8 Ultra" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1848" />
<option name="screenY" value="2960" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="husky" />
<option name="id" value="husky" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8 Pro" />
<option name="screenDensity" value="390" />
<option name="screenX" value="1008" />
<option name="screenY" value="2244" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="motorola" />
<option name="codename" value="java" />
<option name="id" value="java" />
<option name="manufacturer" value="Motorola" />
<option name="name" value="G20" />
<option name="screenDensity" value="280" />
<option name="screenX" value="720" />
<option name="screenY" value="1600" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="lynx" />
<option name="id" value="lynx" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7a" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="31" />
<option name="brand" value="google" />
<option name="codename" value="oriole" />
<option name="id" value="oriole" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 6" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="panther" />
<option name="id" value="panther" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 7" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="samsung" />
<option name="codename" value="q5q" />
<option name="id" value="q5q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy Z Fold5" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1812" />
<option name="screenY" value="2176" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="r11" />
<option name="id" value="r11" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Watch" />
<option name="screenDensity" value="320" />
<option name="screenX" value="384" />
<option name="screenY" value="384" />
<option name="type" value="WEAR_OS" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="30" />
<option name="brand" value="google" />
<option name="codename" value="redfin" />
<option name="id" value="redfin" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 5" />
<option name="screenDensity" value="440" />
<option name="screenX" value="1080" />
<option name="screenY" value="2340" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="34" />
<option name="brand" value="google" />
<option name="codename" value="shiba" />
<option name="id" value="shiba" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel 8" />
<option name="screenDensity" value="420" />
<option name="screenX" value="1080" />
<option name="screenY" value="2400" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="33" />
<option name="brand" value="google" />
<option name="codename" value="tangorpro" />
<option name="id" value="tangorpro" />
<option name="manufacturer" value="Google" />
<option name="name" value="Pixel Tablet" />
<option name="screenDensity" value="320" />
<option name="screenX" value="1600" />
<option name="screenY" value="2560" />
</PersistentDeviceSelectionData>
<PersistentDeviceSelectionData>
<option name="api" value="29" />
<option name="brand" value="samsung" />
<option name="codename" value="x1q" />
<option name="id" value="x1q" />
<option name="manufacturer" value="Samsung" />
<option name="name" value="Galaxy S20" />
<option name="screenDensity" value="480" />
<option name="screenX" value="1440" />
<option name="screenY" value="3200" />
</PersistentDeviceSelectionData>
</list>
</option>
</component>
</project>

7
.idea/vcs.xml Normal file
View file

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="/data/2/asgardius/StudioProjects/s3music" vcs="Git" />
<mapping directory="$PROJECT_DIR$" vcs="Git" />
</component>
</project>

View file

@ -15,13 +15,9 @@ This app is based on Asgardius S3 Manager
This app is a work in progress, so it have some bugs that need to be fixed This app is a work in progress, so it have some bugs that need to be fixed
[<img src="app-store-badges/fdroid.png"
alt="Get it on F-Droid"
height="80">](https://f-droid.org/packages/asgardius.page.s3music/)
[<img src="app-store-badges/play-store.png" [<img src="app-store-badges/play-store.png"
alt="Get it on Google Play" alt="Get it on Google Play"
height="80">](https://play.google.com/store/apps/details?id=asgardius.page.s3music) height="80">](https://play.google.com/store/apps/details?id=asgardius.page.s3musicmk2)
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) 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)
@ -29,7 +25,7 @@ F-droid release may take a few days to get updated [More info here](https://www.
You can get help at https://forum.asgardius.company/t/s3-manager You can get help at https://forum.asgardius.company/t/s3-manager
You can find app documentation at https://wiki.asgardius.company/shelves/asgardius-s3-manager-english (english) or https://wiki.asgardius.company/shelves/asgardius-s3-manager-espanol (spanish) You can find app documentation at https://wiki-en.asgardius.company/index.php?title=Asgardius_S3_Manager_Documentation (english) or https://wiki-es.asgardius.company/index.php?title=Documentacion_Asgardius_S3_Manager (spanish)
Supported languages Supported languages
@ -48,13 +44,11 @@ Known supported providers
* Scaleway Elements * Scaleway Elements
* Wasabi Cloud * Wasabi Cloud
* Backblaze B2 * Backblaze B2
* Cloudflare R2 (partial) * Cloudflare R2
* MinIO ** * MinIO
* Garage ** * Garage
Known not supported providers Known not supported providers
* Google Cloud (Not compatible with S3v4) * Google Cloud (Not compatible with S3v4)
* Oracle Cloud (compatibility issues with S3v4) * Oracle Cloud (compatibility issues with S3v4)
** Extra steps required (read documentation)

View file

@ -6,11 +6,11 @@ android {
compileSdk 33 compileSdk 33
defaultConfig { defaultConfig {
applicationId "asgardius.page.s3music" applicationId "asgardius.page.s3musicmk2"
minSdk 21 minSdk 21
targetSdk 33 targetSdk 34
versionCode 5 versionCode 2
versionName "0.0.2" versionName "0.3.1"
setProperty("archivesBaseName", "s3-music-$versionName") setProperty("archivesBaseName", "s3-music-$versionName")
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@ -29,6 +29,7 @@ android {
buildFeatures { buildFeatures {
viewBinding true viewBinding true
} }
namespace 'asgardius.page.s3musicmk2'
} }
dependencies { dependencies {
@ -36,13 +37,13 @@ dependencies {
implementation 'androidx.appcompat:appcompat:1.6.1' implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.8.0' implementation 'com.google.android.material:material:1.8.0'
implementation 'androidx.constraintlayout:constraintlayout:2.1.4' implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
def exoplayer_version = "2.18.4" def exoplayer_version = "2.19.1"
implementation "com.google.android.exoplayer:exoplayer:$exoplayer_version" implementation "com.google.android.exoplayer:exoplayer:$exoplayer_version"
implementation "com.google.android.exoplayer:extension-mediasession:$exoplayer_version" implementation "com.google.android.exoplayer:extension-mediasession:$exoplayer_version"
implementation 'androidx.recyclerview:recyclerview:1.2.1' implementation 'androidx.recyclerview:recyclerview:1.2.1'
implementation"com.otaliastudios:zoomlayout:1.9.0" implementation"com.otaliastudios:zoomlayout:1.9.0"
// BEGIN AWS DEPENDENCIES // BEGIN AWS DEPENDENCIES
def aws_version = "2.64.0" def aws_version = "2.76.1"
implementation "com.amazonaws:aws-android-sdk-s3:$aws_version" implementation "com.amazonaws:aws-android-sdk-s3:$aws_version"
implementation ("com.amazonaws:aws-android-sdk-mobile-client:$aws_version") { transitive = true } implementation ("com.amazonaws:aws-android-sdk-mobile-client:$aws_version") { transitive = true }
// END AWS DEPENDENCIES // END AWS DEPENDENCIES

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.content.Context; import android.content.Context;

View file

@ -1,14 +1,13 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android" <manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:installLocation="auto"
package="asgardius.page.s3music" > xmlns:tools="http://schemas.android.com/tools">
<uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.INTERNET" />
<uses-permission <uses-permission
android:name="android.permission.READ_PHONE_STATE" android:name="android.permission.READ_PHONE_STATE"
tools:node="remove" /> tools:node="remove" />
<uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<application <application
android:allowBackup="true" android:allowBackup="true"
@ -56,6 +55,7 @@
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden" android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
android:exported="false" android:exported="false"
android:launchMode="singleTask" android:launchMode="singleTask"
android:documentLaunchMode="always"
android:resizeableActivity="true" /> android:resizeableActivity="true" />
<activity <activity
android:name=".MainActivity" android:name=".MainActivity"

View file

@ -9,13 +9,13 @@
<H3>Created by Page Asgardius</H3> <H3>Created by Page Asgardius</H3>
<H3>Libraries used in this app</H3> <H3>Libraries used in this app</H3>
<ul> <ul>
<li>Amazon Web Services SDK 2.64.0</li> <li>Amazon Web Services SDK 2.76.1</li>
<li>ExoPlayer 2.18.4</li> <li>ExoPlayer 2.19.1</li>
<li>Adwaita Icon Theme for GNOME 43</li> <li>Adwaita Icon Theme for GNOME 43</li>
<li>Font Awesome icons</li> <li>Font Awesome icons</li>
</ul> </ul>
<H3>This software released under GNU General Public License 3</H3> <H3>This software released under GNU General Public License 3</H3>
<p>You can find source code at patrice.asgardius.company/gitea/asgardius/s3music <p>You can find source code at https://git.asgardius.company/asgardius/s3music
<br> <br>
You need to setup a pdf.js server to use pdf viewer. You can use https://office.asgardius.company/pdfjs or setup your own. You need to setup a pdf.js server to use pdf viewer. You can use https://office.asgardius.company/pdfjs or setup your own.
<br> <br>

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.content.Intent; import android.content.Intent;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Context; import android.content.Context;

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.content.DialogInterface; import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.content.Context; import android.content.Context;
import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase;

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.content.Intent; import android.content.Intent;
import android.os.Bundle; import android.os.Bundle;
@ -16,13 +16,11 @@ import com.amazonaws.regions.Region;
import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.AmazonS3Client; import com.amazonaws.services.s3.AmazonS3Client;
import com.amazonaws.services.s3.S3ClientOptions; import com.amazonaws.services.s3.S3ClientOptions;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;
import com.amazonaws.services.s3.model.ListObjectsRequest; import com.amazonaws.services.s3.model.ListObjectsRequest;
import com.amazonaws.services.s3.model.ObjectListing; import com.amazonaws.services.s3.model.ObjectListing;
import com.amazonaws.services.s3.model.S3ObjectSummary; import com.amazonaws.services.s3.model.S3ObjectSummary;
import java.io.BufferedReader; import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.InputStreamReader; import java.io.InputStreamReader;
import java.net.URL; import java.net.URL;
import java.util.ArrayList; import java.util.ArrayList;
@ -117,19 +115,6 @@ public class ObjectSelect extends AppCompatActivity {
//i++; //i++;
} }
while (result.isTruncated()) {
result = s3client.listNextBatchOfObjects (result);
od = result.getCommonPrefixes();
for (String os : od) {
filename = os.split("/");
if (filename.length == treelevel+1) {
object.add(filename[treelevel]+"/");
}
//i++;
}
}
//This get file list //This get file list
List<S3ObjectSummary> ob = result.getObjectSummaries(); List<S3ObjectSummary> ob = result.getObjectSummaries();
for (S3ObjectSummary os : ob) { for (S3ObjectSummary os : ob) {
@ -143,8 +128,23 @@ public class ObjectSelect extends AppCompatActivity {
//i++; //i++;
} }
//Get next batch
while (result.isTruncated()) { while (result.isTruncated()) {
result = s3client.listNextBatchOfObjects (result); result = s3client.listNextBatchOfObjects (result);
//This get folder list
od = result.getCommonPrefixes();
for (String os : od) {
filename = os.split("/");
if (filename.length == treelevel+1) {
object.add(filename[treelevel]+"/");
}
//i++;
}
//This get file list
ob = result.getObjectSummaries(); ob = result.getObjectSummaries();
for (S3ObjectSummary os : ob) { for (S3ObjectSummary os : ob) {
filename = os.getKey().split("/"); filename = os.getKey().split("/");

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import com.amazonaws.services.s3.AmazonS3; import com.amazonaws.services.s3.AmazonS3;
import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest; import com.amazonaws.services.s3.model.GeneratePresignedUrlRequest;

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.content.Context; import android.content.Context;
import android.view.GestureDetector; import android.view.GestureDetector;

View file

@ -0,0 +1,21 @@
package asgardius.page.s3musicmk2;
import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
public class SdcardCheck {
public static boolean isInstalledOnSdCard(Context context) {
PackageManager pm = context.getPackageManager();
try {
PackageInfo pi = pm.getPackageInfo(context.getPackageName(), 0);
ApplicationInfo ai = pi.applicationInfo;
return (ai.flags & ApplicationInfo.FLAG_EXTERNAL_STORAGE) == ApplicationInfo.FLAG_EXTERNAL_STORAGE;
} catch (PackageManager.NameNotFoundException e) {
// ignore
}
return false;
}
}

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.content.Intent; import android.content.Intent;
@ -19,7 +19,7 @@ import com.google.android.material.switchmaterial.SwitchMaterial;
import java.io.File; import java.io.File;
import asgardius.page.s3music.databinding.ActivitySettingsBinding; import asgardius.page.s3musicmk2.databinding.ActivitySettingsBinding;
public class Settings extends AppCompatActivity { public class Settings extends AppCompatActivity {
@ -113,6 +113,7 @@ public class Settings extends AppCompatActivity {
try { try {
standaloneDatabaseProvider = new StandaloneDatabaseProvider(getApplicationContext()); standaloneDatabaseProvider = new StandaloneDatabaseProvider(getApplicationContext());
SimpleCache.delete(new File(getApplicationContext().getFilesDir(), "media"), standaloneDatabaseProvider); SimpleCache.delete(new File(getApplicationContext().getFilesDir(), "media"), standaloneDatabaseProvider);
SimpleCache.delete(new File(getApplicationContext().getExternalFilesDirs(null)[getApplicationContext().getExternalFilesDirs(null).length-1], "media"), standaloneDatabaseProvider);
standaloneDatabaseProvider.close(); standaloneDatabaseProvider.close();
Toast.makeText(getApplicationContext(),getResources().getString(R.string.clearcache_ok), Toast.LENGTH_SHORT).show(); Toast.makeText(getApplicationContext(),getResources().getString(R.string.clearcache_ok), Toast.LENGTH_SHORT).show();
} catch (Exception e) { } catch (Exception e) {

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import android.app.NotificationChannel; import android.app.NotificationChannel;
import android.app.NotificationManager; import android.app.NotificationManager;
@ -183,12 +183,19 @@ public class VideoPlayer extends AppCompatActivity {
player = new ExoPlayer.Builder(this).setLoadControl(loadControl).build(); player = new ExoPlayer.Builder(this).setLoadControl(loadControl).build();
player.setAudioAttributes(audioAttributes, true); player.setAudioAttributes(audioAttributes, true);
mediaSessionConnector.setPlayer(player); mediaSessionConnector.setPlayer(player);
mediaSession.setActive(true); //mediaSession.setActive(true);
evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize); evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize);
simpleCache = new SimpleCache( if(SdcardCheck.isInstalledOnSdCard(this)) {
new File(this.getFilesDir(), "media"), simpleCache = new SimpleCache(
evictor, new File(this.getExternalFilesDirs(null)[this.getExternalFilesDirs(null).length-1], "media"),
standaloneDatabaseProvider); evictor,
standaloneDatabaseProvider);
} else {
simpleCache = new SimpleCache(
new File(this.getFilesDir(), "media"),
evictor,
standaloneDatabaseProvider);
}
playerView.setPlayer(player); playerView.setPlayer(player);
controlView.setPlayer(player); controlView.setPlayer(player);
playerView.setUseController(false); playerView.setUseController(false);
@ -205,19 +212,8 @@ public class VideoPlayer extends AppCompatActivity {
playerNotificationManager.setPlayer(player); playerNotificationManager.setPlayer(player);
if (isplaylist) { if (isplaylist) {
for (int i = 0; i < queue.size(); i++) { for (int i = 0; i < queue.size(); i++) {
if (names.get(i).endsWith(".m3u8")) { MediaItem mediaItem = MediaItem.fromUri(URLify(queue.get(i)));
MediaItem mediaItem = MediaItem.fromUri(URLify(queue.get(i))); player.addMediaItem(mediaItem);
player.addMediaItem(mediaItem);
} else {
mediaSource = new ProgressiveMediaSource.Factory(
new CacheDataSource.Factory()
.setCache(simpleCache)
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setUserAgent("S3 Manager"))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
).createMediaSource(MediaItem.fromUri(URLify(queue.get(i))));
player.addMediaSource(mediaSource);
}
} }
getSupportActionBar().setTitle(names.get(player.getCurrentMediaItemIndex())); getSupportActionBar().setTitle(names.get(player.getCurrentMediaItemIndex()));
player.prepare(); player.prepare();
@ -227,19 +223,8 @@ public class VideoPlayer extends AppCompatActivity {
System.out.println("Playing m3u file"); System.out.println("Playing m3u file");
} }
} else { } else {
if (title.endsWith(".m3u8")) { MediaItem mediaItem = MediaItem.fromUri(URLify(videoURL));
MediaItem mediaItem = MediaItem.fromUri(URLify(videoURL)); player.setMediaItem(mediaItem);
player.setMediaItem(mediaItem);
} else {
mediaSource = new ProgressiveMediaSource.Factory(
new CacheDataSource.Factory()
.setCache(simpleCache)
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setUserAgent("S3 Manager"))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
).createMediaSource(MediaItem.fromUri(URLify(videoURL)));
player.setMediaSource(mediaSource);
}
player.prepare(); player.prepare();
} }
// Start the playback. // Start the playback.
@ -296,6 +281,7 @@ public class VideoPlayer extends AppCompatActivity {
public void onPlaybackStateChanged(@Player.State int state) { public void onPlaybackStateChanged(@Player.State int state) {
if (state == 3) { if (state == 3) {
// Active playback. // Active playback.
mediaSession.setActive(true);
success = true; success = true;
//Acquiring WakeLock and WifiLock if not held //Acquiring WakeLock and WifiLock if not held
if (!mWifiLock.isHeld()) { if (!mWifiLock.isHeld()) {
@ -319,6 +305,7 @@ public class VideoPlayer extends AppCompatActivity {
} }
} else { } else {
//Player inactive //Player inactive
mediaSession.setActive(false);
//Releasing WifiLock and WakeLock if held //Releasing WifiLock and WakeLock if held
if (mWifiLock.isHeld()) { if (mWifiLock.isHeld()) {
mWifiLock.release(); mWifiLock.release();
@ -371,36 +358,14 @@ public class VideoPlayer extends AppCompatActivity {
if (isplaylist) { if (isplaylist) {
player.clearMediaItems(); player.clearMediaItems();
for (int i = 0; i < queue.size(); i++) { for (int i = 0; i < queue.size(); i++) {
if (names.get(i).endsWith(".m3u8")) { MediaItem mediaItem = MediaItem.fromUri(queue.get(i));
MediaItem mediaItem = MediaItem.fromUri(queue.get(i)); player.addMediaItem(mediaItem);
player.addMediaItem(mediaItem);
} else {
mediaSource = new ProgressiveMediaSource.Factory(
new CacheDataSource.Factory()
.setCache(simpleCache)
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setUserAgent("S3 Manager"))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
).createMediaSource(MediaItem.fromUri(Uri.parse(queue.get(i))));
player.addMediaSource(mediaSource);
}
} }
player.prepare(); player.prepare();
player.seekTo(names.indexOf(title), 0); player.seekTo(names.indexOf(title), 0);
} else { } else {
if (title.endsWith(".m3u8")) { MediaItem mediaItem = MediaItem.fromUri(videoURL);
MediaItem mediaItem = MediaItem.fromUri(videoURL); player.setMediaItem(mediaItem);
player.setMediaItem(mediaItem);
} else {
mediaSource = new ProgressiveMediaSource.Factory(
new CacheDataSource.Factory()
.setCache(simpleCache)
.setUpstreamDataSourceFactory(new DefaultHttpDataSource.Factory()
.setUserAgent("S3 Manager"))
.setFlags(CacheDataSource.FLAG_IGNORE_CACHE_ON_ERROR)
).createMediaSource(MediaItem.fromUri(Uri.parse(videoURL)));
player.setMediaSource(mediaSource);
}
player.prepare(); player.prepare();
} }
// Start the playback. // Start the playback.

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatActivity;

View file

@ -20,7 +20,8 @@
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/videocache" android:text="@string/videocache"
android:textAlignment="center" android:textAlignment="center"
android:textSize="25sp"/> android:textSize="25sp"
android:visibility="gone" />
<EditText <EditText
android:id="@+id/videocache" android:id="@+id/videocache"
@ -29,13 +30,15 @@
android:focusable="true" android:focusable="true"
android:hint="@string/videocache" android:hint="@string/videocache"
android:inputType="number" android:inputType="number"
android:textColorHint="?attr/colorOnSecondary"/> android:textColorHint="?attr/colorOnSecondary"
android:visibility="gone" />
<Button <Button
android:id="@+id/clearcache" android:id="@+id/clearcache"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="70dp" android:layout_height="70dp"
android:text="@string/clearcache" /> android:text="@string/clearcache"
android:visibility="gone" />
<TextView <TextView
android:layout_width="match_parent" android:layout_width="match_parent"

View file

@ -20,7 +20,7 @@
<string name="download_failed">Descarga fallida</string> <string name="download_failed">Descarga fallida</string>
<string name="upload_failed">Subida fallida</string> <string name="upload_failed">Subida fallida</string>
<string name="success">Éxito</string> <string name="success">Éxito</string>
<string name="create_bucket">Crear nuevo bucket</string> <string name="create_bucket">No se encontró nada</string>
<string name="invalid_expiration_date">La fecha de caducidad debe ser inferior a 7 días</string> <string name="invalid_expiration_date">La fecha de caducidad debe ser inferior a 7 días</string>
<string name="create_bucket_success">Bucket creado exitosamente</string> <string name="create_bucket_success">Bucket creado exitosamente</string>
<string name="upload_file_here">Subir archivo en el directorio actual</string> <string name="upload_file_here">Subir archivo en el directorio actual</string>

View file

@ -31,7 +31,7 @@
<string name="folder_size">Folder Size</string> <string name="folder_size">Folder Size</string>
<string name="bucket_size">Bucket Size</string> <string name="bucket_size">Bucket Size</string>
<string name="file_count">Files</string> <string name="file_count">Files</string>
<string name="create_bucket">Create new bucket</string> <string name="create_bucket">Nothing found here</string>
<string name="create_bucket_success">Bucket created successfully</string> <string name="create_bucket_success">Bucket created successfully</string>
<string name="upload_file_here">Upload file in current folder</string> <string name="upload_file_here">Upload file in current folder</string>
<string name="upload_folder_here">Upload folder in current folder</string> <string name="upload_folder_here">Upload folder in current folder</string>

View file

@ -1,4 +1,4 @@
package asgardius.page.s3music; package asgardius.page.s3musicmk2;
import org.junit.Test; import org.junit.Test;

View file

@ -1,7 +1,7 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules. // Top-level build file where you can add configuration options common to all sub-projects/modules.
plugins { plugins {
id 'com.android.application' version '7.4.2' apply false id 'com.android.application' version '8.5.2' apply false
id 'com.android.library' version '7.4.2' apply false id 'com.android.library' version '8.5.2' apply false
} }
task clean(type: Delete) { task clean(type: Delete) {

View file

@ -0,0 +1 @@
* Allow move app to SD Card

View file

@ -0,0 +1,2 @@
* Dependencies upgraded
* Fixed large file list being truncate

View file

@ -0,0 +1 @@
* Libraries updated

View file

@ -0,0 +1 @@
* Music player as separate task

View file

@ -0,0 +1 @@
* Upgrade libraries

View file

@ -30,20 +30,15 @@ Known supported providers
<li>Wasabi Cloud</li> <li>Wasabi Cloud</li>
<li>Backblaze B2</li> <li>Backblaze B2</li>
<li>Cloudflare R2 (partial)</li> <li>Cloudflare R2 (partial)</li>
<li>MinIO **</li> <li>MinIO</li>
<li>Garage **</li> <li>Garage</li>
Known not supported providers Known not supported providers
<li>Google Cloud (Not compatible with S3v4)</li> <li>Google Cloud (Not compatible with S3v4)</li>
<li>Oracle Cloud (compatibility issues with S3v4)</li> <li>Oracle Cloud (compatibility issues with S3v4)</li>
** Extra steps required (read documentation)
Please report all issues at https://forum.asgardius.company/t/s3-manager You can find app documentation at https://wiki-en.asgardius.company/index.php?title=Asgardius_S3_Manager_Documentation (english) or https://wiki-es.asgardius.company/index.php?title=Documentacion_Asgardius_S3_Manager (spanish)
You can find app documentation at https://wiki.asgardius.company/shelves/asgardius-s3-manager-english (english) or https://wiki.asgardius.company/shelves/asgardius-s3-manager-espanol (spanish)
This app has nonfreenet antifeature because its compatibility list.
You can use MinIO or Garage to have a FOSS selfhosted server to use with this app You can use MinIO or Garage to have a FOSS selfhosted server to use with this app

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View file

@ -18,4 +18,6 @@ android.useAndroidX=true
# Enables namespacing of each library's R class so that its R class includes only the # Enables namespacing of each library's R class so that its R class includes only the
# resources declared in the library itself and none from the library's dependencies, # resources declared in the library itself and none from the library's dependencies,
# thereby reducing the size of the R class for that library # thereby reducing the size of the R class for that library
android.nonTransitiveRClass=true android.nonTransitiveRClass=true
android.defaults.buildfeatures.buildconfig=true
android.nonFinalResIds=false

View file

@ -1,6 +1,6 @@
#Sat Aug 27 12:12:23 MST 2022 #Sat Aug 27 12:12:23 MST 2022
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip
distributionPath=wrapper/dists distributionPath=wrapper/dists
zipStorePath=wrapper/dists zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME