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