split layers in 2 different dialogs

This commit is contained in:
Philipp Schaefer 2013-05-20 11:34:40 +02:00
parent 49ba6eced6
commit 83dbdf4e18

View File

@ -24,11 +24,11 @@ public class IITC_JSInterface {
// context of main activity // context of main activity
Context context; Context context;
HashMap<String, String> layer_ids; HashMap<String, String> layer_ids;
boolean[] active_array; boolean[] overlay_is_active;
String[] all_layers; int active_base_layer;
String[] overlay_layers, base_layers;
int num_base_layers; int num_base_layers;
int num_overlay_layers; int num_overlay_layers;
int active_base_layer;
IITC_JSInterface(Context c) { IITC_JSInterface(Context c) {
layer_ids = new HashMap<String, String>(); layer_ids = new HashMap<String, String>();
@ -65,26 +65,27 @@ public class IITC_JSInterface {
} }
@JavascriptInterface @JavascriptInterface
public void setLayers(String base_layers, String overlay_layers) { public void setLayers(String base_layer, String overlay_layer) {
JSONArray base_layersJSON = null; JSONArray base_layersJSON = null;
JSONArray overlay_layersJSON = null; JSONArray overlay_layersJSON = null;
try { try {
base_layersJSON = new JSONArray(base_layers); base_layersJSON = new JSONArray(base_layer);
overlay_layersJSON = new JSONArray(overlay_layers); overlay_layersJSON = new JSONArray(overlay_layer);
} catch (JSONException e) { } catch (JSONException e) {
e.printStackTrace(); e.printStackTrace();
} }
// get length and initialize arrays
num_base_layers = base_layersJSON.length(); num_base_layers = base_layersJSON.length();
num_overlay_layers = overlay_layersJSON.length(); num_overlay_layers = overlay_layersJSON.length();
int total_lenght = num_base_layers + num_overlay_layers; overlay_is_active = new boolean[num_overlay_layers];
active_array = new boolean[total_lenght]; overlay_layers = new String[num_overlay_layers];
all_layers = new String[total_lenght]; base_layers = new String[num_base_layers];
layer_ids.clear(); layer_ids.clear();
// --------------- overlay layers ------------------------ // --------------- overlay layers ------------------------
for (int i = 0; i < overlay_layersJSON.length(); ++i) { for (int i = 0; i < num_overlay_layers; ++i) {
try { try {
String layer = overlay_layersJSON.getString(i); String layer = overlay_layersJSON.getString(i);
layer = layer.replace("{", ""); layer = layer.replace("{", "");
@ -101,8 +102,8 @@ public class IITC_JSInterface {
} }
name = name.replace("\"", ""); name = name.replace("\"", "");
layer_ids.put(name, id); layer_ids.put(name, id);
all_layers[i] = name; this.overlay_layers[i] = name;
active_array[i] = isActive; this.overlay_is_active[i] = isActive;
} catch (JSONException e) { } catch (JSONException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
@ -110,7 +111,7 @@ public class IITC_JSInterface {
} }
// --------------- base layers ------------------------ // --------------- base layers ------------------------
for (int i = 0; i < base_layersJSON.length(); ++i) { for (int i = 0; i < num_base_layers; ++i) {
try { try {
String layer = base_layersJSON.getString(i); String layer = base_layersJSON.getString(i);
layer = layer.replace("{", ""); layer = layer.replace("{", "");
@ -127,41 +128,78 @@ public class IITC_JSInterface {
} }
name = name.replace("\"", ""); name = name.replace("\"", "");
layer_ids.put(name, id); layer_ids.put(name, id);
all_layers[i + num_overlay_layers] = name; this.base_layers[i] = name;
active_array[i + num_overlay_layers] = isActive; if (isActive) active_base_layer = i;
if (isActive) active_base_layer = i + num_overlay_layers;
} catch (JSONException e) { } catch (JSONException e) {
// TODO Auto-generated catch block // TODO Auto-generated catch block
e.printStackTrace(); e.printStackTrace();
} }
} }
// show overlay layers by default
show_multi_selection();
}
// show all overlay layers in a multi selection list dialog
private void show_multi_selection() {
// build the layer chooser dialog // build the layer chooser dialog
AlertDialog.Builder d = new AlertDialog.Builder(context); AlertDialog.Builder d_m = new AlertDialog.Builder(context);
OnMultiChoiceClickListener m_listener = new OnMultiChoiceClickListener() { OnMultiChoiceClickListener m_listener = new OnMultiChoiceClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which, boolean isChecked) { public void onClick(DialogInterface dialog, int which, boolean isChecked) {
// activate clicked layer // activate clicked layer
((IITC_Mobile) context).getWebView().loadUrl("javascript: window.layerChooser.showLayer(" ((IITC_Mobile) context).getWebView().loadUrl("javascript: window.layerChooser.showLayer("
+ layer_ids.get(all_layers[which]) + "," + layer_ids.get(overlay_layers[which]) + ","
+ active_array[which] + ");"); + overlay_is_active[which] + ");");
// disable old base layer...we can only have one active base layer
if (which >= num_overlay_layers) {
active_array[active_base_layer] = false;
((AlertDialog) dialog).getListView().setItemChecked(active_base_layer, false);
active_base_layer = which;
}
} }
}; };
d.setMultiChoiceItems(all_layers, active_array , m_listener);
d.setPositiveButton("Close", new OnClickListener() { d_m.setMultiChoiceItems(overlay_layers, overlay_is_active , m_listener);
d_m.setPositiveButton("Base Layers", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
show_single_selection();
dialog.cancel();
}
});
d_m.setNegativeButton("Close", new OnClickListener() {
@Override @Override
public void onClick(DialogInterface dialog, int which) { public void onClick(DialogInterface dialog, int which) {
dialog.cancel(); dialog.cancel();
} }
}); });
d.show(); d_m.setTitle("Overlay Layers");
d_m.show();
}
// show all base layers in a single selection list dialog
private void show_single_selection() {
OnClickListener s_listener = new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// activate clicked layer
((IITC_Mobile) context).getWebView().loadUrl("javascript: window.layerChooser.showLayer("
+ layer_ids.get(base_layers[which]) + ","
+ true + ");");
active_base_layer = which;
}
};
AlertDialog.Builder d_s = new AlertDialog.Builder(context);
d_s.setSingleChoiceItems(base_layers, active_base_layer, s_listener);
d_s.setPositiveButton("Overlay Layers", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
show_multi_selection();
dialog.cancel();
}
});
d_s.setNegativeButton("Close", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
d_s.setTitle("Base Layers");
d_s.show();
} }
} }