RK3562 安卓 14 首次设置壁纸失败问题

commit 8b32884d2fa8b44c02ce6dfa90b26850012566d0
Author: jinfeng.han <jinfeng.han@rock-chips.com>
Date:   Tue Oct 17 01:47:16 2023 +0000

    WallpaperManagerService: fix error that use non system pic to set home wallpaper first time
    
    Redmine:#437840
    
    Change-Id: I30ebf5f75d10205a0f02f35d2b5026cb0424fe2d
    Signed-off-by: jinfeng.han <jinfeng.han@rock-chips.com>

diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index cd3d603d831a..dfa78b11684b 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -134,6 +134,12 @@ import java.util.Objects;
 import java.util.function.Consumer;
 import java.util.function.Predicate;
 
+//--------------------------rk-code-------------------------
+import libcore.io.IoUtils;
+import java.io.BufferedOutputStream;
+import java.io.FileOutputStream;
+//----------------------------------------------------------
+
 public class WallpaperManagerService extends IWallpaperManager.Stub
         implements IWallpaperManagerService {
     private static final String TAG = "WallpaperManagerService";
@@ -3081,6 +3087,36 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
         }
     }
 
+    //--------------------------rk-code-------------------------
+    private Bitmap getDefaultWallpaper(Context context) {
+        int defaultResId = com.android.internal.R.drawable.default_wallpaper;
+        InputStream is = context.getResources().openRawResource(defaultResId);
+        if (is != null) {
+            try {
+                BitmapFactory.Options options = new BitmapFactory.Options();
+                return BitmapFactory.decodeStream(is, null, options);
+            } catch (OutOfMemoryError e) {
+                Slog.w(TAG, "Can't decode stream", e);
+            } finally {
+                IoUtils.closeQuietly(is);
+            }
+        }
+        return null;
+    }
+
+    private void saveFile(Bitmap bm, String path) {
+        try{
+            File myCaptureFile = new File(path);
+            BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myCaptureFile));
+            bm.compress(Bitmap.CompressFormat.JPEG, 90, bos);
+            bos.flush();
+            bos.close();
+        }catch(Exception e) {
+            Slog.w(TAG, "saveFile can't save stream", e);
+        }
+    }
+    //----------------------------------------------------------
+
     private boolean migrateStaticSystemToLockWallpaperLocked(int userId) {
         WallpaperData sysWP = mWallpaperMap.get(userId);
         if (sysWP == null) {
@@ -3842,6 +3878,27 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
     private void loadSettingsLocked(int userId, boolean keepDimensionHints, int which) {
         initializeFallbackWallpaper();
         WallpaperData wallpaperData = mWallpaperMap.get(userId);
+
+        //----------------------rk-code---------------------------
+        Slog.d(TAG, "wallpaperData = "+wallpaperData);
+        if (wallpaperData == null) {
+            if (!"true".equals(SystemProperties.get("cts_gts.status", "false"))) {
+                WallpaperData wallpaper = new WallpaperData(userId, FLAG_LOCK);
+                wallpaper.allowBackup = true;
+
+                //When system first bootup,lock wallpaper share with system,let's save it.
+                File mWallpaperDir = getWallpaperDir(wallpaper.userId);
+                File mWallpaperFile = new File(mWallpaperDir, "wallpaper_orig");
+                File mWallpaperCropFile = new File(mWallpaperDir, "wallpaper");
+                Bitmap bmp=getDefaultWallpaper(mContext);
+                saveFile(bmp,mWallpaperFile.getAbsolutePath());
+                //FileUtils.copyFile(mWallpaperCropFile,mWallpaperCropFile);
+                saveFile(bmp,mWallpaperCropFile.getAbsolutePath());
+                Slog.d(TAG, "generating from default wallpaper and save it.");
+           }
+        }
+        //--------------------------------------------------------
+
         WallpaperData lockWallpaperData = mLockWallpaperMap.get(userId);
         WallpaperDataParser.WallpaperLoadingResult result = mWallpaperDataParser.loadSettingsLocked(
                 userId, keepDimensionHints, wallpaperData, lockWallpaperData, which);

上面的补丁可以第一次设置壁纸不报错,但是后面重启壁纸又失效了

diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index dfa78b11684b..7610b7e46836 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -138,6 +138,7 @@ import java.util.function.Predicate;
 import libcore.io.IoUtils;
 import java.io.BufferedOutputStream;
 import java.io.FileOutputStream;
+import android.provider.Settings;
 //----------------------------------------------------------
 
 public class WallpaperManagerService extends IWallpaperManager.Stub
@@ -3874,6 +3875,17 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
         }
         return wallpaper;
     }
+	String SETTINGS_JUNJIE_VALUE = "liujunjie_add_wa";
+	// liujunjie add 
+	private boolean getfristSetWa(){
+		
+		return (Settings.System.getInt(mContext.getContentResolver(),SETTINGS_JUNJIE_VALUE,-1) == -1);
+		
+	}
+	private void setNofristSetWa(){
+		
+		Settings.System.putInt(mContext.getContentResolver(),SETTINGS_JUNJIE_VALUE,1);
+	}
 
     private void loadSettingsLocked(int userId, boolean keepDimensionHints, int which) {
         initializeFallbackWallpaper();
@@ -3882,7 +3894,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
         //----------------------rk-code---------------------------
         Slog.d(TAG, "wallpaperData = "+wallpaperData);
         if (wallpaperData == null) {
-            if (!"true".equals(SystemProperties.get("cts_gts.status", "false"))) {
+            if (!"true".equals(SystemProperties.get("cts_gts.status", "false")) && getfristSetWa()) {
+				setNofristSetWa();
                 WallpaperData wallpaper = new WallpaperData(userId, FLAG_LOCK);
                 wallpaper.allowBackup = true;
 

合入下面的补丁就OK

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值