Compare commits
No commits in common. "main" and "0.9.3" have entirely different histories.
46 changed files with 139 additions and 421 deletions
|
@ -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="17" />
|
<bytecodeTargetLevel target="11" />
|
||||||
</component>
|
</component>
|
||||||
</project>
|
</project>
|
|
@ -1,10 +0,0 @@
|
||||||
<?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>
|
|
|
@ -4,26 +4,16 @@
|
||||||
<component name="GradleSettings">
|
<component name="GradleSettings">
|
||||||
<option name="linkedExternalProjectsSettings">
|
<option name="linkedExternalProjectsSettings">
|
||||||
<GradleProjectSettings>
|
<GradleProjectSettings>
|
||||||
<option name="externalProjectPath" value="/data/2/asgardius/StudioProjects/s3manager" />
|
<option name="testRunner" value="GRADLE" />
|
||||||
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
<option name="distributionType" value="DEFAULT_WRAPPED" />
|
||||||
<option name="modules">
|
|
||||||
<set>
|
|
||||||
<option value="/data/2/asgardius/StudioProjects/s3manager" />
|
|
||||||
<option value="/data/2/asgardius/StudioProjects/s3manager/app" />
|
|
||||||
</set>
|
|
||||||
</option>
|
|
||||||
<option name="resolveExternalAnnotations" value="false" />
|
|
||||||
</GradleProjectSettings>
|
|
||||||
<GradleProjectSettings>
|
|
||||||
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
<option name="externalProjectPath" value="$PROJECT_DIR$" />
|
||||||
<option name="gradleJvm" value="#GRADLE_LOCAL_JAVA_HOME" />
|
<option name="gradleJvm" value="Embedded JDK" />
|
||||||
<option name="modules">
|
<option name="modules">
|
||||||
<set>
|
<set>
|
||||||
<option value="/data/2/asgardius/StudioProjects/s3manager" />
|
<option value="$PROJECT_DIR$" />
|
||||||
<option value="/data/2/asgardius/StudioProjects/s3manager/app" />
|
<option value="$PROJECT_DIR$/app" />
|
||||||
</set>
|
</set>
|
||||||
</option>
|
</option>
|
||||||
<option name="resolveExternalAnnotations" value="false" />
|
|
||||||
</GradleProjectSettings>
|
</GradleProjectSettings>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
|
|
|
@ -1,11 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="ProjectMigrations">
|
|
||||||
<option name="MigrateToGradleLocalJavaHome">
|
|
||||||
<set>
|
|
||||||
<option value="/data/2/asgardius/StudioProjects/s3manager" />
|
|
||||||
<option value="$PROJECT_DIR$" />
|
|
||||||
</set>
|
|
||||||
</option>
|
|
||||||
</component>
|
|
||||||
</project>
|
|
|
@ -1,3 +1,4 @@
|
||||||
|
<?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">
|
||||||
|
@ -27,8 +28,7 @@
|
||||||
</map>
|
</map>
|
||||||
</option>
|
</option>
|
||||||
</component>
|
</component>
|
||||||
<component name="ExternalStorageConfigurationManager" enabled="true" />
|
<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
252
.idea/other.xml
|
@ -1,252 +0,0 @@
|
||||||
<?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>
|
|
|
@ -1,7 +0,0 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<project version="4">
|
|
||||||
<component name="VcsDirectoryMappings">
|
|
||||||
<mapping directory="" vcs="Git" />
|
|
||||||
<mapping directory="/data/2/asgardius/StudioProjects/s3manager" vcs="Git" />
|
|
||||||
</component>
|
|
||||||
</project>
|
|
14
README.md
14
README.md
|
@ -2,6 +2,8 @@
|
||||||
|
|
||||||
File Explorer to manage servers compatible with S3 Object Storage Protocol
|
File Explorer to manage servers compatible with S3 Object Storage Protocol
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Current feature list
|
Current feature list
|
||||||
|
|
||||||
* Audio and Video playback (opus, ogg, oga, mp3, m4a, flac, mka, mkv, mp4, m4v, webm)
|
* Audio and Video playback (opus, ogg, oga, mp3, m4a, flac, mka, mkv, mp4, m4v, webm)
|
||||||
|
@ -34,9 +36,13 @@ 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
|
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
|
||||||
|
|
||||||
|
[<img src="app-store-badges/fdroid.png"
|
||||||
|
alt="Get it on F-Droid"
|
||||||
|
height="80">](https://f-droid.org/packages/asgardius.page.s3manager/)
|
||||||
|
|
||||||
[<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.s3managermk2)
|
height="80">](https://play.google.com/store/apps/details?id=asgardius.page.s3manager)
|
||||||
|
|
||||||
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)
|
||||||
|
|
||||||
|
@ -44,7 +50,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-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)
|
||||||
|
|
||||||
Supported languages
|
Supported languages
|
||||||
|
|
||||||
|
@ -61,7 +67,7 @@ Known supported providers
|
||||||
|
|
||||||
* Amazon Web Services
|
* Amazon Web Services
|
||||||
* Scaleway Elements
|
* Scaleway Elements
|
||||||
* Wasabi Cloud (Provider broke access control intentionally since March 13 2023)
|
* Wasabi Cloud
|
||||||
* Backblaze B2
|
* Backblaze B2
|
||||||
* Cloudflare R2 (partial)
|
* Cloudflare R2 (partial)
|
||||||
* MinIO **
|
* MinIO **
|
||||||
|
@ -72,4 +78,4 @@ 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)
|
** Extra steps required (read documentation)
|
|
@ -6,11 +6,11 @@ android {
|
||||||
compileSdk 33
|
compileSdk 33
|
||||||
|
|
||||||
defaultConfig {
|
defaultConfig {
|
||||||
applicationId "asgardius.page.s3managermk2"
|
applicationId "asgardius.page.s3manager"
|
||||||
minSdk 21
|
minSdk 21
|
||||||
targetSdk 34
|
targetSdk 33
|
||||||
versionCode 2
|
versionCode 79
|
||||||
versionName "0.11.1"
|
versionName "0.9.3"
|
||||||
setProperty("archivesBaseName", "s3-manager-$versionName")
|
setProperty("archivesBaseName", "s3-manager-$versionName")
|
||||||
|
|
||||||
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
|
||||||
|
@ -29,7 +29,6 @@ android {
|
||||||
buildFeatures {
|
buildFeatures {
|
||||||
viewBinding true
|
viewBinding true
|
||||||
}
|
}
|
||||||
namespace 'asgardius.page.s3managermk2'
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
@ -37,13 +36,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.19.1"
|
def exoplayer_version = "2.18.4"
|
||||||
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.76.1"
|
def aws_version = "2.64.0"
|
||||||
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
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
|
|
@ -1,13 +1,14 @@
|
||||||
<?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"
|
||||||
android:installLocation="auto"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
xmlns:tools="http://schemas.android.com/tools">
|
package="asgardius.page.s3manager" >
|
||||||
|
|
||||||
<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"
|
||||||
|
@ -58,7 +59,6 @@
|
||||||
<activity
|
<activity
|
||||||
android:name=".Downloader"
|
android:name=".Downloader"
|
||||||
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
||||||
android:documentLaunchMode="always"
|
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".CreateBucket"
|
android:name=".CreateBucket"
|
||||||
|
@ -68,23 +68,19 @@
|
||||||
<activity
|
<activity
|
||||||
android:name=".Uploader"
|
android:name=".Uploader"
|
||||||
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
||||||
android:documentLaunchMode="always"
|
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ImageViewer"
|
android:name=".ImageViewer"
|
||||||
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:documentLaunchMode="always"
|
|
||||||
android:hardwareAccelerated="false" />
|
android:hardwareAccelerated="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".TextViewer"
|
android:name=".TextViewer"
|
||||||
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
||||||
android:documentLaunchMode="always"
|
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".WebBrowser"
|
android:name=".WebBrowser"
|
||||||
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
android:configChanges="orientation|keyboardHidden|screenSize|smallestScreenSize|screenLayout|uiMode|keyboardHidden"
|
||||||
android:documentLaunchMode="always"
|
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".AccountAdd"
|
android:name=".AccountAdd"
|
||||||
|
@ -109,7 +105,6 @@
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:launchMode="singleTask"
|
android:launchMode="singleTask"
|
||||||
android:resizeableActivity="true"
|
android:resizeableActivity="true"
|
||||||
android:documentLaunchMode="always"
|
|
||||||
android:supportsPictureInPicture="true" />
|
android:supportsPictureInPicture="true" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".MainActivity"
|
android:name=".MainActivity"
|
||||||
|
|
|
@ -9,14 +9,14 @@
|
||||||
<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.76.1</li>
|
<li>Amazon Web Services SDK 2.64.0</li>
|
||||||
<li>ExoPlayer 2.19.1</li>
|
<li>ExoPlayer 2.18.4</li>
|
||||||
<li>ZoomLayout 1.9.0</li>
|
<li>ZoomLayout 1.9.0</li>
|
||||||
<li>Adwaita Icon Theme for GNOME 43</li>
|
<li>Adwaita Icon Theme for GNOME 43</li>
|
||||||
<li>pdf.js</li>
|
<li>pdf.js</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 https://git.asgardius.company/asgardius/s3manager
|
<p>You can find source code at https://patrice.asgardius.company/gitea/asgardius/s3manager
|
||||||
<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>
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
|
@ -1,5 +1,6 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
|
import android.content.Intent;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import static android.content.ContentValues.TAG;
|
import static android.content.ContentValues.TAG;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.content.DialogInterface;
|
import android.content.DialogInterface;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.database.sqlite.SQLiteDatabase;
|
import android.database.sqlite.SQLiteDatabase;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.View;
|
import android.view.View;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AlertDialog;
|
import androidx.appcompat.app.AlertDialog;
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
@ -127,6 +127,19 @@ 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) {
|
||||||
|
@ -140,23 +153,8 @@ 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("/");
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
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;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.view.GestureDetector;
|
import android.view.GestureDetector;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
import android.annotation.SuppressLint;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
@ -11,15 +11,17 @@ import androidx.appcompat.app.AppCompatActivity;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.widget.Button;
|
import android.widget.Button;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.TextView;
|
||||||
import android.widget.Toast;
|
import android.widget.Toast;
|
||||||
|
|
||||||
import com.google.android.exoplayer2.database.StandaloneDatabaseProvider;
|
import com.google.android.exoplayer2.database.StandaloneDatabaseProvider;
|
||||||
|
import com.google.android.exoplayer2.upstream.cache.LeastRecentlyUsedCacheEvictor;
|
||||||
import com.google.android.exoplayer2.upstream.cache.SimpleCache;
|
import com.google.android.exoplayer2.upstream.cache.SimpleCache;
|
||||||
import com.google.android.material.switchmaterial.SwitchMaterial;
|
import com.google.android.material.switchmaterial.SwitchMaterial;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
|
||||||
import asgardius.page.s3managermk2.databinding.ActivitySettingsBinding;
|
import asgardius.page.s3manager.databinding.ActivitySettingsBinding;
|
||||||
|
|
||||||
public class Settings extends AppCompatActivity {
|
public class Settings extends AppCompatActivity {
|
||||||
|
|
||||||
|
@ -113,7 +115,6 @@ 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) {
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import static android.content.ContentValues.TAG;
|
import static android.content.ContentValues.TAG;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import android.app.AppOpsManager;
|
import android.app.AppOpsManager;
|
||||||
import android.app.NotificationChannel;
|
import android.app.NotificationChannel;
|
||||||
|
@ -127,17 +127,10 @@ public class VideoPlayer extends AppCompatActivity {
|
||||||
mediaSessionConnector.setPlayer(player);
|
mediaSessionConnector.setPlayer(player);
|
||||||
mediaSession.setActive(true);
|
mediaSession.setActive(true);
|
||||||
evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize);
|
evictor = new LeastRecentlyUsedCacheEvictor(maxCacheSize);
|
||||||
if(SdcardCheck.isInstalledOnSdCard(this)) {
|
simpleCache = new SimpleCache(
|
||||||
simpleCache = new SimpleCache(
|
new File(this.getFilesDir(), "media"),
|
||||||
new File(this.getExternalFilesDirs(null)[this.getExternalFilesDirs(null).length-1], "media"),
|
evictor,
|
||||||
evictor,
|
standaloneDatabaseProvider);
|
||||||
standaloneDatabaseProvider);
|
|
||||||
} else {
|
|
||||||
simpleCache = new SimpleCache(
|
|
||||||
new File(this.getFilesDir(), "media"),
|
|
||||||
evictor,
|
|
||||||
standaloneDatabaseProvider);
|
|
||||||
}
|
|
||||||
playerView.setPlayer(player);
|
playerView.setPlayer(player);
|
||||||
control = new StyledPlayerView.ControllerVisibilityListener() {
|
control = new StyledPlayerView.ControllerVisibilityListener() {
|
||||||
@Override
|
@Override
|
||||||
|
@ -163,8 +156,19 @@ 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++) {
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Share.URLify(queue.get(i)));
|
if (names.get(i).endsWith(".m3u8")) {
|
||||||
player.addMediaItem(mediaItem);
|
MediaItem mediaItem = MediaItem.fromUri(Share.URLify(queue.get(i)));
|
||||||
|
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(Share.URLify(queue.get(i))));
|
||||||
|
player.addMediaSource(mediaSource);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
getSupportActionBar().setTitle(names.get(player.getCurrentMediaItemIndex()));
|
getSupportActionBar().setTitle(names.get(player.getCurrentMediaItemIndex()));
|
||||||
player.prepare();
|
player.prepare();
|
||||||
|
@ -174,8 +178,19 @@ public class VideoPlayer extends AppCompatActivity {
|
||||||
System.out.println("Playing m3u file");
|
System.out.println("Playing m3u file");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
MediaItem mediaItem = MediaItem.fromUri(Share.URLify(videoURL));
|
if (title.endsWith(".m3u8")) {
|
||||||
player.setMediaItem(mediaItem);
|
MediaItem mediaItem = MediaItem.fromUri(Share.URLify(videoURL));
|
||||||
|
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(Share.URLify(videoURL)));
|
||||||
|
player.setMediaSource(mediaSource);
|
||||||
|
}
|
||||||
player.prepare();
|
player.prepare();
|
||||||
}
|
}
|
||||||
// Start the playback.
|
// Start the playback.
|
||||||
|
@ -367,14 +382,36 @@ 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++) {
|
||||||
MediaItem mediaItem = MediaItem.fromUri(queue.get(i));
|
if (names.get(i).endsWith(".m3u8")) {
|
||||||
player.addMediaItem(mediaItem);
|
MediaItem mediaItem = MediaItem.fromUri(queue.get(i));
|
||||||
|
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 {
|
||||||
MediaItem mediaItem = MediaItem.fromUri(videoURL);
|
if (title.endsWith(".m3u8")) {
|
||||||
player.setMediaItem(mediaItem);
|
MediaItem mediaItem = MediaItem.fromUri(videoURL);
|
||||||
|
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.
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import androidx.appcompat.app.AppCompatActivity;
|
import androidx.appcompat.app.AppCompatActivity;
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
package asgardius.page.s3managermk2;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -20,8 +20,7 @@
|
||||||
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"
|
||||||
|
@ -30,15 +29,13 @@
|
||||||
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"
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package asgardius.page.s3managermk2;
|
package asgardius.page.s3manager;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
|
@ -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 '8.5.2' apply false
|
id 'com.android.application' version '7.4.2' apply false
|
||||||
id 'com.android.library' version '8.5.2' apply false
|
id 'com.android.library' version '7.4.2' apply false
|
||||||
}
|
}
|
||||||
|
|
||||||
task clean(type: Delete) {
|
task clean(type: Delete) {
|
||||||
|
|
|
@ -1 +0,0 @@
|
||||||
* Libraries updated
|
|
|
@ -1 +0,0 @@
|
||||||
* Upgrade libraries
|
|
|
@ -1 +0,0 @@
|
||||||
* Allow move app to SD Card
|
|
|
@ -1,2 +0,0 @@
|
||||||
* Dependencies upgraded
|
|
||||||
* Fixed large file list being truncate
|
|
|
@ -46,7 +46,7 @@ Known supported providers
|
||||||
|
|
||||||
<li>Amazon Web Services</li>
|
<li>Amazon Web Services</li>
|
||||||
<li>Scaleway Elements</li>
|
<li>Scaleway Elements</li>
|
||||||
<li>Wasabi Cloud (Provider broke access control intentionally since March 13 2023)</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>
|
||||||
|
@ -60,7 +60,9 @@ Known not supported providers
|
||||||
** Extra steps required (read documentation)
|
** Extra steps required (read documentation)
|
||||||
|
|
||||||
Please report all issues at https://forum.asgardius.company/t/s3-manager
|
Please report all issues at https://forum.asgardius.company/t/s3-manager
|
||||||
https://wiki-es.asgardius.company/index.php?title=Documentacion_Asgardius_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: 30 KiB After Width: | Height: | Size: 27 KiB |
|
@ -18,6 +18,4 @@ 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
|
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
|
@ -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-8.7-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
|
|
Loading…
Reference in a new issue