1 /*
2  * Copyright 2023 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package test.multideviceinput
18 
19 import android.app.Activity
20 import android.graphics.Color
21 import android.view.Gravity
22 import android.view.View
23 import android.view.ViewGroup
24 import android.view.WindowInsets.Type
25 import android.view.WindowManager
26 
27 
28 enum class PointerState {
29     DOWN, // One or more pointer(s) down, lines are being drawn
30     HOVER, // Pointer is hovering
31     NONE, // Nothing is touching or hovering
32 }
33 
34 data class SharedScaledPointerSize(
35         var lineSize: Float,
36         var circleSize: Float,
37         var state: PointerState
38 )
39 
40 class MainActivity : Activity() {
41     val TAG = "MultiDeviceInput"
42     private val leftState = SharedScaledPointerSize(5f, 20f, PointerState.NONE)
43     private val rightState = SharedScaledPointerSize(5f, 20f, PointerState.NONE)
44     private lateinit var left: View
45     private lateinit var right: View
46 
onResumenull47     override fun onResume() {
48         super.onResume()
49 
50         val wm = getSystemService(WindowManager::class.java)
51         val wmlp = WindowManager.LayoutParams(WindowManager.LayoutParams.TYPE_APPLICATION)
52         wmlp.flags = (wmlp.flags or
53                       WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL or
54                       WindowManager.LayoutParams.FLAG_SPLIT_TOUCH)
55 
56         val windowMetrics = windowManager.currentWindowMetrics
57         val insets = windowMetrics.windowInsets.getInsetsIgnoringVisibility(Type.systemBars())
58         val width = windowMetrics.bounds.width() - insets.left - insets.right
59         val height = windowMetrics.bounds.height() - insets.top - insets.bottom
60 
61         wmlp.width = width * 24 / 50
62         wmlp.height = height * 35 / 50
63 
64         val vglp = ViewGroup.LayoutParams(
65                 ViewGroup.LayoutParams.WRAP_CONTENT,
66                 ViewGroup.LayoutParams.WRAP_CONTENT
67         )
68 
69         wmlp.setTitle("Left -- " + getPackageName())
70         wmlp.gravity = Gravity.CENTER_VERTICAL or Gravity.START
71         left = DrawingView(this, leftState, rightState)
72         left.setBackgroundColor(Color.LTGRAY)
73         left.setLayoutParams(vglp)
74         wm.addView(left, wmlp)
75 
76         wmlp.setTitle("Right -- " + getPackageName())
77         wmlp.gravity = Gravity.CENTER_VERTICAL or Gravity.END
78         right = DrawingView(this, rightState, leftState)
79         right.setBackgroundColor(Color.LTGRAY)
80         right.setLayoutParams(vglp)
81         wm.addView(right, wmlp)
82     }
83 }
84