mirror of
https://github.com/SimpleMobileTools/Simple-Launcher.git
synced 2025-05-23 05:44:16 +02:00
adding a basic list adapter for widgets
This commit is contained in:
parent
de81ae1131
commit
d8129e2e55
@ -43,5 +43,5 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation 'com.github.SimpleMobileTools:Simple-Commons:813abeed27'
|
implementation 'com.github.SimpleMobileTools:Simple-Commons:28e3b108e7'
|
||||||
}
|
}
|
||||||
|
@ -13,6 +13,7 @@ import com.simplemobiletools.launcher.BuildConfig
|
|||||||
import com.simplemobiletools.launcher.R
|
import com.simplemobiletools.launcher.R
|
||||||
import com.simplemobiletools.launcher.fragments.AllAppsFragment
|
import com.simplemobiletools.launcher.fragments.AllAppsFragment
|
||||||
import com.simplemobiletools.launcher.fragments.MyFragment
|
import com.simplemobiletools.launcher.fragments.MyFragment
|
||||||
|
import com.simplemobiletools.launcher.fragments.WidgetsFragment
|
||||||
import com.simplemobiletools.launcher.interfaces.FlingListener
|
import com.simplemobiletools.launcher.interfaces.FlingListener
|
||||||
import kotlinx.android.synthetic.main.activity_main.*
|
import kotlinx.android.synthetic.main.activity_main.*
|
||||||
|
|
||||||
@ -47,6 +48,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
|||||||
super.onResume()
|
super.onResume()
|
||||||
updateStatusbarColor(Color.TRANSPARENT)
|
updateStatusbarColor(Color.TRANSPARENT)
|
||||||
(all_apps_fragment as AllAppsFragment).setupViews()
|
(all_apps_fragment as AllAppsFragment).setupViews()
|
||||||
|
(widgets_fragment as WidgetsFragment).setupViews()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onBackPressed() {
|
override fun onBackPressed() {
|
||||||
@ -62,6 +64,7 @@ class MainActivity : SimpleActivity(), FlingListener {
|
|||||||
override fun onConfigurationChanged(newConfig: Configuration) {
|
override fun onConfigurationChanged(newConfig: Configuration) {
|
||||||
super.onConfigurationChanged(newConfig)
|
super.onConfigurationChanged(newConfig)
|
||||||
(all_apps_fragment as AllAppsFragment).onConfigurationChanged()
|
(all_apps_fragment as AllAppsFragment).onConfigurationChanged()
|
||||||
|
(widgets_fragment as WidgetsFragment).onConfigurationChanged()
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onTouchEvent(event: MotionEvent): Boolean {
|
override fun onTouchEvent(event: MotionEvent): Boolean {
|
||||||
|
@ -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
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -3,24 +3,36 @@ package com.simplemobiletools.launcher.fragments
|
|||||||
import android.appwidget.AppWidgetManager
|
import android.appwidget.AppWidgetManager
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.util.AttributeSet
|
import android.util.AttributeSet
|
||||||
import com.simplemobiletools.commons.extensions.applyColorFilter
|
import android.view.Surface
|
||||||
import com.simplemobiletools.commons.extensions.getProperBackgroundColor
|
import android.view.WindowManager
|
||||||
import com.simplemobiletools.commons.extensions.statusBarHeight
|
import com.simplemobiletools.commons.extensions.*
|
||||||
import com.simplemobiletools.commons.helpers.ensureBackgroundThread
|
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.activities.MainActivity
|
||||||
|
import com.simplemobiletools.launcher.adapters.WidgetsAdapter
|
||||||
import com.simplemobiletools.launcher.models.AppWidget
|
import com.simplemobiletools.launcher.models.AppWidget
|
||||||
|
import kotlinx.android.synthetic.main.widgets_fragment.view.*
|
||||||
|
|
||||||
class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment(context, attributeSet) {
|
class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment(context, attributeSet) {
|
||||||
override fun setupFragment(activity: MainActivity) {
|
override fun setupFragment(activity: MainActivity) {
|
||||||
this.activity = activity
|
this.activity = activity
|
||||||
background.applyColorFilter(activity.getProperBackgroundColor())
|
background.applyColorFilter(activity.getProperBackgroundColor())
|
||||||
setPadding(0, activity.statusBarHeight, 0, 0)
|
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 {
|
ensureBackgroundThread {
|
||||||
var widgets = ArrayList<AppWidget>()
|
var appWidgets = ArrayList<AppWidget>()
|
||||||
val manager = AppWidgetManager.getInstance(context)
|
val manager = AppWidgetManager.getInstance(context)
|
||||||
val infoList = manager.installedProviders
|
val infoList = manager.installedProviders
|
||||||
for (info in infoList) {
|
for (info in infoList) {
|
||||||
@ -30,13 +42,59 @@ class WidgetsFragment(context: Context, attributeSet: AttributeSet) : MyFragment
|
|||||||
val width = info.minWidth
|
val width = info.minWidth
|
||||||
val height = info.minHeight
|
val height = info.minHeight
|
||||||
val widget = AppWidget(appPackageName, appTitle, widgetTitle, width, height)
|
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? {
|
private fun getAppNameFromPackage(packageName: String): String? {
|
||||||
try {
|
try {
|
||||||
val appInfo = activity!!.packageManager.getApplicationInfo(packageName, 0)
|
val appInfo = activity!!.packageManager.getApplicationInfo(packageName, 0)
|
||||||
|
18
app/src/main/res/layout/item_widget_app.xml
Normal file
18
app/src/main/res/layout/item_widget_app.xml
Normal 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>
|
@ -13,7 +13,7 @@
|
|||||||
app:fastScrollEnabled="false">
|
app:fastScrollEnabled="false">
|
||||||
|
|
||||||
<com.simplemobiletools.commons.views.MyRecyclerView
|
<com.simplemobiletools.commons.views.MyRecyclerView
|
||||||
android:id="@+id/widgets_grid"
|
android:id="@+id/widgets_list"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:clipToPadding="false"
|
android:clipToPadding="false"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user