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

Commit 368ca8bc authored by Joe Antonetti's avatar Joe Antonetti Committed by Android (Google) Code Review
Browse files

Merge "[Handoff][8/N] Serialize App Icon Between Devices" into main

parents c09d9982 885f97ff
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.companion.datatransfer.continuity;

import static android.companion.CompanionDeviceManager.MESSAGE_ONEWAY_TASK_CONTINUITY;
import static com.android.server.companion.datatransfer.contextsync.BitmapUtils.renderDrawableToByteArray;

import android.app.ActivityManager;
import android.app.ActivityManager.RunningTaskInfo;
@@ -28,6 +29,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.graphics.drawable.Drawable;
import android.os.RemoteException;
import android.util.Slog;

@@ -267,10 +269,13 @@ class TaskBroadcaster
        String baseApplicationLabel = mPackageManager.getApplicationLabel(
            packageInfo.applicationInfo).toString();

        Drawable baseApplicationIcon = mPackageManager.getApplicationIcon(
            packageInfo.applicationInfo);

        return new RemoteTaskInfo(
            taskInfo.taskId,
            baseApplicationLabel,
            taskInfo.lastActiveTime,
            new byte[0]);
            renderDrawableToByteArray(baseApplicationIcon));
    }
}
 No newline at end of file
+7 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.server.companion.datatransfer.continuity.messages;

import android.companion.datatransfer.continuity.RemoteTask;
import android.graphics.drawable.Icon;
import android.util.proto.ProtoInputStream;
import android.util.proto.ProtoOutputStream;

@@ -90,11 +91,17 @@ public record RemoteTaskInfo(int id, String label, long lastUsedTimeMillis, byte
    }

    public RemoteTask toRemoteTask(int deviceId, String deviceName) {
        Icon taskIcon = null;
        if (taskIcon() != null && taskIcon().length > 0) {
            taskIcon = Icon.createWithData(taskIcon(), 0, taskIcon().length);
        }

        return new RemoteTask.Builder(id())
                .setLabel(label())
                .setDeviceId(deviceId)
                .setLastUsedTimestampMillis((int) lastUsedTimeMillis())
                .setSourceDeviceName(deviceName)
                .setIcon(taskIcon)
                .build();
    }
}
 No newline at end of file
+34 −4
Original line number Diff line number Diff line
@@ -22,8 +22,10 @@ import static org.mockito.Mockito.when;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.never;
import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.assertEquals;
import static org.mockito.ArgumentMatchers.eq;

import static com.android.server.companion.datatransfer.contextsync.BitmapUtils.renderDrawableToByteArray;
import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createMockContext;
import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createMockCompanionDeviceManager;
import static com.android.server.companion.datatransfer.continuity.TaskContinuityTestUtils.createAssociationInfo;
@@ -44,6 +46,10 @@ import android.companion.CompanionDeviceManager;
import android.companion.ICompanionDeviceManager;
import android.companion.AssociationInfo;
import android.companion.datatransfer.continuity.RemoteTask;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.platform.test.annotations.Presubmit;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -59,6 +65,9 @@ import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskR
import com.android.server.companion.datatransfer.continuity.messages.RemoteTaskUpdatedMessage;
import com.android.server.companion.datatransfer.continuity.messages.TaskContinuityMessageData;

import com.android.frameworks.servicestests.R;


import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -90,6 +99,10 @@ public class TaskBroadcasterTest {

    private TaskBroadcaster mTaskBroadcaster;

    private Drawable mTaskIcon;
    private byte[] mSerializedTaskIcon;


    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
@@ -101,6 +114,11 @@ public class TaskBroadcasterTest {

        when(mMockContext.getPackageManager()).thenReturn(mMockPackageManager);

        Bitmap bitmap = BitmapFactory.decodeResource(
                mMockContext.getResources(), R.drawable.black_32x32);
        mTaskIcon = new BitmapDrawable(mMockContext.getResources(), bitmap);
        mSerializedTaskIcon = renderDrawableToByteArray(mTaskIcon);

        // Create TaskBroadcaster.
        mTaskBroadcaster = new TaskBroadcaster(
            mMockContext,
@@ -173,7 +191,7 @@ public class TaskBroadcasterTest {
            taskInfo.taskId,
            expectedLabel,
            0,
            new byte[0]);
            mSerializedTaskIcon);
        assertThat(continuityDeviceConnected.getRemoteTasks().get(0))
            .isEqualTo(expectedTaskInfo);
    }
@@ -210,8 +228,12 @@ public class TaskBroadcasterTest {
        assertThat(taskContinuityMessage.getData()).isInstanceOf(RemoteTaskAddedMessage.class);
        RemoteTaskAddedMessage remoteTaskAddedMessage =
                (RemoteTaskAddedMessage) taskContinuityMessage.getData();
        RemoteTaskInfo expectedTaskInfo = new RemoteTaskInfo(taskId, taskLabel, 0, new byte[0]);
        assertThat(remoteTaskAddedMessage.getTask()).isEqualTo(expectedTaskInfo);
        RemoteTaskInfo expectedTaskInfo = new RemoteTaskInfo(
            taskId,
            taskLabel,
            0,
            mSerializedTaskIcon);
        assertEquals(expectedTaskInfo, remoteTaskAddedMessage.getTask());
    }

        @Test
@@ -266,7 +288,12 @@ public class TaskBroadcasterTest {
        RemoteTaskUpdatedMessage remoteTaskUpdated
            = (RemoteTaskUpdatedMessage) actualMessage.getData();

        RemoteTaskInfo expectedTaskInfo = new RemoteTaskInfo(taskId, taskLabel, 0, new byte[0]);
        RemoteTaskInfo expectedTaskInfo = new RemoteTaskInfo(
            taskId,
            taskLabel,
            0,
            mSerializedTaskIcon);

        assertThat(remoteTaskUpdated.getTask()).isEqualTo(expectedTaskInfo);
    }

@@ -290,6 +317,9 @@ public class TaskBroadcasterTest {
        when(mMockPackageManager.getApplicationLabel(any(ApplicationInfo.class)))
            .thenReturn(label);

        when(mMockPackageManager.getApplicationIcon(any(ApplicationInfo.class)))
            .thenReturn(mTaskIcon);

        return taskInfo;
    }
}
 No newline at end of file