diff --git a/app/build.gradle b/app/build.gradle index 921ffd0..d69a660 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -43,5 +43,5 @@ android { } dependencies { - implementation 'com.github.SimpleMobileTools:Simple-Commons:813abeed27' + implementation 'com.github.SimpleMobileTools:Simple-Commons:28e3b108e7' } diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt index f0209fd..63fb0f4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/activities/MainActivity.kt @@ -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 { diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/adapters/WidgetsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/adapters/WidgetsAdapter.kt new file mode 100644 index 0000000..18c4b64 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/adapters/WidgetsAdapter.kt @@ -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, + val itemClick: (Any) -> Unit +) : RecyclerView.Adapter() { + + 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 + } + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/WidgetsFragment.kt b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/WidgetsFragment.kt index bb9e4d2..ad17bb5 100644 --- a/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/WidgetsFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/launcher/fragments/WidgetsFragment.kt @@ -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() + var appWidgets = ArrayList() 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 + appWidgets = appWidgets.sortedWith(compareBy({ it.appTitle }, { it.widgetTitle })).toMutableList() as ArrayList + setupAdapter(appWidgets) } } + private fun setupAdapter(appWidgets: ArrayList) { + 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) diff --git a/app/src/main/res/layout/item_widget_app.xml b/app/src/main/res/layout/item_widget_app.xml new file mode 100644 index 0000000..78cbfcc --- /dev/null +++ b/app/src/main/res/layout/item_widget_app.xml @@ -0,0 +1,18 @@ + + + + + + diff --git a/app/src/main/res/layout/widgets_fragment.xml b/app/src/main/res/layout/widgets_fragment.xml index 79ac5b9..83e41b1 100644 --- a/app/src/main/res/layout/widgets_fragment.xml +++ b/app/src/main/res/layout/widgets_fragment.xml @@ -13,7 +13,7 @@ app:fastScrollEnabled="false">