Skip to content
This repository was archived by the owner on Nov 23, 2022. It is now read-only.

Commit

Permalink
Update TWRP to AOSP 7.1.2
Browse files Browse the repository at this point in the history
Change-Id: I19c1546efb4182aac62c690e3cc05b04e3a9a32e
  • Loading branch information
Dees-Troy committed May 10, 2017
2 parents 6355b56 + f127896 commit 84d61ce
Show file tree
Hide file tree
Showing 51 changed files with 488 additions and 490 deletions.
6 changes: 3 additions & 3 deletions Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -652,9 +652,9 @@ ifeq ($(shell test $(PLATFORM_SDK_VERSION) -gt 22; echo $$?),0)
include $(commands_recovery_local_path)/minadbd/Android.mk \
$(commands_recovery_local_path)/minui/Android.mk
else
TARGET_GLOBAL_CFLAGS += -DTW_USE_OLD_MINUI_H
include $(commands_recovery_local_path)/minadbd.old/Android.mk \
$(commands_recovery_local_path)/minui.old/Android.mk
TARGET_GLOBAL_CFLAGS += -DTW_USE_MINUI_21
include $(commands_recovery_local_path)/minadbd21/Android.mk \
$(commands_recovery_local_path)/minui21/Android.mk
endif

#includes for TWRP
Expand Down
22 changes: 22 additions & 0 deletions error_code.h
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,26 @@ enum CauseCode {
kVendorFailure = 200
};

enum UncryptErrorCode {
kUncryptNoError = -1,
kUncryptErrorPlaceholder = 50,
kUncryptTimeoutError = 100,
kUncryptFileRemoveError,
kUncryptFileOpenError,
kUncryptSocketOpenError,
kUncryptSocketWriteError,
kUncryptSocketListenError,
kUncryptSocketAcceptError,
kUncryptFstabReadError,
kUncryptFileStatError,
kUncryptBlockOpenError,
kUncryptIoctlError,
kUncryptReadError,
kUncryptWriteError,
kUncryptFileSyncError,
kUncryptFileCloseError,
kUncryptFileRenameError,
kUncryptPackageMissingError,
};

#endif
60 changes: 41 additions & 19 deletions install.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@
#include <string>
#include <vector>

#include <android-base/file.h>
#include <android-base/parseint.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
Expand All @@ -54,6 +55,7 @@ static constexpr const char* AB_OTA_PAYLOAD_PROPERTIES = "payload_properties.txt
static constexpr const char* AB_OTA_PAYLOAD = "payload.bin";
#define PUBLIC_KEYS_FILE "/res/keys"
static constexpr const char* METADATA_PATH = "META-INF/com/android/metadata";
static constexpr const char* UNCRYPT_STATUS = "/cache/recovery/uncrypt_status";

// Default allocation of progress bar segments to operations
static const int VERIFICATION_PROGRESS_TIME = 60;
Expand Down Expand Up @@ -371,6 +373,14 @@ try_update_binary(const char* path, ZipArchive* zip, bool* wipe_cache,
}

pid_t pid = fork();

if (pid == -1) {
close(pipefd[0]);
close(pipefd[1]);
LOGE("Failed to fork update binary: %s\n", strerror(errno));
return INSTALL_ERROR;
}

