288 lines
8.1 KiB
Go
288 lines
8.1 KiB
Go
package twrp
|
|
|
|
import (
|
|
"android/soong/android"
|
|
"android/soong/cc"
|
|
"fmt"
|
|
"os"
|
|
"path"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func printThemeWarning(theme string) {
|
|
if theme == "" {
|
|
theme = "not set"
|
|
}
|
|
themeWarning := "***************************************************************************\n"
|
|
themeWarning += "Could not find ui.xml for TW_THEME: "
|
|
themeWarning += theme
|
|
themeWarning += "\nSet TARGET_SCREEN_WIDTH and TARGET_SCREEN_HEIGHT to automatically select\n"
|
|
themeWarning += "an appropriate theme, or set TW_THEME to one of the following:\n"
|
|
themeWarning += "landscape_hdpi landscape_mdpi portrait_hdpi portrait_mdpi watch_mdpi\n"
|
|
themeWarning += "****************************************************************************\n"
|
|
themeWarning += "(theme selection failed; exiting)\n"
|
|
|
|
fmt.Printf(themeWarning)
|
|
}
|
|
|
|
func printCustomThemeWarning(theme string, location string) {
|
|
customThemeWarning := "****************************************************************************\n"
|
|
customThemeWarning += "Could not find ui.xml for TW_CUSTOM_THEME: "
|
|
customThemeWarning += theme + "\n"
|
|
customThemeWarning += "Expected to find custom theme's ui.xml at: "
|
|
customThemeWarning += location
|
|
customThemeWarning += "Please fix this or set TW_THEME to one of the following:\n"
|
|
customThemeWarning += "landscape_hdpi landscape_mdpi portrait_hdpi portrait_mdpi watch_mdpi\n"
|
|
customThemeWarning += "****************************************************************************\n"
|
|
customThemeWarning += "(theme selection failed; exiting)\n"
|
|
fmt.Printf(customThemeWarning)
|
|
}
|
|
|
|
func copyThemeResources(ctx android.BaseContext, dirs []string, files []string) {
|
|
outDir := ctx.Config().Getenv("OUT")
|
|
twRes := outDir + "/recovery/root/twres/"
|
|
recoveryDir := getRecoveryAbsDir(ctx)
|
|
theme := determineTheme(ctx)
|
|
for idx, dir := range dirs {
|
|
_ = idx
|
|
dirToCopy := ""
|
|
destDir := twRes + path.Base(dir)
|
|
baseDir := path.Base(dir)
|
|
if baseDir == theme {
|
|
destDir = twRes
|
|
dirToCopy = recoveryDir + dir
|
|
} else {
|
|
dirToCopy = recoveryDir + dir
|
|
}
|
|
copyDir(dirToCopy, destDir)
|
|
}
|
|
for idx, file := range files {
|
|
_ = idx
|
|
fileToCopy := recoveryDir + file
|
|
fileDest := twRes + path.Base(file)
|
|
copyFile(fileToCopy, fileDest)
|
|
}
|
|
}
|
|
|
|
func copyCustomTheme(ctx android.BaseContext, customTheme string) {
|
|
outDir := ctx.Config().Getenv("OUT")
|
|
twRes := outDir + "/recovery/root/twres/"
|
|
fileDest := twRes + path.Base(customTheme)
|
|
fileToCopy := fmt.Sprintf("%s%s", getBuildAbsDir(ctx), customTheme)
|
|
copyFile(fileToCopy, fileDest)
|
|
}
|
|
|
|
func determineTheme(ctx android.BaseContext) string {
|
|
guiWidth := 0
|
|
guiHeight := 0
|
|
if getMakeVars(ctx, "TW_CUSTOM_THEME") == "" {
|
|
if getMakeVars(ctx, "TW_THEME") == "" {
|
|
if getMakeVars(ctx, "DEVICE_RESOLUTION") == "" {
|
|
width, err := strconv.Atoi(getMakeVars(ctx, "TARGET_SCREEN_WIDTH"))
|
|
if err == nil {
|
|
guiWidth = width
|
|
}
|
|
height, err := strconv.Atoi(getMakeVars(ctx, "TARGET_SCREEN_HEIGHT"))
|
|
if err == nil {
|
|
guiHeight = height
|
|
}
|
|
} else {
|
|
deviceRes := getMakeVars(ctx, "DEVICE_RESOLUTION")
|
|
width, err := strconv.Atoi(strings.Split(deviceRes, "x")[0])
|
|
if err == nil {
|
|
guiWidth = width
|
|
}
|
|
height, err := strconv.Atoi(strings.Split(deviceRes, "x")[1])
|
|
if err == nil {
|
|
guiHeight = height
|
|
}
|
|
}
|
|
}
|
|
if guiWidth > 100 {
|
|
if guiHeight > 100 {
|
|
if guiWidth > guiHeight {
|
|
if guiWidth > 1280 {
|
|
return "landscape_hdpi"
|
|
} else {
|
|
return "landscape_mdpi"
|
|
}
|
|
} else if guiWidth < guiHeight {
|
|
if guiWidth > 720 {
|
|
return "portrait_hdpi"
|
|
} else {
|
|
return "portrait_mdpi"
|
|
}
|
|
} else if guiWidth == guiHeight {
|
|
return "watch_mdpi"
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
return getMakeVars(ctx, "TW_THEME")
|
|
}
|
|
|
|
func copyTheme(ctx android.BaseContext) bool {
|
|
var directories []string
|
|
var files []string
|
|
var customThemeLoc string
|
|
localPath := ctx.ModuleDir()
|
|
directories = append(directories, "gui/theme/common/fonts/")
|
|
directories = append(directories, "gui/theme/common/languages/")
|
|
if getMakeVars(ctx, "TW_EXTRA_LANGUAGES") == "true" {
|
|
directories = append(directories, "gui/theme/extra-languages/fonts/")
|
|
directories = append(directories, "gui/theme/extra-languages/languages/")
|
|
}
|
|
var theme = determineTheme(ctx)
|
|
directories = append(directories, "gui/theme/"+theme)
|
|
themeXML := fmt.Sprintf("gui/theme/common/%s.xml", strings.Split(theme, "_")[0])
|
|
files = append(files, themeXML)
|
|
if getMakeVars(ctx, "TW_CUSTOM_THEME") == "" {
|
|
defaultTheme := fmt.Sprintf("%s/theme/%s/ui.xml", localPath, theme)
|
|
if android.ExistentPathForSource(ctx, defaultTheme).Valid() {
|
|
fullDefaultThemePath := fmt.Sprintf("gui/theme/%s/ui.xml", theme)
|
|
files = append(files, fullDefaultThemePath)
|
|
} else {
|
|
printThemeWarning(theme)
|
|
return false
|
|
}
|
|
} else {
|
|
customThemeLoc = getMakeVars(ctx, "TW_CUSTOM_THEME")
|
|
if android.ExistentPathForSource(ctx, customThemeLoc).Valid() {
|
|
} else {
|
|
printCustomThemeWarning(customThemeLoc, getMakeVars(ctx, "TW_CUSTOM_THEME"))
|
|
return false
|
|
}
|
|
}
|
|
copyThemeResources(ctx, directories, files)
|
|
if customThemeLoc != "" {
|
|
copyCustomTheme(ctx, customThemeLoc)
|
|
}
|
|
return true
|
|
}
|
|
|
|
func globalFlags(ctx android.BaseContext) []string {
|
|
var cflags []string
|
|
|
|
if getMakeVars(ctx, "TW_DELAY_TOUCH_INIT_MS") != "" {
|
|
cflags = append(cflags, "-DTW_DELAY_TOUCH_INIT_MS="+getMakeVars(ctx, "TW_DELAY_TOUCH_INIT_MS"))
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_EVENT_LOGGING") == "true" {
|
|
cflags = append(cflags, "-D_EVENT_LOGGING")
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_USE_KEY_CODE_TOUCH_SYNC") != "" {
|
|
cflags = append(cflags, "DTW_USE_KEY_CODE_TOUCH_SYNC="+getMakeVars(ctx, "TW_USE_KEY_CODE_TOUCH_SYNC"))
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_SCREEN_BLANK_ON_BOOT") != "" {
|
|
cflags = append(cflags, "-DTW_SCREEN_BLANK_ON_BOOT")
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_OZIP_DECRYPT_KEY") != "" {
|
|
cflags = append(cflags, "-DTW_OZIP_DECRYPT_KEY=\""+getMakeVars(ctx, "TW_OZIP_DECRYPT_KEY")+"\"")
|
|
} else {
|
|
cflags = append(cflags, "-DTW_OZIP_DECRYPT_KEY=0")
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_NO_SCREEN_BLANK") != "" {
|
|
cflags = append(cflags, "-DTW_NO_SCREEN_BLANK")
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_NO_SCREEN_TIMEOUT") != "" {
|
|
cflags = append(cflags, "-DTW_NO_SCREEN_TIMEOUT")
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_OEM_BUILD") != "" {
|
|
cflags = append(cflags, "-DTW_OEM_BUILD")
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_X_OFFSET") != "" {
|
|
cflags = append(cflags, "-DTW_X_OFFSET="+getMakeVars(ctx, "TW_X_OFFSET"))
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_Y_OFFSET") != "" {
|
|
cflags = append(cflags, "-DTW_Y_OFFSET="+getMakeVars(ctx, "TW_Y_OFFSET"))
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_W_OFFSET") != "" {
|
|
cflags = append(cflags, "-DTW_W_OFFSET="+getMakeVars(ctx, "TW_W_OFFSET"))
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_H_OFFSET") != "" {
|
|
cflags = append(cflags, "-DTW_H_OFFSET="+getMakeVars(ctx, "TW_H_OFFSET"))
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_ROUND_SCREEN") == "true" {
|
|
cflags = append(cflags, "-DTW_ROUND_SCREEN")
|
|
}
|
|
|
|
if getMakeVars(ctx, "TW_EXCLUDE_NANO") == "true" {
|
|
cflags = append(cflags, "-DTW_EXCLUDE_NANO")
|
|
}
|
|
|
|
if getMakeVars(ctx, "AB_OTA_UPDATER") == "true" {
|
|
cflags = append(cflags, "-DAB_OTA_UPDATER=1")
|
|
}
|
|
|
|
return cflags
|
|
}
|
|
|
|
func globalSrcs(ctx android.BaseContext) []string {
|
|
var srcs []string
|
|
|
|
if getMakeVars(ctx, "TWRP_CUSTOM_KEYBOARD") != "" {
|
|
srcs = append(srcs, getMakeVars(ctx, "TWRP_CUSTOM_KEYBOARD"))
|
|
} else {
|
|
srcs = append(srcs, "hardwarekeyboard.cpp")
|
|
}
|
|
return srcs
|
|
}
|
|
|
|
func globalIncludes(ctx android.BaseContext) []string {
|
|
var includes []string
|
|
|
|
if getMakeVars(ctx, "TW_INCLUDE_CRYPTO") != "" {
|
|
includes = append(includes, "bootable/recovery/crypto/fscrypt")
|
|
}
|
|
return includes
|
|
}
|
|
|
|
func libGuiDefaults(ctx android.LoadHookContext) {
|
|
type props struct {
|
|
Target struct {
|
|
Android struct {
|
|
Cflags []string
|
|
Enabled *bool
|
|
}
|
|
}
|
|
Cflags []string
|
|
Srcs []string
|
|
Include_dirs []string
|
|
}
|
|
|
|
p := &props{}
|
|
p.Cflags = globalFlags(ctx)
|
|
s := globalSrcs(ctx)
|
|
p.Srcs = s
|
|
i := globalIncludes(ctx)
|
|
p.Include_dirs = i
|
|
ctx.AppendProperties(p)
|
|
if copyTheme(ctx) == false {
|
|
os.Exit(-1)
|
|
}
|
|
}
|
|
|
|
func init() {
|
|
android.RegisterModuleType("libguitwrp_defaults", libGuiDefaultsFactory)
|
|
}
|
|
|
|
func libGuiDefaultsFactory() android.Module {
|
|
module := cc.DefaultsFactory()
|
|
android.AddLoadHook(module, libGuiDefaults)
|
|
|
|
return module
|
|
}
|