1d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk/*
2d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk * Copyright (C) 2017 The Android Open Source Project
3d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk *
4d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
5d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk * except in compliance with the License. You may obtain a copy of the License at
6d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk *
7d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk *      http://www.apache.org/licenses/LICENSE-2.0
8d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk *
9d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk * Unless required by applicable law or agreed to in writing, software distributed under the
10d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
11d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk * KIND, either express or implied. See the License for the specific language governing
12d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk * permissions and limitations under the License.
13d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk */
14d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
15d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkpackage com.android.systemui.tuner;
16d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
17d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport static org.mockito.ArgumentMatchers.any;
18d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport static org.mockito.ArgumentMatchers.eq;
19d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport static org.mockito.Mockito.doAnswer;
20d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport static org.mockito.Mockito.mock;
21d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport static org.mockito.Mockito.verify;
22d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport static org.mockito.Mockito.when;
23d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport static org.mockito.Mockito.withSettings;
24d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
25fba8faf5c5f58f115fa3c099da9ef0953b484147Jason Monkimport android.support.test.filters.SmallTest;
26d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport android.testing.LeakCheck.Tracker;
27d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport android.util.DisplayMetrics;
28d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport android.view.View;
29d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport android.view.WindowManager;
30d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
31d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport com.android.systemui.utils.leaks.LeakCheckedTest;
32d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
33d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport org.junit.Before;
34d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkimport org.junit.Test;
35d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
36fba8faf5c5f58f115fa3c099da9ef0953b484147Jason Monk@SmallTest
37d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monkpublic class TunablePaddingTest extends LeakCheckedTest {
38d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
39d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    private static final String KEY = "KEY";
40d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    private static final int DEFAULT = 42;
41d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    private View mView;
42d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    private TunablePadding mTunablePadding;
43d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    private TunerService mTunerService;
44d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
45d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    @Before
46d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    public void setup() {
47d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        injectLeakCheckedDependencies(ALL_SUPPORTED_CLASSES);
481fc931a38a9335b3b4b498c7cc31d37a777c7a5aJason Monk        mView = mock(View.class);
491fc931a38a9335b3b4b498c7cc31d37a777c7a5aJason Monk        when(mView.getContext()).thenReturn(mContext);
50d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
51d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunerService = mDependency.injectMockDependency(TunerService.class);
52d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        Tracker tracker = mLeakCheck.getTracker("tuner");
53d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        doAnswer(invocation -> {
54d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk            tracker.getLeakInfo(invocation.getArguments()[0]).addAllocation(new Throwable());
55d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk            return null;
56d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        }).when(mTunerService).addTunable(any(), any());
57d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        doAnswer(invocation -> {
58d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk            tracker.getLeakInfo(invocation.getArguments()[0]).clearAllocations();
59d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk            return null;
60d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        }).when(mTunerService).removeTunable(any());
61d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    }
62d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
63d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    @Test
64d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    public void testFlags() {
65d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding = TunablePadding.addTunablePadding(mView, KEY, DEFAULT,
66d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk                TunablePadding.FLAG_START);
67d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.onTuningChanged(null, null);
68d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        verify(mView).setPadding(eq(DEFAULT), eq(0), eq(0), eq(0));
69d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.destroy();
70d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
71d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding = TunablePadding.addTunablePadding(mView, KEY, DEFAULT,
72d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk                TunablePadding.FLAG_TOP);
73d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.onTuningChanged(null, null);
74d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        verify(mView).setPadding(eq(0), eq(DEFAULT), eq(0), eq(0));
75d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.destroy();
76d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
77d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding = TunablePadding.addTunablePadding(mView, KEY, DEFAULT,
78d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk                TunablePadding.FLAG_END);
79d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.onTuningChanged(null, null);
80d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        verify(mView).setPadding(eq(0), eq(0), eq(DEFAULT), eq(0));
81d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.destroy();
82d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
83d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding = TunablePadding.addTunablePadding(mView, KEY, DEFAULT,
84d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk                TunablePadding.FLAG_BOTTOM);
85d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.onTuningChanged(null, null);
86d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        verify(mView).setPadding(eq(0), eq(0), eq(0), eq(DEFAULT));
87d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.destroy();
88d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    }
89d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
90d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    @Test
91d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    public void testRtl() {
92d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        when(mView.isLayoutRtl()).thenReturn(true);
93d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
94d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding = TunablePadding.addTunablePadding(mView, KEY, DEFAULT,
95d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk                TunablePadding.FLAG_END);
96d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.onTuningChanged(null, null);
97d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        verify(mView).setPadding(eq(DEFAULT), eq(0), eq(0), eq(0));
98d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.destroy();
99d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
100d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding = TunablePadding.addTunablePadding(mView, KEY, DEFAULT,
101d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk                TunablePadding.FLAG_START);
102d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.onTuningChanged(null, null);
103d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        verify(mView).setPadding(eq(0), eq(0), eq(DEFAULT), eq(0));
104d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.destroy();
105d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    }
106d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
107d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    @Test
108d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    public void testTuning() {
109d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        int value = 3;
110d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding = TunablePadding.addTunablePadding(mView, KEY, DEFAULT,
111d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk                TunablePadding.FLAG_START);
112d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.onTuningChanged(KEY, String.valueOf(value));
113d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
114d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        DisplayMetrics metrics = new DisplayMetrics();
115d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mContext.getSystemService(WindowManager.class).getDefaultDisplay().getMetrics(metrics);
116d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        int output = (int) (metrics.density * value);
117d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        verify(mView).setPadding(eq(output), eq(0), eq(0), eq(0));
118d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk
119d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk        mTunablePadding.destroy();
120d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk    }
121d4afe152bf5cd93e5034f5b8b43b2f0fe0269a7fJason Monk}