Skip to content
This repository was archived by the owner on Sep 9, 2024. It is now read-only.

Commit 71495b8

Browse files
Twemoji Remastered
Signed-off-by: Gontier Julien <gontierjulien68@gmail.com>
0 parents  commit 71495b8

File tree

9 files changed

+348
-0
lines changed

9 files changed

+348
-0
lines changed
+151
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,151 @@
1+
#!/sbin/sh
2+
3+
TMPDIR=/dev/tmp
4+
MOUNTPATH=/dev/magisk_img
5+
6+
# Default permissions
7+
umask 022
8+
9+
# Initial cleanup
10+
rm -rf $TMPDIR 2>/dev/null
11+
mkdir -p $TMPDIR
12+
13+
# echo before loading util_functions
14+
ui_print() { echo "$1"; }
15+
16+
require_new_magisk() {
17+
ui_print "***********************************"
18+
ui_print " Please install the latest Magisk! "
19+
ui_print "***********************************"
20+
exit 1
21+
}
22+
23+
imageless_magisk() {
24+
[ $MAGISK_VER_CODE -gt 18100 ]
25+
return $?
26+
}
27+
28+
##########################################################################################
29+
# Environment
30+
##########################################################################################
31+
32+
OUTFD=$2
33+
ZIPFILE=$3
34+
35+
mount /data 2>/dev/null
36+
37+
# Load utility functions
38+
if [ -f /data/adb/magisk/util_functions.sh ]; then
39+
. /data/adb/magisk/util_functions.sh
40+
NVBASE=/data/adb
41+
else
42+
require_new_magisk
43+
fi
44+
45+
# Preperation for flashable zips
46+
setup_flashable
47+
48+
# Mount partitions
49+
mount_partitions
50+
51+
# Detect version and architecture
52+
api_level_arch_detect
53+
54+
# Setup busybox and binaries
55+
$BOOTMODE && boot_actions || recovery_actions
56+
57+
##########################################################################################
58+
# Preparation
59+
##########################################################################################
60+
61+
# Extract common files
62+
unzip -oj "$ZIPFILE" module.prop install.sh uninstall.sh 'common/*' -d $TMPDIR >&2
63+
64+
[ ! -f $TMPDIR/install.sh ] && abort "! Unable to extract zip file!"
65+
# Load install script
66+
. $TMPDIR/install.sh
67+
68+
if imageless_magisk; then
69+
$BOOTMODE && MODDIRNAME=modules_update || MODDIRNAME=modules
70+
MODULEROOT=$NVBASE/$MODDIRNAME
71+
else
72+
$BOOTMODE && IMGNAME=magisk_merge.img || IMGNAME=magisk.img
73+
IMG=$NVBASE/$IMGNAME
74+
request_zip_size_check "$ZIPFILE"
75+
mount_magisk_img
76+
MODULEROOT=$MOUNTPATH
77+
fi
78+
79+
MODID=`grep_prop id $TMPDIR/module.prop`
80+
MODPATH=$MODULEROOT/$MODID
81+
82+
print_modname
83+
84+
ui_print "******************************"
85+
ui_print "Powered by Magisk (@topjohnwu)"
86+
ui_print "******************************"
87+
88+
##########################################################################################
89+
# Install
90+
##########################################################################################
91+
92+
# Create mod paths
93+
rm -rf $MODPATH 2>/dev/null
94+
mkdir -p $MODPATH
95+
96+
on_install
97+
98+
# Remove placeholder
99+
rm -f $MODPATH/system/placeholder 2>/dev/null
100+
101+
# Custom uninstaller
102+
[ -f $TMPDIR/uninstall.sh ] && cp -af $TMPDIR/uninstall.sh $MODPATH/uninstall.sh
103+
104+
# Auto Mount
105+
if imageless_magisk; then
106+
$SKIPMOUNT && touch $MODPATH/skip_mount
107+
else
108+
$SKIPMOUNT || touch $MODPATH/auto_mount
109+
fi
110+
111+
# prop files
112+
$PROPFILE && cp -af $TMPDIR/system.prop $MODPATH/system.prop
113+
114+
# Module info
115+
cp -af $TMPDIR/module.prop $MODPATH/module.prop
116+
if $BOOTMODE; then
117+
# Update info for Magisk Manager
118+
if imageless_magisk; then
119+
mktouch $NVBASE/modules/$MODID/update
120+
cp -af $TMPDIR/module.prop $NVBASE/modules/$MODID/module.prop
121+
else
122+
mktouch /sbin/.magisk/img/$MODID/update
123+
cp -af $TMPDIR/module.prop /sbin/.magisk/img/$MODID/module.prop
124+
fi
125+
fi
126+
127+
# post-fs-data mode scripts
128+
$POSTFSDATA && cp -af $TMPDIR/post-fs-data.sh $MODPATH/post-fs-data.sh
129+
130+
# service mode scripts
131+
$LATESTARTSERVICE && cp -af $TMPDIR/service.sh $MODPATH/service.sh
132+
133+
# Handle replace folders
134+
for TARGET in $REPLACE; do
135+
mktouch $MODPATH$TARGET/.replace
136+
done
137+
138+
ui_print "- Setting permissions"
139+
set_permissions
140+
141+
##########################################################################################
142+
# Finalizing
143+
##########################################################################################
144+
145+
cd /
146+
imageless_magisk || unmount_magisk_img
147+
$BOOTMODE || recovery_cleanup
148+
rm -rf $TMPDIR $MOUNTPATH
149+
150+
ui_print "- Done"
151+
exit 0
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
#MAGISK

