#!/system/bin/sh

BUSYBOX="/data/data/com.paget96.lsandroid/files/binary/busybox"
LOG="/data/data/com.paget96.lsandroid/files/log/mainLog"
divider="==============================================="

sendToLog() {
  timeZone=$(getprop persist.sys.timezone)
  printDate=$(TZ="$timeZone" $BUSYBOX date +"%H:%M:%S:%3N %d-%m-%Y")

  echo "[$printDate] $1" >>$LOG
}

write() {
  #chmod 0644 "$1"
  echo "$2" >"$1"
}

sendToLog "Activating battery improvements..."

# Disabling ksm
if [ -e "/sys/kernel/mm/ksm/run" ]; then
  write /sys/kernel/mm/ksm/run "0"
  sendToLog "KSM is disabled, saving battery cycles and improving battery life..."
fi

# Disabling uksm
if [ -e "/sys/kernel/mm/uksm/run" ]; then
  write /sys/kernel/mm/uksm/run "0"
  sendToLog "UKSM is disabled, saving battery cycles and improving battery life..."
fi

# Kernel sleepers
if [ -e "/sys/kernel/debug/sched_features" ]; then
  write /sys/kernel/debug/sched_features NEXT_BUDDY
  write /sys/kernel/debug/sched_features TTWU_QUEUE

  sendToLog "ARCH_POWER enabled..."
fi

#/sys/power/pm_freeze_timeout controls how long it will cost at most to freeze
#all user space processes or all freezable kernel threads, in unit of millisecond.
#The default value is 20000, some Xiaomi devices are going in range from 2000 to 15000
#more info on https://www.kernel.org/doc/Documentation/power/freezing-of-tasks.txt
if [ -e "/sys/power/pm_freeze_timeout" ]; then
  write /sys/power/pm_freeze_timeout "5000"
  sendToLog "Kernel thread freeze time set to 5 seconds"
fi

# Disable gesture based vibration because it is honestly not even worth having enabled at all;
if [ -e "/sys/android_touch/vib_strength" ]; then
  write /sys/android_touch/vib_strength "0"
  sendToLog "Disabled gesture vibrations"
fi

# lpm Levels
lpm=/sys/module/lpm_levels
if [ -d $lpm/parameters ]; then
  write $lpm/parameters/lpm_prediction "Y"
  write $lpm/parameters/sleep_disabled "0"
  sendToLog "Low power mode sleep enabled"
fi

if [ -e "/sys/class/lcd/panel/power_reduce" ]; then
  write /sys/class/lcd/panel/power_reduce "1"
  sendToLog "LCD power reduce enabled"
fi

if [ -e "/sys/module/pm2/parameters/idle_sleep_mode" ]; then
  write /sys/module/pm2/parameters/idle_sleep_mode "Y"
  sendToLog "PM2 module idle sleep mode enabled"
fi

sendToLog "$divider"
