diff --git a/config/common.mk b/config/common.mk
index a07a6a3..346a9ac 100644
--- a/config/common.mk
+++ b/config/common.mk
@@ -55,11 +55,10 @@ endif
# ---------------------------------------------------------------------------
# ADB security
# ---------------------------------------------------------------------------
-ifeq ($(TARGET_BUILD_VARIANT),eng)
-PRODUCT_SYSTEM_EXT_PROPERTIES += ro.adb.secure=0
-else
+ifeq ($(TARGET_BUILD_VARIANT),user)
PRODUCT_SYSTEM_EXT_PROPERTIES += ro.adb.secure=1
-PRODUCT_NOT_DEBUGGABLE_IN_USERDEBUG := true
+else
+PRODUCT_SYSTEM_EXT_PROPERTIES += ro.adb.secure=0
endif
# ---------------------------------------------------------------------------
@@ -72,7 +71,10 @@ PRODUCT_PRODUCT_PROPERTIES += \
# This is PawletOS — declare the platform feature
# ---------------------------------------------------------------------------
PRODUCT_COPY_FILES += \
- vendor/pawlet/config/permissions/me.pawlet.android.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/me.pawlet.android.xml
+ vendor/pawlet/config/permissions/me.pawlet.android.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/me.pawlet.android.xml \
+ vendor/pawlet/config/permissions/privapp-permissions-dev.oxmc.configprovisioner.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/privapp-permissions-dev.oxmc.configprovisioner.xml \
+ vendor/pawlet/config/permissions/privapp-permissions-me.pawlet.settings.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/privapp-permissions-me.pawlet.settings.xml \
+ vendor/pawlet/config/permissions/privapp-permissions-microg.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/permissions/privapp-permissions-microg.xml
# ---------------------------------------------------------------------------
# PawletOS platform resource package
@@ -101,6 +103,19 @@ PRODUCT_PACKAGE_OVERLAYS += vendor/pawlet/overlay/static
PRODUCT_PACKAGES += \
pawlet-framework-res-overlay
+# ---------------------------------------------------------------------------
+# Boot and shutdown animations
+# ---------------------------------------------------------------------------
+#PRODUCT_COPY_FILES += \
+# vendor/pawlet/media/bootanimation.zip:$(TARGET_COPY_OUT_PRODUCT)/media/bootanimation.zip \
+# vendor/pawlet/media/shutdownanim.zip:$(TARGET_COPY_OUT_PRODUCT)/media/shutdownanim.zip
+
+# ---------------------------------------------------------------------------
+# MusicFX — system sound effects processor (equalizer, reverb)
+# ---------------------------------------------------------------------------
+PRODUCT_PACKAGES += \
+ MusicFX
+
# ---------------------------------------------------------------------------
# Monet / Material You — ThemePicker + Wallpaper & style
# ---------------------------------------------------------------------------
@@ -108,7 +123,8 @@ PRODUCT_PACKAGES += \
# This overlay enables Monet color scheme, icon shape, font, and dark mode
# sections inside the app.
PRODUCT_PACKAGES += \
- ThemePickerPawletOverlay
+ ThemePickerPawletOverlay \
+ pawlet-systemui-overlay
# ---------------------------------------------------------------------------
# Version properties
diff --git a/config/microg.mk b/config/microg.mk
index c3ee134..cf058d4 100644
--- a/config/microg.mk
+++ b/config/microg.mk
@@ -11,3 +11,7 @@
WITH_GMS := true
$(call inherit-product, vendor/partner_gms/products/gms.mk)
+
+# Location — provided by microG's UnifiedNlp backend
+PRODUCT_COPY_FILES += \
+ frameworks/native/data/etc/android.hardware.location.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/android.hardware.location.xml
diff --git a/config/permissions/pawlet-rpi-base-hardware.xml b/config/permissions/pawlet-rpi-base-hardware.xml
new file mode 100644
index 0000000..90d4d35
--- /dev/null
+++ b/config/permissions/pawlet-rpi-base-hardware.xml
@@ -0,0 +1,39 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/permissions/pawlet-rpi-phone-hardware.xml b/config/permissions/pawlet-rpi-phone-hardware.xml
new file mode 100644
index 0000000..a420391
--- /dev/null
+++ b/config/permissions/pawlet-rpi-phone-hardware.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/permissions/privapp-permissions-dev.oxmc.configprovisioner.xml b/config/permissions/privapp-permissions-dev.oxmc.configprovisioner.xml
new file mode 100644
index 0000000..46c93be
--- /dev/null
+++ b/config/permissions/privapp-permissions-dev.oxmc.configprovisioner.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
diff --git a/config/permissions/privapp-permissions-me.pawlet.settings.xml b/config/permissions/privapp-permissions-me.pawlet.settings.xml
new file mode 100644
index 0000000..1ea2774
--- /dev/null
+++ b/config/permissions/privapp-permissions-me.pawlet.settings.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/config/permissions/privapp-permissions-microg.xml b/config/permissions/privapp-permissions-microg.xml
new file mode 100644
index 0000000..c9741c2
--- /dev/null
+++ b/config/permissions/privapp-permissions-microg.xml
@@ -0,0 +1,30 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/config/rpi_common.mk b/config/rpi_common.mk
index 1fefdb4..ed87531 100644
--- a/config/rpi_common.mk
+++ b/config/rpi_common.mk
@@ -10,9 +10,15 @@
#
# ---------------------------------------------------------------------------
-# MicroG (disabled until vendor/partner_gms is synced and manifest entry uncommented)
+# MicroG — open-source Google Play Services replacement
# ---------------------------------------------------------------------------
-#$(call inherit-product, vendor/pawlet/config/microg.mk)
+$(call inherit-product, vendor/pawlet/config/microg.mk)
+
+# ---------------------------------------------------------------------------
+# Base hardware and software feature declarations for all RPi devices
+# ---------------------------------------------------------------------------
+PRODUCT_COPY_FILES += \
+ vendor/pawlet/config/permissions/pawlet-rpi-base-hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/pawlet-rpi-base-hardware.xml
# ---------------------------------------------------------------------------
# RPi boot control HAL (A/B seamless updates via misc partition)
@@ -33,4 +39,5 @@ PRODUCT_PACKAGES += \
PRODUCT_SOONG_NAMESPACES += device/pawlet/rpi
PRODUCT_PACKAGES += \
- PawletUpdaterRpiOverlay
+ PawletUpdaterRpiOverlay \
+ PawletSettings
diff --git a/hal/boot_control/rpi/BootControl.cpp b/hal/boot_control/rpi/BootControl.cpp
index 723bcb5..8c5c8ee 100644
--- a/hal/boot_control/rpi/BootControl.cpp
+++ b/hal/boot_control/rpi/BootControl.cpp
@@ -63,7 +63,7 @@ void BootControl::initDefaultMisc(PawletBootControl* ctrl) {
}
bool BootControl::readMisc(PawletBootControl* ctrl) {
- android::base::unique_fd fd(
+ ::android::base::unique_fd fd(
open(misc_device_.c_str(), O_RDONLY | O_CLOEXEC));
if (fd.get() < 0) {
PLOG(ERROR) << "Cannot open misc for reading: " << misc_device_;
@@ -104,7 +104,7 @@ bool BootControl::writeMisc(const PawletBootControl& in) {
ctrl.crc32 = 0;
ctrl.crc32 = computeCrc32(&ctrl, sizeof(ctrl) - sizeof(uint32_t));
- android::base::unique_fd fd(
+ ::android::base::unique_fd fd(
open(misc_device_.c_str(), O_WRONLY | O_CLOEXEC));
if (fd.get() < 0) {
PLOG(ERROR) << "Cannot open misc for writing: " << misc_device_;
@@ -124,12 +124,12 @@ bool BootControl::writeMisc(const PawletBootControl& in) {
bool BootControl::copyBootPartition(const std::string& src,
const std::string& dst) {
- android::base::unique_fd src_fd(open(src.c_str(), O_RDONLY | O_CLOEXEC));
+ ::android::base::unique_fd src_fd(open(src.c_str(), O_RDONLY | O_CLOEXEC));
if (src_fd.get() < 0) {
PLOG(ERROR) << "Cannot open source boot partition: " << src;
return false;
}
- android::base::unique_fd dst_fd(open(dst.c_str(), O_WRONLY | O_CLOEXEC));
+ ::android::base::unique_fd dst_fd(open(dst.c_str(), O_WRONLY | O_CLOEXEC));
if (dst_fd.get() < 0) {
PLOG(ERROR) << "Cannot open dest boot partition: " << dst;
return false;
@@ -178,7 +178,7 @@ ndk::ScopedAStatus BootControl::getCurrentSlot(int32_t* out) {
// The RPi firmware writes the booted slot into the kernel cmdline via
// androidboot.slot_suffix, which init propagates to ro.boot.slot_suffix.
const std::string suffix =
- android::base::GetProperty("ro.boot.slot_suffix", "");
+ ::android::base::GetProperty("ro.boot.slot_suffix", "");
if (suffix == "_b") {
*out = 1;
} else {
diff --git a/hal/boot_control/rpi/android.hardware.boot-service.pawlet_rpi.xml b/hal/boot_control/rpi/android.hardware.boot-service.pawlet_rpi.xml
index bdb8ed2..23ccc4e 100644
--- a/hal/boot_control/rpi/android.hardware.boot-service.pawlet_rpi.xml
+++ b/hal/boot_control/rpi/android.hardware.boot-service.pawlet_rpi.xml
@@ -1,7 +1,6 @@
android.hardware.boot
- 3
IBootControl/default
diff --git a/media/bootanimation.zip b/media/bootanimation.zip
new file mode 100644
index 0000000..6f66dcb
Binary files /dev/null and b/media/bootanimation.zip differ
diff --git a/media/shutdownanim.zip b/media/shutdownanim.zip
new file mode 100644
index 0000000..3601396
Binary files /dev/null and b/media/shutdownanim.zip differ
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
index 6432532..9271337 100644
--- a/overlay/frameworks/base/core/res/res/values/config.xml
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
@@ -52,4 +52,7 @@
true
+
+
+ com.android.wallpaper
diff --git a/overlay/systemui/Android.bp b/overlay/systemui/Android.bp
new file mode 100644
index 0000000..c125ee6
--- /dev/null
+++ b/overlay/systemui/Android.bp
@@ -0,0 +1,9 @@
+// Copyright (C) 2025-2026 oxmc / PawletOS
+//
+// SPDX-License-Identifier: Apache-2.0
+
+runtime_resource_overlay {
+ name: "pawlet-systemui-overlay",
+ resource_dirs: ["res"],
+ product_specific: true,
+}
diff --git a/overlay/systemui/AndroidManifest.xml b/overlay/systemui/AndroidManifest.xml
new file mode 100644
index 0000000..0baa705
--- /dev/null
+++ b/overlay/systemui/AndroidManifest.xml
@@ -0,0 +1,17 @@
+
+
+
+
+
+
+
+
+
diff --git a/overlay/systemui/res/values/config.xml b/overlay/systemui/res/values/config.xml
new file mode 100644
index 0000000..e69b8eb
--- /dev/null
+++ b/overlay/systemui/res/values/config.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+ - @*android:string/status_bar_rotate
+ - @*android:string/status_bar_headset
+ - @*android:string/status_bar_battery
+
+
diff --git a/build/envsetup.sh b/vendorsetup.sh
similarity index 74%
rename from build/envsetup.sh
rename to vendorsetup.sh
index 53c7395..9a1ee3a 100644
--- a/build/envsetup.sh
+++ b/vendorsetup.sh
@@ -8,9 +8,6 @@
#
# PawletOS build environment helpers.
# Adapted from vendor/lineage/build/envsetup.sh (The LineageOS Project).
-# Source after AOSP's envsetup.sh:
-# source build/envsetup.sh
-# source vendor/pawlet/build/envsetup.sh
#
# ---------------------------------------------------------------------------
@@ -140,50 +137,6 @@ function pawlet_img()
bash "$mkimg"
}
-# ---------------------------------------------------------------------------
-# aospremote — add an 'aosp' git remote pointing at AOSP upstream
-# ---------------------------------------------------------------------------
-function aospremote()
-{
- local T=$(git rev-parse --show-toplevel 2>/dev/null)
- if [ -z "$T" ]; then
- echo "Git repository not found."
- return 1
- fi
- git remote rm aosp 2>/dev/null
-
- if [ -f "$T/.gitupstream" ]; then
- local REMOTE=$(cat "$T/.gitupstream" | cut -d ' ' -f 1)
- git remote add aosp ${REMOTE}
- else
- local PROJECT=$(pwd -P | sed -e "s#$ANDROID_BUILD_TOP/##; s#-caf.*##; s#/default##")
- if [ $PROJECT = "build/make" ]; then
- PROJECT="build"
- fi
- if (echo $PROJECT | grep -qv "^device"); then
- local PFX="platform/"
- fi
- git remote add aosp https://android.googlesource.com/${PFX}${PROJECT}
- fi
- echo "Remote 'aosp' created"
-}
-
-# ---------------------------------------------------------------------------
-# pawletremote — add a 'pawlet' git remote for the PawletOS Gitea instance
-# ---------------------------------------------------------------------------
-function pawletremote()
-{
- if ! git rev-parse --git-dir &>/dev/null; then
- echo ".git directory not found."
- return 1
- fi
- git remote rm pawlet 2>/dev/null
- local PROJECT=$(pwd -P | sed -e "s#$ANDROID_BUILD_TOP/##; s#/#_#g" \
- -e "s#platform/#android/#g")
- git remote add pawlet https://git.oxmc.me/PawletOS/${PROJECT}
- echo "Remote 'pawlet' created"
-}
-
# ---------------------------------------------------------------------------
# repopick — cherry-pick patches from a Gerrit-style review server
# ---------------------------------------------------------------------------
@@ -224,4 +177,4 @@ function pawlet_version()
echo "PawletOS ${ver:-unknown} (${type:-UNOFFICIAL})"
}
-echo "PawletOS build helpers loaded. Try: breakfast rpi5 | brunch rpi4"
+echo "PawletOS build helpers loaded."