if (pid == 0) {
umask(022);
close(pipefd[0]);
Expand Down Expand Up @@ -511,13 +521,6 @@ install_package(const char* path, bool* wipe_cache, const char* install_file,
modified_flash = true;
auto start = std::chrono::system_clock::now();

FILE* install_log = fopen_path(install_file, "w");
if (install_log) {
fputs(path, install_log);
fputc('\n', install_log);
} else {
LOGE("failed to open last_install: %s\n", strerror(errno));
}
int result;
std::vector<std::string> log_buffer;
if (setup_install_mounts() != 0) {
Expand All @@ -526,21 +529,40 @@ install_package(const char* path, bool* wipe_cache, const char* install_file,
} else {
result = really_install_package(path, wipe_cache, needs_mount, log_buffer, retry_count);
}
if (install_log != nullptr) {
fputc(result == INSTALL_SUCCESS ? '1' : '0', install_log);
fputc('\n', install_log);
std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
int count = static_cast<int>(duration.count());
// Report the time spent to apply OTA update in seconds.
fprintf(install_log, "time_total: %d\n", count);
fprintf(install_log, "retry: %d\n", retry_count);

for (const auto& s : log_buffer) {
fprintf(install_log, "%s\n", s.c_str());

// Measure the time spent to apply OTA update in seconds.
std::chrono::duration<double> duration = std::chrono::system_clock::now() - start;
int time_total = static_cast<int>(duration.count());

if (ensure_path_mounted(UNCRYPT_STATUS) != 0) {
LOGW("Can't mount %s\n", UNCRYPT_STATUS);
} else {
std::string uncrypt_status;
if (!android::base::ReadFileToString(UNCRYPT_STATUS, &uncrypt_status)) {
LOGW("failed to read uncrypt status: %s\n", strerror(errno));
} else if (!android::base::StartsWith(uncrypt_status, "uncrypt_")) {
LOGW("corrupted uncrypt_status: %s: %s\n", uncrypt_status.c_str(), strerror(errno));
} else {
log_buffer.push_back(android::base::Trim(uncrypt_status));
}
}

fclose(install_log);
// The first two lines need to be the package name and install result.
std::vector<std::string> log_header = {
path,
result == INSTALL_SUCCESS ? "1" : "0",
"time_total: " + std::to_string(time_total),
"retry: " + std::to_string(retry_count),
};
std::string log_content = android::base::Join(log_header, "\n") + "\n" +
android::base::Join(log_buffer, "\n");
if (!android::base::WriteStringToFile(log_content, install_file)) {
LOGE("failed to write %s: %s\n", install_file, strerror(errno));
}

// Write a copy into last_log.
LOGI("%s\n", log_content.c_str());

return result;
}

Expand Down
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
File renamed without changes.
3 changes: 3 additions & 0 deletions minui/Android.mk
Original file line number Diff line number Diff line change
Expand Up @@ -79,6 +79,9 @@ endif
ifneq ($(BOARD_USE_CUSTOM_RECOVERY_FONT),)
LOCAL_CFLAGS += -DBOARD_USE_CUSTOM_RECOVERY_FONT=$(BOARD_USE_CUSTOM_RECOVERY_FONT)
endif
ifneq ($(wildcard system/core/healthd/animation.h),)
LOCAL_CFLAGS += -DTW_USE_MINUI_CUSTOM_FONTS
endif
include $(BUILD_STATIC_LIBRARY)

# Used by OEMs for factory test images.
Expand Down
8 changes: 4 additions & 4 deletions minui/font_10x18.h
Original file line number Diff line number Diff line change
@@ -1,14 +1,14 @@
struct {
unsigned width;
unsigned height;
unsigned cwidth;
unsigned cheight;
unsigned char_width;
unsigned char_height;
unsigned char rundata[2973];
} font = {
.width = 960,
.height = 18,
.cwidth = 10,
.cheight = 18,
.char_width = 10,
.char_height = 18,
.rundata = {
0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x7f,0x55,0x82,0x06,0x82,0x02,0x82,0x10,0x82,
0x11,0x83,0x08,0x82,0x0a,0x82,0x04,0x82,0x46,0x82,0x08,0x82,0x07,0x84,0x06,
Expand Down
152 changes: 126 additions & 26 deletions minui/graphics.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,6 @@
#include "minui.h"
#include "graphics.h"

struct GRFont {
GRSurface* texture;
int cwidth;
int cheight;
};

static GRFont* gr_font = NULL;
static minui_backend* gr_backend = NULL;

Expand All @@ -68,18 +62,36 @@ static bool outside(int x, int y)
{
return x < 0 || x >= gr_draw->width || y < 0 || y >= gr_draw->height;
}

//#define TW_USE_MINUI_CUSTOM_FONTS 1
#ifndef TW_USE_MINUI_CUSTOM_FONTS
int gr_measure(const char *s)
{
return gr_font->cwidth * strlen(s);
return gr_font->char_width * strlen(s);
}

void gr_font_size(int *x, int *y)
{
*x = gr_font->cwidth;
*y = gr_font->cheight;
*x = gr_font->char_width;
*y = gr_font->char_height;
}
#else // TW_USE_MINUI_CUSTOM_FONTS
const GRFont* gr_sys_font()
{
return gr_font;
}

int gr_measure(const GRFont* font, const char *s)
{
return font->char_width * strlen(s);
}

void gr_font_size(const GRFont* font, int *x, int *y)
{
*x = font->char_width;
*y = font->char_height;
}
#endif // TW_USE_MINUI_CUSTOM_FONTS

void blend_16bpp(unsigned char* px, unsigned r5, unsigned g5, unsigned b5, unsigned char a)
{
unsigned char orig[2];
Expand Down Expand Up @@ -146,36 +158,67 @@ static void text_blend(unsigned char* src_p, int src_row_bytes,
}
}

#ifndef TW_USE_MINUI_CUSTOM_FONTS
void gr_text(int x, int y, const char *s, bool bold)
{
GRFont* font = gr_font;

if (!font->texture || gr_current_a == 0) return;

bold = bold && (font->texture->height != font->cheight);
bold = bold && (font->texture->height != font->char_height);

x += overscan_offset_x;
y += overscan_offset_y;

unsigned char ch;
while ((ch = *s++)) {
if (outside(x, y) || outside(x+font->char_width-1, y+font->char_height-1)) break;

if (ch < ' ' || ch > '~') {
ch = '?';
}

unsigned char* src_p = font->texture->data + ((ch - ' ') * font->char_width) +
(bold ? font->char_height * font->texture->row_bytes : 0);
unsigned char* dst_p = gr_draw->data + y*gr_draw->row_bytes + x*gr_draw->pixel_bytes;

text_blend(src_p, font->texture->row_bytes,
dst_p, gr_draw->row_bytes,
font->char_width, font->char_height);

x += font->char_width;
}
}
#else //TW_USE_MINUI_CUSTOM_FONTS
void gr_text(const GRFont* font, int x, int y, const char *s, bool bold)
{
if (!font->texture || gr_current_a == 0) return;

bold = bold && (font->texture->height != font->char_height);

x += overscan_offset_x;
y += overscan_offset_y;

unsigned char ch;
while ((ch = *s++)) {
if (outside(x, y) || outside(x+font->cwidth-1, y+font->cheight-1)) break;
if (outside(x, y) || outside(x+font->char_width-1, y+font->char_height-1)) break;

if (ch < ' ' || ch > '~') {
ch = '?';
}

unsigned char* src_p = font->texture->data + ((ch - ' ') * font->cwidth) +
(bold ? font->cheight * font->texture->row_bytes : 0);
unsigned char* src_p = font->texture->data + ((ch - ' ') * font->char_width) +
(bold ? font->char_height * font->texture->row_bytes : 0);
unsigned char* dst_p = gr_draw->data + y*gr_draw->row_bytes + x*gr_draw->pixel_bytes;

text_blend(src_p, font->texture->row_bytes,
dst_p, gr_draw->row_bytes,
font->cwidth, font->cheight);
font->char_width, font->char_height);

x += font->cwidth;
x += font->char_width;
}
}
#endif //TW_USE_MINUI_CUSTOM_FONTS

void gr_texticon(int x, int y, GRSurface* icon) {
if (icon == NULL) return;
Expand Down Expand Up @@ -383,6 +426,7 @@ unsigned int gr_get_height(GRSurface* surface) {
return surface->height;
}

#ifndef TW_USE_MINUI_CUSTOM_FONTS
static void gr_init_font(void)
{
gr_font = reinterpret_cast<GRFont*>(calloc(sizeof(*gr_font), 1));
Expand All @@ -392,8 +436,8 @@ static void gr_init_font(void)
// The font image should be a 96x2 array of character images. The
// columns are the printable ASCII characters 0x20 - 0x7f. The
// top row is regular text; the bottom row is bold.
gr_font->cwidth = gr_font->texture->width / 96;
gr_font->cheight = gr_font->texture->height / 2;
gr_font->char_width = gr_font->texture->width / 96;
gr_font->char_height = gr_font->texture->height / 2;
} else {
printf("failed to read font: res=%d\n", res);

Expand All @@ -414,11 +458,73 @@ static void gr_init_font(void)
bits += (data & 0x7f);
}

gr_font->cwidth = font.cwidth;
gr_font->cheight = font.cheight;
gr_font->char_width = font.char_width;
gr_font->char_height = font.char_height;
}
}

void gr_set_font(__attribute__ ((unused))const char* name) {
//this cm function is made to change font. Don't care, just init the font:
gr_init_font();
return;
}
#else
int gr_init_font(const char* name, GRFont** dest) {
GRFont* font = reinterpret_cast<GRFont*>(calloc(1, sizeof(*gr_font)));
if (font == nullptr) {
return -1;
}

int res = res_create_alpha_surface(name, &(font->texture));
if (res < 0) {
free(font);
return res;
}

// The font image should be a 96x2 array of character images. The
// columns are the printable ASCII characters 0x20 - 0x7f. The
// top row is regular text; the bottom row is bold.
font->char_width = font->texture->width / 96;
font->char_height = font->texture->height / 2;

*dest = font;

return 0;
}

static void gr_init_font(void)
{
int res = gr_init_font("font", &gr_font);
if (res == 0) {
return;
}

printf("failed to read font: res=%d\n", res);


// fall back to the compiled-in font.
gr_font = reinterpret_cast<GRFont*>(calloc(1, sizeof(*gr_font)));
gr_font->texture = reinterpret_cast<GRSurface*>(malloc(sizeof(*gr_font->texture)));
gr_font->texture->width = font.width;
gr_font->texture->height = font.height;
gr_font->texture->row_bytes = font.width;
gr_font->texture->pixel_bytes = 1;

unsigned char* bits = reinterpret_cast<unsigned char*>(malloc(font.width * font.height));
gr_font->texture->data = reinterpret_cast<unsigned char*>(bits);

unsigned char data;
unsigned char* in = font.rundata;
while((data = *in++)) {
memset(bits, (data & 0x80) ? 255 : 0, data & 0x7f);
bits += (data & 0x7f);
}

gr_font->char_width = font.char_width;
gr_font->char_height = font.char_height;
}
#endif

#if 0
// Exercises many of the gr_*() functions; useful for testing.
static void gr_test() {
Expand Down Expand Up @@ -547,9 +653,3 @@ void gr_fb_blank(bool blank)
{
gr_backend->blank(gr_backend, blank);
}

void gr_set_font(__attribute__ ((unused))const char* name) {
//this cm function is made to change font. Don't care, just init the font:
gr_init_font();
return;
}
Loading

0 comments on commit 84d61ce

Please sign in to comment.