summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java
diff options
context:
space:
mode:
authorByteHamster <ByteHamster@users.noreply.github.com>2024-03-23 09:40:40 +0100
committerGitHub <noreply@github.com>2024-03-23 09:40:40 +0100
commitf20ce1fc690788273bb779663a4f3211f47a0973 (patch)
treea1192a00bc1b5153d143fa579b8c6f977111c847 /app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java
parent376c83d200859ef562d6e3de02602ef18de3e7de (diff)
downloadAntennaPod-f20ce1fc690788273bb779663a4f3211f47a0973.zip
Move first batch of preferences code to :ui:preferences (#7010)
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java279
1 files changed, 0 insertions, 279 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java
deleted file mode 100644
index ccd450345..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java
+++ /dev/null
@@ -1,279 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.synchronization;
-
-import android.app.Dialog;
-import android.content.Context;
-import android.os.Build;
-import android.os.Bundle;
-import android.view.View;
-import android.view.inputmethod.EditorInfo;
-import android.view.inputmethod.InputMethodManager;
-import android.widget.Button;
-import android.widget.EditText;
-import android.widget.LinearLayout;
-import android.widget.ProgressBar;
-import android.widget.TextView;
-import android.widget.ViewFlipper;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.fragment.app.DialogFragment;
-import com.google.android.material.button.MaterialButton;
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.net.common.AntennapodHttpClient;
-import de.danoeh.antennapod.core.sync.SyncService;
-import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
-import de.danoeh.antennapod.core.sync.SynchronizationProviderViewData;
-import de.danoeh.antennapod.core.sync.SynchronizationSettings;
-import de.danoeh.antennapod.core.util.FileNameGenerator;
-import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
-import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice;
-import io.reactivex.Completable;
-import io.reactivex.Observable;
-import io.reactivex.android.schedulers.AndroidSchedulers;
-import io.reactivex.schedulers.Schedulers;
-
-import java.util.List;
-import java.util.Locale;
-import java.util.regex.Matcher;
-import java.util.regex.Pattern;
-
-/**
- * Guides the user through the authentication process.
- */
-public class GpodderAuthenticationFragment extends DialogFragment {
- public static final String TAG = "GpodnetAuthActivity";
-
- private ViewFlipper viewFlipper;
-
- private static final int STEP_DEFAULT = -1;
- private static final int STEP_HOSTNAME = 0;
- private static final int STEP_LOGIN = 1;
- private static final int STEP_DEVICE = 2;
- private static final int STEP_FINISH = 3;
-
- private int currentStep = -1;
-
- private GpodnetService service;
- private volatile String username;
- private volatile String password;
- private volatile GpodnetDevice selectedDevice;
- private List<GpodnetDevice> devices;
-
- @NonNull
- @Override
- public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
- MaterialAlertDialogBuilder dialog = new MaterialAlertDialogBuilder(getContext());
- dialog.setTitle(R.string.gpodnetauth_login_butLabel);
- dialog.setNegativeButton(R.string.cancel_label, null);
- dialog.setCancelable(false);
- this.setCancelable(false);
-
- View root = View.inflate(getContext(), R.layout.gpodnetauth_dialog, null);
- viewFlipper = root.findViewById(R.id.viewflipper);
- advance();
- dialog.setView(root);
-
- return dialog.create();
- }
-
- private void setupHostView(View view) {
- final Button selectHost = view.findViewById(R.id.chooseHostButton);
- final EditText serverUrlText = view.findViewById(R.id.serverUrlText);
- selectHost.setOnClickListener(v -> {
- if (serverUrlText.getText().length() == 0) {
- return;
- }
- SynchronizationCredentials.clear(getContext());
- SynchronizationCredentials.setHosturl(serverUrlText.getText().toString());
- service = new GpodnetService(AntennapodHttpClient.getHttpClient(),
- SynchronizationCredentials.getHosturl(), SynchronizationCredentials.getDeviceID(),
- SynchronizationCredentials.getUsername(), SynchronizationCredentials.getPassword());
- getDialog().setTitle(SynchronizationCredentials.getHosturl());
- advance();
- });
- }
-
- private void setupLoginView(View view) {
- final EditText username = view.findViewById(R.id.etxtUsername);
- final EditText password = view.findViewById(R.id.etxtPassword);
- final Button login = view.findViewById(R.id.butLogin);
- final TextView txtvError = view.findViewById(R.id.credentialsError);
- final ProgressBar progressBar = view.findViewById(R.id.progBarLogin);
- final TextView createAccountWarning = view.findViewById(R.id.createAccountWarning);
-
- if (SynchronizationCredentials.getHosturl().startsWith("http://")) {
- createAccountWarning.setVisibility(View.VISIBLE);
- }
- password.setOnEditorActionListener((v, actionID, event) ->
- actionID == EditorInfo.IME_ACTION_GO && login.performClick());
-
- login.setOnClickListener(v -> {
- final String usernameStr = username.getText().toString();
- final String passwordStr = password.getText().toString();
-
- if (usernameHasUnwantedChars(usernameStr)) {
- txtvError.setText(R.string.gpodnetsync_username_characters_error);
- txtvError.setVisibility(View.VISIBLE);
- return;
- }
-
- login.setEnabled(false);
- progressBar.setVisibility(View.VISIBLE);
- txtvError.setVisibility(View.GONE);
- InputMethodManager inputManager = (InputMethodManager) getContext()
- .getSystemService(Context.INPUT_METHOD_SERVICE);
- inputManager.hideSoftInputFromWindow(login.getWindowToken(), InputMethodManager.HIDE_NOT_ALWAYS);
-
- Completable.fromAction(() -> {
- service.setCredentials(usernameStr, passwordStr);
- service.login();
- devices = service.getDevices();
- GpodderAuthenticationFragment.this.username = usernameStr;
- GpodderAuthenticationFragment.this.password = passwordStr;
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(() -> {
- login.setEnabled(true);
- progressBar.setVisibility(View.GONE);
- advance();
- }, error -> {
- login.setEnabled(true);
- progressBar.setVisibility(View.GONE);
- txtvError.setText(error.getCause().getMessage());
- txtvError.setVisibility(View.VISIBLE);
- });
-
- });
- }
-
- private void setupDeviceView(View view) {
- final EditText deviceName = view.findViewById(R.id.deviceName);
- final LinearLayout devicesContainer = view.findViewById(R.id.devicesContainer);
- deviceName.setText(generateDeviceName());
-
- MaterialButton createDeviceButton = view.findViewById(R.id.createDeviceButton);
- createDeviceButton.setOnClickListener(v -> createDevice(view));
-
- for (GpodnetDevice device : devices) {
- View row = View.inflate(getContext(), R.layout.gpodnetauth_device_row, null);
- Button selectDeviceButton = row.findViewById(R.id.selectDeviceButton);
- selectDeviceButton.setOnClickListener(v -> {
- selectedDevice = device;
- advance();
- });
- selectDeviceButton.setText(device.getCaption());
- devicesContainer.addView(row);
- }
- }
-
- private void createDevice(View view) {
- final EditText deviceName = view.findViewById(R.id.deviceName);
- final TextView txtvError = view.findViewById(R.id.deviceSelectError);
- final ProgressBar progBarCreateDevice = view.findViewById(R.id.progbarCreateDevice);
-
- String deviceNameStr = deviceName.getText().toString();
- if (isDeviceInList(deviceNameStr)) {
- return;
- }
- progBarCreateDevice.setVisibility(View.VISIBLE);
- txtvError.setVisibility(View.GONE);
- deviceName.setEnabled(false);
-
- Observable.fromCallable(() -> {
- String deviceId = generateDeviceId(deviceNameStr);
- service.configureDevice(deviceId, deviceNameStr, GpodnetDevice.DeviceType.MOBILE);
- return new GpodnetDevice(deviceId, deviceNameStr, GpodnetDevice.DeviceType.MOBILE.toString(), 0);
- })
- .subscribeOn(Schedulers.io())
- .observeOn(AndroidSchedulers.mainThread())
- .subscribe(device -> {
- progBarCreateDevice.setVisibility(View.GONE);
- selectedDevice = device;
- advance();
- }, error -> {
- deviceName.setEnabled(true);
- progBarCreateDevice.setVisibility(View.GONE);
- txtvError.setText(error.getMessage());
- txtvError.setVisibility(View.VISIBLE);
- });
- }
-
- private String generateDeviceName() {
- String baseName = getString(R.string.gpodnetauth_device_name_default, Build.MODEL);
- String name = baseName;
- int num = 1;
- while (isDeviceInList(name)) {
- name = baseName + " (" + num + ")";
- num++;
- }
- return name;
- }
-
- private String generateDeviceId(String name) {
- // devices names must be of a certain form:
- // https://gpoddernet.readthedocs.org/en/latest/api/reference/general.html#devices
- return FileNameGenerator.generateFileName(name).replaceAll("\\W", "_").toLowerCase(Locale.US);
- }
-
- private boolean isDeviceInList(String name) {
- if (devices == null) {
- return false;
- }
- String id = generateDeviceId(name);
- for (GpodnetDevice device : devices) {
- if (device.getId().equals(id) || device.getCaption().equals(name)) {
- return true;
- }
- }
- return false;
- }
-
- private void setupFinishView(View view) {
- final Button sync = view.findViewById(R.id.butSyncNow);
-
- sync.setOnClickListener(v -> {
- dismiss();
- SyncService.sync(getContext());
- });
- }
-
- private void advance() {
- if (currentStep < STEP_FINISH) {
- View view = viewFlipper.getChildAt(currentStep + 1);
- if (currentStep == STEP_DEFAULT) {
- setupHostView(view);
- } else if (currentStep == STEP_HOSTNAME) {
- setupLoginView(view);
- } else if (currentStep == STEP_LOGIN) {
- if (username == null || password == null) {
- throw new IllegalStateException("Username and password must not be null here");
- } else {
- setupDeviceView(view);
- }
- } else if (currentStep == STEP_DEVICE) {
- if (selectedDevice == null) {
- throw new IllegalStateException("Device must not be null here");
- } else {
- SynchronizationSettings.setSelectedSyncProvider(SynchronizationProviderViewData.GPODDER_NET);
- SynchronizationCredentials.setUsername(username);
- SynchronizationCredentials.setPassword(password);
- SynchronizationCredentials.setDeviceID(selectedDevice.getId());
- setupFinishView(view);
- }
- }
- if (currentStep != STEP_DEFAULT) {
- viewFlipper.showNext();
- }
- currentStep++;
- } else {
- dismiss();
- }
- }
-
- private boolean usernameHasUnwantedChars(String username) {
- Pattern special = Pattern.compile("[!@#$%&*()+=|<>?{}\\[\\]~]");
- Matcher containsUnwantedChars = special.matcher(username);
- return containsUnwantedChars.find();
- }
-}