Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

LineageParts: Add new PreferenceCategory and RemotePreference for Hardware Switch

Description

LineageParts: Add new PreferenceCategory and RemotePreference for Hardware Switch.
This feature is fully overlayable from device-side and can house any kind of custom setting fragment.

Screenshots

image

Technical details

Following diff is an example change to move an option from Settings > System (SettingsLib) into Settings > System > Buttons (LineageParts):

diff --git a/parts/AndroidManifest.xml b/parts/AndroidManifest.xml
index 76ed5ec..5a850cd 100644
--- a/parts/AndroidManifest.xml
+++ b/parts/AndroidManifest.xml
@@ -25,24 +25,9 @@
             android:label="@string/switch_settings_title"
             android:theme="@style/Theme.SubSettingsBase">
             <intent-filter>
-                <action android:name="com.android.settings.action.IA_SETTINGS" />
+                <action android:name="org.lineageos.settings.device.HARDWARE_SWITCH_SETTINGS" />
                 <category android:name="android.intent.category.DEFAULT" />
             </intent-filter>
-            <meta-data
-                android:name="com.android.settings.category"
-                android:value="com.android.settings.category.ia.system" />
-            <meta-data
-                android:name="com.android.settings.icon_tintable"
-                android:value="true" />
-            <meta-data
-                android:name="com.android.settings.icon"
-                android:resource="@drawable/ic_settings_switch_button" />
-            <meta-data
-                android:name="com.android.settings.summary"
-                android:resource="@string/switch_settings_summary" />
-            <meta-data
-                android:name="com.android.settings.order"
-                android:value="-256" />
         </activity>
 
         <activity

The section title, option title, icon and description are all overlayable from device side:

diff --git a/parts/res/drawable/ic_settings_switch_button.xml b/overlay-lineage/packages/apps/LineageParts/res/drawable/ic_hardware_switch.xml
similarity index 100%
rename from parts/res/drawable/ic_settings_switch_button.xml
rename to overlay-lineage/packages/apps/LineageParts/res/drawable/ic_hardware_switch.xml

diff --git a/overlay-lineage/packages/apps/LineageParts/res/values/strings.xml b/overlay-lineage/packages/apps/LineageParts/res/values/strings.xml
new file mode 100644
index 0000000..321eef6
--- /dev/null
+++ b/overlay-lineage/packages/apps/LineageParts/res/values/strings.xml
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <!-- Switch Settings -->
+    <string name="hardware_switch_category_title">Switch</string>
+    <string name="hardware_switch_title">Switch action</string>
+    <string name="hardware_switch_summary">Configure hardware switch function</string>
+</resources>

To enable overlays:

# Overlays
DEVICE_PACKAGE_OVERLAYS += \
    $(LOCAL_PATH)/overlay-lineage

Tests

  • Ensure section is not visible by default
  • Ensure section and option are visible when an app registers org.lineageos.settings.device.HARDWARE_SWITCH_SETTINGS
  • Ensure pressing on option opens the custom fragment defined on device-side (or external app) when it registers org.lineageos.settings.device.HARDWARE_SWITCH_SETTINGS

Issues

https://gitlab.e.foundation/e/devices/backlog/-/issues/1686

10 commandments of code review

👪 ❤️ code review guidelines

Merge request reports

Loading