summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/GpodderAuthenticationFragment.java279
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java111
-rw-r--r--app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java221
3 files changed, 0 insertions, 611 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();
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java
deleted file mode 100644
index 88f7ec036..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/NextcloudAuthenticationFragment.java
+++ /dev/null
@@ -1,111 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.synchronization;
-
-import android.app.Dialog;
-import android.content.DialogInterface;
-import android.os.Bundle;
-import android.view.View;
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.fragment.app.DialogFragment;
-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.databinding.NextcloudAuthDialogBinding;
-import de.danoeh.antennapod.net.sync.nextcloud.NextcloudLoginFlow;
-
-/**
- * Guides the user through the authentication process.
- */
-public class NextcloudAuthenticationFragment extends DialogFragment
- implements NextcloudLoginFlow.AuthenticationCallback {
- public static final String TAG = "NextcloudAuthenticationFragment";
- private static final String EXTRA_LOGIN_FLOW = "LoginFlow";
- private NextcloudAuthDialogBinding viewBinding;
- private NextcloudLoginFlow nextcloudLoginFlow;
- private boolean shouldDismiss = false;
-
- @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);
-
- viewBinding = NextcloudAuthDialogBinding.inflate(getLayoutInflater());
- dialog.setView(viewBinding.getRoot());
-
- viewBinding.chooseHostButton.setOnClickListener(v -> {
- nextcloudLoginFlow = new NextcloudLoginFlow(AntennapodHttpClient.getHttpClient(),
- viewBinding.serverUrlText.getText().toString(), getContext(), this);
- startLoginFlow();
- });
- if (savedInstanceState != null && savedInstanceState.getStringArrayList(EXTRA_LOGIN_FLOW) != null) {
- nextcloudLoginFlow = NextcloudLoginFlow.fromInstanceState(AntennapodHttpClient.getHttpClient(),
- getContext(), this, savedInstanceState.getStringArrayList(EXTRA_LOGIN_FLOW));
- startLoginFlow();
- }
- return dialog.create();
- }
-
- private void startLoginFlow() {
- viewBinding.errorText.setVisibility(View.GONE);
- viewBinding.chooseHostButton.setVisibility(View.GONE);
- viewBinding.loginProgressContainer.setVisibility(View.VISIBLE);
- viewBinding.serverUrlText.setEnabled(false);
- nextcloudLoginFlow.start();
- }
-
- @Override
- public void onSaveInstanceState(@NonNull Bundle outState) {
- super.onSaveInstanceState(outState);
- if (nextcloudLoginFlow != null) {
- outState.putStringArrayList(EXTRA_LOGIN_FLOW, nextcloudLoginFlow.saveInstanceState());
- }
- }
-
- @Override
- public void onDismiss(@NonNull DialogInterface dialog) {
- super.onDismiss(dialog);
- if (nextcloudLoginFlow != null) {
- nextcloudLoginFlow.cancel();
- }
- }
-
- @Override
- public void onResume() {
- super.onResume();
- if (shouldDismiss) {
- dismiss();
- }
- }
-
- @Override
- public void onNextcloudAuthenticated(String server, String username, String password) {
- SynchronizationSettings.setSelectedSyncProvider(SynchronizationProviderViewData.NEXTCLOUD_GPODDER);
- SynchronizationCredentials.clear(getContext());
- SynchronizationCredentials.setPassword(password);
- SynchronizationCredentials.setHosturl(server);
- SynchronizationCredentials.setUsername(username);
- SyncService.fullSync(getContext());
- if (isResumed()) {
- dismiss();
- } else {
- shouldDismiss = true;
- }
- }
-
- @Override
- public void onNextcloudAuthError(String errorMessage) {
- viewBinding.loginProgressContainer.setVisibility(View.GONE);
- viewBinding.errorText.setVisibility(View.VISIBLE);
- viewBinding.errorText.setText(errorMessage);
- viewBinding.chooseHostButton.setVisibility(View.VISIBLE);
- viewBinding.serverUrlText.setEnabled(true);
- }
-}
diff --git a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java b/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java
deleted file mode 100644
index 2ac1f78df..000000000
--- a/app/src/main/java/de/danoeh/antennapod/fragment/preferences/synchronization/SynchronizationPreferencesFragment.java
+++ /dev/null
@@ -1,221 +0,0 @@
-package de.danoeh.antennapod.fragment.preferences.synchronization;
-
-import android.app.Activity;
-import android.os.Bundle;
-import android.text.Spanned;
-import android.text.format.DateUtils;
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-import android.widget.ArrayAdapter;
-import android.widget.ImageView;
-import android.widget.ListAdapter;
-import android.widget.TextView;
-
-import androidx.annotation.NonNull;
-import com.google.android.material.dialog.MaterialAlertDialogBuilder;
-import androidx.core.text.HtmlCompat;
-import androidx.preference.Preference;
-import androidx.preference.PreferenceFragmentCompat;
-
-import com.google.android.material.snackbar.Snackbar;
-
-import org.greenrobot.eventbus.EventBus;
-import org.greenrobot.eventbus.Subscribe;
-import org.greenrobot.eventbus.ThreadMode;
-
-import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.PreferenceActivity;
-import de.danoeh.antennapod.event.SyncServiceEvent;
-import de.danoeh.antennapod.core.sync.SynchronizationCredentials;
-import de.danoeh.antennapod.core.sync.SyncService;
-import de.danoeh.antennapod.core.sync.SynchronizationProviderViewData;
-import de.danoeh.antennapod.core.sync.SynchronizationSettings;
-import de.danoeh.antennapod.dialog.AuthenticationDialog;
-
-public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat {
- private static final String PREFERENCE_SYNCHRONIZATION_DESCRIPTION = "preference_synchronization_description";
- private static final String PREFERENCE_GPODNET_SETLOGIN_INFORMATION = "pref_gpodnet_setlogin_information";
- private static final String PREFERENCE_SYNC = "pref_synchronization_sync";
- private static final String PREFERENCE_FORCE_FULL_SYNC = "pref_synchronization_force_full_sync";
- private static final String PREFERENCE_LOGOUT = "pref_synchronization_logout";
-
- @Override
- public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
- addPreferencesFromResource(R.xml.preferences_synchronization);
- setupScreen();
- updateScreen();
- }
-
- @Override
- public void onStart() {
- super.onStart();
- ((PreferenceActivity) getActivity()).getSupportActionBar().setTitle(R.string.synchronization_pref);
- updateScreen();
- EventBus.getDefault().register(this);
- }
-
- @Override
- public void onStop() {
- super.onStop();
- EventBus.getDefault().unregister(this);
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle("");
- }
-
- @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
- public void syncStatusChanged(SyncServiceEvent event) {
- if (!SynchronizationSettings.isProviderConnected()) {
- return;
- }
- updateScreen();
- if (event.getMessageResId() == R.string.sync_status_error
- || event.getMessageResId() == R.string.sync_status_success) {
- updateLastSyncReport(SynchronizationSettings.isLastSyncSuccessful(),
- SynchronizationSettings.getLastSyncAttempt());
- } else {
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle(event.getMessageResId());
- }
- }
-
- private void setupScreen() {
- final Activity activity = getActivity();
- findPreference(PREFERENCE_GPODNET_SETLOGIN_INFORMATION)
- .setOnPreferenceClickListener(preference -> {
- AuthenticationDialog dialog = new AuthenticationDialog(activity,
- R.string.pref_gpodnet_setlogin_information_title,
- false, SynchronizationCredentials.getUsername(), null) {
- @Override
- protected void onConfirmed(String username, String password) {
- SynchronizationCredentials.setPassword(password);
- }
- };
- dialog.show();
- return true;
- });
- findPreference(PREFERENCE_SYNC).setOnPreferenceClickListener(preference -> {
- SyncService.syncImmediately(getActivity().getApplicationContext());
- return true;
- });
- findPreference(PREFERENCE_FORCE_FULL_SYNC).setOnPreferenceClickListener(preference -> {
- SyncService.fullSync(getContext());
- return true;
- });
- findPreference(PREFERENCE_LOGOUT).setOnPreferenceClickListener(preference -> {
- SynchronizationCredentials.clear(getContext());
- Snackbar.make(getView(), R.string.pref_synchronization_logout_toast, Snackbar.LENGTH_LONG).show();
- SynchronizationSettings.setSelectedSyncProvider(null);
- updateScreen();
- return true;
- });
- }
-
- private void updateScreen() {
- final boolean loggedIn = SynchronizationSettings.isProviderConnected();
- Preference preferenceHeader = findPreference(PREFERENCE_SYNCHRONIZATION_DESCRIPTION);
- if (loggedIn) {
- SynchronizationProviderViewData selectedProvider =
- SynchronizationProviderViewData.fromIdentifier(getSelectedSyncProviderKey());
- preferenceHeader.setTitle("");
- preferenceHeader.setSummary(selectedProvider.getSummaryResource());
- preferenceHeader.setIcon(selectedProvider.getIconResource());
- preferenceHeader.setOnPreferenceClickListener(null);
- } else {
- preferenceHeader.setTitle(R.string.synchronization_choose_title);
- preferenceHeader.setSummary(R.string.synchronization_summary_unchoosen);
- preferenceHeader.setIcon(R.drawable.ic_cloud);
- preferenceHeader.setOnPreferenceClickListener((preference) -> {
- chooseProviderAndLogin();
- return true;
- });
- }
-
- Preference gpodnetSetLoginPreference = findPreference(PREFERENCE_GPODNET_SETLOGIN_INFORMATION);
- gpodnetSetLoginPreference.setVisible(isProviderSelected(SynchronizationProviderViewData.GPODDER_NET));
- gpodnetSetLoginPreference.setEnabled(loggedIn);
- findPreference(PREFERENCE_SYNC).setEnabled(loggedIn);
- findPreference(PREFERENCE_FORCE_FULL_SYNC).setEnabled(loggedIn);
- findPreference(PREFERENCE_LOGOUT).setEnabled(loggedIn);
- if (loggedIn) {
- String summary = getString(R.string.synchronization_login_status,
- SynchronizationCredentials.getUsername(), SynchronizationCredentials.getHosturl());
- Spanned formattedSummary = HtmlCompat.fromHtml(summary, HtmlCompat.FROM_HTML_MODE_LEGACY);
- findPreference(PREFERENCE_LOGOUT).setSummary(formattedSummary);
- updateLastSyncReport(SynchronizationSettings.isLastSyncSuccessful(),
- SynchronizationSettings.getLastSyncAttempt());
- } else {
- findPreference(PREFERENCE_LOGOUT).setSummary(null);
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle(null);
- }
- }
-
- private void chooseProviderAndLogin() {
- MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(getContext());
- builder.setTitle(R.string.dialog_choose_sync_service_title);
-
- SynchronizationProviderViewData[] providers = SynchronizationProviderViewData.values();
- ListAdapter adapter = new ArrayAdapter<SynchronizationProviderViewData>(
- getContext(), R.layout.alertdialog_sync_provider_chooser, providers) {
-
- ViewHolder holder;
-
- class ViewHolder {
- ImageView icon;
- TextView title;
- }
-
- public View getView(int position, View convertView, ViewGroup parent) {
- final LayoutInflater inflater = LayoutInflater.from(getContext());
- if (convertView == null) {
- convertView = inflater.inflate(
- R.layout.alertdialog_sync_provider_chooser, null);
-
- holder = new ViewHolder();
- holder.icon = (ImageView) convertView.findViewById(R.id.icon);
- holder.title = (TextView) convertView.findViewById(R.id.title);
- convertView.setTag(holder);
- } else {
- holder = (ViewHolder) convertView.getTag();
- }
- SynchronizationProviderViewData synchronizationProviderViewData = getItem(position);
- holder.title.setText(synchronizationProviderViewData.getSummaryResource());
- holder.icon.setImageResource(synchronizationProviderViewData.getIconResource());
- return convertView;
- }
- };
-
- builder.setAdapter(adapter, (dialog, which) -> {
- switch (providers[which]) {
- case GPODDER_NET:
- new GpodderAuthenticationFragment()
- .show(getChildFragmentManager(), GpodderAuthenticationFragment.TAG);
- break;
- case NEXTCLOUD_GPODDER:
- new NextcloudAuthenticationFragment()
- .show(getChildFragmentManager(), NextcloudAuthenticationFragment.TAG);
- break;
- default:
- break;
- }
- updateScreen();
- });
-
- builder.show();
- }
-
- private boolean isProviderSelected(@NonNull SynchronizationProviderViewData provider) {
- String selectedSyncProviderKey = getSelectedSyncProviderKey();
- return provider.getIdentifier().equals(selectedSyncProviderKey);
- }
-
- private String getSelectedSyncProviderKey() {
- return SynchronizationSettings.getSelectedSyncProviderKey();
- }
-
- private void updateLastSyncReport(boolean successful, long lastTime) {
- String status = String.format("%1$s (%2$s)", getString(successful
- ? R.string.gpodnetsync_pref_report_successful : R.string.gpodnetsync_pref_report_failed),
- DateUtils.getRelativeDateTimeString(getContext(),
- lastTime, DateUtils.MINUTE_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, DateUtils.FORMAT_SHOW_TIME));
- ((PreferenceActivity) getActivity()).getSupportActionBar().setSubtitle(status);
- }
-}