diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..0161c9a
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+AODEnabler*
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
new file mode 100644
index 0000000..13d5a12
--- /dev/null
+++ b/AndroidManifest.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
diff --git a/build b/build
new file mode 100755
index 0000000..58b1fce
--- /dev/null
+++ b/build
@@ -0,0 +1,22 @@
+#!/usr/bin/env bash
+cleanup() {
+ rm -rf AODEnabler* 2>/dev/null
+}
+
+while [[ $# -ge 1 ]]; do
+ case $1 in
+ -clean)
+ cleanup
+ exit;;
+ *)
+ echo "Invalid command."
+ exit
+ esac
+ shift
+done
+cleanup
+aapt package -M AndroidManifest.xml -S res/ -I ~/Android/Sdk/platforms/android-28/android.jar -F AODEnabler.apk.u
+jarsigner -keystore ~/keystores/shagbag913.jks AODEnabler.apk.u shagbag913
+zipalign 4 AODEnabler.apk.u AODEnabler.apk
+cp AODEnabler.apk magisk-module/system/product/overlay/
+cd magisk-module && zip -r9 ../AODEnabler.zip *
diff --git a/magisk-module/META-INF/com/google/android/update-binary b/magisk-module/META-INF/com/google/android/update-binary
new file mode 100755
index 0000000..0b55d98
--- /dev/null
+++ b/magisk-module/META-INF/com/google/android/update-binary
@@ -0,0 +1,153 @@
+#!/sbin/sh
+##########################################################################################
+#
+# Magisk Module Template Install Script
+# by topjohnwu
+#
+##########################################################################################
+
+TMPDIR=/dev/tmp
+INSTALLER=$TMPDIR/install
+# Always mount under tmp
+MOUNTPATH=$TMPDIR/magisk_img
+
+# Default permissions
+umask 022
+
+# Initial cleanup
+rm -rf $TMPDIR 2>/dev/null
+mkdir -p $INSTALLER
+
+# echo before loading util_functions
+ui_print() { echo "$1"; }
+
+require_new_magisk() {
+ ui_print "*******************************"
+ ui_print " Please install Magisk v17.0+! "
+ ui_print "*******************************"
+ exit 1
+}
+
+##########################################################################################
+# Environment
+##########################################################################################
+
+OUTFD=$2
+ZIP=$3
+
+mount /data 2>/dev/null
+
+# Load utility functions
+if [ -f /data/adb/magisk/util_functions.sh ]; then
+ . /data/adb/magisk/util_functions.sh
+elif [ -f /data/magisk/util_functions.sh ]; then
+ NVBASE=/data
+ . /data/magisk/util_functions.sh
+else
+ require_new_magisk
+fi
+
+# Use alternative image if in BOOTMODE
+$BOOTMODE && IMG=$NVBASE/magisk_merge.img
+
+# Preperation for flashable zips
+setup_flashable
+
+# Mount partitions
+mount_partitions
+
+# Detect version and architecture
+api_level_arch_detect
+
+# You can get the Android API version from $API, the CPU architecture from $ARCH
+# Useful if you are creating Android version / platform dependent mods
+
+# Setup busybox and binaries
+$BOOTMODE && boot_actions || recovery_actions
+
+##########################################################################################
+# Preparation
+##########################################################################################
+
+# Extract common files
+unzip -o "$ZIP" module.prop config.sh 'common/*' -d $INSTALLER >&2
+
+[ ! -f $INSTALLER/config.sh ] && abort "! Unable to extract zip file!"
+# Load configurations
+. $INSTALLER/config.sh
+
+# Check the installed magisk version
+MIN_VER=`grep_prop minMagisk $INSTALLER/module.prop`
+[ ! -z $MAGISK_VER_CODE -a $MAGISK_VER_CODE -ge $MIN_VER ] || require_new_magisk
+MODID=`grep_prop id $INSTALLER/module.prop`
+MODPATH=$MOUNTPATH/$MODID
+
+# Print mod name
+print_modname
+
+# Please leave this message in your flashable zip for credits :)
+ui_print "******************************"
+ui_print "Powered by Magisk (@topjohnwu)"
+ui_print "******************************"
+
+##########################################################################################
+# Install
+##########################################################################################
+
+# Get the variable reqSizeM. Use your own method to determine reqSizeM if needed
+request_zip_size_check "$ZIP"
+
+# This function will mount $IMG to $MOUNTPATH, and resize the image based on $reqSizeM
+mount_magisk_img
+
+# Create mod paths
+rm -rf $MODPATH 2>/dev/null
+mkdir -p $MODPATH
+
+# Extract files to system. Use your own method if needed
+ui_print "- Extracting module files"
+unzip -o "$ZIP" 'system/*' -d $MODPATH >&2
+
+# Remove placeholder
+rm -f $MODPATH/system/placeholder 2>/dev/null
+
+# Handle replace folders
+for TARGET in $REPLACE; do
+ mktouch $MODPATH$TARGET/.replace
+done
+
+# Auto Mount
+$AUTOMOUNT && touch $MODPATH/auto_mount
+
+# prop files
+$PROPFILE && cp -af $INSTALLER/common/system.prop $MODPATH/system.prop
+
+# Module info
+cp -af $INSTALLER/module.prop $MODPATH/module.prop
+if $BOOTMODE; then
+ # Update info for Magisk Manager
+ mktouch /sbin/.core/img/$MODID/update
+ cp -af $INSTALLER/module.prop /sbin/.core/img/$MODID/module.prop
+fi
+
+# post-fs-data mode scripts
+$POSTFSDATA && cp -af $INSTALLER/common/post-fs-data.sh $MODPATH/post-fs-data.sh
+
+# service mode scripts
+$LATESTARTSERVICE && cp -af $INSTALLER/common/service.sh $MODPATH/service.sh
+
+ui_print "- Setting permissions"
+set_permissions
+
+##########################################################################################
+# Finalizing
+##########################################################################################
+
+# Unmount magisk image and shrink if possible
+unmount_magisk_img
+
+$BOOTMODE || recovery_cleanup
+rm -rf $TMPDIR
+
+ui_print "- Done"
+exit 0
diff --git a/magisk-module/META-INF/com/google/android/updater-script b/magisk-module/META-INF/com/google/android/updater-script
new file mode 100644
index 0000000..11d5c96
--- /dev/null
+++ b/magisk-module/META-INF/com/google/android/updater-script
@@ -0,0 +1 @@
+#MAGISK
diff --git a/magisk-module/common/post-fs-data.sh b/magisk-module/common/post-fs-data.sh
new file mode 100644
index 0000000..426ab83
--- /dev/null
+++ b/magisk-module/common/post-fs-data.sh
@@ -0,0 +1,7 @@
+#!/system/bin/sh
+# Please don't hardcode /magisk/modname/... ; instead, please use $MODDIR/...
+# This will make your scripts compatible even if Magisk change its mount point in the future
+MODDIR=${0%/*}
+
+# This script will be executed in post-fs-data mode
+# More info in the main Magisk thread
diff --git a/magisk-module/common/service.sh b/magisk-module/common/service.sh
new file mode 100644
index 0000000..4512417
--- /dev/null
+++ b/magisk-module/common/service.sh
@@ -0,0 +1,7 @@
+#!/system/bin/sh
+# Please don't hardcode /magisk/modname/... ; instead, please use $MODDIR/...
+# This will make your scripts compatible even if Magisk change its mount point in the future
+MODDIR=${0%/*}
+
+# This script will be executed in late_start service mode
+# More info in the main Magisk thread
diff --git a/magisk-module/common/system.prop b/magisk-module/common/system.prop
new file mode 100644
index 0000000..3d42789
--- /dev/null
+++ b/magisk-module/common/system.prop
@@ -0,0 +1,3 @@
+# This file will be read by resetprop
+# Example: Change dpi
+# ro.sf.lcd_density=320
diff --git a/magisk-module/config.sh b/magisk-module/config.sh
new file mode 100644
index 0000000..a929199
--- /dev/null
+++ b/magisk-module/config.sh
@@ -0,0 +1,90 @@
+##########################################################################################
+#
+# Magisk Module Template Config Script
+# by topjohnwu
+#
+##########################################################################################
+##########################################################################################
+#
+# Instructions:
+#
+# 1. Place your files into system folder (delete the placeholder file)
+# 2. Fill in your module's info into module.prop
+# 3. Configure the settings in this file (config.sh)
+# 4. If you need boot scripts, add them into common/post-fs-data.sh or common/service.sh
+# 5. Add your additional or modified system properties into common/system.prop
+#
+##########################################################################################
+
+##########################################################################################
+# Configs
+##########################################################################################
+
+# Set to true if you need to enable Magic Mount
+# Most mods would like it to be enabled
+AUTOMOUNT=true
+
+# Set to true if you need to load system.prop
+PROPFILE=false
+
+# Set to true if you need post-fs-data script
+POSTFSDATA=false
+
+# Set to true if you need late_start service script
+LATESTARTSERVICE=false
+
+##########################################################################################
+# Installation Message
+##########################################################################################
+
+# Set what you want to show when installing your mod
+
+print_modname() {
+ ui_print "*******************************"
+ ui_print " Always On Display Enabler "
+ ui_print "*******************************"
+}
+
+##########################################################################################
+# Replace list
+##########################################################################################
+
+# List all directories you want to directly replace in the system
+# Check the documentations for more info about how Magic Mount works, and why you need this
+# Construct your own list here, it will override the example above
+# !DO NOT! remove this if you don't need to replace anything, leave it empty as it is now
+REPLACE="
+"
+
+##########################################################################################
+# Permissions
+##########################################################################################
+
+set_permissions() {
+ # Only some special files require specific permissions
+ # The default permissions should be good enough for most cases
+
+ # Here are some examples for the set_perm functions:
+
+ # set_perm_recursive (default: u:object_r:system_file:s0)
+ # set_perm_recursive $MODPATH/system/lib 0 0 0755 0644
+
+ # set_perm (default: u:object_r:system_file:s0)
+ # set_perm $MODPATH/system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0
+ # set_perm $MODPATH/system/bin/dex2oat 0 2000 0755 u:object_r:dex2oat_exec:s0
+ # set_perm $MODPATH/system/lib/libart.so 0 0 0644
+
+ # The following is default permissions, DO NOT remove
+ set_perm_recursive $MODPATH 0 0 0755 0644
+}
+
+##########################################################################################
+# Custom Functions
+##########################################################################################
+
+# This file (config.sh) will be sourced by the main flash script after util_functions.sh
+# If you need custom logic, please add them here as functions, and call these functions in
+# update-binary. Refrain from adding code directly into update-binary, as it will make it
+# difficult for you to migrate your modules to newer template versions.
+# Make update-binary as clean as possible, try to only do function calls in it.
+
diff --git a/magisk-module/module.prop b/magisk-module/module.prop
new file mode 100644
index 0000000..6cce2e3
--- /dev/null
+++ b/magisk-module/module.prop
@@ -0,0 +1,7 @@
+id=aodenabler
+name=Always On Display Enabler
+version=v1
+versionCode=1
+author=shagbag913
+description=Enables Always On Display via an RRO overlay. Requires Android P+ for now.
+minMagisk=17000
diff --git a/res/values/config.xml b/res/values/config.xml
new file mode 100644
index 0000000..49b5664
--- /dev/null
+++ b/res/values/config.xml
@@ -0,0 +1,4 @@
+
+
+ true
+