X-Git-Url: https://gitweb.stoutner.com/?p=PrivacyBrowserAndroid.git;a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Fhelpers%2FDomainsDatabaseHelper.kt;h=98969343de63f8c3fb78c856bb416a4fa62c6a58;hp=53a3cbe4569c84e22202de8494ccef8b7fd06051;hb=9e11e18f4775c6bdd41f752f3baa290a0b50621d;hpb=9338dfa2f8a295736d35e4f468f0c0ba573a1b58 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 53a3cbe4..98969343 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt +++ b/app/src/main/java/com/stoutner/privacybrowser/helpers/DomainsDatabaseHelper.kt @@ -31,7 +31,7 @@ import androidx.preference.PreferenceManager import com.stoutner.privacybrowser.R // The private constants. -private const val SCHEMA_VERSION = 13 +private const val SCHEMA_VERSION = 14 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. @@ -62,6 +62,7 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( const val ENABLE_ULTRAPRIVACY = "enableultraprivacy" const val BLOCK_ALL_THIRD_PARTY_REQUESTS = "blockallthirdpartyrequests" const val USER_AGENT = "useragent" + const val X_REQUESTED_WITH_HEADER = "x_requested_with_header" const val FONT_SIZE = "fontsize" const val SWIPE_TO_REFRESH = "swipetorefresh" const val WEBVIEW_THEME = "webview_theme" @@ -80,37 +81,38 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( 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)" + 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, " + + "$X_REQUESTED_WITH_HEADER INTEGER, " + + "$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) { @@ -255,6 +257,12 @@ 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. + if (oldVersion < 14) { + // Add the X-Requested-With header 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 $X_REQUESTED_WITH_HEADER INTEGER") + } } val completeCursorOrderedByDomain: Cursor @@ -310,17 +318,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 +343,8 @@ 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(X_REQUESTED_WITH_HEADER, 0) domainContentValues.put(FONT_SIZE, 0) domainContentValues.put(SWIPE_TO_REFRESH, 0) domainContentValues.put(WEBVIEW_THEME, 0) @@ -367,8 +376,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, xRequestedWithHeader: Int, fontSize: Int, + swipeToRefresh: Int, webViewTheme: Int, wideViewport: Int, displayImages: Int, pinnedSslCertificate: Boolean, pinnedIpAddresses: Boolean) { + // Instantiate a content values. val domainContentValues = ContentValues() @@ -386,6 +396,7 @@ class DomainsDatabaseHelper(private val appContext: Context) : SQLiteOpenHelper( domainContentValues.put(ENABLE_ULTRAPRIVACY, ultraPrivacy) domainContentValues.put(BLOCK_ALL_THIRD_PARTY_REQUESTS, blockAllThirdPartyRequests) domainContentValues.put(USER_AGENT, userAgent) + domainContentValues.put(X_REQUESTED_WITH_HEADER, xRequestedWithHeader) domainContentValues.put(FONT_SIZE, fontSize) domainContentValues.put(SWIPE_TO_REFRESH, swipeToRefresh) domainContentValues.put(WEBVIEW_THEME, webViewTheme)