summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Diego Vela <diegovela@google.com> 2024-08-14 22:06:30 +0000
committer Diego Vela <diegovela@google.com> 2024-08-16 15:00:38 +0000
commitf142529167e76f2153fb779ea87def2defe514d8 (patch)
treeca080a44567d6cda6187d27d9e55dfbd3b037e9d
parentc09faee95fb50bf95dbc5bf3c70f06741afbb51e (diff)
Merge SampleSidecarImpl and StubSidecar.
Merge SampleSidecarImpl and StubSidecar. We do not plan on developing Sidecar further and having one class will make it easier to unify with extensions. Flag: EXEMPT bugfix Bug: 347964255 Test: atest CtsWindowManagerJetpackTestCases:SidecarTest Change-Id: I2bdf9f77aace7d8ce581da4b8f6d30eebe4cf390
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarImpl.java (renamed from libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java)103
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarProvider.java2
-rw-r--r--libs/WindowManager/Jetpack/src/androidx/window/sidecar/StubSidecar.java96
3 files changed, 85 insertions, 116 deletions
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarImpl.java
index 60bc7bedf2ed..a1de2062e906 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SampleSidecarImpl.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarImpl.java
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2020 The Android Open Source Project
+ * 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.
@@ -16,6 +16,7 @@
package androidx.window.sidecar;
+import android.annotation.NonNull;
import android.annotation.Nullable;
import android.app.Activity;
import android.app.Application;
@@ -23,8 +24,9 @@ import android.content.Context;
import android.hardware.devicestate.DeviceStateManager;
import android.os.Bundle;
import android.os.IBinder;
+import android.util.ArraySet;
+import android.util.Log;
-import androidx.annotation.NonNull;
import androidx.window.common.BaseDataProducer;
import androidx.window.common.DeviceStateManagerFoldingFeatureProducer;
import androidx.window.common.EmptyLifecycleCallbacksAdapter;
@@ -33,17 +35,27 @@ import androidx.window.common.layout.CommonFoldingFeature;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
+import java.util.Set;
/**
- * Reference implementation of androidx.window.sidecar OEM interface for use with
- * WindowManager Jetpack.
+ * Basic implementation of the {@link SidecarInterface}. An OEM can choose to use it as the base
+ * class for their implementation.
*/
-class SampleSidecarImpl extends StubSidecar {
+class SidecarImpl implements SidecarInterface {
+
+ private static final String TAG = "WindowManagerSidecar";
+
+ @Nullable
+ private SidecarCallback mSidecarCallback;
+ private final ArraySet<IBinder> mWindowLayoutChangeListenerTokens = new ArraySet<>();
+ private boolean mDeviceStateChangeListenerRegistered;
+ @NonNull
private List<CommonFoldingFeature> mStoredFeatures = new ArrayList<>();
- SampleSidecarImpl(Context context) {
+ SidecarImpl(Context context) {
((Application) context.getApplicationContext())
- .registerActivityLifecycleCallbacks(new NotifyOnConfigurationChanged());
+ .registerActivityLifecycleCallbacks(new SidecarImpl.NotifyOnConfigurationChanged());
RawFoldingFeatureProducer settingsFeatureProducer = new RawFoldingFeatureProducer(context);
BaseDataProducer<List<CommonFoldingFeature>> foldingFeatureProducer =
new DeviceStateManagerFoldingFeatureProducer(context,
@@ -53,11 +65,46 @@ class SampleSidecarImpl extends StubSidecar {
foldingFeatureProducer.addDataChangedCallback(this::onDisplayFeaturesChanged);
}
- private void setStoredFeatures(List<CommonFoldingFeature> storedFeatures) {
- mStoredFeatures = storedFeatures;
+ @NonNull
+ @Override
+ public SidecarDeviceState getDeviceState() {
+ return SidecarHelper.calculateDeviceState(mStoredFeatures);
+ }
+
+ @NonNull
+ @Override
+ public SidecarWindowLayoutInfo getWindowLayoutInfo(@NonNull IBinder windowToken) {
+ return SidecarHelper.calculateWindowLayoutInfo(windowToken, mStoredFeatures);
+ }
+
+ @Override
+ public void setSidecarCallback(@NonNull SidecarCallback sidecarCallback) {
+ mSidecarCallback = sidecarCallback;
+ }
+
+ @Override
+ public void onWindowLayoutChangeListenerAdded(@NonNull IBinder iBinder) {
+ mWindowLayoutChangeListenerTokens.add(iBinder);
+ onListenersChanged();
+ }
+
+ @Override
+ public void onWindowLayoutChangeListenerRemoved(@NonNull IBinder iBinder) {
+ mWindowLayoutChangeListenerTokens.remove(iBinder);
+ onListenersChanged();
+ }
+
+ @Override
+ public void onDeviceStateListenersChanged(boolean isEmpty) {
+ mDeviceStateChangeListenerRegistered = !isEmpty;
+ onListenersChanged();
+ }
+
+ private void setStoredFeatures(@NonNull List<CommonFoldingFeature> storedFeatures) {
+ mStoredFeatures = Objects.requireNonNull(storedFeatures);
}
- private void onDisplayFeaturesChanged(List<CommonFoldingFeature> storedFeatures) {
+ private void onDisplayFeaturesChanged(@NonNull List<CommonFoldingFeature> storedFeatures) {
setStoredFeatures(storedFeatures);
updateDeviceState(getDeviceState());
for (IBinder windowToken : getWindowsListeningForLayoutChanges()) {
@@ -66,25 +113,43 @@ class SampleSidecarImpl extends StubSidecar {
}
}
- @NonNull
- @Override
- public SidecarDeviceState getDeviceState() {
- return SidecarHelper.calculateDeviceState(mStoredFeatures);
+ void updateDeviceState(@NonNull SidecarDeviceState newState) {
+ if (mSidecarCallback != null) {
+ try {
+ mSidecarCallback.onDeviceStateChanged(newState);
+ } catch (AbstractMethodError e) {
+ Log.e(TAG, "App is using an outdated Window Jetpack library", e);
+ }
+ }
+ }
+
+ void updateWindowLayout(@NonNull IBinder windowToken,
+ @NonNull SidecarWindowLayoutInfo newLayout) {
+ if (mSidecarCallback != null) {
+ try {
+ mSidecarCallback.onWindowLayoutChanged(windowToken, newLayout);
+ } catch (AbstractMethodError e) {
+ Log.e(TAG, "App is using an outdated Window Jetpack library", e);
+ }
+ }
}
@NonNull
- @Override
- public SidecarWindowLayoutInfo getWindowLayoutInfo(@NonNull IBinder windowToken) {
- return SidecarHelper.calculateWindowLayoutInfo(windowToken, mStoredFeatures);
+ private Set<IBinder> getWindowsListeningForLayoutChanges() {
+ return mWindowLayoutChangeListenerTokens;
}
- @Override
- protected void onListenersChanged() {
+ protected boolean hasListeners() {
+ return !mWindowLayoutChangeListenerTokens.isEmpty() || mDeviceStateChangeListenerRegistered;
+ }
+
+ private void onListenersChanged() {
if (hasListeners()) {
onDisplayFeaturesChanged(mStoredFeatures);
}
}
+
private final class NotifyOnConfigurationChanged extends EmptyLifecycleCallbacksAdapter {
@Override
public void onActivityCreated(@NonNull Activity activity,
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarProvider.java b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarProvider.java
index 686a31b6be04..1e306fcebda0 100644
--- a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarProvider.java
+++ b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/SidecarProvider.java
@@ -36,7 +36,7 @@ public class SidecarProvider {
@Nullable
public static SidecarInterface getSidecarImpl(Context context) {
return isWindowExtensionsEnabled()
- ? new SampleSidecarImpl(context.getApplicationContext())
+ ? new SidecarImpl(context.getApplicationContext())
: null;
}
diff --git a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/StubSidecar.java b/libs/WindowManager/Jetpack/src/androidx/window/sidecar/StubSidecar.java
deleted file mode 100644
index 46c1f3ba4691..000000000000
--- a/libs/WindowManager/Jetpack/src/androidx/window/sidecar/StubSidecar.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Copyright (C) 2020 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 androidx.window.sidecar;
-
-import android.os.IBinder;
-import android.util.Log;
-
-import androidx.annotation.NonNull;
-
-import java.util.HashSet;
-import java.util.Set;
-
-/**
- * Basic implementation of the {@link SidecarInterface}. An OEM can choose to use it as the base
- * class for their implementation.
- */
-abstract class StubSidecar implements SidecarInterface {
-
- private static final String TAG = "WindowManagerSidecar";
-
- private SidecarCallback mSidecarCallback;
- final Set<IBinder> mWindowLayoutChangeListenerTokens = new HashSet<>();
- private boolean mDeviceStateChangeListenerRegistered;
-
- StubSidecar() {
- }
-
- @Override
- public void setSidecarCallback(@NonNull SidecarCallback sidecarCallback) {
- this.mSidecarCallback = sidecarCallback;
- }
-
- @Override
- public void onWindowLayoutChangeListenerAdded(@NonNull IBinder iBinder) {
- this.mWindowLayoutChangeListenerTokens.add(iBinder);
- this.onListenersChanged();
- }
-
- @Override
- public void onWindowLayoutChangeListenerRemoved(@NonNull IBinder iBinder) {
- this.mWindowLayoutChangeListenerTokens.remove(iBinder);
- this.onListenersChanged();
- }
-
- @Override
- public void onDeviceStateListenersChanged(boolean isEmpty) {
- this.mDeviceStateChangeListenerRegistered = !isEmpty;
- this.onListenersChanged();
- }
-
- void updateDeviceState(SidecarDeviceState newState) {
- if (this.mSidecarCallback != null) {
- try {
- mSidecarCallback.onDeviceStateChanged(newState);
- } catch (AbstractMethodError e) {
- Log.e(TAG, "App is using an outdated Window Jetpack library", e);
- }
- }
- }
-
- void updateWindowLayout(@NonNull IBinder windowToken,
- @NonNull SidecarWindowLayoutInfo newLayout) {
- if (this.mSidecarCallback != null) {
- try {
- mSidecarCallback.onWindowLayoutChanged(windowToken, newLayout);
- } catch (AbstractMethodError e) {
- Log.e(TAG, "App is using an outdated Window Jetpack library", e);
- }
- }
- }
-
- @NonNull
- Set<IBinder> getWindowsListeningForLayoutChanges() {
- return mWindowLayoutChangeListenerTokens;
- }
-
- protected boolean hasListeners() {
- return !mWindowLayoutChangeListenerTokens.isEmpty() || mDeviceStateChangeListenerRegistered;
- }
-
- protected abstract void onListenersChanged();
-}