Clean slate: remove old KernelSU module for LSPosed rewrite
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1,2 +1,3 @@
|
||||
.claude/
|
||||
aapt2-build/
|
||||
tools/aapt-cmake-build/
|
||||
|
||||
111
build.sh
111
build.sh
@@ -1,111 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Build Miracast Enabler KernelSU/Magisk module zip
|
||||
#
|
||||
# The module uses fabricated overlays at runtime (no APK needed).
|
||||
# If you have a local aapt2 binary (e.g. pulled from the phone),
|
||||
# set AAPT2=/path/to/aapt2 and FRAMEWORK_RES=/path/to/framework-res.apk
|
||||
# to also build an RRO APK as a fallback for pre-Android 12 devices.
|
||||
set -e
|
||||
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
MODULE_ZIP="miracast-enabler-v1.0.0.zip"
|
||||
|
||||
echo "=== Miracast Enabler Build ==="
|
||||
echo ""
|
||||
|
||||
# Optional: build RRO APK if tools are available
|
||||
AAPT2="${AAPT2:-tools/aapt2}"
|
||||
FRAMEWORK_RES="${FRAMEWORK_RES:-tools/framework-res.apk}"
|
||||
|
||||
if [ -x "$AAPT2" ] && [ -f "$FRAMEWORK_RES" ]; then
|
||||
echo "[1/3] Building RRO overlay APK..."
|
||||
|
||||
OVERLAY_DIR="overlay"
|
||||
rm -rf "$OVERLAY_DIR/build"
|
||||
mkdir -p "$OVERLAY_DIR/build"
|
||||
|
||||
"$AAPT2" compile \
|
||||
--dir "$OVERLAY_DIR/res" \
|
||||
-o "$OVERLAY_DIR/build/compiled.zip"
|
||||
|
||||
"$AAPT2" link \
|
||||
--manifest "$OVERLAY_DIR/AndroidManifest.xml" \
|
||||
-I "$FRAMEWORK_RES" \
|
||||
-o "$OVERLAY_DIR/build/MiracastEnablerOverlay.apk" \
|
||||
"$OVERLAY_DIR/build/compiled.zip"
|
||||
|
||||
# Sign if possible
|
||||
KEYSTORE="build-key.jks"
|
||||
KEY_ALIAS="miracast"
|
||||
KEY_PASS="miracast-build"
|
||||
|
||||
if ! [ -f "$KEYSTORE" ] && command -v keytool >/dev/null 2>&1; then
|
||||
keytool -genkeypair \
|
||||
-keystore "$KEYSTORE" \
|
||||
-alias "$KEY_ALIAS" \
|
||||
-keyalg RSA -keysize 2048 -validity 10000 \
|
||||
-storepass "$KEY_PASS" -keypass "$KEY_PASS" \
|
||||
-dname "CN=Miracast Enabler,O=Module,C=US"
|
||||
fi
|
||||
|
||||
if [ -f "$KEYSTORE" ]; then
|
||||
if command -v apksigner >/dev/null 2>&1; then
|
||||
apksigner sign \
|
||||
--ks "$KEYSTORE" --ks-key-alias "$KEY_ALIAS" \
|
||||
--ks-pass "pass:$KEY_PASS" --key-pass "pass:$KEY_PASS" \
|
||||
--out "$OVERLAY_DIR/MiracastEnablerOverlay.apk" \
|
||||
"$OVERLAY_DIR/build/MiracastEnablerOverlay.apk"
|
||||
elif command -v jarsigner >/dev/null 2>&1; then
|
||||
cp "$OVERLAY_DIR/build/MiracastEnablerOverlay.apk" "$OVERLAY_DIR/MiracastEnablerOverlay.apk"
|
||||
jarsigner -keystore "$KEYSTORE" \
|
||||
-storepass "$KEY_PASS" -keypass "$KEY_PASS" \
|
||||
"$OVERLAY_DIR/MiracastEnablerOverlay.apk" "$KEY_ALIAS"
|
||||
else
|
||||
cp "$OVERLAY_DIR/build/MiracastEnablerOverlay.apk" "$OVERLAY_DIR/MiracastEnablerOverlay.apk"
|
||||
fi
|
||||
else
|
||||
cp "$OVERLAY_DIR/build/MiracastEnablerOverlay.apk" "$OVERLAY_DIR/MiracastEnablerOverlay.apk"
|
||||
fi
|
||||
|
||||
mkdir -p system/vendor/overlay
|
||||
cp "$OVERLAY_DIR/MiracastEnablerOverlay.apk" system/vendor/overlay/
|
||||
echo " RRO APK built: $(du -h system/vendor/overlay/MiracastEnablerOverlay.apk | cut -f1)"
|
||||
rm -rf "$OVERLAY_DIR/build"
|
||||
else
|
||||
echo "[1/3] Skipping RRO APK (no local aapt2 or framework-res.apk)"
|
||||
echo " Module will use fabricated overlays on Android 12+"
|
||||
echo " To build APK: pull aapt2 from phone with ./pull-aapt2.sh"
|
||||
rm -rf system/vendor/overlay
|
||||
fi
|
||||
|
||||
echo "[2/3] Packaging module..."
|
||||
rm -f "$MODULE_ZIP"
|
||||
|
||||
# Build file list
|
||||
FILES=(
|
||||
module.prop
|
||||
customize.sh
|
||||
post-fs-data.sh
|
||||
service.sh
|
||||
system.prop
|
||||
system/
|
||||
webroot/
|
||||
)
|
||||
|
||||
# Include overlay source for on-device build fallback
|
||||
FILES+=(overlay/AndroidManifest.xml overlay/res/)
|
||||
|
||||
# Include pre-built APK if it exists
|
||||
if [ -f "system/vendor/overlay/MiracastEnablerOverlay.apk" ]; then
|
||||
FILES+=(system/vendor/overlay/MiracastEnablerOverlay.apk)
|
||||
fi
|
||||
|
||||
zip -r9 "$MODULE_ZIP" "${FILES[@]}" \
|
||||
-x "overlay/build/*" "*.git*" "build.sh" "build-key.jks" \
|
||||
"pull-aapt2.sh" "tools/*" "README*"
|
||||
|
||||
echo "[3/3] Done"
|
||||
echo ""
|
||||
echo "=== $MODULE_ZIP ($(du -h "$MODULE_ZIP" | cut -f1)) ==="
|
||||
echo "Flash via KernelSU or Magisk manager"
|
||||
118
customize.sh
118
customize.sh
@@ -1,118 +0,0 @@
|
||||
#!/system/bin/sh
|
||||
# Miracast Enabler - Installation Script
|
||||
|
||||
SKIPUNZIP=0
|
||||
|
||||
ui_print "================================================"
|
||||
ui_print " Miracast Enabler v1.0.0"
|
||||
ui_print "================================================"
|
||||
ui_print ""
|
||||
|
||||
# Detect device
|
||||
DEVICE=$(getprop ro.product.device)
|
||||
MODEL=$(getprop ro.product.model)
|
||||
SOC=$(getprop ro.soc.model)
|
||||
ANDROID=$(getprop ro.build.version.release)
|
||||
API=$(getprop ro.build.version.sdk)
|
||||
|
||||
ui_print "- Device: $MODEL ($DEVICE)"
|
||||
ui_print "- SoC: $SOC"
|
||||
ui_print "- Android: $ANDROID (API $API)"
|
||||
ui_print ""
|
||||
|
||||
# Pixel detection
|
||||
case "$DEVICE" in
|
||||
rango|comet|cometl|caiman|komodo|tokay|blazer|husky|shiba|felix|tangorpro|lynx|panther|cheetah|oriole|raven|bluejay)
|
||||
ui_print "- Pixel device detected"
|
||||
;;
|
||||
*)
|
||||
ui_print "! Non-Pixel device — module may still work"
|
||||
;;
|
||||
esac
|
||||
|
||||
# Foldable messaging
|
||||
case "$DEVICE" in
|
||||
rango|comet|cometl|felix)
|
||||
ui_print "- Foldable detected: inner display is default Miracast source"
|
||||
ui_print "- Change display source via WebUI in KernelSU manager"
|
||||
;;
|
||||
esac
|
||||
ui_print ""
|
||||
|
||||
# --- Build RRO APK on-device as fallback for pre-Android 12 ---
|
||||
# Android 12+ uses fabricated overlays (no APK needed)
|
||||
# Pre-Android 12 needs a real RRO APK, built right here on the phone
|
||||
if [ "$API" -lt 31 ]; then
|
||||
ui_print "- Android < 12: building RRO overlay APK on-device..."
|
||||
|
||||
AAPT2=$(which aapt2 2>/dev/null)
|
||||
if [ -z "$AAPT2" ]; then
|
||||
# aapt2 is typically in the build-tools or framework
|
||||
for candidate in \
|
||||
/system/bin/aapt2 \
|
||||
/system/xbin/aapt2 \
|
||||
/data/adb/aapt2; do
|
||||
if [ -x "$candidate" ]; then
|
||||
AAPT2="$candidate"
|
||||
break
|
||||
fi
|
||||
done
|
||||
fi
|
||||
|
||||
if [ -n "$AAPT2" ] && [ -x "$AAPT2" ]; then
|
||||
ui_print "- Found aapt2: $AAPT2"
|
||||
OVERLAY_BUILD="$MODPATH/overlay_build"
|
||||
mkdir -p "$OVERLAY_BUILD"
|
||||
|
||||
# Compile resources
|
||||
"$AAPT2" compile \
|
||||
--dir "$MODPATH/overlay/res" \
|
||||
-o "$OVERLAY_BUILD/compiled.zip" 2>/dev/null
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
# Link into APK
|
||||
"$AAPT2" link \
|
||||
--manifest "$MODPATH/overlay/AndroidManifest.xml" \
|
||||
-I /system/framework/framework-res.apk \
|
||||
-o "$OVERLAY_BUILD/overlay.apk" \
|
||||
"$OVERLAY_BUILD/compiled.zip" 2>/dev/null
|
||||
|
||||
if [ $? -eq 0 ]; then
|
||||
mkdir -p "$MODPATH/system/vendor/overlay"
|
||||
cp "$OVERLAY_BUILD/overlay.apk" "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk"
|
||||
chmod 644 "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk"
|
||||
ui_print "- RRO overlay APK built and installed"
|
||||
else
|
||||
ui_print "! aapt2 link failed — overlay APK not built"
|
||||
fi
|
||||
else
|
||||
ui_print "! aapt2 compile failed — overlay APK not built"
|
||||
fi
|
||||
rm -rf "$OVERLAY_BUILD"
|
||||
else
|
||||
ui_print "! aapt2 not found on device"
|
||||
ui_print "! Pre-Android 12 will rely on system properties only"
|
||||
fi
|
||||
else
|
||||
ui_print "- Android 12+: will use fabricated overlays (no APK needed)"
|
||||
fi
|
||||
|
||||
ui_print ""
|
||||
ui_print "- Setting permissions..."
|
||||
|
||||
set_perm_recursive $MODPATH 0 0 0755 0644
|
||||
set_perm $MODPATH/post-fs-data.sh 0 0 0755
|
||||
set_perm $MODPATH/service.sh 0 0 0755
|
||||
set_perm_recursive $MODPATH/system/etc 0 0 0755 0644
|
||||
|
||||
if [ -f "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk" ]; then
|
||||
set_perm "$MODPATH/system/vendor/overlay/MiracastEnablerOverlay.apk" 0 0 0644
|
||||
fi
|
||||
|
||||
ui_print ""
|
||||
ui_print "- Installation complete!"
|
||||
ui_print "- Reboot to activate Miracast"
|
||||
ui_print "- After reboot: Settings > Connected devices >"
|
||||
ui_print " Connection preferences > Cast"
|
||||
ui_print "- WebUI available in KernelSU manager"
|
||||
ui_print ""
|
||||
@@ -1 +0,0 @@
|
||||
android.aapt2FromMavenOverride=/usr/local/bin/aapt2
|
||||
Binary file not shown.
@@ -1,6 +0,0 @@
|
||||
id=miracast-enabler
|
||||
name=Miracast Enabler
|
||||
version=v1.0.0
|
||||
versionCode=1
|
||||
author=snake
|
||||
description=Enables Miracast (Wi-Fi Display) on Pixel phones and other devices where it is disabled by default
|
||||
@@ -1,11 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.miracast.enabler.overlay">
|
||||
|
||||
<overlay
|
||||
android:targetPackage="android"
|
||||
android:targetName="MiracastConfig"
|
||||
android:isStatic="true"
|
||||
android:priority="999" />
|
||||
|
||||
</manifest>
|
||||
Binary file not shown.
@@ -1,8 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<!-- Enable Wi-Fi Display (Miracast) in the framework -->
|
||||
<bool name="config_enableWifiDisplay">true</bool>
|
||||
|
||||
<!-- Allow protected (DRM/HDCP) content over wireless display -->
|
||||
<bool name="config_wifiDisplaySupportsProtectedBuffers">true</bool>
|
||||
</resources>
|
||||
@@ -1,21 +0,0 @@
|
||||
#!/system/bin/sh
|
||||
# Miracast Enabler - post-fs-data
|
||||
# Runs early in boot before most services start
|
||||
|
||||
MODDIR=${0%/*}
|
||||
|
||||
# Core Wi-Fi Display props
|
||||
resetprop persist.debug.wfd.enable 1
|
||||
resetprop persist.sys.wfd.virtual 0
|
||||
|
||||
# HDCP — disable by default for maximum compatibility
|
||||
resetprop persist.sys.wfd.nohdcp 1
|
||||
resetprop wlan.wfd.hdcp disable
|
||||
|
||||
# Tensor / Pixel: force GPU composition for virtual displays
|
||||
# HWC on Tensor chips does not correctly handle virtual display layers,
|
||||
# which causes black screen or green artifacts during Miracast
|
||||
resetprop debug.sf.enable_hwc_vds 0
|
||||
|
||||
# Wi-Fi Direct concurrency — needed on Pixel to allow P2P alongside STA
|
||||
resetprop wifi.direct.interface p2p-dev-wlan0
|
||||
@@ -1,44 +0,0 @@
|
||||
#!/bin/bash
|
||||
# Pull aapt2 from a connected Android device for local builds
|
||||
# Usage: ./pull-aapt2.sh
|
||||
set -e
|
||||
|
||||
DEST="tools/aapt2"
|
||||
|
||||
if ! adb get-state >/dev/null 2>&1; then
|
||||
echo "ERROR: No device connected via ADB"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "Searching for aapt2 on device..."
|
||||
|
||||
# Find aapt2 binary on the device
|
||||
DEVICE_PATH=$(adb shell "find /system /vendor /apex -name 'aapt2' -type f 2>/dev/null" | tr -d '\r' | head -1)
|
||||
|
||||
if [ -z "$DEVICE_PATH" ]; then
|
||||
echo "aapt2 not found as standalone binary, checking APEX modules..."
|
||||
# On newer Android, build tools live inside APEX
|
||||
DEVICE_PATH=$(adb shell "find /apex/com.android.sdkext /apex/com.android.art -name 'aapt2' 2>/dev/null" | tr -d '\r' | head -1)
|
||||
fi
|
||||
|
||||
if [ -z "$DEVICE_PATH" ]; then
|
||||
echo "aapt2 not found on device."
|
||||
echo "Trying framework-res.apk instead (for on-device overlay builds)..."
|
||||
DEVICE_PATH="/system/framework/framework-res.apk"
|
||||
DEST="tools/framework-res.apk"
|
||||
fi
|
||||
|
||||
echo "Pulling: $DEVICE_PATH"
|
||||
mkdir -p "$(dirname "$DEST")"
|
||||
adb pull "$DEVICE_PATH" "$DEST"
|
||||
|
||||
if [ -f "$DEST" ]; then
|
||||
chmod +x "$DEST" 2>/dev/null
|
||||
echo "Saved to: $DEST"
|
||||
file "$DEST"
|
||||
|
||||
if [[ "$DEST" == *aapt2 ]]; then
|
||||
VERSION=$("./$DEST" version 2>&1 || true)
|
||||
echo "Version: $VERSION"
|
||||
fi
|
||||
fi
|
||||
174
service.sh
174
service.sh
@@ -1,174 +0,0 @@
|
||||
#!/system/bin/sh
|
||||
# Miracast Enabler - late service
|
||||
# Runs after boot is completed
|
||||
|
||||
MODDIR=${0%/*}
|
||||
LOGFILE="$MODDIR/miracast.log"
|
||||
|
||||
mlog() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') $1" >> "$LOGFILE"
|
||||
log -t MiracastEnabler "$1"
|
||||
}
|
||||
|
||||
# Truncate log on each boot
|
||||
echo "" > "$LOGFILE"
|
||||
mlog "Waiting for boot..."
|
||||
|
||||
# Wait for boot to complete
|
||||
while [ "$(getprop sys.boot_completed)" != "1" ]; do
|
||||
sleep 1
|
||||
done
|
||||
sleep 3
|
||||
|
||||
mlog "Boot complete, applying Miracast configuration"
|
||||
|
||||
# --- Core WFD properties ---
|
||||
# Some vendors reset these during boot, so re-apply
|
||||
resetprop persist.debug.wfd.enable 1
|
||||
resetprop persist.sys.wfd.virtual 0
|
||||
resetprop persist.sys.wfd.nohdcp 1
|
||||
resetprop wlan.wfd.hdcp disable
|
||||
|
||||
# Tensor / Pixel: force GPU composition for virtual display surfaces
|
||||
# PowerVR (G5) and Mali (G4 and earlier) HWC implementations don't
|
||||
# handle virtual display layers for Miracast, causing black/green frames
|
||||
resetprop debug.sf.enable_hwc_vds 0
|
||||
|
||||
# Wi-Fi Direct concurrency — needed on Pixel to allow P2P alongside STA
|
||||
resetprop wifi.direct.interface p2p-dev-wlan0
|
||||
|
||||
# --- Device detection ---
|
||||
DEVICE=$(getprop ro.product.device)
|
||||
SOC=$(getprop ro.soc.model)
|
||||
PLATFORM=$(getprop ro.board.platform)
|
||||
API=$(getprop ro.build.version.sdk)
|
||||
GPU=$(getprop ro.hardware.egl)
|
||||
|
||||
mlog "Device=$DEVICE SoC=$SOC Platform=$PLATFORM API=$API GPU=$GPU"
|
||||
|
||||
# --- Tensor SoC family tweaks ---
|
||||
case "$SOC" in
|
||||
Tensor*)
|
||||
# High GO intent so Pixel acts as Group Owner in P2P negotiation
|
||||
# This ensures the Pixel controls the channel and timing
|
||||
resetprop wifi.direct.go_intent 15
|
||||
mlog "Tensor SoC: set P2P GO intent=15"
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Pixel 10 Pro Fold (rango) — Tensor G5, Broadcom BCM4390 ---
|
||||
# Confirmed: codename=rango, platform=laguna, gpu=powervr, wifi=bcmdhd4390
|
||||
# Display IDs: 0 (inner), 3 (outer)
|
||||
# Wi-Fi features include WFD_R2 — hardware fully supports Miracast
|
||||
case "$DEVICE" in
|
||||
rango)
|
||||
mlog "Pixel 10 Pro Fold (rango) detected"
|
||||
|
||||
# Inner display (ID 0) as default Miracast source
|
||||
if [ -z "$(getprop persist.sys.wfd.display_id)" ]; then
|
||||
resetprop persist.sys.wfd.display_id 0
|
||||
fi
|
||||
# Default 1080p30 — the inner panel is 2076x2152 which is too wide
|
||||
# for most Miracast receivers; 1080p is the safe maximum
|
||||
if [ -z "$(getprop persist.sys.wfd.resolution)" ]; then
|
||||
resetprop persist.sys.wfd.resolution 7
|
||||
fi
|
||||
|
||||
# Tensor G5 / laguna platform: PowerVR GPU composition
|
||||
resetprop debug.sf.enable_hwc_vds 0
|
||||
|
||||
# BCM4390 Wi-Fi: P2P supplicant already supports VHT and DFS
|
||||
# channels (p2p_go_vht=1, p2p_dfs_chan_enable=1 in vendor config)
|
||||
# but 6GHz is disabled for P2P (p2p_6ghz_disable=1), which is fine
|
||||
# since most Miracast receivers don't support 6GHz
|
||||
|
||||
# Force single-channel concurrency to prevent the BCM4390 from
|
||||
# splitting STA and P2P across bands which can cause latency spikes
|
||||
resetprop persist.vendor.wifi.wfd.scc 1
|
||||
|
||||
mlog "rango: inner display=0, outer display=3, wifi=BCM4390, gpu=PowerVR"
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Pixel 9 Pro Fold (comet/cometl) — Tensor G4 ---
|
||||
case "$DEVICE" in
|
||||
comet|cometl)
|
||||
mlog "Pixel 9 Pro Fold detected"
|
||||
if [ -z "$(getprop persist.sys.wfd.display_id)" ]; then
|
||||
resetprop persist.sys.wfd.display_id 0
|
||||
fi
|
||||
if [ -z "$(getprop persist.sys.wfd.resolution)" ]; then
|
||||
resetprop persist.sys.wfd.resolution 7
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Original Pixel Fold (felix) — Tensor G2 ---
|
||||
case "$DEVICE" in
|
||||
felix)
|
||||
mlog "Pixel Fold (1st gen) detected"
|
||||
if [ -z "$(getprop persist.sys.wfd.display_id)" ]; then
|
||||
resetprop persist.sys.wfd.display_id 0
|
||||
fi
|
||||
if [ -z "$(getprop persist.sys.wfd.resolution)" ]; then
|
||||
resetprop persist.sys.wfd.resolution 7
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Pixel 9 series (non-fold) — Tensor G4 ---
|
||||
case "$DEVICE" in
|
||||
caiman|komodo|tokay|blazer)
|
||||
mlog "Pixel 9 series detected ($DEVICE)"
|
||||
# No foldable display concerns, standard single display
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Pixel 10 series (non-fold) ---
|
||||
# Platform "laguna" is Tensor G5; other Pixel 10 variants share it
|
||||
case "$PLATFORM" in
|
||||
laguna)
|
||||
if [ "$DEVICE" != "rango" ]; then
|
||||
mlog "Tensor G5 device ($DEVICE) on laguna platform"
|
||||
resetprop debug.sf.enable_hwc_vds 0
|
||||
resetprop persist.vendor.wifi.wfd.scc 1
|
||||
fi
|
||||
;;
|
||||
esac
|
||||
|
||||
# --- Fabricated overlay (Android 12+, API 31+) ---
|
||||
# Primary method to flip config_enableWifiDisplay in the framework
|
||||
# No APK compilation needed — fabricated overlays are created at runtime
|
||||
# Requires root, which KernelSU provides
|
||||
if [ "$API" -ge 31 ]; then
|
||||
mlog "API $API >= 31, creating fabricated overlays"
|
||||
|
||||
# TYPE_INT_BOOLEAN = 0x12, true = 0xFFFFFFFF
|
||||
cmd overlay fabricate --target android --name MiracastEnablerWifiDisplay \
|
||||
android:bool/config_enableWifiDisplay 0x12 0xFFFFFFFF 2>/dev/null
|
||||
RET1=$?
|
||||
|
||||
cmd overlay fabricate --target android --name MiracastEnablerProtectedBuffers \
|
||||
android:bool/config_wifiDisplaySupportsProtectedBuffers 0x12 0xFFFFFFFF 2>/dev/null
|
||||
RET2=$?
|
||||
|
||||
# Enable the fabricated overlays
|
||||
cmd overlay enable --user current com.android.shell:MiracastEnablerWifiDisplay 2>/dev/null
|
||||
cmd overlay enable --user current com.android.shell:MiracastEnablerProtectedBuffers 2>/dev/null
|
||||
|
||||
# Verify and log
|
||||
WFD_STATE=$(cmd overlay list 2>/dev/null | grep MiracastEnabler)
|
||||
mlog "Fabricate WifiDisplay ret=$RET1, ProtectedBuffers ret=$RET2"
|
||||
mlog "Overlay state: $WFD_STATE"
|
||||
else
|
||||
mlog "API $API < 31, fabricated overlays not available"
|
||||
mlog "Relying on system properties and sysconfig XML only"
|
||||
fi
|
||||
|
||||
# --- Fallback: enable pre-installed RRO APK if present ---
|
||||
if [ -f "$MODDIR/system/vendor/overlay/MiracastEnablerOverlay.apk" ]; then
|
||||
cmd overlay enable --user current com.miracast.enabler.overlay 2>/dev/null
|
||||
mlog "Enabled RRO APK overlay"
|
||||
fi
|
||||
|
||||
mlog "Miracast enabler service complete"
|
||||
11
system.prop
11
system.prop
@@ -1,11 +0,0 @@
|
||||
# Core Miracast / Wi-Fi Display
|
||||
persist.debug.wfd.enable=1
|
||||
persist.sys.wfd.virtual=0
|
||||
persist.sys.wfd.nohdcp=1
|
||||
wlan.wfd.hdcp=disable
|
||||
|
||||
# Tensor / Pixel: GPU composition for virtual displays
|
||||
debug.sf.enable_hwc_vds=0
|
||||
|
||||
# Wi-Fi Direct concurrency
|
||||
wifi.direct.interface=p2p-dev-wlan0
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Declare Wi-Fi Display hardware/software features -->
|
||||
<permissions>
|
||||
<feature name="android.hardware.wifi.direct" />
|
||||
<feature name="android.software.wifi_display" />
|
||||
</permissions>
|
||||
@@ -1,6 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Enable Wi-Fi Display (Miracast) feature -->
|
||||
<config>
|
||||
<feature name="android.hardware.wifi.direct" />
|
||||
<feature name="android.software.wifi_display" />
|
||||
</config>
|
||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,21 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2018 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
<permissions>
|
||||
<library
|
||||
name="com.android.media.remotedisplay"
|
||||
file="/system/framework/com.android.media.remotedisplay.jar"
|
||||
/>
|
||||
</permissions>
|
||||
@@ -1,59 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2017 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<!-- These are configurations that must exist on all Android devices. -->
|
||||
<config>
|
||||
|
||||
<!-- Broadcast actions that are currently exempted from O+ background
|
||||
delivery restrictions. -->
|
||||
<allow-implicit-broadcast action="android.intent.action.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.intent.action.ACTION_DEFAULT_VOICE_SUBSCRIPTION_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.intent.action.DATA_SMS_RECEIVED" />
|
||||
<allow-implicit-broadcast action="android.intent.action.MEDIA_SCANNER_SCAN_FILE" />
|
||||
<allow-implicit-broadcast action="android.intent.action.PACKAGE_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.intent.action.SIM_STATE_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.media.action.CLOSE_AUDIO_EFFECT_CONTROL_SESSION" />
|
||||
<allow-implicit-broadcast action="android.media.action.OPEN_AUDIO_EFFECT_CONTROL_SESSION" />
|
||||
<allow-implicit-broadcast action="android.provider.Telephony.SECRET_CODE" />
|
||||
<allow-implicit-broadcast action="android.provider.Telephony.SMS_CB_RECEIVED" />
|
||||
<allow-implicit-broadcast action="android.provider.Telephony.SMS_DELIVER" />
|
||||
<allow-implicit-broadcast action="android.provider.Telephony.SMS_RECEIVED" />
|
||||
<allow-implicit-broadcast action="android.provider.Telephony.SMS_REJECTED" />
|
||||
<allow-implicit-broadcast action="android.provider.Telephony.WAP_PUSH_DELIVER" />
|
||||
<allow-implicit-broadcast action="android.provider.Telephony.WAP_PUSH_RECEIVED" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.CARRIER_CONFIG_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.DEFAULT_SMS_SUBSCRIPTION_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.DEFAULT_SUBSCRIPTION_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.MULTI_SIM_CONFIG_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.SECRET_CODE" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.SIM_APPLICATION_STATE_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.SIM_CARD_STATE_CHANGED" />
|
||||
<allow-implicit-broadcast action="android.telephony.action.SIM_SLOT_STATUS_CHANGED" />
|
||||
|
||||
|
||||
<!-- Whitelist of what components are permitted as backup data transports. The
|
||||
'service' attribute here is a flattened ComponentName string. -->
|
||||
<backup-transport-whitelisted-service
|
||||
service="com.android.localtransport/.LocalTransportService" />
|
||||
<backup-transport-whitelisted-service
|
||||
service="com.android.encryptedlocaltransport/.EncryptedLocalTransportService" />
|
||||
|
||||
<!-- Whitelist Shell to use the bugreport API -->
|
||||
<bugreport-whitelisted package="com.android.shell" />
|
||||
|
||||
<!-- Whitelist of bundled applications which all handle URLs to their websites by default -->
|
||||
<app-link package="com.android.carrierdefaultapp" />
|
||||
</config>
|
||||
@@ -1,393 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!-- Copyright (C) 2008 The Android Open Source Project
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
http://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
-->
|
||||
|
||||
<!-- This file is used to define the mappings between lower-level system
|
||||
user and group IDs and the higher-level permission names managed
|
||||
by the platform.
|
||||
|
||||
Be VERY careful when editing this file! Mistakes made here can open
|
||||
big security holes.
|
||||
-->
|
||||
<permissions>
|
||||
|
||||
<!-- ================================================================== -->
|
||||
<!-- ================================================================== -->
|
||||
<!-- ================================================================== -->
|
||||
|
||||
<!-- The following tags are associating low-level group IDs with
|
||||
permission names. By specifying such a mapping, you are saying
|
||||
that any application process granted the given permission will
|
||||
also be running with the given group ID attached to its process,
|
||||
so it can perform any filesystem (read, write, execute) operations
|
||||
allowed for that group. -->
|
||||
|
||||
<permission name="android.permission.BLUETOOTH_ADMIN" >
|
||||
<group gid="net_bt_admin" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.BLUETOOTH" >
|
||||
<group gid="net_bt" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.BLUETOOTH_STACK" >
|
||||
<group gid="bluetooth" />
|
||||
<group gid="wakelock" />
|
||||
<group gid="uhid" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.VIRTUAL_INPUT_DEVICE" >
|
||||
<group gid="uhid" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.NET_TUNNELING" >
|
||||
<group gid="vpn" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.INTERNET" >
|
||||
<group gid="inet" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.READ_LOGS" >
|
||||
<group gid="log" />
|
||||
<group gid="update_engine_log" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.READ_UPDATE_ENGINE_LOGS"
|
||||
featureFlag="com.android.update_engine.minor_changes_2025q4" >
|
||||
<group gid="update_engine_log" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.ACCESS_MTP" >
|
||||
<group gid="mtp" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.NET_ADMIN" >
|
||||
<group gid="net_admin" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.MAINLINE_NETWORK_STACK" >
|
||||
<group gid="net_admin" />
|
||||
<group gid="net_raw" />
|
||||
</permission>
|
||||
|
||||
<!-- The group that /cache belongs to, linked to the permission
|
||||
set on the applications that can access /cache -->
|
||||
<permission name="android.permission.ACCESS_CACHE_FILESYSTEM" >
|
||||
<group gid="cache" />
|
||||
</permission>
|
||||
|
||||
<!-- RW permissions to any system resources owned by group 'diag'.
|
||||
This is for carrier and manufacture diagnostics tools that must be
|
||||
installable from the framework. Be careful. -->
|
||||
<permission name="android.permission.DIAGNOSTIC" >
|
||||
<group gid="input" />
|
||||
<group gid="diag" />
|
||||
</permission>
|
||||
|
||||
<!-- Group that can read detailed network usage statistics -->
|
||||
<permission name="android.permission.READ_NETWORK_USAGE_HISTORY">
|
||||
<group gid="net_bw_stats" />
|
||||
</permission>
|
||||
|
||||
<!-- Group that can modify how network statistics are accounted -->
|
||||
<permission name="android.permission.UPDATE_DEVICE_STATS">
|
||||
<group gid="net_bw_acct" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.LOOP_RADIO" >
|
||||
<group gid="loop_radio" />
|
||||
</permission>
|
||||
|
||||
<!-- Hotword training apps sometimes need a GID to talk with low-level
|
||||
hardware; give them audio for now until full HAL support is added. -->
|
||||
<permission name="android.permission.MANAGE_VOICE_KEYPHRASES">
|
||||
<group gid="audio" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.ACCESS_BROADCAST_RADIO" >
|
||||
<!-- /dev/fm is gid media, not audio -->
|
||||
<group gid="media" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.USE_RESERVED_DISK">
|
||||
<group gid="reserved_disk" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.WRITE_SECURITY_LOG">
|
||||
<group gid="security_log_writer" />
|
||||
</permission>
|
||||
|
||||
<permission name="android.permission.MANAGE_VIRTUAL_MACHINE">
|
||||
<group gid="virtualmachine" />
|
||||
</permission>
|
||||
|
||||
<!-- These are permissions that were mapped to gids but we need
|
||||
to keep them here until an upgrade from L to the current
|
||||
version is to be supported. These permissions are built-in
|
||||
and in L were not stored in packages.xml as a result if they
|
||||
are not defined here while parsing packages.xml we would
|
||||
ignore these permissions being granted to apps and not
|
||||
propagate the granted state. From N we are storing the
|
||||
built-in permissions in packages.xml as the saved storage
|
||||
is negligible (one tag with the permission) compared to
|
||||
the fragility as one can remove a built-in permission which
|
||||
no longer needs to be mapped to gids and break grant propagation. -->
|
||||
<permission name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
<permission name="android.permission.WRITE_EXTERNAL_STORAGE" />
|
||||
|
||||
<!-- ================================================================== -->
|
||||
<!-- ================================================================== -->
|
||||
<!-- ================================================================== -->
|
||||
|
||||
<!-- The following tags are assigning high-level permissions to specific
|
||||
user IDs. These are used to allow specific core system users to
|
||||
perform the given operations with the higher-level framework. For
|
||||
example, we give a wide variety of permissions to the shell user
|
||||
since that is the user the adb shell runs under and developers and
|
||||
others should have a fairly open environment in which to
|
||||
interact with the system. -->
|
||||
|
||||
<assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="media" />
|
||||
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="media" />
|
||||
<assign-permission name="android.permission.WAKE_LOCK" uid="media" />
|
||||
<assign-permission name="android.permission.UPDATE_DEVICE_STATS" uid="media" />
|
||||
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="media" />
|
||||
<assign-permission name="android.permission.GET_PROCESS_STATE_AND_OOM_SCORE" uid="media" />
|
||||
<assign-permission name="android.permission.PACKAGE_USAGE_STATS" uid="media" />
|
||||
<assign-permission name="android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER" uid="media" />
|
||||
<assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="media" />
|
||||
<assign-permission name="android.permission.INTERACT_ACROSS_USERS" uid="media" />
|
||||
<assign-permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE" uid="media" />
|
||||
|
||||
<assign-permission name="android.permission.INTERNET" uid="media" />
|
||||
|
||||
<assign-permission name="android.permission.INTERNET" uid="shell" />
|
||||
|
||||
<assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="audioserver" />
|
||||
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="audioserver" />
|
||||
<assign-permission name="android.permission.WAKE_LOCK" uid="audioserver" />
|
||||
<assign-permission name="android.permission.UPDATE_DEVICE_STATS" uid="audioserver" />
|
||||
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="audioserver" />
|
||||
<assign-permission name="android.permission.PACKAGE_USAGE_STATS" uid="audioserver" />
|
||||
<assign-permission name="android.permission.INTERACT_ACROSS_USERS_FULL" uid="audioserver" />
|
||||
<assign-permission name="android.permission.OBSERVE_SENSOR_PRIVACY" uid="audioserver" />
|
||||
<assign-permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE" uid="audioserver" />
|
||||
|
||||
<assign-permission name="android.permission.MODIFY_AUDIO_SETTINGS" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.INTERACT_ACROSS_USERS_FULL" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.WAKE_LOCK" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.UPDATE_DEVICE_STATS" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.GET_PROCESS_STATE_AND_OOM_SCORE" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.PACKAGE_USAGE_STATS" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.WATCH_APPOPS" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.MANAGE_APP_OPS_MODES" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.OBSERVE_SENSOR_PRIVACY" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.REAL_GET_TASKS" uid="cameraserver" />
|
||||
<assign-permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE" uid="cameraserver" />
|
||||
|
||||
<assign-permission name="android.permission.ACCESS_SURFACE_FLINGER" uid="graphics" />
|
||||
|
||||
<assign-permission name="android.permission.DUMP" uid="incidentd" />
|
||||
<assign-permission name="android.permission.PACKAGE_USAGE_STATS" uid="incidentd" />
|
||||
<assign-permission name="android.permission.INTERACT_ACROSS_USERS" uid="incidentd" />
|
||||
<assign-permission name="android.permission.REQUEST_INCIDENT_REPORT_APPROVAL" uid="incidentd" />
|
||||
<assign-permission name="android.permission.PEEK_DROPBOX_DATA" uid="incidentd" />
|
||||
|
||||
<assign-permission name="android.permission.ACCESS_LOWPAN_STATE" uid="lowpan" />
|
||||
<assign-permission name="android.permission.MANAGE_LOWPAN_INTERFACES" uid="lowpan" />
|
||||
|
||||
<assign-permission name="android.permission.DUMP" uid="statsd" />
|
||||
<assign-permission name="android.permission.PACKAGE_USAGE_STATS" uid="statsd" />
|
||||
<assign-permission name="android.permission.STATSCOMPANION" uid="statsd" />
|
||||
<assign-permission name="android.permission.UPDATE_APP_OPS_STATS" uid="statsd" />
|
||||
|
||||
<assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="mmd" />
|
||||
<assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="gpu_service" />
|
||||
<assign-permission name="android.permission.REGISTER_STATS_PULL_ATOM" uid="keystore" />
|
||||
|
||||
<assign-permission name="android.permission.DYNAMIC_INSTRUMENTATION" uid="uprobestats" />
|
||||
<assign-permission name="android.permission.SET_ACTIVITY_WATCHER" uid="uprobestats" />
|
||||
<assign-permission name="android.permission.INTERACT_ACROSS_USERS_FULL" uid="uprobestats" />
|
||||
<assign-permission name="android.permission.REAL_GET_TASKS" uid="uprobestats" />
|
||||
|
||||
<split-permission name="android.permission.ACCESS_FINE_LOCATION">
|
||||
<new-permission name="android.permission.ACCESS_COARSE_LOCATION" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.WRITE_EXTERNAL_STORAGE">
|
||||
<new-permission name="android.permission.READ_EXTERNAL_STORAGE" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.READ_CONTACTS"
|
||||
targetSdk="16">
|
||||
<new-permission name="android.permission.READ_CALL_LOG" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.WRITE_CONTACTS"
|
||||
targetSdk="16">
|
||||
<new-permission name="android.permission.WRITE_CALL_LOG" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.ACCESS_FINE_LOCATION"
|
||||
targetSdk="29">
|
||||
<new-permission name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.ACCESS_COARSE_LOCATION"
|
||||
targetSdk="29">
|
||||
<new-permission name="android.permission.ACCESS_BACKGROUND_LOCATION" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
targetSdk="29">
|
||||
<new-permission name="android.permission.ACCESS_MEDIA_LOCATION" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
targetSdk="29">
|
||||
<new-permission name="android.permission.ACCESS_MEDIA_LOCATION" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BLUETOOTH"
|
||||
targetSdk="31">
|
||||
<new-permission name="android.permission.BLUETOOTH_SCAN" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BLUETOOTH"
|
||||
targetSdk="31">
|
||||
<new-permission name="android.permission.BLUETOOTH_CONNECT" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BLUETOOTH"
|
||||
targetSdk="31">
|
||||
<new-permission name="android.permission.BLUETOOTH_ADVERTISE" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BLUETOOTH_ADMIN"
|
||||
targetSdk="31">
|
||||
<new-permission name="android.permission.BLUETOOTH_SCAN" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BLUETOOTH_ADMIN"
|
||||
targetSdk="31">
|
||||
<new-permission name="android.permission.BLUETOOTH_CONNECT" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BLUETOOTH_ADMIN"
|
||||
targetSdk="31">
|
||||
<new-permission name="android.permission.BLUETOOTH_ADVERTISE" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BODY_SENSORS"
|
||||
targetSdk="33">
|
||||
<new-permission name="android.permission.BODY_SENSORS_BACKGROUND" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BODY_SENSORS"
|
||||
targetSdk="36">
|
||||
<new-permission name="android.permission.health.READ_HEART_RATE" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.BODY_SENSORS_BACKGROUND"
|
||||
targetSdk="36">
|
||||
<new-permission name="android.permission.health.READ_HEALTH_DATA_IN_BACKGROUND" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
targetSdk="33">
|
||||
<new-permission name="android.permission.READ_MEDIA_AUDIO" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
targetSdk="33">
|
||||
<new-permission name="android.permission.READ_MEDIA_VIDEO" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.READ_EXTERNAL_STORAGE"
|
||||
targetSdk="33">
|
||||
<new-permission name="android.permission.READ_MEDIA_IMAGES" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
targetSdk="33">
|
||||
<new-permission name="android.permission.READ_MEDIA_AUDIO" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
targetSdk="33">
|
||||
<new-permission name="android.permission.READ_MEDIA_VIDEO" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.WRITE_EXTERNAL_STORAGE"
|
||||
targetSdk="33">
|
||||
<new-permission name="android.permission.READ_MEDIA_IMAGES" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.READ_MEDIA_IMAGES">
|
||||
<new-permission name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.READ_MEDIA_VIDEO">
|
||||
<new-permission name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
|
||||
</split-permission>
|
||||
<split-permission name="android.permission.ACCESS_MEDIA_LOCATION">
|
||||
<new-permission name="android.permission.READ_MEDIA_VISUAL_USER_SELECTED" />
|
||||
</split-permission>
|
||||
|
||||
<split-permission name="android.permission.INTERNET"
|
||||
featureFlag="android.permission.flags.access_local_network_permission_enabled"
|
||||
targetSdk="37">
|
||||
<new-permission name="android.permission.ACCESS_LOCAL_NETWORK" />
|
||||
</split-permission>
|
||||
|
||||
<split-permission name="android.permission.INTERNET"
|
||||
featureFlag="android.permission.flags.use_loopback_interface_permission_enabled"
|
||||
targetSdk="37">
|
||||
<new-permission name="android.permission.USE_LOOPBACK_INTERFACE" />
|
||||
</split-permission>
|
||||
|
||||
<!-- This is a list of all the libraries available for application
|
||||
code to link against. -->
|
||||
|
||||
<library name="android.test.base"
|
||||
file="/system/framework/android.test.base.jar" />
|
||||
<library name="android.test.mock"
|
||||
file="/system/framework/android.test.mock.jar" />
|
||||
<library name="android.test.runner"
|
||||
file="/system/framework/android.test.runner.jar"
|
||||
dependency="android.test.base:android.test.mock" />
|
||||
|
||||
<!-- In BOOT_JARS historically, and now added to legacy applications. -->
|
||||
<library name="android.hidl.base-V1.0-java"
|
||||
file="/system/framework/android.hidl.base-V1.0-java.jar" />
|
||||
<library name="android.hidl.manager-V1.0-java"
|
||||
file="/system/framework/android.hidl.manager-V1.0-java.jar" />
|
||||
|
||||
<!-- These are the standard packages that are allowed to always have internet
|
||||
access while in power save mode, even if they aren't in the foreground. -->
|
||||
<allow-in-power-save package="com.android.providers.downloads" />
|
||||
<allow-in-power-save package="com.android.rkpdapp" />
|
||||
|
||||
<!-- These are the standard packages that are allowed to always have internet
|
||||
access while in data mode, even if they aren't in the foreground. -->
|
||||
<allow-in-data-usage-save package="com.android.providers.downloads" />
|
||||
<allow-in-data-usage-save package="com.android.rkpdapp" />
|
||||
|
||||
<!-- This is a core platform component that needs to freely run in the background -->
|
||||
<allow-in-power-save package="com.android.cellbroadcastreceiver.module" />
|
||||
<allow-in-power-save package="com.android.cellbroadcastreceiver" />
|
||||
<allow-in-power-save package="com.android.shell" />
|
||||
|
||||
<!-- Emergency app needs to run in the background to reliably provide safety features -->
|
||||
<allow-in-power-save package="com.android.emergency" />
|
||||
|
||||
<!-- Allow system providers -->
|
||||
<!-- Calendar provider needs alarms while in idle -->
|
||||
<allow-in-power-save package="com.android.providers.calendar" />
|
||||
<allow-in-power-save-except-idle package="com.android.providers.contacts" />
|
||||
|
||||
<!-- The PAC proxy process must have network access, otherwise no app will
|
||||
be able to connect to the internet when such a proxy is in use, since
|
||||
all outgoing connections originate from this app. -->
|
||||
<allow-in-power-save-except-idle package="com.android.proxyhandler" />
|
||||
|
||||
<!-- Allow IMS service entitlement app to schedule jobs to run when app in background. -->
|
||||
<allow-in-power-save-except-idle package="com.android.imsserviceentitlement" />
|
||||
|
||||
<!-- Allow device lock controller app to schedule jobs and alarms, and have network access
|
||||
when app in background; otherwise, it may not be able to enforce provision for managed
|
||||
devices. -->
|
||||
<allow-in-power-save package="com.android.devicelockcontroller" />
|
||||
<allow-in-data-usage-save package="com.android.devicelockcontroller" />
|
||||
</permissions>
|
||||
@@ -1,767 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
~ Copyright (C) 2016 The Android Open Source Project
|
||||
~
|
||||
~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||
~ you may not use this file except in compliance with the License.
|
||||
~ You may obtain a copy of the License at
|
||||
~
|
||||
~ http://www.apache.org/licenses/LICENSE-2.0
|
||||
~
|
||||
~ Unless required by applicable law or agreed to in writing, software
|
||||
~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
~ See the License for the specific language governing permissions and
|
||||
~ limitations under the License
|
||||
-->
|
||||
|
||||
<!--
|
||||
This XML file declares which signature|privileged permissions should be granted to privileged
|
||||
applications that come with the platform
|
||||
-->
|
||||
<permissions>
|
||||
<!-- Needed for Build.getSerial(), which is used to send a unique number for serial, per HUIG. -->
|
||||
<privapp-permissions package="android.car.usb.handler">
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.angle">
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.apps.tag">
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.backupconfirm">
|
||||
<permission name="android.permission.BACKUP"/>
|
||||
<permission name="android.permission.CRYPT_KEEPER"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.credentialmanager">
|
||||
<permission name="android.permission.SET_BIOMETRIC_DIALOG_ADVANCED" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.externalstorage">
|
||||
<permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
|
||||
<permission name="android.permission.WRITE_MEDIA_STORAGE"/>
|
||||
<permission name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.imsserviceentitlement">
|
||||
<permission name="android.permission.MODIFY_PHONE_STATE" />
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.launcher3">
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
<permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER"/>
|
||||
<permission name="android.permission.READ_REMOTE_TASKS"/>
|
||||
<permission name="android.permission.REQUEST_TASK_HANDOFF"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.location.fused">
|
||||
<permission name="android.permission.INSTALL_LOCATION_PROVIDER"/>
|
||||
<permission name="android.permission.UPDATE_DEVICE_STATS"/>
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.managedprovisioning">
|
||||
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
|
||||
<permission name="android.permission.CHANGE_CONFIGURATION"/>
|
||||
<permission name="android.permission.CONFIGURE_INTERACT_ACROSS_PROFILES"/>
|
||||
<permission name="android.permission.CRYPT_KEEPER"/>
|
||||
<permission name="android.permission.DELETE_PACKAGES"/>
|
||||
<permission name="android.permission.INSTALL_PACKAGES"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.MANAGE_DEVICE_ADMINS"/>
|
||||
<permission name="android.permission.MANAGE_USERS"/>
|
||||
<permission name="android.permission.MASTER_CLEAR"/>
|
||||
<permission name="android.permission.NETWORK_MANAGED_PROVISIONING"/>
|
||||
<permission name="android.permission.PERFORM_CDMA_PROVISIONING"/>
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
<permission name="android.permission.SET_TIME"/>
|
||||
<permission name="android.permission.SET_TIME_ZONE"/>
|
||||
<permission name="android.permission.SHUTDOWN"/>
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
<permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
|
||||
<permission name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND"/>
|
||||
<permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.mms.service">
|
||||
<permission name="android.permission.BIND_CARRIER_MESSAGING_SERVICE"/>
|
||||
<permission name="android.permission.BIND_CARRIER_SERVICES"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.media.quality">
|
||||
<permission name="android.permission.OBSERVE_PICTURE_PROFILES"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.mtp">
|
||||
<permission name="android.permission.ACCESS_MTP"/>
|
||||
<permission name="android.permission.MANAGE_USB"/>
|
||||
<permission name="android.permission.MANAGE_USERS"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.WRITE_MEDIA_STORAGE"/>
|
||||
<permission name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.musicfx">
|
||||
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.networkrecommendation">
|
||||
<permission name="android.permission.SCORE_NETWORKS"/>
|
||||
<permission name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME"/>
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.packageinstaller">
|
||||
<permission name="android.permission.DELETE_PACKAGES"/>
|
||||
<permission name="android.permission.INSTALL_PACKAGES"/>
|
||||
<permission name="android.permission.USE_RESERVED_DISK"/>
|
||||
<permission name="android.permission.MANAGE_USERS"/>
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME"/>
|
||||
<permission name="android.permission.PACKAGE_USAGE_STATS"/>
|
||||
<permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER"/>
|
||||
<permission name="android.permission.RESOLVE_COMPONENT_FOR_UID"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.phone">
|
||||
<permission name="android.permission.ACCESS_IMS_CALL_SERVICE"/>
|
||||
<permission name="android.permission.BIND_CARRIER_MESSAGING_SERVICE"/>
|
||||
<permission name="android.permission.BIND_CARRIER_SERVICES"/>
|
||||
<permission name="android.permission.BIND_CELL_BROADCAST_SERVICE"/>
|
||||
<permission name="android.permission.BIND_DOMAIN_SELECTION_SERVICE"/>
|
||||
<permission name="android.permission.BIND_IMS_SERVICE"/>
|
||||
<permission name="android.permission.BIND_SATELLITE_GATEWAY_SERVICE"/>
|
||||
<permission name="android.permission.BIND_SATELLITE_SERVICE"/>
|
||||
<permission name="android.permission.BIND_TELEPHONY_DATA_SERVICE"/>
|
||||
<permission name="android.permission.BIND_VISUAL_VOICEMAIL_SERVICE"/>
|
||||
<permission name="android.permission.CALL_PRIVILEGED"/>
|
||||
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
|
||||
<permission name="android.permission.CHANGE_CONFIGURATION"/>
|
||||
<permission name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"/>
|
||||
<permission name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/>
|
||||
<permission name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
|
||||
<permission name="android.permission.DUMP"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.LOCATION_BYPASS"/>
|
||||
<permission name="android.permission.LOCAL_MAC_ADDRESS"/>
|
||||
<permission name="android.permission.MANAGE_USERS"/>
|
||||
<permission name="android.permission.MANAGE_SUBSCRIPTION_PLANS" />
|
||||
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
||||
<permission name="android.permission.OBSERVE_ROLE_HOLDERS"/>
|
||||
<permission name="android.permission.PACKAGE_USAGE_STATS"/>
|
||||
<permission name="android.permission.PERFORM_CDMA_PROVISIONING"/>
|
||||
<permission name="android.permission.READ_CARRIER_APP_INFO"/>
|
||||
<permission name="android.permission.READ_NETWORK_USAGE_HISTORY"/>
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
<permission name="android.permission.READ_PROJECTION_STATE"/>
|
||||
<permission name="android.permission.READ_SEARCH_INDEXABLES"/>
|
||||
<permission name="android.permission.REBOOT"/>
|
||||
<permission name="android.permission.REGISTER_CALL_PROVIDER"/>
|
||||
<permission name="android.permission.REGISTER_SIM_SUBSCRIPTION"/>
|
||||
<permission name="android.permission.REGISTER_STATS_PULL_ATOM"/>
|
||||
<permission name="android.permission.SATELLITE_COMMUNICATION"/>
|
||||
<permission name="android.permission.SEND_RESPOND_VIA_MESSAGE"/>
|
||||
<permission name="android.permission.SHUTDOWN"/>
|
||||
<permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
|
||||
<permission name="android.permission.STATUS_BAR"/>
|
||||
<permission name="android.permission.STOP_APP_SWITCHES"/>
|
||||
<permission name="android.permission.SUGGEST_TELEPHONY_TIME_AND_ZONE"/>
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.UPDATE_DEVICE_STATS"/>
|
||||
<permission name="android.permission.UPDATE_LOCK"/>
|
||||
<permission name="android.permission.WRITE_APN_SETTINGS"/>
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
<permission name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS"/>
|
||||
<permission name="android.permission.READ_PRECISE_PHONE_STATE"/>
|
||||
<permission name="com.android.voicemail.permission.READ_VOICEMAIL"/>
|
||||
<permission name="com.android.voicemail.permission.WRITE_VOICEMAIL"/>
|
||||
<permission name="android.permission.LOG_COMPAT_CHANGE"/>
|
||||
<permission name="android.permission.READ_COMPAT_CHANGE_CONFIG"/>
|
||||
<permission name="android.permission.UWB_PRIVILEGED"/>
|
||||
<permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER"/>
|
||||
<permission name="android.permission.UPDATE_CONFIG"/>
|
||||
<permission name="android.permission.SEND_SAFETY_CENTER_UPDATE" />
|
||||
<permission name="android.permission.MONITOR_DEFAULT_SMS_PACKAGE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.privatespace">
|
||||
<permission name="android.permission.ACCESS_HIDDEN_PROFILES_FULL"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.contactspicker">
|
||||
<permission name="android.permission.MANAGE_CONTACTS_PICKER_SESSION" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.providers.calendar">
|
||||
<permission name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS" />
|
||||
<permission name="android.permission.MANAGE_USERS" />
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.USE_RESERVED_DISK"/>
|
||||
<permission name="android.permission.LOG_COMPAT_CHANGE" />
|
||||
<permission name="android.permission.READ_COMPAT_CHANGE_CONFIG" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.providers.contacts">
|
||||
<permission name="android.permission.BIND_DIRECTORY_SEARCH"/>
|
||||
<permission name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"/>
|
||||
<permission name="android.permission.GET_ACCOUNTS_PRIVILEGED"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.MANAGE_USERS"/>
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.USE_RESERVED_DISK"/>
|
||||
<permission name="android.permission.READ_COMPAT_CHANGE_CONFIG" />
|
||||
<permission name="android.permission.LOG_COMPAT_CHANGE" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.providers.downloads">
|
||||
<permission name="android.permission.ACCESS_CACHE_FILESYSTEM"/>
|
||||
<permission name="android.permission.CLEAR_APP_CACHE"/>
|
||||
<permission name="android.permission.CONNECTIVITY_INTERNAL"/>
|
||||
<permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND"/>
|
||||
<permission name="android.permission.WRITE_MEDIA_STORAGE"/>
|
||||
<permission name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.UPDATE_DEVICE_STATS"/>
|
||||
<permission name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.providers.telephony">
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
||||
<permission name="android.permission.USE_RESERVED_DISK"/>
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE" />
|
||||
<!-- Permissions required for reading and logging compat changes -->
|
||||
<permission name="android.permission.LOG_COMPAT_CHANGE" />
|
||||
<permission name="android.permission.READ_COMPAT_CHANGE_CONFIG" />
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.server.security.authenticationpolicy">
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.MANAGE_SECURE_LOCK_DEVICE"/>
|
||||
<permission name="android.permission.SET_BIOMETRIC_DIALOG_ADVANCED"/>
|
||||
<permission name="android.permission.USE_BIOMETRIC"/>
|
||||
<permission name="android.permission.USE_BIOMETRIC_INTERNAL"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.server.telecom">
|
||||
<permission name="android.permission.BIND_CONNECTION_SERVICE"/>
|
||||
<permission name="android.permission.BIND_INCALL_SERVICE"/>
|
||||
<permission name="android.permission.BLUETOOTH_PRIVILEGED"/>
|
||||
<permission name="android.permission.CALL_PRIVILEGED"/>
|
||||
<permission name="android.permission.HANDLE_CAR_MODE_CHANGES"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.MANAGE_USERS"/>
|
||||
<permission name="android.permission.MANAGE_ROLE_HOLDERS"/>
|
||||
<permission name="android.permission.MODIFY_AUDIO_ROUTING" />
|
||||
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
||||
<permission name="android.permission.STOP_APP_SWITCHES"/>
|
||||
<permission name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME"/>
|
||||
<!-- Required so Telecom can check permission for data delivery -->
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.sharedstoragebackup">
|
||||
<permission name="android.permission.WRITE_MEDIA_STORAGE"/>
|
||||
<permission name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.shell">
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.CAMERA_HEADLESS_SYSTEM_USER"/>
|
||||
<permission name="android.permission.MANAGE_HEALTH_DATA"/>
|
||||
<permission name="android.permission.LAUNCH_DEVICE_MANAGER_SETUP"/>
|
||||
<permission name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
|
||||
<permission name="android.permission.ACCESS_LOWPAN_STATE"/>
|
||||
<permission name="android.permission.BACKUP"/>
|
||||
<permission name="android.permission.ENTER_TRADE_IN_MODE"/>
|
||||
<permission name="android.permission.GET_DEVICE_LOCK_ENROLLMENT_TYPE"/>
|
||||
<!-- Needed for GMSCore Location API test only -->
|
||||
<permission name="android.permission.LOCATION_BYPASS"/>
|
||||
<!-- Needed for XTS tests only. -->
|
||||
<permission name="android.permission.READ_LOCATION_BYPASS_ALLOWLIST"/>
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.BATTERY_PREDICTION"/>
|
||||
<permission name="android.permission.BATTERY_STATS"/>
|
||||
<permission name="android.permission.ACCESS_FINE_POWER_MONITORS" />
|
||||
<!-- BLUETOOTH_PRIVILEGED is needed for test only -->
|
||||
<permission name="android.permission.BLUETOOTH_PRIVILEGED"/>
|
||||
<permission name="android.permission.BIND_APPWIDGET"/>
|
||||
<!-- Needed for CTS tests only -->
|
||||
<permission name="android.permission.OBSERVE_PICTURE_PROFILES"/>
|
||||
<permission name="android.permission.CHANGE_APP_IDLE_STATE"/>
|
||||
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
|
||||
<permission name="android.permission.CHANGE_CONFIGURATION"/>
|
||||
<permission name="android.permission.CHANGE_DEVICE_IDLE_TEMP_WHITELIST" />
|
||||
<permission name="android.permission.CHANGE_LOWPAN_STATE"/>
|
||||
<permission name="android.permission.CHANGE_OVERLAY_PACKAGES"/>
|
||||
<permission name="android.permission.CLEAR_APP_CACHE"/>
|
||||
<permission name="android.permission.ACCESS_INSTANT_APPS" />
|
||||
<permission name="android.permission.CONNECTIVITY_INTERNAL"/>
|
||||
<permission name="android.permission.CONTROL_REMOTE_APP_TRANSITION_ANIMATIONS" />
|
||||
<permission name="android.permission.DELETE_CACHE_FILES"/>
|
||||
<permission name="android.permission.DELETE_PACKAGES"/>
|
||||
<permission name="android.permission.DUMP"/>
|
||||
<permission name="android.permission.CONTROL_UI_TRACING"/>
|
||||
<permission name="android.permission.ACTIVITY_EMBEDDING"/>
|
||||
<permission name="android.permission.REQUEST_SYSTEM_MULTITASKING_CONTROLS" />
|
||||
<permission name="android.permission.FORCE_STOP_PACKAGES"/>
|
||||
<permission name="android.permission.GET_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.WATCH_APPOPS"/>
|
||||
<permission name="android.permission.INSTALL_DYNAMIC_SYSTEM"/>
|
||||
<permission name="android.permission.INSTALL_LOCATION_PROVIDER"/>
|
||||
<permission name="android.permission.INSTALL_PACKAGES"/>
|
||||
<permission name="android.permission.INSTALL_PACKAGE_UPDATES"/>
|
||||
<permission name="android.permission.KILL_ALL_BACKGROUND_PROCESSES"/>
|
||||
<permission name="android.permission.PROVIDE_PRIVATE_COMPUTE_SERVICES"/>
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.LISTEN_FOR_KEY_ACTIVITY" />
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.ACCESS_MTP"/>
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.INTERACT_ACROSS_PROFILES"/>
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.ACCESS_COMPUTER_CONTROL"/>
|
||||
<!-- Permission required to test onPermissionsChangedListener -->
|
||||
<permission name="android.permission.OBSERVE_GRANT_REVOKE_PERMISSIONS"/>
|
||||
<!-- Needed for CTS tests only -->
|
||||
<permission name="android.permission.INJECT_KEY_EVENTS"/>
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
<permission name="android.permission.QUERY_USERS"/>
|
||||
<permission name="android.permission.LOCAL_MAC_ADDRESS"/>
|
||||
<permission name="android.permission.MANAGE_ACCESSIBILITY"/>
|
||||
<permission name="android.permission.MANAGE_DEVICE_ADMINS"/>
|
||||
<permission name="android.permission.ACCESS_FPS_COUNTER"/>
|
||||
<permission name="android.permission.MANAGE_GAME_MODE"/>
|
||||
<permission name="android.permission.MANAGE_GAME_ACTIVITY" />
|
||||
<permission name="android.permission.MANAGE_LOW_POWER_STANDBY" />
|
||||
<permission name="android.permission.SET_LOW_POWER_STANDBY_PORTS" />
|
||||
<permission name="android.permission.MANAGE_ROLLBACKS"/>
|
||||
<permission name="android.permission.MANAGE_USB"/>
|
||||
<!-- Permission required to test Launcher Apps APIs for hidden profiles -->
|
||||
<permission name="android.permission.ACCESS_HIDDEN_PROFILES_FULL" />
|
||||
<!-- Needed for tests only -->
|
||||
<permission name="android.permission.MANAGE_CLOUDSEARCH" />
|
||||
<permission name="android.permission.MANAGE_WALLPAPER_EFFECTS_GENERATION" />
|
||||
<permission name="android.permission.MODIFY_APPWIDGET_BIND_PERMISSIONS"/>
|
||||
<permission name="android.permission.MODIFY_DAY_NIGHT_MODE"/>
|
||||
<permission name="android.permission.MODIFY_PHONE_STATE"/>
|
||||
<permission name="android.permission.MOUNT_FORMAT_FILESYSTEMS"/>
|
||||
<permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
|
||||
<permission name="android.permission.MOVE_PACKAGE"/>
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.RESTART_WIFI_SUBSYSTEM"/>
|
||||
<permission name="android.permission.OBSERVE_APP_USAGE"/>
|
||||
<permission name="android.permission.NETWORK_SCAN"/>
|
||||
<permission name="android.permission.PACKAGE_USAGE_STATS" />
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.PACKET_KEEPALIVE_OFFLOAD" />
|
||||
<permission name="android.permission.POWER_SAVER" />
|
||||
<!-- Needed for CTS tests -->
|
||||
<permission name="android.permission.READ_ACTIVE_EMERGENCY_SESSION"/>
|
||||
<permission name="android.permission.READ_CARRIER_APP_INFO"/>
|
||||
<permission name="android.permission.READ_FRAME_BUFFER"/>
|
||||
<permission name="android.permission.READ_LOWPAN_CREDENTIAL"/>
|
||||
<!-- Needed for test only -->
|
||||
<permission name="android.permission.READ_PRECISE_PHONE_STATE" />
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
<!-- Permission required for UiModeManager CTS test -->
|
||||
<permission name="android.permission.READ_PROJECTION_STATE"/>
|
||||
<permission name="android.permission.READ_WALLPAPER_INTERNAL"/>
|
||||
<permission name="android.permission.READ_WIFI_CREDENTIAL"/>
|
||||
<permission name="android.permission.REAL_GET_TASKS"/>
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
<permission name="android.permission.REGISTER_CALL_PROVIDER"/>
|
||||
<permission name="android.permission.REGISTER_CONNECTION_MANAGER"/>
|
||||
<permission name="android.permission.REGISTER_SIM_SUBSCRIPTION"/>
|
||||
<permission name="android.permission.RETRIEVE_WINDOW_CONTENT"/>
|
||||
<permission name="android.permission.SCHEDULE_EXACT_ALARM"/>
|
||||
<permission name="android.permission.SET_ALWAYS_FINISH"/>
|
||||
<permission name="android.permission.SET_ANIMATION_SCALE"/>
|
||||
<permission name="android.permission.SET_DEBUG_APP"/>
|
||||
<permission name="android.permission.SET_PROCESS_LIMIT"/>
|
||||
<permission name="android.permission.SET_TIME"/>
|
||||
<permission name="android.permission.SET_TIME_ZONE"/>
|
||||
<permission name="android.permission.SIGNAL_PERSISTENT_PROCESSES"/>
|
||||
<permission name="android.permission.STATUS_BAR"/>
|
||||
<permission name="android.permission.START_ACTIVITIES_FROM_BACKGROUND" />
|
||||
<permission name="android.permission.START_FOREGROUND_SERVICES_FROM_BACKGROUND" />
|
||||
<permission name="android.permission.START_TASKS_FROM_RECENTS" />
|
||||
<permission name="android.permission.STOP_APP_SWITCHES"/>
|
||||
<permission name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME"/>
|
||||
<permission name="android.permission.SUSPEND_APPS" />
|
||||
<permission name="android.permission.UPDATE_APP_OPS_STATS"/>
|
||||
<permission name="android.permission.USE_RESERVED_DISK"/>
|
||||
<permission name="android.permission.UWB_PRIVILEGED"/>
|
||||
<permission name="android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE"/>
|
||||
<permission name="android.permission.WRITE_MEDIA_STORAGE"/>
|
||||
<permission name="android.permission.MANAGE_EXTERNAL_STORAGE"/>
|
||||
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
|
||||
<permission name="android.permission.STATUS_BAR_SERVICE"/>
|
||||
<permission name="android.permission.REQUEST_INCIDENT_REPORT_APPROVAL"/>
|
||||
<permission name="android.permission.CONTROL_KEYGUARD_SECURE_NOTIFICATIONS"/>
|
||||
<permission name="android.permission.MANAGE_WEAK_ESCROW_TOKEN"/>
|
||||
<permission name="android.permission.SET_WALLPAPER" />
|
||||
<permission name="android.permission.SET_WALLPAPER_COMPONENT" />
|
||||
<permission name="android.permission.SET_WALLPAPER_DIM_AMOUNT" />
|
||||
<permission name="android.permission.REQUEST_NOTIFICATION_ASSISTANT_SERVICE" />
|
||||
<!-- Permissions required for Incremental CTS tests -->
|
||||
<permission name="com.android.permission.USE_INSTALLER_V2"/>
|
||||
<permission name="android.permission.LOADER_USAGE_STATS"/>
|
||||
<!-- Permissions required for Package Verifier tests -->
|
||||
<permission name="android.permission.PACKAGE_VERIFICATION_AGENT" />
|
||||
<!-- Permission required to test system only camera devices. -->
|
||||
<permission name="android.permission.SYSTEM_CAMERA" />
|
||||
<!-- Permission required to test ExplicitHealthCheckServiceImpl. -->
|
||||
<permission name="android.permission.BIND_EXPLICIT_HEALTH_CHECK_SERVICE"/>
|
||||
<!-- Permission required for UiModeManager CTS test. -->
|
||||
<permission name="android.permission.ENTER_CAR_MODE_PRIORITIZED"/>
|
||||
<!-- Permission required for Telecom car mode CTS tests. -->
|
||||
<permission name="android.permission.CONTROL_INCALL_EXPERIENCE"/>
|
||||
<!-- Permission required for Tethering CTS tests. -->
|
||||
<permission name="android.permission.TETHER_PRIVILEGED"/>
|
||||
<!-- Permissions required for ganting and logging -->
|
||||
<permission name="android.permission.LOG_COMPAT_CHANGE" />
|
||||
<permission name="android.permission.READ_COMPAT_CHANGE_CONFIG" />
|
||||
<permission name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG" />
|
||||
<permission name="android.permission.OVERRIDE_COMPAT_CHANGE_CONFIG_ON_RELEASE_BUILD" />
|
||||
<!-- Permissions required to test ambient display. -->
|
||||
<permission name="android.permission.READ_DREAM_STATE" />
|
||||
<permission name="android.permission.WRITE_DREAM_STATE" />
|
||||
<!-- Permission required to test lights control APIs. -->
|
||||
<permission name="android.permission.CONTROL_DEVICE_LIGHTS" />
|
||||
<!-- Permission required for ShortcutManagerUsageTest CTS test. -->
|
||||
<permission name="android.permission.ACCESS_SHORTCUTS"/>
|
||||
<permission name="android.permission.REBOOT"/>
|
||||
<!-- Permission required for NfcResolverActivity CTS tests. -->
|
||||
<permission name="android.permission.SHOW_CUSTOMIZED_RESOLVER"/>
|
||||
<!-- Permission required for access VIBRATOR_STATE. -->
|
||||
<permission name="android.permission.ACCESS_VIBRATOR_STATE"/>
|
||||
<!-- Permission required for vendor vibration effects and sessions. -->
|
||||
<permission name="android.permission.VIBRATE_VENDOR_EFFECTS"/>
|
||||
<permission name="android.permission.START_VIBRATION_SESSIONS"/>
|
||||
<!-- Permission required for haptic generator sessions. -->
|
||||
<permission name="android.permission.USE_VIBRATOR_HAPTIC_GENERATOR"/>
|
||||
<!-- Permission required for UsageStatsTest CTS test. -->
|
||||
<permission name="android.permission.MANAGE_NOTIFICATIONS"/>
|
||||
<!-- Permission required for CompanionDeviceManager CTS test. -->
|
||||
<permission name="android.permission.COMPANION_APPROVE_WIFI_CONNECTIONS" />
|
||||
<permission name="android.permission.MANAGE_COMPANION_DEVICES" />
|
||||
<permission name="android.permission.REQUEST_COMPANION_PROFILE_APP_STREAMING" />
|
||||
<permission name="android.permission.REQUEST_COMPANION_PROFILE_WATCH" />
|
||||
<permission name="android.permission.REQUEST_COMPANION_PROFILE_NEARBY_DEVICE_STREAMING" />
|
||||
<permission name="android.permission.REQUEST_COMPANION_PROFILE_VIRTUAL_DEVICE" />
|
||||
<permission name="android.permission.REQUEST_COMPANION_PROFILE_COMPUTER" />
|
||||
<permission name="android.permission.REQUEST_COMPANION_SELF_MANAGED" />
|
||||
<permission name="android.permission.REQUEST_OBSERVE_DEVICE_UUID_PRESENCE" />
|
||||
<permission name="android.permission.ACCESS_COMPANION_MESSAGE_PCC" />
|
||||
<permission name="android.permission.ACCESS_COMPANION_INFO" />
|
||||
<permission name="android.permission.READ_REMOTE_TASKS" />
|
||||
<permission name="android.permission.REQUEST_TASK_HANDOFF" />
|
||||
<permission name="android.permission.READ_HANDOFF_SETTINGS" />
|
||||
<permission name="android.permission.MODIFY_HANDOFF_SETTINGS" />
|
||||
|
||||
<!-- Permission required for testing registering pull atom callbacks. -->
|
||||
<permission name="android.permission.REGISTER_STATS_PULL_ATOM"/>
|
||||
<!-- Permission required for testing system audio effect APIs. -->
|
||||
<permission name="android.permission.MODIFY_DEFAULT_AUDIO_EFFECTS"/>
|
||||
<!-- Permissions required for CTS test - TunerTest -->
|
||||
<permission name="android.permission.ACCESS_TV_DESCRAMBLER" />
|
||||
<permission name="android.permission.ACCESS_TV_SHARED_FILTER" />
|
||||
<permission name="android.permission.ACCESS_TV_TUNER" />
|
||||
<permission name="android.permission.TUNER_RESOURCE_ACCESS" />
|
||||
<!-- Permissions required for CTS test - TVInputManagerTest -->
|
||||
<permission name="android.permission.ACCESS_TUNED_INFO" />
|
||||
<permission name="android.permission.TV_INPUT_HARDWARE" />
|
||||
<permission name="android.permission.TIS_EXTENSION_INTERFACE" />
|
||||
<permission name="com.android.providers.tv.permission.ACCESS_WATCHED_PROGRAMS" />
|
||||
<permission name="com.android.providers.tv.permission.WRITE_EPG_DATA"/>
|
||||
<!-- Permission required for CTS test - PrivilegedLocationPermissionTest -->
|
||||
<permission name="android.permission.LOCATION_HARDWARE" />
|
||||
<!-- Permissions required for GTS test - GtsDialerAudioTestCases -->
|
||||
<permission name="android.permission.CAPTURE_AUDIO_OUTPUT" />
|
||||
<!-- Permissions required for CTS test - AdbManagerTest -->
|
||||
<permission name="android.permission.MANAGE_DEBUGGING" />
|
||||
<!-- Permissions required for CTS test - TimeManagerTest -->
|
||||
<permission name="android.permission.MANAGE_TIME_AND_ZONE_DETECTION" />
|
||||
<permission name="android.permission.SUGGEST_EXTERNAL_TIME" />
|
||||
<!-- Permissions required for CTS test - android.server.biometrics -->
|
||||
<permission name="android.permission.USE_BIOMETRIC" />
|
||||
<permission name="android.permission.SET_BIOMETRIC_DIALOG_ADVANCED" />
|
||||
<permission name="android.permission.MANAGE_BIOMETRIC_DIALOG" />
|
||||
<!-- Permissions required for biometrics CTS tests and AuthenticationPolicyManagerTest-->
|
||||
<permission name="android.permission.TEST_BIOMETRIC" />
|
||||
<permission name="android.permission.MANAGE_BIOMETRIC" />
|
||||
<!-- Permission required for CTS test - AuthenticationPolicyManagerTest -->
|
||||
<permission name="android.permission.MANAGE_SECURE_LOCK_DEVICE" />
|
||||
<!-- Permissions required for CTS test - CtsContactsProviderTestCases -->
|
||||
<permission name="android.contacts.permission.MANAGE_SIM_ACCOUNTS" />
|
||||
<!-- Permissions required for CTS test - CtsHdmiCecHostTestCases -->
|
||||
<permission name="android.permission.HDMI_CEC"/>
|
||||
<!-- Permission required for CTS test - MediaPlayerTest -->
|
||||
<permission name="android.permission.BIND_IMS_SERVICE" />
|
||||
<!-- Permission needed for CTS test - WifiManagerTest -->
|
||||
<permission name="android.permission.WIFI_ACCESS_COEX_UNSAFE_CHANNELS" />
|
||||
<permission name="android.permission.WIFI_UPDATE_COEX_UNSAFE_CHANNELS" />
|
||||
<permission name="android.permission.NEARBY_WIFI_DEVICES" />
|
||||
<permission name="android.permission.MANAGE_WIFI_INTERFACES" />
|
||||
<permission name="android.permission.OVERRIDE_WIFI_CONFIG" />
|
||||
<permission name="android.permission.WIFI_SET_DEVICE_MOBILITY_STATE" />
|
||||
<!-- Permission needed for CTS test - ConcurrencyTest#testP2pExternalApprover
|
||||
P2P external approver API sets require MANAGE_WIFI_NETWORK_SELECTION permission. -->
|
||||
<permission name="android.permission.MANAGE_WIFI_NETWORK_SELECTION" />
|
||||
<!-- Permission needed for CTS test - ConcurrencyTest#testP2pSetWfdInfo -->
|
||||
<permission name="android.permission.CONFIGURE_WIFI_DISPLAY" />
|
||||
<!-- Permission required for CTS test - CtsThreadNetworkTestCases -->
|
||||
<permission name="android.permission.THREAD_NETWORK_PRIVILEGED"/>
|
||||
<!-- Permission required for CTS test CarrierMessagingServiceWrapperTest -->
|
||||
<permission name="android.permission.BIND_CARRIER_SERVICES"/>
|
||||
<!-- Permission required for CTS test - MusicRecognitionManagerTest -->
|
||||
<permission name="android.permission.MANAGE_MUSIC_RECOGNITION" />
|
||||
<!-- Permission required for CTS test - CallLogTest -->
|
||||
<permission name="com.android.voicemail.permission.READ_VOICEMAIL"/>
|
||||
<permission name="android.permission.BROADCAST_CLOSE_SYSTEM_DIALOGS"/>
|
||||
<permission name="android.permission.MODIFY_QUIET_MODE" />
|
||||
<!-- Permission required for GTS test - GtsAssistIntentTestCases -->
|
||||
<permission name="android.permission.MANAGE_SOUND_TRIGGER" />
|
||||
<permission name="android.permission.CAPTURE_AUDIO_HOTWORD" />
|
||||
<!-- Permission required for CTS test - CtsRebootReadinessTestCases -->
|
||||
<permission name="android.permission.SIGNAL_REBOOT_READINESS" />
|
||||
<!-- Permission required for CTS test - PeopleManagerTest -->
|
||||
<permission name="android.permission.READ_PEOPLE_DATA" />
|
||||
<!-- Permission required for CTS test - UiTranslationManagerTest -->
|
||||
<permission name="android.permission.MANAGE_UI_TRANSLATION" />
|
||||
<!-- Permission required for CTS test - ClipboardManagerTest -->
|
||||
<permission name="android.permission.SET_CLIP_SOURCE" />
|
||||
<!-- Permission required for CTS test - FontManagerTest -->
|
||||
<permission name="android.permission.UPDATE_FONTS" />
|
||||
<!-- Permission required for hotword detection service CTS tests -->
|
||||
<permission name="android.permission.MANAGE_HOTWORD_DETECTION" />
|
||||
<permission name="android.permission.BIND_HOTWORD_DETECTION_SERVICE" />
|
||||
<permission name="android.permission.BIND_VISUAL_QUERY_DETECTION_SERVICE" />
|
||||
<permission name="android.permission.MANAGE_APP_HIBERNATION"/>
|
||||
<permission name="android.permission.RECEIVE_SANDBOX_TRIGGER_AUDIO" />
|
||||
<!-- Permission required for CTS test - ResourceObserverNativeTest -->
|
||||
<permission name="android.permission.REGISTER_MEDIA_RESOURCE_OBSERVER" />
|
||||
<!-- Permission required for CTS test - MediaCodecResourceTest -->
|
||||
<permission name="android.permission.MEDIA_RESOURCE_OVERRIDE_PID" />
|
||||
<!-- Permission required for CTS test - CtsAlarmManagerTestCases -->
|
||||
<permission name="android.permission.SCHEDULE_PRIORITIZED_ALARM" />
|
||||
<!-- Permission required for CTS test - SystemMediaRouter2Test -->
|
||||
<permission name="android.permission.MEDIA_CONTENT_CONTROL"/>
|
||||
<permission name="android.permission.MODIFY_AUDIO_ROUTING"/>
|
||||
<permission name="android.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED"/>
|
||||
<!-- Permission required for CTS test - MediaSessionTest -->
|
||||
<permission name="android.permission.OVERRIDE_MEDIA_SESSION_OWNER"/>
|
||||
<!-- Permission required for CTS test - CallAudioInterceptionTest -->
|
||||
<permission name="android.permission.CALL_AUDIO_INTERCEPTION"/>
|
||||
<!-- Permission required for CTS test - CtsAttributionSourceTestCases -->
|
||||
<permission name="android.permission.RENOUNCE_PERMISSIONS" />
|
||||
<permission name="android.permission.WRITE_EMBEDDED_SUBSCRIPTIONS" />
|
||||
<permission name="android.permission.GET_PROCESS_STATE_AND_OOM_SCORE" />
|
||||
<permission name="android.permission.READ_LOGS" />
|
||||
<permission name="android.permission.BRIGHTNESS_SLIDER_USAGE" />
|
||||
<permission name="android.permission.ACCESS_AMBIENT_LIGHT_STATS" />
|
||||
<permission name="android.permission.CONFIGURE_DISPLAY_BRIGHTNESS" />
|
||||
<permission name="android.permission.GET_TOP_ACTIVITY_INFO" />
|
||||
<permission name="android.permission.SET_VOLUME_KEY_LONG_PRESS_LISTENER" />
|
||||
<permission name="android.permission.SET_MEDIA_KEY_LISTENER" />
|
||||
<permission name="android.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS" />
|
||||
<!-- Permission required for CTS test - CtsAlarmManagerTestCases -->
|
||||
<permission name="android.permission.UPDATE_DEVICE_STATS" />
|
||||
<!-- Permission required for GTS test - PendingSystemUpdateTest -->
|
||||
<permission name="android.permission.NOTIFY_PENDING_SYSTEM_UPDATE" />
|
||||
<!-- Permission required for GTS test - GtsAssistIntentTestCases -->
|
||||
<permission name="android.permission.MANAGE_VOICE_KEYPHRASES" />
|
||||
<!-- Permission required for test - CellBroadcastComplianceTest -->
|
||||
<permission name="com.android.cellbroadcastservice.FULL_ACCESS_CELL_BROADCAST_HISTORY" />
|
||||
<!-- Permission required for ATS test - CarDevicePolicyManagerTest -->
|
||||
<permission name="android.permission.LOCK_DEVICE" />
|
||||
<!-- Permissions required for CTS test - CtsSafetyCenterTestCases -->
|
||||
<permission name="android.permission.SEND_SAFETY_CENTER_UPDATE" />
|
||||
<permission name="android.permission.READ_SAFETY_CENTER_STATUS" />
|
||||
<permission name="android.permission.MANAGE_SAFETY_CENTER" />
|
||||
<!-- Permission required for CTS test - CtsTelephonyTestCases -->
|
||||
<permission name="android.permission.BIND_TELECOM_CONNECTION_SERVICE" />
|
||||
<permission name="android.permission.ACCESS_LAST_KNOWN_CELL_ID" />
|
||||
<!-- Permission required for CTS test - CtsAppTestCases -->
|
||||
<permission name="android.permission.CAPTURE_MEDIA_OUTPUT" />
|
||||
<permission name="android.permission.CAPTURE_TUNER_AUDIO_INPUT" />
|
||||
<permission name="android.permission.CAPTURE_VOICE_COMMUNICATION_OUTPUT" />
|
||||
<permission name="android.permission.MODIFY_CELL_BROADCASTS" />
|
||||
<!-- Permission required for CTS test - CtsBroadcastRadioTestCases -->
|
||||
<permission name="android.permission.ACCESS_BROADCAST_RADIO"/>
|
||||
<!-- Permission required for CTS test - CtsAmbientContextServiceTestCases -->
|
||||
<permission name="android.permission.ACCESS_AMBIENT_CONTEXT_EVENT"/>
|
||||
<!-- Permission required for CTS test - CtsWearableSensingServiceTestCases -->
|
||||
<permission name="android.permission.MANAGE_WEARABLE_SENSING_SERVICE"/>
|
||||
<!-- Permission required for CTS test - OnDeviceIntelligenceManagerTest -->
|
||||
<permission name="android.permission.USE_ON_DEVICE_INTELLIGENCE" />
|
||||
<!-- Permission required for CTS test - CtsTelephonyProviderTestCases -->
|
||||
<permission name="android.permission.WRITE_APN_SETTINGS"/>
|
||||
<!-- Permission required for GTS test - GtsStatsdHostTestCases -->
|
||||
<permission name="android.permission.READ_RESTRICTED_STATS"/>
|
||||
<!-- Permission required for CTS test -->
|
||||
<permission name="android.permission.LOG_FOREGROUND_RESOURCE_USE"/>
|
||||
<!-- Permission required for CTS test - CtsVoiceInteractionTestCases -->
|
||||
<permission name="android.permission.SOUND_TRIGGER_RUN_IN_BATTERY_SAVER"/>
|
||||
<!-- Permission required for CTS test - SatelliteManagerTest -->
|
||||
<permission name="android.permission.SATELLITE_COMMUNICATION"/>
|
||||
<!-- Permission required for GTS test - GtsAttestationVerificationDeviceSideTestCases -->
|
||||
<permission name="android.permission.USE_ATTESTATION_VERIFICATION_SERVICE" />
|
||||
<!-- Permission required for GTS test - GtsCredentialsTestCases -->
|
||||
<permission name="android.permission.LAUNCH_CREDENTIAL_SELECTOR"/>
|
||||
<!-- Permission required for CTS test IntentRedirectionTest -->
|
||||
<permission name="android.permission.QUERY_CLONED_APPS"/>
|
||||
<permission name="android.permission.GET_BINDING_UID_IMPORTANCE"/>
|
||||
<!-- Permission required for CTS test CtsNotificationTestCases -->
|
||||
<permission name="android.permission.CONTROL_DISPLAY_COLOR_TRANSFORMS" />
|
||||
<permission name="android.permission.HIDE_STATUS_BAR_NOTIFICATION" />
|
||||
<permission name="android.permission.POST_BRIDGED_NOTIFICATIONS" />
|
||||
<!-- Permission required for BinaryTransparencyService shell API and host test -->
|
||||
<permission name="android.permission.GET_BACKGROUND_INSTALLED_PACKAGES" />
|
||||
<permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER"/>
|
||||
<!-- Permissions required for CTS test - CtsContactKeysProviderPrivilegedApp -->
|
||||
<permission name="android.permission.WRITE_VERIFICATION_STATE_E2EE_CONTACT_KEYS"/>
|
||||
<!-- Permission required for CTS test BlockedNumberContractTest -->
|
||||
<permission name="android.permission.WRITE_BLOCKED_NUMBERS" />
|
||||
<permission name="android.permission.READ_BLOCKED_NUMBERS" />
|
||||
<!-- Permission required for CTS test - PackageManagerTest -->
|
||||
<permission name="android.permission.DOMAIN_VERIFICATION_AGENT"/>
|
||||
<permission name="android.permission.DEVELOPER_VERIFICATION_AGENT"/>
|
||||
<!-- Permission required for CTS test CtsInputTestCases -->
|
||||
<permission name="android.permission.OVERRIDE_SYSTEM_KEY_BEHAVIOR_IN_FOCUSED_WINDOW" />
|
||||
<!-- Permission required for CTS test - PackageManagerShellCommandInstallTest -->
|
||||
<permission name="android.permission.EMERGENCY_INSTALL_PACKAGES" />
|
||||
<!-- Permission required for Cts test - CtsSettingsTestCases -->
|
||||
<permission name="android.permission.PREPARE_FACTORY_RESET" />
|
||||
<!-- Permission required for CTS test - FileIntegrityManagerTest -->
|
||||
<permission name="android.permission.SETUP_FSVERITY" />
|
||||
<!-- Permissions required for CTS test - AppFunctionManagerTest -->
|
||||
<permission name="android.permission.EXECUTE_APP_FUNCTIONS" />
|
||||
<!-- Permission required for CTS test - CtsNfcTestCases -->
|
||||
<permission name="android.permission.NFC_SET_CONTROLLER_ALWAYS_ON" />
|
||||
<!-- Permission required for CTS test - CtsAppTestCases -->
|
||||
<permission name="android.permission.KILL_UID" />
|
||||
<!-- Permission required for CTS test - AdvancedProtectionManagerTest -->
|
||||
<permission name="android.permission.MANAGE_ADVANCED_PROTECTION_MODE" />
|
||||
<permission name="android.permission.QUERY_ADVANCED_PROTECTION_MODE" />
|
||||
<!-- Permissions required for CTS test - SettingsPreferenceServiceClientTest -->
|
||||
<permission name="android.permission.READ_SYSTEM_PREFERENCES" />
|
||||
<permission name="android.permission.WRITE_SYSTEM_PREFERENCES" />
|
||||
<!-- Permission required for CTS test - IntrusionDetectionManagerTest -->
|
||||
<permission name="android.permission.READ_INTRUSION_DETECTION_STATE" />
|
||||
<permission name="android.permission.MANAGE_INTRUSION_DETECTION_STATE" />
|
||||
<!-- Permission required for CTS test - KeyguardLockedStateApiTest -->
|
||||
<permission name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE" />
|
||||
<!-- Permission required for CTS test - CtsContentProviderMultiUserTest -->
|
||||
<permission name="android.permission.RESOLVE_COMPONENT_FOR_UID"/>
|
||||
<!-- Permission required for CTS test - MediaQualityTest -->
|
||||
<permission name="android.permission.MANAGE_GLOBAL_PICTURE_QUALITY_SERVICE"/>
|
||||
<permission name="android.permission.MANAGE_GLOBAL_SOUND_QUALITY_SERVICE"/>
|
||||
<permission name="android.permission.READ_COLOR_ZONES"/>
|
||||
<!-- Permission required for CTS test - CtsTextClassifierTestCases -->
|
||||
<permission name="android.permission.ACCESS_TEXT_CLASSIFIER_BY_TYPE"/>
|
||||
<!-- Permission required for CTS test - CtsSecurityTestCases -->
|
||||
<permission name="android.permission.MANAGE_DEVICE_POLICY_MTE"/>
|
||||
<!-- Permission required for integration test - InputTest -->
|
||||
<permission name="android.permission.LISTEN_FOR_KEY_ACTIVITY"/>
|
||||
<permission name="android.permission.OBSERVE_ROLE_HOLDERS"/>
|
||||
<!-- Permission required for CTS test - CtsRoleTestCases -->
|
||||
<permission name="android.permission.GET_ROLE_HOLDERS"/>
|
||||
<!-- Permission required for CTS test - CtsAnomalyDetectorTests -->
|
||||
<permission name="android.permission.CONFIGURE_ANOMALY_DETECTOR"/>
|
||||
<!-- Permission required for CTS test - CtsNpuManagerTestCases -->
|
||||
<permission name="android.permission.ACCESS_NPU_MODEL_MANAGER_API"/>
|
||||
<!-- Permission required for CTS test - CtsProviderUiTestCases -->
|
||||
<permission name="android.permission.MANAGE_DOCUMENTS"/>
|
||||
<!-- Permission required for CTS test - StatusBarManagerTest -->
|
||||
<permission name="android.permission.SHOW_POWER_MENU_PRIVILEGED" />
|
||||
<!-- Permission required for Health Connect CTS tests -->
|
||||
<permission name="android.permission.PROVIDE_HEALTH_CONNECT_DEVICE_DATA" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.soundpicker">
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.providers.tv">
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.tv">
|
||||
<permission name="android.permission.CHANGE_HDMI_CEC_ACTIVE_SOURCE"/>
|
||||
<permission name="android.permission.DVB_DEVICE"/>
|
||||
<permission name="android.permission.GLOBAL_SEARCH"/>
|
||||
<permission name="android.permission.HDMI_CEC"/>
|
||||
<permission name="android.permission.MODIFY_PARENTAL_CONTROLS"/>
|
||||
<permission name="android.permission.READ_CONTENT_RATING_SYSTEMS"/>
|
||||
<permission name="com.android.providers.tv.permission.ACCESS_ALL_EPG_DATA"/>
|
||||
<permission name="com.android.providers.tv.permission.ACCESS_WATCHED_PROGRAMS"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.vpndialogs">
|
||||
<permission name="android.permission.CONTROL_VPN"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.wallpaper.livepicker">
|
||||
<permission name="android.permission.SET_WALLPAPER_COMPONENT"/>
|
||||
<permission name="android.permission.BIND_WALLPAPER"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.wallpaper">
|
||||
<permission name="android.permission.SET_WALLPAPER_COMPONENT"/>
|
||||
<permission name="android.permission.BIND_WALLPAPER"/>
|
||||
<permission name="android.permission.CUSTOMIZE_SYSTEM_UI"/>
|
||||
<permission name="android.permission.SET_WALLPAPER_DIM_AMOUNT"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.dynsystem">
|
||||
<permission name="android.permission.REBOOT"/>
|
||||
<permission name="android.permission.MANAGE_DYNAMIC_SYSTEM"/>
|
||||
<permission name="android.permission.READ_OEM_UNLOCK_STATE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.settings">
|
||||
<permission name="android.permission.INSTALL_DYNAMIC_SYSTEM"/>
|
||||
<permission name="android.permission.BIND_CELL_BROADCAST_SERVICE"/>
|
||||
<permission name="android.permission.MANAGE_SAFETY_CENTER" />
|
||||
<permission name="android.permission.READ_SAFETY_CENTER_STATUS" />
|
||||
<permission name="android.permission.SEND_SAFETY_CENTER_UPDATE" />
|
||||
<permission name="android.permission.READ_SYSTEM_GRAMMATICAL_GENDER"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.bips">
|
||||
<permission name="android.permission.SUBSTITUTE_SHARE_TARGET_APP_NAME_AND_ICON"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.calllogbackup">
|
||||
<permission name="com.android.voicemail.permission.READ_VOICEMAIL"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.devicediagnostics">
|
||||
<permission name="android.permission.READ_PRIVILEGED_PHONE_STATE"/>
|
||||
<permission name="android.permission.BATTERY_STATS"/>
|
||||
<permission name="android.permission.ENTER_TRADE_IN_MODE"/>
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.wm.shell">
|
||||
<permission name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE" />
|
||||
</privapp-permissions>
|
||||
|
||||
<privapp-permissions package="com.android.crossdevicesync">
|
||||
<permission name="android.permission.INTERACT_ACROSS_USERS" />
|
||||
<permission name="android.permission.MANAGE_USERS" />
|
||||
</privapp-permissions>
|
||||
</permissions>
|
||||
Binary file not shown.
Binary file not shown.
@@ -1,643 +0,0 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Miracast Enabler</title>
|
||||
<style>
|
||||
:root {
|
||||
--bg: #121212;
|
||||
--surface: #1e1e1e;
|
||||
--surface2: #2a2a2a;
|
||||
--primary: #bb86fc;
|
||||
--primary-dim: #9965d6;
|
||||
--on-surface: #e0e0e0;
|
||||
--on-surface-dim: #888;
|
||||
--success: #4caf50;
|
||||
--warning: #ff9800;
|
||||
--error: #f44336;
|
||||
--radius: 12px;
|
||||
}
|
||||
|
||||
* { margin: 0; padding: 0; box-sizing: border-box; }
|
||||
|
||||
body {
|
||||
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
|
||||
background: var(--bg);
|
||||
color: var(--on-surface);
|
||||
min-height: 100vh;
|
||||
padding: 16px;
|
||||
-webkit-font-smoothing: antialiased;
|
||||
}
|
||||
|
||||
.header {
|
||||
text-align: center;
|
||||
padding: 24px 0 16px;
|
||||
}
|
||||
.header h1 {
|
||||
font-size: 22px;
|
||||
font-weight: 600;
|
||||
color: var(--primary);
|
||||
}
|
||||
.header .version {
|
||||
font-size: 12px;
|
||||
color: var(--on-surface-dim);
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
||||
.status-banner {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
gap: 10px;
|
||||
padding: 14px 16px;
|
||||
border-radius: var(--radius);
|
||||
margin-bottom: 20px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.status-banner.active {
|
||||
background: rgba(76, 175, 80, 0.15);
|
||||
color: var(--success);
|
||||
}
|
||||
.status-banner.inactive {
|
||||
background: rgba(244, 67, 54, 0.15);
|
||||
color: var(--error);
|
||||
}
|
||||
.status-banner.loading {
|
||||
background: rgba(255, 152, 0, 0.15);
|
||||
color: var(--warning);
|
||||
}
|
||||
.status-dot {
|
||||
width: 10px;
|
||||
height: 10px;
|
||||
border-radius: 50%;
|
||||
background: currentColor;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.card {
|
||||
background: var(--surface);
|
||||
border-radius: var(--radius);
|
||||
padding: 16px;
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
.card-title {
|
||||
font-size: 13px;
|
||||
font-weight: 600;
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.5px;
|
||||
color: var(--primary);
|
||||
margin-bottom: 12px;
|
||||
}
|
||||
|
||||
.setting-row {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
padding: 12px 0;
|
||||
border-bottom: 1px solid var(--surface2);
|
||||
}
|
||||
.setting-row:last-child { border-bottom: none; }
|
||||
.setting-label {
|
||||
font-size: 15px;
|
||||
font-weight: 500;
|
||||
}
|
||||
.setting-desc {
|
||||
font-size: 12px;
|
||||
color: var(--on-surface-dim);
|
||||
margin-top: 2px;
|
||||
}
|
||||
|
||||
.toggle {
|
||||
position: relative;
|
||||
width: 48px;
|
||||
height: 26px;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
.toggle input {
|
||||
opacity: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
.toggle .slider {
|
||||
position: absolute;
|
||||
inset: 0;
|
||||
background: var(--surface2);
|
||||
border-radius: 13px;
|
||||
cursor: pointer;
|
||||
transition: background 0.2s;
|
||||
}
|
||||
.toggle .slider::before {
|
||||
content: "";
|
||||
position: absolute;
|
||||
width: 20px;
|
||||
height: 20px;
|
||||
left: 3px;
|
||||
bottom: 3px;
|
||||
background: var(--on-surface-dim);
|
||||
border-radius: 50%;
|
||||
transition: transform 0.2s, background 0.2s;
|
||||
}
|
||||
.toggle input:checked + .slider {
|
||||
background: var(--primary-dim);
|
||||
}
|
||||
.toggle input:checked + .slider::before {
|
||||
transform: translateX(22px);
|
||||
background: var(--primary);
|
||||
}
|
||||
|
||||
select.setting-select {
|
||||
background: var(--surface2);
|
||||
color: var(--on-surface);
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
padding: 8px 12px;
|
||||
font-size: 14px;
|
||||
outline: none;
|
||||
cursor: pointer;
|
||||
flex-shrink: 0;
|
||||
}
|
||||
|
||||
.info-grid {
|
||||
display: grid;
|
||||
grid-template-columns: 1fr 1fr;
|
||||
gap: 8px;
|
||||
}
|
||||
.info-item {
|
||||
background: var(--surface2);
|
||||
border-radius: 8px;
|
||||
padding: 10px 12px;
|
||||
}
|
||||
.info-item .label {
|
||||
font-size: 11px;
|
||||
color: var(--on-surface-dim);
|
||||
text-transform: uppercase;
|
||||
letter-spacing: 0.3px;
|
||||
}
|
||||
.info-item .value {
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
margin-top: 2px;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.log-area {
|
||||
background: var(--surface2);
|
||||
border-radius: 8px;
|
||||
padding: 12px;
|
||||
font-family: "Cascadia Code", "Fira Code", monospace;
|
||||
font-size: 12px;
|
||||
line-height: 1.6;
|
||||
max-height: 200px;
|
||||
overflow-y: auto;
|
||||
color: var(--on-surface-dim);
|
||||
white-space: pre-wrap;
|
||||
word-break: break-all;
|
||||
}
|
||||
|
||||
.btn {
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
gap: 6px;
|
||||
padding: 10px 20px;
|
||||
border: none;
|
||||
border-radius: 8px;
|
||||
font-size: 14px;
|
||||
font-weight: 500;
|
||||
cursor: pointer;
|
||||
transition: opacity 0.2s;
|
||||
width: 100%;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.btn:active { opacity: 0.7; }
|
||||
.btn-primary {
|
||||
background: var(--primary);
|
||||
color: #000;
|
||||
}
|
||||
.btn-secondary {
|
||||
background: var(--surface2);
|
||||
color: var(--on-surface);
|
||||
}
|
||||
</style>
|
||||
</head>
|
||||
<body>
|
||||
<div class="header">
|
||||
<h1>Miracast Enabler</h1>
|
||||
<div class="version">v1.0.0</div>
|
||||
</div>
|
||||
|
||||
<div id="statusBanner" class="status-banner loading">
|
||||
<div class="status-dot"></div>
|
||||
<span id="statusText">Reading device state...</span>
|
||||
</div>
|
||||
|
||||
<!-- Core Toggles -->
|
||||
<div class="card">
|
||||
<div class="card-title">Miracast</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Wi-Fi Display</div>
|
||||
<div class="setting-desc">Master toggle for Miracast</div>
|
||||
</div>
|
||||
<label class="toggle">
|
||||
<input type="checkbox" id="toggleWfd" onchange="setProp('persist.debug.wfd.enable', this.checked ? '1' : '0')">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Disable HDCP</div>
|
||||
<div class="setting-desc">Skip DRM handshake (fixes many receivers)</div>
|
||||
</div>
|
||||
<label class="toggle">
|
||||
<input type="checkbox" id="toggleHdcp" onchange="setProp('persist.sys.wfd.nohdcp', this.checked ? '1' : '0')">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Virtual Display</div>
|
||||
<div class="setting-desc">Use virtual display instead of overlay</div>
|
||||
</div>
|
||||
<label class="toggle">
|
||||
<input type="checkbox" id="toggleVirtual" onchange="setProp('persist.sys.wfd.virtual', this.checked ? '1' : '0')">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Resolution & Codec -->
|
||||
<div class="card">
|
||||
<div class="card-title">Quality</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Max Resolution</div>
|
||||
<div class="setting-desc">Caps output resolution for stability</div>
|
||||
</div>
|
||||
<select class="setting-select" id="selectResolution" onchange="setProp('persist.sys.wfd.resolution', this.value)">
|
||||
<option value="0">Auto</option>
|
||||
<option value="7">1920x1080 (30Hz)</option>
|
||||
<option value="28">1920x1080 (60Hz)</option>
|
||||
<option value="6">1280x720 (30Hz)</option>
|
||||
<option value="27">1280x720 (60Hz)</option>
|
||||
<option value="5">800x480 (30Hz)</option>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">WLAN HDCP</div>
|
||||
<div class="setting-desc">Wi-Fi level HDCP control</div>
|
||||
</div>
|
||||
<select class="setting-select" id="selectWlanHdcp" onchange="setProp('wlan.wfd.hdcp', this.value)">
|
||||
<option value="disable">Disabled</option>
|
||||
<option value="enable">Enabled</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Pixel-Specific -->
|
||||
<div class="card">
|
||||
<div class="card-title">Pixel / Tensor Tweaks</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Force P2P Concurrency</div>
|
||||
<div class="setting-desc">Allow Wi-Fi Direct alongside station mode</div>
|
||||
</div>
|
||||
<label class="toggle">
|
||||
<input type="checkbox" id="toggleP2p" onchange="setProp('wifi.direct.interface', this.checked ? 'p2p-dev-wlan0' : '')">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Force Display Composition</div>
|
||||
<div class="setting-desc">Use GPU composition for wireless display</div>
|
||||
</div>
|
||||
<label class="toggle">
|
||||
<input type="checkbox" id="toggleComposition" onchange="setProp('debug.sf.enable_hwc_vds', this.checked ? '0' : '1')">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Fold Display Source</div>
|
||||
<div class="setting-desc">Which display to mirror on foldables</div>
|
||||
</div>
|
||||
<select class="setting-select" id="selectFoldDisplay" onchange="setFoldDisplay(this.value)">
|
||||
<option value="default">Active Display</option>
|
||||
<option value="inner">Inner Display</option>
|
||||
<option value="outer">Outer Display</option>
|
||||
</select>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Framework Overlay -->
|
||||
<div class="card">
|
||||
<div class="card-title">Framework Overlay</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">config_enableWifiDisplay</div>
|
||||
<div class="setting-desc">Framework feature flag (fabricated overlay)</div>
|
||||
</div>
|
||||
<label class="toggle">
|
||||
<input type="checkbox" id="toggleOverlayWfd" onchange="setFabricatedOverlay('MiracastEnablerWifiDisplay', 'config_enableWifiDisplay', this.checked)">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">config_wifiDisplaySupportsProtectedBuffers</div>
|
||||
<div class="setting-desc">Allow DRM content over wireless display</div>
|
||||
</div>
|
||||
<label class="toggle">
|
||||
<input type="checkbox" id="toggleOverlayProtected" onchange="setFabricatedOverlay('MiracastEnablerProtectedBuffers', 'config_wifiDisplaySupportsProtectedBuffers', this.checked)">
|
||||
<span class="slider"></span>
|
||||
</label>
|
||||
</div>
|
||||
|
||||
<div class="setting-row">
|
||||
<div>
|
||||
<div class="setting-label">Overlay Status</div>
|
||||
<div class="setting-desc" id="overlayStatusDesc">Checking...</div>
|
||||
</div>
|
||||
<button class="btn btn-secondary" style="width:auto;margin:0;padding:6px 14px" onclick="reapplyOverlays()">Re-apply</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Device Info -->
|
||||
<div class="card">
|
||||
<div class="card-title">Device Info</div>
|
||||
<div class="info-grid">
|
||||
<div class="info-item">
|
||||
<div class="label">Device</div>
|
||||
<div class="value" id="infoDevice">—</div>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<div class="label">SoC</div>
|
||||
<div class="value" id="infoSoc">—</div>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<div class="label">Android</div>
|
||||
<div class="value" id="infoAndroid">—</div>
|
||||
</div>
|
||||
<div class="info-item">
|
||||
<div class="label">Wi-Fi Chip</div>
|
||||
<div class="value" id="infoWifi">—</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Log -->
|
||||
<div class="card">
|
||||
<div class="card-title">Log</div>
|
||||
<div class="log-area" id="logArea">Initializing...</div>
|
||||
<div style="display:flex;gap:8px">
|
||||
<button class="btn btn-secondary" style="flex:1" onclick="refreshAll()">Refresh Status</button>
|
||||
<button class="btn btn-secondary" style="flex:1" onclick="showModuleLog()">Module Log</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
// KernelSU WebUI shell execution wrapper
|
||||
function exec(cmd) {
|
||||
return new Promise((resolve, reject) => {
|
||||
const callbackName = 'exec_cb_' + Date.now() + '_' + Math.random().toString(36).slice(2);
|
||||
window[callbackName] = (errno, stdout, stderr) => {
|
||||
delete window[callbackName];
|
||||
resolve({ errno, stdout: stdout || '', stderr: stderr || '' });
|
||||
};
|
||||
try {
|
||||
ksu.exec(cmd, '{}', callbackName);
|
||||
} catch (e) {
|
||||
delete window[callbackName];
|
||||
reject(e);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function log(msg) {
|
||||
const area = document.getElementById('logArea');
|
||||
const ts = new Date().toLocaleTimeString('en-US', { hour12: false });
|
||||
area.textContent += '\n[' + ts + '] ' + msg;
|
||||
area.scrollTop = area.scrollHeight;
|
||||
}
|
||||
|
||||
async function getprop(name) {
|
||||
try {
|
||||
const r = await exec('getprop ' + name);
|
||||
return r.stdout.trim();
|
||||
} catch (e) {
|
||||
return '';
|
||||
}
|
||||
}
|
||||
|
||||
async function setProp(name, value) {
|
||||
log('Setting ' + name + '=' + value);
|
||||
try {
|
||||
// resetprop for runtime, setprop for persistence where applicable
|
||||
await exec('resetprop ' + name + ' ' + JSON.stringify(value));
|
||||
log('OK: ' + name + ' = ' + value);
|
||||
updateStatus();
|
||||
} catch (e) {
|
||||
log('ERROR setting ' + name + ': ' + e.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function setFabricatedOverlay(name, resource, enabled) {
|
||||
log('Setting fabricated overlay: ' + name + ' = ' + enabled);
|
||||
try {
|
||||
if (enabled) {
|
||||
// 0x12 = TYPE_INT_BOOLEAN, 0xFFFFFFFF = true
|
||||
await exec('cmd overlay fabricate --target android --name ' + name +
|
||||
' android:bool/' + resource + ' 0x12 0xFFFFFFFF');
|
||||
await exec('cmd overlay enable --user current com.android.shell:' + name);
|
||||
} else {
|
||||
await exec('cmd overlay disable --user current com.android.shell:' + name);
|
||||
}
|
||||
log('OK: ' + name + ' = ' + (enabled ? 'enabled' : 'disabled'));
|
||||
await checkOverlayStatus();
|
||||
} catch (e) {
|
||||
log('ERROR: ' + e.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function reapplyOverlays() {
|
||||
log('Re-applying all fabricated overlays...');
|
||||
try {
|
||||
await exec('cmd overlay fabricate --target android --name MiracastEnablerWifiDisplay android:bool/config_enableWifiDisplay 0x12 0xFFFFFFFF');
|
||||
await exec('cmd overlay fabricate --target android --name MiracastEnablerProtectedBuffers android:bool/config_wifiDisplaySupportsProtectedBuffers 0x12 0xFFFFFFFF');
|
||||
await exec('cmd overlay enable --user current com.android.shell:MiracastEnablerWifiDisplay');
|
||||
await exec('cmd overlay enable --user current com.android.shell:MiracastEnablerProtectedBuffers');
|
||||
log('OK: overlays re-applied');
|
||||
await checkOverlayStatus();
|
||||
} catch (e) {
|
||||
log('ERROR: ' + e.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function checkOverlayStatus() {
|
||||
try {
|
||||
const r = await exec('cmd overlay list | grep -i miracast');
|
||||
const lines = r.stdout.trim();
|
||||
const desc = document.getElementById('overlayStatusDesc');
|
||||
const wfdToggle = document.getElementById('toggleOverlayWfd');
|
||||
const protToggle = document.getElementById('toggleOverlayProtected');
|
||||
|
||||
if (lines) {
|
||||
desc.textContent = lines.replace(/\n/g, ' | ');
|
||||
// [x] = enabled, [ ] = disabled
|
||||
wfdToggle.checked = lines.includes('[x] com.android.shell:MiracastEnablerWifiDisplay');
|
||||
protToggle.checked = lines.includes('[x] com.android.shell:MiracastEnablerProtectedBuffers');
|
||||
} else {
|
||||
desc.textContent = 'No fabricated overlays found (will be created on next boot)';
|
||||
wfdToggle.checked = false;
|
||||
protToggle.checked = false;
|
||||
}
|
||||
} catch (e) {
|
||||
document.getElementById('overlayStatusDesc').textContent = 'Error checking overlay status';
|
||||
}
|
||||
}
|
||||
|
||||
async function showModuleLog() {
|
||||
try {
|
||||
const r = await exec('cat /data/adb/modules/miracast-enabler/miracast.log 2>/dev/null || echo "No log file found"');
|
||||
const area = document.getElementById('logArea');
|
||||
area.textContent = '=== Module Boot Log ===\n' + r.stdout;
|
||||
area.scrollTop = area.scrollHeight;
|
||||
} catch (e) {
|
||||
log('Could not read module log');
|
||||
}
|
||||
}
|
||||
|
||||
async function setFoldDisplay(mode) {
|
||||
log('Setting fold display source: ' + mode);
|
||||
try {
|
||||
// Display IDs vary by device:
|
||||
// rango (Pixel 10 Pro Fold): inner=0, outer=3
|
||||
// comet (Pixel 9 Pro Fold): inner=0, outer=1
|
||||
// felix (Pixel Fold 1): inner=0, outer=1
|
||||
// We read the actual device to pick the right outer ID
|
||||
const device = await getprop('ro.product.device');
|
||||
const outerDisplayId = (device === 'rango') ? '3' : '1';
|
||||
|
||||
if (mode === 'inner') {
|
||||
await exec('resetprop persist.sys.wfd.display_id 0');
|
||||
} else if (mode === 'outer') {
|
||||
await exec('resetprop persist.sys.wfd.display_id ' + outerDisplayId);
|
||||
} else {
|
||||
await exec('resetprop --delete persist.sys.wfd.display_id');
|
||||
}
|
||||
log('OK: fold display = ' + mode + (mode === 'outer' ? ' (ID ' + outerDisplayId + ')' : ''));
|
||||
} catch (e) {
|
||||
log('ERROR: ' + e.message);
|
||||
}
|
||||
}
|
||||
|
||||
async function updateStatus() {
|
||||
const wfd = await getprop('persist.debug.wfd.enable');
|
||||
const banner = document.getElementById('statusBanner');
|
||||
const text = document.getElementById('statusText');
|
||||
|
||||
if (wfd === '1') {
|
||||
banner.className = 'status-banner active';
|
||||
text.textContent = 'Miracast enabled';
|
||||
} else {
|
||||
banner.className = 'status-banner inactive';
|
||||
text.textContent = 'Miracast disabled';
|
||||
}
|
||||
}
|
||||
|
||||
async function loadCurrentValues() {
|
||||
const props = {
|
||||
'persist.debug.wfd.enable': 'toggleWfd',
|
||||
'persist.sys.wfd.nohdcp': 'toggleHdcp',
|
||||
'persist.sys.wfd.virtual': 'toggleVirtual',
|
||||
};
|
||||
|
||||
for (const [prop, id] of Object.entries(props)) {
|
||||
const val = await getprop(prop);
|
||||
document.getElementById(id).checked = (val === '1');
|
||||
}
|
||||
|
||||
// P2P concurrency
|
||||
const p2pIface = await getprop('wifi.direct.interface');
|
||||
document.getElementById('toggleP2p').checked = (p2pIface === 'p2p-dev-wlan0');
|
||||
|
||||
// HWC virtual display — note: toggle is inverted (checked = force GPU = hwc_vds=0)
|
||||
const hwcVds = await getprop('debug.sf.enable_hwc_vds');
|
||||
document.getElementById('toggleComposition').checked = (hwcVds === '0');
|
||||
|
||||
// Resolution
|
||||
const res = await getprop('persist.sys.wfd.resolution');
|
||||
if (res) {
|
||||
document.getElementById('selectResolution').value = res;
|
||||
}
|
||||
|
||||
// WLAN HDCP
|
||||
const wlanHdcp = await getprop('wlan.wfd.hdcp');
|
||||
if (wlanHdcp) {
|
||||
document.getElementById('selectWlanHdcp').value = wlanHdcp;
|
||||
}
|
||||
|
||||
// Fold display
|
||||
const displayId = await getprop('persist.sys.wfd.display_id');
|
||||
if (displayId === '0') {
|
||||
document.getElementById('selectFoldDisplay').value = 'inner';
|
||||
} else if (displayId === '1') {
|
||||
document.getElementById('selectFoldDisplay').value = 'outer';
|
||||
}
|
||||
}
|
||||
|
||||
async function loadDeviceInfo() {
|
||||
const device = await getprop('ro.product.model');
|
||||
const soc = await getprop('ro.soc.model');
|
||||
const android = await getprop('ro.build.version.release');
|
||||
|
||||
document.getElementById('infoDevice').textContent = device || 'Unknown';
|
||||
document.getElementById('infoSoc').textContent = soc || 'Unknown';
|
||||
document.getElementById('infoAndroid').textContent = android || 'Unknown';
|
||||
|
||||
// Detect Wi-Fi chip from loaded kernel modules
|
||||
try {
|
||||
const r = await exec('ls /sys/module/ | grep -iE "^(bcmdhd|qca|wcn|wlan|ath|mt76|iwl)" | head -1');
|
||||
const chip = r.stdout.trim();
|
||||
document.getElementById('infoWifi').textContent = chip || 'Unknown';
|
||||
} catch (e) {
|
||||
document.getElementById('infoWifi').textContent = 'Unknown';
|
||||
}
|
||||
}
|
||||
|
||||
async function refreshAll() {
|
||||
log('Refreshing...');
|
||||
await loadCurrentValues();
|
||||
await updateStatus();
|
||||
await loadDeviceInfo();
|
||||
await checkOverlayStatus();
|
||||
log('Refresh complete');
|
||||
}
|
||||
|
||||
// Init
|
||||
(async function init() {
|
||||
try {
|
||||
await refreshAll();
|
||||
log('Ready');
|
||||
} catch (e) {
|
||||
log('Init error: ' + e.message);
|
||||
document.getElementById('statusBanner').className = 'status-banner loading';
|
||||
document.getElementById('statusText').textContent = 'Error reading device state';
|
||||
}
|
||||
})();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
Reference in New Issue
Block a user