From 70cedc2020d4e5071278111f17b934aca73fda64 Mon Sep 17 00:00:00 2001 From: Maxime Graulich <maxime.graulich@gmail.com> Date: Mon, 2 Sep 2013 14:07:39 +0000 Subject: [PATCH] Android: Open the link associate to a model in a browser --- .../src/org/geuz/onelab/MainActivity.java | 1 - .../Android/src/org/geuz/onelab/Model.java | 8 +++ .../org/geuz/onelab/ModelArrayAdapter.java | 13 +++-- .../src/org/geuz/onelab/ModelList.java | 53 +++++++++++++++++-- .../src/org/geuz/onelab/OptionsFragment.java | 2 +- 5 files changed, 64 insertions(+), 13 deletions(-) diff --git a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java index 79e945052c..7b93f7e320 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/MainActivity.java @@ -50,7 +50,6 @@ public class MainActivity extends Activity implements OptionsDisplayFragment.OnO _gmsh.load(tmp); } else if(extras != null) { - //extras.getInt("model"); //extras.getString("name"); String tmp = extras.getString("file"); _gmsh.load(tmp); diff --git a/contrib/mobile/Android/src/org/geuz/onelab/Model.java b/contrib/mobile/Android/src/org/geuz/onelab/Model.java index 168936c19f..8b1b1bc39d 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/Model.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/Model.java @@ -1,6 +1,7 @@ package org.geuz.onelab; import java.io.File; +import android.net.Uri; import android.graphics.Bitmap; import android.graphics.BitmapFactory; @@ -10,6 +11,7 @@ class Model { private String _name, _summary; private File _file; private Bitmap _bitmap; + private Uri _url; public Model(String name, String summary, File file){ _name = name; @@ -28,7 +30,13 @@ class Model { public Bitmap getBitmap() { return _bitmap; } + public Uri getUrl() { + return _url; + } public void setBitmap(File f) { _bitmap = BitmapFactory.decodeFile(f.toString()); } + public void setUrl(Uri url) { + _url = url; + } } diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ModelArrayAdapter.java b/contrib/mobile/Android/src/org/geuz/onelab/ModelArrayAdapter.java index 3e8f361595..3bc86f88d9 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/ModelArrayAdapter.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelArrayAdapter.java @@ -30,17 +30,16 @@ public class ModelArrayAdapter extends ArrayAdapter<Model> { } @Override - public View getView(int position, View convertView, ViewGroup parent) { - LayoutInflater inflater = (LayoutInflater) parent.getContext() - .getSystemService(Context.LAYOUT_INFLATER_SERVICE); - + public View getView(int position, View convertView, final ViewGroup parent) { + LayoutInflater inflater = (LayoutInflater) parent.getContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE); + final Model m = _models.get(position); View rowView = inflater.inflate(R.layout.model, parent, false); TextView title = (TextView) rowView.findViewById(R.id.title); TextView description = (TextView) rowView.findViewById(R.id.description); ImageView icon = (ImageView) rowView.findViewById(R.id.icon); - if(_models.get(position).getName() != null) title.setText(_models.get(position).getName()); - if(_models.get(position).getSummary() != null) description.setText(_models.get(position).getSummary()); - if(_models.get(position).getBitmap() != null) icon.setImageBitmap(_models.get(position).getBitmap()); + if(m.getName() != null) title.setText(m.getName()); + if(m.getSummary() != null) description.setText(m.getSummary()); + if(m.getBitmap() != null) icon.setImageBitmap(m.getBitmap()); else icon.setImageResource(R.drawable.ic_launcher); icon.setPadding(10, 10, 10, 10); diff --git a/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java b/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java index bb7ed63338..213a6bdfc3 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/ModelList.java @@ -16,6 +16,7 @@ import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; import android.graphics.Color; +import android.net.Uri; import android.os.Bundle; import android.os.Environment; import android.util.Xml; @@ -25,7 +26,6 @@ import android.widget.AdapterView; import android.widget.Button; import android.widget.LinearLayout; import android.widget.ListView; -import android.widget.AdapterView.OnItemClickListener; public class ModelList extends Activity { @@ -58,18 +58,55 @@ public class ModelList extends Activity { }); //TODO list.addFooterView(loadSD); list.setAdapter(_modelArrayAdapter); - list.setOnItemClickListener(new OnItemClickListener() { + list.setOnItemClickListener(new AdapterView.OnItemClickListener() { public void onItemClick(AdapterView<?> parent, View view, int position, long id) { Model m = _modelArrayAdapter.getModel(position); Intent intent = new Intent(ModelList.this, MainActivity.class); - intent.putExtra("model", position); - intent.putExtra("file", m.getFile()); + intent.putExtra("file", m.getFile().toString()); intent.putExtra("name", m.getName()); startActivity(intent); } }); + list.setOnItemLongClickListener(new AdapterView.OnItemLongClickListener() { + + public boolean onItemLongClick(AdapterView<?> parent, View view, + int position, long id) { + final Model m = _modelArrayAdapter.getModel(position); + CharSequence[] actions; + if(m.getUrl() != null) { + actions = new CharSequence[2]; + actions[0] = "Open this model"; + actions[1] = "More informations"; + } + else { + actions = new CharSequence[1]; + actions[0] = "Open this model"; + } + AlertDialog.Builder builder = new AlertDialog.Builder(parent.getContext()); + builder.setTitle(m.getName()); + builder.setItems(actions, new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int position) { + switch (position) { + case 1: + Intent browserIntent = new Intent(Intent.ACTION_VIEW, m.getUrl()); + startActivity(browserIntent); + break; + default: + Intent intent = new Intent(ModelList.this, MainActivity.class); + intent.putExtra("file", m.getFile().toString()); + intent.putExtra("name", m.getName()); + startActivity(intent); + break; + } + } + }); + AlertDialog alert = builder.create(); + alert.show(); + return true; + } + }); layout.addView(list); this.setContentView(layout); layout.setPadding(15, 10, 10, 5); @@ -112,6 +149,7 @@ public class ModelList extends Activity { String summary = null; String file = null; String bitmap = null; + String url = null; while (parser.next() != XmlPullParser.END_TAG) { if (parser.getEventType() != XmlPullParser.START_TAG) continue; String name = parser.getName(); @@ -140,12 +178,19 @@ public class ModelList extends Activity { parser.nextTag(); } } + else if(name.equals("url")) { + if (parser.next() == XmlPullParser.TEXT) { + url = parser.getText(); + parser.nextTag(); + } + } else { skipTag(parser); } } Model newModel = new Model(title, summary, new File(dir+"/"+file)); if(bitmap != null) newModel.setBitmap(new File(dir+"/"+bitmap)); + if(url != null) newModel.setUrl(Uri.parse(url)); _modelArrayAdapter.add(newModel); } private void skipTag(XmlPullParser parser) throws XmlPullParserException, IOException { diff --git a/contrib/mobile/Android/src/org/geuz/onelab/OptionsFragment.java b/contrib/mobile/Android/src/org/geuz/onelab/OptionsFragment.java index f3aca46baa..496f3dbb9e 100644 --- a/contrib/mobile/Android/src/org/geuz/onelab/OptionsFragment.java +++ b/contrib/mobile/Android/src/org/geuz/onelab/OptionsFragment.java @@ -80,7 +80,7 @@ public class OptionsFragment extends Fragment{ }); return rootView; } - + @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); -- GitLab