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