mirror of
https://github.com/jrpie/Launcher.git
synced 2025-05-17 07:51:06 +02:00
Merge branch 'jrpie:master' into master
This commit is contained in:
commit
7a32289ec5
10 changed files with 106 additions and 53 deletions
|
@ -27,6 +27,7 @@
|
||||||
android:exported="false" />
|
android:exported="false" />
|
||||||
<activity
|
<activity
|
||||||
android:name=".ui.widgets.manage.ManageWidgetsActivity"
|
android:name=".ui.widgets.manage.ManageWidgetsActivity"
|
||||||
|
android:configChanges="orientation|screenSize"
|
||||||
android:exported="false"
|
android:exported="false"
|
||||||
android:theme="@style/launcherHomeTheme" />
|
android:theme="@style/launcherHomeTheme" />
|
||||||
<activity
|
<activity
|
||||||
|
|
|
@ -78,7 +78,8 @@ class TorchManager(context: Context) {
|
||||||
cameraManager.setTorchMode(camera, !torchEnabled)
|
cameraManager.setTorchMode(camera, !torchEnabled)
|
||||||
}
|
}
|
||||||
|
|
||||||
} catch (e: CameraAccessException) {
|
} catch (e: Exception) {
|
||||||
|
// CameraAccessException, IllegalArgumentException
|
||||||
Toast.makeText(
|
Toast.makeText(
|
||||||
context,
|
context,
|
||||||
context.getString(R.string.alert_torch_access_exception),
|
context.getString(R.string.alert_torch_access_exception),
|
||||||
|
|
|
@ -21,7 +21,5 @@ fun migratePreferencesFromVersion4(context: Context) {
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
LauncherPreferences.internal().versionCode(100)
|
LauncherPreferences.internal().versionCode(100)
|
||||||
}
|
}
|
|
@ -129,15 +129,7 @@ class HomeActivity : UIObject, Activity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTheme(): Resources.Theme {
|
override fun getTheme(): Resources.Theme {
|
||||||
val mTheme = modifyTheme(super.getTheme())
|
return modifyTheme(super.getTheme())
|
||||||
mTheme.applyStyle(R.style.backgroundWallpaper, true)
|
|
||||||
LauncherPreferences.clock().font().applyToTheme(mTheme)
|
|
||||||
LauncherPreferences.theme().colorTheme().applyToTheme(
|
|
||||||
mTheme,
|
|
||||||
LauncherPreferences.theme().textShadow()
|
|
||||||
)
|
|
||||||
|
|
||||||
return mTheme
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
|
|
|
@ -10,6 +10,7 @@ import android.view.WindowInsets
|
||||||
import android.view.WindowInsetsController
|
import android.view.WindowInsetsController
|
||||||
import android.view.WindowManager
|
import android.view.WindowManager
|
||||||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||||
|
import de.jrpie.android.launcher.preferences.theme.Background
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* An interface implemented by every [Activity], Fragment etc. in Launcher.
|
* An interface implemented by every [Activity], Fragment etc. in Launcher.
|
||||||
|
@ -65,8 +66,14 @@ interface UIObject {
|
||||||
theme,
|
theme,
|
||||||
LauncherPreferences.theme().textShadow()
|
LauncherPreferences.theme().textShadow()
|
||||||
)
|
)
|
||||||
LauncherPreferences.theme().background().applyToTheme(theme)
|
|
||||||
LauncherPreferences.theme().font().applyToTheme(theme)
|
if (isHomeScreen()) {
|
||||||
|
Background.TRANSPARENT.applyToTheme(theme)
|
||||||
|
LauncherPreferences.clock().font().applyToTheme(theme)
|
||||||
|
} else {
|
||||||
|
LauncherPreferences.theme().background().applyToTheme(theme)
|
||||||
|
LauncherPreferences.theme().font().applyToTheme(theme)
|
||||||
|
}
|
||||||
|
|
||||||
return theme
|
return theme
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,6 +3,7 @@ package de.jrpie.android.launcher.ui.widgets
|
||||||
import android.app.Activity
|
import android.app.Activity
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import androidx.core.view.ViewCompat
|
||||||
import de.jrpie.android.launcher.R
|
import de.jrpie.android.launcher.R
|
||||||
import de.jrpie.android.launcher.databinding.ActivityWidgetPanelBinding
|
import de.jrpie.android.launcher.databinding.ActivityWidgetPanelBinding
|
||||||
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
import de.jrpie.android.launcher.preferences.LauncherPreferences
|
||||||
|
@ -12,13 +13,20 @@ import de.jrpie.android.launcher.widgets.WidgetPanel
|
||||||
|
|
||||||
class WidgetPanelActivity : Activity(), UIObject {
|
class WidgetPanelActivity : Activity(), UIObject {
|
||||||
lateinit var binding: ActivityWidgetPanelBinding
|
lateinit var binding: ActivityWidgetPanelBinding
|
||||||
var widgetPanelId: Int = WidgetPanel.Companion.HOME.id
|
private var widgetPanelId: Int = WidgetPanel.HOME.id
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super<Activity>.onCreate(savedInstanceState)
|
super<Activity>.onCreate(savedInstanceState)
|
||||||
super<UIObject>.onCreate()
|
super<UIObject>.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)
|
val binding = ActivityWidgetPanelBinding.inflate(layoutInflater)
|
||||||
setContentView(binding.root)
|
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.widgetPanelId = widgetPanelId
|
||||||
binding.widgetPanelWidgetContainer.updateWidgets(
|
binding.widgetPanelWidgetContainer.updateWidgets(
|
||||||
this,
|
this,
|
||||||
|
@ -38,6 +46,13 @@ class WidgetPanelActivity : Activity(), UIObject {
|
||||||
return mTheme
|
return mTheme
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onWindowFocusChanged(hasFocus: Boolean) {
|
||||||
|
super.onWindowFocusChanged(hasFocus)
|
||||||
|
|
||||||
|
if (hasFocus && LauncherPreferences.display().hideNavigationBar()) {
|
||||||
|
hideNavigationBar()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun onStart() {
|
override fun onStart() {
|
||||||
super<Activity>.onStart()
|
super<Activity>.onStart()
|
||||||
|
|
|
@ -8,14 +8,14 @@ import android.content.res.Resources
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
import android.util.Log
|
import android.util.Log
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.core.view.ViewCompat
|
import androidx.core.view.ViewCompat
|
||||||
import androidx.core.view.WindowInsetsCompat
|
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.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.preferences.LauncherPreferences
|
||||||
import de.jrpie.android.launcher.ui.UIObject
|
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.AppWidget
|
||||||
import de.jrpie.android.launcher.widgets.WidgetPanel
|
import de.jrpie.android.launcher.widgets.WidgetPanel
|
||||||
import de.jrpie.android.launcher.widgets.WidgetPosition
|
import de.jrpie.android.launcher.widgets.WidgetPosition
|
||||||
|
@ -30,14 +30,16 @@ const val REQUEST_PICK_APPWIDGET = 2
|
||||||
const val EXTRA_PANEL_ID = "widgetPanelId"
|
const val EXTRA_PANEL_ID = "widgetPanelId"
|
||||||
|
|
||||||
// We can't use AppCompatActivity, since some AppWidgets don't work there.
|
// 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 var panelId: Int = WidgetPanel.HOME.id
|
||||||
|
private lateinit var binding: ActivityManageWidgetsBinding
|
||||||
|
|
||||||
private var sharedPreferencesListener =
|
private var sharedPreferencesListener =
|
||||||
SharedPreferences.OnSharedPreferenceChangeListener { _, prefKey ->
|
SharedPreferences.OnSharedPreferenceChangeListener { _, prefKey ->
|
||||||
if (prefKey == LauncherPreferences.widgets().keys().widgets()) {
|
if (prefKey == LauncherPreferences.widgets().keys().widgets()) {
|
||||||
findViewById<WidgetContainerView>(R.id.manage_widgets_container).updateWidgets(this,
|
binding.manageWidgetsContainer.updateWidgets(
|
||||||
|
this,
|
||||||
LauncherPreferences.widgets().widgets()
|
LauncherPreferences.widgets().widgets()
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -46,21 +48,33 @@ class ManageWidgetsActivity : Activity(), UIObject {
|
||||||
override fun onCreate(savedInstanceState: Bundle?) {
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
super<Activity>.onCreate(savedInstanceState)
|
super<Activity>.onCreate(savedInstanceState)
|
||||||
super<UIObject>.onCreate()
|
super<UIObject>.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
|
panelId = intent.extras?.getInt(EXTRA_PANEL_ID, WidgetPanel.HOME.id) ?: WidgetPanel.HOME.id
|
||||||
|
|
||||||
findViewById<FloatingActionButton>(R.id.manage_widgets_button_add).setOnClickListener {
|
binding.manageWidgetsButtonAdd.setOnClickListener {
|
||||||
selectWidget()
|
selectWidget()
|
||||||
}
|
}
|
||||||
|
|
||||||
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main)) { v, insets ->
|
// The widget container should extend below the status and navigation bars,
|
||||||
val systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars())
|
// so let's set an empty WindowInsetsListener to prevent it from being moved.
|
||||||
v.setPadding(systemBars.left, systemBars.top, systemBars.right, systemBars.bottom)
|
ViewCompat.setOnApplyWindowInsetsListener(binding.root) { _, windowInsets ->
|
||||||
insets
|
windowInsets
|
||||||
}
|
}
|
||||||
|
|
||||||
findViewById<WidgetContainerView>(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<ViewGroup.MarginLayoutParams> {
|
||||||
|
leftMargin = insets.left
|
||||||
|
bottomMargin = insets.bottom
|
||||||
|
rightMargin = insets.right
|
||||||
|
}
|
||||||
|
WindowInsetsCompat.CONSUMED
|
||||||
|
}
|
||||||
|
|
||||||
|
binding.manageWidgetsContainer.let {
|
||||||
it.widgetPanelId = panelId
|
it.widgetPanelId = panelId
|
||||||
it.updateWidgets(this, LauncherPreferences.widgets().widgets())
|
it.updateWidgets(this, LauncherPreferences.widgets().widgets())
|
||||||
}
|
}
|
||||||
|
@ -77,20 +91,23 @@ class ManageWidgetsActivity : Activity(), UIObject {
|
||||||
|
|
||||||
override fun onResume() {
|
override fun onResume() {
|
||||||
super.onResume()
|
super.onResume()
|
||||||
findViewById<WidgetContainerView>(R.id.manage_widgets_container).updateWidgets(this,
|
binding.manageWidgetsContainer.updateWidgets(
|
||||||
|
this,
|
||||||
LauncherPreferences.widgets().widgets()
|
LauncherPreferences.widgets().widgets()
|
||||||
)
|
)
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onWindowFocusChanged(hasFocus: Boolean) {
|
||||||
|
super.onWindowFocusChanged(hasFocus)
|
||||||
|
|
||||||
|
if (hasFocus && LauncherPreferences.display().hideNavigationBar()) {
|
||||||
|
hideNavigationBar()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
override fun getTheme(): Resources.Theme {
|
override fun getTheme(): Resources.Theme {
|
||||||
val mTheme = modifyTheme(super.getTheme())
|
return modifyTheme(super.getTheme())
|
||||||
mTheme.applyStyle(R.style.backgroundWallpaper, true)
|
|
||||||
LauncherPreferences.clock().font().applyToTheme(mTheme)
|
|
||||||
LauncherPreferences.theme().colorTheme().applyToTheme(
|
|
||||||
mTheme,
|
|
||||||
LauncherPreferences.theme().textShadow()
|
|
||||||
)
|
|
||||||
return mTheme
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
|
@ -100,7 +117,7 @@ class ManageWidgetsActivity : Activity(), UIObject {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
fun selectWidget() {
|
private fun selectWidget() {
|
||||||
val appWidgetHost = (application as Application).appWidgetHost
|
val appWidgetHost = (application as Application).appWidgetHost
|
||||||
startActivityForResult(
|
startActivityForResult(
|
||||||
Intent(this, SelectWidgetActivity::class.java).also {
|
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")
|
Log.i("Launcher", "creating widget")
|
||||||
val appWidgetManager = (application as Application).appWidgetManager
|
val appWidgetManager = (application as Application).appWidgetManager
|
||||||
val appWidgetId = data.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return
|
val appWidgetId = data.extras?.getInt(AppWidgetManager.EXTRA_APPWIDGET_ID) ?: return
|
||||||
|
@ -127,9 +144,10 @@ class ManageWidgetsActivity : Activity(), UIObject {
|
||||||
val display = windowManager.defaultDisplay
|
val display = windowManager.defaultDisplay
|
||||||
|
|
||||||
val position = WidgetPosition.fromAbsoluteRect(
|
val position = WidgetPosition.fromAbsoluteRect(
|
||||||
Rect(0,0,
|
Rect(
|
||||||
min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minWidth),
|
0, 0,
|
||||||
min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minHeight)
|
min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minWidth),
|
||||||
|
min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minHeight)
|
||||||
),
|
),
|
||||||
display.width,
|
display.width,
|
||||||
display.height
|
display.height
|
||||||
|
|
|
@ -95,6 +95,11 @@ class SelectWidgetActivity : AppCompatActivity(), UIObject {
|
||||||
layoutManager = viewManager
|
layoutManager = viewManager
|
||||||
adapter = viewAdapter
|
adapter = viewAdapter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
binding.selectWidgetClose.setOnClickListener {
|
||||||
|
setResult(RESULT_CANCELED)
|
||||||
|
finish()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun getTheme(): Resources.Theme {
|
override fun getTheme(): Resources.Theme {
|
||||||
|
|
|
@ -2,11 +2,13 @@ package de.jrpie.android.launcher.ui.widgets.manage
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.graphics.Canvas
|
import android.graphics.Canvas
|
||||||
|
import android.graphics.Color
|
||||||
import android.graphics.Paint
|
import android.graphics.Paint
|
||||||
import android.graphics.Rect
|
import android.graphics.Rect
|
||||||
import android.graphics.drawable.Drawable
|
import android.graphics.drawable.Drawable
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import android.widget.PopupMenu
|
import android.widget.PopupMenu
|
||||||
import androidx.core.graphics.toRectF
|
import androidx.core.graphics.toRectF
|
||||||
import de.jrpie.android.launcher.R
|
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]
|
* 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
|
var mode: WidgetManagerView.EditMode? = null
|
||||||
|
|
||||||
class Handle(val mode: WidgetManagerView.EditMode, val position: Rect)
|
class Handle(val mode: WidgetManagerView.EditMode, val position: Rect)
|
||||||
init {
|
init {
|
||||||
|
addView(popupAnchor)
|
||||||
|
setWillNotDraw(false)
|
||||||
handlePaint.style = Paint.Style.STROKE
|
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.style = Paint.Style.FILL_AND_STROKE
|
||||||
selectedHandlePaint.setARGB(100, 255, 255, 255)
|
selectedHandlePaint.setARGB(100, 255, 255, 255)
|
||||||
|
handlePaint.setShadowLayer(10f,0f,0f, Color.BLACK)
|
||||||
|
|
||||||
paint.style = Paint.Style.STROKE
|
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
|
private var preview: Drawable? = null
|
||||||
|
@ -75,21 +86,23 @@ class WidgetOverlayView : View {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
val bounds = getBounds()
|
val bounds = getBounds()
|
||||||
|
|
||||||
canvas.drawRoundRect(bounds.toRectF(), 5f, 5f, paint)
|
canvas.drawRoundRect(bounds.toRectF(), 5f, 5f, paint)
|
||||||
|
|
||||||
if (mode == null) {
|
if (mode == null) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
//preview?.bounds = bounds
|
//preview?.bounds = bounds
|
||||||
//preview?.draw(canvas)
|
//preview?.draw(canvas)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onLayout(changed: Boolean, l: Int, t: Int, r: Int, b: Int) {
|
||||||
|
popupAnchor.layout(0,0,0,0)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun showPopupMenu() {
|
fun showPopupMenu() {
|
||||||
val widget = Widget.byId(context, widgetId)?: return
|
val widget = Widget.byId(context, widgetId)?: return
|
||||||
val menu = PopupMenu(context, this)
|
val menu = PopupMenu(context, popupAnchor)
|
||||||
menu.menu.let {
|
menu.menu.let {
|
||||||
it.add(
|
it.add(
|
||||||
context.getString(R.string.widget_menu_remove)
|
context.getString(R.string.widget_menu_remove)
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
<androidx.constraintlayout.widget.ConstraintLayout
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||||
xmlns:tools="http://schemas.android.com/tools"
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
android:id="@+id/main"
|
android:id="@+id/main"
|
||||||
|
@ -7,6 +8,7 @@
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:fitsSystemWindows="true"
|
android:fitsSystemWindows="true"
|
||||||
tools:context=".ui.widgets.manage.ManageWidgetsActivity">
|
tools:context=".ui.widgets.manage.ManageWidgetsActivity">
|
||||||
|
|
||||||
<de.jrpie.android.launcher.ui.widgets.manage.WidgetManagerView
|
<de.jrpie.android.launcher.ui.widgets.manage.WidgetManagerView
|
||||||
android:id="@+id/manage_widgets_container"
|
android:id="@+id/manage_widgets_container"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
|
@ -22,4 +24,5 @@
|
||||||
android:src="@drawable/baseline_add_24"
|
android:src="@drawable/baseline_add_24"
|
||||||
app:layout_constraintBottom_toBottomOf="parent"
|
app:layout_constraintBottom_toBottomOf="parent"
|
||||||
app:layout_constraintEnd_toEndOf="parent" />
|
app:layout_constraintEnd_toEndOf="parent" />
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
|
||||||
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue