]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt
Add WebView DevTools to the navigation menu. https://redmine.stoutner.com/issues/893
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / helpers / DomainsDatabaseHelper.kt
index 53a3cbe4569c84e22202de8494ccef8b7fd06051..00ffcb4aa50179d51a40d6c86e82771f32c91687 100644 (file)
@@ -30,24 +30,24 @@ import androidx.preference.PreferenceManager
 
 import com.stoutner.privacybrowser.R
 
-// The private constants.
-private const val SCHEMA_VERSION = 13
+// Define the class constants.
+private const val SCHEMA_VERSION = 15
 
 class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(appContext, DOMAINS_DATABASE, null, SCHEMA_VERSION) {
     // Define the public companion object constants.  These can be moved to public class constants once the entire project has migrated to Kotlin.
     companion object {
-        // The database constants.
+        // Define the public database constants.
         const val DOMAINS_DATABASE = "domains.db"
         const val DOMAINS_TABLE = "domains"
 
-        // The spinner constants.
+        // Define the public spinner constants.
         const val SYSTEM_DEFAULT = 0
         const val ENABLED = 1
         const val DISABLED = 2
         const val LIGHT_THEME = 1
         const val DARK_THEME = 2
 
-        // The schema constants.
+        // Define the public schema constants.
         const val ID = "_id"
         const val DOMAIN_NAME = "domainname"
         const val ENABLE_JAVASCRIPT = "enablejavascript"
@@ -79,38 +79,38 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
         const val PINNED_IP_ADDRESSES = "pinned_ip_addresses"
         const val IP_ADDRESSES = "ip_addresses"
 
-        // The table creation constant.
-        const val CREATE_DOMAINS_TABLE = "CREATE TABLE " + DOMAINS_TABLE + " (" +
-                ID + " INTEGER PRIMARY KEY, " +
-                DOMAIN_NAME + " TEXT, " +
-                ENABLE_JAVASCRIPT + " BOOLEAN, " +
-                COOKIES + " BOOLEAN, " +
-                ENABLE_DOM_STORAGE + " BOOLEAN, " +
-                ENABLE_FORM_DATA + " BOOLEAN, " +
-                ENABLE_EASYLIST + " BOOLEAN, " +
-                ENABLE_EASYPRIVACY + " BOOLEAN, " +
-                ENABLE_FANBOYS_ANNOYANCE_LIST + " BOOLEAN, " +
-                ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST + " BOOLEAN, " +
-                ULTRALIST + " BOOLEAN, " +
-                ENABLE_ULTRAPRIVACY + " BOOLEAN, " +
-                BLOCK_ALL_THIRD_PARTY_REQUESTS + " BOOLEAN, " +
-                USER_AGENT + " TEXT, " +
-                FONT_SIZE + " INTEGER, " +
-                SWIPE_TO_REFRESH + " INTEGER, " +
-                WEBVIEW_THEME + " INTEGER, " +
-                WIDE_VIEWPORT + " INTEGER, " +
-                DISPLAY_IMAGES + " INTEGER, " +
-                PINNED_SSL_CERTIFICATE + " BOOLEAN, " +
-                SSL_ISSUED_TO_COMMON_NAME + " TEXT, " +
-                SSL_ISSUED_TO_ORGANIZATION + " TEXT, " +
-                SSL_ISSUED_TO_ORGANIZATIONAL_UNIT + " TEXT, " +
-                SSL_ISSUED_BY_COMMON_NAME + " TEXT, " +
-                SSL_ISSUED_BY_ORGANIZATION + " TEXT, " +
-                SSL_ISSUED_BY_ORGANIZATIONAL_UNIT + " TEXT, " +
-                SSL_START_DATE + " INTEGER, " +
-                SSL_END_DATE + " INTEGER, " +
-                PINNED_IP_ADDRESSES + " BOOLEAN, " +
-                IP_ADDRESSES + " TEXT)"
+        // Define the public table creation constant.
+        const val CREATE_DOMAINS_TABLE = "CREATE TABLE $DOMAINS_TABLE (" +
+                "$ID INTEGER PRIMARY KEY, " +
+                "$DOMAIN_NAME TEXT, " +
+                "$ENABLE_JAVASCRIPT BOOLEAN, " +
+                "$COOKIES BOOLEAN, " +
+                "$ENABLE_DOM_STORAGE BOOLEAN, " +
+                "$ENABLE_FORM_DATA BOOLEAN, " +
+                "$ENABLE_EASYLIST BOOLEAN, " +
+                "$ENABLE_EASYPRIVACY BOOLEAN, " +
+                "$ENABLE_FANBOYS_ANNOYANCE_LIST BOOLEAN, " +
+                "$ENABLE_FANBOYS_SOCIAL_BLOCKING_LIST BOOLEAN, " +
+                "$ULTRALIST BOOLEAN, " +
+                "$ENABLE_ULTRAPRIVACY BOOLEAN, " +
+                "$BLOCK_ALL_THIRD_PARTY_REQUESTS BOOLEAN, " +
+                "$USER_AGENT TEXT, " +
+                "$FONT_SIZE INTEGER, " +
+                "$SWIPE_TO_REFRESH INTEGER, " +
+                "$WEBVIEW_THEME INTEGER, " +
+                "$WIDE_VIEWPORT INTEGER, " +
+                "$DISPLAY_IMAGES INTEGER, " +
+                "$PINNED_SSL_CERTIFICATE BOOLEAN, " +
+                "$SSL_ISSUED_TO_COMMON_NAME TEXT, " +
+                "$SSL_ISSUED_TO_ORGANIZATION TEXT, " +
+                "$SSL_ISSUED_TO_ORGANIZATIONAL_UNIT TEXT, " +
+                "$SSL_ISSUED_BY_COMMON_NAME TEXT, " +
+                "$SSL_ISSUED_BY_ORGANIZATION TEXT, " +
+                "$SSL_ISSUED_BY_ORGANIZATIONAL_UNIT TEXT, " +
+                "$SSL_START_DATE INTEGER, " +
+                "$SSL_END_DATE INTEGER, " +
+                "$PINNED_IP_ADDRESSES BOOLEAN, " +
+                "$IP_ADDRESSES TEXT)"
     }
 
     override fun onCreate(domainsDatabase: SQLiteDatabase) {
@@ -242,6 +242,7 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
             // Add the WebView theme column.  This defaults to `0`, which is `System default`, so a separate step isn't needed to populate the column.
             domainsDatabase.execSQL("ALTER TABLE $DOMAINS_TABLE ADD COLUMN $WEBVIEW_THEME INTEGER")
 
+            // `night_mode` was removed.
             // SQLite amazingly only added a command to drop a column in version 3.35.0.  <https://www.sqlite.org/changes.html>
             // It will be a while before that is supported in Android.  <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 old night mode column.  It will be wiped out the next time an import is run.
@@ -255,6 +256,15 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
             // Copy the data from the old column to the new one.
             domainsDatabase.execSQL("UPDATE $DOMAINS_TABLE SET $COOKIES = enablefirstpartycookies")
         }
+
+        // Upgrade from schema version 13, first used in Privacy Browser 3.8, to schema version 14, first used in Privacy Browser 3.11.
+        // This upgrade used to add the X-Requested-With header, but that was removed in schema version 15.
+
+        // Upgrade from schema version 14, first used in Privacy Browser 3.11, to schema version 15, first used in Privacy Browser 3.12.
+        // This upgrade removed `x_requested_with_header`.
+        // SQLite amazingly only added a command to drop a column in version 3.35.0.  <https://www.sqlite.org/changes.html>
+        // It will be a while before that is supported in Android.  <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 X-Requested-With column.  It will be wiped out the next time an import is run.
     }
 
     val completeCursorOrderedByDomain: Cursor
