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