diff --git a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.kt b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.kt
index ab5123bd7..a256db8a7 100644
--- a/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.kt
+++ b/app/src/main/java/it/niedermann/owncloud/notes/widget/notelist/NoteListWidgetFactory.kt
@@ -7,6 +7,7 @@
package it.niedermann.owncloud.notes.widget.notelist
import android.appwidget.AppWidgetManager
+import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.os.Bundle
@@ -19,12 +20,14 @@ import androidx.core.net.toUri
import com.nextcloud.android.common.ui.util.PlatformThemeUtil
import it.niedermann.owncloud.notes.R
import it.niedermann.owncloud.notes.edit.EditNoteActivity
+import it.niedermann.owncloud.notes.main.MainActivity
import it.niedermann.owncloud.notes.persistence.NotesRepository
import it.niedermann.owncloud.notes.persistence.entity.Account
import it.niedermann.owncloud.notes.persistence.entity.Note
import it.niedermann.owncloud.notes.persistence.entity.NotesListWidgetData
import it.niedermann.owncloud.notes.shared.model.ENavigationCategoryType
import it.niedermann.owncloud.notes.shared.model.NavigationCategory
+import it.niedermann.owncloud.notes.shared.util.NotesColorUtil
class NoteListWidgetFactory internal constructor(private val context: Context, intent: Intent) :
RemoteViewsFactory {
@@ -90,7 +93,7 @@ class NoteListWidgetFactory internal constructor(private val context: Context, i
override fun onDestroy() = Unit
override fun getCount(): Int {
- return dbNotes.size
+ return dbNotes.size + 1
}
private fun getEditNoteIntent(bundle: Bundle): Intent {
@@ -125,24 +128,50 @@ class NoteListWidgetFactory internal constructor(private val context: Context, i
return getEditNoteIntent(bundle)
}
- override fun getViewAt(position: Int): RemoteViews? {
- val note = dbNotes.getOrNull(position) ?: return null
+ private fun getOpenAppIntent(): Intent {
+ return Intent(Intent.ACTION_MAIN).setComponent(
+ ComponentName(context.packageName, MainActivity::class.java.name)
+ )
+ }
- val openNoteIntent = getOpenNoteIntent(note)
+ private fun getHeaderRemoteView(widgetData: NotesListWidgetData): RemoteViews {
+ val localAccount = repo.getAccountById(widgetData.accountId)
+ val createNoteIntent = getCreateNoteIntent(localAccount)
+
+ return RemoteViews(context.packageName, R.layout.widget_entry_add).apply {
+ setOnClickFillInIntent(R.id.widget_entry_content_tv, getOpenAppIntent())
+ setOnClickFillInIntent(R.id.widget_entry_fav_icon, createNoteIntent)
+ setTextViewText(
+ R.id.widget_entry_content_tv,
+ getCategoryTitle(context, widgetData.mode, widgetData.category)
+ )
+ setImageViewResource(R.id.widget_entry_fav_icon, R.drawable.ic_add_blue_24dp)
+ setInt(
+ R.id.widget_entry_fav_icon,
+ "setColorFilter",
+ if (NotesColorUtil.contrastRatioIsSufficient(
+ ContextCompat.getColor(context, R.color.widget_background),
+ localAccount.color
+ )
+ ) localAccount.color
+ else ContextCompat.getColor(context, R.color.widget_foreground)
+ )
+ }
+ }
- var createNoteIntent: Intent? = null
- data?.let {
- val localAccount = repo.getAccountById(it.accountId)
- createNoteIntent = getCreateNoteIntent(localAccount)
+ override fun getViewAt(position: Int): RemoteViews? {
+ if (position == 0) {
+ val widgetData = data ?: return null
+ return getHeaderRemoteView(widgetData)
}
+ val note = dbNotes.getOrNull(position - 1) ?: return null
+
+ val openNoteIntent = getOpenNoteIntent(note)
+
return RemoteViews(context.packageName, R.layout.widget_entry).apply {
setOnClickFillInIntent(R.id.widget_note_list_entry, openNoteIntent)
- createNoteIntent?.let {
- setOnClickFillInIntent(R.id.widget_entry_fav_icon, createNoteIntent)
- }
-
setTextViewText(R.id.widget_entry_title, note.title)
if (note.category.isEmpty()) {
@@ -178,7 +207,11 @@ class NoteListWidgetFactory internal constructor(private val context: Context, i
}
override fun getItemId(position: Int): Long {
- return dbNotes[position].id
+ if (position == 0) {
+ return -1
+ }
+ val note = dbNotes.getOrNull(position - 1) ?: return -2
+ return note.id
}
override fun hasStableIds(): Boolean {
@@ -187,5 +220,17 @@ class NoteListWidgetFactory internal constructor(private val context: Context, i
companion object {
private val TAG: String = NoteListWidgetFactory::class.java.getSimpleName()
+
+ private fun getCategoryTitle(context: Context, displayMode: Int, category: String?): String {
+ return when (displayMode) {
+ NotesListWidgetData.MODE_DISPLAY_STARRED -> context.getString(R.string.label_favorites)
+ NotesListWidgetData.MODE_DISPLAY_CATEGORY -> if ("" == category)
+ context.getString(R.string.action_uncategorized)
+ else
+ category
+
+ else -> context.getString(R.string.app_name)
+ } ?: context.getString(R.string.app_name)
+ }
}
}
diff --git a/app/src/main/res/layout/widget_entry_add.xml b/app/src/main/res/layout/widget_entry_add.xml
index ded5e92f6..cf02ffcdd 100644
--- a/app/src/main/res/layout/widget_entry_add.xml
+++ b/app/src/main/res/layout/widget_entry_add.xml
@@ -11,7 +11,8 @@
android:id="@+id/widget_note_list_entry"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal">
+ android:orientation="horizontal"
+ android:paddingStart="@dimen/widget_note_list_outer_padding">
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 80d4284fc..8ce02304d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -245,6 +245,7 @@
Note not found
Please login to Notes before using this widget
Star icon is used to denote an item as a favorite
+ Create Note
Select note