Skip to content

Commit f2ffe72

Browse files
fix: make login more robust
1 parent 1502b09 commit f2ffe72

15 files changed

Lines changed: 125 additions & 18 deletions

File tree

app/src/main/java/org/schabi/newpipe/settings/BiliBiliAccountSettingsFragment.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.content.SharedPreferences;
55
import android.os.Bundle;
6+
import android.widget.Toast;
67
import androidx.preference.Preference;
78
import org.schabi.newpipe.R;
89
import org.schabi.newpipe.util.ServiceHelper;
@@ -18,6 +19,16 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
1819
addPreferencesFromResource(R.xml.account_settings_bilibili);
1920
Preference login = findPreference(getString(R.string.login_key));
2021
Preference logout = findPreference(getString(R.string.logout_key));
22+
Preference override_switch = findPreference(getString(R.string.override_cookies_bilibili_key));
23+
Preference override_value = findPreference(getString(R.string.override_cookies_bilibili_value_key));
24+
override_value.setOnPreferenceClickListener(preference -> {
25+
ServiceHelper.initServices(this.getContext());
26+
return true;
27+
});
28+
override_switch.setOnPreferenceClickListener(preference -> {
29+
ServiceHelper.initServices(this.getContext());
30+
return true;
31+
});
2132
login.setOnPreferenceClickListener(preference -> {
2233
// Open a webview to login and then get cookies
2334
// and save them to the shared preferences
@@ -29,6 +40,10 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
2940
// Clear cookies
3041
defaultPreferences.edit().putString(getString(R.string.bilibili_cookies_key), "").apply();
3142
ServiceHelper.initServices(this.getContext());
43+
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
44+
.show();
45+
login.setEnabled(true);
46+
logout.setEnabled(false);
3247
return true;
3348
});
3449
if (defaultPreferences.getString(getString(R.string.bilibili_cookies_key), "").equals("")) {
@@ -53,6 +68,12 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
5368
// save cookies to shared preferences
5469
defaultPreferences.edit().putString(getString(R.string.bilibili_cookies_key), cookies).apply();
5570
ServiceHelper.initServices(this.getContext());
71+
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
72+
.show();
73+
Preference login = findPreference(getString(R.string.login_key));
74+
Preference logout = findPreference(getString(R.string.logout_key));
75+
login.setEnabled(false);
76+
logout.setEnabled(true);
5677
}
5778
}
5879

app/src/main/java/org/schabi/newpipe/settings/NicoNicoAccountSettingsFragment.java

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import android.content.Intent;
44
import android.content.SharedPreferences;
55
import android.os.Bundle;
6+
import android.widget.Toast;
67
import androidx.preference.Preference;
78
import org.schabi.newpipe.R;
89
import org.schabi.newpipe.util.ServiceHelper;
@@ -20,6 +21,16 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
2021
addPreferencesFromResource(R.xml.account_settings_niconico);
2122
Preference login = findPreference(getString(R.string.login_key));
2223
Preference logout = findPreference(getString(R.string.logout_key));
24+
Preference override_switch = findPreference(getString(R.string.override_cookies_niconico_key));
25+
Preference override_value = findPreference(getString(R.string.override_cookies_niconico_value_key));
26+
override_value.setOnPreferenceClickListener(preference -> {
27+
ServiceHelper.initServices(this.getContext());
28+
return true;
29+
});
30+
override_switch.setOnPreferenceClickListener(preference -> {
31+
ServiceHelper.initServices(this.getContext());
32+
return true;
33+
});
2334
login.setOnPreferenceClickListener(preference -> {
2435
// Open a webview to login and then get cookies
2536
// and save them to the shared preferences
@@ -31,6 +42,10 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
3142
// Clear cookies
3243
defaultPreferences.edit().putString(getString(R.string.niconico_cookies_key), "").apply();
3344
ServiceHelper.initServices(this.getContext());
45+
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
46+
.show();
47+
login.setEnabled(true);
48+
logout.setEnabled(false);
3449
return true;
3550
});
3651
if (defaultPreferences.getString(getString(R.string.niconico_cookies_key), "").equals("")) {
@@ -55,6 +70,12 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
5570
// save cookies to shared preferences
5671
defaultPreferences.edit().putString(getString(R.string.niconico_cookies_key), cookies).apply();
5772
ServiceHelper.initServices(this.getContext());
73+
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
74+
.show();
75+
Preference login = findPreference(getString(R.string.login_key));
76+
Preference logout = findPreference(getString(R.string.logout_key));
77+
login.setEnabled(false);
78+
logout.setEnabled(true);
5879
}
5980
}
6081

