• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 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 
17 package com.android.settings.applications;
18 
19 import android.content.Context;
20 
21 import com.android.internal.logging.nano.MetricsProto;
22 import com.android.settings.SettingsRobolectricTestRunner;
23 import com.android.settings.TestConfig;
24 import com.android.settings.testutils.FakeFeatureFactory;
25 
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.Answers;
30 import org.mockito.Mock;
31 import org.mockito.MockitoAnnotations;
32 import org.robolectric.annotation.Config;
33 import org.robolectric.util.ReflectionHelpers;
34 
35 import static com.google.common.truth.Truth.assertThat;
36 import static org.mockito.Matchers.any;
37 import static org.mockito.Matchers.eq;
38 import static org.mockito.Mockito.verify;
39 
40 @RunWith(SettingsRobolectricTestRunner.class)
41 @Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
42 public class PictureInPictureDetailsTest {
43 
44     @Mock(answer = Answers.RETURNS_DEEP_STUBS)
45     private Context mContext;
46 
47     private FakeFeatureFactory mFeatureFactory;
48     private PictureInPictureDetails mFragment;
49 
50     @Before
setUp()51     public void setUp() {
52         MockitoAnnotations.initMocks(this);
53         FakeFeatureFactory.setupForTest(mContext);
54         mFeatureFactory = (FakeFeatureFactory) FakeFeatureFactory.getFactory(mContext);
55         mFragment = new PictureInPictureDetails();
56     }
57 
58     @Test
testIgnoredApp()59     public void testIgnoredApp() {
60         for (String ignoredPackage : PictureInPictureSettings.IGNORE_PACKAGE_LIST) {
61             assertThat(checkPackageHasPictureInPictureActivities(ignoredPackage, true))
62                             .isFalse();
63         }
64     }
65 
66     @Test
testNonPippableApp()67     public void testNonPippableApp() {
68         assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage")).isFalse();
69         assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
70                 false, false, false)).isFalse();
71     }
72 
73     @Test
testPippableApp()74     public void testPippableApp() {
75         assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
76                 true)).isTrue();
77         assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
78                 false, true)).isTrue();
79         assertThat(checkPackageHasPictureInPictureActivities("com.android.dummypackage",
80                 true, false)).isTrue();
81     }
82 
83     @Test
logSpecialPermissionChange()84     public void logSpecialPermissionChange() {
85         mFragment.logSpecialPermissionChange(true, "app");
86         verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
87                 eq(MetricsProto.MetricsEvent.APP_PICTURE_IN_PICTURE_ALLOW), eq("app"));
88 
89         mFragment.logSpecialPermissionChange(false, "app");
90         verify(mFeatureFactory.metricsFeatureProvider).action(any(Context.class),
91                 eq(MetricsProto.MetricsEvent.APP_PICTURE_IN_PICTURE_DENY), eq("app"));
92     }
93 
checkPackageHasPictureInPictureActivities(String packageName, boolean... resizeableActivityState)94     private boolean checkPackageHasPictureInPictureActivities(String packageName,
95             boolean... resizeableActivityState) {
96         ActivityInfoWrapper[] activities = null;
97         if (resizeableActivityState.length > 0) {
98             activities = new ActivityInfoWrapper[resizeableActivityState.length];
99             for (int i = 0; i < activities.length; i++) {
100                 activities[i] = new MockActivityInfo(resizeableActivityState[i]);
101             }
102         }
103         return PictureInPictureSettings.checkPackageHasPictureInPictureActivities(packageName,
104                 activities);
105     }
106 
107     private class MockActivityInfo implements ActivityInfoWrapper {
108 
109         private boolean mSupportsPictureInPicture;
110 
MockActivityInfo(boolean supportsPictureInPicture)111         public MockActivityInfo(boolean supportsPictureInPicture) {
112             mSupportsPictureInPicture = supportsPictureInPicture;
113         }
114 
115         @Override
supportsPictureInPicture()116         public boolean supportsPictureInPicture() {
117             return mSupportsPictureInPicture;
118         }
119     }
120 }
121