Skip to content
This repository was archived by the owner on Oct 18, 2024. It is now read-only.

Commit b28e1a6

Browse files
committed
fix: better swipe gesture support for swipe reveal layout
1 parent 908162b commit b28e1a6

File tree

9 files changed

+277
-142
lines changed

9 files changed

+277
-142
lines changed

.idea/deploymentTargetSelector.xml

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/src/main/java/com/itsaky/androidide/activities/editor/BaseEditorActivity.kt

Lines changed: 66 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ package com.itsaky.androidide.activities.editor
1919

2020
import android.content.Intent
2121
import android.content.pm.PackageInstaller.SessionCallback
22+
import android.content.res.ColorStateList
2223
import android.graphics.Color
2324
import android.graphics.Rect
2425
import android.graphics.drawable.GradientDrawable
@@ -30,6 +31,7 @@ import android.text.TextUtils
3031
import android.text.method.LinkMovementMethod
3132
import android.text.style.ClickableSpan
3233
import android.view.View
34+
import android.view.ViewGroup
3335
import android.view.ViewTreeObserver.OnGlobalLayoutListener
3436
import androidx.activity.OnBackPressedCallback
3537
import androidx.activity.result.ActivityResult
@@ -41,6 +43,8 @@ import androidx.annotation.StringRes
4143
import androidx.appcompat.app.ActionBarDrawerToggle
4244
import androidx.collection.MutableIntIntMap
4345
import androidx.core.view.GravityCompat
46+
import androidx.core.view.updateLayoutParams
47+
import androidx.core.view.updatePadding
4448
import androidx.core.view.updatePaddingRelative
4549
import com.blankj.utilcode.constant.MemoryConstants
4650
import com.blankj.utilcode.util.ConvertUtils.byte2MemorySize
@@ -54,6 +58,9 @@ import com.github.mikephil.charting.data.LineDataSet
5458
import com.github.mikephil.charting.formatter.IAxisValueFormatter
5559
import com.google.android.material.bottomsheet.BottomSheetBehavior
5660
import com.google.android.material.bottomsheet.BottomSheetBehavior.BottomSheetCallback
61+
import com.google.android.material.shape.CornerFamily
62+
import com.google.android.material.shape.MaterialShapeDrawable
63+
import com.google.android.material.shape.ShapeAppearanceModel
5764
import com.google.android.material.snackbar.Snackbar
5865
import com.google.android.material.tabs.TabLayout
5966
import com.google.android.material.tabs.TabLayout.Tab
@@ -84,6 +91,7 @@ import com.itsaky.androidide.projects.ProjectManagerImpl
8491
import com.itsaky.androidide.tasks.cancelIfActive
8592
import com.itsaky.androidide.ui.CodeEditorView
8693
import com.itsaky.androidide.ui.ContentTranslatingDrawerLayout
94+
import com.itsaky.androidide.ui.SwipeRevealLayout
8795
import com.itsaky.androidide.uidesigner.UIDesignerActivity
8896
import com.itsaky.androidide.utils.ActionMenuUtils.createMenu
8997
import com.itsaky.androidide.utils.ApkInstallationSessionCallback
@@ -104,6 +112,7 @@ import org.greenrobot.eventbus.ThreadMode.MAIN
104112
import org.slf4j.Logger
105113
import org.slf4j.LoggerFactory
106114
import java.io.File
115+
import kotlin.math.roundToInt
107116
import kotlin.math.roundToLong
108117