README.md

+7
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
# Twemoji Remastered module for Magisk
2+
3+
This module uses Magisk to systemlessly to replace Android emojis with Twemoji (Twitter Emoji). Updated to the latest Twemoji.
4+
5+
Preview available [here](https://emojipedia.org/twitter/).
6+
7+
Credit to [simonsmh](https://github.com/simonsmh) for device detection script.

common/post-fs-data.sh

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/system/bin/sh
2+
# Do NOT assume where your module will be located.
3+
# ALWAYS use $MODDIR if you need to know where this script
4+
# and module is placed.
5+
# This will make sure your module will still work
6+
# if Magisk change its mount point in the future
7+
MODDIR=${0%/*}
8+
9+
# This script will be executed in post-fs-data mode

common/service.sh

+9
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#!/system/bin/sh
2+
# Do NOT assume where your module will be located.
3+
# ALWAYS use $MODDIR if you need to know where this script
4+
# and module is placed.
5+
# This will make sure your module will still work
6+
# if Magisk change its mount point in the future
7+
MODDIR=${0%/*}
8+
9+
# This script will be executed in late_start service mode

common/system.prop

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# This file will be read by resetprop
2+
# Example: Change dpi
3+
# ro.sf.lcd_density=320

install.sh

+162
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
##########################################################################################
2+
#
3+
# Magisk Module Installer Script
4+
#
5+
##########################################################################################
6+
##########################################################################################
7+
#
8+
# Instructions:
9+
#
10+
# 1. Place your files into system folder (delete the placeholder file)
11+
# 2. Fill in your module's info into module.prop
12+
# 3. Configure and implement callbacks in this file
13+
# 4. If you need boot scripts, add them into common/post-fs-data.sh or common/service.sh
14+
# 5. Add your additional or modified system properties into common/system.prop
15+
#
16+
##########################################################################################
17+
18+
##########################################################################################
19+
# Config Flags
20+
##########################################################################################
21+
22+
# Set to true if you do *NOT* want Magisk to mount
23+
# any files for you. Most modules would NOT want
24+
# to set this flag to true
25+
SKIPMOUNT=false
26+
27+
# Set to true if you need to load system.prop
28+
PROPFILE=false
29+
30+
# Set to true if you need post-fs-data script
31+
POSTFSDATA=false
32+
33+
# Set to true if you need late_start service script
34+
LATESTARTSERVICE=false
35+
36+
##########################################################################################
37+
# Replace list
38+
##########################################################################################
39+
40+
# List all directories you want to directly replace in the system
41+
# Check the documentations for more info why you would need this
42+
43+
# Construct your list in the following format
44+
# This is an example
45+
REPLACE_EXAMPLE="
46+
/system/app/Youtube
47+
/system/priv-app/SystemUI
48+
/system/priv-app/Settings
49+
/system/framework
50+
"
51+
52+
# Construct your own list here
53+
REPLACE="
54+
"
55+
56+
##########################################################################################
57+
#
58+
# Function Callbacks
59+
#
60+
# The following functions will be called by the installation framework.
61+
# You do not have the ability to modify update-binary, the only way you can customize
62+
# installation is through implementing these functions.
63+
#
64+
# When running your callbacks, the installation framework will make sure the Magisk
65+
# internal busybox path is *PREPENDED* to PATH, so all common commands shall exist.
66+
# Also, it will make sure /data, /system, and /vendor is properly mounted.
67+
#
68+
##########################################################################################
69+
##########################################################################################
70+
#
71+
# The installation framework will export some variables and functions.
72+
# You should use these variables and functions for installation.
73+
#
74+
# ! DO NOT use any Magisk internal paths as those are NOT public API.
75+
# ! DO NOT use other functions in util_functions.sh as they are NOT public API.
76+
# ! Non public APIs are not guranteed to maintain compatibility between releases.
77+
#
78+
# Available variables:
79+
#
80+
# MAGISK_VER (string): the version string of current installed Magisk
81+
# MAGISK_VER_CODE (int): the version code of current installed Magisk
82+
# BOOTMODE (bool): true if the module is currently installing in Magisk Manager
83+
# MODPATH (path): the path where your module files should be installed
84+
# TMPDIR (path): a place where you can temporarily store files
85+
# ZIPFILE (path): your module's installation zip
86+
# ARCH (string): the architecture of the device. Value is either arm, arm64, x86, or x64
87+
# IS64BIT (bool): true if $ARCH is either arm64 or x64
88+
# API (int): the API level (Android version) of the device
89+
#
90+
# Availible functions:
91+
#
92+
# ui_print <msg>
93+
# print <msg> to console
94+
# Avoid using 'echo' as it will not display in custom recovery's console
95+
#
96+
# abort <msg>
97+
# print error message <msg> to console and terminate installation
98+
# Avoid using 'exit' as it will skip the termination cleanup steps
99+
#
100+
# set_perm <target> <owner> <group> <permission> [context]
101+
# if [context] is empty, it will default to "u:object_r:system_file:s0"
102+
# this function is a shorthand for the following commands
103+
# chown owner.group target
104+
# chmod permission target
105+
# chcon context target
106+
#
107+
# set_perm_recursive <directory> <owner> <group> <dirpermission> <filepermission> [context]
108+
# if [context] is empty, it will default to "u:object_r:system_file:s0"
109+
# for all files in <directory>, it will call:
110+
# set_perm file owner group filepermission context
111+
# for all directories in <directory> (including itself), it will call:
112+
# set_perm dir owner group dirpermission context
113+
#
114+
##########################################################################################
115+
##########################################################################################
116+
# If you need boot scripts, DO NOT use general boot scripts (post-fs-data.d/service.d)
117+
# ONLY use module scripts as it respects the module status (remove/disable) and is
118+
# guaranteed to maintain the same behavior in future Magisk releases.
119+
# Enable boot scripts by setting the flags in the config section above.
120+
##########################################################################################
121+
122+
# Set what you want to display when installing your module
123+
124+
print_modname() {
125+
ui_print "**************************************"
126+
ui_print " Twemoji v13.1.0 "
127+
ui_print " Maintained by Julien Gontier "
128+
ui_print "**************************************"
129+
}
130+
131+
# Copy/extract your module files into $MODPATH in on_install.
132+
133+
on_install() {
134+
# The following is the default implementation: extract $ZIPFILE/system to $MODPATH
135+
# Extend/change the logic to whatever you want
136+
ui_print "- Extracting module files"
137+
unzip -o "$ZIPFILE" 'system/*' -d $MODPATH >&2
138+
[[ -d /sbin/.core/mirror ]] && MIRRORPATH=/sbin/.core/mirror || unset MIRRORPATH
139+
FONTS=/system/etc/fonts.xml
140+
FONTFILES=$(sed -ne '/<family lang="und-Zsye".*>/,/<\/family>/ {s/.*<font weight="400" style="normal">\(.*\)<\/font>.*/\1/p;}' $MIRRORPATH$FONTS)
141+
for font in $FONTFILES
142+
do
143+
ln -s /system/fonts/NotoColorEmoji.ttf $MODPATH/system/fonts/$font
144+
done
145+
}
146+
147+
# Only some special files require specific permissions
148+
# This function will be called after on_install is done
149+
# The default permissions should be good enough for most cases
150+
151+
set_permissions() {
152+
# The following is the default rule, DO NOT remove
153+
set_perm_recursive $MODPATH 0 0 0755 0644
154+
155+
# Here are some examples:
156+
# set_perm_recursive $MODPATH/system/lib 0 0 0755 0644
157+
# set_perm $MODPATH/system/bin/app_process32 0 2000 0755 u:object_r:zygote_exec:s0
158+
# set_perm $MODPATH/system/bin/dex2oat 0 2000 0755 u:object_r:dex2oat_exec:s0
159+
# set_perm $MODPATH/system/lib/libart.so 0 0 0644
160+
}
161+
162+
# You can add more functions to assist your custom script code

module.prop

+6
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
id=Twemoji-systemless
2+
name=Twemoji Remastered
3+
version=v13.1.0
4+
versionCode=30
5+
author=Maintained by Julien Gontier
6+
description=Systemlessly replaces emoji font with Twemoji.

system/fonts/NotoColorEmoji.ttf

3.05 MB
Binary file not shown.

0 commit comments

Comments
 (0)