Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.itsaky.androidide.actions.debug
import android.content.Context
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.idetooltips.TooltipTag

/**
* @author Akash Yadav
Expand All @@ -13,6 +14,7 @@ class KillVmAction(
override val id = "ide.debug.stop-vm"
override var label = context.getString(R.string.debugger_kill)
override val order = 4
override var tooltipTag = TooltipTag.DEBUGGER_ACTION_KILL

override suspend fun execAction(data: ActionData) {
debugClient.killVm()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import android.content.Context
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.requireContext
import com.itsaky.androidide.idetooltips.TooltipTag
import com.itsaky.androidide.utils.IntentUtils
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.delay
Expand All @@ -19,6 +20,7 @@ class RestartVmAction(
override val id = "ide.debug.restart-vm"
override var label = context.getString(R.string.debugger_restart)
override val order = 5
override var tooltipTag = TooltipTag.DEBUGGER_ACTION_RESTART

companion object {
val RESTART_DELAY = 1.seconds
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.itsaky.androidide.actions.debug
import android.content.Context
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.idetooltips.TooltipTag

/**
* @author Akash Yadav
Expand All @@ -13,6 +14,7 @@ class StepIntoAction(
override val id = "ide.debug.step-into"
override var label = context.getString(R.string.debugger_step_into)
override val order = 2
override var tooltipTag = TooltipTag.DEBUGGER_ACTION_STEP_INTO

override suspend fun execAction(data: ActionData) {
debugClient.stepInto()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.itsaky.androidide.actions.debug
import android.content.Context
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.idetooltips.TooltipTag

/**
* @author Akash Yadav
Expand All @@ -13,6 +14,7 @@ class StepOutAction(
override val id = "ide.debug.step-out"
override var label = context.getString(R.string.debugger_step_out)
override val order = 3
override var tooltipTag = TooltipTag.DEBUGGER_ACTION_STEP_OUT

override suspend fun execAction(data: ActionData) {
debugClient.stepOut()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package com.itsaky.androidide.actions.debug
import android.content.Context
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.idetooltips.TooltipTag

/**
* @author Akash Yadav
Expand All @@ -13,6 +14,7 @@ class StepOverAction(
override val id = "ide.debug.step-over"
override var label = context.getString(R.string.debugger_step_over)
override val order = 1
override var tooltipTag = TooltipTag.DEBUGGER_ACTION_STEP_OVER

override suspend fun execAction(data: ActionData) {
debugClient.stepOver()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.core.content.ContextCompat
import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionData
import com.itsaky.androidide.actions.requireContext
import com.itsaky.androidide.idetooltips.TooltipTag

/**
* @author Akash Yadav
Expand All @@ -16,6 +17,7 @@ class SuspendResumeVmAction(
override val id = "ide.debug.suspend-resume"
override var label = context.getString(R.string.debugger_suspend)
override val order = 0
override var tooltipTag = TooltipTag.DEBUGGER_ACTION_PAUSE_RESUME

override fun prepare(data: ActionData) {
super.prepare(data)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ import com.itsaky.androidide.R
import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.ActionsRegistry
import com.itsaky.androidide.databinding.DebuggerActionsWindowBinding
import com.itsaky.androidide.idetooltips.TooltipManager
import com.itsaky.androidide.idetooltips.TooltipTag
import org.slf4j.LoggerFactory
import kotlin.math.abs

Expand All @@ -33,6 +35,7 @@ class DebugOverlayManager private constructor(
private var isDragging = false

init {
binding.dragHandle.root.isLongClickable = true
binding.dragHandle.root.icon = ContextCompat.getDrawable(binding.root.context, R.drawable.ic_drag_handle)

binding.dragHandle.root.setOnTouchListener { v, event ->
Expand All @@ -42,13 +45,14 @@ class DebugOverlayManager private constructor(
initialWindowY = overlayLayoutParams.y
initialTouchX = event.rawX
initialTouchY = event.rawY
true
false
}

MotionEvent.ACTION_MOVE -> {
val deltaX = (event.rawX - initialTouchX).toInt()
val deltaY = (event.rawY - initialTouchY).toInt()
if (isDragging || deltaX > touchSlop || deltaY > touchSlop) {
v.parent.requestDisallowInterceptTouchEvent(true)
isDragging = true
overlayLayoutParams.x = initialWindowX + deltaX
overlayLayoutParams.y = initialWindowY + deltaY
Expand All @@ -70,6 +74,15 @@ class DebugOverlayManager private constructor(
else -> false
}
}

binding.dragHandle.root.setOnLongClickListener { view ->
TooltipManager.showIdeCategoryTooltip(
context = view.context,
anchorView = view,
tag = TooltipTag.DEBUGGER_ACTION_MOVE
)
true
}
}

private var isShown = false
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import com.itsaky.androidide.actions.ActionItem
import com.itsaky.androidide.actions.ActionsRegistry
import com.itsaky.androidide.actions.internal.DefaultActionsRegistry
import com.itsaky.androidide.editor.databinding.LayoutPopupMenuItemBinding
import com.itsaky.androidide.idetooltips.TooltipManager

/**
* @author Akash Yadav
Expand Down Expand Up @@ -40,12 +41,23 @@ class DebuggerActionsOverlayAdapter(
action.prepare(data)

binding.root.icon = action.icon
binding.root.isEnabled = action.enabled
binding.root.alpha = if (action.enabled) 1f else 0.5f
TooltipCompat.setTooltipText(binding.root, action.label)

binding.root.setOnClickListener {
actionsRegister.executeAction(action, data)
binding.root.apply {
setOnClickListener {
if (action.enabled) {
actionsRegister.executeAction(action, data)
}
}
setOnLongClickListener {
TooltipManager.showIdeCategoryTooltip(
context = this.context,
anchorView = this,
tag = action.tooltipTag
)
true
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -8,12 +8,14 @@ import android.content.Intent
import android.database.sqlite.SQLiteDatabase
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.provider.Settings.canDrawOverlays
import android.text.Html
import android.util.Log
import android.view.Gravity
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.view.animation.AnimationUtils
import android.webkit.WebView
import android.webkit.WebViewClient
Expand Down Expand Up @@ -223,16 +225,17 @@ object TooltipManager {
}
}

// Use the helper to find the real Activity
val activity = context.findActivity()

val activityValid = activity?.let {
!it.isFinishing && !it.isDestroyed
} ?: false
val isLifecycleValid = if (activity != null) {
!activity.isFinishing && !activity.isDestroyed
} else {
true
}

val viewAttached = view.isAttachedToWindow && view.windowToken != null

return activityValid && viewAttached
return isLifecycleValid && viewAttached
}

/**
Expand Down Expand Up @@ -388,7 +391,7 @@ object TooltipManager {
<b>Buttons:</b> ${tooltip.buttons.joinToString { "'${it.first} → ${it.second}'" }}<br/>
""".trimIndent()

AlertDialog.Builder(context)
val builder = AlertDialog.Builder(context)
.setTitle("Tooltip Debug Info")
.setMessage(
Html.fromHtml(
Expand All @@ -400,7 +403,14 @@ object TooltipManager {
dialog.dismiss()
}
.setCancelable(true) // Allow dismissing by tapping outside
.show()

val dialog = builder.create()

if (context !is Activity && canDrawOverlays(context)) {
dialog.window?.setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY)
}

dialog.show()
}

private fun onFeedbackButtonClicked(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -139,4 +139,13 @@ object TooltipTag {
const val PROJECT_FILENAME = "project.filename"
const val EDITOR_FILE_CLOSE_OPTIONS = "editor.file.close.options"
const val PROJECT_FILE_HELP = "project.file.help"

// Debugger Actions
const val DEBUGGER_ACTION_MOVE = "debug.toolbar.move"
const val DEBUGGER_ACTION_PAUSE_RESUME = "debug.toolbar.pauseresume"
const val DEBUGGER_ACTION_STEP_OVER = "debug.toolbar.stepover"
const val DEBUGGER_ACTION_STEP_INTO = "debug.toolbar.stepinto"
const val DEBUGGER_ACTION_STEP_OUT = "debug.toolbar.stepout"
const val DEBUGGER_ACTION_KILL = "debug.toolbar.kill"
const val DEBUGGER_ACTION_RESTART = "debug.toolbar.restart"
}