Skip to content

Commit d719bfa

Browse files
dev: refactor login
1 parent f2ffe72 commit d719bfa

8 files changed

Lines changed: 386 additions & 332 deletions
Lines changed: 124 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,124 @@
1+
package org.schabi.newpipe.settings;
2+
3+
import android.content.Intent;
4+
import android.content.SharedPreferences;
5+
import android.os.Bundle;
6+
import android.widget.Toast;
7+
import androidx.preference.Preference;
8+
import org.schabi.newpipe.R;
9+
import org.schabi.newpipe.util.ServiceHelper;
10+
11+
import static android.app.Activity.RESULT_OK;
12+
13+
public abstract class BaseAccountSettingsFragment extends BasePreferenceFragment
14+
implements SharedPreferences.OnSharedPreferenceChangeListener {
15+
16+
protected static final int REQUEST_LOGIN = 1;
17+
18+
protected Preference login;
19+
protected Preference logout;
20+
protected Preference overrideSwitch;
21+
protected Preference overrideValue;
22+
23+
@Override
24+
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
25+
addPreferencesFromResource(getPreferenceResource());
26+
initializePreferences();
27+
setupClickListeners();
28+
updateLoginLogoutState();
29+
configureOverridePreferences();
30+
}
31+
32+
protected abstract int getPreferenceResource();
33+
protected abstract Class<?> getLoginActivityClass();
34+
protected abstract String getCookiesKey();
35+
protected abstract String getOverrideSwitchKey();
36+
protected abstract String getOverrideValueKey();
37+
protected abstract boolean shouldCheckOverrideKeys();
38+
protected abstract void handleLoginResult(Intent data);
39+
protected abstract void performLogout();
40+
41+
private void initializePreferences() {
42+
login = findPreference(getString(R.string.login_key));
43+
logout = findPreference(getString(R.string.logout_key));
44+
45+
if (shouldCheckOverrideKeys()) {
46+
overrideSwitch = findPreference(getOverrideSwitchKey());
47+
overrideValue = findPreference(getOverrideValueKey());
48+
}
49+
}
50+
51+
private void setupClickListeners() {
52+
login.setOnPreferenceClickListener(preference -> {
53+
Intent intent = new Intent(getContext(), getLoginActivityClass());
54+
startActivityForResult(intent, REQUEST_LOGIN);
55+
return true;
56+
});
57+
58+
logout.setOnPreferenceClickListener(preference -> {
59+
performLogout();
60+
return true;
61+
});
62+
63+
if (shouldCheckOverrideKeys()) {
64+
setupOverrideClickListeners();
65+
}
66+
}
67+
68+
private void setupOverrideClickListeners() {
69+
if (overrideSwitch != null) {
70+
overrideSwitch.setOnPreferenceClickListener(preference -> {
71+
ServiceHelper.initServices(getContext());
72+
return true;
73+
});
74+
}
75+
76+
if (overrideValue != null) {
77+
overrideValue.setOnPreferenceClickListener(preference -> {
78+
ServiceHelper.initServices(getContext());
79+
return true;
80+
});
81+
}
82+
}
83+
84+
private void updateLoginLogoutState() {
85+
boolean hasCredentials = !defaultPreferences.getString(getCookiesKey(), "").equals("");
86+
login.setEnabled(!hasCredentials);
87+
logout.setEnabled(hasCredentials);
88+
}
89+
90+
private void configureOverridePreferences() {
91+
if (shouldCheckOverrideKeys() && overrideValue != null) {
92+
overrideValue.setEnabled(defaultPreferences.getBoolean(getOverrideSwitchKey(), false));
93+
}
94+
}
95+
96+
protected void onLoginSuccess() {
97+
ServiceHelper.initServices(getContext());
98+
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT).show();
99+
login.setEnabled(false);
100+
logout.setEnabled(true);
101+
}
102+
103+
protected void onLogoutSuccess() {
104+
ServiceHelper.initServices(getContext());
105+
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT).show();
106+
login.setEnabled(true);
107+
logout.setEnabled(false);
108+
}
109+
110+
@Override
111+
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
112+
if (shouldCheckOverrideKeys() &&
113+
(key.equals(getOverrideSwitchKey()) || key.equals(getOverrideValueKey()))) {
114+
ServiceHelper.initServices(getContext());
115+
}
116+
}
117+
118+
@Override
119+
public void onActivityResult(int requestCode, int resultCode, Intent data) {
120+
if (requestCode == REQUEST_LOGIN && resultCode == RESULT_OK) {
121+
handleLoginResult(data);
122+
}
123+
}
124+
}
Lines changed: 34 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,80 +1,51 @@
11
package org.schabi.newpipe.settings;
22

