diff --git a/src/main/java/org/thoughtcrime/securesms/WebxdcStoreActivity.java b/src/main/java/org/thoughtcrime/securesms/WebxdcStoreActivity.java
index 0dd6e8edc..c15174531 100644
--- a/src/main/java/org/thoughtcrime/securesms/WebxdcStoreActivity.java
+++ b/src/main/java/org/thoughtcrime/securesms/WebxdcStoreActivity.java
@@ -22,6 +22,7 @@ import com.b44t.messenger.rpc.Rpc;
import org.thoughtcrime.securesms.connect.DcHelper;
import org.thoughtcrime.securesms.providers.PersistentBlobProvider;
import org.thoughtcrime.securesms.util.MediaUtil;
+import org.thoughtcrime.securesms.util.Prefs;
import java.io.ByteArrayInputStream;
import java.util.HashMap;
@@ -80,9 +81,7 @@ public class WebxdcStoreActivity extends PassphraseRequiredActionBarActivity {
webSettings.setDomStorageEnabled(true);
webView.setNetworkAvailable(true); // this does not block network but sets `window.navigator.isOnline` in js land
- // TODO: use setting
- String storeURL = "https://webxdc.org/apps/";
- webView.loadUrl(storeURL);
+ webView.loadUrl(Prefs.getWebxdcStoreUrl(this));
}
private WebResourceResponse interceptRequest(String url) {
diff --git a/src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java b/src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java
index d01254d89..f259acb53 100644
--- a/src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java
+++ b/src/main/java/org/thoughtcrime/securesms/preferences/AdvancedPreferenceFragment.java
@@ -156,6 +156,10 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
webrtcInstance.setOnPreferenceClickListener(new WebrtcInstanceListener());
updateWebrtcSummary();
+ Preference webxdcStore = this.findPreference(Prefs.WEBXDC_STORE_URL_PREF);
+ webxdcStore.setOnPreferenceClickListener(new WebxdcStoreUrlListener());
+ updateWebxdcStoreSummary();
+
Preference newBroadcastList = this.findPreference("pref_new_broadcast_list");
newBroadcastList.setOnPreferenceChangeListener((preference, newValue) -> {
if ((Boolean)newValue) {
@@ -345,6 +349,29 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
}
}
+ private class WebxdcStoreUrlListener implements Preference.OnPreferenceClickListener {
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ View gl = View.inflate(getActivity(), R.layout.single_line_input, null);
+ EditText inputField = gl.findViewById(R.id.input_field);
+ inputField.setHint(Prefs.DEFAULT_WEBXDC_STORE_URL);
+ inputField.setText(Prefs.getWebxdcStoreUrl(getActivity()));
+ inputField.setSelection(inputField.getText().length());
+ inputField.setInputType(TYPE_TEXT_VARIATION_URI);
+ new AlertDialog.Builder(getActivity())
+ .setTitle(R.string.webxdc_store_url)
+ .setMessage(R.string.webxdc_store_url_explain)
+ .setView(gl)
+ .setNegativeButton(android.R.string.cancel, null)
+ .setPositiveButton(android.R.string.ok, (dlg, btn) -> {
+ Prefs.setWebxdcStoreUrl(getActivity(), inputField.getText().toString());
+ updateWebxdcStoreSummary();
+ })
+ .show();
+ return true;
+ }
+ }
+
private void updateWebrtcSummary() {
Preference webrtcInstance = this.findPreference("pref_webrtc_instance");
if (webrtcInstance != null) {
@@ -353,6 +380,13 @@ public class AdvancedPreferenceFragment extends ListSummaryPreferenceFragment
}
}
+ private void updateWebxdcStoreSummary() {
+ Preference preference = this.findPreference(Prefs.WEBXDC_STORE_URL_PREF);
+ if (preference != null) {
+ preference.setSummary(Prefs.getWebxdcStoreUrl(getActivity()));
+ }
+ }
+
private void openRegistrationActivity() {
Intent intent = new Intent(getActivity(), RegistrationActivity.class);
startActivity(intent);
diff --git a/src/main/java/org/thoughtcrime/securesms/util/Prefs.java b/src/main/java/org/thoughtcrime/securesms/util/Prefs.java
index face741e6..667f64499 100644
--- a/src/main/java/org/thoughtcrime/securesms/util/Prefs.java
+++ b/src/main/java/org/thoughtcrime/securesms/util/Prefs.java
@@ -62,6 +62,8 @@ public class Prefs {
public static final boolean ALWAYS_LOAD_REMOTE_CONTENT_DEFAULT = false;
public static final String LAST_DEVICE_MSG_LABEL = "pref_last_device_msg_id";
+ public static final String WEBXDC_STORE_URL_PREF = "pref_webxdc_store_url";
+ public static final String DEFAULT_WEBXDC_STORE_URL = "https://webxdc.org/apps/";
public enum VibrateState {
DEFAULT(0), ENABLED(1), DISABLED(2);
@@ -144,6 +146,15 @@ public class Prefs {
return getStringPreference(context, THEME_PREF, DynamicTheme.systemThemeAvailable() ? DynamicTheme.SYSTEM : DynamicTheme.LIGHT);
}
+ public static String getWebxdcStoreUrl(Context context) {
+ return getStringPreference(context, WEBXDC_STORE_URL_PREF, DEFAULT_WEBXDC_STORE_URL);
+ }
+
+ public static void setWebxdcStoreUrl(Context context, String url) {
+ if (url == null || url.trim().isEmpty() || DEFAULT_WEBXDC_STORE_URL.equals(url)) url = null;
+ setStringPreference(context, WEBXDC_STORE_URL_PREF, url);
+ }
+
public static void setPromptedDozeMsgId(Context context, int msg_id) {
setIntegerPreference(context, PROMPTED_DOZE_MSG_ID_PREF, msg_id);
}
diff --git a/src/main/res/values/strings.xml b/src/main/res/values/strings.xml
index a7e06b4bc..1736796fc 100644
--- a/src/main/res/values/strings.xml
+++ b/src/main/res/values/strings.xml
@@ -184,6 +184,8 @@
App
Apps
+ Apps Picker URL
+ If set, it will be used as the apps picker URL instead of the default one
Unknown
Green
diff --git a/src/main/res/xml/preferences_advanced.xml b/src/main/res/xml/preferences_advanced.xml
index ce7c72500..b678b762b 100644
--- a/src/main/res/xml/preferences_advanced.xml
+++ b/src/main/res/xml/preferences_advanced.xml
@@ -26,6 +26,10 @@
android:title="@string/videochat_instance"
android:summary="@string/none"/>
+
+