diff --git a/build.gradle.kts b/build.gradle.kts index c8b5d24f0..f9c25ad9a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -34,6 +34,7 @@ dependencies { implementation(libs.androidx.preference) implementation(libs.androidx.recyclerview) implementation(libs.androidx.swiperefreshlayout) + implementation(libs.androidx.window) implementation(libs.google.flexbox) implementation(libs.google.material) @@ -183,3 +184,7 @@ tasks.register("Checkstyle", Checkstyle::class) { maxWarnings = 0 configFile = rootProject.file("${project.rootDir}/config/checkstyle/checkstyle.xml") } + +tasks.withType { + options.compilerArgs.addAll(listOf("-Xlint:deprecation", "-Xlint:unchecked")) +} diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 012af5f7e..1a20c481b 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -16,6 +16,7 @@ androidx-fragment = "1.7.1" androidx-preference = "1.2.1" androidx-recyclerview = "1.3.2" androidx-swiperefreshlayout = "1.1.0" +androidx-window = "1.3.0" checkstyle = "10.17.0" commons-lang = "3.14.0" @@ -50,6 +51,7 @@ androidx-fragment = { module = "androidx.fragment:fragment", version.ref = "andr androidx-preference = { module = "androidx.preference:preference", version.ref = "androidx-preference" } androidx-recyclerview = { module = "androidx.recyclerview:recyclerview", version.ref = "androidx-recyclerview" } androidx-swiperefreshlayout = { module = "androidx.swiperefreshlayout:swiperefreshlayout", version.ref = "androidx-swiperefreshlayout" } +androidx-window = { module = "androidx.window:window", version.ref = "androidx-window" } commons-lang = { module = "org.apache.commons:commons-lang3", version.ref = "commons-lang" } commons-text = { module = "org.apache.commons:commons-text", version.ref = "commons-text" } diff --git a/src/main/java/org/quantumbadger/redreader/activities/CommentEditActivity.java b/src/main/java/org/quantumbadger/redreader/activities/CommentEditActivity.java index cad139871..67449504c 100644 --- a/src/main/java/org/quantumbadger/redreader/activities/CommentEditActivity.java +++ b/src/main/java/org/quantumbadger/redreader/activities/CommentEditActivity.java @@ -26,6 +26,8 @@ import android.widget.ScrollView; import androidx.annotation.NonNull; +import androidx.core.content.IntentCompat; +import androidx.core.os.BundleCompat; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.account.RedditAccount; @@ -64,15 +66,17 @@ && getIntent().getBooleanExtra("isSelfPost", false)) { textEdit = (EditText)getLayoutInflater().inflate(R.layout.comment_edit, null); if(getIntent() != null && getIntent().hasExtra("commentIdAndType")) { - //noinspection deprecation - commentIdAndType = getIntent().getParcelableExtra("commentIdAndType"); + commentIdAndType = IntentCompat.getParcelableExtra(getIntent(), + "commentIdAndType", + RedditIdAndType.class); textEdit.setText(getIntent().getStringExtra("commentText")); } else if(savedInstanceState != null && savedInstanceState.containsKey( "commentIdAndType")) { textEdit.setText(savedInstanceState.getString("commentText")); - //noinspection deprecation - commentIdAndType = savedInstanceState.getParcelable("commentIdAndType"); + commentIdAndType = BundleCompat.getParcelable(savedInstanceState, + "commentIdAndType", + RedditIdAndType.class); } final ScrollView sv = new ScrollView(this); diff --git a/src/main/java/org/quantumbadger/redreader/activities/CommentReplyActivity.java b/src/main/java/org/quantumbadger/redreader/activities/CommentReplyActivity.java index 12951e8bf..9cfeb8274 100644 --- a/src/main/java/org/quantumbadger/redreader/activities/CommentReplyActivity.java +++ b/src/main/java/org/quantumbadger/redreader/activities/CommentReplyActivity.java @@ -36,6 +36,8 @@ import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.core.content.IntentCompat; +import androidx.core.os.BundleCompat; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.account.RedditAccount; @@ -119,15 +121,16 @@ protected void onCreate(final Bundle savedInstanceState) { } if(intent != null && intent.hasExtra(PARENT_ID_AND_TYPE_KEY)) { - //noinspection deprecation parentIdAndType = Objects.requireNonNull( - intent.getParcelableExtra(PARENT_ID_AND_TYPE_KEY)); + IntentCompat.getParcelableExtra(intent, + PARENT_ID_AND_TYPE_KEY, + RedditIdAndType.class)); } else if(savedInstanceState != null && savedInstanceState.containsKey(PARENT_ID_AND_TYPE_KEY)) { - //noinspection deprecation - parentIdAndType = Objects.requireNonNull( - savedInstanceState.getParcelable(PARENT_ID_AND_TYPE_KEY)); + parentIdAndType = Objects.requireNonNull(BundleCompat.getParcelable(savedInstanceState, + PARENT_ID_AND_TYPE_KEY, + RedditIdAndType.class)); } else { throw new RuntimeException("No parent ID in CommentReplyActivity"); diff --git a/src/main/java/org/quantumbadger/redreader/activities/ImageViewActivity.java b/src/main/java/org/quantumbadger/redreader/activities/ImageViewActivity.java index 69085d8a3..8aec17ab6 100644 --- a/src/main/java/org/quantumbadger/redreader/activities/ImageViewActivity.java +++ b/src/main/java/org/quantumbadger/redreader/activities/ImageViewActivity.java @@ -45,6 +45,7 @@ import androidx.annotation.OptIn; import androidx.annotation.StringRes; import androidx.annotation.UiThread; +import androidx.core.content.IntentCompat; import androidx.media3.common.MediaItem; import androidx.media3.common.util.UnstableApi; import androidx.media3.exoplayer.source.MediaSource; @@ -180,12 +181,14 @@ protected void onCreate(final Bundle savedInstanceState) { return; } - mPost = intent.getParcelableExtra("post"); + mPost = IntentCompat.getParcelableExtra(intent, "post", RedditPost.class); if(intent.hasExtra("albumUrl")) { LinkHandler.getAlbumInfo( this, - intent.getParcelableExtra("albumUrl"), + Objects.requireNonNull(IntentCompat.getParcelableExtra( + intent, "albumUrl", + UriString.class)), new Priority(Constants.Priority.IMAGE_VIEW), new GetAlbumInfoListener() { diff --git a/src/main/java/org/quantumbadger/redreader/activities/LinkDispatchActivity.java b/src/main/java/org/quantumbadger/redreader/activities/LinkDispatchActivity.java index 63dedd592..92f6233fe 100644 --- a/src/main/java/org/quantumbadger/redreader/activities/LinkDispatchActivity.java +++ b/src/main/java/org/quantumbadger/redreader/activities/LinkDispatchActivity.java @@ -42,7 +42,7 @@ protected void onCreate(final Bundle savedInstanceState) { final View backgroundView = new View(this); - backgroundView.setBackgroundDrawable(new GradientDrawable( + backgroundView.setBackground(new GradientDrawable( GradientDrawable.Orientation.LEFT_RIGHT, new int[] {0xffd32f2f, 0xffb52626})); diff --git a/src/main/java/org/quantumbadger/redreader/activities/OAuthLoginActivity.java b/src/main/java/org/quantumbadger/redreader/activities/OAuthLoginActivity.java index b2accb6a7..9cdcd69d4 100644 --- a/src/main/java/org/quantumbadger/redreader/activities/OAuthLoginActivity.java +++ b/src/main/java/org/quantumbadger/redreader/activities/OAuthLoginActivity.java @@ -20,10 +20,12 @@ import android.annotation.SuppressLint; import android.content.Intent; import android.net.Uri; +import android.os.Build; import android.os.Bundle; import android.webkit.ConsoleMessage; import android.webkit.CookieManager; import android.webkit.WebChromeClient; +import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -34,17 +36,23 @@ import org.quantumbadger.redreader.common.TorCommon; import org.quantumbadger.redreader.reddit.api.RedditOAuth; +import java.util.Objects; + import info.guardianproject.netcipher.webkit.WebkitProxy; public class OAuthLoginActivity extends ViewsBaseActivity { + private static final String OAUTH_HOST = "rr_oauth_redir"; + private static final String REDREADER_SCHEME = "redreader"; + private static final String HTTP_SCHEME = "http"; + private WebView mWebView; @Override protected void onDestroy() { super.onDestroy(); final CookieManager cookieManager = CookieManager.getInstance(); - cookieManager.removeAllCookie(); + cookieManager.removeAllCookies(null); } @SuppressLint("SetJavaScriptEnabled") @@ -57,7 +65,7 @@ public void onCreate(final Bundle savedInstanceState) { mWebView = new WebView(this); - if(TorCommon.isTorEnabled()) { + if (TorCommon.isTorEnabled()) { try { final boolean result = WebkitProxy.setProxy( RedReader.class.getCanonicalName(), @@ -65,12 +73,12 @@ public void onCreate(final Bundle savedInstanceState) { mWebView, "127.0.0.1", 8118); - if(!result) { + if (!result) { BugReportActivity.handleGlobalError( this, getResources().getString(R.string.error_tor_setting_failed)); } - } catch(final Exception e) { + } catch (final Exception e) { BugReportActivity.handleGlobalError(this, e); } } @@ -83,8 +91,9 @@ public void onCreate(final Bundle savedInstanceState) { settings.setUseWideViewPort(true); settings.setLoadWithOverviewMode(true); settings.setDomStorageEnabled(true); - settings.setSaveFormData(false); - settings.setSavePassword(false); + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + settings.setSaveFormData(false); + } settings.setDatabaseEnabled(false); settings.setCacheMode(WebSettings.LOAD_NO_CACHE); settings.setDisplayZoomControls(false); @@ -100,18 +109,19 @@ public boolean onConsoleMessage(final ConsoleMessage consoleMessage) { @Override public boolean shouldOverrideUrlLoading( final WebView view, - final String url) { - - if(url.startsWith("http://rr_oauth_redir") - || url.startsWith("redreader://rr_oauth_redir")) { // TODO constant + final WebResourceRequest request) { + final Uri url = request.getUrl(); + if (Objects.equals(url.getHost(), OAUTH_HOST) && + (Objects.equals(url.getScheme(), REDREADER_SCHEME) || + Objects.equals(url.getScheme(), HTTP_SCHEME))) { final Intent intent = new Intent(); intent.putExtra("url", url); setResult(123, intent); finish(); } else { - setTitle(Uri.parse(url).getHost()); + setTitle(url.getHost()); return false; } @@ -129,7 +139,7 @@ protected void onPause() { super.onPause(); - if(mWebView != null) { + if (mWebView != null) { mWebView.onPause(); mWebView.pauseTimers(); } @@ -139,7 +149,7 @@ protected void onPause() { protected void onResume() { super.onResume(); - if(mWebView != null) { + if (mWebView != null) { mWebView.resumeTimers(); mWebView.onResume(); } diff --git a/src/main/java/org/quantumbadger/redreader/activities/OptionsMenuUtility.java b/src/main/java/org/quantumbadger/redreader/activities/OptionsMenuUtility.java index cf57d0caa..34bf62b53 100644 --- a/src/main/java/org/quantumbadger/redreader/activities/OptionsMenuUtility.java +++ b/src/main/java/org/quantumbadger/redreader/activities/OptionsMenuUtility.java @@ -18,17 +18,16 @@ package org.quantumbadger.redreader.activities; import android.app.Activity; -import android.content.Context; import android.content.Intent; -import android.graphics.Point; +import android.graphics.Rect; import android.view.Menu; import android.view.MenuItem; import android.view.SubMenu; -import android.view.WindowManager; import androidx.annotation.StringRes; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.window.layout.WindowMetricsCalculator; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -489,14 +488,14 @@ public static void pruneMenu( final boolean backButtonShown) { //Figure out how many buttons can fit - final Point windowSize = new Point(); - ((WindowManager)activity.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay() - .getSize(windowSize); + + final Rect windowBounds = WindowMetricsCalculator.getOrCreate() + .computeCurrentWindowMetrics(activity).getBounds(); final int buttonSize = General.dpToPixels(activity, 48); final int backButtonSize = General.dpToPixels(activity, 52); - int buttonSlotsRemaining = (windowSize.x - (backButtonShown + int buttonSlotsRemaining = (windowBounds.width() - (backButtonShown ? backButtonSize : 0)) / buttonSize; diff --git a/src/main/java/org/quantumbadger/redreader/activities/WebViewActivity.java b/src/main/java/org/quantumbadger/redreader/activities/WebViewActivity.java index 3a1880da6..30a403151 100644 --- a/src/main/java/org/quantumbadger/redreader/activities/WebViewActivity.java +++ b/src/main/java/org/quantumbadger/redreader/activities/WebViewActivity.java @@ -24,6 +24,8 @@ import android.view.View; import android.widget.Toast; +import androidx.core.content.IntentCompat; + import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.common.General; import org.quantumbadger.redreader.common.LinkHandler; @@ -55,8 +57,8 @@ public void onCreate(final Bundle savedInstanceState) { final Intent intent = getIntent(); - final UriString url = intent.getParcelableExtra("url"); - mPost = intent.getParcelableExtra("post"); + final UriString url = IntentCompat.getParcelableExtra(intent, "url", UriString.class); + mPost = IntentCompat.getParcelableExtra(intent, "post", RedditPost.class); if(url == null) { BugReportActivity.handleGlobalError(this, "No URL"); diff --git a/src/main/java/org/quantumbadger/redreader/common/General.kt b/src/main/java/org/quantumbadger/redreader/common/General.kt index 7aef2d017..837ab99fa 100644 --- a/src/main/java/org/quantumbadger/redreader/common/General.kt +++ b/src/main/java/org/quantumbadger/redreader/common/General.kt @@ -17,6 +17,7 @@ package org.quantumbadger.redreader.common +import android.app.Activity import android.app.Dialog import android.content.Context import android.content.DialogInterface @@ -704,13 +705,18 @@ object General { // http://stackoverflow.com/a/3419987/1526861 val intent = activity.intent - activity.overridePendingTransition(0, 0) intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION) activity.finish() - activity.overridePendingTransition(0, 0) + activity.overridePendingTransitionWithNoAnimation() activity.startActivity(intent) + activity.overridePendingTransitionWithNoAnimation() } + @Suppress("DEPRECATION") + private fun Activity.overridePendingTransitionWithNoAnimation() { + overridePendingTransition(0, 0) + } + @JvmStatic fun safeDismissDialog(dialog: Dialog) { runOnUiThread { diff --git a/src/main/java/org/quantumbadger/redreader/common/MediaUtils.java b/src/main/java/org/quantumbadger/redreader/common/MediaUtils.java index 8bf55cc44..8e481c393 100644 --- a/src/main/java/org/quantumbadger/redreader/common/MediaUtils.java +++ b/src/main/java/org/quantumbadger/redreader/common/MediaUtils.java @@ -185,8 +185,7 @@ public void close() throws IOException { if((extractor.getSampleFlags() & MediaExtractor.SAMPLE_FLAG_SYNC) != 0) { - //noinspection deprecation - flags |= MediaCodec.BUFFER_FLAG_SYNC_FRAME; + flags |= MediaCodec.BUFFER_FLAG_KEY_FRAME; } if((extractor.getSampleFlags() diff --git a/src/main/java/org/quantumbadger/redreader/fragments/CommentPropertiesDialog.java b/src/main/java/org/quantumbadger/redreader/fragments/CommentPropertiesDialog.java index 85eee09cc..ea65fad5a 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/CommentPropertiesDialog.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/CommentPropertiesDialog.java @@ -22,12 +22,15 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; +import androidx.core.os.BundleCompat; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.activities.BaseActivity; import org.quantumbadger.redreader.reddit.kthings.RedditComment; import org.quantumbadger.redreader.reddit.kthings.RedditFieldEdited; +import java.util.Objects; + public final class CommentPropertiesDialog extends PropertiesDialog { public static CommentPropertiesDialog newInstance(final RedditComment comment) { @@ -51,7 +54,10 @@ protected void prepare( @NonNull final BaseActivity context, @NonNull final LinearLayout items) { - final RedditComment comment = getArguments().getParcelable("comment"); + final RedditComment comment = Objects.requireNonNull( + BundleCompat.getParcelable(requireArguments(), + "comment", + RedditComment.class)); items.addView(propView(context, "ID", comment.getName().getValue(), true)); diff --git a/src/main/java/org/quantumbadger/redreader/fragments/ImageInfoDialog.java b/src/main/java/org/quantumbadger/redreader/fragments/ImageInfoDialog.java index 74a97c642..0b68e1ed9 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/ImageInfoDialog.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/ImageInfoDialog.java @@ -22,11 +22,14 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; +import androidx.core.os.BundleCompat; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.activities.BaseActivity; import org.quantumbadger.redreader.image.ImageInfo; +import java.util.Objects; + public final class ImageInfoDialog extends PropertiesDialog { public static ImageInfoDialog newInstance(final ImageInfo info) { @@ -50,7 +53,9 @@ protected void prepare( @NonNull final BaseActivity context, @NonNull final LinearLayout items) { - final ImageInfo info = getArguments().getParcelable("info"); + final ImageInfo info = Objects.requireNonNull(BundleCompat.getParcelable(requireArguments(), + "info", + ImageInfo.class)); boolean first = true; diff --git a/src/main/java/org/quantumbadger/redreader/fragments/PostPropertiesDialog.java b/src/main/java/org/quantumbadger/redreader/fragments/PostPropertiesDialog.java index c90c733e3..1d68400b7 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/PostPropertiesDialog.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/PostPropertiesDialog.java @@ -22,12 +22,15 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; +import androidx.core.os.BundleCompat; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.activities.BaseActivity; import org.quantumbadger.redreader.reddit.kthings.RedditFieldEdited; import org.quantumbadger.redreader.reddit.kthings.RedditPost; +import java.util.Objects; + public final class PostPropertiesDialog extends PropertiesDialog { public static PostPropertiesDialog newInstance(final RedditPost post) { @@ -51,7 +54,10 @@ protected void prepare( @NonNull final BaseActivity context, @NonNull final LinearLayout items) { - final RedditPost post = getArguments().getParcelable("post"); + final RedditPost post = Objects.requireNonNull( + BundleCompat.getParcelable(requireArguments(), + "post", + RedditPost.class)); // TODO nullability diff --git a/src/main/java/org/quantumbadger/redreader/fragments/ShareOrderDialog.java b/src/main/java/org/quantumbadger/redreader/fragments/ShareOrderDialog.java index f7955fdce..37a2d9c67 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/ShareOrderDialog.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/ShareOrderDialog.java @@ -27,6 +27,8 @@ import android.widget.ListView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatDialogFragment; +import androidx.core.os.BundleCompat; + import com.google.android.material.dialog.MaterialAlertDialogBuilder; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.adapters.ShareOrderAdapter; @@ -64,7 +66,7 @@ public void onCreate(final Bundle savedInstanceState) { super.onCreate(savedInstanceState); context = getContext(); packageManager = getActivity().getPackageManager(); - shareIntent = getArguments().getParcelable("intent"); + shareIntent = BundleCompat.getParcelable(requireArguments(), "intent", Intent.class); } @NonNull diff --git a/src/main/java/org/quantumbadger/redreader/fragments/UserPropertiesDialog.java b/src/main/java/org/quantumbadger/redreader/fragments/UserPropertiesDialog.java index 5bb6daa87..1eb28ea58 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/UserPropertiesDialog.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/UserPropertiesDialog.java @@ -22,12 +22,15 @@ import android.widget.LinearLayout; import androidx.annotation.NonNull; +import androidx.core.os.BundleCompat; import org.quantumbadger.redreader.R; import org.quantumbadger.redreader.activities.BaseActivity; import org.quantumbadger.redreader.common.time.TimestampUTC; import org.quantumbadger.redreader.reddit.things.RedditUser; +import java.util.Objects; + public final class UserPropertiesDialog extends PropertiesDialog { public static UserPropertiesDialog newInstance(final RedditUser user) { @@ -43,7 +46,9 @@ public static UserPropertiesDialog newInstance(final RedditUser user) { @Override protected String getTitle(final Context context) { - return getArguments().getParcelable("user").name; + return Objects.requireNonNull(BundleCompat.getParcelable(requireArguments(), + "user", + RedditUser.class)).name; } @Override @@ -51,7 +56,10 @@ protected void prepare( @NonNull final BaseActivity context, @NonNull final LinearLayout items) { - final RedditUser user = getArguments().getParcelable("user"); + final RedditUser user = Objects.requireNonNull( + BundleCompat.getParcelable(requireArguments(), + "user", + RedditUser.class)); items.addView(propView( context, diff --git a/src/main/java/org/quantumbadger/redreader/fragments/WebViewFragment.java b/src/main/java/org/quantumbadger/redreader/fragments/WebViewFragment.java index ca092bf64..a285be3f3 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/WebViewFragment.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/WebViewFragment.java @@ -28,7 +28,7 @@ import android.view.ViewGroup; import android.view.WindowManager; import android.webkit.CookieManager; -import android.webkit.CookieSyncManager; +import android.webkit.WebResourceRequest; import android.webkit.WebSettings; import android.webkit.WebView; import android.webkit.WebViewClient; @@ -37,6 +37,7 @@ import android.widget.Toast; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.os.BundleCompat; import androidx.fragment.app.Fragment; import com.google.android.material.dialog.MaterialAlertDialogBuilder; @@ -63,6 +64,7 @@ import java.net.URISyntaxException; import java.util.Locale; +import java.util.Objects; import java.util.Timer; import java.util.TimerTask; @@ -110,8 +112,8 @@ public static WebViewFragment newInstanceHtml(final String html) { public void onCreate(final Bundle savedInstanceState) { // TODO load position/etc? super.onCreate(savedInstanceState); - mUrl = getArguments().getParcelable("url"); - html = getArguments().getString("html"); + mUrl = BundleCompat.getParcelable(requireArguments(), "url", UriString.class); + html = requireArguments().getString("html"); } @SuppressLint("SetJavaScriptEnabled") @@ -123,11 +125,11 @@ public View onCreateView( mActivity = (BaseActivity)getActivity(); - CookieSyncManager.createInstance(mActivity); - outer = (FrameLayout)inflater.inflate(R.layout.web_view_fragment, null); - final RedditPost srcPost = getArguments().getParcelable("post"); + final RedditPost srcPost = BundleCompat.getParcelable(requireArguments(), + "post", + RedditPost.class); final RedditPreparedPost post; if(srcPost != null) { @@ -275,13 +277,15 @@ public void onProgressChanged(final WebView view, final int newProgress) { @Override public boolean shouldOverrideUrlLoading( final WebView view, - final String url) { + final WebResourceRequest request) { - if(url == null) { + if(request == null) { return false; } - if(url.startsWith("data:")) { + final Uri url = request.getUrl(); + + if (Objects.equals(url.getScheme(), "data")) { // Prevent imgur bug where we're directed to some random data URI return true; } @@ -304,8 +308,8 @@ public boolean shouldOverrideUrlLoading( } } else { - if(RedditURLParser.parse(Uri.parse(url)) != null) { - LinkHandler.onLinkClicked(mActivity, new UriString(url), false); + if(RedditURLParser.parse(url) != null) { + LinkHandler.onLinkClicked(mActivity, UriString.from(url), false); } else { // When websites recognize the user agent is on Android, they sometimes // redirect or offer deep links into native apps. These come in two flavors: @@ -325,29 +329,30 @@ public boolean shouldOverrideUrlLoading( // fail, in which case the logic falls through and treats these URLs as // HTTP URLs. - if (url.startsWith("intent:")) { + if (Objects.equals(url.getScheme(), "intent")) { if (onEncounteredIntentUrl(url)) { return true; } - } else if (!url.startsWith("http:") && !url.startsWith("https:")) { + } else if (!Objects.equals(url.getScheme(), "http") + && !Objects.equals(url.getScheme(), "https")) { if (onEncounteredCustomSchemeUrl(url)) { return true; } } - if(!PrefsUtility.pref_behaviour_useinternalbrowser()) { + if (!PrefsUtility.pref_behaviour_useinternalbrowser()) { LinkHandler.openWebBrowser( mActivity, - Uri.parse(url), + url, true); - } else if(PrefsUtility.pref_behaviour_usecustomtabs()) { + } else if (PrefsUtility.pref_behaviour_usecustomtabs()) { LinkHandler.openCustomTab( mActivity, - Uri.parse(url), + url, null); } else { - webView.loadUrl(url); - currentUrl = new UriString(url); + webView.loadUrl(url.toString()); + currentUrl = UriString.from(url); } } } @@ -358,10 +363,10 @@ public boolean shouldOverrideUrlLoading( /** * Assumes the {@code url} starts with `intent://` */ - private boolean onEncounteredIntentUrl(final String url) { + private boolean onEncounteredIntentUrl(final Uri url) { final Intent nativeAppIntent; try { - nativeAppIntent = Intent.parseUri(url, Intent.URI_INTENT_SCHEME); + nativeAppIntent = Intent.parseUri(url.toString(), Intent.URI_INTENT_SCHEME); } catch (final URISyntaxException e) { return false; } @@ -384,8 +389,8 @@ private boolean onEncounteredIntentUrl(final String url) { * Assumes the {@code url} starts with something other than `intent://`, `http://` or * `https://` */ - private boolean onEncounteredCustomSchemeUrl(final String url) { - final Intent nativeAppIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); + private boolean onEncounteredCustomSchemeUrl(final Uri url) { + final Intent nativeAppIntent = new Intent(Intent.ACTION_VIEW, url); try { startActivity(nativeAppIntent); return true; @@ -518,7 +523,7 @@ public void onDestroyView() { webView.destroy(); final CookieManager cookieManager = CookieManager.getInstance(); - cookieManager.removeAllCookie(); + cookieManager.removeAllCookies(null); super.onDestroyView(); } diff --git a/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitContentFragment.java b/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitContentFragment.java index 83a6a05a7..ec34f6596 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitContentFragment.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitContentFragment.java @@ -38,6 +38,7 @@ import androidx.annotation.Nullable; import androidx.annotation.StringRes; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.os.BundleCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; @@ -108,8 +109,10 @@ public Bundle toBundle() { @NonNull public static Args fromBundle(@NonNull final Bundle bundle) { return new Args( - bundle.getString(KEY_USER), - bundle.getParcelable(KEY_SUBREDDIT), + Objects.requireNonNull(bundle.getString(KEY_USER)), + Objects.requireNonNull(BundleCompat.getParcelable(bundle, + KEY_SUBREDDIT, + SubredditCanonicalId.class)), bundle.getString(KEY_URL)); } } diff --git a/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitSubredditSelectionFragment.java b/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitSubredditSelectionFragment.java index 92cb3ec88..c082d5368 100644 --- a/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitSubredditSelectionFragment.java +++ b/src/main/java/org/quantumbadger/redreader/fragments/postsubmit/PostSubmitSubredditSelectionFragment.java @@ -27,6 +27,7 @@ import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.appcompat.app.AppCompatActivity; +import androidx.core.os.BundleCompat; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentActivity; import androidx.recyclerview.widget.LinearLayoutManager; @@ -74,7 +75,9 @@ public Bundle toBundle() { @NonNull public static Args fromBundle(@NonNull final Bundle bundle) { - return new Args(bundle.getParcelable(KEY_SUBREDDIT)); + return new Args(BundleCompat.getParcelable(bundle, + KEY_SUBREDDIT, + SubredditCanonicalId.class)); } } diff --git a/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonArray.java b/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonArray.java index a0f73edb8..c98bfb7d0 100644 --- a/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonArray.java +++ b/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonArray.java @@ -41,7 +41,7 @@ protected JsonArray(final JsonParser parser) throws IOException { throw new JsonParseException( parser, "Expecting array start, got " + parser.currentToken(), - parser.getCurrentLocation()); + parser.currentLocation()); } parser.nextToken(); diff --git a/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonObject.java b/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonObject.java index 1fd3dd94f..a4a38991d 100644 --- a/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonObject.java +++ b/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonObject.java @@ -47,7 +47,7 @@ protected JsonObject(final JsonParser parser) throws IOException { throw new JsonParseException( parser, "Expecting object start, got " + parser.currentToken(), - parser.getCurrentLocation()); + parser.currentLocation()); } parser.nextToken(); @@ -58,10 +58,10 @@ protected JsonObject(final JsonParser parser) throws IOException { if(jt != JsonToken.FIELD_NAME) { throw new JsonParseException(parser, "Expecting field name, got " + jt.name(), - parser.getCurrentLocation()); + parser.currentLocation()); } - final String fieldName = parser.getCurrentName(); + final String fieldName = parser.currentName(); parser.nextToken(); final JsonValue value = JsonValue.parse(parser); diff --git a/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonValue.java b/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonValue.java index b4ea38dd6..2d38fa35d 100644 --- a/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonValue.java +++ b/src/main/java/org/quantumbadger/redreader/jsonwrap/JsonValue.java @@ -89,7 +89,7 @@ public static JsonValue parse(final JsonParser parser) throws IOException { throw new JsonParseException( parser, "Expecting an object, literal, or array, got: " + parser.currentToken(), - parser.getCurrentLocation()); + parser.currentLocation()); } } diff --git a/src/main/java/org/quantumbadger/redreader/views/LinkDetailsView.java b/src/main/java/org/quantumbadger/redreader/views/LinkDetailsView.java index d3b1e0dfb..86ced7709 100644 --- a/src/main/java/org/quantumbadger/redreader/views/LinkDetailsView.java +++ b/src/main/java/org/quantumbadger/redreader/views/LinkDetailsView.java @@ -100,8 +100,7 @@ public LinkDetailsView( border.getPaint().setStrokeWidth(borderPx); border.getPaint().setStyle(Paint.Style.STROKE); - //noinspection deprecation - setBackgroundDrawable(border); + setBackground(border); setOnTouchListener((v, event) -> { diff --git a/src/main/java/org/quantumbadger/redreader/views/webview/WebViewFixed.java b/src/main/java/org/quantumbadger/redreader/views/webview/WebViewFixed.java index e977cb1f9..1c892725f 100644 --- a/src/main/java/org/quantumbadger/redreader/views/webview/WebViewFixed.java +++ b/src/main/java/org/quantumbadger/redreader/views/webview/WebViewFixed.java @@ -204,6 +204,6 @@ public void clearBrowser() { this.clearCache(true); this.clearFormData(); this.clearHistory(); - CookieManager.getInstance().removeAllCookie(); + CookieManager.getInstance().removeAllCookies(null); } }