@@ -310,17 +320,17 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
         val sharedPreferences = PreferenceManager.getDefaultSharedPreferences(appContext)
 
         // Get the default settings.
-        val javaScript = sharedPreferences.getBoolean("javascript", false)
+        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("dom_storage", false)
-        val saveFormData = sharedPreferences.getBoolean("save_form_data", false) // Form data can be removed once the minimum API >= 26.
-        val easyList = sharedPreferences.getBoolean("easylist", true)
-        val easyPrivacy = sharedPreferences.getBoolean("easyprivacy", true)
-        val fanboyAnnoyanceList = sharedPreferences.getBoolean("fanboys_annoyance_list", true)
-        val fanboySocialBlockingList = sharedPreferences.getBoolean("fanboys_social_blocking_list", true)
-        val ultraList = sharedPreferences.getBoolean("ultralist", true)
-        val ultraPrivacy = sharedPreferences.getBoolean("ultraprivacy", true)
-        val blockAllThirdPartyRequests = sharedPreferences.getBoolean("block_all_third_party_requests", 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)
@@ -335,7 +345,7 @@ 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, "System default user agent")
+        domainContentValues.put(USER_AGENT, appContext.getString(R.string.user_agent_default_value))
         domainContentValues.put(FONT_SIZE, 0)
         domainContentValues.put(SWIPE_TO_REFRESH, 0)
         domainContentValues.put(WEBVIEW_THEME, 0)
@@ -367,8 +377,9 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper(
     }
 
     fun updateDomain(databaseId: Int, domainName: String, javaScript: Boolean, cookies: Boolean, domStorage: Boolean, formData: Boolean, easyList: Boolean, easyPrivacy: Boolean, fanboysAnnoyance: Boolean,
-                     fanboysSocialBlocking: Boolean, ultraList: Boolean, ultraPrivacy: Boolean, blockAllThirdPartyRequests: Boolean, userAgent: String, fontSize: Int, swipeToRefresh: Int, webViewTheme: Int,
-                     wideViewport: Int, displayImages: Int, pinnedSslCertificate: Boolean, pinnedIpAddresses: Boolean) {
+                     fanboysSocialBlocking: Boolean, ultraList: Boolean, ultraPrivacy: Boolean, blockAllThirdPartyRequests: Boolean, userAgent: String, fontSize: Int,
+                     swipeToRefresh: Int, webViewTheme: Int, wideViewport: Int, displayImages: Int, pinnedSslCertificate: Boolean, pinnedIpAddresses: Boolean) {
+
         // Instantiate a content values.
         val domainContentValues = ContentValues()