diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.java b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.java index 135fa4eba560..d3f65b134ccd 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.java +++ b/AnkiDroid/src/main/java/com/ichi2/anki/AnkiDroidApp.java @@ -312,6 +312,10 @@ public static SharedPreferences getSharedPrefs(Context context) { return context.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE); } + public static SharedPreferences getApplicationPrefs() { + return getSharedPrefs(sInstance.getApplicationContext()); + } + public static AnkiDroidApp getInstance() { return sInstance; diff --git a/AnkiDroid/src/main/java/com/ichi2/anki/Preferences.java b/AnkiDroid/src/main/java/com/ichi2/anki/Preferences.java index 80e771aa72e4..6fdf2621ac1b 100644 --- a/AnkiDroid/src/main/java/com/ichi2/anki/Preferences.java +++ b/AnkiDroid/src/main/java/com/ichi2/anki/Preferences.java @@ -104,7 +104,7 @@ public class Preferences extends PreferenceActivity implements OnSharedPreferenc private static String[] sShowValueInSummSeek = { "relativeDisplayFontSize", "relativeCardBrowserFontSize", "relativeImageSize", "answerButtonSize", "whiteBoardStrokeWidth", "swipeSensitivity", "timeoutAnswerSeconds", "timeoutQuestionSeconds", "backupMax", "dayOffset" }; - private static String[] sShowValueInSummEditText = { "simpleInterfaceExcludeTags", "deckPath" }; + private static String[] sShowValueInSummEditText = { "simpleInterfaceExcludeTags", "deckPath", "syncBaseUrl" }; private static String[] sShowValueInSummNumRange = { "timeLimit", "learnCutoff" }; private TreeMap mListsToUpdate = new TreeMap(); private StyledProgressDialog mProgressDialog; diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/FullSyncer.java b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/FullSyncer.java index d952190fcd70..efbf615f8855 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/FullSyncer.java +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/FullSyncer.java @@ -26,7 +26,6 @@ import com.ichi2.anki.exception.UnknownHttpResponseException; import com.ichi2.async.Connection; import com.ichi2.libanki.Collection; -import com.ichi2.libanki.Consts; import com.ichi2.libanki.Utils; import org.apache.http.HttpResponse; @@ -60,7 +59,7 @@ public FullSyncer(Collection col, String hkey, Connection con) { @Override public String syncURL() { - return Consts.SYNC_BASE + "sync/"; + return syncBase() + "sync/"; } diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/HttpSyncer.java b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/HttpSyncer.java index 40e8fc971b8f..a0db77448098 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/HttpSyncer.java +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/HttpSyncer.java @@ -193,7 +193,7 @@ public HttpResponse req(String method, InputStream fobj, int comp, JSONObject re bos.flush(); bos.close(); // connection headers - String url = Consts.SYNC_BASE; + String url = syncBase(); if (method.equals("register")) { url = url + "account/signup" + "?username=" + registerData.getString("u") + "&password=" + registerData.getString("p"); @@ -447,9 +447,12 @@ public HttpResponse register(String user, String pw) throws UnknownHttpResponseE return null; } + public String syncBase() { + return AnkiDroidApp.getApplicationPrefs().getString("syncBaseUrl", Consts.SYNC_BASE); + } public String syncURL() { - return Consts.SYNC_BASE + "sync/"; + return syncBase() + "sync/"; } } diff --git a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.java b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.java index 0d60108ee283..6bb24e61254f 100644 --- a/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.java +++ b/AnkiDroid/src/main/java/com/ichi2/libanki/sync/RemoteMediaServer.java @@ -24,7 +24,6 @@ import com.ichi2.anki.exception.UnknownHttpResponseException; import com.ichi2.async.Connection; import com.ichi2.libanki.Collection; -import com.ichi2.libanki.Consts; import com.ichi2.libanki.Utils; import org.apache.http.HttpResponse; @@ -55,7 +54,7 @@ public RemoteMediaServer(Collection col, String hkey, Connection con) { @Override public String syncURL() { - return Consts.SYNC_BASE + "msync/"; + return syncBase() + "msync/"; } diff --git a/AnkiDroid/src/main/res/values/10-preferences.xml b/AnkiDroid/src/main/res/values/10-preferences.xml index 8efdabfca9ad..0b10d859d0b2 100644 --- a/AnkiDroid/src/main/res/values/10-preferences.xml +++ b/AnkiDroid/src/main/res/values/10-preferences.xml @@ -90,6 +90,8 @@ Reads out question and answer if no sound file is included Fetch media on sync Automatically fetch missing media when syncing. + Anki Server URL + XXX AnkiWeb account Not logged in %s diff --git a/AnkiDroid/src/main/res/xml/preferences.xml b/AnkiDroid/src/main/res/xml/preferences.xml index 8e05e635479f..e49d51137c16 100644 --- a/AnkiDroid/src/main/res/xml/preferences.xml +++ b/AnkiDroid/src/main/res/xml/preferences.xml @@ -339,6 +339,11 @@ +