diff options
author | Doug Zongker <dougz@google.com> | 2012-09-18 22:48:31 +0200 |
---|---|---|
committer | Android Git Automerger <android-git-automerger@android.com> | 2012-09-18 22:48:31 +0200 |
commit | ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d (patch) | |
tree | 6990ad74371795a16ac1670bb21ca2f8e6aeb6bd | |
parent | Reconcile with jb-mr1-release - do not merge (diff) | |
parent | localization for recovery messages (diff) | |
download | android_bootable_recovery-ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d.tar android_bootable_recovery-ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d.tar.gz android_bootable_recovery-ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d.tar.bz2 android_bootable_recovery-ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d.tar.lz android_bootable_recovery-ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d.tar.xz android_bootable_recovery-ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d.tar.zst android_bootable_recovery-ed3bc11e7dd4b6e0ddb77a3c9492675d8ac6855d.zip |
-rw-r--r-- | recovery.cpp | 3 | ||||
-rw-r--r-- | res/images/erasing_text.png | bin | 1492 -> 31490 bytes | |||
-rw-r--r-- | res/images/error_text.png | bin | 844 -> 17498 bytes | |||
-rw-r--r-- | res/images/installing_text.png | bin | 2747 -> 66587 bytes | |||
-rw-r--r-- | res/images/no_command_text.png | bin | 1868 -> 40633 bytes | |||
-rw-r--r-- | screen_ui.cpp | 52 | ||||
-rw-r--r-- | screen_ui.h | 2 | ||||
-rw-r--r-- | ui.h | 3 |
8 files changed, 53 insertions, 7 deletions
diff --git a/recovery.cpp b/recovery.cpp index 6ced420d0..3b5813876 100644 --- a/recovery.cpp +++ b/recovery.cpp @@ -781,7 +781,7 @@ load_locale_from_cache() { if (fp != NULL) { fgets(buffer, sizeof(buffer), fp); int j = 0; - int i; + unsigned int i; for (i = 0; i < sizeof(buffer) && buffer[i]; ++i) { if (!isspace(buffer[i])) { buffer[j++] = buffer[i]; @@ -849,6 +849,7 @@ main(int argc, char **argv) { ui = device->GetUI(); ui->Init(); + ui->SetLocale(locale); ui->SetBackground(RecoveryUI::NONE); if (show_text) ui->ShowText(true); diff --git a/res/images/erasing_text.png b/res/images/erasing_text.png Binary files differindex 2cd2e3825..8b9f265fb 100644 --- a/res/images/erasing_text.png +++ b/res/images/erasing_text.png diff --git a/res/images/error_text.png b/res/images/error_text.png Binary files differindex 91be5fe54..b64b3d7ac 100644 --- a/res/images/error_text.png +++ b/res/images/error_text.png diff --git a/res/images/installing_text.png b/res/images/installing_text.png Binary files differindex 42704b996..9c16c7708 100644 --- a/res/images/installing_text.png +++ b/res/images/installing_text.png diff --git a/res/images/no_command_text.png b/res/images/no_command_text.png Binary files differindex fbc20743f..2241259e2 100644 --- a/res/images/no_command_text.png +++ b/res/images/no_command_text.png diff --git a/screen_ui.cpp b/screen_ui.cpp index 0b3437547..64a5dcdd2 100644 --- a/screen_ui.cpp +++ b/screen_ui.cpp @@ -52,6 +52,7 @@ static double now() { ScreenRecoveryUI::ScreenRecoveryUI() : currentIcon(NONE), installingFrame(0), + rtl_locale(false), progressBarType(EMPTY), progressScopeStart(0), progressScopeSize(0), @@ -158,18 +159,35 @@ void ScreenRecoveryUI::draw_progress_locked() float p = progressScopeStart + progress * progressScopeSize; int pos = (int) (p * width); - if (pos > 0) { - gr_blit(progressBarFill, 0, 0, pos, height, dx, dy); - } - if (pos < width-1) { - gr_blit(progressBarEmpty, pos, 0, width-pos, height, dx+pos, dy); + if (rtl_locale) { + // Fill the progress bar from right to left. + if (pos > 0) { + gr_blit(progressBarFill, width-pos, 0, pos, height, dx+width-pos, dy); + } + if (pos < width-1) { + gr_blit(progressBarEmpty, 0, 0, width-pos, height, dx, dy); + } + } else { + // Fill the progress bar from left to right. + if (pos > 0) { + gr_blit(progressBarFill, 0, 0, pos, height, dx, dy); + } + if (pos < width-1) { + gr_blit(progressBarEmpty, pos, 0, width-pos, height, dx+pos, dy); + } } } if (progressBarType == INDETERMINATE) { static int frame = 0; gr_blit(progressBarIndeterminate[frame], 0, 0, width, height, dx, dy); - frame = (frame + 1) % indeterminate_frames; + // in RTL locales, we run the animation backwards, which + // makes the spinner spin the other way. + if (rtl_locale) { + frame = (frame + indeterminate_frames - 1) % indeterminate_frames; + } else { + frame = (frame + 1) % indeterminate_frames; + } } } } @@ -360,6 +378,28 @@ void ScreenRecoveryUI::Init() RecoveryUI::Init(); } +void ScreenRecoveryUI::SetLocale(const char* locale) { + if (locale) { + char* lang = strdup(locale); + for (char* p = lang; *p; ++p) { + if (*p == '_') { + *p = '\0'; + break; + } + } + + // A bit cheesy: keep an explicit list of supported languages + // that are RTL. + if (strcmp(lang, "ar") == 0 || // Arabic + strcmp(lang, "fa") == 0 || // Persian (Farsi) + strcmp(lang, "he") == 0 || // Hebrew (new language code) + strcmp(lang, "iw") == 0) { // Hebrew (old language code) + rtl_locale = true; + } + free(lang); + } +} + void ScreenRecoveryUI::SetBackground(Icon icon) { pthread_mutex_lock(&updateMutex); diff --git a/screen_ui.h b/screen_ui.h index 16ee741b7..80051724b 100644 --- a/screen_ui.h +++ b/screen_ui.h @@ -29,6 +29,7 @@ class ScreenRecoveryUI : public RecoveryUI { ScreenRecoveryUI(); void Init(); + void SetLocale(const char* locale); // overall recovery state ("background image") void SetBackground(Icon icon); @@ -55,6 +56,7 @@ class ScreenRecoveryUI : public RecoveryUI { private: Icon currentIcon; int installingFrame; + bool rtl_locale; pthread_mutex_t updateMutex; gr_surface backgroundIcon[5]; @@ -30,6 +30,9 @@ class RecoveryUI { // Initialize the object; called before anything else. virtual void Init(); + // After calling Init(), you can tell the UI what locale it is operating in. + virtual void SetLocale(const char* locale) { } + // Set the overall recovery state ("background image"). enum Icon { NONE, INSTALLING_UPDATE, ERASING, NO_COMMAND, ERROR }; virtual void SetBackground(Icon icon) = 0; |