]> gitweb.stoutner.com Git - PrivacyBrowserAndroid.git/blobdiff - app/src/main/java/com/stoutner/privacybrowser/MainWebViewActivity.java
Use the last path segment in the URLs as the default download file name if `Content...
[PrivacyBrowserAndroid.git] / app / src / main / java / com / stoutner / privacybrowser / MainWebViewActivity.java
index 4ac2ceedfffd47441a0025061a4ad15e84843ba3..87f30afe125afe43b6fc8e7f818223050fd730c6 100644 (file)
@@ -23,6 +23,7 @@ import android.annotation.SuppressLint;
 import android.app.Activity;
 import android.app.DialogFragment;
 import android.app.DownloadManager;
+import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
 import android.content.res.Configuration;
@@ -74,6 +75,14 @@ import java.util.Map;
 // We need to use AppCompatActivity from android.support.v7.app.AppCompatActivity to have access to the SupportActionBar until the minimum API is >= 21.
 public class MainWebViewActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, CreateHomeScreenShortcut.CreateHomeScreenSchortcutListener,
         SslCertificateError.SslCertificateErrorListener, DownloadFile.DownloadFileListener {
+    // `privacyBrowserContext` is public static so it can be accessed from `SettingsFragment`.
+    // It is also used in `onCreate()` and `onConfigurationChanged()`.
+    public static Context privacyBrowserContext;
+
+    // `appBar` is public static so it can be accessed from `OrbotProxyHelper`.
+    // It is also used in `onCreate()`.
+    public static ActionBar appBar;
+
     // `favoriteIcon` is public static so it can be accessed from `CreateHomeScreenShortcut`, `BookmarksActivity`, `CreateBookmark`, `CreateBookmarkFolder`, and `EditBookmark`.
     // It is also used in `onCreate()` and `onCreateHomeScreenShortcutCreate()`.
     public static Bitmap favoriteIcon;
@@ -162,10 +171,13 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         // We need a handle for the activity, which is accessed from `SettingsFragment` and fed into `updatePrivacyIcons()`.
         privacyBrowserActivity = this;
 
+        // Get a handle for the application context.
+        privacyBrowserContext = getApplicationContext();
+
         // We need to use the SupportActionBar from android.support.v7.app.ActionBar until the minimum API is >= 21.
         Toolbar supportAppBar = (Toolbar) findViewById(R.id.appBar);
         setSupportActionBar(supportAppBar);
-        final ActionBar appBar = getSupportActionBar();
+        appBar = getSupportActionBar();
 
         // This is needed to get rid of the Android Studio warning that appBar might be null.
         assert appBar != null;
@@ -200,7 +212,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         // Implement swipe to refresh
         swipeToRefresh = (SwipeRefreshLayout) findViewById(R.id.swipeRefreshLayout);
         assert swipeToRefresh != null; //This assert removes the incorrect warning on the following line that swipeToRefresh might be null.
-        swipeToRefresh.setColorSchemeResources(R.color.blue);
+        swipeToRefresh.setColorSchemeResources(R.color.blue_700);
         swipeToRefresh.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() {
             @Override
             public void onRefresh() {
@@ -349,7 +361,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
             public void onDownloadStart(String url, String userAgent, String contentDisposition, String mimetype, long contentLength) {
                 // Show the `DownloadFile` `AlertDialog` and name this instance `@string/download`.
                 DialogFragment downloadFileDialogFragment = DownloadFile.fromUrl(url, contentDisposition, contentLength);
-                downloadFileDialogFragment.show(getFragmentManager(), getResources().getString(R.string.file_download));
+                downloadFileDialogFragment.show(getFragmentManager(), getResources().getString(R.string.download));
             }
         });
 
@@ -448,6 +460,10 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
             customHeaders.put("DNT", "1");
         }
 
+        // Set Orbot proxy status.  The default is `false`.
+        if (sharedPreferences.getBoolean("proxy_through_orbot", false)) {
+            OrbotProxyHelper.setProxy(privacyBrowserContext, privacyBrowserActivity, "localhost", "8118");
+        }
 
         // Get the intent information that started the app.
         final Intent intent = getIntent();
@@ -469,7 +485,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         // If the favorite icon is null, load the default.
         if (favoriteIcon == null) {
             // We have to use `ContextCompat` until API >= 21.
-            Drawable favoriteIconDrawable = ContextCompat.getDrawable(getApplicationContext(), R.drawable.world);
+            Drawable favoriteIconDrawable = ContextCompat.getDrawable(privacyBrowserContext, R.drawable.world);
             BitmapDrawable favoriteIconBitmapDrawable = (BitmapDrawable) favoriteIconDrawable;
             favoriteIcon = favoriteIconBitmapDrawable.getBitmap();
         }
@@ -529,12 +545,10 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         // Set the status of the additional app bar icons.  The default is `false`.
         if (sharedPreferences.getBoolean("display_additional_app_bar_icons", false)) {
             toggleFirstPartyCookies.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
-            toggleThirdPartyCookies.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
             toggleDomStorage.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
             toggleSaveFormData.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_ROOM);
         } else { //Do not display the additional icons.
             toggleFirstPartyCookies.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
-            toggleThirdPartyCookies.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
             toggleDomStorage.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
             toggleSaveFormData.setShowAsAction(MenuItem.SHOW_AS_ACTION_NEVER);
         }
@@ -953,7 +967,7 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         super.onConfigurationChanged(newConfig);
 
         // Reload the ad if this is the free flavor.
-        BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id));
+        BannerAd.reloadAfterRotate(adView, privacyBrowserContext, getString(R.string.ad_id));
 
         // Reinitialize the adView variable, as the View will have been removed and re-added in the free flavor by BannerAd.reloadAfterRotate().
         adView = findViewById(R.id.adView);
@@ -1112,62 +1126,38 @@ public class MainWebViewActivity extends AppCompatActivity implements Navigation
         // Get handles for the icons.
         MenuItem privacyIcon = mainMenu.findItem(R.id.toggleJavaScript);
         MenuItem firstPartyCookiesIcon = mainMenu.findItem(R.id.toggleFirstPartyCookies);
-        MenuItem thirdPartyCookiesIcon = mainMenu.findItem(R.id.toggleThirdPartyCookies);
         MenuItem domStorageIcon = mainMenu.findItem(R.id.toggleDomStorage);
         MenuItem formDataIcon = mainMenu.findItem(R.id.toggleSaveFormData);
 
         // Update `privacyIcon`.
-        if (javaScriptEnabled) {
-            // `JavaScript` is enabled.
+        if (javaScriptEnabled) {  // JavaScript is enabled.
             privacyIcon.setIcon(R.drawable.javascript_enabled);
-        } else {
-            if (firstPartyCookiesEnabled) {
-                // `JavaScript` is disabled but cookies are enabled.
-                privacyIcon.setIcon(R.drawable.warning);
-            } else {
-                // All the dangerous features are disabled.
-                privacyIcon.setIcon(R.drawable.privacy_mode);
-            }
+        } else if (firstPartyCookiesEnabled) {  // JavaScript is disabled but cookies are enabled.
+            privacyIcon.setIcon(R.drawable.warning);
+        } else {  // All the dangerous features are disabled.
+            privacyIcon.setIcon(R.drawable.privacy_mode);
         }
 
         // Update `firstPartyCookiesIcon`.
-        if (firstPartyCookiesEnabled) {
-            // First-party cookies are enabled.
-            firstPartyCookiesIcon.setIcon(R.drawable.cookies_warning);
-        } else {
-            // First-party cookies are disabled.
+        if (firstPartyCookiesEnabled) {  // First-party cookies are enabled.
+            firstPartyCookiesIcon.setIcon(R.drawable.cookies_enabled);
+        } else {  // First-party cookies are disabled.
             firstPartyCookiesIcon.setIcon(R.drawable.cookies_disabled);
         }
 
-        // Update `thirdPartyCookiesIcon`.
-        if (firstPartyCookiesEnabled) {
-            if (thirdPartyCookiesEnabled) {
-                //  Third-party cookies are enabled.  Bad!
-                thirdPartyCookiesIcon.setIcon(R.drawable.cookies_critical);
-            } else {
-                // Third-party cookies are disabled.
-                thirdPartyCookiesIcon.setIcon(R.drawable.cookies_disabled);
-            }
-        } else {
-            // First-party cookies are disabled, so third-party cookies are ghosted.
-            thirdPartyCookiesIcon.setIcon(R.drawable.cookies_ghosted);
-        }
-
         // Update `domStorageIcon`.
-        if (javaScriptEnabled) {
-            if (domStorageEnabled) {
-                domStorageIcon.setIcon(R.drawable.dom_storage_enabled);
-            } else {
-                domStorageIcon.setIcon(R.drawable.dom_storage_disabled);
-            }
-        } else {
+        if (javaScriptEnabled && domStorageEnabled) {  // Both JavaScript and DOM storage is enabled.
+            domStorageIcon.setIcon(R.drawable.dom_storage_enabled);
+        } else if (javaScriptEnabled){  // JavaScript is enabled but DOM storage is disabled.
+            domStorageIcon.setIcon(R.drawable.dom_storage_disabled);
+        } else {  // JavaScript is disabled, so DOM storage is ghosted.
             domStorageIcon.setIcon(R.drawable.dom_storage_ghosted);
         }
 
         // Update `formDataIcon`.
-        if (saveFormDataEnabled) {
+        if (saveFormDataEnabled) {  // Form data is enabled.
             formDataIcon.setIcon(R.drawable.form_data_enabled);
-        } else {
+        } else {  // Form data is disabled.
             formDataIcon.setIcon(R.drawable.form_data_disabled);
         }