【Fota/UL】不同分辨率下,系统安装升级界面的字体及图片大小适配问题

【Question】在Fota/UL升级过程中,会出现安装界面,如何在同个软件版本下适配不同手机屏,如FHD/HD 两种不同分辨率屏幕。显然,能在HD屏幕上正常显示大小的界面,当刷入FHD屏的机台中,将出现界面字体及图片均过小问题。

【Solution】

1.准备材料:为解决适配问题,均利用PS等工具将原先适配HD的图片进行放大,保证可以与FHD的适配。

关于更新升级界面的图片及文字资源在src/bootable/recovery/res-xhdpi/images/下:

loop00000.png   /*为更新界面的图片*/

installing_text.png  /*文字“安装系统更新”*/

progress_empty.png  /*空白进度条*/

progress_fill.png  /*安装进度条*/

//以上为源码中原生的资源文件,适配于HD,现在需要将这些文件另外拷贝一份利用PS工具放大后并修改下名称:

FHD_loop00000.png   /*为更新界面的图片*/

installing_text_fhd.png  /*文字“安装系统更新”*/

progress_empty_fhd.png  /*空白进度条*/

progress_fill_fhd.png  /*安装进度条*/

2.源码路径:src/bootable/recovery/screen_ui.cpp

主要修改内容以patch形式列出如下

