]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt
First wrong button text in View Headers in night theme. https://redmine.stoutner...
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / helpers / DomainsDatabaseHelper.kt
index d7270a2a8b8446f363b59fa1ef59292df87ad991..38ce8992fcac52ee2a35d680aaacf69ac7525383 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright © 2017-2023 Soren Stoutner <soren@stoutner.com>.
+ * Copyright 2017-2024 Soren Stoutner <soren@stoutner.com>.
  *
  * This file is part of Privacy Browser Android <https://www.stoutner.com/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,7 @@ 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, " +
         "$ENABLE_FANBOYS_ANNOYANCE_LIST INTEGER, " +
@@ -91,7 +90,6 @@ const val CREATE_DOMAINS_TABLE = "CREATE TABLE $DOMAINS_TABLE (" +
         "$ULTRALIST INTEGER, " +
         "$ENABLE_ULTRAPRIVACY INTEGER, " +
         "$BLOCK_ALL_THIRD_PARTY_REQUESTS INTEGER, " +
-        "$USER_AGENT TEXT, " +
         "$FONT_SIZE INTEGER, " +
         "$SWIPE_TO_REFRESH INTEGER, " +
         "$WEBVIEW_THEME 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.  <https://www.sqlite.org/changes.html>
+            // That will not be supported in Android until the minimum API >= 34.  <https://developer.android.com/reference/android/database/sqlite/package-summary>
+            // 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,45 +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()
 
-        // Get a handle for the shared preference.
-        val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext)
-
-        // Get the default settings.
-        val javaScript = sharedPreferences.getBoolean(appContext.getString(R.string.javascript_key), false)
-        val cookies = sharedPreferences.getBoolean(appContext.getString(R.string.cookies_key), false)
-        val domStorage = sharedPreferences.getBoolean(appContext.getString(R.string.dom_storage_key), false)
-        val saveFormData = sharedPreferences.getBoolean(appContext.getString(R.string.save_form_data_key), false)  // Form data can be removed once the minimum API >= 26.
-        val easyList = sharedPreferences.getBoolean(appContext.getString(R.string.easylist_key), true)
-        val easyPrivacy = sharedPreferences.getBoolean(appContext.getString(R.string.easyprivacy_key), true)
-        val fanboyAnnoyanceList = sharedPreferences.getBoolean(appContext.getString(R.string.fanboys_annoyance_list_key), true)
-        val fanboySocialBlockingList = sharedPreferences.getBoolean(appContext.getString(R.string.fanboys_social_blocking_list_key), true)
-        val ultraList = sharedPreferences.getBoolean(appContext.getString(R.string.ultralist_key), true)
-        val ultraPrivacy = sharedPreferences.getBoolean(appContext.getString(R.string.ultraprivacy_key), true)
-        val blockAllThirdPartyRequests = sharedPreferences.getBoolean(appContext.getString(R.string.block_all_third_party_requests_key), false)
-
         // 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, javaScript)
-        domainContentValues.put(COOKIES, cookies)
-        domainContentValues.put(ENABLE_DOM_STORAGE, domStorage)
-        domainContentValues.put(ENABLE_FORM_DATA, saveFormData) // Form data can be removed once the minimum API >= 26.
-        domainContentValues.put(ENABLE_EASYLIST, easyList)
-        domainContentValues.put(ENABLE_EASYPRIVACY, easyPrivacy)
-        domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, fanboyAnnoyanceList)
-        domainContentValues.put(ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST, fanboySocialBlockingList)
-        domainContentValues.put(ULTRALIST, ultraList)
-        domainContentValues.put(ENABLE_ULTRAPRIVACY, ultraPrivacy)
-        domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, blockAllThirdPartyRequests)
-        domainContentValues.put(USER_AGENT, appContext.getString(R.string.system_default_user_agent))
-        domainContentValues.put(FONT_SIZE, 0)
-        domainContentValues.put(SWIPE_TO_REFRESH, 0)
-        domainContentValues.put(WEBVIEW_THEME, 0)
-        domainContentValues.put(WIDE_VIEWPORT, 0)
-        domainContentValues.put(DISPLAY_IMAGES, 0)
+        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
@@ -450,19 +452,8 @@ 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, easyList: Int, easyPrivacy: Int, fanboysAnnoyance: Int, fanboysSocialBlocking: Int,
-                     ultraList: Int, ultraPrivacy: Int, blockAllThirdPartyRequests: Int, userAgent: String, fontSize: Int, swipeToRefresh: Int, webViewTheme: Int, wideViewport: Int, displayImages: 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) {
 
         // Instantiate a content values.
@@ -473,7 +464,7 @@ 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)
         domainContentValues.put(ENABLE_FANBOYS_ANNOYANCE_LIST, fanboysAnnoyance)
@@ -481,7 +472,6 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
         domainContentValues.put(ULTRALIST, ultraList)
         domainContentValues.put(ENABLE_ULTRAPRIVACY, ultraPrivacy)
         domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, blockAllThirdPartyRequests)
-        domainContentValues.put(USER_AGENT, userAgent)
         domainContentValues.put(FONT_SIZE, fontSize)
         domainContentValues.put(SWIPE_TO_REFRESH, swipeToRefresh)
         domainContentValues.put(WEBVIEW_THEME, webViewTheme)
@@ -542,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
     }
 }