optimizing checklist widget loading

This commit is contained in:
tibbi 2018-12-09 17:37:31 +01:00
parent b8f18f9ae9
commit a733d9021e
2 changed files with 34 additions and 12 deletions

View File

@ -10,35 +10,44 @@ import com.google.gson.reflect.TypeToken
import com.simplemobiletools.commons.extensions.setText import com.simplemobiletools.commons.extensions.setText
import com.simplemobiletools.commons.extensions.setTextSize import com.simplemobiletools.commons.extensions.setTextSize
import com.simplemobiletools.notes.pro.R import com.simplemobiletools.notes.pro.R
import com.simplemobiletools.notes.pro.R.id.checklist_title
import com.simplemobiletools.notes.pro.R.id.widget_text_holder import com.simplemobiletools.notes.pro.R.id.widget_text_holder
import com.simplemobiletools.notes.pro.extensions.config import com.simplemobiletools.notes.pro.extensions.config
import com.simplemobiletools.notes.pro.extensions.getTextSize import com.simplemobiletools.notes.pro.extensions.getTextSize
import com.simplemobiletools.notes.pro.extensions.notesDB import com.simplemobiletools.notes.pro.extensions.notesDB
import com.simplemobiletools.notes.pro.helpers.* import com.simplemobiletools.notes.pro.helpers.*
import com.simplemobiletools.notes.pro.models.ChecklistItem import com.simplemobiletools.notes.pro.models.ChecklistItem
import com.simplemobiletools.notes.pro.models.Note
class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsService.RemoteViewsFactory { class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsService.RemoteViewsFactory {
private val textIds = arrayOf(R.id.widget_text_left, R.id.widget_text_center, R.id.widget_text_right) private val textIds = arrayOf(R.id.widget_text_left, R.id.widget_text_center, R.id.widget_text_right)
private var widgetTextColor = context.config.widgetTextColor private var widgetTextColor = context.config.widgetTextColor
private var note: Note? = null
private var checklistItems = ArrayList<ChecklistItem>()
override fun getViewAt(position: Int): RemoteViews { override fun getViewAt(position: Int): RemoteViews {
val noteId = intent.getLongExtra(NOTE_ID, 0L) val noteId = intent.getLongExtra(NOTE_ID, 0L)
val remoteView: RemoteViews val remoteView: RemoteViews
val note = context.notesDB.getNoteWithId(noteId) ?: return RemoteViews(context.packageName, R.layout.widget_text_layout) if (note == null) {
return RemoteViews(context.packageName, R.layout.widget_text_layout)
}
val textSize = context.getTextSize() / context.resources.displayMetrics.density val textSize = context.getTextSize() / context.resources.displayMetrics.density
if (note.type == TYPE_CHECKLIST) { if (note!!.type == TYPE_CHECKLIST) {
val checklistItemType = object : TypeToken<List<ChecklistItem>>() {}.type
val items = Gson().fromJson<ArrayList<ChecklistItem>>(note.value, checklistItemType) ?: ArrayList(1)
remoteView = RemoteViews(context.packageName, R.layout.item_checklist_widget).apply { remoteView = RemoteViews(context.packageName, R.layout.item_checklist_widget).apply {
setText(R.id.checklist_title, items.getOrNull(position)?.title ?: "") setText(R.id.checklist_title, checklistItems.getOrNull(position)?.title ?: "")
setTextColor(R.id.checklist_title, widgetTextColor) setTextColor(R.id.checklist_title, widgetTextColor)
setTextSize(R.id.checklist_title, textSize) setTextSize(R.id.checklist_title, textSize)
Intent().apply {
putExtra(OPEN_NOTE_ID, noteId)
setOnClickFillInIntent(checklist_title, this)
}
} }
} else { } else {
remoteView = RemoteViews(context.packageName, R.layout.widget_text_layout).apply { remoteView = RemoteViews(context.packageName, R.layout.widget_text_layout).apply {
val noteText = note.getNoteStoredValue() ?: "" val noteText = note!!.getNoteStoredValue() ?: ""
for (id in textIds) { for (id in textIds) {
setText(id, noteText) setText(id, noteText)
setTextColor(id, widgetTextColor) setTextColor(id, widgetTextColor)
@ -46,12 +55,12 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi
setViewVisibility(id, View.GONE) setViewVisibility(id, View.GONE)
} }
setViewVisibility(getProperTextView(context), View.VISIBLE) setViewVisibility(getProperTextView(context), View.VISIBLE)
}
}
Intent().apply { Intent().apply {
putExtra(OPEN_NOTE_ID, noteId) putExtra(OPEN_NOTE_ID, noteId)
remoteView.setOnClickFillInIntent(widget_text_holder, this) setOnClickFillInIntent(widget_text_holder, this)
}
}
} }
return remoteView return remoteView
@ -71,11 +80,23 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi
override fun onDataSetChanged() { override fun onDataSetChanged() {
widgetTextColor = context.config.widgetTextColor widgetTextColor = context.config.widgetTextColor
val noteId = intent.getLongExtra(NOTE_ID, 0L)
note = context.notesDB.getNoteWithId(noteId)
if (note?.type == TYPE_CHECKLIST) {
val checklistItemType = object : TypeToken<List<ChecklistItem>>() {}.type
checklistItems = Gson().fromJson<ArrayList<ChecklistItem>>(note!!.value, checklistItemType) ?: ArrayList(1)
}
} }
override fun hasStableIds() = true override fun hasStableIds() = true
override fun getCount() = 1 override fun getCount(): Int {
return if (note?.type == TYPE_CHECKLIST) {
checklistItems.size
} else {
1
}
}
override fun getViewTypeCount() = 2 override fun getViewTypeCount() = 2

View File

@ -8,6 +8,7 @@
android:layout_centerVertical="true" android:layout_centerVertical="true"
android:layout_marginTop="@dimen/medium_margin" android:layout_marginTop="@dimen/medium_margin"
android:layout_marginRight="@dimen/medium_margin" android:layout_marginRight="@dimen/medium_margin"
android:layout_marginBottom="@dimen/medium_margin"
android:layout_toLeftOf="@+id/checklist_image" android:layout_toLeftOf="@+id/checklist_image"
android:paddingLeft="@dimen/activity_margin" android:paddingLeft="@dimen/activity_margin"
android:textSize="@dimen/bigger_text_size" android:textSize="@dimen/bigger_text_size"