[go: nahoru, domu]

Change package name for CoreText and CoreTextField

Change CoreText package from androidx.ui.core to androidx.ui.text.

Test: Ran demo apps
Test: ./gradlew ui:ui-text:build
Test: ./gradlew ui:ui-text:cAT
Test: ./gradlew ui:ui-foundation:build
Test: ./gradlew ui:ui-foundation-core:cAT
Test: ./gradlew ui:ui-material:build
Test: ./gradlew ui:ui-material:cAT

Bug: 148178274
Change-Id: I7ce42ca828a43a0e053a96113bbc14cd32fd3919
diff --git a/ui/ui-text/src/main/java/androidx/ui/text/selection/SelectionMode.kt b/ui/ui-text/src/main/java/androidx/ui/text/selection/SelectionMode.kt
new file mode 100644
index 0000000..eaaa01e
--- /dev/null
+++ b/ui/ui-text/src/main/java/androidx/ui/text/selection/SelectionMode.kt
@@ -0,0 +1,152 @@
+/*
+ * Copyright 2019 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package androidx.ui.text.selection
+
+import androidx.ui.unit.PxBounds
+import androidx.ui.unit.PxPosition
+
+/**
+ * The enum class allows user to decide the selection mode.
+ */
+internal enum class SelectionMode {
+    /**
+     * When selection handles are dragged across composables, selection extends by row, for example,
+     * when the end selection handle is dragged down, upper rows will be selected first, and the
+     * lower rows.
+     */
+    Vertical {
+        override fun isSelected(
+            bounds: PxBounds,
+            start: PxPosition,
+            end: PxPosition
+        ): Boolean {
+            // When the end of the selection is above the top of the composable, the composable is outside
+            // of the selection range.
+            if (end.y < bounds.top) return false
+
+            // When the end of the selection is on the left of the composable, and not below the bottom
+            // of composable, the composable is outside of the selection range.
+            if (end.x < bounds.left && end.y < bounds.bottom) return false
+
+            // When the start of the selection is below the bottom of the composable, the composable is
+            // outside of the selection range.
+            if (start.y >= bounds.bottom) return false
+
+            // When the start of the selection is on the right of the composable, and not above the top
+            // of the composable, the composable is outside of the selection range.
+            if (start.x >= bounds.right && start.y >= bounds.top) return false
+
+            return true
+        }
+
+        override fun areHandlesCrossed(
+            bounds: PxBounds,
+            start: PxPosition,
+            end: PxPosition
+        ): Boolean {
+            if (start.y >= bounds.top && start.y < bounds.bottom &&
+                end.y >= bounds.top && end.y < bounds.bottom
+            ) {
+                // When the start and end of the selection are in the same row of widgets, check if
+                // x coordinates of the start and end are crossed each other.
+                return start.x > end.x
+            } else {
+                // When the start and end of the selection are not in the same row of widgets, check
+                // if y coordinates of the start and end are crossed each other.
+                return start.y > end.y
+            }
+        }
+    },
+
+    /**
+     * When selection handles are dragged across composables, selection extends by column, for example,
+     * when the end selection handle is dragged to the right, left columns will be selected first,
+     * and the right rows.
+     */
+    Horizontal {
+        override fun isSelected(
+            bounds: PxBounds,
+            start: PxPosition,
+            end: PxPosition
+        ): Boolean {
+            // When the end of the selection is on the left of the composable, the composable is outside of
+            // the selection range.
+            if (end.x < bounds.left) return false
+
+            // When the end of the selection is on the top of the composable, and the not on the right
+            // of the composable, the composable is outside of the selection range.
+            if (end.y < bounds.top && end.x < bounds.right) return false
+
+            // When the start of the selection is on the right of the composable, the composable is outside
+            // of the selection range.
+            if (start.x >= bounds.right) return false
+
+            // When the start of the selection is below the composable, and not on the left of the
+            // composable, the composable is outside of the selection range.
+            if (start.y >= bounds.bottom && start.x >= bounds.left) return false
+
+            return true
+        }
+
+        override fun areHandlesCrossed(
+            bounds: PxBounds,
+            start: PxPosition,
+            end: PxPosition
+        ): Boolean {
+            if (start.x >= bounds.left && start.x < bounds.right &&
+                end.x >= bounds.left && end.x < bounds.right
+            ) {
+                // When the start and end of the selection are in the same column of widgets,
+                // check if y coordinates of the start and end are crossed each other.
+                return start.y > end.y
+            } else {
+                // When the start and end of the selection are not in the same column of widgets,
+                // check if x coordinates of the start and end are crossed each other.
+                return start.x > end.x
+            }
+        }
+    };
+
+    /**
+     * Decides if Composable which has [bounds], should be accepted by the selection and
+     * change its selected state for a selection that starts at [start] and ends at [end].
+     *
+     * @param bounds Composable bounds of the widget to be checked.
+     * @param start The start coordinates of the selection, in SelectionContainer range.
+     * @param end The end coordinates of the selection, in SelectionContainer range.
+     */
+    internal abstract fun isSelected(
+        bounds: PxBounds,
+        start: PxPosition,
+        end: PxPosition
+    ): Boolean
+
+    /**
+     * Decides if the [start] and [end] handles of the selection are crossed around a Composable
+     * which has [bounds].
+     * When the end handle is visually crossed the start handle, return true.
+     *
+     * @param bounds Composable bounds of the widget to be checked.
+     * @param start The start coordinates of the selection, in SelectionContainer range.
+     * @param end The end coordinates of the selection, in SelectionContainer range.
+     */
+    internal abstract fun areHandlesCrossed(
+        bounds: PxBounds,
+        start: PxPosition,
+        end: PxPosition
+    ): Boolean
+}