adding a basic list adapter for widgets

This commit is contained in:
tibbi 2022-09-03 21:16:04 +02:00
parent de81ae1131
commit d8129e2e55
6 changed files with 131 additions and 10 deletions

View File

@ -43,5 +43,5 @@ android {
}
dependencies {
implementation 'com.github.SimpleMobileTools:Simple-Commons:813abeed27'
implementation 'com.github.SimpleMobileTools:Simple-Commons:28e3b108e7'
}

View File

@ -13,6 +13,7 @@ import com.simplemobiletools.launcher.BuildConfig
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.fragments.AllAppsFragment
import com.simplemobiletools.launcher.fragments.MyFragment
import com.simplemobiletools.launcher.fragments.WidgetsFragment
import com.simplemobiletools.launcher.interfaces.FlingListener
import kotlinx.android.synthetic.main.activity_main.*
@ -47,6 +48,7 @@ class MainActivity : SimpleActivity(), FlingListener {
super.onResume()
updateStatusbarColor(Color.TRANSPARENT)
(all_apps_fragment as AllAppsFragment).setupViews()
(widgets_fragment as WidgetsFragment).setupViews()
}
override fun onBackPressed() {
@ -62,6 +64,7 @@ class MainActivity : SimpleActivity(), FlingListener {
override fun onConfigurationChanged(newConfig: Configuration) {
super.onConfigurationChanged(newConfig)
(all_apps_fragment as AllAppsFragment).onConfigurationChanged()
(widgets_fragment as WidgetsFragment).onConfigurationChanged()
}
override fun onTouchEvent(event: MotionEvent): Boolean {

View File

@ -0,0 +1,42 @@
package com.simplemobiletools.launcher.adapters
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import androidx.recyclerview.widget.RecyclerView
import com.simplemobiletools.commons.extensions.getProperTextColor
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.SimpleActivity
import com.simplemobiletools.launcher.models.AppWidget
import kotlinx.android.synthetic.main.item_widget_app.view.*
class WidgetsAdapter(
val activity: SimpleActivity,
val appWidgets: ArrayList<AppWidget>,
val itemClick: (Any) -> Unit
) : RecyclerView.Adapter<WidgetsAdapter.ViewHolder>() {
private var textColor = activity.getProperTextColor()
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
val view = LayoutInflater.from(parent.context).inflate(R.layout.item_widget_app, parent, false)
return ViewHolder(view)
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.bindView(appWidgets[position])
}
override fun getItemCount() = appWidgets.size
inner class ViewHolder(view: View) : RecyclerView.ViewHolder(view) {
fun bindView(widget: AppWidget): View {
itemView.apply {
widget_app_title.text = widget.appTitle
widget_app_title.setTextColor(textColor)
}
return itemView
}
}
}

View File

@ -3,24 +3,36 @@ package com.simplemobiletools.launcher.fragments
import android.appwidget.AppWidgetManager
import android.content.Context
import android.util.AttributeSet
import com.simplemobiletools.commons.extensions.applyColorFilter
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
import com.simplemobiletools.commons.extensions.statusBarHeight
import android.view.Surface
import android.view.WindowManager
import com.simplemobiletools.commons.extensions.*
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
import com.simplemobiletools.commons.helpers.isRPlus
import com.simplemobiletools.launcher.R
import com.simplemobiletools.launcher.activities.MainActivity
import com.simplemobiletools.launcher.adapters.WidgetsAdapter
import com.simplemobiletools.launcher.models.AppWidget
import kotlinx.android.synthetic.main.widgets_fragment.view.*
class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment(context, attributeSet) {
override fun setupFragment(activity: MainActivity) {
this.activity = activity
background.applyColorFilter(activity.getProperBackgroundColor())
setPadding(0, activity.statusBarHeight, 0, 0)
getWidgets()
getAppWidgets()
}
private fun getWidgets() {
fun onConfigurationChanged() {
widgets_list.scrollToPosition(0)
setupViews()
val appWidgets = (widgets_list.adapter as WidgetsAdapter).appWidgets
setupAdapter(appWidgets)
}
private fun getAppWidgets() {
ensureBackgroundThread {
var widgets = ArrayList<AppWidget>()
var appWidgets = ArrayList<AppWidget>()
val manager = AppWidgetManager.getInstance(context)
val infoList = manager.installedProviders
for (info in infoList) {
@ -30,13 +42,59 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
val width = info.minWidth
val height = info.minHeight
val widget = AppWidget(appPackageName, appTitle, widgetTitle, width, height)
widgets.add(widget)
appWidgets.add(widget)
}
widgets = widgets.sortedWith(compareBy({ it.appTitle }, { it.widgetTitle })).toMutableList() as ArrayList<AppWidget>
appWidgets = appWidgets.sortedWith(compareBy({ it.appTitle }, { it.widgetTitle })).toMutableList() as ArrayList<AppWidget>
setupAdapter(appWidgets)
}
}
private fun setupAdapter(appWidgets: ArrayList<AppWidget>) {
activity?.runOnUiThread {
WidgetsAdapter(activity!!, appWidgets) {
}.apply {
widgets_list.adapter = this
}
}
}
fun setupViews() {
if (activity == null) {
return
}
widgets_fastscroller.updateColors(context.getProperPrimaryColor())
var bottomListPadding = 0
var leftListPadding = 0
var rightListPadding = 0
if (activity!!.navigationBarOnBottom) {
bottomListPadding = activity!!.navigationBarHeight
leftListPadding = 0
rightListPadding = 0
} else if (activity!!.navigationBarOnSide) {
bottomListPadding = 0
val display = if (isRPlus()) {
display!!
} else {
(activity!!.getSystemService(Context.WINDOW_SERVICE) as WindowManager).defaultDisplay
}
if (display.rotation == Surface.ROTATION_90) {
rightListPadding = activity!!.navigationBarWidth
} else if (display.rotation == Surface.ROTATION_270) {
leftListPadding = activity!!.navigationBarWidth
}
}
widgets_list.setPadding(0, 0, resources.getDimension(R.dimen.medium_margin).toInt(), bottomListPadding)
widgets_fastscroller.setPadding(leftListPadding, 0, rightListPadding, 0)
}
private fun getAppNameFromPackage(packageName: String): String? {
try {
val appInfo = activity!!.packageManager.getApplicationInfo(packageName, 0)

View File

@ -0,0 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/widget_app_holder"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<TextView
android:id="@+id/widget_app_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:ellipsize="end"
android:maxLines="1"
android:padding="@dimen/normal_margin"
android:textSize="@dimen/bigger_text_size"
tools:text="@string/app_name" />
</RelativeLayout>

View File

@ -13,7 +13,7 @@
app:fastScrollEnabled="false">
<com.simplemobiletools.commons.views.MyRecyclerView
android:id="@+id/widgets_grid"
android:id="@+id/widgets_list"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipToPadding="false"