ui: Move locale and friends into ScreenRecoveryUI class.

Localized texts only make sense on devices with screens.

Test: Run fake OTA on angler; check the on-screen texts.
Change-Id: I3a644294c8b1f2056cfb78b2d61a598b8ddf2acf
This commit is contained in:
Tao Bao 2017-01-31 23:03:10 -08:00
parent 568644197f
commit efb49add97
4 changed files with 38 additions and 35 deletions

View file

@ -14,6 +14,8 @@
* limitations under the License.
*/
#include "screen_ui.h"
#include <dirent.h>
#include <errno.h>
#include <fcntl.h>
@ -36,11 +38,10 @@
#include <android-base/properties.h>
#include <android-base/stringprintf.h>
#include <android-base/strings.h>
#include <minui/minui.h>
#include "common.h"
#include "device.h"
#include "minui/minui.h"
#include "screen_ui.h"
#include "ui.h"
// Return the current time as a double (including fractions of a second).
@ -79,6 +80,8 @@ ScreenRecoveryUI::ScreenRecoveryUI()
intro_done(false),
stage(-1),
max_stage(-1),
locale_(""),
rtl_locale_(false),
updateMutex(PTHREAD_MUTEX_INITIALIZER) {}
GRSurface* ScreenRecoveryUI::GetCurrentFrame() const {
@ -496,6 +499,7 @@ bool ScreenRecoveryUI::InitTextParams() {
bool ScreenRecoveryUI::Init(const std::string& locale) {
RecoveryUI::Init(locale);
if (!InitTextParams()) {
return false;
}
@ -510,6 +514,9 @@ bool ScreenRecoveryUI::Init(const std::string& locale) {
text_col_ = text_row_ = 0;
// Set up the locale info.
SetLocale(locale);
LoadBitmap("icon_error", &error_icon);
LoadBitmap("progress_empty", &progressBarEmpty);
@ -833,3 +840,23 @@ void ScreenRecoveryUI::KeyLongPress(int) {
// will change color to indicate a successful long press.
Redraw();
}
void ScreenRecoveryUI::SetLocale(const std::string& new_locale) {
locale_ = new_locale;
rtl_locale_ = false;
if (!new_locale.empty()) {
size_t underscore = new_locale.find('_');
// lang has the language prefix prior to '_', or full string if '_' doesn't exist.
std::string lang = new_locale.substr(0, underscore);
// A bit cheesy: keep an explicit list of supported RTL languages.
if (lang == "ar" || // Arabic
lang == "fa" || // Persian (Farsi)
lang == "he" || // Hebrew (new language code)
lang == "iw" || // Hebrew (old language code)
lang == "ur") { // Urdu
rtl_locale_ = true;
}
}
}

View file

@ -191,7 +191,14 @@ class ScreenRecoveryUI : public RecoveryUI {
int char_width_;
int char_height_;
// The locale that's used to show the rendered texts.
std::string locale_;
bool rtl_locale_;
pthread_mutex_t updateMutex;
private:
void SetLocale(const std::string&);
};
#endif // RECOVERY_UI_H

29
ui.cpp
View file

@ -50,9 +50,7 @@ static constexpr const char* BRIGHTNESS_FILE = "/sys/class/leds/lcd-backlight/br
static constexpr const char* MAX_BRIGHTNESS_FILE = "/sys/class/leds/lcd-backlight/max_brightness";
RecoveryUI::RecoveryUI()
: locale_(""),
rtl_locale_(false),
brightness_normal_(50),
: brightness_normal_(50),
brightness_dimmed_(25),
touch_screen_allowed_(false),
kTouchLowThreshold(RECOVERY_UI_TOUCH_LOW_THRESHOLD),
@ -132,10 +130,7 @@ bool RecoveryUI::InitScreensaver() {
return true;
}
bool RecoveryUI::Init(const std::string& locale) {
// Set up the locale info.
SetLocale(locale);
bool RecoveryUI::Init(const std::string& /* locale */) {
ev_init(std::bind(&RecoveryUI::OnInputEvent, this, std::placeholders::_1, std::placeholders::_2),
touch_screen_allowed_);
@ -574,23 +569,3 @@ void RecoveryUI::SetEnableReboot(bool enabled) {
enable_reboot = enabled;
pthread_mutex_unlock(&key_queue_mutex);
}
void RecoveryUI::SetLocale(const std::string& new_locale) {
this->locale_ = new_locale;
this->rtl_locale_ = false;
if (!new_locale.empty()) {
size_t underscore = new_locale.find('_');
// lang has the language prefix prior to '_', or full string if '_' doesn't exist.
std::string lang = new_locale.substr(0, underscore);
// A bit cheesy: keep an explicit list of supported RTL languages.
if (lang == "ar" || // Arabic
lang == "fa" || // Persian (Farsi)
lang == "he" || // Hebrew (new language code)
lang == "iw" || // Hebrew (old language code)
lang == "ur") { // Urdu
rtl_locale_ = true;
}
}
}

6
ui.h
View file

@ -143,10 +143,6 @@ class RecoveryUI {
protected:
void EnqueueKey(int key_code);
// The locale that's used to show the rendered texts.
std::string locale_;
bool rtl_locale_;
// The normal and dimmed brightness percentages (default: 50 and 25, which means 50% and 25% of
// the max_brightness). Because the absolute values may vary across devices. These two values can
// be configured via subclassing. Setting brightness_normal_ to 0 to disable screensaver.
@ -184,8 +180,6 @@ class RecoveryUI {
static void* time_key_helper(void* cookie);
void time_key(int key_code, int count);
void SetLocale(const std::string&);
bool InitScreensaver();
// Key event input queue