app/src/main/java/org/schabi/newpipe/settings/YouTubeAccountSettingsFragment.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,12 @@
66
import android.widget.Toast;
77
import androidx.preference.Preference;
88
import org.schabi.newpipe.R;
9+
import org.schabi.newpipe.extractor.services.youtube.YoutubeParsingHelper;
910
import org.schabi.newpipe.util.ServiceHelper;
1011
import org.schabi.newpipe.views.YouTubeLoginWebViewActivity;
1112

13+
import java.security.NoSuchAlgorithmException;
14+
1215
import static android.app.Activity.RESULT_OK;
1316

1417
public class YouTubeAccountSettingsFragment extends BasePreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
@@ -31,6 +34,10 @@ public void onCreatePreferences(final Bundle savedInstanceState, final String ro
3134
defaultPreferences.edit().putString(getString(R.string.youtube_cookies_key), "").apply();
3235
defaultPreferences.edit().putString(getString(R.string.youtube_po_token_key), "").apply();
3336
ServiceHelper.initServices(this.getContext());
37+
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
38+
.show();
39+
login.setEnabled(true);
40+
logout.setEnabled(false);
3441
return true;
3542
});
3643
if (defaultPreferences.getString(getString(R.string.youtube_cookies_key), "").equals("")) {
@@ -70,8 +77,21 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
7077
defaultPreferences.edit().putString(getString(R.string.youtube_cookies_key), cookies).apply();
7178
defaultPreferences.edit().putString(getString(R.string.youtube_po_token_key), pot).apply();
7279
ServiceHelper.initServices(this.getContext());
80+
81+
try {
82+
YoutubeParsingHelper.getAuthorizationHeader(cookies);
83+
} catch (Exception e) {
84+
Toast.makeText(requireContext(), R.string.try_again, Toast.LENGTH_SHORT)
85+
.show();
86+
return;
87+
}
88+
7389
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
7490
.show();
91+
Preference login = findPreference(getString(R.string.login_key));
92+
Preference logout = findPreference(getString(R.string.logout_key));
93+
login.setEnabled(false);
94+
logout.setEnabled(true);
7595
}
7696
}
7797