33
import android.content.Intent;
4-
import android.content.SharedPreferences;
5-
import android.os.Bundle;
6-
import android.widget.Toast;
7-
import androidx.preference.Preference;
84
import org.schabi.newpipe.R;
9-
import org.schabi.newpipe.util.ServiceHelper;
105
import org.schabi.newpipe.views.BiliBiliLoginWebViewActivity;
116

12-
import static android.app.Activity.RESULT_OK;
7+
public class BiliBiliAccountSettingsFragment extends BaseAccountSettingsFragment {
138

14-
public class BiliBiliAccountSettingsFragment extends BasePreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
15-
private static final int REQUEST_LOGIN = 1;
9+
@Override
10+
protected int getPreferenceResource() {
11+
return R.xml.account_settings_bilibili;
12+
}
13+
14+
@Override
15+
protected Class<?> getLoginActivityClass() {
16+
return BiliBiliLoginWebViewActivity.class;
17+
}
18+
19+
@Override
20+
protected String getCookiesKey() {
21+
return getString(R.string.bilibili_cookies_key);
22+
}
1623

1724
@Override
18-
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
19-
addPreferencesFromResource(R.xml.account_settings_bilibili);
20-
Preference login = findPreference(getString(R.string.login_key));
21-
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-
});
32-
login.setOnPreferenceClickListener(preference -> {
33-
// Open a webview to login and then get cookies
34-
// and save them to the shared preferences
35-
Intent intent = new Intent(this.getContext(), BiliBiliLoginWebViewActivity.class);
36-
startActivityForResult(intent, REQUEST_LOGIN);
37-
return true;
38-
});
39-
logout.setOnPreferenceClickListener(preference -> {
40-
// Clear cookies
41-
defaultPreferences.edit().putString(getString(R.string.bilibili_cookies_key), "").apply();
42-
ServiceHelper.initServices(this.getContext());
43-
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
44-
.show();
45-
login.setEnabled(true);
46-
logout.setEnabled(false);
47-
return true;
48-
});
49-
if (defaultPreferences.getString(getString(R.string.bilibili_cookies_key), "").equals("")) {
50-
logout.setEnabled(false);
51-
} else {
52-
login.setEnabled(false);
53-
}
25+
protected String getOverrideSwitchKey() {
26+
return getString(R.string.override_cookies_bilibili_key);
27+
}
5428

55-
Preference override_cookies_bilibili_value = findPreference(getString(R.string.override_cookies_bilibili_value_key));
56-
override_cookies_bilibili_value.setEnabled(defaultPreferences.getBoolean(getString(R.string.override_cookies_bilibili_key), false));
29+
@Override
30+
protected String getOverrideValueKey() {
31+
return getString(R.string.override_cookies_bilibili_value_key);
5732
}
33+
5834
@Override
59-
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
60-
if(key.equals(getString(R.string.override_cookies_bilibili_key)) || key.equals(getString(R.string.override_cookies_bilibili_value_key))) {
61-
ServiceHelper.initServices(this.getContext());
62-
}
35+
protected boolean shouldCheckOverrideKeys() {
36+
return true;
6337
}
38+
6439
@Override
65-
public void onActivityResult(int requestCode, int resultCode, Intent data) {
66-
if (requestCode == REQUEST_LOGIN && resultCode == RESULT_OK) {
67-
String cookies = data.getStringExtra("cookies");
68-
// save cookies to shared preferences
69-
defaultPreferences.edit().putString(getString(R.string.bilibili_cookies_key), cookies).apply();
70-
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);
77-
}
40+
protected void handleLoginResult(Intent data) {
41+
String cookies = data.getStringExtra("cookies");
42+
defaultPreferences.edit().putString(getCookiesKey(), cookies).apply();
43+
onLoginSuccess();
7844
}
7945

46+
@Override
47+
protected void performLogout() {
48+
defaultPreferences.edit().putString(getCookiesKey(), "").apply();
49+
onLogoutSuccess();
50+
}
8051
}
Lines changed: 33 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,82 +1,51 @@
11
package org.schabi.newpipe.settings;
22