diff --git a/src/bootable/recovery/res-xhdpi/images/FHD_loop00000.png b/src/bootable/recovery/res-xhdpi/images/FHD_loop00000.png
new file mode 100755
index 0000000..2c96bb2
Binary files /dev/null and b/src/bootable/recovery/res-xhdpi/images/FHD_loop00000.png differ
diff --git a/src/bootable/recovery/res-xhdpi/images/installing_text_fhd.png b/src/bootable/recovery/res-xhdpi/images/installing_text_fhd.png
new file mode 100755
index 0000000..a76a174
Binary files /dev/null and b/src/bootable/recovery/res-xhdpi/images/installing_text_fhd.png differ
diff --git a/src/bootable/recovery/res-xhdpi/images/progress_empty_fhd.png b/src/bootable/recovery/res-xhdpi/images/progress_empty_fhd.png
new file mode 100755
index 0000000..0c0a651
Binary files /dev/null and b/src/bootable/recovery/res-xhdpi/images/progress_empty_fhd.png differ
diff --git a/src/bootable/recovery/res-xhdpi/images/progress_fill_fhd.png b/src/bootable/recovery/res-xhdpi/images/progress_fill_fhd.png
new file mode 100755
index 0000000..29ff8d3
Binary files /dev/null and b/src/bootable/recovery/res-xhdpi/images/progress_fill_fhd.png differ
diff --git a/src/bootable/recovery/screen_ui.cpp b/src/bootable/recovery/screen_ui.cpp
index 4664f29..3287d73 100755
--- a/src/bootable/recovery/screen_ui.cpp
+++ b/src/bootable/recovery/screen_ui.cpp
@@ -199,6 +199,14 @@ void ScreenRecoveryUI::draw_foreground_locked() {
         //int progress_y=608+64+88;
         int progress_y=708+64+88;
+        //MODITY CODE++++++ begin
+        char ro_temp_size[15];
+        property_get("ro.temp.size", ro_temp_size,"");
+        if(!strcmp(ro_temp_size,"1080x2160"))
+        {
+            progress_y=1135+64+88;
+        }
+        //MODITY CODE++++++ end
 
@@ -231,12 +239,22 @@ void ScreenRecoveryUI::draw_foreground_locked() {
                     char perProgress[5];
                     int percent = (int)(1.0*pos/width*100);
                     itoa(percent, perProgress);
-                    //gr_fill(330, 720, 330+5*char_width_, 720+char_height_ );
-                    gr_fill(330, 836, 330+5*char_width_, 836+char_height_ );
-                    gr_color(255, 255, 128, 255);
-                   // gr_text(330, 720, perProgress, 0);
-                    gr_text(330, 836, perProgress, 0);
+                    //MODITY CODE++++++ begin
+                    if(!strcmp(ro_temp_size,"1080x2160"))
+                    {
+                        gr_fill(490, 1252, 490+5*char_width_, 1252+char_height_ );
+                        gr_color(255, 255, 128, 255);
+                        gr_text(490, 1252, perProgress, 0);
+                    }
+                    else{
+                        //gr_fill(330, 720, 330+5*char_width_, 720+char_height_ );
+                        gr_fill(330, 828, 330+5*char_width_, 828+char_height_ );
+                        gr_color(255, 255, 128, 255);
+                        // gr_text(330, 720, perProgress, 0);
+                        gr_text(330, 828, perProgress, 0);
+                    }
+                    //MODITY CODE++++++ end
                     gr_blit(progressBall, 0, 0, ball_width, ball_height, progress_x+pos, progress_y);

@@ -489,10 +507,20 @@ static char** Alloc2d(size_t rows, size_t cols) {
 
 // Choose the right background string to display during update.
 void ScreenRecoveryUI::SetSystemUpdateText(bool security_update) {
+    //MODITY CODE++++++ begin
+    char ro_temp_size[15];
+    property_get("ro.temp.size", ro_temp_size,"");
+    //MODITY CODE++++++ end
     if (security_update) {
         LoadLocalizedBitmap("installing_security_text", &installing_text);
     } else {
-        LoadLocalizedBitmap("installing_text", &installing_text);
+        //MODITY CODE++++++ begin
+        if(!strcmp(ro_temp_size,"1080x2160")){
+            LoadLocalizedBitmap("installing_text_fhd", &installing_text);
+        }else{
+            LoadLocalizedBitmap("installing_text", &installing_text);
+        }
+        //MODITY CODE++++++ end
     }
     Redraw();
 }
@@ -518,8 +546,17 @@ void ScreenRecoveryUI::Init() {
 
     LoadBitmap("icon_error", &error_icon);
 
-    LoadBitmap("progress_empty", &progressBarEmpty);
-    LoadBitmap("progress_fill", &progressBarFill);
+    //MODITY CODE++++++ begin
+    char ro_temp_size[15];
+    property_get("ro.temp.size", ro_temp_size,"");
+    if(!strcmp(ro_temp_size,"1080x2160")){
+        LoadBitmap("progress_empty_fhd", &progressBarEmpty);
+        LoadBitmap("progress_fill_fhd", &progressBarFill);
+    }else{
+        LoadBitmap("progress_empty", &progressBarEmpty);
+        LoadBitmap("progress_fill", &progressBarFill);
+    }
+    //MODITY CODE++++++ end
     LoadBitmap("progress_ball", &progressBall);

@@ -545,14 +582,28 @@ void ScreenRecoveryUI::LoadAnimation() {
     // How many frames of intro and loop do we have?
     std::unique_ptr<DIR, decltype(&closedir)> dir(opendir("/res/images"), closedir);
     dirent* de;
+    //MODITY CODE++++++ begin
+    char ro_temp_size[15];
+    property_get("ro.temp.size", ro_temp_size,"");
+    //MODITY CODE++++++ end
     while ((de = readdir(dir.get())) != nullptr) {
         int value;

-        if (sscanf(de->d_name, "intro%d", &value) == 1 && intro_frames < (value + 1)) {
-            intro_frames = value + 1;
-        } else if (sscanf(de->d_name, "loop%d", &value) == 1 && loop_frames < (value + 1)) {
-            loop_frames = value + 1;

+        //MODITY CODE++++++ begin
+        if(!strcmp(ro_temp_size,"1080x2160")){
+            if (sscanf(de->d_name, "intro%d", &value) == 1 && intro_frames < (value + 1)) {
+                intro_frames = value + 1;
+            } else if (sscanf(de->d_name, "FHD_loop%d", &value) == 1 && loop_frames < (value + 1)) {
+                loop_frames = value + 1;
+            }
+        }else{
+            if (sscanf(de->d_name, "intro%d", &value) == 1 && intro_frames < (value + 1)) {
+                intro_frames = value + 1;
+            } else if (sscanf(de->d_name, "loop%d", &value) == 1 && loop_frames < (value + 1)) {
+                loop_frames = value + 1;
+            }
         }
+        //MODITY CODE++++++ end
 		//if (sscanf(de->d_name, "intro%d", &value) == 1 && intro_frames < (value + 1)) {
         //    intro_frames = value + 1;
         //} else if (sscanf(de->d_name, "loop%d", &value) == 1 && loop_frames < (value + 1)) {
@@ -576,8 +627,14 @@ void ScreenRecoveryUI::LoadAnimation() {
     for (int i = 0; i < loop_frames; ++i) {

         //LoadBitmap(android::base::StringPrintf("loop%05d", i).c_str(), &loopFrames[i]);
-		LoadBitmap(android::base::StringPrintf("loop%05d", i).c_str(), &loopFrames[i]);

+        //MODITY CODE++++++ begin
+        if(!strcmp(ro_temp_size,"1080x2160")){
+            LoadBitmap(android::base::StringPrintf("FHD_loop%05d", i).c_str(), &loopFrames[i]);
+        }else{
+            LoadBitmap(android::base::StringPrintf("loop%05d", i).c_str(), &loopFrames[i]);
+        }
+        //MODITY CODE++++++ end

     }
 }
 
diff --git a/src/build/core/Makefile b/src/build/core/Makefile
index 194f8e5..8604388 100755
--- a/src/build/core/Makefile
+++ b/src/build/core/Makefile
@@ -1023,10 +1023,14 @@ endif
 # can be overridden for a particular device by putting a font.png in
 # its private recovery resources.
 
-ifneq (,$(filter xxxhdpi 560dpi xxhdpi 400dpi xhdpi,$(recovery_density)))
-recovery_font := $(call include-path-for, recovery)/fonts/18x32.png
+ifeq (yes,$(strip $(XXX_DEF_OPTR_XXXX)))
+  recovery_font := $(call include-path-for, recovery)/fonts/18x32.png
 else
-recovery_font := $(call include-path-for, recovery)/fonts/12x22.png
+  ifneq (,$(filter xxxhdpi 560dpi xxhdpi 400dpi xhdpi,$(recovery_density)))
+    recovery_font := $(call include-path-for, recovery)/fonts/18x32.png
+  else
+    recovery_font := $(call include-path-for, recovery)/fonts/12x22.png
+  endif
 endif
 
 ifndef TARGET_PRIVATE_RES_DIRS

 

注意查看//MODITY CODE++++++ 部分是修改内容,主要就是对当前屏幕两种不同分辨率适配相应大小的字体及图片。当前分辨率的大小是根据ro.temp.size属性值来判断,当这个ro值等于"1080x2160"时,则判断当前为FHD屏,否则判断为HD屏。(如有定制其他分辨率可以此类推)

猜你喜欢

转载自blog.csdn.net/qq_33491566/article/details/81946662
今日推荐