app/src/main/java/org/schabi/newpipe/views/BiliBiliLoginWebViewActivity.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,12 +44,26 @@ private class MyWebViewClient extends WebViewClient {
4444
@Override
4545
public void onPageFinished(WebView view, String url) {
4646
super.onPageFinished(view, url);
47-
if (url.contains("https://m.bilibili.com")) {
48-
String cookies = CookieManager.getInstance().getCookie(url);
47+
String cookies = CookieManager.getInstance().getCookie(url);
48+
if (cookies != null && cookies.contains("SESSDATA=")) {
4949
Intent intent = new Intent();
5050
intent.putExtra("cookies", cookies);
5151
setResult(RESULT_OK, intent);
52-
finish();
52+
runOnUiThread(new Runnable() {
53+
@Override
54+
public void run() {
55+
// Now you are safely on the main UI thread
56+
if (!isFinishing()) {
57+
// It's also a good idea to tell the WebView to stop what it's doing
58+
view.stopLoading();
59+
view.loadUrl("about:blank");
60+
view.onPause();
61+
view.removeAllViews();
62+
view.destroy();
63+
finish();
64+
}
65+
}
66+
});
5367
// may need a clearHistory() here
5468
}
5569
}

app/src/main/java/org/schabi/newpipe/views/NicoNicoLoginWebViewActivity.java

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,12 +24,26 @@ private class MyWebViewClient extends WebViewClient {
2424
@Override
2525
public void onPageFinished(WebView view, String url) {
2626
super.onPageFinished(view, url);
27-
if (url.equals("https://sp.nicovideo.jp/")) {
28-
String cookies = CookieManager.getInstance().getCookie(url);
27+
String cookies = CookieManager.getInstance().getCookie(url);
28+
if (cookies != null && cookies.contains("user_session")) {
2929
Intent intent = new Intent();
3030
intent.putExtra("cookies", cookies);
3131
setResult(RESULT_OK, intent);
32-
finish();
32+
runOnUiThread(new Runnable() {
33+
@Override
34+
public void run() {
35+
// Now you are safely on the main UI thread
36+
if (!isFinishing()) {
37+
// It's also a good idea to tell the WebView to stop what it's doing
38+
view.stopLoading();
39+
view.loadUrl("about:blank");
40+
view.onPause();
41+
view.removeAllViews();
42+
view.destroy();
43+
finish();
44+
}
45+
}
46+
});
3347
}
3448
}
3549
}

app/src/main/java/org/schabi/newpipe/views/YouTubeLoginWebViewActivity.java

Lines changed: 20 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111

1212
public class YouTubeLoginWebViewActivity extends AppCompatActivity {
1313
WebView webView;
14-
String cookies;
1514

1615
@Override
1716
protected void onCreate(Bundle savedInstanceState) {
@@ -29,11 +28,13 @@ protected void onCreate(Bundle savedInstanceState) {
2928
}
3029

3130
private class MyWebViewClient extends WebViewClient {
31+
boolean hasLoaded = false;
3232
@Override
3333
public void onPageFinished(WebView view, String url) {
3434
super.onPageFinished(view, url);
35-
if (url.equals("https://m.youtube.com/?noapp=1") || url.equals("https://m.youtube.com/")) {
36-
setCookies(CookieManager.getInstance().getCookie(url));
35+
String cookies = CookieManager.getInstance().getCookie(url);
36+
if (!hasLoaded && cookies != null && cookies.contains("SID=")) {
37+
hasLoaded = true;
3738
webView.loadUrl("https://music.youtube.com/watch?v=09839DpTctU");
3839
}
3940
}
@@ -46,10 +47,25 @@ public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceReque
4647
Uri uri = Uri.parse(url);
4748
String pot = uri.getQueryParameter("pot");
4849
Intent intent = new Intent();
50+
String cookies = CookieManager.getInstance().getCookie("https://music.youtube.com/watch");
4951
intent.putExtra("cookies", cookies);
5052
intent.putExtra("pot", pot);
5153
setResult(RESULT_OK, intent);
52-
finish();
54+
runOnUiThread(new Runnable() {
55+
@Override
56+
public void run() {
57+
// Now you are safely on the main UI thread
58+
if (!isFinishing()) {
59+
// It's also a good idea to tell the WebView to stop what it's doing
60+
view.stopLoading();
61+
view.loadUrl("about:blank");
62+
view.onPause();
63+
view.removeAllViews();
64+
view.destroy();
65+
finish();
66+
}
67+
}
68+
});
5369
}
5470
// Return null to allow the WebView to load the request as usual
5571
return null;
@@ -71,12 +87,4 @@ public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceReque
7187
// dialog.setCanceledOnTouchOutside(false); // Prevents dismissal when touching outside
7288
// dialog.show();
7389
// }
74-
75-
public void setCookies(String cookies) {
76-
this.cookies = cookies;
77-
}
78-
79-
public String getCookies() {
80-
return cookies;
81-
}
8290
}

app/src/main/res/values-de/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -977,4 +977,5 @@
977977
<string name="need_login_hint"> Dieser Inhalt erfordert ein Konto, um angezeigt zu werden. Melden Sie sich über die Einstellungen an, um fortzufahren.</string>
978978
<string name="exit_app_confirmation_message">Zeigen Sie einen "Drücken Sie erneut zurück, um zu beenden" Toast, um versehentliches Beenden zu vermeiden</string>
979979
<string name="exit_app_confirmation_title">Bestätigung zum Beenden der App</string>
980+
<string name="try_again">Bitte versuchen Sie es erneut</string>
980981
</resources>

app/src/main/res/values-es/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1040,4 +1040,5 @@
10401040
<string name="need_login_hint"> Este contenido requiere una cuenta para ver. Inicia sesión a través de la configuración para continuar.</string>
10411041
<string name="exit_app_confirmation_message">Mostrar un toast de "presiona atrás de nuevo para salir" para evitar salir accidentalmente</string>
10421042
<string name="exit_app_confirmation_title">Confirmación de salida de la aplicación</string>
1043+
<string name="try_again">Por favor, inténtalo de nuevo</string>
10431044
</resources>

app/src/main/res/values-fr/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -930,4 +930,5 @@ Vous devez l\'accepter pour nous envoyer le rapport de bug.</string>
930930
<string name="need_login_hint"> Ce contenu nécessite un compte pour être consulté. Connectez-vous via les paramètres pour continuer.</string>
931931
<string name="exit_app_confirmation_message">Afficher un toast "appuyez à nouveau sur retour pour quitter" pour éviter de quitter accidentellement</string>
932932
<string name="exit_app_confirmation_title">Confirmation de sortie de l\'application</string>
933+
<string name="try_again">Veuillez réessayer</string>
933934
</resources>

app/src/main/res/values-it/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -897,4 +897,5 @@
897897
<string name="need_login_hint"> Questo contenuto richiede un account per essere visualizzato. Accedi tramite le impostazioni per continuare.</string>
898898
<string name="exit_app_confirmation_message">Mostra un toast "premi di nuovo indietro per uscire" per evitare uscite accidentali</string>
899899
<string name="exit_app_confirmation_title">Conferma uscita dall\'app</string>
900+
<string name="try_again">Per favore riprova</string>
900901
</resources>

0 commit comments

Comments
 (0)