adding some checklist widget handling

This commit is contained in:
tibbi 2018-12-09 17:14:01 +01:00
parent 2e13deaf53
commit b8f18f9ae9
2 changed files with 42 additions and 17 deletions

View File

@ -5,6 +5,8 @@ import android.content.Intent
import android.view.View
import android.widget.RemoteViews
import android.widget.RemoteViewsService
import com.google.gson.Gson
import com.google.gson.reflect.TypeToken
import com.simplemobiletools.commons.extensions.setText
import com.simplemobiletools.commons.extensions.setTextSize
import com.simplemobiletools.notes.pro.R
@ -12,10 +14,8 @@ import com.simplemobiletools.notes.pro.R.id.widget_text_holder
import com.simplemobiletools.notes.pro.extensions.config
import com.simplemobiletools.notes.pro.extensions.getTextSize
import com.simplemobiletools.notes.pro.extensions.notesDB
import com.simplemobiletools.notes.pro.helpers.GRAVITY_CENTER
import com.simplemobiletools.notes.pro.helpers.GRAVITY_RIGHT
import com.simplemobiletools.notes.pro.helpers.NOTE_ID
import com.simplemobiletools.notes.pro.helpers.OPEN_NOTE_ID
import com.simplemobiletools.notes.pro.helpers.*
import com.simplemobiletools.notes.pro.models.ChecklistItem
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)
@ -23,27 +23,38 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi
override fun getViewAt(position: Int): RemoteViews {
val noteId = intent.getLongExtra(NOTE_ID, 0L)
val views = RemoteViews(context.packageName, R.layout.widget_text_layout).apply {
val note = context.notesDB.getNoteWithId(noteId)
if (note != null) {
val remoteView: RemoteViews
val note = context.notesDB.getNoteWithId(noteId) ?: return RemoteViews(context.packageName, R.layout.widget_text_layout)
val textSize = context.getTextSize() / context.resources.displayMetrics.density
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 {
setText(R.id.checklist_title, items.getOrNull(position)?.title ?: "")
setTextColor(R.id.checklist_title, widgetTextColor)
setTextSize(R.id.checklist_title, textSize)
}
} else {
remoteView = RemoteViews(context.packageName, R.layout.widget_text_layout).apply {
val noteText = note.getNoteStoredValue() ?: ""
val textSize = context.getTextSize() / context.resources.displayMetrics.density
for (id in textIds) {
setText(id, noteText)
setTextColor(id, widgetTextColor)
setTextSize(id, textSize)
setViewVisibility(id, View.GONE)
}
setViewVisibility(getProperTextView(context), View.VISIBLE)
}
Intent().apply {
putExtra(OPEN_NOTE_ID, noteId)
setOnClickFillInIntent(widget_text_holder, this)
}
setViewVisibility(getProperTextView(context), View.VISIBLE)
}
return views
Intent().apply {
putExtra(OPEN_NOTE_ID, noteId)
remoteView.setOnClickFillInIntent(widget_text_holder, this)
}
return remoteView
}
private fun getProperTextView(context: Context) = when (context.config.gravity) {
@ -66,7 +77,7 @@ class WidgetAdapter(val context: Context, val intent: Intent) : RemoteViewsServi
override fun getCount() = 1
override fun getViewTypeCount() = 1
override fun getViewTypeCount() = 2
override fun onDestroy() {}
}

View File

@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/checklist_title"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_marginTop="@dimen/medium_margin"
android:layout_marginRight="@dimen/medium_margin"
android:layout_toLeftOf="@+id/checklist_image"
android:paddingLeft="@dimen/activity_margin"
android:textSize="@dimen/bigger_text_size"
tools:text="Butter"/>