Loading core/java/android/companion/SystemDataTransferRequest.java +66 −6 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.companion; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.os.Parcel; import android.os.Parcelable; import android.provider.OneTimeUseBuilder; Loading @@ -38,10 +38,25 @@ public final class SystemDataTransferRequest implements Parcelable { private final List<String> mPermissionSyncPackages; /** * User Id that the request belongs to. * Populated by the system. * * @hide */ @UserIdInt private int mUserId; /** * Whether the request is consented by the user. * Populated by the system. * * @hide */ private boolean mUserConsented = false; /* @hide */ public SystemDataTransferRequest(int associationId, boolean syncAllPackages, @Nullable List<String> permissionSyncPackages) { @NonNull List<String> permissionSyncPackages) { mAssociationId = associationId; mPermissionSyncAllPackages = syncAllPackages; mPermissionSyncPackages = permissionSyncPackages; Loading @@ -61,6 +76,37 @@ public final class SystemDataTransferRequest implements Parcelable { return mPermissionSyncPackages; } /* @hide */ public int getUserId() { return mUserId; } /* @hide */ public boolean isUserConsented() { return mUserConsented; } /* @hide */ public void setUserId(@UserIdInt int userId) { mUserId = userId; } /* @hide */ public void setUserConsented(boolean isUserConsented) { mUserConsented = isUserConsented; } /* @hide */ @Override public String toString() { return "SystemDataTransferRequest(" + "associationId=" + mAssociationId + ", isPermissionSyncAllPackages=" + mPermissionSyncAllPackages + ", permissionSyncPackages=[" + String.join(",", mPermissionSyncPackages) + "]" + ", isUserConsented=" + mUserConsented + ")"; } /** * A builder for {@link SystemDataTransferRequest}. * Loading Loading @@ -90,9 +136,8 @@ public final class SystemDataTransferRequest implements Parcelable { * <p>If a system or policy granted or revoked permission is granted or revoked by the user * later, the permission will be ignored.</p> * * @see #setPermissionSyncPackages(List) * * @return the builder * @see #setPermissionSyncPackages(List) */ @NonNull public Builder setPermissionSyncAllPackages() { Loading @@ -104,10 +149,9 @@ public final class SystemDataTransferRequest implements Parcelable { * Set a list of packages to sync permissions. You can optionally call * {@link #setPermissionSyncAllPackages()} to sync permissions for all the packages. * * @see #setPermissionSyncAllPackages() * * @param permissionSyncPackages packages to sync permissions * @return builder * @see #setPermissionSyncAllPackages() */ @NonNull public Builder setPermissionSyncPackages(@NonNull List<String> permissionSyncPackages) { Loading @@ -127,6 +171,8 @@ public final class SystemDataTransferRequest implements Parcelable { mAssociationId = in.readInt(); mPermissionSyncAllPackages = in.readBoolean(); mPermissionSyncPackages = Arrays.asList(in.createString8Array()); mUserId = in.readInt(); mUserConsented = in.readBoolean(); } @Override Loading @@ -134,6 +180,8 @@ public final class SystemDataTransferRequest implements Parcelable { dest.writeInt(mAssociationId); dest.writeBoolean(mPermissionSyncAllPackages); dest.writeString8Array(mPermissionSyncPackages.toArray(new String[0])); dest.writeInt(mUserId); dest.writeBoolean(mUserConsented); } @Override Loading @@ -141,6 +189,18 @@ public final class SystemDataTransferRequest implements Parcelable { return 0; } /** * Check if two requests have the same data type. */ public boolean hasSameDataType(SystemDataTransferRequest request) { // Check if they are permission sync requests. if (this.isPermissionSyncAllPackages() || !this.getPermissionSyncPackages().isEmpty()) { return request.isPermissionSyncAllPackages() || !request.getPermissionSyncPackages() .isEmpty(); } return false; } @NonNull public static final Creator<SystemDataTransferRequest> CREATOR = new Creator<SystemDataTransferRequest>() { Loading services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +1 −17 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.server.companion.CompanionDeviceManagerService.DEBUG; import static com.android.server.companion.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.PermissionsUtils.enforcePermissionsForAssociation; import static com.android.server.companion.RolesUtils.isRoleHolder; import static com.android.server.companion.Utils.prepareForIpc; import static java.util.Objects.requireNonNull; Loading @@ -47,7 +48,6 @@ import android.net.MacAddress; import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.Parcel; import android.os.RemoteException; import android.os.ResultReceiver; import android.util.PackageUtils; Loading Loading @@ -397,20 +397,4 @@ class AssociationRequestsProcessor { return sameOemPackageCerts; } /** * Convert an instance of a "locally-defined" ResultReceiver to an instance of * {@link android.os.ResultReceiver} itself, which the receiving process will be able to * unmarshall. */ private static <T extends ResultReceiver> ResultReceiver prepareForIpc(T resultReceiver) { final Parcel parcel = Parcel.obtain(); resultReceiver.writeToParcel(parcel, 0); parcel.setDataPosition(0); final ResultReceiver ipcFriendly = ResultReceiver.CREATOR.createFromParcel(parcel); parcel.recycle(); return ipcFriendly; } } services/companion/java/com/android/server/companion/AssociationStoreImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ import java.util.StringJoiner; * should use public {@link AssociationStore} interface. */ @SuppressLint("LongLogTag") class AssociationStoreImpl implements AssociationStore { public class AssociationStoreImpl implements AssociationStore { private static final boolean DEBUG = false; private static final String TAG = "CompanionDevice_AssociationStore"; Loading services/companion/java/com/android/server/companion/DataStoreUtils.java +14 −5 Original line number Diff line number Diff line Loading @@ -33,15 +33,24 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.FileOutputStream; final class DataStoreUtils { /** * Util class for CDM data stores */ public final class DataStoreUtils { private static final String TAG = "CompanionDevice_DataStoreUtils"; static boolean isStartOfTag(@NonNull XmlPullParser parser, @NonNull String tag) /** * Check if the parser pointer is at the start of the tag */ public static boolean isStartOfTag(@NonNull XmlPullParser parser, @NonNull String tag) throws XmlPullParserException { return parser.getEventType() == START_TAG && tag.equals(parser.getName()); } static boolean isEndOfTag(@NonNull XmlPullParser parser, @NonNull String tag) /** * Check if the parser pointer is at the end of the tag */ public static boolean isEndOfTag(@NonNull XmlPullParser parser, @NonNull String tag) throws XmlPullParserException { return parser.getEventType() == END_TAG && tag.equals(parser.getName()); } Loading @@ -57,7 +66,7 @@ final class DataStoreUtils { * @return an AtomicFile for the user */ @NonNull static AtomicFile createStorageFileForUser(@UserIdInt int userId, String fileName) { public static AtomicFile createStorageFileForUser(@UserIdInt int userId, String fileName) { return new AtomicFile(getBaseStorageFileForUser(userId, fileName)); } Loading @@ -70,7 +79,7 @@ final class DataStoreUtils { * Writing to file could fail, for example, if the user has been recently removed and so was * their DE (/data/system_de/<user-id>/) directory. */ static void writeToFileSafely( public static void writeToFileSafely( @NonNull AtomicFile file, @NonNull ThrowingConsumer<FileOutputStream> consumer) { try { file.write(consumer); Loading services/companion/java/com/android/server/companion/PersistentDataStore.java +1 −1 Original line number Diff line number Diff line Loading @@ -101,7 +101,7 @@ import java.util.concurrent.ConcurrentMap; * Since Android T the data is stored to "companion_device_manager.xml" file in * {@link Environment#getDataSystemDeDirectory(int) /data/system_de/}. * * See {@link #getBaseStorageFileForUser(int) getBaseStorageFileForUser()} * See {@link #getStorageFileForUser(int)} * * <p> * Since Android T the data is stored using the v1 schema. Loading Loading
core/java/android/companion/SystemDataTransferRequest.java +66 −6 Original line number Diff line number Diff line Loading @@ -17,7 +17,7 @@ package android.companion; import android.annotation.NonNull; import android.annotation.Nullable; import android.annotation.UserIdInt; import android.os.Parcel; import android.os.Parcelable; import android.provider.OneTimeUseBuilder; Loading @@ -38,10 +38,25 @@ public final class SystemDataTransferRequest implements Parcelable { private final List<String> mPermissionSyncPackages; /** * User Id that the request belongs to. * Populated by the system. * * @hide */ @UserIdInt private int mUserId; /** * Whether the request is consented by the user. * Populated by the system. * * @hide */ private boolean mUserConsented = false; /* @hide */ public SystemDataTransferRequest(int associationId, boolean syncAllPackages, @Nullable List<String> permissionSyncPackages) { @NonNull List<String> permissionSyncPackages) { mAssociationId = associationId; mPermissionSyncAllPackages = syncAllPackages; mPermissionSyncPackages = permissionSyncPackages; Loading @@ -61,6 +76,37 @@ public final class SystemDataTransferRequest implements Parcelable { return mPermissionSyncPackages; } /* @hide */ public int getUserId() { return mUserId; } /* @hide */ public boolean isUserConsented() { return mUserConsented; } /* @hide */ public void setUserId(@UserIdInt int userId) { mUserId = userId; } /* @hide */ public void setUserConsented(boolean isUserConsented) { mUserConsented = isUserConsented; } /* @hide */ @Override public String toString() { return "SystemDataTransferRequest(" + "associationId=" + mAssociationId + ", isPermissionSyncAllPackages=" + mPermissionSyncAllPackages + ", permissionSyncPackages=[" + String.join(",", mPermissionSyncPackages) + "]" + ", isUserConsented=" + mUserConsented + ")"; } /** * A builder for {@link SystemDataTransferRequest}. * Loading Loading @@ -90,9 +136,8 @@ public final class SystemDataTransferRequest implements Parcelable { * <p>If a system or policy granted or revoked permission is granted or revoked by the user * later, the permission will be ignored.</p> * * @see #setPermissionSyncPackages(List) * * @return the builder * @see #setPermissionSyncPackages(List) */ @NonNull public Builder setPermissionSyncAllPackages() { Loading @@ -104,10 +149,9 @@ public final class SystemDataTransferRequest implements Parcelable { * Set a list of packages to sync permissions. You can optionally call * {@link #setPermissionSyncAllPackages()} to sync permissions for all the packages. * * @see #setPermissionSyncAllPackages() * * @param permissionSyncPackages packages to sync permissions * @return builder * @see #setPermissionSyncAllPackages() */ @NonNull public Builder setPermissionSyncPackages(@NonNull List<String> permissionSyncPackages) { Loading @@ -127,6 +171,8 @@ public final class SystemDataTransferRequest implements Parcelable { mAssociationId = in.readInt(); mPermissionSyncAllPackages = in.readBoolean(); mPermissionSyncPackages = Arrays.asList(in.createString8Array()); mUserId = in.readInt(); mUserConsented = in.readBoolean(); } @Override Loading @@ -134,6 +180,8 @@ public final class SystemDataTransferRequest implements Parcelable { dest.writeInt(mAssociationId); dest.writeBoolean(mPermissionSyncAllPackages); dest.writeString8Array(mPermissionSyncPackages.toArray(new String[0])); dest.writeInt(mUserId); dest.writeBoolean(mUserConsented); } @Override Loading @@ -141,6 +189,18 @@ public final class SystemDataTransferRequest implements Parcelable { return 0; } /** * Check if two requests have the same data type. */ public boolean hasSameDataType(SystemDataTransferRequest request) { // Check if they are permission sync requests. if (this.isPermissionSyncAllPackages() || !this.getPermissionSyncPackages().isEmpty()) { return request.isPermissionSyncAllPackages() || !request.getPermissionSyncPackages() .isEmpty(); } return false; } @NonNull public static final Creator<SystemDataTransferRequest> CREATOR = new Creator<SystemDataTransferRequest>() { Loading
services/companion/java/com/android/server/companion/AssociationRequestsProcessor.java +1 −17 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import static com.android.server.companion.CompanionDeviceManagerService.DEBUG; import static com.android.server.companion.PackageUtils.enforceUsesCompanionDeviceFeature; import static com.android.server.companion.PermissionsUtils.enforcePermissionsForAssociation; import static com.android.server.companion.RolesUtils.isRoleHolder; import static com.android.server.companion.Utils.prepareForIpc; import static java.util.Objects.requireNonNull; Loading @@ -47,7 +48,6 @@ import android.net.MacAddress; import android.os.Binder; import android.os.Bundle; import android.os.Handler; import android.os.Parcel; import android.os.RemoteException; import android.os.ResultReceiver; import android.util.PackageUtils; Loading Loading @@ -397,20 +397,4 @@ class AssociationRequestsProcessor { return sameOemPackageCerts; } /** * Convert an instance of a "locally-defined" ResultReceiver to an instance of * {@link android.os.ResultReceiver} itself, which the receiving process will be able to * unmarshall. */ private static <T extends ResultReceiver> ResultReceiver prepareForIpc(T resultReceiver) { final Parcel parcel = Parcel.obtain(); resultReceiver.writeToParcel(parcel, 0); parcel.setDataPosition(0); final ResultReceiver ipcFriendly = ResultReceiver.CREATOR.createFromParcel(parcel); parcel.recycle(); return ipcFriendly; } }
services/companion/java/com/android/server/companion/AssociationStoreImpl.java +1 −1 Original line number Diff line number Diff line Loading @@ -54,7 +54,7 @@ import java.util.StringJoiner; * should use public {@link AssociationStore} interface. */ @SuppressLint("LongLogTag") class AssociationStoreImpl implements AssociationStore { public class AssociationStoreImpl implements AssociationStore { private static final boolean DEBUG = false; private static final String TAG = "CompanionDevice_AssociationStore"; Loading
services/companion/java/com/android/server/companion/DataStoreUtils.java +14 −5 Original line number Diff line number Diff line Loading @@ -33,15 +33,24 @@ import org.xmlpull.v1.XmlPullParserException; import java.io.File; import java.io.FileOutputStream; final class DataStoreUtils { /** * Util class for CDM data stores */ public final class DataStoreUtils { private static final String TAG = "CompanionDevice_DataStoreUtils"; static boolean isStartOfTag(@NonNull XmlPullParser parser, @NonNull String tag) /** * Check if the parser pointer is at the start of the tag */ public static boolean isStartOfTag(@NonNull XmlPullParser parser, @NonNull String tag) throws XmlPullParserException { return parser.getEventType() == START_TAG && tag.equals(parser.getName()); } static boolean isEndOfTag(@NonNull XmlPullParser parser, @NonNull String tag) /** * Check if the parser pointer is at the end of the tag */ public static boolean isEndOfTag(@NonNull XmlPullParser parser, @NonNull String tag) throws XmlPullParserException { return parser.getEventType() == END_TAG && tag.equals(parser.getName()); } Loading @@ -57,7 +66,7 @@ final class DataStoreUtils { * @return an AtomicFile for the user */ @NonNull static AtomicFile createStorageFileForUser(@UserIdInt int userId, String fileName) { public static AtomicFile createStorageFileForUser(@UserIdInt int userId, String fileName) { return new AtomicFile(getBaseStorageFileForUser(userId, fileName)); } Loading @@ -70,7 +79,7 @@ final class DataStoreUtils { * Writing to file could fail, for example, if the user has been recently removed and so was * their DE (/data/system_de/<user-id>/) directory. */ static void writeToFileSafely( public static void writeToFileSafely( @NonNull AtomicFile file, @NonNull ThrowingConsumer<FileOutputStream> consumer) { try { file.write(consumer); Loading
services/companion/java/com/android/server/companion/PersistentDataStore.java +1 −1 Original line number Diff line number Diff line Loading @@ -101,7 +101,7 @@ import java.util.concurrent.ConcurrentMap; * Since Android T the data is stored to "companion_device_manager.xml" file in * {@link Environment#getDataSystemDeDirectory(int) /data/system_de/}. * * See {@link #getBaseStorageFileForUser(int) getBaseStorageFileForUser()} * See {@link #getStorageFileForUser(int)} * * <p> * Since Android T the data is stored using the v1 schema. Loading