Merge pull request #5945 from ByteHamster/remove-gpodder

Remove default gpodder sync server
This commit is contained in:
ByteHamster 2022-06-21 19:17:29 +02:00 committed by GitHub
commit c0cfb4cf24
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 90 additions and 156 deletions

View File

@ -2,7 +2,6 @@ package de.danoeh.antennapod.fragment.preferences.synchronization;
import android.app.Dialog; import android.app.Dialog;
import android.content.Context; import android.content.Context;
import android.graphics.Paint;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.view.View; import android.view.View;
@ -12,31 +11,20 @@ import android.widget.Button;
import android.widget.EditText; import android.widget.EditText;
import android.widget.LinearLayout; import android.widget.LinearLayout;
import android.widget.ProgressBar; import android.widget.ProgressBar;
import android.widget.RadioGroup;
import android.widget.TextView; import android.widget.TextView;
import android.widget.ViewFlipper; import android.widget.ViewFlipper;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AlertDialog;
import androidx.fragment.app.DialogFragment; import androidx.fragment.app.DialogFragment;
import com.google.android.material.button.MaterialButton; import com.google.android.material.button.MaterialButton;
import com.google.android.material.textfield.TextInputLayout;
import java.util.List;
import java.util.Locale;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import de.danoeh.antennapod.R; import de.danoeh.antennapod.R;
import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
import de.danoeh.antennapod.core.service.download.AntennapodHttpClient; import de.danoeh.antennapod.core.service.download.AntennapodHttpClient;
import de.danoeh.antennapod.core.sync.SyncService; 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.SynchronizationProviderViewData;
import de.danoeh.antennapod.core.sync.SynchronizationSettings; import de.danoeh.antennapod.core.sync.SynchronizationSettings;
import de.danoeh.antennapod.core.util.FileNameGenerator; import de.danoeh.antennapod.core.util.FileNameGenerator;
import de.danoeh.antennapod.core.util.IntentUtils;
import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService; import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice; import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice;
import io.reactivex.Completable; import io.reactivex.Completable;
@ -44,6 +32,11 @@ import io.reactivex.Observable;
import io.reactivex.android.schedulers.AndroidSchedulers; import io.reactivex.android.schedulers.AndroidSchedulers;
import io.reactivex.schedulers.Schedulers; 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. * Guides the user through the authentication process.
*/ */
@ -70,7 +63,7 @@ public class GpodderAuthenticationFragment extends DialogFragment {
@Override @Override
public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) { public Dialog onCreateDialog(@Nullable Bundle savedInstanceState) {
AlertDialog.Builder dialog = new AlertDialog.Builder(getContext()); AlertDialog.Builder dialog = new AlertDialog.Builder(getContext());
dialog.setTitle(GpodnetService.DEFAULT_BASE_HOST); dialog.setTitle(R.string.gpodnetauth_login_butLabel);
dialog.setNegativeButton(R.string.cancel_label, null); dialog.setNegativeButton(R.string.cancel_label, null);
dialog.setCancelable(false); dialog.setCancelable(false);
this.setCancelable(false); this.setCancelable(false);
@ -85,23 +78,13 @@ public class GpodderAuthenticationFragment extends DialogFragment {
private void setupHostView(View view) { private void setupHostView(View view) {
final Button selectHost = view.findViewById(R.id.chooseHostButton); final Button selectHost = view.findViewById(R.id.chooseHostButton);
final RadioGroup serverRadioGroup = view.findViewById(R.id.serverRadioGroup);
final EditText serverUrlText = view.findViewById(R.id.serverUrlText); final EditText serverUrlText = view.findViewById(R.id.serverUrlText);
if (!GpodnetService.DEFAULT_BASE_HOST.equals(SynchronizationCredentials.getHosturl())) {
serverUrlText.setText(SynchronizationCredentials.getHosturl());
}
final TextInputLayout serverUrlTextInput = view.findViewById(R.id.serverUrlTextInput);
serverRadioGroup.setOnCheckedChangeListener((group, checkedId) -> {
serverUrlTextInput.setVisibility(checkedId == R.id.customServerRadio ? View.VISIBLE : View.GONE);
});
selectHost.setOnClickListener(v -> { selectHost.setOnClickListener(v -> {
SynchronizationCredentials.clear(getContext()); if (serverUrlText.getText().length() == 0) {
if (serverRadioGroup.getCheckedRadioButtonId() == R.id.customServerRadio) { return;
SynchronizationCredentials.setHosturl(serverUrlText.getText().toString());
} else {
SynchronizationCredentials.setHosturl(GpodnetService.DEFAULT_BASE_HOST);
} }
SynchronizationCredentials.clear(getContext());
SynchronizationCredentials.setHosturl(serverUrlText.getText().toString());
service = new GpodnetService(AntennapodHttpClient.getHttpClient(), service = new GpodnetService(AntennapodHttpClient.getHttpClient(),
SynchronizationCredentials.getHosturl(), SynchronizationCredentials.getDeviceID(), SynchronizationCredentials.getHosturl(), SynchronizationCredentials.getDeviceID(),
SynchronizationCredentials.getUsername(), SynchronizationCredentials.getPassword()); SynchronizationCredentials.getUsername(), SynchronizationCredentials.getPassword());
@ -116,12 +99,8 @@ public class GpodderAuthenticationFragment extends DialogFragment {
final Button login = view.findViewById(R.id.butLogin); final Button login = view.findViewById(R.id.butLogin);
final TextView txtvError = view.findViewById(R.id.credentialsError); final TextView txtvError = view.findViewById(R.id.credentialsError);
final ProgressBar progressBar = view.findViewById(R.id.progBarLogin); final ProgressBar progressBar = view.findViewById(R.id.progBarLogin);
final TextView createAccount = view.findViewById(R.id.createAccountButton);
final TextView createAccountWarning = view.findViewById(R.id.createAccountWarning); final TextView createAccountWarning = view.findViewById(R.id.createAccountWarning);
createAccount.setPaintFlags(createAccount.getPaintFlags() | Paint.UNDERLINE_TEXT_FLAG);
createAccount.setOnClickListener(v -> IntentUtils.openInBrowser(getContext(), "https://gpodder.net/register/"));
if (SynchronizationCredentials.getHosturl().startsWith("http://")) { if (SynchronizationCredentials.getHosturl().startsWith("http://")) {
createAccountWarning.setVisibility(View.VISIBLE); createAccountWarning.setVisibility(View.VISIBLE);
} }

View File

@ -1,107 +1,84 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:orientation="vertical">
android:orientation="vertical">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginBottom="8dp">
<ImageView
android:layout_width="64dp"
android:layout_height="64dp"
app:srcCompat="@drawable/gpodder_icon"/>
<TextView
android:id="@+id/createAccountButton"
android:layout_width="0dp"
android:textAlignment="textEnd"
android:layout_height="wrap_content"
android:background="?attr/selectableItemBackground"
android:textColor="?colorAccent"
android:layout_weight="1"
android:layout_gravity="center_vertical|end"
android:text="@string/create_account"/>
</LinearLayout>
<TextView <TextView
android:id="@+id/createAccountWarning" android:id="@+id/createAccountWarning"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/gpodnetauth_encryption_warning" android:text="@string/gpodnetauth_encryption_warning"
android:textColor="#F44336" android:textColor="#F44336"
android:textStyle="bold" android:textStyle="bold"
android:visibility="invisible" /> android:visibility="invisible" />
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content"> style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/etxtUsername" android:id="@+id/etxtUsername"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/username_label" android:hint="@string/username_label"
android:lines="1" android:lines="1"
android:imeOptions="actionNext|flagNoFullscreen"/> android:imeOptions="actionNext|flagNoFullscreen" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" android:layout_width="match_parent"
android:layout_width="match_parent" android:layout_height="wrap_content"
android:layout_height="wrap_content"> style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/etxtPassword" android:id="@+id/etxtPassword"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/password_label" android:hint="@string/password_label"
android:inputType="textPassword" android:inputType="textPassword"
android:lines="1" android:lines="1"
android:imeOptions="actionNext|flagNoFullscreen" android:imeOptions="actionNext|flagNoFullscreen"
android:imeActionLabel="@string/gpodnetauth_login_butLabel"/> android:imeActionLabel="@string/gpodnetauth_login_butLabel" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<LinearLayout <LinearLayout
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="horizontal" android:orientation="horizontal"
android:gravity="end|center_vertical"> android:gravity="end|center_vertical">
<TextView <TextView
android:id="@+id/credentialsError" android:id="@+id/credentialsError"
android:layout_width="0dp" android:layout_width="0dp"
android:layout_weight="1" android:layout_height="wrap_content"
android:layout_height="wrap_content" android:layout_weight="1"
android:textColor="@color/download_failed_red" android:textColor="@color/download_failed_red"
android:textSize="@dimen/text_size_small" android:textSize="@dimen/text_size_small"
android:maxLines="2" android:maxLines="2"
android:ellipsize="end" android:ellipsize="end"
android:gravity="center" android:gravity="center"
tools:text="Error message" tools:text="Error message"
tools:background="@android:color/holo_green_dark"/> tools:background="@android:color/holo_green_dark" />
<ProgressBar <ProgressBar
android:id="@+id/progBarLogin" android:id="@+id/progBarLogin"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:visibility="gone" android:visibility="gone"
android:layout_gravity="right"/> android:layout_gravity="right" />
<Button <Button
android:id="@+id/butLogin" android:id="@+id/butLogin"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:text="@string/gpodnetauth_login_butLabel"/> android:text="@string/gpodnetauth_login_butLabel" />
</LinearLayout> </LinearLayout>
</LinearLayout> </LinearLayout>

View File

@ -1,50 +1,31 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<LinearLayout <LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android" xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:orientation="vertical"> android:orientation="vertical">
<RadioGroup
android:id="@+id/serverRadioGroup"
android:layout_width="match_parent"
android:layout_height="match_parent">
<RadioButton
android:id="@+id/officialServerRadio"
android:text="@string/gpodnetauth_server_official"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:checked="true"/>
<RadioButton
android:id="@+id/customServerRadio"
android:text="@string/gpodnetauth_server_custom"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</RadioGroup>
<com.google.android.material.textfield.TextInputLayout <com.google.android.material.textfield.TextInputLayout
android:id="@+id/serverUrlTextInput" android:layout_width="match_parent"
style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox" android:layout_height="wrap_content"
android:visibility="gone" style="@style/Widget.MaterialComponents.TextInputLayout.OutlinedBox">
android:layout_width="match_parent"
android:layout_height="wrap_content">
<com.google.android.material.textfield.TextInputEditText <com.google.android.material.textfield.TextInputEditText
android:id="@+id/serverUrlText" android:id="@+id/serverUrlText"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:hint="@string/gpodnetauth_host" android:hint="@string/gpodnetauth_host"
android:inputType="textNoSuggestions" android:inputType="textNoSuggestions"
android:lines="1" android:lines="1"
android:imeOptions="actionNext|flagNoFullscreen" /> android:imeOptions="actionNext|flagNoFullscreen" />
</com.google.android.material.textfield.TextInputLayout> </com.google.android.material.textfield.TextInputLayout>
<Button <Button
android:id="@+id/chooseHostButton" android:id="@+id/chooseHostButton"
android:layout_width="wrap_content" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:layout_height="wrap_content"
android:layout_gravity="right|end" android:layout_gravity="right|end"
android:text="@string/gpodnetauth_select_server"/> android:text="@string/gpodnetauth_select_server" />
</LinearLayout> </LinearLayout>

View File

@ -46,7 +46,7 @@ import okhttp3.ResponseBody;
*/ */
public class GpodnetService implements ISyncService { public class GpodnetService implements ISyncService {
public static final String TAG = "GpodnetService"; public static final String TAG = "GpodnetService";
public static final String DEFAULT_BASE_HOST = "gpodder.net"; private static final String DEFAULT_BASE_HOST = "gpodder.net";
private static final int UPLOAD_BULK_SIZE = 30; private static final int UPLOAD_BULK_SIZE = 30;
private static final MediaType TEXT = MediaType.parse("plain/text; charset=utf-8"); private static final MediaType TEXT = MediaType.parse("plain/text; charset=utf-8");
private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8"); private static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");

View File

@ -625,12 +625,9 @@
<!-- gpodder.net --> <!-- gpodder.net -->
<string name="gpodnetauth_login_butLabel">Login</string> <string name="gpodnetauth_login_butLabel">Login</string>
<string name="gpodnetauth_encryption_warning">Password and data are not encrypted!</string> <string name="gpodnetauth_encryption_warning">Password and data are not encrypted!</string>
<string name="create_account">Create account</string>
<string name="username_label">Username</string> <string name="username_label">Username</string>
<string name="password_label">Password</string> <string name="password_label">Password</string>
<string name="gpodnet_description">Gpodder.net is an open-source podcast synchronization service that is independent of the AntennaPod project.</string> <string name="gpodnet_description">Gpodder.net is an open-source podcast synchronization service that you can install on your own server. Gpodder.net is independent of the AntennaPod project.</string>
<string name="gpodnetauth_server_official">Official gpodder.net server</string>
<string name="gpodnetauth_server_custom">Custom server</string>
<string name="gpodnetauth_host">Hostname</string> <string name="gpodnetauth_host">Hostname</string>
<string name="gpodnetauth_select_server">Select server</string> <string name="gpodnetauth_select_server">Select server</string>
<string name="gpodnetauth_device_name">Device name</string> <string name="gpodnetauth_device_name">Device name</string>