X-Git-Url: https://gitweb.stoutner.com/?a=blobdiff_plain;f=app%2Fsrc%2Fmain%2Fjava%2Fcom%2Fstoutner%2Fprivacybrowser%2Factivities%2FMainWebView.java;h=8e06fc8bab2cd24787a7209ccf912c916e7da5e8;hb=d45c5240d1a82d1a43742b6aea8173b520697520;hp=aeb8756aa8130ac943496709d1f5d5f82bfcf2dd;hpb=925fcbdd3f66e931f32a23e25371e26cce13947d;p=PrivacyBrowserAndroid.git diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java index aeb8756a..8e06fc8b 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebView.java @@ -22,6 +22,8 @@ package com.stoutner.privacybrowser.activities; import android.annotation.SuppressLint; import android.app.DialogFragment; import android.app.DownloadManager; +import android.content.ClipData; +import android.content.ClipboardManager; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; @@ -431,7 +433,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN }); // drawerToggle creates the hamburger icon at the start of the AppBar. - drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, supportAppBar, R.string.open_navigation, R.string.close_navigation); + drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, supportAppBar, R.string.open_navigation_drawer, R.string.close_navigation_drawer); mainWebView.setWebViewClient(new WebViewClient() { // `shouldOverrideUrlLoading` makes this `WebView` the default handler for URLs inside the app, so that links are not kicked out to other apps. @@ -439,7 +441,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN @SuppressWarnings("deprecation") @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { - // Use an external email program if the link begins with "mailto:". + // Use an external email program if the link begins with `mailto:`. if (url.startsWith("mailto:")) { // We use `ACTION_SENDTO` instead of `ACTION_SEND` so that only email programs are launched. Intent emailIntent = new Intent(Intent.ACTION_SENDTO); @@ -936,7 +938,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN case R.id.clearFormData: WebViewDatabase mainWebViewDatabase = WebViewDatabase.getInstance(this); mainWebViewDatabase.clearFormData(); - mainWebView.reload(); + Snackbar.make(findViewById(R.id.mainWebView), R.string.form_data_deleted, Snackbar.LENGTH_SHORT).show(); return true; case R.id.fontSizeFiftyPercent: @@ -1108,8 +1110,8 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN domStorage.deleteAllData(); // Clear form data. - WebViewDatabase formData = WebViewDatabase.getInstance(this); - formData.clearFormData(); + WebViewDatabase webViewDatabase = WebViewDatabase.getInstance(this); + webViewDatabase.clearFormData(); // Clear cache. The argument of "true" includes disk files. mainWebView.clearCache(true); @@ -1165,16 +1167,13 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); - // Handle the `adView` for the free version. - if (BuildConfig.FLAVOR.contentEquals("free")) { - // Reload the ad if we are not in full screen mode. - if (adView.isShown() && !fullScreenVideoFrameLayout.isShown()) { - // Reload the ad. - BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id)); + // Reload the ad for the free flavor if we are not in full screen mode. + if (BuildConfig.FLAVOR.contentEquals("free") && adView.isShown() && !fullScreenVideoFrameLayout.isShown()) { + // Reload the ad. + BannerAd.reloadAfterRotate(adView, getApplicationContext(), getString(R.string.ad_id)); - // Reinitialize the `adView` variable, as the `View` will have been removed and re-added by `BannerAd.reloadAfterRotate()`. - adView = findViewById(R.id.adView); - } + // Reinitialize the `adView` variable, as the `View` will have been removed and re-added by `BannerAd.reloadAfterRotate()`. + adView = findViewById(R.id.adView); } // `invalidateOptionsMenu` should recalculate the number of action buttons from the menu to display on the app bar, but it doesn't because of the this bug: https://code.google.com/p/android/issues/detail?id=20493#c8 @@ -1190,6 +1189,9 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN final String imageUrl; final String linkUrl; + // Get a handle for the `ClipboardManager`. + final ClipboardManager clipboardManager = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); + switch (hitTestResult.getType()) { // `SRC_ANCHOR_TYPE` is a link. case WebView.HitTestResult.SRC_ANCHOR_TYPE: @@ -1199,7 +1201,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // Set the target URL as the title of the `ContextMenu`. menu.setHeaderTitle(linkUrl); - // Add a `Load URL` button. + // Add a `Load URL` entry. menu.add(R.string.load_url).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -1208,7 +1210,20 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN } }); - // Add a `Cancel` button, which by default closes the `ContextMenu`. + // Add a `Copy URL` entry. + menu.add(R.string.copy_url).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + // Save the link URL in a `ClipData`. + ClipData srcAnchorTypeClipData = ClipData.newPlainText(getResources().getString(R.string.url), linkUrl); + + // Set the `ClipData` as the clipboard's primary clip. + clipboardManager.setPrimaryClip(srcAnchorTypeClipData); + return false; + } + }); + + // Add a `Cancel` entry, which by default closes the `ContextMenu`. menu.add(R.string.cancel); break; @@ -1219,7 +1234,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // Set the target URL as the title of the `ContextMenu`. menu.setHeaderTitle(linkUrl); - // Add a `Write Email` button. + // Add a `Write Email` entry. menu.add(R.string.write_email).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -1238,7 +1253,20 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN } }); - // Add a `Cancel` button, which by default closes the `ContextMenu`. + // Add a `Copy Email Address` entry. + menu.add(R.string.copy_email_address).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + // Save the email address in a `ClipData`. + ClipData srcEmailTypeClipData = ClipData.newPlainText(getResources().getString(R.string.email_address), linkUrl); + + // Set the `ClipData` as the clipboard's primary clip. + clipboardManager.setPrimaryClip(srcEmailTypeClipData); + return false; + } + }); + + // Add a `Cancel` entry, which by default closes the `ContextMenu`. menu.add(R.string.cancel); break; @@ -1250,7 +1278,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // Set the image URL as the title of the `ContextMenu`. menu.setHeaderTitle(imageUrl); - // Add a `View Image` button. + // Add a `View Image` entry. menu.add(R.string.view_image).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -1259,7 +1287,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN } }); - // Add a `Download Image` button. + // Add a `Download Image` entry. menu.add(R.string.download_image).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -1270,7 +1298,20 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN } }); - // Add a `Cancel` button, which by default closes the `ContextMenu`. + // Add a `Copy URL` entry. + menu.add(R.string.copy_url).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + // Save the image URL in a `ClipData`. + ClipData srcImageTypeClipData = ClipData.newPlainText(getResources().getString(R.string.url), imageUrl); + + // Set the `ClipData` as the clipboard's primary clip. + clipboardManager.setPrimaryClip(srcImageTypeClipData); + return false; + } + }); + + // Add a `Cancel` entry, which by default closes the `ContextMenu`. menu.add(R.string.cancel); break; @@ -1283,7 +1324,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN // Set the image URL as the title of the `ContextMenu`. menu.setHeaderTitle(imageUrl); - // Add a `View Image` button. + // Add a `View Image` entry. menu.add(R.string.view_image).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -1292,7 +1333,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN } }); - // Add a `Download Image` button. + // Add a `Download Image` entry. menu.add(R.string.download_image).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { @Override public boolean onMenuItemClick(MenuItem item) { @@ -1303,7 +1344,20 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN } }); - // Add a `Cancel` button, which by default closes the `ContextMenu`. + // Add a `Copy URL` entry. + menu.add(R.string.copy_url).setOnMenuItemClickListener(new MenuItem.OnMenuItemClickListener() { + @Override + public boolean onMenuItemClick(MenuItem item) { + // Save the image URL in a `ClipData`. + ClipData srcImageAnchorTypeClipData = ClipData.newPlainText(getResources().getString(R.string.url), imageUrl); + + // Set the `ClipData` as the clipboard's primary clip. + clipboardManager.setPrimaryClip(srcImageAnchorTypeClipData); + return false; + } + }); + + // Add a `Cancel` entry, which by default closes the `ContextMenu`. menu.add(R.string.cancel); break; } @@ -1420,11 +1474,9 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN mainWebView.clearHistory(); } - // Override onBackPressed to handle the navigation drawer and mainWebView. + // Override `onBackPressed` to handle the navigation drawer and `mainWebView`. @Override public void onBackPressed() { - final WebView mainWebView = (WebView) findViewById(R.id.mainWebView); - // Close the navigation drawer if it is available. GravityCompat.START is the drawer on the left on Left-to-Right layout text. if (drawerLayout.isDrawerVisible(GravityCompat.START)) { drawerLayout.closeDrawer(GravityCompat.START); @@ -1433,7 +1485,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN if (mainWebView.canGoBack()) { mainWebView.goBack(); } else { - // Pass onBackPressed to the system. + // Pass `onBackPressed()` to the system. super.onBackPressed(); } } @@ -1565,7 +1617,7 @@ public class MainWebView extends AppCompatActivity implements NavigationView.OnN SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this); // Store the values from `sharedPreferences` in variables. - String userAgentString = sharedPreferences.getString("user_agent", "Default user agent"); + String userAgentString = sharedPreferences.getString("user_agent", "PrivacyBrowser/1.0"); String customUserAgentString = sharedPreferences.getString("custom_user_agent", "PrivacyBrowser/1.0"); String javaScriptDisabledSearchString = sharedPreferences.getString("javascript_disabled_search", "https://duckduckgo.com/html/?q="); String javaScriptDisabledCustomSearchString = sharedPreferences.getString("javascript_disabled_search_custom_url", "");