diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 91b1ab5..9a135ef 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -45,6 +45,14 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="org.efidroid.efidroidmanager.activities.MainActivity" />
+
+
+
diff --git a/app/src/main/java/org/efidroid/efidroidmanager/AppConstants.java b/app/src/main/java/org/efidroid/efidroidmanager/AppConstants.java
index 4d7ff0f..85442bd 100644
--- a/app/src/main/java/org/efidroid/efidroidmanager/AppConstants.java
+++ b/app/src/main/java/org/efidroid/efidroidmanager/AppConstants.java
@@ -1,11 +1,11 @@
package org.efidroid.efidroidmanager;
import android.content.Context;
+import android.content.SharedPreferences;
import android.os.Build;
-import android.text.TextUtils;
+import android.preference.PreferenceManager;
import org.efidroid.efidroidmanager.models.DeviceInfo;
-import org.efidroid.efidroidmanager.types.SystemPropertiesProxy;
public final class AppConstants {
private static final String URL_EFIDROID_SERVER = "https://raw.githubusercontent.com/efidroid";
@@ -19,11 +19,8 @@ public final class AppConstants {
public static final String PATH_INTERNAL_FSTAB = "fstab.multiboot";
private static String getUrlServer(Context context) {
- String url = SystemPropertiesProxy.get(context, "efidroid.server_url", "");
- if (TextUtils.isEmpty(url))
- url = URL_EFIDROID_SERVER;
-
- return url;
+ SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext());
+ return sp.getBoolean("use_custom_ota_server", false) ? sp.getString("ota_server_url", "") : URL_EFIDROID_SERVER;
}
public static String getUrlOta(Context context) {
diff --git a/app/src/main/java/org/efidroid/efidroidmanager/activities/MainActivity.java b/app/src/main/java/org/efidroid/efidroidmanager/activities/MainActivity.java
index 418dfd6..066bbd4 100644
--- a/app/src/main/java/org/efidroid/efidroidmanager/activities/MainActivity.java
+++ b/app/src/main/java/org/efidroid/efidroidmanager/activities/MainActivity.java
@@ -485,6 +485,14 @@ public void onRefresh() {
} else {
fragment = new InstallFragment();
}
+ } else if (id == R.id.nav_settings) {
+ Intent i = new Intent(this, PrefActivity.class);
+ startActivity(i);
+
+ // close drawer
+ mDrawer.closeDrawer(GravityCompat.START);
+
+ return true;
}
mActiveMenuItemId = item.getItemId();
diff --git a/app/src/main/java/org/efidroid/efidroidmanager/activities/PrefActivity.java b/app/src/main/java/org/efidroid/efidroidmanager/activities/PrefActivity.java
new file mode 100644
index 0000000..041c9e8
--- /dev/null
+++ b/app/src/main/java/org/efidroid/efidroidmanager/activities/PrefActivity.java
@@ -0,0 +1,50 @@
+package org.efidroid.efidroidmanager.activities;
+
+import android.app.Activity;
+import android.app.AlertDialog;
+import android.os.Bundle;
+import android.preference.EditTextPreference;
+import android.preference.Preference;
+import android.preference.PreferenceActivity;
+
+import org.efidroid.efidroidmanager.R;
+
+import java.net.MalformedURLException;
+import java.net.URL;
+
+public class PrefActivity extends PreferenceActivity {
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.pref);
+ final Activity callingActivity = this;
+
+ EditTextPreference otaServerUrl = (EditTextPreference) getPreferenceScreen().findPreference("ota_server_url");
+ otaServerUrl.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ Boolean isValidUrl = true;
+ if (!validateHTTP_HTTPS_URI(newValue.toString())) {
+ final AlertDialog.Builder builder = new AlertDialog.Builder(callingActivity);
+ builder.setTitle(R.string.invalid_input);
+ builder.setMessage(R.string.invalid_url_message);
+ builder.setPositiveButton(android.R.string.ok, null);
+ builder.show();
+ isValidUrl = false;
+ }
+ return isValidUrl;
+ }
+ });
+ }
+
+ // valid url must have http or https schemes and non-empty host
+ private static boolean validateHTTP_HTTPS_URI(String uri) {
+ final URL url;
+ try {
+ url = new URL(uri);
+ } catch (MalformedURLException e) {
+ return false;
+ }
+ return ("http".equals(url.getProtocol()) || "https".equals(url.getProtocol())) && !"".equals(url.getHost());
+ }
+}
diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml
index d17e7e1..a3effe3 100644
--- a/app/src/main/res/menu/activity_main_drawer.xml
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -33,6 +33,10 @@
android:id="@+id/nav_install"
android:icon="@drawable/ic_menu_settings"
android:title="@string/install_update" />
+
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index fe20d8e..4afec30 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -125,4 +125,9 @@
Error creating system %1$s
Error updating system %1$s
Encrypted devices are not supported
+ Use custom OTA server
+ Address of OTA server
+ OTA Settings
+ Invalid Input
+ Server URL must have \"http\" or \"https\" scheme and contain non-empty hostname
diff --git a/app/src/main/res/xml/pref.xml b/app/src/main/res/xml/pref.xml
new file mode 100644
index 0000000..70a94f0
--- /dev/null
+++ b/app/src/main/res/xml/pref.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file