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

Commit 4a4f0a16 authored by Sunny Goyal's avatar Sunny Goyal Committed by android-build-merger
Browse files

Merge "Filling in content values on the worker thread" into ub-launcher3-qt-dev

am: 587421ad

Change-Id: I4854343932b386d74e7b516032f8b36e5ffd185e
parents 9eddc4c7 587421ad
Loading
Loading
Loading
Loading
+32 −30
Original line number Diff line number Diff line
@@ -47,6 +47,7 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.function.Supplier;

/**
 * Class for handling model updates.
@@ -151,15 +152,13 @@ public class ModelWriter {
    public void moveItemInDatabase(final ItemInfo item,
            int container, int screenId, int cellX, int cellY) {
        updateItemInfoProps(item, container, screenId, cellX, cellY);

        final ContentWriter writer = new ContentWriter(mContext)
        enqueueDeleteRunnable(new UpdateItemRunnable(item, () ->
                new ContentWriter(mContext)
                        .put(Favorites.CONTAINER, item.container)
                        .put(Favorites.CELLX, item.cellX)
                        .put(Favorites.CELLY, item.cellY)
                        .put(Favorites.RANK, item.rank)
                .put(Favorites.SCREEN, item.screenId);

        enqueueDeleteRunnable(new UpdateItemRunnable(item, writer));
                        .put(Favorites.SCREEN, item.screenId)));
    }

    /**
@@ -195,25 +194,26 @@ public class ModelWriter {
        item.spanX = spanX;
        item.spanY = spanY;

        final ContentWriter writer = new ContentWriter(mContext)
        mWorkerExecutor.execute(new UpdateItemRunnable(item, () ->
                new ContentWriter(mContext)
                        .put(Favorites.CONTAINER, item.container)
                        .put(Favorites.CELLX, item.cellX)
                        .put(Favorites.CELLY, item.cellY)
                        .put(Favorites.RANK, item.rank)
                        .put(Favorites.SPANX, item.spanX)
                        .put(Favorites.SPANY, item.spanY)
                .put(Favorites.SCREEN, item.screenId);

        mWorkerExecutor.execute(new UpdateItemRunnable(item, writer));
                        .put(Favorites.SCREEN, item.screenId)));
    }

    /**
     * Update an item to the database in a specified container.
     */
    public void updateItemInDatabase(ItemInfo item) {
        mWorkerExecutor.execute(new UpdateItemRunnable(item, () -> {
            ContentWriter writer = new ContentWriter(mContext);
            item.onAddToDatabase(writer);
        mWorkerExecutor.execute(new UpdateItemRunnable(item, writer));
            return writer;
        }));
    }

    /**
@@ -224,17 +224,18 @@ public class ModelWriter {
            int container, int screenId, int cellX, int cellY) {
        updateItemInfoProps(item, container, screenId, cellX, cellY);

        final ContentWriter writer = new ContentWriter(mContext);
        final ContentResolver cr = mContext.getContentResolver();
        item.onAddToDatabase(writer);

        item.id = Settings.call(cr, Settings.METHOD_NEW_ITEM_ID).getInt(Settings.EXTRA_VALUE);
        writer.put(Favorites._ID, item.id);

        ModelVerifier verifier = new ModelVerifier();

        final StackTraceElement[] stackTrace = new Throwable().getStackTrace();
        mWorkerExecutor.execute(() -> {
            // Write the item on background thread, as some properties might have been updated in
            // the background.
            final ContentWriter writer = new ContentWriter(mContext);
            item.onAddToDatabase(writer);
            writer.put(Favorites._ID, item.id);

            cr.insert(Favorites.CONTENT_URI, writer.getValues(mContext));

            synchronized (mBgDataModel) {
@@ -354,10 +355,10 @@ public class ModelWriter {

    private class UpdateItemRunnable extends UpdateItemBaseRunnable {
        private final ItemInfo mItem;
        private final ContentWriter mWriter;
        private final Supplier<ContentWriter> mWriter;
        private final int mItemId;

        UpdateItemRunnable(ItemInfo item, ContentWriter writer) {
        UpdateItemRunnable(ItemInfo item, Supplier<ContentWriter> writer) {
            mItem = item;
            mWriter = writer;
            mItemId = item.id;
@@ -366,7 +367,8 @@ public class ModelWriter {
        @Override
        public void run() {
            Uri uri = Favorites.getContentUri(mItemId);
            mContext.getContentResolver().update(uri, mWriter.getValues(mContext), null, null);
            mContext.getContentResolver().update(uri, mWriter.get().getValues(mContext),
                    null, null);
            updateItemArrays(mItem, mItemId);
        }
    }
+25 −0
Original line number Diff line number Diff line
@@ -16,12 +16,18 @@

package com.android.launcher3.util;

import android.content.Context;

import com.android.launcher3.config.FeatureFlags;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.util.UUID;

/**
 * Supports various IO utility functions
@@ -52,4 +58,23 @@ public class IOUtils {
        }
        return total;
    }

    /**
     * Utility method to debug binary data
     */
    public static String createTempFile(Context context, byte[] data) {
        if (!FeatureFlags.IS_DOGFOOD_BUILD) {
            throw new IllegalStateException("Method only allowed in development mode");
        }

        String name = UUID.randomUUID().toString();
        File file = new File(context.getCacheDir(), name);
        try (FileOutputStream fo = new FileOutputStream(file)) {
            fo.write(data);
            fo.flush();
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
        return file.getAbsolutePath();
    }
}