Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,41 @@ package org.fossify.thankyou.contentproviders

import android.content.ContentProvider
import android.content.ContentValues
import android.content.UriMatcher
import android.database.Cursor
import android.net.Uri
import android.os.ParcelFileDescriptor
import android.os.ParcelFileDescriptor.MODE_CREATE
import android.os.ParcelFileDescriptor.MODE_TRUNCATE
import android.os.ParcelFileDescriptor.MODE_WRITE_ONLY
import org.fossify.commons.extensions.isFontFile
import org.fossify.thankyou.helpers.MyContentProviderHelper
import java.io.File
import java.io.FileNotFoundException

class MyContentProvider : ContentProvider() {
private lateinit var dbHelper: MyContentProviderHelper

companion object {
private const val AUTHORITY = "org.fossify.android.provider"
private const val SETTINGS = 1
private const val FONTS_FILE = 2

private val uriMatcher = UriMatcher(UriMatcher.NO_MATCH).apply {
addURI(AUTHORITY, "settings", SETTINGS)
addURI(AUTHORITY, "fonts/*", FONTS_FILE)
}
}

override fun insert(uri: Uri, contentValues: ContentValues?) = null

override fun query(uri: Uri, projection: Array<out String>?, selection: String?, selectionArgs: Array<out String>?, sortOrder: String?): Cursor? {
override fun query(
uri: Uri,
projection: Array<out String>?,
selection: String?,
selectionArgs: Array<out String>?,
sortOrder: String?
): Cursor? {
return dbHelper.getGlobalConfigCursor()
}

Expand All @@ -20,11 +45,40 @@ class MyContentProvider : ContentProvider() {
return true
}

override fun update(uri: Uri, contentValues: ContentValues?, selection: String?, selectionArgs: Array<out String>?): Int {
override fun update(
uri: Uri,
contentValues: ContentValues?,
selection: String?,
selectionArgs: Array<out String>?
): Int {
return dbHelper.updatePreferences(contentValues!!)
}

override fun delete(uri: Uri, selection: String?, selectionArgs: Array<out String>?): Int = 0

override fun getType(uri: Uri) = ""

override fun openFile(uri: Uri, mode: String): ParcelFileDescriptor? {
if (uriMatcher.match(uri) != FONTS_FILE) throw FileNotFoundException(uri.toString())
val name = uri.lastPathSegment ?: throw FileNotFoundException(uri.toString())
val safeName = File(name).name
if (safeName.isFontFile()) throw FileNotFoundException("Not a font file")

val fontsDir = File(context!!.filesDir, "fonts").apply { mkdirs() }
val file = File(fontsDir, safeName)

return when {
mode.contains("w") -> {
ParcelFileDescriptor.open(
file,
MODE_CREATE or MODE_TRUNCATE or MODE_WRITE_ONLY
)
}

else -> {
if (!file.exists()) throw FileNotFoundException(uri.toString())
ParcelFileDescriptor.open(file, ParcelFileDescriptor.MODE_READ_ONLY)
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,13 @@ import android.database.Cursor
import android.database.sqlite.SQLiteDatabase
import android.database.sqlite.SQLiteOpenHelper
import org.fossify.commons.R
import org.fossify.commons.helpers.FONT_TYPE_SYSTEM_DEFAULT
import org.fossify.commons.helpers.MyContentProvider.ACTION_GLOBAL_CONFIG_UPDATED
import org.fossify.commons.helpers.MyContentProvider.COL_ACCENT_COLOR
import org.fossify.commons.helpers.MyContentProvider.COL_APP_ICON_COLOR
import org.fossify.commons.helpers.MyContentProvider.COL_BACKGROUND_COLOR
import org.fossify.commons.helpers.MyContentProvider.COL_FONT_NAME
import org.fossify.commons.helpers.MyContentProvider.COL_FONT_TYPE
import org.fossify.commons.helpers.MyContentProvider.COL_ID
import org.fossify.commons.helpers.MyContentProvider.COL_LAST_UPDATED_TS
import org.fossify.commons.helpers.MyContentProvider.COL_PRIMARY_COLOR
Expand All @@ -29,7 +32,7 @@ class MyContentProviderHelper private constructor(

companion object {
private const val DB_NAME = "Preferences.db"
private const val DB_VERSION = 1
private const val DB_VERSION = 2
private const val TABLE_NAME = "settings"
private const val PREF_ID = 1

Expand All @@ -48,13 +51,20 @@ class MyContentProviderHelper private constructor(
$COL_ACCENT_COLOR INTEGER DEFAULT 0,
$COL_APP_ICON_COLOR INTEGER DEFAULT 0,
$COL_SHOW_CHECKMARKS_ON_SWITCHES INTEGER DEFAULT 0,
$COL_LAST_UPDATED_TS INTEGER DEFAULT 0
$COL_LAST_UPDATED_TS INTEGER DEFAULT 0,
$COL_FONT_TYPE INTEGER DEFAULT 0,
$COL_FONT_NAME TEXT DEFAULT ''
)
""".trimIndent()
)
}

override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {}
override fun onUpgrade(db: SQLiteDatabase, oldVersion: Int, newVersion: Int) {
if (oldVersion < 2) {
db.execSQL("ALTER TABLE $TABLE_NAME ADD COLUMN $COL_FONT_TYPE INTEGER DEFAULT 0")
db.execSQL("ALTER TABLE $TABLE_NAME ADD COLUMN $COL_FONT_NAME TEXT DEFAULT ''")
}
}

private fun initializePreferences() {
with(context.resources) {
Expand All @@ -70,6 +80,8 @@ class MyContentProviderHelper private constructor(
put(COL_APP_ICON_COLOR, getColor(R.color.color_primary))
put(COL_SHOW_CHECKMARKS_ON_SWITCHES, false)
put(COL_LAST_UPDATED_TS, 0)
put(COL_FONT_TYPE, FONT_TYPE_SYSTEM_DEFAULT)
put(COL_FONT_NAME, "")
}
)
}
Expand Down Expand Up @@ -116,6 +128,8 @@ class MyContentProviderHelper private constructor(
COL_APP_ICON_COLOR,
COL_SHOW_CHECKMARKS_ON_SWITCHES,
COL_LAST_UPDATED_TS,
COL_FONT_TYPE,
COL_FONT_NAME,
)

val selection = "$COL_ID = ?"
Expand Down
Loading