From 5e438a3ed360c3b3c8dd615cad4ce11849a997c5 Mon Sep 17 00:00:00 2001 From: utzcoz Date: Sat, 18 Jul 2020 23:08:44 +0800 Subject: [PATCH] Extract method to update layout padding size based on position for DashboardController Test: ./gradlew test Signed-off-by: utzcoz --- .../farmerbb/taskbar/ui/DashboardController.java | 54 ++++++----- .../taskbar/ui/DashboardControllerTest.java | 103 +++++++++++++++++++++ 2 files changed, 136 insertions(+), 21 deletions(-) create mode 100644 app/src/test/java/com/farmerbb/taskbar/ui/DashboardControllerTest.java diff --git a/app/src/main/java/com/farmerbb/taskbar/ui/DashboardController.java b/app/src/main/java/com/farmerbb/taskbar/ui/DashboardController.java index d91e07d4..0402d876 100644 --- a/app/src/main/java/com/farmerbb/taskbar/ui/DashboardController.java +++ b/app/src/main/java/com/farmerbb/taskbar/ui/DashboardController.java @@ -41,6 +41,8 @@ import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.os.Process; + +import androidx.annotation.VisibleForTesting; import androidx.core.graphics.ColorUtils; import android.util.SparseArray; import android.view.MotionEvent; @@ -260,28 +262,38 @@ public class DashboardController extends UIController { host.addView(layout, params); - new Handler().postDelayed(() -> { - int paddingSize = context.getResources().getDimensionPixelSize(R.dimen.tb_icon_size); + new Handler().postDelayed(() -> + updatePaddingSize( + context, + layout, + TaskbarPosition.getTaskbarPosition(context) + ), + 100 + ); + } - switch(TaskbarPosition.getTaskbarPosition(context)) { - case POSITION_TOP_VERTICAL_LEFT: - case POSITION_BOTTOM_VERTICAL_LEFT: - layout.setPadding(paddingSize, 0, 0, 0); - break; - case POSITION_TOP_LEFT: - case POSITION_TOP_RIGHT: - layout.setPadding(0, paddingSize, 0, 0); - break; - case POSITION_TOP_VERTICAL_RIGHT: - case POSITION_BOTTOM_VERTICAL_RIGHT: - layout.setPadding(0, 0, paddingSize, 0); - break; - case POSITION_BOTTOM_LEFT: - case POSITION_BOTTOM_RIGHT: - layout.setPadding(0, 0, 0, paddingSize); - break; - } - }, 100); + @VisibleForTesting + void updatePaddingSize(Context context, LinearLayout layout, String position) { + int paddingSize = context.getResources().getDimensionPixelSize(R.dimen.tb_icon_size); + + switch(position) { + case POSITION_TOP_VERTICAL_LEFT: + case POSITION_BOTTOM_VERTICAL_LEFT: + layout.setPadding(paddingSize, 0, 0, 0); + break; + case POSITION_TOP_LEFT: + case POSITION_TOP_RIGHT: + layout.setPadding(0, paddingSize, 0, 0); + break; + case POSITION_TOP_VERTICAL_RIGHT: + case POSITION_BOTTOM_VERTICAL_RIGHT: + layout.setPadding(0, 0, paddingSize, 0); + break; + case POSITION_BOTTOM_LEFT: + case POSITION_BOTTOM_RIGHT: + layout.setPadding(0, 0, 0, paddingSize); + break; + } } private void toggleDashboard() { diff --git a/app/src/test/java/com/farmerbb/taskbar/ui/DashboardControllerTest.java b/app/src/test/java/com/farmerbb/taskbar/ui/DashboardControllerTest.java new file mode 100644 index 00000000..81ca0a53 --- /dev/null +++ b/app/src/test/java/com/farmerbb/taskbar/ui/DashboardControllerTest.java @@ -0,0 +1,103 @@ +package com.farmerbb.taskbar.ui; + +import android.content.Context; +import android.content.SharedPreferences; +import android.view.View; +import android.widget.LinearLayout; + +import androidx.test.core.app.ApplicationProvider; + +import com.farmerbb.taskbar.Constants; +import com.farmerbb.taskbar.R; +import com.farmerbb.taskbar.util.TaskbarPosition; +import com.farmerbb.taskbar.util.U; + +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.rule.PowerMockRule; +import org.robolectric.RobolectricTestRunner; + +import static com.farmerbb.taskbar.util.Constants.POSITION_BOTTOM_LEFT; +import static com.farmerbb.taskbar.util.Constants.POSITION_BOTTOM_RIGHT; +import static com.farmerbb.taskbar.util.Constants.POSITION_BOTTOM_VERTICAL_LEFT; +import static com.farmerbb.taskbar.util.Constants.POSITION_BOTTOM_VERTICAL_RIGHT; +import static com.farmerbb.taskbar.util.Constants.POSITION_TOP_LEFT; +import static com.farmerbb.taskbar.util.Constants.POSITION_TOP_RIGHT; +import static com.farmerbb.taskbar.util.Constants.POSITION_TOP_VERTICAL_LEFT; +import static com.farmerbb.taskbar.util.Constants.POSITION_TOP_VERTICAL_RIGHT; +import static org.junit.Assert.assertEquals; + +@RunWith(RobolectricTestRunner.class) +@PowerMockIgnore({"org.mockito.*", "org.robolectric.*", + "android.*", "androidx.*", "com.farmerbb.taskbar.shadow.*"}) +@PrepareForTest(value = {U.class, TaskbarPosition.class}) +public class DashboardControllerTest { + @Rule + public PowerMockRule rule = new PowerMockRule(); + + private DashboardController uiController; + private Context context; + private SharedPreferences prefs; + private final UIHost host = new MockUIHost(); + + @Before + public void setUp() { + context = ApplicationProvider.getApplicationContext(); + uiController = new DashboardController(context); + prefs = U.getSharedPreferences(context); + + uiController.onCreateHost(host); + } + + @After + public void tearDown() { + uiController.onDestroyHost(host); + } + + @Test + public void testUpdatePaddingSize() { + int paddingDefault = Integer.MAX_VALUE; + LinearLayout layout = new LinearLayout(context); + layout.setPadding(paddingDefault, paddingDefault, paddingDefault, paddingDefault); + uiController.updatePaddingSize(context, layout, Constants.UNSUPPORTED); + verifyViewPadding(layout, paddingDefault, paddingDefault, paddingDefault, paddingDefault); + + int paddingSize = context.getResources().getDimensionPixelSize(R.dimen.tb_icon_size); + + uiController.updatePaddingSize(context, layout, POSITION_TOP_VERTICAL_LEFT); + verifyViewPadding(layout, paddingSize, 0, 0, 0); + + uiController.updatePaddingSize(context, layout, POSITION_BOTTOM_VERTICAL_LEFT); + verifyViewPadding(layout, paddingSize, 0, 0, 0); + + uiController.updatePaddingSize(context, layout, POSITION_TOP_LEFT); + verifyViewPadding(layout, 0, paddingSize, 0, 0); + + uiController.updatePaddingSize(context, layout, POSITION_TOP_RIGHT); + verifyViewPadding(layout, 0, paddingSize, 0, 0); + + uiController.updatePaddingSize(context, layout, POSITION_TOP_VERTICAL_RIGHT); + verifyViewPadding(layout, 0, 0, paddingSize, 0); + + uiController.updatePaddingSize(context, layout, POSITION_BOTTOM_VERTICAL_RIGHT); + verifyViewPadding(layout, 0, 0, paddingSize, 0); + + uiController.updatePaddingSize(context, layout, POSITION_BOTTOM_LEFT); + verifyViewPadding(layout, 0, 0, 0, paddingSize); + + uiController.updatePaddingSize(context, layout, POSITION_BOTTOM_RIGHT); + verifyViewPadding(layout, 0, 0, 0, paddingSize); + } + + private void verifyViewPadding(View view, int left, int top, int right, int bottom) { + assertEquals(left, view.getPaddingLeft()); + assertEquals(top, view.getPaddingTop()); + assertEquals(right, view.getPaddingRight()); + assertEquals(bottom, view.getPaddingBottom()); + } +} -- 2.11.0