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

Commit 1847ff8e authored by Matt Casey's avatar Matt Casey
Browse files

Switch clipboard image edit intent to a callback.

In preparation for flagged behavior change.

Bug: 391401141
Flag: com.android.systemui.shared.use_preferred_image_editor
Test: atest ActionIntentCreatorTest
Change-Id: I6273d3081ad932cd782609e1f3570b3a1ba9f68e
parent 7f8d6527
Loading
Loading
Loading
Loading
+10 −2
Original line number Diff line number Diff line
@@ -25,6 +25,10 @@ import androidx.test.filters.SmallTest
import androidx.test.runner.AndroidJUnit4
import com.android.systemui.SysuiTestCase
import com.android.systemui.res.R
import kotlinx.coroutines.test.TestCoroutineScheduler
import kotlinx.coroutines.test.TestScope
import kotlinx.coroutines.test.UnconfinedTestDispatcher
import kotlinx.coroutines.test.runTest
import org.junit.Assert.assertEquals
import org.junit.Assert.assertTrue
import org.junit.Test
@@ -33,7 +37,11 @@ import org.junit.runner.RunWith
@SmallTest
@RunWith(AndroidJUnit4::class)
class ActionIntentCreatorTest : SysuiTestCase() {
    val creator = ActionIntentCreator()
    private val scheduler = TestCoroutineScheduler()
    private val mainDispatcher = UnconfinedTestDispatcher(scheduler)
    private val testScope = TestScope(mainDispatcher)

    val creator = ActionIntentCreator(testScope.backgroundScope)