33
import android.content.Intent;
4-
import android.content.SharedPreferences;
5-
import android.os.Bundle;
6-
import android.widget.Toast;
7-
import androidx.preference.Preference;
84
import org.schabi.newpipe.R;
9-
import org.schabi.newpipe.util.ServiceHelper;
105
import org.schabi.newpipe.views.NicoNicoLoginWebViewActivity;
116

12-
import java.util.regex.Pattern;
7+
public class NicoNicoAccountSettingsFragment extends BaseAccountSettingsFragment {
138

14-
import static android.app.Activity.RESULT_OK;
9+
@Override
10+
protected int getPreferenceResource() {
11+
return R.xml.account_settings_niconico;
12+
}
1513

16-
public class NicoNicoAccountSettingsFragment extends BasePreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
17-
private static final int REQUEST_LOGIN = 1;
14+
@Override
15+
protected Class<?> getLoginActivityClass() {
16+
return NicoNicoLoginWebViewActivity.class;
17+
}
1818

1919
@Override
20-
public void onCreatePreferences(final Bundle savedInstanceState, final String rootKey) {
21-
addPreferencesFromResource(R.xml.account_settings_niconico);
22-
Preference login = findPreference(getString(R.string.login_key));
23-
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-
});
34-
login.setOnPreferenceClickListener(preference -> {
35-
// Open a webview to login and then get cookies
36-
// and save them to the shared preferences
37-
Intent intent = new Intent(this.getContext(), NicoNicoLoginWebViewActivity.class);
38-
startActivityForResult(intent, REQUEST_LOGIN);
39-
return true;
40-
});
41-
logout.setOnPreferenceClickListener(preference -> {
42-
// Clear cookies
43-
defaultPreferences.edit().putString(getString(R.string.niconico_cookies_key), "").apply();
44-
ServiceHelper.initServices(this.getContext());
45-
Toast.makeText(requireContext(), R.string.success, Toast.LENGTH_SHORT)
46-
.show();
47-
login.setEnabled(true);
48-
logout.setEnabled(false);
49-
return true;
50-
});
51-
if (defaultPreferences.getString(getString(R.string.niconico_cookies_key), "").equals("")) {
52-
logout.setEnabled(false);
53-
} else {
54-
login.setEnabled(false);
55-
}
20+
protected String getCookiesKey() {
21+
return getString(R.string.niconico_cookies_key);
22+
}
5623

57-
Preference override_cookies_niconico_value = findPreference(getString(R.string.override_cookies_niconico_value_key));
58-
override_cookies_niconico_value.setEnabled(defaultPreferences.getBoolean(getString(R.string.override_cookies_niconico_key), false));
24+
@Override
25+
protected String getOverrideSwitchKey() {
26+
return getString(R.string.override_cookies_niconico_key);
5927
}
28+
6029
@Override
61-
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
62-
if(key.equals(getString(R.string.override_cookies_niconico_key)) || key.equals(getString(R.string.override_cookies_niconico_value_key))) {
63-
ServiceHelper.initServices(this.getContext());
64-
}
30+
protected String getOverrideValueKey() {
31+
return getString(R.string.override_cookies_niconico_value_key);
6532
}
33+
34+
@Override
35+
protected boolean shouldCheckOverrideKeys() {
36+
return true;
37+
}
38+
6639
@Override
67-
public void onActivityResult(int requestCode, int resultCode, Intent data) {
68-
if (requestCode == REQUEST_LOGIN && resultCode == RESULT_OK) {
69-
String cookies = data.getStringExtra("cookies");
70-
// save cookies to shared preferences
71-
defaultPreferences.edit().putString(getString(R.string.niconico_cookies_key), cookies).apply();
72-
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);
79-
}
40+
protected void handleLoginResult(Intent data) {
41+
String cookies = data.getStringExtra("cookies");
42+
defaultPreferences.edit().putString(getCookiesKey(), cookies).apply();
43+
onLoginSuccess();
8044
}
8145

46+
@Override
47+
protected void performLogout() {
48+
defaultPreferences.edit().putString(getCookiesKey(), "").apply();
49+
onLogoutSuccess();
50+
}
8251
}

0 commit comments

Comments
 (0)