1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package androidx.window.extensions.embedding; 18 19 import android.os.IBinder; 20 import android.os.Parcel; 21 import android.os.Parcelable; 22 23 import androidx.annotation.NonNull; 24 import androidx.annotation.Nullable; 25 26 /** 27 * This class holds the Parcelable data of a {@link SplitContainer}. 28 */ 29 class ParcelableSplitContainerData implements Parcelable { 30 31 /** 32 * A reference to the target {@link SplitContainer} that owns the data. This will not be 33 * parcelled and will be {@code null} when the data is created from a parcel. 34 */ 35 @Nullable 36 final SplitContainer mSplitContainer; 37 38 @NonNull 39 final IBinder mToken; 40 41 @NonNull 42 private final IBinder mPrimaryContainerToken; 43 44 @NonNull 45 private final IBinder mSecondaryContainerToken; 46 47 @Nullable 48 final String mSplitRuleTag; 49 50 /** 51 * Whether the selection of which container is primary can be changed at runtime. Runtime 52 * updates is currently possible only for {@link SplitPinContainer} 53 * 54 * @see SplitPinContainer 55 */ 56 final boolean mIsPrimaryContainerMutable; 57 ParcelableSplitContainerData(@onNull SplitContainer splitContainer, @NonNull IBinder token, @NonNull IBinder primaryContainerToken, @NonNull IBinder secondaryContainerToken, @Nullable String splitRuleTag, boolean isPrimaryContainerMutable)58 ParcelableSplitContainerData(@NonNull SplitContainer splitContainer, @NonNull IBinder token, 59 @NonNull IBinder primaryContainerToken, @NonNull IBinder secondaryContainerToken, 60 @Nullable String splitRuleTag, boolean isPrimaryContainerMutable) { 61 mSplitContainer = splitContainer; 62 mToken = token; 63 mPrimaryContainerToken = primaryContainerToken; 64 mSecondaryContainerToken = secondaryContainerToken; 65 mSplitRuleTag = splitRuleTag; 66 mIsPrimaryContainerMutable = isPrimaryContainerMutable; 67 } 68 ParcelableSplitContainerData(Parcel in)69 private ParcelableSplitContainerData(Parcel in) { 70 mSplitContainer = null; 71 mToken = in.readStrongBinder(); 72 mPrimaryContainerToken = in.readStrongBinder(); 73 mSecondaryContainerToken = in.readStrongBinder(); 74 mSplitRuleTag = in.readString(); 75 mIsPrimaryContainerMutable = in.readBoolean(); 76 } 77 78 public static final Creator<ParcelableSplitContainerData> CREATOR = new Creator<>() { 79 @Override 80 public ParcelableSplitContainerData createFromParcel(Parcel in) { 81 return new ParcelableSplitContainerData(in); 82 } 83 84 @Override 85 public ParcelableSplitContainerData[] newArray(int size) { 86 return new ParcelableSplitContainerData[size]; 87 } 88 }; 89 90 @NonNull getPrimaryContainerToken()91 IBinder getPrimaryContainerToken() { 92 return mSplitContainer != null ? mSplitContainer.getPrimaryContainer().getToken() 93 : mPrimaryContainerToken; 94 } 95 96 @NonNull getSecondaryContainerToken()97 IBinder getSecondaryContainerToken() { 98 return mSplitContainer != null ? mSplitContainer.getSecondaryContainer().getToken() 99 : mSecondaryContainerToken; 100 } 101 102 @Override describeContents()103 public int describeContents() { 104 return 0; 105 } 106 107 @Override writeToParcel(Parcel dest, int flags)108 public void writeToParcel(Parcel dest, int flags) { 109 dest.writeStrongBinder(mToken); 110 dest.writeStrongBinder(getPrimaryContainerToken()); 111 dest.writeStrongBinder(getSecondaryContainerToken()); 112 dest.writeString(mSplitRuleTag); 113 dest.writeBoolean(mIsPrimaryContainerMutable); 114 } 115 } 116