Merge :net:sync:model and :net:sync:service-interface (#7063)

This commit is contained in:
ByteHamster 2024-04-05 20:08:25 +02:00 committed by GitHub
parent b6a4049ff4
commit 687db0f5ed
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
41 changed files with 107 additions and 138 deletions

View File

@ -70,7 +70,6 @@ dependencies {
implementation project(':net:download:service')
implementation project(':net:ssl')
implementation project(':net:sync:service')
implementation project(':net:sync:model')
implementation project(':parser:feed')
implementation project(':playback:base')
implementation project(':playback:cast')

View File

@ -27,7 +27,7 @@ import de.danoeh.antennapod.ui.share.ShareUtils;
import de.danoeh.antennapod.ui.share.ShareDialog;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import de.danoeh.antennapod.ui.appstartintent.MediaButtonStarter;
import de.danoeh.antennapod.ui.view.LocalDeleteModal;

View File

@ -14,7 +14,6 @@ dependencies {
implementation project(':model')
implementation project(':net:common')
implementation project(':net:download:service-interface')
implementation project(':net:sync:model')
implementation project(':net:sync:service-interface')
implementation project(':parser:media')
implementation project(':parser:feed')

View File

@ -23,7 +23,7 @@ import de.danoeh.antennapod.storage.database.DBWriter;
import de.danoeh.antennapod.model.download.DownloadError;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
/**
* Handles a completed media download.

View File

@ -8,7 +8,7 @@ android {
}
dependencies {
implementation project(':net:sync:model')
implementation project(':net:sync:service-interface')
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
implementation "androidx.appcompat:appcompat:$appcompatVersion"

View File

@ -5,6 +5,12 @@ import android.util.Log;
import androidx.annotation.NonNull;
import de.danoeh.antennapod.net.sync.HostnameParser;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.serviceinterface.ISyncService;
import de.danoeh.antennapod.net.sync.serviceinterface.SubscriptionChanges;
import de.danoeh.antennapod.net.sync.serviceinterface.SyncServiceException;
import de.danoeh.antennapod.net.sync.serviceinterface.UploadChangesResponse;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@ -27,12 +33,6 @@ import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetDevice;
import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetEpisodeActionPostResponse;
import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetPodcast;
import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetUploadChangesResponse;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.model.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.model.ISyncService;
import de.danoeh.antennapod.net.sync.model.SubscriptionChanges;
import de.danoeh.antennapod.net.sync.model.SyncServiceException;
import de.danoeh.antennapod.net.sync.model.UploadChangesResponse;
import okhttp3.Credentials;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;

View File

@ -1,6 +1,6 @@
package de.danoeh.antennapod.net.sync.gpoddernet;
import de.danoeh.antennapod.net.sync.model.SyncServiceException;
import de.danoeh.antennapod.net.sync.serviceinterface.SyncServiceException;
public class GpodnetServiceException extends SyncServiceException {
private static final long serialVersionUID = 1L;

View File

@ -2,6 +2,9 @@ package de.danoeh.antennapod.net.sync.gpoddernet.mapper;
import androidx.annotation.NonNull;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.serviceinterface.SubscriptionChanges;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
@ -10,10 +13,6 @@ import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.model.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.model.SubscriptionChanges;
public class ResponseMapper {
public static SubscriptionChanges readSubscriptionChangesFromJsonObject(@NonNull JSONObject object)

View File

@ -2,7 +2,7 @@ package de.danoeh.antennapod.net.sync.gpoddernet.model;
import androidx.collection.ArrayMap;
import de.danoeh.antennapod.net.sync.model.UploadChangesResponse;
import de.danoeh.antennapod.net.sync.serviceinterface.UploadChangesResponse;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;
import org.json.JSONArray;

View File

@ -3,7 +3,7 @@ package de.danoeh.antennapod.net.sync.gpoddernet.model;
import androidx.collection.ArrayMap;
import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
import de.danoeh.antennapod.net.sync.model.UploadChangesResponse;
import de.danoeh.antennapod.net.sync.serviceinterface.UploadChangesResponse;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

View File

@ -3,12 +3,12 @@ package de.danoeh.antennapod.net.sync.nextcloud;
import de.danoeh.antennapod.net.sync.HostnameParser;
import de.danoeh.antennapod.net.sync.gpoddernet.mapper.ResponseMapper;
import de.danoeh.antennapod.net.sync.gpoddernet.model.GpodnetUploadChangesResponse;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.model.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.model.ISyncService;
import de.danoeh.antennapod.net.sync.model.SubscriptionChanges;
import de.danoeh.antennapod.net.sync.model.SyncServiceException;
import de.danoeh.antennapod.net.sync.model.UploadChangesResponse;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.serviceinterface.ISyncService;
import de.danoeh.antennapod.net.sync.serviceinterface.SubscriptionChanges;
import de.danoeh.antennapod.net.sync.serviceinterface.SyncServiceException;
import de.danoeh.antennapod.net.sync.serviceinterface.UploadChangesResponse;
import okhttp3.Credentials;
import okhttp3.HttpUrl;
import okhttp3.MediaType;

View File

@ -1,6 +1,6 @@
package de.danoeh.antennapod.net.sync.nextcloud;
import de.danoeh.antennapod.net.sync.model.SyncServiceException;
import de.danoeh.antennapod.net.sync.serviceinterface.SyncServiceException;
public class NextcloudSynchronizationServiceException extends SyncServiceException {
public NextcloudSynchronizationServiceException(Throwable e) {

View File

@ -1,3 +0,0 @@
# :net:sync:model
This module contains the basic interfaces for implementing a sync backend.

View File

@ -1,14 +0,0 @@
plugins {
id("com.android.library")
}
apply from: "../../../common.gradle"
android {
namespace "de.danoeh.antennapod.net.sync.model"
}
dependencies {
implementation project(':model')
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
}

View File

@ -9,9 +9,7 @@ android {
dependencies {
implementation project(':model')
implementation project(':net:sync:model')
implementation project(':storage:preferences')
implementation project(':ui:i18n')
annotationProcessor "androidx.annotation:annotation:$annotationVersion"
implementation "io.reactivex.rxjava2:rxandroid:$rxAndroidVersion"

View File

@ -1,4 +1,4 @@
package de.danoeh.antennapod.net.sync.model;
package de.danoeh.antennapod.net.sync.serviceinterface;
import android.text.TextUtils;
import android.util.Log;

View File

@ -1,4 +1,4 @@
package de.danoeh.antennapod.net.sync.model;
package de.danoeh.antennapod.net.sync.serviceinterface;
import androidx.annotation.NonNull;

View File

@ -1,4 +1,4 @@
package de.danoeh.antennapod.net.sync.model;
package de.danoeh.antennapod.net.sync.serviceinterface;
import java.util.List;

View File

@ -1,4 +1,4 @@
package de.danoeh.antennapod.net.sync.model;
package de.danoeh.antennapod.net.sync.serviceinterface;
import androidx.annotation.NonNull;

View File

@ -1,4 +1,4 @@
package de.danoeh.antennapod.net.sync.model;
package de.danoeh.antennapod.net.sync.serviceinterface;
public class SyncServiceException extends Exception {
private static final long serialVersionUID = 1L;

View File

@ -0,0 +1,25 @@
package de.danoeh.antennapod.net.sync.serviceinterface;
public enum SynchronizationProvider {
GPODDER_NET("GPODDER_NET"),
NEXTCLOUD_GPODDER("NEXTCLOUD_GPODDER");
public static SynchronizationProvider fromIdentifier(String provider) {
for (SynchronizationProvider synchronizationProvider : SynchronizationProvider.values()) {
if (synchronizationProvider.getIdentifier().equals(provider)) {
return synchronizationProvider;
}
}
return null;
}
private final String identifier;
SynchronizationProvider(String identifier) {
this.identifier = identifier;
}
public String getIdentifier() {
return identifier;
}
}

View File

@ -1,45 +0,0 @@
package de.danoeh.antennapod.net.sync.serviceinterface;
public enum SynchronizationProviderViewData {
GPODDER_NET(
"GPODDER_NET",
R.string.gpodnet_description,
R.drawable.gpodder_icon
),
NEXTCLOUD_GPODDER(
"NEXTCLOUD_GPODDER",
R.string.synchronization_summary_nextcloud,
R.drawable.nextcloud_logo
);
public static SynchronizationProviderViewData fromIdentifier(String provider) {
for (SynchronizationProviderViewData synchronizationProvider : SynchronizationProviderViewData.values()) {
if (synchronizationProvider.getIdentifier().equals(provider)) {
return synchronizationProvider;
}
}
return null;
}
private final String identifier;
private final int iconResource;
private final int summaryResource;
SynchronizationProviderViewData(String identifier, int summaryResource, int iconResource) {
this.identifier = identifier;
this.iconResource = iconResource;
this.summaryResource = summaryResource;
}
public String getIdentifier() {
return identifier;
}
public int getIconResource() {
return iconResource;
}
public int getSummaryResource() {
return summaryResource;
}
}

View File

@ -4,7 +4,6 @@ import android.content.Context;
import de.danoeh.antennapod.storage.preferences.SynchronizationSettings;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
public class SynchronizationQueueSink {
// To avoid a dependency loop of every class to SyncService, and from SyncService back to every class.

View File

@ -9,7 +9,6 @@ import org.json.JSONException;
import java.util.ArrayList;
import de.danoeh.antennapod.storage.preferences.SynchronizationSettings;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
public class SynchronizationQueueStorage {

View File

@ -1,4 +1,4 @@
package de.danoeh.antennapod.net.sync.model;
package de.danoeh.antennapod.net.sync.serviceinterface;
public abstract class UploadChangesResponse {

View File

@ -13,7 +13,6 @@ dependencies {
implementation project(':model')
implementation project(':net:common')
implementation project(':net:sync:gpoddernet')
implementation project(':net:sync:model')
implementation project(':net:sync:service-interface')
implementation project(':storage:database')
implementation project(':storage:preferences')

View File

@ -8,7 +8,7 @@ import androidx.core.util.Pair;
import java.util.List;
import java.util.Map;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
public class EpisodeActionFilter {

View File

@ -29,7 +29,7 @@ import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.net.download.serviceinterface.FeedUpdateManager;
import de.danoeh.antennapod.net.sync.serviceinterface.LockingAsyncExecutor;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProviderViewData;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProvider;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueStorage;
import de.danoeh.antennapod.storage.database.DBWriter;
import de.danoeh.antennapod.storage.database.FeedDatabaseWriter;
@ -55,12 +55,12 @@ import de.danoeh.antennapod.model.feed.Feed;
import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.net.sync.gpoddernet.GpodnetService;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.model.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.model.ISyncService;
import de.danoeh.antennapod.net.sync.model.SubscriptionChanges;
import de.danoeh.antennapod.net.sync.model.SyncServiceException;
import de.danoeh.antennapod.net.sync.model.UploadChangesResponse;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeActionChanges;
import de.danoeh.antennapod.net.sync.serviceinterface.ISyncService;
import de.danoeh.antennapod.net.sync.serviceinterface.SubscriptionChanges;
import de.danoeh.antennapod.net.sync.serviceinterface.SyncServiceException;
import de.danoeh.antennapod.net.sync.serviceinterface.UploadChangesResponse;
import de.danoeh.antennapod.net.sync.nextcloud.NextcloudSyncService;
public class SyncService extends Worker {
@ -369,7 +369,7 @@ public class SyncService extends Worker {
private ISyncService getActiveSyncProvider() {
String selectedSyncProviderKey = SynchronizationSettings.getSelectedSyncProviderKey();
SynchronizationProviderViewData selectedService = SynchronizationProviderViewData
SynchronizationProvider selectedService = SynchronizationProvider
.fromIdentifier(selectedSyncProviderKey);
if (selectedService == null) {
return null;

View File

@ -12,7 +12,7 @@ import java.util.Date;
import java.util.List;
import java.util.Map;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
public class EpisodeActionFilterTest extends TestCase {

View File

@ -25,7 +25,6 @@ include ':net:download:service-interface'
include ':net:download:service'
include ':net:ssl'
include ':net:sync:gpoddernet'
include ':net:sync:model'
include ':net:sync:service-interface'
include ':net:sync:service'

View File

@ -16,7 +16,6 @@ dependencies {
implementation project(':event')
implementation project(':model')
implementation project(':net:download:service-interface')
implementation project(':net:sync:model')
implementation project(':net:sync:service-interface')
implementation project(':storage:preferences')
implementation project(':ui:app-start-intent')

View File

@ -36,7 +36,6 @@ import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.event.FavoritesEvent;
import de.danoeh.antennapod.event.FeedItemEvent;
import de.danoeh.antennapod.event.FeedListUpdateEvent;
import de.danoeh.antennapod.event.MessageEvent;
import de.danoeh.antennapod.event.playback.PlaybackHistoryEvent;
import de.danoeh.antennapod.event.QueueEvent;
import de.danoeh.antennapod.event.UnreadItemsUpdateEvent;
@ -50,7 +49,7 @@ import de.danoeh.antennapod.model.feed.FeedMedia;
import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.model.playback.Playable;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
/**
* Provides methods for writing data to AntennaPod's database.
@ -114,8 +113,7 @@ public class DBWriter {
// Local feed
DocumentFile documentFile = DocumentFile.fromSingleUri(context, Uri.parse(media.getLocalFileUrl()));
if (documentFile == null || !documentFile.exists() || !documentFile.delete()) {
EventBus.getDefault().post(new MessageEvent(context.getString(R.string.delete_local_failed)));
return false;
Log.d(TAG, "Deletion of local file failed.");
}
media.setLocalFileUrl(null);
localDelete = true;
@ -123,9 +121,7 @@ public class DBWriter {
// delete downloaded media file
File mediaFile = new File(media.getLocalFileUrl());
if (mediaFile.exists() && !mediaFile.delete()) {
MessageEvent evt = new MessageEvent(context.getString(R.string.delete_failed));
EventBus.getDefault().post(evt);
return false;
Log.d(TAG, "Deletion of downloaded file failed.");
}
media.setDownloaded(false);
media.setLocalFileUrl(null);

View File

@ -11,7 +11,7 @@ import de.danoeh.antennapod.model.feed.FeedItem;
import de.danoeh.antennapod.model.feed.FeedItemFilter;
import de.danoeh.antennapod.model.feed.FeedPreferences;
import de.danoeh.antennapod.model.feed.SortOrder;
import de.danoeh.antennapod.net.sync.model.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.EpisodeAction;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
import de.danoeh.antennapod.storage.preferences.UserPreferences;
import org.greenrobot.eventbus.EventBus;

View File

@ -218,8 +218,6 @@
<string name="pause_label">Pause</string>
<string name="stream_label">Stream</string>
<string name="delete_label">Delete</string>
<string name="delete_failed">Unable to delete file. Rebooting the device could help.</string>
<string name="delete_local_failed">Unable to delete file. Try re-connecting the local folder from the podcast info screen.</string>
<string name="delete_episode_label">Delete episode</string>
<plurals name="deleted_multi_episode_batch_label">
<item quantity="one">1 downloaded episode deleted.</item>

View File

@ -25,7 +25,6 @@ android {
dependencies {
implementation project(":event")
implementation project(":net:common")
implementation project(":net:sync:model")
implementation project(":net:sync:gpoddernet")
implementation project(":storage:preferences")
implementation project(":storage:importexport")

View File

@ -20,7 +20,7 @@ import androidx.fragment.app.DialogFragment;
import com.google.android.material.button.MaterialButton;
import de.danoeh.antennapod.net.common.AntennapodHttpClient;
import de.danoeh.antennapod.net.sync.service.SyncService;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProviderViewData;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProvider;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
import de.danoeh.antennapod.storage.preferences.SynchronizationCredentials;
import de.danoeh.antennapod.storage.preferences.SynchronizationSettings;
@ -257,7 +257,7 @@ public class GpodderAuthenticationFragment extends DialogFragment {
throw new IllegalStateException("Device must not be null here");
} else {
SynchronizationSettings.setSelectedSyncProvider(
SynchronizationProviderViewData.GPODDER_NET.getIdentifier());
SynchronizationProvider.GPODDER_NET.getIdentifier());
SynchronizationCredentials.setUsername(username);
SynchronizationCredentials.setPassword(password);
SynchronizationCredentials.setDeviceId(selectedDevice.getId());

View File

@ -10,7 +10,7 @@ import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import androidx.fragment.app.DialogFragment;
import de.danoeh.antennapod.net.common.AntennapodHttpClient;
import de.danoeh.antennapod.net.sync.service.SyncService;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProviderViewData;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProvider;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
import de.danoeh.antennapod.storage.preferences.SynchronizationCredentials;
import de.danoeh.antennapod.storage.preferences.SynchronizationSettings;
@ -89,7 +89,7 @@ public class NextcloudAuthenticationFragment extends DialogFragment
@Override
public void onNextcloudAuthenticated(String server, String username, String password) {
SynchronizationSettings.setSelectedSyncProvider(
SynchronizationProviderViewData.NEXTCLOUD_GPODDER.getIdentifier());
SynchronizationProvider.NEXTCLOUD_GPODDER.getIdentifier());
SynchronizationCredentials.clear();
SynchronizationQueueSink.clearQueue(getContext());
SynchronizationCredentials.setPassword(password);

View File

@ -12,7 +12,9 @@ import android.widget.ImageView;
import android.widget.ListAdapter;
import android.widget.TextView;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.StringRes;
import androidx.appcompat.app.AppCompatActivity;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
import androidx.core.text.HtmlCompat;
@ -22,7 +24,7 @@ import androidx.preference.PreferenceFragmentCompat;
import com.google.android.material.snackbar.Snackbar;
import de.danoeh.antennapod.net.sync.service.SyncService;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProviderViewData;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationProvider;
import de.danoeh.antennapod.net.sync.serviceinterface.SynchronizationQueueSink;
import de.danoeh.antennapod.ui.preferences.R;
import org.greenrobot.eventbus.EventBus;
@ -114,11 +116,11 @@ public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat
final boolean loggedIn = SynchronizationSettings.isProviderConnected();
Preference preferenceHeader = findPreference(PREFERENCE_SYNCHRONIZATION_DESCRIPTION);
if (loggedIn) {
SynchronizationProviderViewData selectedProvider =
SynchronizationProviderViewData.fromIdentifier(getSelectedSyncProviderKey());
SynchronizationProvider selectedProvider =
SynchronizationProvider.fromIdentifier(getSelectedSyncProviderKey());
preferenceHeader.setTitle("");
preferenceHeader.setSummary(selectedProvider.getSummaryResource());
preferenceHeader.setIcon(selectedProvider.getIconResource());
preferenceHeader.setSummary(getProviderSummary(selectedProvider));
preferenceHeader.setIcon(getProviderIcon(selectedProvider));
preferenceHeader.setOnPreferenceClickListener(null);
} else {
preferenceHeader.setTitle(R.string.synchronization_choose_title);
@ -131,7 +133,7 @@ public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat
}
Preference gpodnetSetLoginPreference = findPreference(PREFERENCE_GPODNET_SETLOGIN_INFORMATION);
gpodnetSetLoginPreference.setVisible(isProviderSelected(SynchronizationProviderViewData.GPODDER_NET));
gpodnetSetLoginPreference.setVisible(isProviderSelected(SynchronizationProvider.GPODDER_NET));
gpodnetSetLoginPreference.setEnabled(loggedIn);
findPreference(PREFERENCE_SYNC).setEnabled(loggedIn);
findPreference(PREFERENCE_FORCE_FULL_SYNC).setEnabled(loggedIn);
@ -153,9 +155,8 @@ public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat
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) {
SynchronizationProvider[] providers = SynchronizationProvider.values();
ListAdapter adapter = new ArrayAdapter<>(getContext(), R.layout.alertdialog_sync_provider_chooser, providers) {
ViewHolder holder;
@ -177,9 +178,9 @@ public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat
} else {
holder = (ViewHolder) convertView.getTag();
}
SynchronizationProviderViewData synchronizationProviderViewData = getItem(position);
holder.title.setText(synchronizationProviderViewData.getSummaryResource());
holder.icon.setImageResource(synchronizationProviderViewData.getIconResource());
SynchronizationProvider synchronizationProvider = getItem(position);
holder.title.setText(getProviderSummary(synchronizationProvider));
holder.icon.setImageResource(getProviderIcon(synchronizationProvider));
return convertView;
}
};
@ -203,7 +204,7 @@ public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat
builder.show();
}
private boolean isProviderSelected(@NonNull SynchronizationProviderViewData provider) {
private boolean isProviderSelected(@NonNull SynchronizationProvider provider) {
String selectedSyncProviderKey = getSelectedSyncProviderKey();
return provider.getIdentifier().equals(selectedSyncProviderKey);
}
@ -219,4 +220,26 @@ public class SynchronizationPreferencesFragment extends PreferenceFragmentCompat
lastTime, DateUtils.MINUTE_IN_MILLIS, DateUtils.WEEK_IN_MILLIS, DateUtils.FORMAT_SHOW_TIME));
((AppCompatActivity) getActivity()).getSupportActionBar().setSubtitle(status);
}
private @StringRes int getProviderSummary(SynchronizationProvider provider) {
switch (provider) {
case GPODDER_NET:
return R.string.gpodnet_description;
case NEXTCLOUD_GPODDER:
return R.string.synchronization_summary_nextcloud;
default:
return R.string.sync_status_error;
}
}
private @DrawableRes int getProviderIcon(SynchronizationProvider provider) {
switch (provider) {
case GPODDER_NET:
return R.drawable.gpodder_icon;
case NEXTCLOUD_GPODDER:
return R.drawable.nextcloud_logo;
default:
return R.drawable.ic_error;
}
}
}

View File

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 31 KiB

View File

Before

Width:  |  Height:  |  Size: 3.4 KiB

After

Width:  |  Height:  |  Size: 3.4 KiB