OSDN Git Service

Extract method to update layout padding size based on position for DashboardController
authorutzcoz <utzcoz@outlook.com>
Sat, 18 Jul 2020 15:08:44 +0000 (23:08 +0800)
committerutzcoz <utzcoz@outlook.com>
Sat, 18 Jul 2020 15:10:49 +0000 (23:10 +0800)
Test: ./gradlew test

Signed-off-by: utzcoz <utzcoz@outlook.com>
app/src/main/java/com/farmerbb/taskbar/ui/DashboardController.java
app/src/test/java/com/farmerbb/taskbar/ui/DashboardControllerTest.java [new file with mode: 0644]

index d91e07d..0402d87 100644 (file)
@@ -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 (file)
index 0000000..81ca0a5
--- /dev/null
@@ -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());
+    }
+}