aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDoug Zongker <dougz@google.com>2012-09-18 12:37:02 -0700
committerThe Android Automerger <android-build@android.com>2012-09-18 16:30:55 -0700
commitea6b2a7a85e1302b23ed0d9916e4b38015bc9a23 (patch)
tree6990ad74371795a16ac1670bb21ca2f8e6aeb6bd
parentf8be7694889cbdb08ef7edd605d11607bb3638a0 (diff)
downloadrecovery-ea6b2a7a85e1302b23ed0d9916e4b38015bc9a23.tar.gz
localization for recovery messages
Add images of text for all locales we support. Make the progress bar fill the correct way for RTL languages. (Flip the direction the spinner turns, too, just for good measure.) Bug: 7064142 Change-Id: I5dddb26e02ee5275c57c4dc4a03c6d68432ac7ba
-rw-r--r--recovery.cpp3
-rw-r--r--res/images/erasing_text.pngbin1492 -> 31490 bytes
-rw-r--r--res/images/error_text.pngbin844 -> 17498 bytes
-rw-r--r--res/images/installing_text.pngbin2747 -> 66587 bytes
-rw-r--r--res/images/no_command_text.pngbin1868 -> 40633 bytes
-rw-r--r--screen_ui.cpp52
-rw-r--r--screen_ui.h2
-rw-r--r--ui.h3
8 files changed, 53 insertions, 7 deletions
diff --git a/recovery.cpp b/recovery.cpp
index 6ced420d..3b581387 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
index 2cd2e382..8b9f265f 100644
--- a/res/images/erasing_text.png
+++ b/res/images/erasing_text.png
Binary files differ
diff --git a/res/images/error_text.png b/res/images/error_text.png
index 91be5fe5..b64b3d7a 100644
--- a/res/images/error_text.png
+++ b/res/images/error_text.png
Binary files differ
diff --git a/res/images/installing_text.png b/res/images/installing_text.png
index 42704b99..9c16c770 100644
--- a/res/images/installing_text.png
+++ b/res/images/installing_text.png
Binary files differ
diff --git a/res/images/no_command_text.png b/res/images/no_command_text.png
index fbc20743..2241259e 100644
--- a/res/images/no_command_text.png
+++ b/res/images/no_command_text.png
Binary files differ
diff --git a/screen_ui.cpp b/screen_ui.cpp
index 0b343754..64a5dcdd 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 16ee741b..80051724 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];
diff --git a/ui.h b/ui.h
index ccbb466a..acb57663 100644
--- a/ui.h
+++ b/ui.h
@@ -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;