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}