Skip to content

Commit

Permalink
シングルタップ以外でも、ウィンドウを非活性に出来る様に改善。
Browse files Browse the repository at this point in the history
新規ウィンドウ表示時に、新規ウィンドウを優先して活性になる様に改善。
  • Loading branch information
kght6123 authored and hirotaka.koga committed Aug 19, 2018
1 parent 62b967c commit 02e643a
Show file tree
Hide file tree
Showing 2 changed files with 60 additions and 47 deletions.
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -195,12 +195,13 @@ class FloatWindowInfo(
val windowInlineFrame: ViewGroup by lazy { windowOutlineFrame.findViewById(R.id.windowInlineFrame) as ViewGroup } val windowInlineFrame: ViewGroup by lazy { windowOutlineFrame.findViewById(R.id.windowInlineFrame) as ViewGroup }
var activeFlag: Boolean = false var activeFlag: Boolean = false
set(activeFlag) { set(activeFlag) {
Log.d(tag, "set _activeFlag=$activeFlag")
field = activeFlag field = activeFlag
if(field) { if(field) {
Log.d(tag, "setActiveFlag addAnchor") Log.d(tag, "set activeFlag addAnchor")
this.addAnchor() this.addAnchor()
} else { } else {
Log.d(tag, "setActiveFlag removeAnchor") Log.d(tag, "set activeFlag removeAnchor")
this.removeAnchor() this.removeAnchor()
} }
} }
Expand Down
Original file line number Original file line Diff line number Diff line change
Expand Up @@ -44,33 +44,14 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {
private val overlayView: FloatWindowOverlayLayout by lazy { private val overlayView: FloatWindowOverlayLayout by lazy {
val overlayView = View.inflate(context, R.layout.window_overlay_layer, null) as FloatWindowOverlayLayout val overlayView = View.inflate(context, R.layout.window_overlay_layer, null) as FloatWindowOverlayLayout


overlayView.onDispatchTouchEventListener = object: View.OnTouchListener { overlayView.onDispatchTouchEventListener = View.OnTouchListener { _, event ->

when (event.action) {
val gestureDetector: GestureDetector = GestureDetector(context, object: GestureDetector.SimpleOnGestureListener() { MotionEvent.ACTION_DOWN -> {

Log.d(tag, "overlayView onDispatchTouchEventListener onTouch MotionEvent.ACTION_DOWN changeActiveEvent. updateDeActive. _activeFlag")
override fun onSingleTapUp(event: MotionEvent): Boolean { return@OnTouchListener changeActiveEvent(event)// Activeがある時のみ。伝搬を止める
Log.d(tag, "overlayView SimpleOnGestureListener onSingleTapUp changeActiveEvent")

// 単純にタッチした時のみ、Active判定
changeActiveEvent(event)
//return super.onSingleTapUp(event)
return true
}
})
@SuppressLint("ClickableViewAccessibility")
override fun onTouch(view: View, event: MotionEvent): Boolean {
when (event.action) {
MotionEvent.ACTION_OUTSIDE -> {
Log.d(tag, "overlayView onDispatchTouchEventListener onTouch MotionEvent.ACTION_OUTSIDE changeActiveEvent")
changeActiveEvent(event) // OUTSIDEの時もActive判定
return true
}
} }
Log.d(tag, "overlayView onDispatchTouchEventListener onTouch .action=${event.action}, .rawX,rawY=${event.rawX},${event.rawY} .x,y=${event.x},${event.y}")
gestureDetector.onTouchEvent(event)// ジェスチャー機能を使う

return false
} }
false
} }
overlayView overlayView
} }
Expand Down Expand Up @@ -383,6 +364,7 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {
} else } else
Log.d(tag, "remove is null. index=$index") Log.d(tag, "remove is null. index=$index")


Log.d(tag, "remove. updateDeActive. index=$index, _activeFlag")
updateDeActive(index) updateDeActive(index)
} }
fun changeMode(index: Int, miniMode: Boolean) { fun changeMode(index: Int, miniMode: Boolean) {
Expand All @@ -402,12 +384,12 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {
return if(indexList.isEmpty()) return if(indexList.isEmpty())
(0 + 1) (0 + 1)
else { else {
Collections.reverse(indexList) indexList.reverse()
(indexList.first() + 1) (indexList.first() + 1)
} }
} }
fun changeActiveIndex(index: Int) { fun changeActiveIndex(index: Int) {
Log.d(tag, "changeActiveIndex. index=$index") Log.d(tag, "changeActiveIndex. index=$index") // TODO changeForciblyActiveEvent index=1 or 2


val overlayInfo = overlayWindowMap[index] val overlayInfo = overlayWindowMap[index]
if(overlayInfo != null) { if(overlayInfo != null) {
Expand All @@ -419,26 +401,32 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {
overlayView.removeView(overlayInfo.windowOutlineFrame) overlayView.removeView(overlayInfo.windowOutlineFrame)
overlayView.addView(overlayInfo.windowOutlineFrame) overlayView.addView(overlayInfo.windowOutlineFrame)
} }
Log.d(tag, "changeActiveIndex. updateActive. index=$index, _activeFlag")
updateActive(index) // 追加したWindowをActiveに updateActive(index) // 追加したWindowをActiveに

Log.d(tag, "changeActiveIndex. updateOtherDeActive. index!=$index, _activeFlag")
updateOtherDeActive(index) // 追加したWindow以外をDeActiveに updateOtherDeActive(index) // 追加したWindow以外をDeActiveに
} }
} }
private fun updateActive(index: Int) { private fun updateActive(index: Int) {
Log.d(tag, "updateActive. index=$index") Log.d(tag, "updateActive. index=$index")
val overlayInfo = overlayWindowMap[index] val overlayInfo = overlayWindowMap[index]
Log.d(tag, "updateActive. index=$index, _activeFlag=true")
overlayInfo?.activeFlag = true overlayInfo?.activeFlag = true
overlayInfo?.let { onActive(index, it) } overlayInfo?.let { onActive(index, it) }
} }
private fun updateDeActive(index: Int) { private fun updateDeActive(index: Int) {
Log.d(tag, "updateDeActive. index=$index") Log.d(tag, "updateDeActive. index=$index")
val overlayInfo = overlayWindowMap[index] val overlayInfo = overlayWindowMap[index]
Log.d(tag, "updateDeActive. index=$index, _activeFlag=false")
overlayInfo?.activeFlag = false overlayInfo?.activeFlag = false
overlayInfo?.let { onDeActive(index, it) } overlayInfo?.let { onDeActive(index, it) }
} }
private fun updateOtherDeActive(index: Int) { private fun updateOtherDeActive(index: Int) {
Log.d(tag, "updateOtherDeActive. index=$index") Log.d(tag, "updateOtherDeActive. index=$index")
overlayWindowMap.forEach { entry -> overlayWindowMap.forEach { entry ->
if(entry.key != index) { if(entry.key != index) {
Log.d(tag, "updateOtherDeActive. index=${entry.key}, _activeFlag=false")
entry.value.activeFlag = false entry.value.activeFlag = false
onDeActive(entry.key, entry.value) onDeActive(entry.key, entry.value)
} }
Expand All @@ -447,10 +435,13 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {
fun changeForciblyActiveEvent() { fun changeForciblyActiveEvent() {
Log.d(tag, "changeForciblyActiveEvent.") Log.d(tag, "changeForciblyActiveEvent.")
if(!overlayWindowMap.isEmpty()) { if(!overlayWindowMap.isEmpty()) {
overlayWindowMap.entries.reversed().forEach { (index, overlayInfo) -> run exit@ {
if(!overlayInfo.miniMode) { overlayWindowMap.entries.reversed().forEach { (index, overlayInfo) ->
changeActiveIndex(index) if(!overlayInfo.miniMode) {
changeActiveOverlayView() changeActiveIndex(index)
changeActiveOverlayView()
return@exit
}
} }
} }
} }
Expand Down Expand Up @@ -493,6 +484,7 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {


private var prevActiveIndex: Int = -2 private var prevActiveIndex: Int = -2
private fun changeActiveEvent(event: MotionEvent) :Boolean { private fun changeActiveEvent(event: MotionEvent) :Boolean {
val deActiveAll = isDeActiveAll()
var changeActiveIndex: Int = -2 var changeActiveIndex: Int = -2
for ((overlayIndex, overlayInfo) in overlayWindowMap) { for ((overlayIndex, overlayInfo) in overlayWindowMap) {
if(!overlayInfo.miniMode) { if(!overlayInfo.miniMode) {
Expand All @@ -502,6 +494,8 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {
Log.d(tag, "changeActiveEvent. 1-1 onTouch=$onTouch, overlayInfo.activeFlag=${overlayInfo.activeFlag}, overlayIndex=$overlayIndex") Log.d(tag, "changeActiveEvent. 1-1 onTouch=$onTouch, overlayInfo.activeFlag=${overlayInfo.activeFlag}, overlayIndex=$overlayIndex")
if (overlayInfo.activeFlag) if (overlayInfo.activeFlag)
prevActiveIndex = overlayIndex // ActiveだったIndexを保持 prevActiveIndex = overlayIndex // ActiveだったIndexを保持

Log.d(tag, "changeActiveEvent. updateDeActive. index=$overlayIndex, _activeFlag")
updateDeActive(overlayIndex) updateDeActive(overlayIndex)
} else if (!overlayInfo.activeFlag) { } else if (!overlayInfo.activeFlag) {
// タッチされ、Active以外、他をActiveにしていない // タッチされ、Active以外、他をActiveにしていない
Expand All @@ -514,22 +508,40 @@ class FloatWindowManager(val context: Context): MultiFloatWindowManagerUpdater {
} }
} }
} }
if(changeActiveIndex == -2) { when {
// nullの時、何もタッチされてないので、全体をinActiveへ changeActiveIndex == -2 && deActiveAll -> {
Log.d(tag, "changeActiveEvent. 1-4 changeActiveIndex=$changeActiveIndex") // すでに全体がinActive
windowManager.updateViewLayout(overlayView, getInActiveParams()) return false
onDeActiveAll() }
if(prevActiveIndex != -2) changeActiveIndex == -2 -> {
// nullの時、何もタッチされてないので、全体をinActiveへ
Log.d(tag, "changeActiveEvent. 1-4 changeActiveIndex=$changeActiveIndex")
windowManager.updateViewLayout(overlayView, getInActiveParams())
onDeActiveAll()
if(prevActiveIndex != -2)
// 復帰のために、Anchorだけ表示する // 復帰のために、Anchorだけ表示する
overlayWindowMap[prevActiveIndex]?.addAnchor() overlayWindowMap[prevActiveIndex]?.addAnchor()
} return false
else if(changeActiveIndex != -1) { }
// 他のinActiveなウィンドウをタッチされた時、Activeへ changeActiveIndex != -1 -> {
Log.d(tag, "changeActiveEvent. 1-5 changeActiveIndex=$changeActiveIndex") // 他のinActiveなウィンドウをタッチされた時、Activeへ
changeActiveIndex(changeActiveIndex) Log.d(tag, "changeActiveEvent. 1-5 changeActiveIndex=$changeActiveIndex")
changeActiveOverlayView() changeActiveIndex(changeActiveIndex)
changeActiveOverlayView()
return true
}
else -> return true
} }
return false }
private fun isDeActiveAll() :Boolean {
if (overlayWindowMap.isEmpty())
return false // Mapが空のときは、全て非アクティブとしない

for ((_, overlayInfo) in overlayWindowMap)
if (overlayInfo.activeFlag)
return false

return true
} }
fun changeActiveOverlayView() { fun changeActiveOverlayView() {
windowManager.updateViewLayout(overlayView, getActiveParams()) windowManager.updateViewLayout(overlayView, getActiveParams())
Expand Down

0 comments on commit 02e643a

Please sign in to comment.