[Replicant] [vendor_replicant-scripts] [PATCH 1/2] display: renderer: rework script user interface

Denis 'GNUtoo' Carikli GNUtoo at cyberdimension.org
Fri Jun 19 15:45:58 UTC 2020


The current interface has various issues that are fixed by
this new interface. Here's the design decisions that went
into the new interface:
- Many people don't know what llvmpipe is, and androidsw.sh
  is not easy to remember.
- This new interface still work fine on devices with a
  small screen like the Galaxy SII and with the default
  keyboard configuration.
- It also checks for root permissions and has a help.

Signed-off-by: Denis 'GNUtoo' Carikli <GNUtoo at cyberdimension.org>
---
 display/renderer/Android.mk                |  11 +-
 display/renderer/device-files/androidsw.sh |  51 --------
 display/renderer/device-files/graphics.sh  | 137 +++++++++++++++++++++
 display/renderer/device-files/llvmpipe.sh  |  51 --------
 4 files changed, 139 insertions(+), 111 deletions(-)
 delete mode 100644 display/renderer/device-files/androidsw.sh
 create mode 100644 display/renderer/device-files/graphics.sh
 delete mode 100644 display/renderer/device-files/llvmpipe.sh

diff --git a/display/renderer/Android.mk b/display/renderer/Android.mk
index 338b020..c0b619e 100644
--- a/display/renderer/Android.mk
+++ b/display/renderer/Android.mk
@@ -2,14 +2,7 @@
 LOCAL_PATH := $(call my-dir)
 
 include $(CLEAR_VARS)
-LOCAL_MODULE := llvmpipe.sh
-LOCAL_SRC_FILES := device-files/llvmpipe.sh
+LOCAL_MODULE := graphics.sh
+LOCAL_SRC_FILES := device-files/graphics.sh
 LOCAL_MODULE_CLASS := EXECUTABLES
 include $(BUILD_PREBUILT)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := androidsw.sh
