From 213cbd80fe8d9648b47327a84c8ce5096676022d Mon Sep 17 00:00:00 2001 From: tibbi Date: Wed, 7 Nov 2018 21:32:29 +0100 Subject: [PATCH] adding widget support too --- .../notes/pro/activities/MainActivity.kt | 14 ++- .../pro/activities/WidgetConfigureActivity.kt | 12 ++- .../notes/pro/extensions/Context.kt | 2 - .../notes/pro/fragments/NoteFragment.kt | 3 - .../notes/pro/helpers/DBHelper.kt | 101 ------------------ .../notes/pro/helpers/MyWidgetProvider.kt | 5 +- .../notes/pro/interfaces/WidgetsDao.kt | 3 + .../notes/pro/models/Widget.kt | 2 +- 8 files changed, 22 insertions(+), 120 deletions(-) delete mode 100644 app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/DBHelper.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt index f2470041..e0e21749 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/MainActivity.kt @@ -27,10 +27,7 @@ import com.simplemobiletools.notes.pro.R import com.simplemobiletools.notes.pro.adapters.NotesPagerAdapter import com.simplemobiletools.notes.pro.databases.NotesDatabase import com.simplemobiletools.notes.pro.dialogs.* -import com.simplemobiletools.notes.pro.extensions.config -import com.simplemobiletools.notes.pro.extensions.dbHelper -import com.simplemobiletools.notes.pro.extensions.getTextSize -import com.simplemobiletools.notes.pro.extensions.updateWidgets +import com.simplemobiletools.notes.pro.extensions.* import com.simplemobiletools.notes.pro.helpers.MIME_TEXT_PLAIN import com.simplemobiletools.notes.pro.helpers.NotesHelper import com.simplemobiletools.notes.pro.helpers.OPEN_NOTE_ID @@ -576,7 +573,14 @@ class MainActivity : SimpleActivity() { } private fun doDeleteNote(note: Note, deleteFile: Boolean) { - dbHelper.deleteNote(mCurrentNote.id!!) + Thread { + notesDB.deleteNote(note) + widgetsDB.deleteNoteWidgets(note.id!!) + refreshNotes(note, deleteFile) + }.start() + } + + private fun refreshNotes(note: Note, deleteFile: Boolean) { NotesHelper(this).getNotes { mNotes = it val firstNoteId = mNotes[0].id diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/WidgetConfigureActivity.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/WidgetConfigureActivity.kt index 972f7b74..1f7214ed 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/WidgetConfigureActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/activities/WidgetConfigureActivity.kt @@ -15,8 +15,8 @@ import com.simplemobiletools.commons.helpers.IS_CUSTOMIZING_COLORS import com.simplemobiletools.commons.models.RadioItem import com.simplemobiletools.notes.pro.R import com.simplemobiletools.notes.pro.extensions.config -import com.simplemobiletools.notes.pro.extensions.dbHelper import com.simplemobiletools.notes.pro.extensions.getTextSize +import com.simplemobiletools.notes.pro.extensions.widgetsDB import com.simplemobiletools.notes.pro.helpers.MyWidgetProvider import com.simplemobiletools.notes.pro.helpers.NotesHelper import com.simplemobiletools.notes.pro.models.Note @@ -29,7 +29,7 @@ class WidgetConfigureActivity : SimpleActivity() { private var mBgColor = 0 private var mBgColorWithoutTransparency = 0 private var mTextColor = 0 - private var mCurrentNoteId = 0 + private var mCurrentNoteId = 0L private var mIsCustomizingColors = false private var mNotes = ArrayList() @@ -95,14 +95,14 @@ class WidgetConfigureActivity : SimpleActivity() { items.add(RadioItem(it.id!!.toInt(), it.title)) } - RadioGroupDialog(this, items, mCurrentNoteId) { + RadioGroupDialog(this, items, mCurrentNoteId.toInt()) { val selectedId = it as Int updateCurrentNote(mNotes.first { it.id!!.toInt() == selectedId }) } } private fun updateCurrentNote(note: Note) { - mCurrentNoteId = note.id!!.toInt() + mCurrentNoteId = note.id!! notes_picker_value.text = note.title val sampleValue = if (note.value.isEmpty() || mIsCustomizingColors) getString(R.string.widget_config) else note.value notes_view.text = sampleValue @@ -113,7 +113,9 @@ class WidgetConfigureActivity : SimpleActivity() { views.setBackgroundColor(R.id.notes_view, mBgColor) AppWidgetManager.getInstance(this).updateAppWidget(mWidgetId, views) val widget = Widget(null, mWidgetId, mCurrentNoteId) - dbHelper.insertWidget(widget) + Thread { + widgetsDB.insertOrUpdate(widget) + }.start() storeWidgetBackground() requestWidgetUpdate() diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/extensions/Context.kt index 8eba3b81..9511d64c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/extensions/Context.kt @@ -12,8 +12,6 @@ import com.simplemobiletools.notes.pro.interfaces.WidgetsDao val Context.config: Config get() = Config.newInstance(applicationContext) -val Context.dbHelper: DBHelper get() = DBHelper.newInstance(applicationContext) - val Context.notesDB: NotesDao get() = NotesDatabase.getInstance(applicationContext).NotesDao() val Context.widgetsDB: WidgetsDao get() = NotesDatabase.getInstance(applicationContext).WidgetsDao() diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/NoteFragment.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/NoteFragment.kt index 9189f8b0..126def8b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/NoteFragment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/fragments/NoteFragment.kt @@ -20,7 +20,6 @@ import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.notes.pro.R import com.simplemobiletools.notes.pro.activities.MainActivity import com.simplemobiletools.notes.pro.extensions.config -import com.simplemobiletools.notes.pro.extensions.dbHelper import com.simplemobiletools.notes.pro.extensions.getTextSize import com.simplemobiletools.notes.pro.extensions.updateWidgets import com.simplemobiletools.notes.pro.helpers.* @@ -43,12 +42,10 @@ class NoteFragment : androidx.fragment.app.Fragment() { private var note: Note? = null lateinit var view: ViewGroup - private lateinit var db: DBHelper override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? { view = inflater.inflate(R.layout.fragment_note, container, false) as ViewGroup noteId = arguments!!.getInt(NOTE_ID) - db = context!!.dbHelper retainInstance = true val layoutToInflate = if (config!!.enableLineWrap) R.layout.note_view_static else R.layout.note_view_horiz_scrollable diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/DBHelper.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/DBHelper.kt deleted file mode 100644 index 37b54f33..00000000 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/DBHelper.kt +++ /dev/null @@ -1,101 +0,0 @@ -package com.simplemobiletools.notes.pro.helpers - -import android.content.ContentValues -import android.content.Context -import android.database.Cursor -import android.database.sqlite.SQLiteDatabase -import android.database.sqlite.SQLiteDatabase.CONFLICT_IGNORE -import android.database.sqlite.SQLiteOpenHelper -import com.simplemobiletools.commons.extensions.getIntValue -import com.simplemobiletools.notes.pro.R -import com.simplemobiletools.notes.pro.models.Note -import com.simplemobiletools.notes.pro.models.Widget -import java.util.* - -class DBHelper private constructor(private val mContext: Context) : SQLiteOpenHelper(mContext, DB_NAME, null, DB_VERSION) { - private val mDb = writableDatabase - - companion object { - private const val DB_NAME = "notes_old.db" - private const val DB_VERSION = 4 - private const val NOTES_TABLE_NAME = "notes" - private const val WIDGETS_TABLE_NAME = "widgets" - - private const val COL_ID = "id" - private const val COL_TITLE = "title" - private const val COL_VALUE = "value" - private const val COL_TYPE = "type" - private const val COL_PATH = "path" - - private const val COL_WIDGET_ID = "widget_id" - private const val COL_NOTE_ID = "note_id" - - fun newInstance(context: Context) = DBHelper(context) - } - - override fun onCreate(db: SQLiteDatabase) { - db.execSQL("CREATE TABLE $NOTES_TABLE_NAME ($COL_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COL_TITLE TEXT UNIQUE, $COL_VALUE TEXT, $COL_TYPE INTEGER DEFAULT 0, $COL_PATH TEXT)") - db.execSQL("CREATE TABLE $WIDGETS_TABLE_NAME ($COL_ID INTEGER PRIMARY KEY AUTOINCREMENT, $COL_WIDGET_ID INTEGER DEFAULT 0, $COL_NOTE_ID INTEGER DEFAULT 0)") - insertFirstNote(db) - } - - override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {} - - private fun insertFirstNote(db: SQLiteDatabase) { - val generalNote = mContext.resources.getString(R.string.general_note) - val note = Note(1, generalNote, "", TYPE_NOTE) - insertNote(note, db) - } - - private fun insertNote(note: Note, db: SQLiteDatabase) { - val values = fillNoteContentValues(note) - db.insert(NOTES_TABLE_NAME, null, values) - } - - fun insertWidget(widget: Widget): Int { - val values = fillWidgetContentValues(widget) - return mDb.insertWithOnConflict(WIDGETS_TABLE_NAME, null, values, CONFLICT_IGNORE).toInt() - } - - private fun fillNoteContentValues(note: Note): ContentValues { - return ContentValues().apply { - put(COL_TITLE, note.title) - put(COL_VALUE, note.value) - put(COL_PATH, note.path) - put(COL_TYPE, TYPE_NOTE) - } - } - - private fun fillWidgetContentValues(widget: Widget): ContentValues { - return ContentValues().apply { - put(COL_WIDGET_ID, widget.widgetId) - put(COL_NOTE_ID, widget.noteId) - } - } - - fun deleteNote(id: Long) { - mDb.delete(NOTES_TABLE_NAME, "$COL_ID = $id", null) - mDb.delete(WIDGETS_TABLE_NAME, "$COL_NOTE_ID = $id", null) - } - - fun getWidgets(): ArrayList { - val widgets = ArrayList() - val cols = arrayOf(COL_WIDGET_ID, COL_NOTE_ID) - var cursor: Cursor? = null - try { - cursor = mDb.query(WIDGETS_TABLE_NAME, cols, null, null, null, null, null) - if (cursor?.moveToFirst() == true) { - do { - val widgetId = cursor.getIntValue(COL_WIDGET_ID) - val noteId = cursor.getIntValue(COL_NOTE_ID) - val widget = Widget(0, widgetId, noteId) - widgets.add(widget) - } while (cursor.moveToNext()) - } - } finally { - cursor?.close() - } - - return widgets - } -} diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/MyWidgetProvider.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/MyWidgetProvider.kt index 9654c917..90ebb7dc 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/MyWidgetProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/helpers/MyWidgetProvider.kt @@ -12,7 +12,7 @@ import com.simplemobiletools.commons.extensions.setBackgroundColor import com.simplemobiletools.notes.pro.R import com.simplemobiletools.notes.pro.activities.SplashActivity import com.simplemobiletools.notes.pro.extensions.config -import com.simplemobiletools.notes.pro.extensions.dbHelper +import com.simplemobiletools.notes.pro.extensions.widgetsDB import com.simplemobiletools.notes.pro.models.Widget import com.simplemobiletools.notes.pro.services.WidgetService @@ -26,8 +26,7 @@ class MyWidgetProvider : AppWidgetProvider() { override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { super.onUpdate(context, appWidgetManager, appWidgetIds) - val widgets = context.dbHelper.getWidgets() - widgets.forEach { + context.widgetsDB.getWidgets().forEach { val views = RemoteViews(context.packageName, R.layout.widget) views.setBackgroundColor(R.id.notes_widget_holder, context.config.widgetBgColor) setupAppOpenIntent(context, views, R.id.notes_widget_holder, it) diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/interfaces/WidgetsDao.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/interfaces/WidgetsDao.kt index 103cbb7d..33d1a5b4 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/interfaces/WidgetsDao.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/interfaces/WidgetsDao.kt @@ -13,4 +13,7 @@ interface WidgetsDao { @Insert(onConflict = OnConflictStrategy.REPLACE) fun insertOrUpdate(widget: Widget): Long + + @Query("DELETE FROM widgets WHERE note_id = :noteId") + fun deleteNoteWidgets(noteId: Long) } diff --git a/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/Widget.kt b/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/Widget.kt index 6aab5522..9578cb35 100644 --- a/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/Widget.kt +++ b/app/src/main/kotlin/com/simplemobiletools/notes/pro/models/Widget.kt @@ -9,4 +9,4 @@ import androidx.room.PrimaryKey data class Widget( @PrimaryKey(autoGenerate = true) var id: Int?, @ColumnInfo(name = "widget_id") var widgetId: Int, - @ColumnInfo(name = "note_id") var noteId: Int) + @ColumnInfo(name = "note_id") var noteId: Long)