diff options
| author | 2024-01-03 08:17:24 +0000 | |
|---|---|---|
| committer | 2024-01-03 08:17:24 +0000 | |
| commit | 85f17a23c9330dbd83fd37c97780d020e07c0059 (patch) | |
| tree | 70b2b021e7cab18071d4df2a1e270d2a2bbd3710 | |
| parent | 168fb739c4a9f1920d8ab8e163aa3acdb778895d (diff) | |
| parent | bba7b3fb7efb342c28ae76ece9f6cc9353aabaa0 (diff) | |
Merge "Introduce ActivityWindowInfo" into main
| -rw-r--r-- | core/java/android/window/ActivityWindowInfo.aidl | 23 | ||||
| -rw-r--r-- | core/java/android/window/ActivityWindowInfo.java | 147 | ||||
| -rw-r--r-- | core/java/android/window/flags/windowing_sdk.aconfig | 8 |
3 files changed, 178 insertions, 0 deletions
diff --git a/core/java/android/window/ActivityWindowInfo.aidl b/core/java/android/window/ActivityWindowInfo.aidl new file mode 100644 index 000000000000..d0526bc68fd4 --- /dev/null +++ b/core/java/android/window/ActivityWindowInfo.aidl @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.window; + +/** + * Stores information about a particular Activity Window. + * @hide + */ +parcelable ActivityWindowInfo; diff --git a/core/java/android/window/ActivityWindowInfo.java b/core/java/android/window/ActivityWindowInfo.java new file mode 100644 index 000000000000..946bb823398c --- /dev/null +++ b/core/java/android/window/ActivityWindowInfo.java @@ -0,0 +1,147 @@ +/* + * Copyright (C) 2024 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package android.window; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.graphics.Rect; +import android.os.Parcel; +import android.os.Parcelable; + +/** + * Stores the window information about a particular Activity. + * It contains the info that is not part of {@link android.content.res.Configuration}. + * @hide + */ +public final class ActivityWindowInfo implements Parcelable { + + private boolean mIsEmbedded; + + @NonNull + private final Rect mTaskBounds = new Rect(); + + @NonNull + private final Rect mTaskFragmentBounds = new Rect(); + + public ActivityWindowInfo() {} + + public ActivityWindowInfo(@NonNull ActivityWindowInfo info) { + set(info); + } + + /** Copies fields from {@code info}. */ + public void set(@NonNull ActivityWindowInfo info) { + set(info.mIsEmbedded, info.mTaskBounds, info.mTaskFragmentBounds); + } + + /** Sets to the given values. */ + public void set(boolean isEmbedded, @NonNull Rect taskBounds, + @NonNull Rect taskFragmentBounds) { + mIsEmbedded = isEmbedded; + mTaskBounds.set(taskBounds); + mTaskFragmentBounds.set(taskFragmentBounds); + } + + /** + * Whether this activity is embedded, which means it is a TaskFragment that doesn't fill the + * leaf Task. + */ + public boolean isEmbedded() { + return mIsEmbedded; + } + + /** + * The bounds of the leaf Task window in display space. + */ + @NonNull + public Rect getTaskBounds() { + return mTaskBounds; + } + + /** + * The bounds of the leaf TaskFragment window in display space. + * This can be referring to the bounds of the same window as {@link #getTaskBounds()} when + * the activity is not embedded. + */ + @NonNull + public Rect getTaskFragmentBounds() { + return mTaskFragmentBounds; + } + + private ActivityWindowInfo(@NonNull Parcel in) { + mIsEmbedded = in.readBoolean(); + mTaskBounds.readFromParcel(in); + mTaskFragmentBounds.readFromParcel(in); + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + dest.writeBoolean(mIsEmbedded); + mTaskBounds.writeToParcel(dest, flags); + mTaskFragmentBounds.writeToParcel(dest, flags); + } + + @NonNull + public static final Creator<ActivityWindowInfo> CREATOR = + new Creator<>() { + @Override + public ActivityWindowInfo createFromParcel(@NonNull Parcel in) { + return new ActivityWindowInfo(in); + } + + @Override + public ActivityWindowInfo[] newArray(int size) { + return new ActivityWindowInfo[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public boolean equals(@Nullable Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + final ActivityWindowInfo other = (ActivityWindowInfo) o; + return mIsEmbedded == other.mIsEmbedded + && mTaskBounds.equals(other.mTaskBounds) + && mTaskFragmentBounds.equals(other.mTaskFragmentBounds); + } + + @Override + public int hashCode() { + int result = 17; + result = 31 * result + (mIsEmbedded ? 1 : 0); + result = 31 * result + mTaskBounds.hashCode(); + result = 31 * result + mTaskFragmentBounds.hashCode(); + return result; + } + + @Override + public String toString() { + return "ActivityWindowInfo{isEmbedded=" + mIsEmbedded + + ", taskBounds=" + mTaskBounds + + ", taskFragmentBounds=" + mTaskFragmentBounds + + "}"; + } +} diff --git a/core/java/android/window/flags/windowing_sdk.aconfig b/core/java/android/window/flags/windowing_sdk.aconfig index 59d7b0e55e85..f743ab74d1f5 100644 --- a/core/java/android/window/flags/windowing_sdk.aconfig +++ b/core/java/android/window/flags/windowing_sdk.aconfig @@ -38,4 +38,12 @@ flag { name: "activity_embedding_interactive_divider_flag" description: "Whether the interactive divider feature is enabled" bug: "293654166" +} + +flag { + namespace: "windowing_sdk" + name: "activity_window_info_flag" + description: "To dispatch ActivityWindowInfo through ClientTransaction" + bug: "287582673" + is_fixed_read_only: true }
\ No newline at end of file |