Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9e9cef8d authored by Aurélien Pomini's avatar Aurélien Pomini Committed by Automerger Merge Worker
Browse files

Merge "Replace WallpaperData File fields with methods" into udc-qpr-dev am:...

Merge "Replace WallpaperData File fields with methods" into udc-qpr-dev am: c18e0fe3 am: b2df98ec

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/23766386



Change-Id: Iff0fdc5fce37272ffba15e4577445a9fb332786c
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents df6f6069 b2df98ec
Loading
Loading
Loading
Loading
+10 −11
Original line number Diff line number Diff line
@@ -81,7 +81,7 @@ class WallpaperCropper {
        if (DEBUG) {
            Slog.v(TAG, "Generating crop for new wallpaper(s): 0x"
                    + Integer.toHexString(wallpaper.mWhich)
                    + " to " + wallpaper.cropFile.getName()
                    + " to " + wallpaper.getCropFile().getName()
                    + " crop=(" + cropHint.width() + 'x' + cropHint.height()
                    + ") dim=(" + wpData.mWidth + 'x' + wpData.mHeight + ')');
        }
@@ -89,7 +89,7 @@ class WallpaperCropper {
        // Analyse the source; needed in multiple cases
        BitmapFactory.Options options = new BitmapFactory.Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeFile(wallpaper.wallpaperFile.getAbsolutePath(), options);
        BitmapFactory.decodeFile(wallpaper.getWallpaperFile().getAbsolutePath(), options);
        if (options.outWidth <= 0 || options.outHeight <= 0) {
            Slog.w(TAG, "Invalid wallpaper data");
            success = false;
@@ -154,11 +154,10 @@ class WallpaperCropper {
                //  may be we can try to remove this optimized way in the future,
                //  that means, we will always go into the 'else' block.

                success = FileUtils.copyFile(wallpaper.wallpaperFile, wallpaper.cropFile);
                success = FileUtils.copyFile(wallpaper.getWallpaperFile(), wallpaper.getCropFile());

                if (!success) {
                    wallpaper.cropFile.delete();
                    // TODO: fall back to default wallpaper in this case
                    wallpaper.getCropFile().delete();
                }

                if (DEBUG) {
@@ -226,7 +225,7 @@ class WallpaperCropper {

                    //Create a record file and will delete if ImageDecoder work well.
                    final String recordName =
                            (wallpaper.wallpaperFile.getName().equals(WALLPAPER)
                            (wallpaper.getWallpaperFile().getName().equals(WALLPAPER)
                                    ? RECORD_FILE : RECORD_LOCK_FILE);
                    final File record = new File(getWallpaperDir(wallpaper.userId), recordName);
                    record.createNewFile();
@@ -234,7 +233,7 @@ class WallpaperCropper {
                            + ", record name =" + record.getName());

                    final ImageDecoder.Source srcData =
                            ImageDecoder.createSource(wallpaper.wallpaperFile);
                            ImageDecoder.createSource(wallpaper.getWallpaperFile());
                    final int sampleSize = scale;
                    Bitmap cropped = ImageDecoder.decodeBitmap(srcData, (decoder, info, src) -> {
                        decoder.setTargetSampleSize(sampleSize);
@@ -257,7 +256,7 @@ class WallpaperCropper {
                                    + " h=" + finalCrop.getHeight());
                        }

                        f = new FileOutputStream(wallpaper.cropFile);
                        f = new FileOutputStream(wallpaper.getCropFile());
                        bos = new BufferedOutputStream(f, 32 * 1024);
                        finalCrop.compress(Bitmap.CompressFormat.PNG, 100, bos);
                        // don't rely on the implicit flush-at-close when noting success
@@ -277,11 +276,11 @@ class WallpaperCropper {

        if (!success) {
            Slog.e(TAG, "Unable to apply new wallpaper");
            wallpaper.cropFile.delete();
            wallpaper.getCropFile().delete();
        }

        if (wallpaper.cropFile.exists()) {
            boolean didRestorecon = SELinux.restorecon(wallpaper.cropFile.getAbsoluteFile());
        if (wallpaper.getCropFile().exists()) {
            boolean didRestorecon = SELinux.restorecon(wallpaper.getCropFile().getAbsoluteFile());
            if (DEBUG) {
                Slog.v(TAG, "restorecon() of crop file returned " + didRestorecon);
            }
+27 −14
Original line number Diff line number Diff line
@@ -40,10 +40,7 @@ import java.io.File;
 */
class WallpaperData {

    int userId;

    final File wallpaperFile;   // source image
    final File cropFile;        // eventual destination
    final int userId;

    /**
     * True while the client is writing a new wallpaper
@@ -133,14 +130,13 @@ class WallpaperData {
     */
    final Rect cropHint = new Rect(0, 0, 0, 0);

    // map of which -> File
    private final SparseArray<File> mWallpaperFiles = new SparseArray<>();
    private final SparseArray<File> mCropFiles = new SparseArray<>();

    WallpaperData(int userId, @SetWallpaperFlags int wallpaperType) {
        this.userId = userId;
        this.mWhich = wallpaperType;
        File wallpaperDir = getWallpaperDir(userId);
        String wallpaperFileName = (wallpaperType == FLAG_LOCK) ? WALLPAPER_LOCK_ORIG : WALLPAPER;
        String cropFileName = (wallpaperType == FLAG_LOCK) ? WALLPAPER_LOCK_CROP : WALLPAPER_CROP;
        this.wallpaperFile = new File(wallpaperDir, wallpaperFileName);
        this.cropFile = new File(wallpaperDir, cropFileName);
    }

    /**
@@ -154,8 +150,6 @@ class WallpaperData {
     */
    WallpaperData(WallpaperData source) {
        this.userId = source.userId;
        this.wallpaperFile = source.wallpaperFile;
        this.cropFile = source.cropFile;
        this.wallpaperComponent = source.wallpaperComponent;
        this.mWhich = source.mWhich;
        this.wallpaperId = source.wallpaperId;
@@ -169,6 +163,25 @@ class WallpaperData {
        }
    }

    File getWallpaperFile() {
        String fileName = mWhich == FLAG_LOCK ? WALLPAPER_LOCK_ORIG : WALLPAPER;
        return getFile(mWallpaperFiles, fileName);
    }

    File getCropFile() {
        String fileName = mWhich == FLAG_LOCK ? WALLPAPER_LOCK_CROP : WALLPAPER_CROP;
        return getFile(mCropFiles, fileName);
    }

    private File getFile(SparseArray<File> map, String fileName) {
        File result = map.get(mWhich);
        if (result == null) {
            result = new File(getWallpaperDir(userId), fileName);
            map.put(userId, result);
        }
        return result;
    }

    @Override
    public String toString() {
        StringBuilder out = new StringBuilder(defaultString(this));
@@ -177,7 +190,7 @@ class WallpaperData {
        out.append(", which: ");
        out.append(mWhich);
        out.append(", file mod: ");
        out.append(wallpaperFile != null ? wallpaperFile.lastModified() : "null");
        out.append(getWallpaperFile() != null ? getWallpaperFile().lastModified() : "null");
        if (connection == null) {
            out.append(", no connection");
        } else {
@@ -202,10 +215,10 @@ class WallpaperData {

    // Called during initialization of a given user's wallpaper bookkeeping
    boolean cropExists() {
        return cropFile.exists();
        return getCropFile().exists();
    }

    boolean sourceExists() {
        return wallpaperFile.exists();
        return getWallpaperFile().exists();
    }
}
+5 −5
Original line number Diff line number Diff line
@@ -542,12 +542,12 @@ class WallpaperDataParser {
                    }

                    res = r.openRawResource(resId);
                    if (wallpaper.wallpaperFile.exists()) {
                        wallpaper.wallpaperFile.delete();
                        wallpaper.cropFile.delete();
                    if (wallpaper.getWallpaperFile().exists()) {
                        wallpaper.getWallpaperFile().delete();
                        wallpaper.getCropFile().delete();
                    }
                    fos = new FileOutputStream(wallpaper.wallpaperFile);
                    cos = new FileOutputStream(wallpaper.cropFile);
                    fos = new FileOutputStream(wallpaper.getWallpaperFile());
                    cos = new FileOutputStream(wallpaper.getCropFile());

                    byte[] buffer = new byte[32768];
                    int amt;
+18 −17
Original line number Diff line number Diff line
@@ -675,8 +675,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
            // Not having a wallpaperComponent means it's a lock screen wallpaper.
            final boolean imageWallpaper = mImageWallpaper.equals(wallpaper.wallpaperComponent)
                    || wallpaper.wallpaperComponent == null;
            if (imageWallpaper && wallpaper.cropFile != null && wallpaper.cropFile.exists()) {
                cropFile = wallpaper.cropFile.getAbsolutePath();
            if (imageWallpaper && wallpaper.getCropFile().exists()) {
                cropFile = wallpaper.getCropFile().getAbsolutePath();
            } else if (imageWallpaper && !wallpaper.cropExists() && !wallpaper.sourceExists()) {
                defaultImageWallpaper = true;
            }
@@ -1839,8 +1839,8 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
    private boolean clearWallpaperBitmaps(WallpaperData wallpaper) {
        boolean sourceExists = wallpaper.sourceExists();
        boolean cropExists = wallpaper.cropExists();
        if (sourceExists) wallpaper.wallpaperFile.delete();
        if (cropExists) wallpaper.cropFile.delete();
        if (sourceExists) wallpaper.getWallpaperFile().delete();
        if (cropExists) wallpaper.getCropFile().delete();
        return sourceExists || cropExists;
    }

@@ -2439,13 +2439,13 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
                    wallpaper.callbacks.register(cb);
                }

                File fileToReturn = getCropped ? wallpaper.cropFile : wallpaper.wallpaperFile;
                File result = getCropped ? wallpaper.getCropFile() : wallpaper.getWallpaperFile();

                if (!fileToReturn.exists()) {
                if (!result.exists()) {
                    return null;
                }

                return ParcelFileDescriptor.open(fileToReturn, MODE_READ_ONLY);
                return ParcelFileDescriptor.open(result, MODE_READ_ONLY);
            } catch (FileNotFoundException e) {
                /* Shouldn't happen as we check to see if the file exists */
                Slog.w(TAG, "Error getting wallpaper", e);
@@ -3206,16 +3206,17 @@ public class WallpaperManagerService extends IWallpaperManager.Stub

        // Migrate the bitmap files outright; no need to copy
        try {
            if (!mIsLockscreenLiveWallpaperEnabled || sysWP.wallpaperFile.exists()) {
                Os.rename(sysWP.wallpaperFile.getAbsolutePath(),
                        lockWP.wallpaperFile.getAbsolutePath());
            if (!mIsLockscreenLiveWallpaperEnabled || sysWP.getWallpaperFile().exists()) {
                Os.rename(sysWP.getWallpaperFile().getAbsolutePath(),
                        lockWP.getWallpaperFile().getAbsolutePath());
            }
            if (!mIsLockscreenLiveWallpaperEnabled || sysWP.cropFile.exists()) {
                Os.rename(sysWP.cropFile.getAbsolutePath(), lockWP.cropFile.getAbsolutePath());
            if (!mIsLockscreenLiveWallpaperEnabled || sysWP.getCropFile().exists()) {
                Os.rename(sysWP.getCropFile().getAbsolutePath(),
                        lockWP.getCropFile().getAbsolutePath());
            }
            mLockWallpaperMap.put(userId, lockWP);
            if (mIsLockscreenLiveWallpaperEnabled) {
                SELinux.restorecon(lockWP.wallpaperFile);
                SELinux.restorecon(lockWP.getWallpaperFile());
                mLastLockWallpaper = lockWP;
            }
        } catch (ErrnoException e) {
@@ -3236,11 +3237,11 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
                        FileUtils.S_IRWXU|FileUtils.S_IRWXG|FileUtils.S_IXOTH,
                        -1, -1);
            }
            ParcelFileDescriptor fd = ParcelFileDescriptor.open(wallpaper.wallpaperFile,
            ParcelFileDescriptor fd = ParcelFileDescriptor.open(wallpaper.getWallpaperFile(),
                    MODE_CREATE|MODE_READ_WRITE|MODE_TRUNCATE);
            if (!SELinux.restorecon(wallpaper.wallpaperFile)) {
            if (!SELinux.restorecon(wallpaper.getWallpaperFile())) {
                Slog.w(TAG, "restorecon failed for wallpaper file: " +
                        wallpaper.wallpaperFile.getPath());
                        wallpaper.getWallpaperFile().getPath());
                return null;
            }
            wallpaper.name = name;
@@ -3251,7 +3252,7 @@ public class WallpaperManagerService extends IWallpaperManager.Stub
            // Nullify field to require new computation
            wallpaper.primaryColors = null;
            Slog.v(TAG, "updateWallpaperBitmapLocked() : id=" + wallpaper.wallpaperId
                    + " name=" + name + " file=" + wallpaper.wallpaperFile.getName());
                    + " name=" + name + " file=" + wallpaper.getWallpaperFile().getName());
            return fd;
        } catch (FileNotFoundException e) {
            Slog.w(TAG, "Error setting wallpaper", e);
+8 −7
Original line number Diff line number Diff line
@@ -31,7 +31,6 @@ import static com.android.dx.mockito.inline.extended.ExtendedMockito.mock;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.server.wallpaper.WallpaperUtils.WALLPAPER;
import static com.android.server.wallpaper.WallpaperUtils.WALLPAPER_CROP;

import static org.hamcrest.core.IsNot.not;
import static org.junit.Assert.assertEquals;
@@ -275,10 +274,10 @@ public class WallpaperManagerServiceTests {
            assertEquals(testUserId, newWallpaperData.userId);

            WallpaperData wallpaperData = mService.getWallpaperSafeLocked(testUserId, which);
            assertEquals(wallpaperData.cropFile.getAbsolutePath(),
                    newWallpaperData.cropFile.getAbsolutePath());
            assertEquals(wallpaperData.wallpaperFile.getAbsolutePath(),
                    newWallpaperData.wallpaperFile.getAbsolutePath());
            assertEquals(wallpaperData.getCropFile().getAbsolutePath(),
                    newWallpaperData.getCropFile().getAbsolutePath());
            assertEquals(wallpaperData.getWallpaperFile().getAbsolutePath(),
                    newWallpaperData.getWallpaperFile().getAbsolutePath());
        }
    }

@@ -525,7 +524,8 @@ public class WallpaperManagerServiceTests {
    @Test
    public void getWallpaperWithFeature_getCropped_returnsCropFile() throws Exception {
        File cropSystemWallpaperFile =
                new File(WallpaperUtils.getWallpaperDir(USER_SYSTEM), WALLPAPER_CROP);
                new WallpaperData(USER_SYSTEM, FLAG_SYSTEM).getCropFile();
        cropSystemWallpaperFile.getParentFile().mkdirs();
        cropSystemWallpaperFile.createNewFile();
        try (FileOutputStream outputStream = new FileOutputStream(cropSystemWallpaperFile)) {
            outputStream.write("Crop system wallpaper".getBytes());
@@ -547,7 +547,8 @@ public class WallpaperManagerServiceTests {
    @Test
    public void getWallpaperWithFeature_notGetCropped_returnsOriginalFile() throws Exception {
        File originalSystemWallpaperFile =
                new File(WallpaperUtils.getWallpaperDir(USER_SYSTEM), WALLPAPER);
                new WallpaperData(USER_SYSTEM, FLAG_SYSTEM).getWallpaperFile();
        originalSystemWallpaperFile.getParentFile().mkdirs();
        originalSystemWallpaperFile.createNewFile();
        try (FileOutputStream outputStream = new FileOutputStream(originalSystemWallpaperFile)) {
            outputStream.write("Original system wallpaper".getBytes());