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