Loading core/java/android/app/usage/ParcelableUsageEventList.java +5 −2 Original line number Diff line number Diff line Loading @@ -48,13 +48,16 @@ public final class ParcelableUsageEventList implements Parcelable { private List<Event> mList; public ParcelableUsageEventList(List<Event> list) { public ParcelableUsageEventList(@NonNull List<Event> list) { if (list == null) { throw new IllegalArgumentException("Empty list"); } mList = list; } private ParcelableUsageEventList(Parcel in) { final int N = in.readInt(); mList = new ArrayList<>(); mList = new ArrayList<>(N); if (DEBUG) Log.d(TAG, "Retrieving " + N + " items"); if (N <= 0) { return; Loading core/java/android/app/usage/UsageEvents.java +17 −3 Original line number Diff line number Diff line Loading @@ -24,9 +24,11 @@ import android.content.res.Configuration; import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading @@ -35,6 +37,7 @@ import java.util.List; * from which to read {@link android.app.usage.UsageEvents.Event} objects. */ public final class UsageEvents implements Parcelable { private static final String TAG = "UsageEvents"; /** @hide */ public static final String INSTANT_APP_PACKAGE_NAME = "android.instant_app"; Loading Loading @@ -786,10 +789,20 @@ public final class UsageEvents implements Parcelable { } private void readUsageEventsFromParcelWithParceledList(Parcel in) { mEventCount = in.readInt(); mIndex = in.readInt(); mEventsToWrite = in.readParcelable(UsageEvents.class.getClassLoader(), ParcelableUsageEventList.class).getList(); mEventCount = mEventsToWrite.size(); ParcelableUsageEventList slice = in.readParcelable(getClass().getClassLoader(), ParcelableUsageEventList.class); if (slice != null) { mEventsToWrite = slice.getList(); } else { mEventsToWrite = new ArrayList<>(); } if (mEventCount != mEventsToWrite.size()) { Log.w(TAG, "Partial usage event list received: " + mEventCount + " != " + mEventsToWrite.size()); } } private void readUsageEventsFromParcelWithBlob(Parcel in) { Loading Loading @@ -1065,6 +1078,7 @@ public final class UsageEvents implements Parcelable { } private void writeUsageEventsToParcelWithParceledList(Parcel dest, int flags) { dest.writeInt(mEventCount); dest.writeInt(mIndex); dest.writeParcelable(new ParcelableUsageEventList(mEventsToWrite), flags); } Loading core/tests/coretests/src/android/app/usage/ParcelableUsageEventListTest.java +24 −5 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.view.Surface.ROTATION_90; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; Loading @@ -43,10 +44,28 @@ import java.util.Random; @LargeTest public class ParcelableUsageEventListTest { private static final int SMALL_TEST_EVENT_COUNT = 100; private static final int LARGE_TEST_EVENT_COUNT = 10000; private static final int LARGE_TEST_EVENT_COUNT = 30000; private Random mRandom = new Random(); @Test public void testNullList() throws Exception { Parcel parcel = Parcel.obtain(); try { parcel.writeParcelable(new ParcelableUsageEventList(null), 0); fail("Expected IllegalArgumentException with null list."); } catch (IllegalArgumentException expected) { // Expected. } finally { parcel.recycle(); } } @Test public void testEmptyList() throws Exception { testParcelableUsageEventList(0); } @Test public void testSmallList() throws Exception { testParcelableUsageEventList(SMALL_TEST_EVENT_COUNT); Loading @@ -58,15 +77,15 @@ public class ParcelableUsageEventListTest { } private void testParcelableUsageEventList(int eventCount) throws Exception { List<Event> smallList = new ArrayList<>(); List<Event> eventList = new ArrayList<>(); for (int i = 0; i < eventCount; i++) { smallList.add(generateUsageEvent()); eventList.add(generateUsageEvent()); } ParcelableUsageEventList slice; Parcel parcel = Parcel.obtain(); try { parcel.writeParcelable(new ParcelableUsageEventList(smallList), 0); parcel.writeParcelable(new ParcelableUsageEventList(eventList), 0); parcel.setDataPosition(0); slice = parcel.readParcelable(getClass().getClassLoader(), ParcelableUsageEventList.class); Loading @@ -79,7 +98,7 @@ public class ParcelableUsageEventListTest { assertEquals(eventCount, slice.getList().size()); for (int i = 0; i < eventCount; i++) { compareUsageEvent(smallList.get(i), slice.getList().get(i)); compareUsageEvent(eventList.get(i), slice.getList().get(i)); } } Loading services/usage/java/com/android/server/usage/UsageStatsService.java +7 −0 Original line number Diff line number Diff line Loading @@ -1953,6 +1953,13 @@ public class UsageStatsService extends SystemService implements } } // Flags status. pw.println("Flags:"); pw.println(" " + Flags.FLAG_USER_INTERACTION_TYPE_API + ": " + Flags.userInteractionTypeApi()); pw.println(" " + Flags.FLAG_USE_PARCELED_LIST + ": " + Flags.useParceledList()); final int[] userIds; synchronized (mLock) { final int userCount = mUserState.size(); Loading Loading
core/java/android/app/usage/ParcelableUsageEventList.java +5 −2 Original line number Diff line number Diff line Loading @@ -48,13 +48,16 @@ public final class ParcelableUsageEventList implements Parcelable { private List<Event> mList; public ParcelableUsageEventList(List<Event> list) { public ParcelableUsageEventList(@NonNull List<Event> list) { if (list == null) { throw new IllegalArgumentException("Empty list"); } mList = list; } private ParcelableUsageEventList(Parcel in) { final int N = in.readInt(); mList = new ArrayList<>(); mList = new ArrayList<>(N); if (DEBUG) Log.d(TAG, "Retrieving " + N + " items"); if (N <= 0) { return; Loading
core/java/android/app/usage/UsageEvents.java +17 −3 Original line number Diff line number Diff line Loading @@ -24,9 +24,11 @@ import android.content.res.Configuration; import android.os.Build; import android.os.Parcel; import android.os.Parcelable; import android.util.Log; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.util.ArrayList; import java.util.Arrays; import java.util.List; Loading @@ -35,6 +37,7 @@ import java.util.List; * from which to read {@link android.app.usage.UsageEvents.Event} objects. */ public final class UsageEvents implements Parcelable { private static final String TAG = "UsageEvents"; /** @hide */ public static final String INSTANT_APP_PACKAGE_NAME = "android.instant_app"; Loading Loading @@ -786,10 +789,20 @@ public final class UsageEvents implements Parcelable { } private void readUsageEventsFromParcelWithParceledList(Parcel in) { mEventCount = in.readInt(); mIndex = in.readInt(); mEventsToWrite = in.readParcelable(UsageEvents.class.getClassLoader(), ParcelableUsageEventList.class).getList(); mEventCount = mEventsToWrite.size(); ParcelableUsageEventList slice = in.readParcelable(getClass().getClassLoader(), ParcelableUsageEventList.class); if (slice != null) { mEventsToWrite = slice.getList(); } else { mEventsToWrite = new ArrayList<>(); } if (mEventCount != mEventsToWrite.size()) { Log.w(TAG, "Partial usage event list received: " + mEventCount + " != " + mEventsToWrite.size()); } } private void readUsageEventsFromParcelWithBlob(Parcel in) { Loading Loading @@ -1065,6 +1078,7 @@ public final class UsageEvents implements Parcelable { } private void writeUsageEventsToParcelWithParceledList(Parcel dest, int flags) { dest.writeInt(mEventCount); dest.writeInt(mIndex); dest.writeParcelable(new ParcelableUsageEventList(mEventsToWrite), flags); } Loading
core/tests/coretests/src/android/app/usage/ParcelableUsageEventListTest.java +24 −5 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import static android.view.Surface.ROTATION_90; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; import static org.mockito.ArgumentMatchers.anyString; Loading @@ -43,10 +44,28 @@ import java.util.Random; @LargeTest public class ParcelableUsageEventListTest { private static final int SMALL_TEST_EVENT_COUNT = 100; private static final int LARGE_TEST_EVENT_COUNT = 10000; private static final int LARGE_TEST_EVENT_COUNT = 30000; private Random mRandom = new Random(); @Test public void testNullList() throws Exception { Parcel parcel = Parcel.obtain(); try { parcel.writeParcelable(new ParcelableUsageEventList(null), 0); fail("Expected IllegalArgumentException with null list."); } catch (IllegalArgumentException expected) { // Expected. } finally { parcel.recycle(); } } @Test public void testEmptyList() throws Exception { testParcelableUsageEventList(0); } @Test public void testSmallList() throws Exception { testParcelableUsageEventList(SMALL_TEST_EVENT_COUNT); Loading @@ -58,15 +77,15 @@ public class ParcelableUsageEventListTest { } private void testParcelableUsageEventList(int eventCount) throws Exception { List<Event> smallList = new ArrayList<>(); List<Event> eventList = new ArrayList<>(); for (int i = 0; i < eventCount; i++) { smallList.add(generateUsageEvent()); eventList.add(generateUsageEvent()); } ParcelableUsageEventList slice; Parcel parcel = Parcel.obtain(); try { parcel.writeParcelable(new ParcelableUsageEventList(smallList), 0); parcel.writeParcelable(new ParcelableUsageEventList(eventList), 0); parcel.setDataPosition(0); slice = parcel.readParcelable(getClass().getClassLoader(), ParcelableUsageEventList.class); Loading @@ -79,7 +98,7 @@ public class ParcelableUsageEventListTest { assertEquals(eventCount, slice.getList().size()); for (int i = 0; i < eventCount; i++) { compareUsageEvent(smallList.get(i), slice.getList().get(i)); compareUsageEvent(eventList.get(i), slice.getList().get(i)); } } Loading
services/usage/java/com/android/server/usage/UsageStatsService.java +7 −0 Original line number Diff line number Diff line Loading @@ -1953,6 +1953,13 @@ public class UsageStatsService extends SystemService implements } } // Flags status. pw.println("Flags:"); pw.println(" " + Flags.FLAG_USER_INTERACTION_TYPE_API + ": " + Flags.userInteractionTypeApi()); pw.println(" " + Flags.FLAG_USE_PARCELED_LIST + ": " + Flags.useParceledList()); final int[] userIds; synchronized (mLock) { final int userCount = mUserState.size(); Loading