blob: 0d4e16bbb0f3a855b3998c9c592c78962bf706fe [file] [log] [blame]
Andrii Kulian446e8242017-10-26 15:17:29 -07001/*
2 * Copyright 2017 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
17package android.app.servertransaction;
18
19import static android.os.Trace.TRACE_TAG_ACTIVITY_MANAGER;
20import static android.view.Display.INVALID_DISPLAY;
21
Andrii Kulian88e05cb2017-12-05 17:21:10 -080022import android.app.ClientTransactionHandler;
Andrii Kulian446e8242017-10-26 15:17:29 -070023import android.content.res.Configuration;
24import android.os.IBinder;
25import android.os.Parcel;
26import android.os.Trace;
27
Andrii Kulian9c5ea9c2017-12-07 09:31:01 -080028import java.util.Objects;
29
Andrii Kulian446e8242017-10-26 15:17:29 -070030/**
31 * Activity configuration changed callback.
32 * @hide
33 */
34public class ActivityConfigurationChangeItem extends ClientTransactionItem {
35
Andrii Kulian9c5ea9c2017-12-07 09:31:01 -080036 private Configuration mConfiguration;
Andrii Kulian446e8242017-10-26 15:17:29 -070037
38 @Override
Garfield Tan0443b372019-01-04 15:00:13 -080039 public void preExecute(android.app.ClientTransactionHandler client, IBinder token) {
40 client.updatePendingActivityConfiguration(token, mConfiguration);
41 }
42
43 @Override
Andrii Kulian88e05cb2017-12-05 17:21:10 -080044 public void execute(ClientTransactionHandler client, IBinder token,
45 PendingTransactionActions pendingActions) {
Andrii Kulian446e8242017-10-26 15:17:29 -070046 // TODO(lifecycler): detect if PIP or multi-window mode changed and report it here.
47 Trace.traceBegin(TRACE_TAG_ACTIVITY_MANAGER, "activityConfigChanged");
48 client.handleActivityConfigurationChanged(token, mConfiguration, INVALID_DISPLAY);
49 Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
50 }
51
52
Andrii Kulian9c5ea9c2017-12-07 09:31:01 -080053 // ObjectPoolItem implementation
54
55 private ActivityConfigurationChangeItem() {}
56
57 /** Obtain an instance initialized with provided params. */
58 public static ActivityConfigurationChangeItem obtain(Configuration config) {
59 ActivityConfigurationChangeItem instance =
60 ObjectPool.obtain(ActivityConfigurationChangeItem.class);
61 if (instance == null) {
62 instance = new ActivityConfigurationChangeItem();
63 }
64 instance.mConfiguration = config;
65
66 return instance;
67 }
68
69 @Override
70 public void recycle() {
71 mConfiguration = null;
72 ObjectPool.recycle(this);
73 }
74
75
Andrii Kulian446e8242017-10-26 15:17:29 -070076 // Parcelable implementation
77
78 /** Write to Parcel. */
79 @Override
80 public void writeToParcel(Parcel dest, int flags) {
81 dest.writeTypedObject(mConfiguration, flags);
82 }
83
84 /** Read from Parcel. */
85 private ActivityConfigurationChangeItem(Parcel in) {
86 mConfiguration = in.readTypedObject(Configuration.CREATOR);
87 }
88
Jeff Sharkey9e8f83d2019-02-28 12:06:45 -070089 public static final @android.annotation.NonNull Creator<ActivityConfigurationChangeItem> CREATOR =
Andrii Kulian446e8242017-10-26 15:17:29 -070090 new Creator<ActivityConfigurationChangeItem>() {
91 public ActivityConfigurationChangeItem createFromParcel(Parcel in) {
92 return new ActivityConfigurationChangeItem(in);
93 }
94
95 public ActivityConfigurationChangeItem[] newArray(int size) {
96 return new ActivityConfigurationChangeItem[size];
97 }
98 };
Andrii Kulian6b9d3a12017-11-16 14:36:36 -080099
100 @Override
101 public boolean equals(Object o) {
102 if (this == o) {
103 return true;
104 }
105 if (o == null || getClass() != o.getClass()) {
106 return false;
107 }
108 final ActivityConfigurationChangeItem other = (ActivityConfigurationChangeItem) o;
Andrii Kulian9c5ea9c2017-12-07 09:31:01 -0800109 return Objects.equals(mConfiguration, other.mConfiguration);
Andrii Kulian6b9d3a12017-11-16 14:36:36 -0800110 }
111
112 @Override
113 public int hashCode() {
114 return mConfiguration.hashCode();
115 }
Andrii Kulian88e05cb2017-12-05 17:21:10 -0800116
117 @Override
118 public String toString() {
119 return "ActivityConfigurationChange{config=" + mConfiguration + "}";
120 }
Andrii Kulian446e8242017-10-26 15:17:29 -0700121}