From ee5ce0c8096cf735588b7b9d13bdc74d39f0f69d Mon Sep 17 00:00:00 2001 From: Stypox Date: Sat, 11 Apr 2020 11:51:40 +0200 Subject: [PATCH] Save and restore cookies to/from preferences So that the user does not have to solve a recaptcha every time he opens the app --- .../debug/java/org/schabi/newpipe/DebugApp.java | 4 +++- app/src/main/java/org/schabi/newpipe/App.java | 13 ++++++++++++- .../java/org/schabi/newpipe/ReCaptchaActivity.java | 14 +++++++++++--- app/src/main/res/values/settings_keys.xml | 1 + 4 files changed, 27 insertions(+), 5 deletions(-) diff --git a/app/src/debug/java/org/schabi/newpipe/DebugApp.java b/app/src/debug/java/org/schabi/newpipe/DebugApp.java index 4d763aeb1..6bcf71035 100644 --- a/app/src/debug/java/org/schabi/newpipe/DebugApp.java +++ b/app/src/debug/java/org/schabi/newpipe/DebugApp.java @@ -40,8 +40,10 @@ public class DebugApp extends App { @Override protected Downloader getDownloader() { - return DownloaderImpl.init(new OkHttpClient.Builder() + DownloaderImpl downloader = DownloaderImpl.init(new OkHttpClient.Builder() .addNetworkInterceptor(new StethoInterceptor())); + setCookiesToDownloader(downloader); + return downloader; } private void initStetho() { diff --git a/app/src/main/java/org/schabi/newpipe/App.java b/app/src/main/java/org/schabi/newpipe/App.java index 7e9df0bed..4d05c69cc 100644 --- a/app/src/main/java/org/schabi/newpipe/App.java +++ b/app/src/main/java/org/schabi/newpipe/App.java @@ -5,10 +5,12 @@ import android.app.Application; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Context; +import android.content.SharedPreferences; import android.os.Build; import android.util.Log; import androidx.annotation.Nullable; +import androidx.preference.PreferenceManager; import com.nostra13.universalimageloader.cache.memory.impl.LRULimitedMemoryCache; import com.nostra13.universalimageloader.core.ImageLoader; @@ -125,7 +127,16 @@ public class App extends Application { } protected Downloader getDownloader() { - return DownloaderImpl.init(null); + DownloaderImpl downloader = DownloaderImpl.init(null); + setCookiesToDownloader(downloader); + return downloader; + } + + protected void setCookiesToDownloader(final DownloaderImpl downloader) { + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( + getApplicationContext()); + final String key = getApplicationContext().getString(R.string.recaptcha_cookies_key); + downloader.setCookies(prefs.getString(key, "")); } private void configureRxJavaErrorHandler() { diff --git a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java index 9741372df..49fb6b179 100644 --- a/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java +++ b/app/src/main/java/org/schabi/newpipe/ReCaptchaActivity.java @@ -1,6 +1,7 @@ package org.schabi.newpipe; import android.content.Intent; +import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.util.Log; @@ -19,6 +20,7 @@ import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.widget.Toolbar; import androidx.core.app.NavUtils; +import androidx.preference.PreferenceManager; import org.schabi.newpipe.util.ThemeHelper; @@ -159,6 +161,12 @@ public class ReCaptchaActivity extends AppCompatActivity { } if (!foundCookies.isEmpty()) { + // save cookies to preferences + final SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences( + getApplicationContext()); + final String key = getApplicationContext().getString(R.string.recaptcha_cookies_key); + prefs.edit().putString(key, foundCookies).apply(); + // give cookies to Downloader class DownloaderImpl.getInstance().setCookies(foundCookies); setResult(RESULT_OK); @@ -170,7 +178,7 @@ public class ReCaptchaActivity extends AppCompatActivity { } - private void handleCookiesFromUrl(final @Nullable String url) { + private void handleCookiesFromUrl(@Nullable final String url) { if (MainActivity.DEBUG) { Log.d(TAG, "handleCookiesFromUrl: url=" + (url == null ? "null" : url)); } @@ -201,7 +209,7 @@ public class ReCaptchaActivity extends AppCompatActivity { } } - private void handleCookies(final @Nullable String cookies) { + private void handleCookies(@Nullable final String cookies) { if (MainActivity.DEBUG) { Log.d(TAG, "handleCookies: cookies=" + (cookies == null ? "null" : cookies)); } @@ -214,7 +222,7 @@ public class ReCaptchaActivity extends AppCompatActivity { // add here methods to extract cookies for other services } - private void addYoutubeCookies(final @NonNull String cookies) { + private void addYoutubeCookies(@NonNull final String cookies) { if (cookies.contains("s_gl=") || cookies.contains("goojf=") || cookies.contains("VISITOR_INFO1_LIVE=") || cookies.contains("GOOGLE_ABUSE_EXEMPTION=")) { diff --git a/app/src/main/res/values/settings_keys.xml b/app/src/main/res/values/settings_keys.xml index b5eeae6aa..ca8528fef 100644 --- a/app/src/main/res/values/settings_keys.xml +++ b/app/src/main/res/values/settings_keys.xml @@ -1129,4 +1129,5 @@ @string/grid + recaptcha_cookies_key