X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fhelpers%2FDomainsDatabaseHelper.kt;h=38ce8992fcac52ee2a35d680aaacf69ac7525383;hb=35dd941d73d9d72a1ae8c16add68f20615affada;hp=f2fe8aa459b69afb675cf8e83349a97bdf3e0825;hpb=92eb39bb1596a73d24e9490af1ca602e2544b486;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt b/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt index f2fe8aa4..38ce8992 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt @@ -1,5 +1,5 @@ /* - * Copyright 2017-2023 Soren Stoutner . + * Copyright 2017-2024 Soren Stoutner . * * This file is part of Privacy Browser Android . * @@ -31,7 +31,7 @@ import androidx.preference.PreferenceManager import com.stoutner.privacybrowser.R // Define the class constants. -private const val SCHEMA_VERSION = 16 +private const val SCHEMA_VERSION = 17 // Define the public database constants. const val DOMAINS_DATABASE = "domains.db" @@ -54,7 +54,6 @@ const val ENABLE_EASYLIST = "enableeasylist" const val ENABLE_EASYPRIVACY = "enableeasyprivacy" const val ENABLE_FANBOYS_ANNOYANCE_LIST = "enablefanboysannoyancelist" const val ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST = "enablefanboyssocialblockinglist" -const val ENABLE_FORM_DATA = "enableformdata" // Form data can be removed once the minimum API >= 26. const val ENABLE_JAVASCRIPT = "enablejavascript" const val ENABLE_ULTRAPRIVACY = "enableultraprivacy" const val FONT_SIZE = "fontsize" @@ -83,7 +82,6 @@ const val CREATE_DOMAINS_TABLE = "CREATE TABLE $DOMAINS_TABLE (" + "$ENABLE_JAVASCRIPT INTEGER, " + "$COOKIES INTEGER, " + "$ENABLE_DOM_STORAGE INTEGER, " + - "$ENABLE_FORM_DATA INTEGER, " + "$USER_AGENT TEXT, " + "$ENABLE_EASYLIST INTEGER, " + "$ENABLE_EASYPRIVACY INTEGER, " + @@ -269,7 +267,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( val javaScriptDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.javascript_key), false) val cookiesDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.cookies_key), false) val domStorageDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.dom_storage_key), false) - val formDataDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.save_form_data_key), false) val easyListDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.easylist_key), true) val easyPrivacyDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.easyprivacy_key), true) val fanboysAnnoyanceListDefaultValue = sharedPreferences.getBoolean(appContext.getString(R.string.fanboys_annoyance_list_key), true) @@ -285,7 +282,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( val javaScriptColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_JAVASCRIPT) val cookiesColumnIndex = domainsCursor.getColumnIndexOrThrow(COOKIES) val domStorageColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_DOM_STORAGE) - val formDataColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_FORM_DATA) val easyListColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_EASYLIST) val easyPrivacyColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_EASYPRIVACY) val fanboysAnnoyanceListColumnIndex = domainsCursor.getColumnIndexOrThrow(ENABLE_FANBOYS_ANNOYANCE_LIST) @@ -303,7 +299,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( val javaScriptDomainCurrentValue = domainsCursor.getInt(javaScriptColumnIndex) val cookiesDomainCurrentValue = domainsCursor.getInt(cookiesColumnIndex) val domStorageDomainCurrentValue = domainsCursor.getInt(domStorageColumnIndex) - val formDataDomainCurrentValue = domainsCursor.getInt(formDataColumnIndex) val easyListDomainCurrentValue = domainsCursor.getInt(easyListColumnIndex) val easyPrivacyDomainCurrentValue = domainsCursor.getInt(easyPrivacyColumnIndex) val fanboysAnnoyanceListCurrentValue = domainsCursor.getInt(fanboysAnnoyanceListColumnIndex) @@ -319,7 +314,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( domainContentValues.put(ENABLE_JAVASCRIPT, convertFromSwitchToSpinner(javaScriptDefaultValue, javaScriptDomainCurrentValue)) domainContentValues.put(COOKIES, convertFromSwitchToSpinner(cookiesDefaultValue, cookiesDomainCurrentValue)) domainContentValues.put(ENABLE_DOM_STORAGE, convertFromSwitchToSpinner(domStorageDefaultValue, domStorageDomainCurrentValue)) - domainContentValues.put(ENABLE_FORM_DATA, convertFromSwitchToSpinner(formDataDefaultValue, formDataDomainCurrentValue)) domainContentValues.put(ENABLE_EASYLIST, convertFromSwitchToSpinner(easyListDefaultValue, easyListDomainCurrentValue)) domainContentValues.put(ENABLE_EASYPRIVACY, convertFromSwitchToSpinner(easyPrivacyDefaultValue, easyPrivacyDomainCurrentValue)) domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, convertFromSwitchToSpinner(fanboysAnnoyanceListDefaultValue, fanboysAnnoyanceListCurrentValue)) @@ -335,6 +329,12 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( domainsDatabase.update(DOMAINS_TABLE, domainContentValues, "$ID = $currentDatabaseId", null) } + // Upgrade from schema version 16, first used in Privacy Browser 3.15, to schema version 17, first used in Privacy Browser 3.18. + // This upgrade removed `enableformdata`. + // SQLite amazingly only added a command to drop a column in version 3.35.0. + // That will not be supported in Android until the minimum API >= 34. + // Although a new table could be created and all the data copied to it, I think I will just leave the `enableformdata` column. It will be wiped out the next time an import is run. + // Close the cursor. domainsCursor.close() } @@ -397,29 +397,47 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( return domainsDatabase.rawQuery("SELECT * FROM $DOMAINS_TABLE WHERE $DOMAIN_NAME = $sqlEscapedDomainName", null) } + fun addDomain(contentValues: ContentValues) { + // Get a writable database handle. + val domainsDatabase = this.writableDatabase + + // Add the new domain. + domainsDatabase.insert(DOMAINS_TABLE, null, contentValues) + + // Close the database handle. + domainsDatabase.close() + } + fun addDomain(domainName: String): Int { + // Add the domain with default settings. + return addDomain(domainName, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, appContext.getString(R.string.system_default_user_agent), SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, + SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT, SYSTEM_DEFAULT) + } + + fun addDomain(domainName: String, javaScriptInt: Int, cookiesInt: Int, domStorageInt: Int, userAgentName: String, easyListInt: Int, easyPrivacyInt: Int, fanboysAnnoyanceListInt: Int, + fanboysSocialBlockingListInt: Int, ultraListInt: Int, ultraPrivacyInt: Int, blockAllThirdPartyRequestsInt: Int, fontSizeInt: Int, swipeToRefreshInt: Int, webViewThemeInt: Int, + wideViewportInt: Int, displayImagesInt: Int): Int { // Instantiate a content values. val domainContentValues = ContentValues() // Create entries for the database fields. The ID is created automatically. The pinned SSL certificate information is not created unless added by the user. domainContentValues.put(DOMAIN_NAME, domainName) - domainContentValues.put(ENABLE_JAVASCRIPT, SYSTEM_DEFAULT) - domainContentValues.put(COOKIES, SYSTEM_DEFAULT) - domainContentValues.put(ENABLE_DOM_STORAGE, SYSTEM_DEFAULT) - domainContentValues.put(ENABLE_FORM_DATA, SYSTEM_DEFAULT) // Form data can be removed once the minimum API >= 26. - domainContentValues.put(USER_AGENT, appContext.getString(R.string.system_default_user_agent)) - domainContentValues.put(ENABLE_EASYLIST, SYSTEM_DEFAULT) - domainContentValues.put(ENABLE_EASYPRIVACY, SYSTEM_DEFAULT) - domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, SYSTEM_DEFAULT) - domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, SYSTEM_DEFAULT) - domainContentValues.put(ULTRALIST, SYSTEM_DEFAULT) - domainContentValues.put(ENABLE_ULTRAPRIVACY, SYSTEM_DEFAULT) - domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, SYSTEM_DEFAULT) - domainContentValues.put(FONT_SIZE, SYSTEM_DEFAULT) - domainContentValues.put(SWIPE_TO_REFRESH, SYSTEM_DEFAULT) - domainContentValues.put(WEBVIEW_THEME, SYSTEM_DEFAULT) - domainContentValues.put(WIDE_VIEWPORT, SYSTEM_DEFAULT) - domainContentValues.put(DISPLAY_IMAGES, SYSTEM_DEFAULT) + domainContentValues.put(ENABLE_JAVASCRIPT, javaScriptInt) + domainContentValues.put(COOKIES, cookiesInt) + domainContentValues.put(ENABLE_DOM_STORAGE, domStorageInt) + domainContentValues.put(USER_AGENT, userAgentName) + domainContentValues.put(ENABLE_EASYLIST, easyListInt) + domainContentValues.put(ENABLE_EASYPRIVACY, easyPrivacyInt) + domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, fanboysAnnoyanceListInt) + domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, fanboysSocialBlockingListInt) + domainContentValues.put(ULTRALIST, ultraListInt) + domainContentValues.put(ENABLE_ULTRAPRIVACY, ultraPrivacyInt) + domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, blockAllThirdPartyRequestsInt) + domainContentValues.put(FONT_SIZE, fontSizeInt) + domainContentValues.put(SWIPE_TO_REFRESH, swipeToRefreshInt) + domainContentValues.put(WEBVIEW_THEME, webViewThemeInt) + domainContentValues.put(WIDE_VIEWPORT, wideViewportInt) + domainContentValues.put(DISPLAY_IMAGES, displayImagesInt) // Get a writable database handle. val domainsDatabase = this.writableDatabase @@ -434,18 +452,7 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( return newDomainDatabaseId } - fun addDomain(contentValues: ContentValues) { - // Get a writable database handle. - val domainsDatabase = this.writableDatabase - - // Add the new domain. - domainsDatabase.insert(DOMAINS_TABLE, null, contentValues) - - // Close the database handle. - domainsDatabase.close() - } - - fun updateDomain(databaseId: Int, domainName: String, javaScript: Int, cookies: Int, domStorage: Int, formData: Int, userAgent: String, easyList: Int, easyPrivacy: Int, fanboysAnnoyance: Int, + fun updateDomain(databaseId: Int, domainName: String, javaScript: Int, cookies: Int, domStorage: Int, userAgent: String, easyList: Int, easyPrivacy: Int, fanboysAnnoyance: Int, fanboysSocialBlocking: Int, ultraList: Int, ultraPrivacy: Int, blockAllThirdPartyRequests: Int, fontSize: Int, swipeToRefresh: Int, webViewTheme: Int, wideViewport: Int, displayImages: Int, pinnedSslCertificate: Boolean, pinnedIpAddresses: Boolean) { @@ -457,7 +464,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( domainContentValues.put(ENABLE_JAVASCRIPT, javaScript) domainContentValues.put(COOKIES, cookies) domainContentValues.put(ENABLE_DOM_STORAGE, domStorage) - domainContentValues.put(ENABLE_FORM_DATA, formData) // Form data can be removed once the minimum API >= 26. domainContentValues.put(USER_AGENT, userAgent) domainContentValues.put(ENABLE_EASYLIST, easyList) domainContentValues.put(ENABLE_EASYPRIVACY, easyPrivacy) @@ -526,14 +532,17 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( domainsDatabase.close() } - fun deleteDomain(databaseId: Int) { + fun deleteDomain(databaseId: Int) : Int { // Get a writable database handle. val domainsDatabase = this.writableDatabase // Delete the row for the specified database ID. - domainsDatabase.delete(DOMAINS_TABLE, "$ID = $databaseId", null) + val rowsDeleted = domainsDatabase.delete(DOMAINS_TABLE, "$ID = $databaseId", null) // Close the database handle. domainsDatabase.close() + + // Return the delete status. + return rowsDeleted } }