109118
/**
@@ -157,10 +166,11 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
157166
private val memoryUsageListener = MemoryUsageWatcher.MemoryUsageListener { memoryUsage ->
158167
memoryUsage.forEachValue { proc ->
159168
_binding?.memUsageView?.chart?.apply {
160-
val dataset = (data.getDataSetByIndex(pidToDatasetIdxMap[proc.pid]) as LineDataSet?) ?: run {
161-
log.error("No dataset found for process: {}: {}", proc.pid, proc.pname)
162-
return@forEachValue
163-
}
169+
val dataset = (data.getDataSetByIndex(pidToDatasetIdxMap[proc.pid]) as LineDataSet?)
170+
?: run {
171+
log.error("No dataset found for process: {}: {}", proc.pid, proc.pname)
172+
return@forEachValue
173+
}
164174

165175
dataset.entries.mapIndexed { index, entry ->
166176
entry.y = byte2MemorySize(proc.usageHistory[index], MemoryConstants.MB).toFloat()
@@ -174,13 +184,21 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
174184
}
175185
}
176186
}
187+
188+
private val editorSurfaceContainerBackground by lazy {
189+
resolveAttr(R.attr.colorSurfaceDim)
190+
}
177191

178192
private var optionsMenuInvalidator: Runnable? = null
179193

180194
companion object {
181-
@JvmStatic protected val PROC_IDE = "IDE"
182-
@JvmStatic protected val PROC_GRADLE_TOOLING = "Gradle Tooling"
183-
@JvmStatic protected val PROC_GRADLE_DAEMON = "Gradle Daemon"
195+
196+
@JvmStatic
197+
protected val PROC_IDE = "IDE"
198+
@JvmStatic
199+
protected val PROC_GRADLE_TOOLING = "Gradle Tooling"
200+
@JvmStatic
201+
protected val PROC_GRADLE_DAEMON = "Gradle Daemon"
184202

185203
@JvmStatic
186204
protected val log: Logger = LoggerFactory.getLogger(BaseEditorActivity::class.java)
@@ -244,6 +262,9 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
244262
drawerSidebar.getFragment<EditorSidebarFragment>()
245263
.onApplyWindowInsets(insets)
246264

265+
editorAppBarLayout.updatePadding(
266+
top = insets.top
267+
)
247268
editorToolbar.updatePaddingRelative(
248269
start = editorToolbar.paddingStart + insets.left,
249270
end = editorToolbar.paddingEnd + insets.right
@@ -302,6 +323,18 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
302323
watchMemory()
303324
}
304325

326+
private fun onSwipeRevealDragProgress(progress: Float) {
327+
_binding?.apply {
328+
val insetsTop = lastWindowInsets?.top ?: 0
329+
editorAppBarLayout.updatePadding(
330+
top = (insetsTop * (1f - progress)).roundToInt()
331+
)
332+
memUsageView.chart.updateLayoutParams<ViewGroup.MarginLayoutParams> {
333+
topMargin = (insetsTop * progress).roundToInt()
334+
}
335+
}
336+
}
337+
305338
private fun setupMemUsageChart() {
306339
binding.memUsageView.chart.apply {
307340
val colorAccent = resolveAttr(R.attr.colorAccent)
@@ -312,7 +345,7 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
312345
axisRight.axisLineColor = colorAccent
313346

314347
setPinchZoom(false)
315-
setBackgroundColor(resolveAttr(R.attr.colorSurfaceContainer))
348+
setBackgroundColor(editorSurfaceContainerBackground)
316349
setDrawGridBackground(true)
317350
setScaleEnabled(true)
318351

@@ -335,9 +368,13 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
335368
protected fun resetMemUsageChart() {
336369
val processes = memoryUsageWatcher.getMemoryUsages()
337370
val datasets = Array(processes.size) { index ->
338-
LineDataSet(List(MemoryUsageWatcher.MAX_USAGE_ENTRIES) { Entry(it.toFloat(), 0f) }, processes[index].pname)
371+
LineDataSet(List(MemoryUsageWatcher.MAX_USAGE_ENTRIES) { Entry(it.toFloat(), 0f) },
372+
processes[index].pname)
339373
}
340374

375+
val bgColor = editorSurfaceContainerBackground
376+
val textColor = resolveAttr(R.attr.colorOnSurface)
377+
341378
for ((index, proc) in processes.withIndex()) {
342379
val dataset = datasets[index]
343380
dataset.color = getMemUsageLineColorFor(proc)
@@ -351,8 +388,17 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
351388
pidToDatasetIdxMap[proc.pid] = index
352389
}
353390

391+
binding.memUsageView.chart.setBackgroundColor(bgColor)
392+
354393
binding.memUsageView.chart.apply {
355394
data = LineData(*datasets)
395+
axisRight.textColor = textColor
396+
axisLeft.textColor = textColor
397+
legend.textColor = textColor
398+
399+
data.setValueTextColor(textColor)
400+
setBackgroundColor(bgColor)
401+
setGridBackgroundColor(bgColor)
356402
notifyDataSetChanged()
357403
invalidate()
358404
}
@@ -603,6 +649,13 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
603649
app.prefManager.putBoolean(KEY_BOTTOM_SHEET_SHOWN, true)
604650
}, 1500)
605651
}
652+
653+
binding.swipeReveal.dragListener = object : SwipeRevealLayout.OnDragListener {
654+
override fun onDragStateChanged(swipeRevealLayout: SwipeRevealLayout, state: Int) {}
655+
override fun onDragProgress(swipeRevealLayout: SwipeRevealLayout, progress: Float) {
656+
onSwipeRevealDragProgress(progress)
657+
}
658+
}
606659
}
607660

608661
private fun setupNoEditorView() {
@@ -664,9 +717,10 @@ abstract class BaseEditorActivity : EdgeToEdgeIDEActivity(), TabLayout.OnTabSele
664717

665718
val observer: OnGlobalLayoutListener = object : OnGlobalLayoutListener {
666719
override fun onGlobalLayout() {
667-
binding.let {
668-
it.viewContainer.pivotY = 0f
669-
it.viewContainer.pivotX = it.viewContainer.width / 2f
720+
binding.also {
721+
it.realContainer.pivotX = it.realContainer.width.toFloat() / 2f
722+
it.realContainer.pivotY = (it.realContainer.height.toFloat() / 2f) + (lastWindowInsets?.height()
723+
?: 0)
670724
it.viewContainer.viewTreeObserver.removeOnGlobalLayoutListener(this)
671725
}
672726
}

app/src/main/java/com/itsaky/androidide/app/EdgeToEdgeIDEActivity.kt

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ import android.os.Bundle
2525
import android.os.PersistableBundle
2626
import android.view.WindowInsets
2727
import android.view.WindowManager
28+
import androidx.annotation.CallSuper
2829
import androidx.core.view.OnApplyWindowInsetsListener
2930
import androidx.core.view.ViewCompat
3031
import androidx.core.view.doOnAttach
@@ -66,6 +67,11 @@ abstract class EdgeToEdgeIDEActivity : IDEActivity() {
6667
*/
6768
protected open var decorViewPadding: Rect? = null
6869

70+
/**
71+
* Last window insets.
72+
*/
73+
protected open var lastWindowInsets: Rect? = null
74+
6975
override var enableSystemBarTheming: Boolean
7076
get() = false
7177
set(@Suppress("UNUSED_PARAMETER") value) {
@@ -144,5 +150,8 @@ abstract class EdgeToEdgeIDEActivity : IDEActivity() {
144150
}
145151

146152
/** Called whenever insets are updated */
147-
protected open fun onInsetsUpdated(insets: Rect) {}
153+
@CallSuper
154+
protected open fun onInsetsUpdated(insets: Rect) {
155+
this.lastWindowInsets = insets
156+
}
148157
}

0 commit comments

Comments
 (0)