    @Test
    fun test_getTextEditorIntent() {
@@ -65,7 +73,7 @@ class ActionIntentCreatorTest : SysuiTestCase() {
    }

    @Test
    fun test_getImageEditIntent() {
    fun test_getImageEditIntent() = runTest {
        context.getOrCreateTestableResources().addOverride(R.string.config_screenshotEditor, "")
        val fakeUri = Uri.parse("content://foo")
        var intent = creator.getImageEditIntent(fakeUri, context)
+12 −4
Original line number Diff line number Diff line
@@ -34,6 +34,8 @@ import com.android.systemui.res.R;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.util.concurrent.atomic.AtomicReference;

@SmallTest
@RunWith(AndroidJUnit4.class)
public class DefaultIntentCreatorTest extends SysuiTestCase {
@@ -73,12 +75,16 @@ public class DefaultIntentCreatorTest extends SysuiTestCase {
    }

    @Test
    public void test_getImageEditIntent() {
    public void test_getImageEditIntentAsync() {
        getContext().getOrCreateTestableResources().addOverride(R.string.config_screenshotEditor,
                "");
        Uri fakeUri = Uri.parse("content://foo");
        Intent intent = mIntentCreator.getImageEditIntent(fakeUri, getContext());
        final AtomicReference<Intent> intentHolder = new AtomicReference<>(null);
        mIntentCreator.getImageEditIntentAsync(fakeUri, getContext(), output -> {
            intentHolder.set(output);
        });

        Intent intent = intentHolder.get();
        assertEquals(Intent.ACTION_EDIT, intent.getAction());
        assertEquals("image/*", intent.getType());
        assertEquals(null, intent.getComponent());
@@ -90,8 +96,10 @@ public class DefaultIntentCreatorTest extends SysuiTestCase {
                "com.android.remotecopy.RemoteCopyActivity");
        getContext().getOrCreateTestableResources().addOverride(R.string.config_screenshotEditor,
                fakeComponent.flattenToString());
        intent = mIntentCreator.getImageEditIntent(fakeUri, getContext());
        assertEquals(fakeComponent, intent.getComponent());
        mIntentCreator.getImageEditIntentAsync(fakeUri, getContext(), output -> {
            intentHolder.set(output);
        });
        assertEquals(fakeComponent, intentHolder.get().getComponent());
    }

    @Test
+16 −2
Original line number Diff line number Diff line
@@ -24,11 +24,17 @@ import android.content.Intent
import android.net.Uri
import android.text.TextUtils
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.res.R
import java.util.function.Consumer
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.launch

@SysUISingleton
class ActionIntentCreator @Inject constructor() : IntentCreator {
class ActionIntentCreator
@Inject
constructor(@Application private val applicationScope: CoroutineScope) : IntentCreator {
    override fun getTextEditorIntent(context: Context?) =
        Intent(context, EditTextActivity::class.java).apply {
            addFlags(Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK)
@@ -65,7 +71,7 @@ class ActionIntentCreator @Inject constructor() : IntentCreator {
            .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
    }

    override fun getImageEditIntent(uri: Uri?, context: Context): Intent {
    suspend fun getImageEditIntent(uri: Uri?, context: Context): Intent {
        val editorPackage = context.getString(R.string.config_screenshotEditor)
        return Intent(Intent.ACTION_EDIT).apply {
            if (!TextUtils.isEmpty(editorPackage)) {
@@ -78,6 +84,14 @@ class ActionIntentCreator @Inject constructor() : IntentCreator {
        }
    }

    override fun getImageEditIntentAsync(
        uri: Uri?,
        context: Context,
        outputConsumer: Consumer<Intent>,
    ) {
        applicationScope.launch { outputConsumer.accept(getImageEditIntent(uri, context)) }
    }

    override fun getRemoteCopyIntent(clipData: ClipData?, context: Context): Intent {
        val remoteCopyPackage = context.getString(R.string.config_remoteCopyPackage)
        return Intent(REMOTE_COPY_ACTION).apply {
+8 −4
Original line number Diff line number Diff line
@@ -558,8 +558,10 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv

    private void editImage(Uri uri) {
        mClipboardLogger.logSessionComplete(CLIPBOARD_OVERLAY_EDIT_TAPPED);
        mContext.startActivity(mIntentCreator.getImageEditIntent(uri, mContext));
        mIntentCreator.getImageEditIntentAsync(uri, mContext, intent -> {
            mContext.startActivity(intent);
            animateOut();
        });
    }

    private void editText() {
@@ -747,8 +749,10 @@ public class ClipboardOverlayController implements ClipboardListener.ClipboardOv
                            mIntentCreator.getTextEditorIntent(mContext));
                    break;
                case IMAGE:
                    finishWithSharedTransition(CLIPBOARD_OVERLAY_EDIT_TAPPED,
                            mIntentCreator.getImageEditIntent(mClipboardModel.getUri(), mContext));
                    mIntentCreator.getImageEditIntentAsync(mClipboardModel.getUri(), mContext,
                            intent -> {
                                finishWithSharedTransition(CLIPBOARD_OVERLAY_EDIT_TAPPED, intent);
                            });
                    break;
                default:
                    Log.w(TAG, "Got preview tapped callback for non-editable type "
+4 −2
Original line number Diff line number Diff line
@@ -27,6 +27,8 @@ import android.text.TextUtils;
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.res.R;

import java.util.function.Consumer;

import javax.inject.Inject;

@SysUISingleton
@@ -73,7 +75,7 @@ public class DefaultIntentCreator implements IntentCreator {
        return chooserIntent;
    }

    public Intent getImageEditIntent(Uri uri, Context context) {
    public void getImageEditIntentAsync(Uri uri, Context context, Consumer<Intent> outputConsumer) {
        String editorPackage = context.getString(R.string.config_screenshotEditor);
        Intent editIntent = new Intent(Intent.ACTION_EDIT);
        if (!TextUtils.isEmpty(editorPackage)) {
@@ -83,7 +85,7 @@ public class DefaultIntentCreator implements IntentCreator {
        editIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
        editIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        editIntent.putExtra(EXTRA_EDIT_SOURCE, EDIT_SOURCE_CLIPBOARD);
        return editIntent;
        outputConsumer.accept(editIntent);
    }

    public Intent getRemoteCopyIntent(ClipData clipData, Context context) {
Loading