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;
// 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;
// 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;
// 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() {
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));
}
});
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();
// 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();
}
// 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);
}
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);
// 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);
}