summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorParménides GV <parmegv@sdf.org>2013-02-11 20:28:59 +0100
committerParménides GV <parmegv@sdf.org>2013-02-11 20:28:59 +0100
commit162afa5bfa6485f3aacb3f60e9c92fa0c3bfa7a7 (patch)
treec9fabab994e1e51e8ec90bc8b2c78cc55d219e3e
parent8db161017f55a710bd91aa14fe9c1b24d4efdeab (diff)
Gets provider.json from custom url (assuming the file is at the root of
the website, just as bitmask.net/provider.json), and writes it to a file in ~/leap_android. Next steps: parse that file and download eip-service and cert.
-rw-r--r--res/layout/new_provider_dialog.xml18
-rwxr-xr-xres/values/strings.xml1
-rw-r--r--src/se/leap/leapclient/ConfigHelper.java32
-rw-r--r--src/se/leap/leapclient/ConfigurationWizard.java15
-rw-r--r--src/se/leap/leapclient/NewProviderDialog.java72
-rw-r--r--src/se/leap/leapclient/ProviderAPI.java21
6 files changed, 141 insertions, 18 deletions
diff --git a/res/layout/new_provider_dialog.xml b/res/layout/new_provider_dialog.xml
new file mode 100644
index 00000000..28122867
--- /dev/null
+++ b/res/layout/new_provider_dialog.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:orientation="vertical" >
+
+ <EditText
+ android:id="@+id/new_provider_url"
+ android:inputType="textUri"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginTop="16dp"
+ android:layout_marginLeft="4dp"
+ android:layout_marginRight="4dp"
+ android:layout_marginBottom="4dp"
+ android:hint="@string/new_provider_uri" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ca73c0da..2deb23fa 100755
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -264,5 +264,6 @@
<string name="new_provider_button">Add new Provider</string>
<string name="introduce_new_provider">Introduce new provider</string>
<string name="save">Save</string>
+ <string name="new_provider_uri">New provider\'s main URL</string>
</resources> \ No newline at end of file
diff --git a/src/se/leap/leapclient/ConfigHelper.java b/src/se/leap/leapclient/ConfigHelper.java
index eded2504..c724a31c 100644
--- a/src/se/leap/leapclient/ConfigHelper.java
+++ b/src/se/leap/leapclient/ConfigHelper.java
@@ -1,18 +1,28 @@
package se.leap.leapclient;
+import java.io.BufferedWriter;
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+
import org.json.JSONException;
import org.json.JSONObject;
import android.content.SharedPreferences;
+import android.os.Environment;
+import android.util.Log;
public class ConfigHelper {
final static String downloadJsonFilesBundleExtra = "downloadJSONFiles";
+ final static String downloadNewProviderDotJSON = "downloadNewProviderDotJSON";
final static String provider_key = "provider";
final static String cert_key = "cert";
final static String eip_service_key = "eip";
public static final String PREFERENCES_KEY = "LEAPPreferences";
+ public static final String user_directory = "leap_android";
+ public static String provider_key_url = "provider_main_url";
static void saveSharedPref(String shared_preferences_key, JSONObject content) {
@@ -27,9 +37,29 @@ public class ConfigHelper {
+ ConfigurationWizard.shared_preferences.getString(
shared_preferences_key, "Default"));
}
-
+
static void rescueJSONException(JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
+
+ static void saveFile(String filename, String content) {
+ File root = Environment.getExternalStorageDirectory();
+ File outDir = new File(root.getAbsolutePath() + File.separator + user_directory);
+ if (!outDir.isDirectory()) {
+ outDir.mkdir();
+ }
+ try {
+ if (!outDir.isDirectory()) {
+ throw new IOException(
+ "Unable to create directory " + user_directory + ". Maybe the SD card is mounted?");
+ }
+ File outputFile = new File(outDir, filename);
+ BufferedWriter writer = new BufferedWriter(new FileWriter(outputFile));
+ writer.write(content);
+ writer.close();
+ } catch (IOException e) {
+ Log.w("leap_android", e.getMessage(), e);
+ }
+ }
}
diff --git a/src/se/leap/leapclient/ConfigurationWizard.java b/src/se/leap/leapclient/ConfigurationWizard.java
index 86de817c..39ada310 100644
--- a/src/se/leap/leapclient/ConfigurationWizard.java
+++ b/src/se/leap/leapclient/ConfigurationWizard.java
@@ -8,6 +8,7 @@ import java.util.Scanner;
import org.json.JSONException;
import org.json.JSONObject;
+import se.leap.leapclient.NewProviderDialog.NewProviderDialogInterface;
import se.leap.leapclient.ProviderListContent.ProviderItem;
import android.app.Activity;
import android.app.DialogFragment;
@@ -38,7 +39,7 @@ import android.view.View;
* to listen for item selections.
*/
public class ConfigurationWizard extends Activity
- implements ProviderListFragment.Callbacks {
+ implements ProviderListFragment.Callbacks, NewProviderDialog.NewProviderDialogInterface{
/**
* Whether or not the activity is in two-pane mode, i.e. running on a tablet
@@ -170,4 +171,16 @@ public class ConfigurationWizard extends Activity
DialogFragment newFragment = NewProviderDialog.newInstance();
newFragment.show(fragment_transaction, "newProviderDialog");
}
+
+ @Override
+ public void saveProvider(String provider_url) {
+ Intent provider_API_command = new Intent(this, ProviderAPI.class);
+
+ Bundle method_and_parameters = new Bundle();
+ method_and_parameters.putString(ConfigHelper.provider_key_url, provider_url);
+
+ provider_API_command.putExtra(ConfigHelper.downloadNewProviderDotJSON, method_and_parameters);
+
+ startService(provider_API_command);
+ }
}
diff --git a/src/se/leap/leapclient/NewProviderDialog.java b/src/se/leap/leapclient/NewProviderDialog.java
index fd6d4619..09e7453a 100644
--- a/src/se/leap/leapclient/NewProviderDialog.java
+++ b/src/se/leap/leapclient/NewProviderDialog.java
@@ -1,32 +1,74 @@
package se.leap.leapclient;
+import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
import android.app.DialogFragment;
import android.content.DialogInterface;
import android.os.Bundle;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.webkit.WebView.FindListener;
+import android.widget.EditText;
+import android.widget.Toast;
public class NewProviderDialog extends DialogFragment {
- public Dialog onCreateDialog(Bundle savedInstanceState) {
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
- builder.setMessage(R.string.introduce_new_provider)
- .setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // Save provider
- }
- })
- .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- dialog.cancel();
- }
- });
- // Create the AlertDialog object and return it
- return builder.create();
+
+ public interface NewProviderDialogInterface {
+ public void saveProvider(String url_provider);
}
+ NewProviderDialogInterface interface_with_ConfigurationWizard;
+
public static DialogFragment newInstance() {
NewProviderDialog dialog_fragment = new NewProviderDialog();
return dialog_fragment;
}
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+ // Verify that the host activity implements the callback interface
+ try {
+ // Instantiate the NoticeDialogListener so we can send events to the host
+ interface_with_ConfigurationWizard = (NewProviderDialogInterface) activity;
+ } catch (ClassCastException e) {
+ // The activity doesn't implement the interface, throw exception
+ throw new ClassCastException(activity.toString()
+ + " must implement NoticeDialogListener");
+ }
+ }
+ public Dialog onCreateDialog(Bundle savedInstanceState) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ LayoutInflater inflater = getActivity().getLayoutInflater();
+ View new_provider_dialog_view = inflater.inflate(R.layout.new_provider_dialog, null);
+ final EditText url_input_field = (EditText)new_provider_dialog_view.findViewById(R.id.new_provider_url);
+ builder.setView(new_provider_dialog_view)
+ .setMessage(R.string.introduce_new_provider)
+ .setPositiveButton(R.string.save, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ String entered_url = url_input_field.getText().toString().trim();
+ if(validURL(entered_url)) {
+ interface_with_ConfigurationWizard.saveProvider(entered_url);
+ Toast.makeText(getActivity().getApplicationContext(), "Valid URL", Toast.LENGTH_LONG).show();
+ } else {
+ url_input_field.setText("");
+ Toast.makeText(getActivity().getApplicationContext(), "Not valid URL", Toast.LENGTH_LONG).show();
+ }
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
+ // Create the AlertDialog object and return it
+ return builder.create();
+ }
+
+ boolean validURL(String entered_url) {
+ return !entered_url.isEmpty() && entered_url.matches("http[s]?://.+") && !entered_url.replaceFirst("http[s]?://", "").isEmpty();
+ }
}
diff --git a/src/se/leap/leapclient/ProviderAPI.java b/src/se/leap/leapclient/ProviderAPI.java
index 5a8f9572..c21e17a4 100644
--- a/src/se/leap/leapclient/ProviderAPI.java
+++ b/src/se/leap/leapclient/ProviderAPI.java
@@ -27,7 +27,7 @@ public class ProviderAPI extends IntentService {
protected void onHandleIntent(Intent task_for) {
Bundle task;
System.out.println("onHandleIntent called");
- if (!(task = task_for.getBundleExtra(ConfigHelper.downloadJsonFilesBundleExtra)).isEmpty()) {
+ if((task = task_for.getBundleExtra(ConfigHelper.downloadJsonFilesBundleExtra)) != null) {
String cert_url = (String) task.get(ConfigHelper.cert_key);
String eip_service_json_url = (String) task.get(ConfigHelper.eip_service_key);
try {
@@ -45,6 +45,25 @@ public class ProviderAPI extends IntentService {
e.printStackTrace();
}
}
+ else if ((task = task_for.getBundleExtra(ConfigHelper.downloadNewProviderDotJSON)) != null) {
+ String provider_main_url = (String) task.get(ConfigHelper.provider_key_url);
+ String provider_json_url = guessURL(provider_main_url);
+ try {
+ JSONObject provider_json = getJSONFromProvider(provider_json_url);
+ String filename = provider_json_url.replaceFirst("http[s]?://", "").replaceFirst("\\/", "_") + "_provider.json".replaceFirst("__", "_");
+ ConfigHelper.saveFile(filename, provider_json.toString());
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ } catch (JSONException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+ }
+
+ private String guessURL(String provider_main_url) {
+ return provider_main_url + "/provider.json";
}
private String getStringFromProvider(String string_url) throws IOException {