-LOCAL_SRC_FILES := device-files/androidsw.sh
-LOCAL_MODULE_CLASS := EXECUTABLES
-
-include $(BUILD_PREBUILT)
diff --git a/display/renderer/device-files/androidsw.sh b/display/renderer/device-files/androidsw.sh
deleted file mode 100644
index 175e41f..0000000
--- a/display/renderer/device-files/androidsw.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/system/xbin/bash
-#
-# Copyright (C) 2017 Jeremy Rand <jeremy at veclabs.net>
-# Partially based on code by Wolfgang Wiedmeyer <wolfgit at wiedmeyer.de> and Filippo Fil Bergamo
-#
-# This file is part of "Replicant Renderer Switcher", a set of shell scripts to switch between
-# the Android Software Renderer and the llvmpipe renderer in Replicant.
-#
-# Replicant Renderer Switcher is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Replicant Renderer Switcher is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-set -euf -o pipefail
-
-grep -q "ro.libagl=0" /system/build.prop && renderer="llvmpipe" || renderer="android"
-
-if [ "${renderer}" == "android" ]
-then
-    echo "Android software renderer is already enabled!"
-    exit 1
-fi
-
-echo "Remounting system partition as writable..."
-mount -o rw,remount /system
-
-echo "Enabling Android software renderer..."
-sed "s/ro.libagl=0/ro.libagl=1/" -i /system/build.prop
-
-echo "Syncing filesystem..."
-sync
-sync
-
-echo "Remounting system partition as read-only..."
-mount -o ro,remount /system
-
-echo "Syncing filesystem..."
-sync
-sync
-
-# https://android.stackexchange.com/a/139139
-echo "Android software renderer will be enabled after we reboot now..."
-am start -a android.intent.action.REBOOT
diff --git a/display/renderer/device-files/graphics.sh b/display/renderer/device-files/graphics.sh
new file mode 100644
index 0000000..daf4ee1
--- /dev/null
+++ b/display/renderer/device-files/graphics.sh
@@ -0,0 +1,137 @@
+#!/system/xbin/bash
+#
+# Copyright (C) 2017 Jeremy Rand <jeremy at veclabs.net>
+# Partially based on code by Wolfgang Wiedmeyer <wolfgit at wiedmeyer.de> and Filippo Fil Bergamo
+#
+# This file is part of "Replicant Renderer Switcher", a set of shell scripts to switch between
+# the Android Software Renderer and the llvmpipe renderer in Replicant.
+#
+# Replicant Renderer Switcher is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# Replicant Renderer Switcher is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+set -euf -o pipefail
+
+usage()
+{
+	echo "Usage: graphics.sh [faster|compatible]"
+	echo "Examples:"
+	echo "graphics.sh faster"
+	echo "|-> Uses Android's libagl"
+	echo "    which is faster"
+	echo "    but some applications"
+	echo "    like icecat won't work"
+	echo "graphics.sh compatible"
+	echo "|-> Uses llvmpipe"
+	echo "    which is slower"
+	echo "    but more compatible"
+	exit 1
+}
+
+check_permissions()
+{
+	new_renderer="$1"
+
+	root_access="$(getprop persist.sys.root_access)"
+	uid="$(id -u)"
+
+	# 0: Root access: Disabled, 2: Root access: ADB only
+	#    For both the terminal application and ADB we have something
+	#    like that:
+	#        shell at i9100:/ $ su
+	#        255|shell at i9100:/ $
+	# 1: Root access: Apps only
+	#    From ADB:
+	#        shell at i9100:/ $ su
+	#        Permission denied
+	#        1|shell at i9100:/ $
+	#    From the terminal application
+	#        u0_a51 at i9100:/ $ su
+	#        root at i9100:/ #
+	if [ "${uid}" != "0" ] ; then
+	    echo ""
+	    echo "This script requires root."
+	    echo "To give it root:"
+	    case "${root_access}" in
+		"0"|"1"|"2")
+		    echo "- Go in Settings"
+		    echo "- Go in Developer options"
+		    echo "- Select Root access"
+		    echo "- Set it to \"Apps and ADB\""
+		    ;;
+	    esac
+	    echo "- Run these 2 commands:"
+	    echo "  su"
+	    echo "  graphics.sh ${new_renderer}"
+	    exit 1
+	fi
+}
+
+graphics()
+{
+    new_renderer="$1" # libagl || llvmpipe
+
+    check_permissions "${new_renderer}"
+
+    grep -q "ro.libagl=0" /system/build.prop && \
+	old_renderer="llvmpipe" || old_renderer="libagl"
+
+    if [ "${old_renderer}" == "${new_renderer}" ] ; then
+	if [ "${old_renderer}" = "libagl" ] ; then
+	    echo "Android software renderer is already enabled!"
+	else
+	    echo "${old_renderer} renderer is already enabled!"
+	fi
+	exit 1
+    fi
+
+    echo "Remounting system partition as writable..."
+    mount -o rw,remount /system
+
+    if [ "${new_renderer}" == "libagl" ] ; then
+	echo "Enabling Android software renderer..."
+	sed "s/ro.libagl=0/ro.libagl=1/" -i /system/build.prop
+    else
+	echo "Enabling ${new_renderer}..."
+	sed "s/ro.libagl=1/ro.libagl=0/" -i /system/build.prop
+    fi
+
+    echo "Syncing filesystem..."
+    sync
+    sync
+
+    echo "Remounting system partition as read-only..."
+    mount -o ro,remount /system
+
+    echo "Syncing filesystem..."
+    sync
+    sync
+
+    if [ "${new_renderer}" == "libagl" ] ; then
+	echo "Android software renderer will be enabled after we reboot now..."
+    else
+	echo "${new_renderer} will be enabled after we reboot now..."
+    fi
+
+    # https://android.stackexchange.com/a/139139
+    am start -a android.intent.action.REBOOT
+}
+
+if [ $# -ne 1 ] ; then
+	usage
+fi
+
+if [ "$1" = "faster" -o "$1" = "compatible" ] ;then
+	graphics "$1"
+else
+	usage
+fi
diff --git a/display/renderer/device-files/llvmpipe.sh b/display/renderer/device-files/llvmpipe.sh
deleted file mode 100644
index d40c4ec..0000000
--- a/display/renderer/device-files/llvmpipe.sh
+++ /dev/null
@@ -1,51 +0,0 @@
-#!/system/xbin/bash
-#
-# Copyright (C) 2017 Jeremy Rand <jeremy at veclabs.net>
-# Partially based on code by Wolfgang Wiedmeyer <wolfgit at wiedmeyer.de> and Filippo Fil Bergamo
-#
-# This file is part of "Replicant Renderer Switcher", a set of shell scripts to switch between
-# the Android Software Renderer and the llvmpipe renderer in Replicant.
-#
-# Replicant Renderer Switcher is free software: you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation, either version 3 of the License, or
-# (at your option) any later version.
-#
-# Replicant Renderer Switcher is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program.  If not, see <http://www.gnu.org/licenses/>.
-
-set -euf -o pipefail
-
-grep -q "ro.libagl=0" /system/build.prop && renderer="llvmpipe" || renderer="android"
-
-if [ "${renderer}" == "llvmpipe" ]
-then
-    echo "llvmpipe is already enabled!"
-    exit 1
-fi
-
-echo "Remounting system partition as writable..."
-mount -o rw,remount /system
-
-echo "Enabling llvmpipe..."
-sed "s/ro.libagl=1/ro.libagl=0/" -i /system/build.prop
-
-echo "Syncing filesystem..."
-sync
-sync
-
-echo "Remounting system partition as read-only..."
-mount -o ro,remount /system
-
-echo "Syncing filesystem..."
-sync
-sync
-
-# https://android.stackexchange.com/a/139139
-echo "llvmpipe will be enabled after we reboot now..."
-am start -a android.intent.action.REBOOT
-- 
2.27.0



More information about the Replicant mailing list