Added option to set gpodder.net hostname

This commit is contained in:
daniel oeh 2013-09-19 17:35:52 +02:00
parent 2bfee6d467
commit 9eaffe684d
6 changed files with 57 additions and 2 deletions

View File

@ -213,6 +213,8 @@
<string name="pref_gpodnet_setlogin_information_sum">Change the login information for your gpodder.net account.</string>
<string name="pref_playback_speed_title">Playback Speeds</string>
<string name="pref_playback_speed_sum">Customize the speeds available for variable speed audio playback</string>
<string name="pref_gpodnet_sethostname_title">Set hostname</string>
<string name="pref_gpodnet_sethostname_use_default_host">Use default host</string>
<!-- Search -->

View File

@ -102,6 +102,9 @@
<Preference
android:key="pref_gpodnet_logout"
android:title="@string/pref_gpodnet_logout_title"/>
<Preference
android:key="pref_gpodnet_hostname"
android:title="@string/pref_gpodnet_sethostname_title"/>
</PreferenceScreen>
</PreferenceCategory>

View File

@ -3,6 +3,7 @@ package de.danoeh.antennapod.activity;
import android.annotation.SuppressLint;
import android.app.ActionBar;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.res.Resources.Theme;
import android.net.wifi.WifiConfiguration;
@ -23,6 +24,7 @@ import de.danoeh.antennapod.R;
import de.danoeh.antennapod.asynctask.FlattrClickWorker;
import de.danoeh.antennapod.asynctask.OpmlExportWorker;
import de.danoeh.antennapod.dialog.AuthenticationDialog;
import de.danoeh.antennapod.dialog.GpodnetSetHostnameDialog;
import de.danoeh.antennapod.dialog.VariableSpeedDialog;
import de.danoeh.antennapod.preferences.GpodnetPreferences;
import de.danoeh.antennapod.preferences.UserPreferences;
@ -51,6 +53,7 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
private static final String PREF_GPODNET_LOGIN = "pref_gpodnet_authenticate";
private static final String PREF_GPODNET_SETLOGIN_INFORMATION = "pref_gpodnet_setlogin_information";
private static final String PREF_GPODNET_LOGOUT = "pref_gpodnet_logout";
private static final String PREF_GPODNET_HOSTNAME = "pref_gpodnet_hostname";
private CheckBoxPreference[] selectedNetworks;
@ -204,6 +207,18 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
return true;
}
});
findPreference(PREF_GPODNET_HOSTNAME).setOnPreferenceClickListener(new OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(Preference preference) {
GpodnetSetHostnameDialog.createDialog(PreferenceActivity.this).setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
updateGpodnetPreferenceScreen();
}
});
return true;
}
});
buildUpdateIntervalPreference();
buildAutodownloadSelectedNetworsPreference();
setSelectedNetworksEnabled(UserPreferences
@ -217,6 +232,7 @@ public class PreferenceActivity extends android.preference.PreferenceActivity {
findPreference(PREF_GPODNET_LOGIN).setEnabled(!loggedIn);
findPreference(PREF_GPODNET_SETLOGIN_INFORMATION).setEnabled(loggedIn);
findPreference(PREF_GPODNET_LOGOUT).setEnabled(loggedIn);
findPreference(PREF_GPODNET_HOSTNAME).setSummary(GpodnetPreferences.getHostname());
}
private void buildUpdateIntervalPreference() {

View File

@ -2,6 +2,8 @@ package de.danoeh.antennapod.gpoddernet;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.gpoddernet.model.*;
import de.danoeh.antennapod.preferences.GpodnetPreferences;
import de.danoeh.antennapod.preferences.UserPreferences;
import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
@ -39,7 +41,9 @@ import java.util.List;
public class GpodnetService {
private static final String BASE_SCHEME = "https";
private static final String BASE_HOST = "gpodder.net";
public static final String DEFAULT_BASE_HOST = "gpodder.net";
private final String BASE_HOST;
private static final int TIMEOUT_MILLIS = 20000;
@ -51,6 +55,7 @@ public class GpodnetService {
params.setParameter(CoreProtocolPNames.USER_AGENT, AppConfig.USER_AGENT);
HttpConnectionParams.setConnectionTimeout(params, TIMEOUT_MILLIS);
HttpConnectionParams.setSoTimeout(params, TIMEOUT_MILLIS);
BASE_HOST = GpodnetPreferences.getHostname();
}
/**

View File

@ -5,6 +5,7 @@ import android.content.SharedPreferences;
import android.util.Log;
import de.danoeh.antennapod.AppConfig;
import de.danoeh.antennapod.PodcastApp;
import de.danoeh.antennapod.gpoddernet.GpodnetService;
import de.danoeh.antennapod.service.GpodnetSyncService;
import java.util.Collection;
@ -23,6 +24,8 @@ public class GpodnetPreferences {
public static final String PREF_GPODNET_USERNAME = "de.danoeh.antennapod.preferences.gpoddernet.username";
public static final String PREF_GPODNET_PASSWORD = "de.danoeh.antennapod.preferences.gpoddernet.password";
public static final String PREF_GPODNET_DEVICEID = "de.danoeh.antennapod.preferences.gpoddernet.deviceID";
public static final String PREF_GPODNET_HOSTNAME = "prefGpodnetHostname";
public static final String PREF_LAST_SYNC_TIMESTAMP = "de.danoeh.antennapod.preferences.gpoddernet.last_sync_timestamp";
public static final String PREF_SYNC_ADDED = "de.danoeh.antennapod.preferences.gpoddernet.sync_added";
@ -31,6 +34,7 @@ public class GpodnetPreferences {
private static String username;
private static String password;
private static String deviceID;
private static String hostname;
private static ReentrantLock feedListLock = new ReentrantLock();
private static Set<String> addedFeeds;
@ -56,6 +60,7 @@ public class GpodnetPreferences {
lastSyncTimestamp = prefs.getLong(PREF_LAST_SYNC_TIMESTAMP, 0);
addedFeeds = readListFromString(prefs.getString(PREF_SYNC_ADDED, ""));
removedFeeds = readListFromString(prefs.getString(PREF_SYNC_REMOVED, ""));
hostname = checkGpodnetHostname(prefs.getString(PREF_GPODNET_HOSTNAME, GpodnetService.DEFAULT_BASE_HOST));
preferencesLoaded = true;
}
@ -119,6 +124,20 @@ public class GpodnetPreferences {
writePreference(PREF_LAST_SYNC_TIMESTAMP, lastSyncTimestamp);
}
public static String getHostname() {
ensurePreferencesLoaded();
return hostname;
}
public static void setHostname(String value) {
value = checkGpodnetHostname(value);
if (!value.equals(hostname)) {
logout();
writePreference(PREF_GPODNET_HOSTNAME, value);
hostname = value;
}
}
public static void addAddedFeed(String feed) {
ensurePreferencesLoaded();
feedListLock.lock();
@ -214,4 +233,14 @@ public class GpodnetPreferences {
}
return result.toString().trim();
}
private static String checkGpodnetHostname(String value) {
int startIndex = 0;
if (value.startsWith("http://")) {
startIndex = "http://".length();
} else if (value.startsWith("https://")) {
startIndex = "https://".length();
}
return value.substring(startIndex);
}
}

View File

@ -6,6 +6,7 @@ import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.TimeUnit;
import de.danoeh.antennapod.gpoddernet.GpodnetService;
import org.apache.commons.lang3.StringUtils;
import org.json.JSONArray;
import org.json.JSONException;
@ -473,5 +474,4 @@ public class UserPreferences implements
Log.d(TAG, "Automatic update was deactivated");
}
}
}