Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 8 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,14 @@
android:name="android.support.PARENT_ACTIVITY"
android:value="org.efidroid.efidroidmanager.activities.MainActivity" />
</activity>
<activity
android:name=".activities.PrefActivity"
android:label="@string/action_settings"
android:theme="@style/AppTheme.ActionMode" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value="org.efidroid.efidroidmanager.activities.MainActivity" />
</activity>
</application>

</manifest>
11 changes: 4 additions & 7 deletions app/src/main/java/org/efidroid/efidroidmanager/AppConstants.java
Original file line number Diff line number Diff line change
@@ -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";
Expand All @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
Original file line number Diff line number Diff line change
@@ -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());
}
}
4 changes: 4 additions & 0 deletions app/src/main/res/menu/activity_main_drawer.xml
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,10 @@
android:id="@+id/nav_install"
android:icon="@drawable/ic_menu_settings"
android:title="@string/install_update" />
<item
android:id="@+id/nav_settings"
android:icon="@drawable/ic_menu_settings"
android:title="@string/action_settings" />
</group>

<group android:id="@+id/nav_group_communicate">
Expand Down
5 changes: 5 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -125,4 +125,9 @@
<string name="error_creating_system">Error creating system %1$s</string>
<string name="error_updating_system">Error updating system %1$s</string>
<string name="device_is_encrypted">Encrypted devices are not supported</string>
<string name="use_custom_ota_server">Use custom OTA server</string>
<string name="ota_server_url">Address of OTA server</string>
<string name="ota_settings">OTA Settings</string>
<string name="invalid_input">Invalid Input</string>
<string name="invalid_url_message">Server URL must have \"http\" or \"https\" scheme and contain non-empty hostname</string>
</resources>
20 changes: 20 additions & 0 deletions app/src/main/res/xml/pref.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
android:title="@string/app_name">
<PreferenceCategory
android:title="@string/ota_settings"
android:key="ota_settings">
<SwitchPreference
android:defaultValue="false"
android:title="@string/use_custom_ota_server"
android:key="use_custom_ota_server" />
<EditTextPreference
android:dependency="use_custom_ota_server"
android:defaultValue="http://hostname/"
android:selectAllOnFocus="false"
android:singleLine="true"
android:title="@string/ota_server_url"
android:key="ota_server_url"
android:inputType="textFilter" />
</PreferenceCategory>
</PreferenceScreen>