blob: 58a627bafa1619eaf347cb3b8c1b40051f610ae6 [file] [log] [blame]
/*
* Copyright (C) 2022 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.extensions.embedding;
import static android.app.WindowConfiguration.WINDOWING_MODE_UNDEFINED;
import static androidx.window.extensions.embedding.EmbeddingTestUtils.TASK_ID;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.spyOn;
import static com.android.dx.mockito.inline.extended.ExtendedMockito.verify;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Point;
import android.platform.test.annotations.Presubmit;
import android.window.TaskFragmentInfo;
import android.window.TaskFragmentTransaction;
import android.window.WindowContainerToken;
import android.window.WindowContainerTransaction;
import androidx.test.ext.junit.runners.AndroidJUnit4;
import androidx.test.filters.SmallTest;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import java.util.ArrayList;
/**
* Test class for {@link JetpackTaskFragmentOrganizer}.
*
* Build/Install/Run:
* atest WMJetpackUnitTests:JetpackTaskFragmentOrganizerTest
*/
// Suppress GuardedBy warning on unit tests
@SuppressWarnings("GuardedBy")
@Presubmit
@SmallTest
@RunWith(AndroidJUnit4.class)
public class JetpackTaskFragmentOrganizerTest {
@Mock
private WindowContainerTransaction mTransaction;
@Mock
private JetpackTaskFragmentOrganizer.TaskFragmentCallback mCallback;
private SplitController mSplitController;
private JetpackTaskFragmentOrganizer mOrganizer;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
mOrganizer = new JetpackTaskFragmentOrganizer(Runnable::run, mCallback);
mOrganizer.registerOrganizer();
mSplitController = new SplitController();
spyOn(mOrganizer);
spyOn(mSplitController);
}
@Test
public void testUnregisterOrganizer() {
mOrganizer.startOverrideSplitAnimation(TASK_ID);
mOrganizer.startOverrideSplitAnimation(TASK_ID + 1);
mOrganizer.unregisterOrganizer();
verify(mOrganizer).unregisterRemoteAnimations(TASK_ID);
verify(mOrganizer).unregisterRemoteAnimations(TASK_ID + 1);
}
@Test
public void testStartOverrideSplitAnimation() {
assertNull(mOrganizer.mAnimationController);
mOrganizer.startOverrideSplitAnimation(TASK_ID);
assertNotNull(mOrganizer.mAnimationController);
verify(mOrganizer).registerRemoteAnimations(TASK_ID,
mOrganizer.mAnimationController.mDefinition);
}
@Test
public void testStopOverrideSplitAnimation() {
mOrganizer.stopOverrideSplitAnimation(TASK_ID);
verify(mOrganizer, never()).unregisterRemoteAnimations(anyInt());
mOrganizer.startOverrideSplitAnimation(TASK_ID);
mOrganizer.stopOverrideSplitAnimation(TASK_ID);
verify(mOrganizer).unregisterRemoteAnimations(TASK_ID);
}
@Test
public void testExpandTaskFragment() {
final TaskContainer taskContainer = new TaskContainer(TASK_ID);
final TaskFragmentContainer container = new TaskFragmentContainer(null /* activity */,
new Intent(), taskContainer, mSplitController);
final TaskFragmentInfo info = createMockInfo(container);
mOrganizer.mFragmentInfos.put(container.getTaskFragmentToken(), info);
container.setInfo(mTransaction, info);
mOrganizer.expandTaskFragment(mTransaction, container.getTaskFragmentToken());
verify(mTransaction).setWindowingMode(container.getInfo().getToken(),
WINDOWING_MODE_UNDEFINED);
}
@Test
public void testOnTransactionReady() {
final TaskFragmentTransaction transaction = new TaskFragmentTransaction();
mOrganizer.onTransactionReady(transaction);
verify(mCallback).onTransactionReady(transaction);
}
private TaskFragmentInfo createMockInfo(TaskFragmentContainer container) {
return new TaskFragmentInfo(container.getTaskFragmentToken(),
mock(WindowContainerToken.class), new Configuration(), 0 /* runningActivityCount */,
false /* isVisible */, new ArrayList<>(), new Point(),
false /* isTaskClearedForReuse */, false /* isTaskFragmentClearedForPip */,
new Point());
}
}