diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e60a85b..1b10784 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -27,6 +27,7 @@
android:exported="false" />
.onCreate(savedInstanceState)
super.onCreate()
- widgetPanelId = intent.getIntExtra(EXTRA_PANEL_ID, WidgetPanel.Companion.HOME.id)
+ widgetPanelId = intent.getIntExtra(EXTRA_PANEL_ID, WidgetPanel.HOME.id)
val binding = ActivityWidgetPanelBinding.inflate(layoutInflater)
setContentView(binding.root)
+
+ // The widget container should extend below the status and navigation bars,
+ // so let's set an empty WindowInsetsListener to prevent it from being moved.
+ ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+ windowInsets
+ }
+
binding.widgetPanelWidgetContainer.widgetPanelId = widgetPanelId
binding.widgetPanelWidgetContainer.updateWidgets(
this,
@@ -38,6 +46,13 @@ class WidgetPanelActivity : Activity(), UIObject {
return mTheme
}
+ override fun onWindowFocusChanged(hasFocus: Boolean) {
+ super.onWindowFocusChanged(hasFocus)
+
+ if (hasFocus && LauncherPreferences.display().hideNavigationBar()) {
+ hideNavigationBar()
+ }
+ }
override fun onStart() {
super.onStart()
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt
index a841919..6fec855 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetsActivity.kt
@@ -8,14 +8,14 @@ import android.content.res.Resources
import android.graphics.Rect
import android.os.Bundle
import android.util.Log
+import android.view.ViewGroup
import androidx.core.view.ViewCompat
import androidx.core.view.WindowInsetsCompat
-import com.google.android.material.floatingactionbutton.FloatingActionButton
+import androidx.core.view.updateLayoutParams
import de.jrpie.android.launcher.Application
-import de.jrpie.android.launcher.R
+import de.jrpie.android.launcher.databinding.ActivityManageWidgetsBinding
import de.jrpie.android.launcher.preferences.LauncherPreferences
import de.jrpie.android.launcher.ui.UIObject
-import de.jrpie.android.launcher.ui.widgets.WidgetContainerView
import de.jrpie.android.launcher.widgets.AppWidget
import de.jrpie.android.launcher.widgets.WidgetPanel
import de.jrpie.android.launcher.widgets.WidgetPosition
@@ -30,14 +30,16 @@ const val REQUEST_PICK_APPWIDGET = 2
const val EXTRA_PANEL_ID = "widgetPanelId"
// We can't use AppCompatActivity, since some AppWidgets don't work there.
-class ManageWidgetsActivity : Activity(), UIObject {
+class ManageWidgetsActivity : UIObject, Activity() {
private var panelId: Int = WidgetPanel.HOME.id
+ private lateinit var binding: ActivityManageWidgetsBinding
private var sharedPreferencesListener =
SharedPreferences.OnSharedPreferenceChangeListener { _, prefKey ->
if (prefKey == LauncherPreferences.widgets().keys().widgets()) {
- findViewById(R.id.manage_widgets_container).updateWidgets(this,
+ binding.manageWidgetsContainer.updateWidgets(
+ this,
LauncherPreferences.widgets().widgets()
)
}
@@ -46,21 +48,33 @@ class ManageWidgetsActivity : Activity(), UIObject {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
super.onCreate()
- setContentView(R.layout.activity_manage_widgets)
+ binding = ActivityManageWidgetsBinding.inflate(layoutInflater)
+ setContentView(binding.root)
panelId = intent.extras?.getInt(EXTRA_PANEL_ID, WidgetPanel.HOME.id) ?: WidgetPanel.HOME.id
- findViewById(R.id.manage_widgets_button_add).setOnClickListener {
+ binding.manageWidgetsButtonAdd.setOnClickListener {
selectWidget()
}
- ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
- val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
- v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
- insets
+ // The widget container should extend below the status and navigation bars,
+ // so let's set an empty WindowInsetsListener to prevent it from being moved.
+ ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
+ windowInsets
}
- findViewById(R.id.manage_widgets_container).let {
+ // The button must not be placed under the navigation bar
+ ViewCompat.setOnApplyWindowInsetsListener(binding.manageWidgetsButtonAdd) { v, windowInsets ->
+ val insets = windowInsets.getInsets(WindowInsetsCompat.Type.systemBars())
+ v.updateLayoutParams {
+ leftMargin = insets.left
+ bottomMargin = insets.bottom
+ rightMargin = insets.right
+ }
+ WindowInsetsCompat.CONSUMED
+ }
+
+ binding.manageWidgetsContainer.let {
it.widgetPanelId = panelId
it.updateWidgets(this, LauncherPreferences.widgets().widgets())
}
@@ -77,20 +91,23 @@ class ManageWidgetsActivity : Activity(), UIObject {
override fun onResume() {
super.onResume()
- findViewById(R.id.manage_widgets_container).updateWidgets(this,
+ binding.manageWidgetsContainer.updateWidgets(
+ this,
LauncherPreferences.widgets().widgets()
)
}
+
+ override fun onWindowFocusChanged(hasFocus: Boolean) {
+ super.onWindowFocusChanged(hasFocus)
+
+ if (hasFocus && LauncherPreferences.display().hideNavigationBar()) {
+ hideNavigationBar()
+ }
+ }
+
override fun getTheme(): Resources.Theme {
- val mTheme = modifyTheme(super.getTheme())
- mTheme.applyStyle(R.style.backgroundWallpaper, true)
- LauncherPreferences.clock().font().applyToTheme(mTheme)
- LauncherPreferences.theme().colorTheme().applyToTheme(
- mTheme,
- LauncherPreferences.theme().textShadow()
- )
- return mTheme
+ return modifyTheme(super.getTheme())
}
override fun onDestroy() {
@@ -100,7 +117,7 @@ class ManageWidgetsActivity : Activity(), UIObject {
}
- fun selectWidget() {
+ private fun selectWidget() {
val appWidgetHost = (application as Application).appWidgetHost
startActivityForResult(
Intent(this, SelectWidgetActivity::class.java).also {
@@ -117,7 +134,7 @@ class ManageWidgetsActivity : Activity(), UIObject {
}
- fun createWidget(data: Intent) {
+ private fun createWidget(data: Intent) {
Log.i("Launcher", "creating widget")
val appWidgetManager = (application as Application).appWidgetManager
val appWidgetId = data.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return
@@ -127,9 +144,10 @@ class ManageWidgetsActivity : Activity(), UIObject {
val display = windowManager.defaultDisplay
val position = WidgetPosition.fromAbsoluteRect(
- Rect(0,0,
- min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minWidth),
- min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minHeight)
+ Rect(
+ 0, 0,
+ min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minWidth),
+ min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minHeight)
),
display.width,
display.height
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt
index a1bd3b5..0efdb43 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/SelectWidgetActivity.kt
@@ -95,6 +95,11 @@ class SelectWidgetActivity : AppCompatActivity(), UIObject {
layoutManager = viewManager
adapter = viewAdapter
}
+
+ binding.selectWidgetClose.setOnClickListener {
+ setResult(RESULT_CANCELED)
+ finish()
+ }
}
override fun getTheme(): Resources.Theme {
diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetOverlayView.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetOverlayView.kt
index 1b8a2d2..61006b8 100644
--- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetOverlayView.kt
+++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetOverlayView.kt
@@ -2,11 +2,13 @@ package de.jrpie.android.launcher.ui.widgets.manage
import android.content.Context
import android.graphics.Canvas
+import android.graphics.Color
import android.graphics.Paint
import android.graphics.Rect
import android.graphics.drawable.Drawable
import android.util.AttributeSet
import android.view.View
+import android.view.ViewGroup
import android.widget.PopupMenu
import androidx.core.graphics.toRectF
import de.jrpie.android.launcher.R
@@ -20,23 +22,32 @@ private const val HANDLE_EDGE_SIZE = (1.2 * HANDLE_SIZE).toInt()
/**
* An overlay to show configuration options for a widget in [WidgetManagerView]
*/
-class WidgetOverlayView : View {
+class WidgetOverlayView : ViewGroup {
+ private val paint = Paint()
+ private val handlePaint = Paint()
+ private val selectedHandlePaint = Paint()
+
+ private val popupAnchor = View(context)
- val paint = Paint()
- val handlePaint = Paint()
- val selectedHandlePaint = Paint()
var mode: WidgetManagerView.EditMode? = null
+
class Handle(val mode: WidgetManagerView.EditMode, val position: Rect)
init {
+ addView(popupAnchor)
+ setWillNotDraw(false)
handlePaint.style = Paint.Style.STROKE
- handlePaint.setARGB(255, 255, 255, 255)
+ handlePaint.color = Color.WHITE
+ handlePaint.strokeWidth = 2f
+ handlePaint.setShadowLayer(10f,0f,0f, Color.BLACK)
selectedHandlePaint.style = Paint.Style.FILL_AND_STROKE
selectedHandlePaint.setARGB(100, 255, 255, 255)
+ handlePaint.setShadowLayer(10f,0f,0f, Color.BLACK)
paint.style = Paint.Style.STROKE
- paint.setARGB(255, 255, 255, 255)
+ paint.color = Color.WHITE
+ paint.setShadowLayer(10f,0f,0f, Color.BLACK)
}
private var preview: Drawable? = null
@@ -75,21 +86,23 @@ class WidgetOverlayView : View {
}
}
val bounds = getBounds()
+
canvas.drawRoundRect(bounds.toRectF(), 5f, 5f, paint)
if (mode == null) {
return
}
-
//preview?.bounds = bounds
//preview?.draw(canvas)
+ }
-
+ override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
+ popupAnchor.layout(0,0,0,0)
}
fun showPopupMenu() {
val widget = Widget.byId(context, widgetId)?: return
- val menu = PopupMenu(context, this)
+ val menu = PopupMenu(context, popupAnchor)
menu.menu.let {
it.add(
context.getString(R.string.widget_menu_remove)
diff --git a/app/src/main/res/layout/activity_manage_widgets.xml b/app/src/main/res/layout/activity_manage_widgets.xml
index c77f0e3..66404ee 100644
--- a/app/src/main/res/layout/activity_manage_widgets.xml
+++ b/app/src/main/res/layout/activity_manage_widgets.xml
@@ -1,5 +1,6 @@
-
+
-
\ No newline at end of file
+
+