summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/service/wallpaper/WallpaperService.java20
-rw-r--r--services/core/java/com/android/server/wallpaper/WallpaperManagerService.java10
2 files changed, 22 insertions, 8 deletions
diff --git a/core/java/android/service/wallpaper/WallpaperService.java b/core/java/android/service/wallpaper/WallpaperService.java
index 920c6a727e9a..71784ef0b4d6 100644
--- a/core/java/android/service/wallpaper/WallpaperService.java
+++ b/core/java/android/service/wallpaper/WallpaperService.java
@@ -761,11 +761,18 @@ public abstract class WallpaperService extends Service {
public void notifyLocalColorsChanged(@NonNull List<RectF> regions,
@NonNull List<WallpaperColors> colors)
throws RuntimeException {
- for (int i = 0; i < regions.size() && i < colors.size() && colors.get(i) != null; i++) {
+ for (int i = 0; i < regions.size() && i < colors.size(); i++) {
+ WallpaperColors color = colors.get(i);
+ RectF area = regions.get(i);
+ if (color == null || area == null) {
+ Log.wtf(TAG, "notifyLocalColorsChanged null values. color: "
+ + color + " area " + area);
+ continue;
+ }
try {
mConnection.onLocalWallpaperColorsChanged(
- regions.get(i),
- colors.get(i),
+ area,
+ color,
mDisplayContext.getDisplayId()
);
} catch (RemoteException e) {
@@ -1355,7 +1362,8 @@ public abstract class WallpaperService extends Service {
+ xOffsetStep);
}
//below is the default implementation
- if (xOffset % xOffsetStep > MIN_PAGE_ALLOWED_MARGIN) return;
+ if (xOffset % xOffsetStep > MIN_PAGE_ALLOWED_MARGIN
+ || !mSurfaceHolder.getSurface().isValid()) return;
int xPage;
int xPages;
if (!validStep(xOffsetStep)) {
@@ -1671,6 +1679,10 @@ public abstract class WallpaperService extends Service {
}
for (int i = 0; i < areas.size(); i++) {
RectF currentArea = areas.get(i);
+ if (currentArea == null || !isValid(currentArea)) {
+ Log.wtf(TAG, "invalid local area " + currentArea);
+ continue;
+ }
EngineWindowPage page;
RectF area;
int pageIndx;
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 75f06e5e9088..9dc68f28ab8e 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -2389,13 +2389,15 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
private IWallpaperEngine getEngine(int which, int userId, int displayId) {
WallpaperData wallpaperData = findWallpaperAtDisplay(userId, displayId);
if (wallpaperData == null) return null;
+ WallpaperConnection connection = wallpaperData.connection;
+ if (connection == null) return null;
IWallpaperEngine engine = null;
synchronized (mLock) {
- for (int i = 0; i < wallpaperData.connection.mDisplayConnector.size(); i++) {
- int id = wallpaperData.connection.mDisplayConnector.get(i).mDisplayId;
- int currentWhich = wallpaperData.connection.mDisplayConnector.get(i).mDisplayId;
+ for (int i = 0; i < connection.mDisplayConnector.size(); i++) {
+ int id = connection.mDisplayConnector.get(i).mDisplayId;
+ int currentWhich = connection.mDisplayConnector.get(i).mDisplayId;
if (id != displayId && currentWhich != which) continue;
- engine = wallpaperData.connection.mDisplayConnector.get(i).mEngine;
+ engine = connection.mDisplayConnector.get(i).mEngine;
break;
}
}