diff --git a/app/build.gradle b/app/build.gradle index 42f0a2b..7e92f3b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -23,8 +23,8 @@ android { minSdkVersion 21 targetSdkVersion 35 compileSdk 35 - versionCode 46 - versionName "0.2.1" + versionCode 45 + versionName "0.2.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 1b10784..e60a85b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -27,7 +27,6 @@ android:exported="false" /> = mutableSetOf() - - if (!BuildConfig.DEBUG) { - val launcher = DetailedAppInfo.fromAppInfo( - AppInfo( - BuildConfig.APPLICATION_ID, - HomeActivity::class.java.name, - INVALID_USER - ), context - ) - launcher?.getRawInfo()?.let { hidden.add(it) } - Log.i(TAG, "Hiding ${launcher?.getRawInfo()}") - } + val launcher = DetailedAppInfo.fromAppInfo( + AppInfo( + BuildConfig.APPLICATION_ID, + HomeActivity::class.java.name, + INVALID_USER + ), context + ) + launcher?.getRawInfo()?.let { hidden.add(it) } + Log.i(TAG,"Hiding ${launcher?.getRawInfo()}") LauncherPreferences.apps().hidden(hidden) Action.resetToDefaultActions(context) diff --git a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt index a9ab3a1..aaeeb18 100644 --- a/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt +++ b/app/src/main/java/de/jrpie/android/launcher/preferences/legacy/Version4.kt @@ -21,5 +21,7 @@ fun migratePreferencesFromVersion4(context: Context) { ) ) ) + + LauncherPreferences.internal().versionCode(100) } \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt index f501107..192a8e9 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/HomeActivity.kt @@ -12,10 +12,11 @@ import android.view.MotionEvent import android.view.View import android.window.OnBackInvokedDispatcher import de.jrpie.android.launcher.Application +import de.jrpie.android.launcher.R import de.jrpie.android.launcher.actions.Action import de.jrpie.android.launcher.actions.Gesture import de.jrpie.android.launcher.actions.LauncherAction -import de.jrpie.android.launcher.databinding.ActivityHomeBinding +import de.jrpie.android.launcher.databinding.HomeBinding import de.jrpie.android.launcher.openTutorial import de.jrpie.android.launcher.preferences.LauncherPreferences import de.jrpie.android.launcher.ui.tutorial.TutorialActivity @@ -34,7 +35,7 @@ import de.jrpie.android.launcher.ui.tutorial.TutorialActivity */ class HomeActivity : UIObject, Activity() { - private lateinit var binding: ActivityHomeBinding + private lateinit var binding: HomeBinding private var touchGestureDetector: TouchGestureDetector? = null private var sharedPreferencesListener = @@ -59,7 +60,7 @@ class HomeActivity : UIObject, Activity() { // Initialise layout - binding = ActivityHomeBinding.inflate(layoutInflater) + binding = HomeBinding.inflate(layoutInflater) setContentView(binding.root) @@ -128,7 +129,15 @@ class HomeActivity : UIObject, Activity() { } override fun getTheme(): Resources.Theme { - return modifyTheme(super.getTheme()) + 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 } override fun onResume() { diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt b/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt index b292425..51324f4 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/UIObject.kt @@ -10,7 +10,6 @@ import android.view.WindowInsets import android.view.WindowInsetsController import android.view.WindowManager 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. @@ -66,14 +65,8 @@ interface UIObject { theme, LauncherPreferences.theme().textShadow() ) - - if (isHomeScreen()) { - Background.TRANSPARENT.applyToTheme(theme) - LauncherPreferences.clock().font().applyToTheme(theme) - } else { - LauncherPreferences.theme().background().applyToTheme(theme) - LauncherPreferences.theme().font().applyToTheme(theme) - } + LauncherPreferences.theme().background().applyToTheme(theme) + LauncherPreferences.theme().font().applyToTheme(theme) return theme } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt index 759d8cd..dea0bcf 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/settings/meta/SettingsFragmentMeta.kt @@ -132,12 +132,7 @@ class SettingsFragmentMeta : Fragment(), UIObject { startActivity(Intent(this.context, LegalInfoActivity::class.java)) } - // version binding.settingsMetaTextVersion.text = BuildConfig.VERSION_NAME - binding.settingsMetaTextVersion.setOnClickListener { - val deviceInfo = getDeviceInfo() - copyToClipboard(requireContext(), deviceInfo) - } } } diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/ClockView.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/ClockView.kt index 54d3869..33c4888 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/ClockView.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/ClockView.kt @@ -6,13 +6,13 @@ import android.view.LayoutInflater import androidx.constraintlayout.widget.ConstraintLayout import androidx.core.view.isVisible import de.jrpie.android.launcher.actions.Gesture -import de.jrpie.android.launcher.databinding.WidgetClockBinding +import de.jrpie.android.launcher.databinding.ClockBinding import de.jrpie.android.launcher.preferences.LauncherPreferences import java.util.Locale class ClockView(context: Context, attrs: AttributeSet? = null, val appWidgetId: Int): ConstraintLayout(context, attrs) { - val binding: WidgetClockBinding = WidgetClockBinding.inflate(LayoutInflater.from(context), this, true) + val binding: ClockBinding = ClockBinding.inflate(LayoutInflater.from(context), this, true) init { initClock() setOnClicks() diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/DebugInfoView.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/DebugInfoView.kt deleted file mode 100644 index d0ab70a..0000000 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/DebugInfoView.kt +++ /dev/null @@ -1,17 +0,0 @@ -package de.jrpie.android.launcher.ui.widgets - -import android.content.Context -import android.util.AttributeSet -import android.view.LayoutInflater -import androidx.constraintlayout.widget.ConstraintLayout -import de.jrpie.android.launcher.databinding.WidgetDebugInfoBinding -import de.jrpie.android.launcher.getDeviceInfo - -class DebugInfoView(context: Context, attrs: AttributeSet? = null, val appWidgetId: Int): ConstraintLayout(context, attrs) { - - val binding: WidgetDebugInfoBinding = WidgetDebugInfoBinding.inflate(LayoutInflater.from(context), this, true) - - init { - binding.debugInfoText.text = getDeviceInfo() - } -} \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt index 4392451..5217bff 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/WidgetPanelActivity.kt @@ -3,7 +3,6 @@ package de.jrpie.android.launcher.ui.widgets import android.app.Activity import android.content.res.Resources import android.os.Bundle -import androidx.core.view.ViewCompat import de.jrpie.android.launcher.R import de.jrpie.android.launcher.databinding.ActivityWidgetPanelBinding import de.jrpie.android.launcher.preferences.LauncherPreferences @@ -13,20 +12,13 @@ import de.jrpie.android.launcher.widgets.WidgetPanel class WidgetPanelActivity : Activity(), UIObject { lateinit var binding: ActivityWidgetPanelBinding - private var widgetPanelId: Int = WidgetPanel.HOME.id + var widgetPanelId: Int = WidgetPanel.Companion.HOME.id override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) super.onCreate() - widgetPanelId = intent.getIntExtra(EXTRA_PANEL_ID, WidgetPanel.HOME.id) + widgetPanelId = intent.getIntExtra(EXTRA_PANEL_ID, WidgetPanel.Companion.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, @@ -46,13 +38,6 @@ 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/ManageWidgetPanelsActivity.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetPanelsActivity.kt index 163777f..cb57fda 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetPanelsActivity.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/ManageWidgetPanelsActivity.kt @@ -18,16 +18,13 @@ import de.jrpie.android.launcher.widgets.updateWidgetPanel class ManageWidgetPanelsActivity : AppCompatActivity(), UIObject { - @SuppressLint("NotifyDataSetChanged") private val sharedPreferencesListener = SharedPreferences.OnSharedPreferenceChangeListener { _, prefKey -> - if ( - prefKey == LauncherPreferences.widgets().keys().customPanels() - || prefKey == LauncherPreferences.widgets().keys().widgets() - ) { + if (prefKey == LauncherPreferences.widgets().keys().customPanels()) { viewAdapter.widgetPanels = (LauncherPreferences.widgets().customPanels() ?: setOf()).toTypedArray() + @SuppressLint("NotifyDataSetChanged") viewAdapter.notifyDataSetChanged() } } @@ -79,6 +76,7 @@ class ManageWidgetPanelsActivity : AppCompatActivity(), UIObject { ) ) } + true } } 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 4b5c0c2..a841919 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,21 +8,18 @@ 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 androidx.core.view.updateLayoutParams +import com.google.android.material.floatingactionbutton.FloatingActionButton import de.jrpie.android.launcher.Application -import de.jrpie.android.launcher.databinding.ActivityManageWidgetsBinding +import de.jrpie.android.launcher.R 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.GRID_SIZE import de.jrpie.android.launcher.widgets.WidgetPanel import de.jrpie.android.launcher.widgets.WidgetPosition -import kotlin.math.max import kotlin.math.min -import kotlin.math.roundToInt // http://coderender.blogspot.com/2012/01/hosting-android-widgets-my.html @@ -33,16 +30,14 @@ 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 : UIObject, Activity() { +class ManageWidgetsActivity : Activity(), UIObject { private var panelId: Int = WidgetPanel.HOME.id - private lateinit var binding: ActivityManageWidgetsBinding private var sharedPreferencesListener = SharedPreferences.OnSharedPreferenceChangeListener { _, prefKey -> if (prefKey == LauncherPreferences.widgets().keys().widgets()) { - binding.manageWidgetsContainer.updateWidgets( - this, + findViewById(R.id.manage_widgets_container).updateWidgets(this, LauncherPreferences.widgets().widgets() ) } @@ -51,33 +46,21 @@ class ManageWidgetsActivity : UIObject, Activity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) super.onCreate() - binding = ActivityManageWidgetsBinding.inflate(layoutInflater) - setContentView(binding.root) + setContentView(R.layout.activity_manage_widgets) panelId = intent.extras?.getInt(EXTRA_PANEL_ID, WidgetPanel.HOME.id) ?: WidgetPanel.HOME.id - binding.manageWidgetsButtonAdd.setOnClickListener { + findViewById(R.id.manage_widgets_button_add).setOnClickListener { selectWidget() } - // 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 + 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 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 { + findViewById(R.id.manage_widgets_container).let { it.widgetPanelId = panelId it.updateWidgets(this, LauncherPreferences.widgets().widgets()) } @@ -94,23 +77,20 @@ class ManageWidgetsActivity : UIObject, Activity() { override fun onResume() { super.onResume() - binding.manageWidgetsContainer.updateWidgets( - this, + findViewById(R.id.manage_widgets_container).updateWidgets(this, LauncherPreferences.widgets().widgets() ) } - - override fun onWindowFocusChanged(hasFocus: Boolean) { - super.onWindowFocusChanged(hasFocus) - - if (hasFocus && LauncherPreferences.display().hideNavigationBar()) { - hideNavigationBar() - } - } - override fun getTheme(): Resources.Theme { - return modifyTheme(super.getTheme()) + 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 } override fun onDestroy() { @@ -120,7 +100,7 @@ class ManageWidgetsActivity : UIObject, Activity() { } - private fun selectWidget() { + fun selectWidget() { val appWidgetHost = (application as Application).appWidgetHost startActivityForResult( Intent(this, SelectWidgetActivity::class.java).also { @@ -137,7 +117,7 @@ class ManageWidgetsActivity : UIObject, Activity() { } - private fun createWidget(data: Intent) { + 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 @@ -146,12 +126,13 @@ class ManageWidgetsActivity : UIObject, Activity() { val display = windowManager.defaultDisplay - val widgetInfo = appWidgetManager.getAppWidgetInfo(appWidgetId) - - val position = WidgetPosition.findFreeSpace( - WidgetPanel.byId(panelId), - max(3, (GRID_SIZE * (widgetInfo.minWidth) / display.width.toFloat()).roundToInt()), - max(3, (GRID_SIZE * (widgetInfo.minHeight) / display.height.toFloat()).roundToInt()) + val position = WidgetPosition.fromAbsoluteRect( + Rect(0,0, + min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minWidth), + min(400, appWidgetManager.getAppWidgetInfo(appWidgetId).minHeight) + ), + display.width, + display.height ) val widget = AppWidget(appWidgetId, position, panelId, provider) 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 61006b8..1b8a2d2 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,13 +2,11 @@ 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 @@ -22,32 +20,23 @@ private const val HANDLE_EDGE_SIZE = (1.2 * HANDLE_SIZE).toInt() /** * An overlay to show configuration options for a widget in [WidgetManagerView] */ -class WidgetOverlayView : ViewGroup { +class WidgetOverlayView : View { - 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.color = Color.WHITE - handlePaint.strokeWidth = 2f - handlePaint.setShadowLayer(10f,0f,0f, Color.BLACK) + handlePaint.setARGB(255, 255, 255, 255) 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.color = Color.WHITE - paint.setShadowLayer(10f,0f,0f, Color.BLACK) + paint.setARGB(255, 255, 255, 255) } private var preview: Drawable? = null @@ -86,23 +75,21 @@ class WidgetOverlayView : ViewGroup { } } 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, popupAnchor) + val menu = PopupMenu(context, this) menu.menu.let { it.add( context.getString(R.string.widget_menu_remove) diff --git a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetPanelsRecyclerAdapter.kt b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetPanelsRecyclerAdapter.kt index d27ba9a..40c2c2f 100644 --- a/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetPanelsRecyclerAdapter.kt +++ b/app/src/main/java/de/jrpie/android/launcher/ui/widgets/manage/WidgetPanelsRecyclerAdapter.kt @@ -26,16 +26,10 @@ class WidgetPanelsRecyclerAdapter( class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) { var labelView: TextView = itemView.findViewById(R.id.list_widget_panels_label) - var infoView: TextView = itemView.findViewById(R.id.list_widget_panels_info) } override fun onBindViewHolder(viewHolder: ViewHolder, i: Int) { viewHolder.labelView.text = widgetPanels[i].label - val numWidgets = widgetPanels[i].getWidgets().size - viewHolder.infoView.text = context.resources.getQuantityString( - R.plurals.widget_panel_number_of_widgets, - numWidgets, numWidgets - ) viewHolder.itemView.setOnClickListener { onSelectWidgetPanel(widgetPanels[i]) diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/DebugInfoWidget.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/DebugInfoWidget.kt deleted file mode 100644 index 01ecddc..0000000 --- a/app/src/main/java/de/jrpie/android/launcher/widgets/DebugInfoWidget.kt +++ /dev/null @@ -1,42 +0,0 @@ -package de.jrpie.android.launcher.widgets - -import android.app.Activity -import android.content.Context -import android.graphics.drawable.Drawable -import android.view.View -import de.jrpie.android.launcher.ui.widgets.DebugInfoView -import kotlinx.serialization.SerialName -import kotlinx.serialization.Serializable - - -@Serializable -@SerialName("widget:debuginfo") -class DebugInfoWidget( - override val id: Int, - override var position: WidgetPosition, - override val panelId: Int, - override var allowInteraction: Boolean = true -) : Widget() { - - override fun createView(activity: Activity): View { - return DebugInfoView(activity, null, id) - } - - override fun findView(views: Sequence): DebugInfoView? { - return views.mapNotNull { it as? DebugInfoView }.firstOrNull { it.appWidgetId == id } - } - - override fun getPreview(context: Context): Drawable? { - return null - } - - override fun getIcon(context: Context): Drawable? { - return null - } - - override fun isConfigurable(context: Context): Boolean { - return false - } - - override fun configure(activity: Activity, requestCode: Int) { } -} \ No newline at end of file diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/LauncherWidgetProvider.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/LauncherWidgetProvider.kt index 92f33a9..018b29b 100644 --- a/app/src/main/java/de/jrpie/android/launcher/widgets/LauncherWidgetProvider.kt +++ b/app/src/main/java/de/jrpie/android/launcher/widgets/LauncherWidgetProvider.kt @@ -37,14 +37,13 @@ class LauncherAppWidgetProvider(val info: AppWidgetProviderInfo) : LauncherWidge } } +class LauncherClockWidgetProvider : LauncherWidgetProvider() { -data object LauncherClockWidgetProvider : LauncherWidgetProvider() { - - override fun loadLabel(context: Context): CharSequence { + override fun loadLabel(context: Context): CharSequence? { return context.getString(R.string.widget_clock_label) } - override fun loadDescription(context: Context): CharSequence { + override fun loadDescription(context: Context): CharSequence? { return context.getString(R.string.widget_clock_description) } @@ -55,4 +54,5 @@ data object LauncherClockWidgetProvider : LauncherWidgetProvider() { override fun loadIcon(context: Context): Drawable? { return AppCompatResources.getDrawable(context, R.drawable.baseline_clock_24) } -} \ No newline at end of file +} + diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt index 28539a2..e31250b 100644 --- a/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt +++ b/app/src/main/java/de/jrpie/android/launcher/widgets/Widget.kt @@ -4,6 +4,7 @@ import android.app.Activity import android.content.Context import android.graphics.drawable.Drawable import android.view.View +import de.jrpie.android.launcher.Application import de.jrpie.android.launcher.preferences.LauncherPreferences import kotlinx.serialization.Serializable import kotlinx.serialization.json.Json diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPanel.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPanel.kt index e56983a..93e588d 100644 --- a/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPanel.kt +++ b/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPanel.kt @@ -32,12 +32,6 @@ class WidgetPanel(val id: Int, var label: String) { .filter { it.panelId == this.id }.forEach { it.delete(context) } } - fun getWidgets(): List { - return LauncherPreferences.widgets().widgets().filter { - it.panelId == this.id - } - } - companion object { val HOME = WidgetPanel(0, "home") diff --git a/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPosition.kt b/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPosition.kt index e51f00c..b575665 100644 --- a/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPosition.kt +++ b/app/src/main/java/de/jrpie/android/launcher/widgets/WidgetPosition.kt @@ -11,20 +11,9 @@ const val GRID_SIZE: Short = 12 @Serializable data class WidgetPosition(var x: Short, var y: Short, var width: Short, var height: Short) { - constructor(rect: Rect) : this( - rect.left.toShort(), - rect.top.toShort(), - (rect.right - rect.left).toShort(), - (rect.bottom - rect.top).toShort() - ) - - fun toRect(): Rect { - return Rect(x.toInt(), y.toInt(), x + width, y + height) - } - fun getAbsoluteRect(screenWidth: Int, screenHeight: Int): Rect { val gridWidth = screenWidth / GRID_SIZE.toFloat() - val gridHeight = screenHeight / GRID_SIZE.toFloat() + val gridHeight= screenHeight / GRID_SIZE.toFloat() return Rect( (x * gridWidth).toInt(), @@ -34,33 +23,25 @@ data class WidgetPosition(var x: Short, var y: Short, var width: Short, var heig ) } - companion object { fun fromAbsoluteRect(absolute: Rect, screenWidth: Int, screenHeight: Int): WidgetPosition { val gridWidth = screenWidth / GRID_SIZE.toFloat() - val gridHeight = screenHeight / GRID_SIZE.toFloat() + val gridHeight= screenHeight / GRID_SIZE.toFloat() - val x = (absolute.left / gridWidth).roundToInt().toShort() - .coerceIn(0, (GRID_SIZE - 1).toShort()) - val y = (absolute.top / gridHeight).roundToInt().toShort() - .coerceIn(0, (GRID_SIZE - 1).toShort()) + val x = (absolute.left / gridWidth).roundToInt().toShort().coerceIn(0, (GRID_SIZE-1).toShort()) + val y = (absolute.top / gridHeight).roundToInt().toShort().coerceIn(0, (GRID_SIZE-1).toShort()) val w = max(2, ((absolute.right - absolute.left) / gridWidth).roundToInt()).toShort() val h = max(2, ((absolute.bottom - absolute.top) / gridHeight).roundToInt()).toShort() - return WidgetPosition(x, y, w, h) + return WidgetPosition(x,y,w,h) } - fun center( - minWidth: Int, - minHeight: Int, - screenWidth: Int, - screenHeight: Int - ): WidgetPosition { + fun center(minWidth: Int, minHeight: Int, screenWidth: Int, screenHeight: Int): WidgetPosition { val gridWidth = screenWidth / GRID_SIZE.toFloat() - val gridHeight = screenHeight / GRID_SIZE.toFloat() + val gridHeight= screenHeight / GRID_SIZE.toFloat() val cellsWidth = ceil(minWidth / gridWidth).toInt().toShort() val cellsHeight = ceil(minHeight / gridHeight).toInt().toShort() @@ -71,32 +52,7 @@ data class WidgetPosition(var x: Short, var y: Short, var width: Short, var heig cellsWidth, cellsHeight ) - } - fun findFreeSpace( - widgetPanel: WidgetPanel?, - minWidth: Int, - minHeight: Int - ): WidgetPosition { - val rect = Rect(0, 0, minWidth, minHeight) - if (widgetPanel == null) { - return WidgetPosition(rect) - } - - val widgets = widgetPanel.getWidgets().map { it.position.toRect() } - - for (x in 0.. { - val list = mutableListOf(LauncherClockWidgetProvider) + val list = mutableListOf(LauncherClockWidgetProvider()) val appWidgetManager = context.getAppWidgetManager() val profiles = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -68,9 +68,11 @@ fun getAppWidgetProviders( context: Context ): List { }.flatten() ) + return list } + fun updateWidget(widget: Widget) { LauncherPreferences.widgets().widgets( (LauncherPreferences.widgets().widgets() ?: setOf()) diff --git a/app/src/main/res/layout/activity_manage_widgets.xml b/app/src/main/res/layout/activity_manage_widgets.xml index 66404ee..c77f0e3 100644 --- a/app/src/main/res/layout/activity_manage_widgets.xml +++ b/app/src/main/res/layout/activity_manage_widgets.xml @@ -1,6 +1,5 @@ - - - - + \ No newline at end of file diff --git a/app/src/main/res/layout/widget_clock.xml b/app/src/main/res/layout/clock.xml similarity index 100% rename from app/src/main/res/layout/widget_clock.xml rename to app/src/main/res/layout/clock.xml diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/home.xml similarity index 100% rename from app/src/main/res/layout/activity_home.xml rename to app/src/main/res/layout/home.xml diff --git a/app/src/main/res/layout/list_widget_panels_row.xml b/app/src/main/res/layout/list_widget_panels_row.xml index 835050f..53f7449 100644 --- a/app/src/main/res/layout/list_widget_panels_row.xml +++ b/app/src/main/res/layout/list_widget_panels_row.xml @@ -1,7 +1,6 @@ - - \ No newline at end of file diff --git a/app/src/main/res/layout/widget_debug_info.xml b/app/src/main/res/layout/widget_debug_info.xml deleted file mode 100644 index 1de9e43..0000000 --- a/app/src/main/res/layout/widget_debug_info.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index d399d12..46fce3d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -406,8 +406,8 @@ Widget Panel #%1$d - Contains %1$d widget. - Contains %1$d widgets. + Contains %d widget. + Contains %d widgets. diff --git a/fastlane/metadata/android/en-US/changelogs/46.txt b/fastlane/metadata/android/en-US/changelogs/46.txt deleted file mode 100644 index 7d7f599..0000000 --- a/fastlane/metadata/android/en-US/changelogs/46.txt +++ /dev/null @@ -1,2 +0,0 @@ -* Fixed several bugs related to widgets -* Copy device info when clicking the version number (thank you, wassupluke!)