M0: project scaffold (Gradle 9.3.1 / AGP 9.1.0, Compose shell, storage permissions)

This commit is contained in:
2026-10-14 14:55:10 +02:00
commit adfd95fc38
34 changed files with 1257 additions and 0 deletions
@@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<path
android:fillColor="@color/ic_launcher_background"
android:pathData="M0,0 h108 v108 h-108 z" />
</vector>
@@ -0,0 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Launcher foreground: a folder, with a second folder offset behind it for depth.
Drawn inside the 66dp safe zone of the 108dp adaptive-icon canvas.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="108dp"
android:height="108dp"
android:viewportWidth="108"
android:viewportHeight="108">
<!-- Back folder (semi-transparent, offset up and to the right) -->
<path
android:fillAlpha="0.45"
android:fillColor="#FFFFFF"
android:pathData="M34,38 h14 l5,5 h27 a4,4 0 0 1 4,4 v20 a4,4 0 0 1 -4,4 h-46 a4,4 0 0 1 -4,-4 v-25 a4,4 0 0 1 4,-4 z" />
<!-- Front folder -->
<path
android:fillColor="#FFFFFF"
android:pathData="M28,44 h14 l5,5 h27 a4,4 0 0 1 4,4 v20 a4,4 0 0 1 -4,4 h-46 a4,4 0 0 1 -4,-4 v-25 a4,4 0 0 1 4,-4 z" />
<!-- Document tab peeking out of the front folder -->
<path
android:fillColor="#1565C0"
android:pathData="M44,56 h20 a2,2 0 0 1 2,2 v12 a2,2 0 0 1 -2,2 h-20 a2,2 0 0 1 -2,-2 v-12 a2,2 0 0 1 2,-2 z" />
</vector>
@@ -0,0 +1,15 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Notification small icon. Monochrome on purpose: Android renders notification icons
as an alpha mask, so only the alpha channel matters.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#FFFFFFFF"
android:pathData="M3,6.5 a1.5,1.5 0 0 1 1.5,-1.5 h4 l2,2 h9 a1.5,1.5 0 0 1 1.5,1.5 v9 a1.5,1.5 0 0 1 -1.5,1.5 h-15 a1.5,1.5 0 0 1 -1.5,-1.5 z" />
</vector>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
@@ -0,0 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
<background android:drawable="@drawable/ic_launcher_background" />
<foreground android:drawable="@drawable/ic_launcher_foreground" />
<monochrome android:drawable="@drawable/ic_launcher_foreground" />
</adaptive-icon>
+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="window_background">#111318</color>
<color name="ic_launcher_background">#1565C0</color>
</resources>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="Theme.FileManager" parent="android:Theme.Material.NoActionBar">
<item name="android:windowBackground">@color/window_background</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">false</item>
</style>
</resources>
+5
View File
@@ -0,0 +1,5 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="window_background">#FFFBFE</color>
<color name="ic_launcher_background">#1565C0</color>
</resources>
+16
View File
@@ -0,0 +1,16 @@
<resources xmlns:tools="http://schemas.android.com/tools">
<!--
All user-visible text lives here. English is currently the only locale, but keeping the
text in resources is what makes a translation possible later at all — Play's automatic
translation covers the store listing, not the app UI. Plurals are declared properly so a
language with more than two plural forms needs no code change.
NOTE: `app_name` is a working title. The Play listing needs a distinctive name before
the first upload (it is changeable afterwards, unlike the applicationId).
-->
<string name="app_name">File Manager</string>
<!-- Browser empty state (M0 placeholder for the real file list). -->
<string name="empty_state_title">Your files, without the clutter</string>
<string name="empty_state_body">Ad-free, account-free and completely offline. Browsing is wired up next.</string>
</resources>
+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<!--
Compose owns the real theming; this XML theme only prevents a jarring flash
before the first frame. It is intentionally a framework theme so the app
needs no Material Components (View-system) dependency.
-->
<style name="Theme.FileManager" parent="android:Theme.Material.Light.NoActionBar">
<item name="android:windowBackground">@color/window_background</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowLightStatusBar">true</item>
</style>
</resources>
+9
View File
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Bookmarks, recents and settings are device-specific, so nothing this app stores is
worth carrying to another device or restoring into a fresh install.
-->
<full-backup-content>
<exclude domain="sharedpref" path="." />
<exclude domain="database" path="." />
</full-backup-content>
@@ -0,0 +1,11 @@
<?xml version="1.0" encoding="utf-8"?>
<data-extraction-rules>
<cloud-backup>
<exclude domain="sharedpref" path="." />
<exclude domain="database" path="." />
</cloud-backup>
<device-transfer>
<exclude domain="sharedpref" path="." />
<exclude domain="database" path="." />
</device-transfer>
</data-extraction-rules>