dumpstate: touch: Init touch_predump service
go/touch_predump
Test: b/318578275
Test: Locally flash to check dump_touch logs on dogfood devices
Bug: 287907308
Change-Id: Ibc9df367549dd69c83936a7fd08465f7bb53ce80
diff --git a/touch/predump/Android.bp b/touch/predump/Android.bp
new file mode 100644
index 0000000..7d2adda
--- /dev/null
+++ b/touch/predump/Android.bp
@@ -0,0 +1,17 @@
+package {
+ default_applicable_licenses: ["Android-Apache-2.0"],
+}
+
+sh_binary {
+ name: "predump_touch.sh",
+ src: "predump_touch.sh",
+ init_rc: ["init.touch.predump.rc"],
+ vendor: true,
+}
+
+sh_binary {
+ name: "dump_touch.sh",
+ src: "dump_touch.sh",
+ vendor: true,
+ sub_dir: "dump",
+}
diff --git a/touch/predump/dump_touch.sh b/touch/predump/dump_touch.sh
new file mode 100644
index 0000000..889c283
--- /dev/null
+++ b/touch/predump/dump_touch.sh
@@ -0,0 +1,25 @@
+#!/vendor/bin/sh
+
+DIR=/data/vendor/dump_touch
+LOCKFILE="$DIR"/dumping
+LOGFILE="$DIR"/dump.log
+
+if [ ! -f $LOCKFILE ]
+then
+ echo "-----------------------------------------------------"
+ echo "Error : PreDump Touch Logs couldn't be found."
+ echo "-----------------------------------------------------"
+ exit 2
+fi
+
+state=$(cat $LOCKFILE)
+if [ "$state" != 2 ]
+then
+ echo "Unexpected state! Expected 2 but found ${state}" >> $LOGFILE
+fi
+
+cat $LOGFILE
+echo "" > $LOGFILE
+
+echo 0 > $LOCKFILE
+
diff --git a/touch/predump/init.touch.predump.rc b/touch/predump/init.touch.predump.rc
new file mode 100644
index 0000000..aa93c82
--- /dev/null
+++ b/touch/predump/init.touch.predump.rc
@@ -0,0 +1,12 @@
+service vendor.touch_dumpstate /vendor/bin/predump_touch.sh
+ class main
+ user system
+ group system shell
+ disabled
+ oneshot
+
+on post-fs-data
+ mkdir /data/vendor/dump_touch 0775 system system
+
+on property:init.svc.dumpstatez=running
+ start vendor.touch_dumpstate
diff --git a/touch/predump/predump_touch.mk b/touch/predump/predump_touch.mk
new file mode 100644
index 0000000..1a6efb2
--- /dev/null
+++ b/touch/predump/predump_touch.mk
@@ -0,0 +1,4 @@
+BOARD_VENDOR_SEPOLICY_DIRS += device/google/gs-common/touch/predump/sepolicy
+
+PRODUCT_PACKAGES += predump_touch.sh
+PRODUCT_PACKAGES += dump_touch.sh
diff --git a/touch/predump/predump_touch.sh b/touch/predump/predump_touch.sh
new file mode 100644
index 0000000..6a0c738
--- /dev/null
+++ b/touch/predump/predump_touch.sh
@@ -0,0 +1,44 @@
+#!/vendor/bin/sh
+
+DIR=/data/vendor/dump_touch
+SCRIPT_DIR=/vendor/bin/dump_touch
+LOCKFILE="$DIR"/dumping
+LOGFILE="$DIR"/dump.log
+
+if [ ! -f $LOCKFILE ]
+then
+#Init Setup
+ echo 0 > $LOCKFILE
+ echo "" > $LOGFILE
+ chmod 660 $LOCKFILE
+ chmod 660 $LOGFILE
+fi
+
+echo $(date) >> $LOGFILE
+
+state=$(cat $LOCKFILE)
+if [ "$state" != 0 ]
+then
+ echo "Unexpected state! Expected 0 but found ${state}" >> $LOGFILE
+fi
+
+echo 1 > $LOCKFILE
+
+for entry in "$SCRIPT_DIR"/*.sh
+do
+ echo "----------------------------------" >> $LOGFILE
+ echo "$entry" >> $LOGFILE
+ echo "----------------------------------" >> $LOGFILE
+ sh $entry >> $LOGFILE
+ echo "----------------------------------" >> $LOGFILE
+done
+
+state=$(cat $LOCKFILE)
+if [ "$state" != 1 ]
+then
+ echo "Unexpected state! Expected 1 but found ${state}" >> $LOGFILE
+fi
+
+echo 2 > $LOCKFILE
+
+
diff --git a/touch/predump/sepolicy/dump_touch.te b/touch/predump/sepolicy/dump_touch.te
new file mode 100644
index 0000000..d383882
--- /dev/null
+++ b/touch/predump/sepolicy/dump_touch.te
@@ -0,0 +1,5 @@
+pixel_bugreport(dump_touch)
+
+allow dump_touch vendor_touch_dump_file:dir r_dir_perms;
+allow dump_touch vendor_touch_dump_file:file rw_file_perms;
+allow dump_touch vendor_toolbox_exec:file execute_no_trans;
diff --git a/touch/predump/sepolicy/file.te b/touch/predump/sepolicy/file.te
new file mode 100644
index 0000000..9be89f1
--- /dev/null
+++ b/touch/predump/sepolicy/file.te
@@ -0,0 +1 @@
+type vendor_touch_dump_file, file_type, data_file_type;
diff --git a/touch/predump/sepolicy/file_contexts b/touch/predump/sepolicy/file_contexts
new file mode 100644
index 0000000..0a1ef36
--- /dev/null
+++ b/touch/predump/sepolicy/file_contexts
@@ -0,0 +1,5 @@
+/vendor/bin/predump_touch\.sh u:object_r:predump_touch_exec:s0
+/vendor/bin/dump/dump_touch\.sh u:object_r:dump_touch_exec:s0
+/data/vendor/dump_touch/dump\.log u:object_r:vendor_touch_dump_file:s0
+/data/vendor/dump_touch/dumping u:object_r:vendor_touch_dump_file:s0
+/data/vendor/dump_touch u:object_r:vendor_touch_dump_file:s0
diff --git a/touch/predump/sepolicy/predump_touch.te b/touch/predump/sepolicy/predump_touch.te
new file mode 100644
index 0000000..edf473b
--- /dev/null
+++ b/touch/predump/sepolicy/predump_touch.te
@@ -0,0 +1,9 @@
+type predump_touch, domain;
+type predump_touch_exec, vendor_file_type, exec_type, file_type;
+init_daemon_domain(predump_touch)
+
+allow predump_touch vendor_touch_dump_file:dir rw_dir_perms;
+allow predump_touch vendor_touch_dump_file:file create_file_perms;
+
+allow predump_touch vendor_toolbox_exec:file execute_no_trans;
+allow predump_touch vendor_shell_exec:file execute_no_trans;