Skip to content

Commit 890fc94

Browse files
committed
lets just update all widgets on update
1 parent 501efea commit 890fc94

File tree

6 files changed

+54
-65
lines changed

6 files changed

+54
-65
lines changed

app/src/main/kotlin/com/simplemobiletools/notes/activities/MainActivity.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,10 @@ import com.simplemobiletools.notes.BuildConfig
2525
import com.simplemobiletools.notes.R
2626
import com.simplemobiletools.notes.adapters.NotesPagerAdapter
2727
import com.simplemobiletools.notes.dialogs.*
28-
import com.simplemobiletools.notes.extensions.*
28+
import com.simplemobiletools.notes.extensions.config
29+
import com.simplemobiletools.notes.extensions.dbHelper
30+
import com.simplemobiletools.notes.extensions.getTextSize
31+
import com.simplemobiletools.notes.extensions.updateWidgets
2932
import com.simplemobiletools.notes.helpers.MIME_TEXT_PLAIN
3033
import com.simplemobiletools.notes.helpers.OPEN_NOTE_ID
3134
import com.simplemobiletools.notes.helpers.TYPE_NOTE
@@ -530,7 +533,7 @@ class MainActivity : SimpleActivity(), ViewPager.OnPageChangeListener {
530533
updateSelectedNote(firstNoteId)
531534
if (config.widgetNoteId == note.id) {
532535
config.widgetNoteId = mCurrentNote.id
533-
updateNoteWidget(mCurrentNote.id)
536+
updateWidgets()
534537
}
535538
invalidateOptionsMenu()
536539
initViewPager()

app/src/main/kotlin/com/simplemobiletools/notes/extensions/Context.kt

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package com.simplemobiletools.notes.extensions
22

3+
import android.appwidget.AppWidgetManager
4+
import android.content.ComponentName
35
import android.content.Context
46
import android.content.Intent
57
import com.simplemobiletools.notes.R
@@ -17,18 +19,11 @@ fun Context.getTextSize() = when (config.fontSize) {
1719
}
1820

1921
fun Context.updateWidgets() {
20-
dbHelper.getNotes().forEach {
21-
updateNoteWidget(it.id)
22-
}
23-
}
24-
25-
fun Context.updateNoteWidget(noteId: Int) {
26-
val widgetIds = dbHelper.getNoteWidgetIds(noteId)
27-
widgetIds.forEach {
28-
Intent(this, MyWidgetProvider::class.java).apply {
29-
action = UPDATE_WIDGET
30-
putExtra(WIDGET_ID, it)
31-
putExtra(NOTE_ID, noteId)
22+
val widgetIDs = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetProvider::class.java))
23+
if (widgetIDs.isNotEmpty()) {
24+
Intent(applicationContext, MyWidgetProvider::class.java).apply {
25+
action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
26+
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIDs)
3227
sendBroadcast(this)
3328
}
3429
}

app/src/main/kotlin/com/simplemobiletools/notes/fragments/NoteFragment.kt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import com.simplemobiletools.notes.activities.MainActivity
2222
import com.simplemobiletools.notes.extensions.config
2323
import com.simplemobiletools.notes.extensions.dbHelper
2424
import com.simplemobiletools.notes.extensions.getTextSize
25-
import com.simplemobiletools.notes.extensions.updateNoteWidget
25+
import com.simplemobiletools.notes.extensions.updateWidgets
2626
import com.simplemobiletools.notes.helpers.*
2727
import com.simplemobiletools.notes.models.Note
2828
import com.simplemobiletools.notes.models.TextHistory
@@ -156,7 +156,7 @@ class NoteFragment : Fragment() {
156156
if (newText != null && (newText != oldText || force)) {
157157
note.value = newText
158158
saveNoteValue(note)
159-
context!!.updateNoteWidget(note.id)
159+
context!!.updateWidgets()
160160
}
161161
}
162162

app/src/main/kotlin/com/simplemobiletools/notes/helpers/Constants.kt

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ package com.simplemobiletools.notes.helpers
22

33
const val NOTE_ID = "note_id"
44
const val OPEN_NOTE_ID = "open_note_id"
5-
const val UPDATE_WIDGET = "update_widget"
6-
const val WIDGET_ID = "widget_id"
75

86
// shared preferences
97
const val CURRENT_NOTE_ID = "current_note_id"

app/src/main/kotlin/com/simplemobiletools/notes/helpers/DBHelper.kt

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import java.io.File
1818
import java.util.*
1919

2020
class DBHelper private constructor(private val mContext: Context) : SQLiteOpenHelper(mContext, DB_NAME, null, DB_VERSION) {
21-
private val mDb: SQLiteDatabase = writableDatabase
21+
private val mDb = writableDatabase
2222

2323
companion object {
2424
private const val DB_NAME = "notes.db"
@@ -221,21 +221,24 @@ class DBHelper private constructor(private val mContext: Context) : SQLiteOpenHe
221221

222222
fun isValidId(id: Int) = id > 0
223223

224-
fun getNoteWidgetIds(noteId: Int): ArrayList<Int> {
225-
val widgetIds = ArrayList<Int>()
226-
val cols = arrayOf(COL_WIDGET_ID)
227-
val selection = "$COL_NOTE_ID = ?"
228-
val selectionArgs = arrayOf(noteId.toString())
224+
fun getWidgets(): ArrayList<Widget> {
225+
val widgets = ArrayList<Widget>()
226+
val cols = arrayOf(COL_WIDGET_ID, COL_NOTE_ID)
229227
var cursor: Cursor? = null
230228
try {
231-
cursor = mDb.query(WIDGETS_TABLE_NAME, cols, selection, selectionArgs, null, null, null)
229+
cursor = mDb.query(WIDGETS_TABLE_NAME, cols, null, null, null, null, null)
232230
if (cursor?.moveToFirst() == true) {
233-
val widgetId = cursor.getIntValue(COL_WIDGET_ID)
234-
widgetIds.add(widgetId)
231+
do {
232+
val widgetId = cursor.getIntValue(COL_WIDGET_ID)
233+
val noteId = cursor.getIntValue(COL_NOTE_ID)
234+
val widget = Widget(widgetId, noteId)
235+
widgets.add(widget)
236+
} while (cursor.moveToNext())
235237
}
236238
} finally {
237239
cursor?.close()
238240
}
239-
return widgetIds
241+
242+
return widgets
240243
}
241244
}

app/src/main/kotlin/com/simplemobiletools/notes/helpers/MyWidgetProvider.kt

Lines changed: 27 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -12,50 +12,40 @@ import com.simplemobiletools.commons.extensions.setBackgroundColor
1212
import com.simplemobiletools.notes.R
1313
import com.simplemobiletools.notes.activities.SplashActivity
1414
import com.simplemobiletools.notes.extensions.config
15+
import com.simplemobiletools.notes.extensions.dbHelper
1516
import com.simplemobiletools.notes.services.WidgetService
1617

1718
class MyWidgetProvider : AppWidgetProvider() {
18-
private fun performUpdate(context: Context, intent: Intent) {
19-
val noteId = intent.getIntExtra(NOTE_ID, -1)
20-
val widgetId = intent.getIntExtra(WIDGET_ID, -1)
21-
if (noteId == -1 || widgetId == -1) {
22-
return
23-
}
24-
25-
val appWidgetManager = AppWidgetManager.getInstance(context)
26-
val views = RemoteViews(context.packageName, R.layout.widget)
27-
views.setBackgroundColor(R.id.notes_widget_holder, context.config.widgetBgColor)
28-
setupAppOpenIntent(context, views, R.id.notes_widget_holder)
29-
30-
Intent(context, WidgetService::class.java).apply {
31-
putExtra(NOTE_ID, noteId)
32-
data = Uri.parse(this.toUri(Intent.URI_INTENT_SCHEME))
33-
views.setRemoteAdapter(R.id.notes_widget_listview, this)
34-
}
35-
36-
val startActivityIntent = context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)
37-
startActivityIntent.putExtra(OPEN_NOTE_ID, widgetId)
38-
val startActivityPendingIntent = PendingIntent.getActivity(context, widgetId, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT)
39-
views.setPendingIntentTemplate(R.id.notes_widget_listview, startActivityPendingIntent)
40-
41-
appWidgetManager.updateAppWidget(widgetId, views)
42-
appWidgetManager.notifyAppWidgetViewDataChanged(widgetId, R.id.notes_widget_listview)
43-
}
44-
45-
private fun setupAppOpenIntent(context: Context, views: RemoteViews, id: Int) {
46-
val widgetId = context.config.widgetNoteId
19+
private fun setupAppOpenIntent(context: Context, views: RemoteViews, id: Int, noteId: Int) {
4720
val intent = context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)
48-
intent.putExtra(OPEN_NOTE_ID, widgetId)
49-
val pendingIntent = PendingIntent.getActivity(context, widgetId, intent, 0)
21+
intent.putExtra(OPEN_NOTE_ID, noteId)
22+
val pendingIntent = PendingIntent.getActivity(context, noteId, intent, PendingIntent.FLAG_UPDATE_CURRENT)
5023
views.setOnClickPendingIntent(id, pendingIntent)
5124
}
5225

53-
// use only this way of updating widgets instead of onUpdate, so that we can pass a widget ID too
54-
override fun onReceive(context: Context, intent: Intent) {
55-
val action = intent.action
56-
when (action) {
57-
UPDATE_WIDGET -> performUpdate(context, intent)
58-
else -> super.onReceive(context, intent)
26+
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
27+
super.onUpdate(context, appWidgetManager, appWidgetIds)
28+
val widgets = context.dbHelper.getWidgets()
29+
widgets.forEach {
30+
val widgetId = it.widgetId
31+
val noteId = it.noteId
32+
val views = RemoteViews(context.packageName, R.layout.widget)
33+
views.setBackgroundColor(R.id.notes_widget_holder, context.config.widgetBgColor)
34+
setupAppOpenIntent(context, views, R.id.notes_widget_holder, noteId)
35+
36+
Intent(context, WidgetService::class.java).apply {
37+
putExtra(NOTE_ID, noteId)
38+
data = Uri.parse(this.toUri(Intent.URI_INTENT_SCHEME))
39+
views.setRemoteAdapter(R.id.notes_widget_listview, this)
40+
}
41+
42+
val startActivityIntent = context.getLaunchIntent() ?: Intent(context, SplashActivity::class.java)
43+
startActivityIntent.putExtra(OPEN_NOTE_ID, widgetId)
44+
val startActivityPendingIntent = PendingIntent.getActivity(context, widgetId, startActivityIntent, PendingIntent.FLAG_UPDATE_CURRENT)
45+
views.setPendingIntentTemplate(R.id.notes_widget_listview, startActivityPendingIntent)
46+
47+
appWidgetManager.updateAppWidget(widgetId, views)
48+
appWidgetManager.notifyAppWidgetViewDataChanged(widgetId, R.id.notes_widget_listview)
5949
}
6050
}
6151
}

0 commit comments

Comments
 (0)