X-Git-Url: https://git.mdrn.pl/wl-mobile.git/blobdiff_plain/5d980cab6eb143360d93f85812f4250c7a3f4dc9..refs/heads/anwajler:/src/pl/org/nowoczesnapolska/Catalogue.java diff --git a/src/pl/org/nowoczesnapolska/Catalogue.java b/src/pl/org/nowoczesnapolska/Catalogue.java index cbf329b..a6a72b8 100644 --- a/src/pl/org/nowoczesnapolska/Catalogue.java +++ b/src/pl/org/nowoczesnapolska/Catalogue.java @@ -1,11 +1,36 @@ package pl.org.nowoczesnapolska; +import java.io.BufferedInputStream; +import java.io.BufferedReader; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; +import java.util.ArrayList; +import java.util.HashMap; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + import android.app.Activity; +import android.content.ContentValues; import android.content.Context; import android.content.Intent; +import android.content.res.AssetFileDescriptor; +import android.content.res.AssetManager; +import android.database.Cursor; +import android.database.sqlite.SQLiteDatabase; +import android.graphics.Paint.Join; +import android.opengl.Visibility; import android.os.Bundle; +import android.os.ParcelFileDescriptor; import android.text.Editable; import android.text.TextWatcher; +import android.util.Log; import android.view.Menu; import android.view.MenuItem; import android.view.View; @@ -19,93 +44,85 @@ public class Catalogue extends Activity { static final private int MENU_SIGNIN = Menu.FIRST; static final private int MENU_SETTINGS = Menu.FIRST+1; static final private int MENU_ABOUT = Menu.FIRST+2; - - static final String[] AUTHORS = new String[] { - "Władysław Anczyc", - "Hans Christian Andersen", - "Adam Asnyk", - "Autor nieznany", - "Honoré de Balzac", - "Michał Bałucki", - "Charles Baudelaire", - "Władysław Bełza", - "Miłosz Biedrzycki", - "August Bielowski", - "George Gordon Byron", - "Joseph Conrad", - "Anton Czechow", - "Józef Czechowicz", - "Daniel Defoe", - "Casimir Delavigne", - "Antonina Domańska", - "Alojzy Feliński", - "Aleksander Fredro", - "Johann Wolfgang von Goethe", - "Bruno Jasieński", - "Franciszek Karpiński", - "Jan Kasprowicz", - "Rudyard Kipling", - "Jan Kochanowski", - "Maria Konopnicka", - "Franciszek Kowalski", - "Ignacy Krasicki", - "Zygmunt Krasiński", - "Teofil Lenartowicz", - "Bolesław Leśmian", - "Adam Mickiewicz", - "Molière", - "Jan Andrzej Morsztyn", - "Julian Ursyn Niemcewicz", - "Cyprian Kamil Norwid", - "Artur Oppman", - "Eliza Orzeszkowa", - "Edgar Allan Poe", - "Wincenty Pol", - "Ludwik Ksawery Pomian-Łubiński", - "Bolesław Prus", - "Kazimierz Przerwa-Tetmajer", - "Władysław Stanisław Reymont", - "Mikołaj Sęp Szarzyński", - "William Shakespeare", - "Henryk Sienkiewicz", - "Juliusz Słowacki", - "Sofokles", - "Rajnold Suchodolski", - "Wacław Święcicki", - "Władysław Tarnowski", - "Stanisław Ignacy Witkiewicz", - "Stefan Witwicki", - "Józef Wybicki", - "Stanisław Wyspiański", - "Gabriela Zapolska", - "Stefan Żeromski" - }; + SQLiteDatabase db; + public ArrayList searchList; Context ctx; + public static ListView lv; + public CatalogueAdapter adapter; + int first = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.catalogue); ctx = this; - final ListView lv = (ListView) findViewById(R.id.catalogueListView); + lv = (ListView) findViewById(R.id.catalogueListView); final EditText search = (EditText) findViewById(R.id.catalogueSearch); + final EditText prompt = (EditText) findViewById(R.id.cataloguePrompt); - lv.setAdapter(new ArrayAdapter(this, R.layout.catalogue_list_item, AUTHORS)); + CatalogueDbHelper dbHelper = new CatalogueDbHelper(ctx); + db = dbHelper.getWritableDatabase(); + searchList = new ArrayList(); lv.setTextFilterEnabled(true); lv.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - startActivity(new Intent(ctx, CatalogueItem.class)); + Log.d("selected id", id+""); + Log.d("selected id", this+""); + Log.d("selected type", searchList.get(position).getType()+""); + Log.d("selected name", searchList.get(position).getName()+""); + Intent selectedIntent = new Intent(ctx, CatalogueItem.class); + selectedIntent.putExtra("id", id); + selectedIntent.putExtra("type", searchList.get(position).getType()); + startActivity(selectedIntent); } }); - + search.addTextChangedListener(new TextWatcher() { - @Override public void onTextChanged(CharSequence s, int start, int before, int count) { - lv.setFilterText(s.toString()); + if(s.toString().length() > 1) { + lv.setVisibility(0); // == VISIBLE + + String[] filter = new String[2]; + String term = s.toString()+"%"; + Log.d("char str:",term); + filter[0] = term; + filter[1] = term; + Cursor cur = db.rawQuery("select name, id, type from (select title as name, id, 0 as type from books where title like '"+term+"%' UNION ALL select name, id, 1 as type from tags where name like '"+term+"%') order by name", null); + cur.moveToFirst(); + int i = 0; + searchList.clear(); + while(i < cur.getCount()){ + try { + Log.d("query result", cur.getString(0)); + searchList.add(new CatalogueEntry(cur.getInt(2), cur.getInt(1), cur.getString(0))); + } catch (Exception e) { + Log.d("query result count", cur.getColumnCount() + " " + cur.getPosition()); + } + cur.moveToNext(); + i++; + Log.d("test listy ctx", ctx.toString()); + Log.d("test listy r.", R.layout.catalogue_list_item+""); + Log.d("test listy list", searchList.size() + ""); + Log.d("test listy lv", lv.toString()); + } + if(searchList.size() > 0) { + if(first == 1) { + adapter = new CatalogueAdapter(ctx, R.layout.catalogue_row, searchList); + lv.setAdapter(adapter); + first = 0; + } + adapter.notifyDataSetChanged(); + } + } else { + searchList.clear(); + if(adapter != null) { + adapter.notifyDataSetChanged(); + } + } } @Override @@ -121,6 +138,81 @@ public class Catalogue extends Activity { } }); + + + Cursor c = db.rawQuery("select id from tags limit 2", null);// do zmiany + Log.d("db", c.getCount()+""); + + /* this is memory consuming and should be optimized. it is first-run only, though */ + if(c.getCount() == 0) { + AssetManager assetManager = getAssets(); + try { + Log.d("assets", assetManager.list("/assets").length+""); + for(String s: assetManager.list("/assets")){ + Log.d("assets", s); + } + InputStream is = assetManager.open("catalogue.jpg", AssetManager.ACCESS_BUFFER); + String catalogueString = readInputStreamAsString(is); + JSONObject jObject = null; + try { + //new JSONOBj + jObject = new JSONObject(catalogueString); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + Log.d("assets", catalogueString.length()+""); + JSONObject added = jObject.getJSONObject("added"); + JSONArray books = added.getJSONArray("books"); // books + JSONArray tags = added.getJSONArray("tags"); // tags + + Log.d("json array books length", books.length()+""); + Log.d("json array tags length", tags.length()+""); + Log.d("json array length", added.length()+""); + + for(int i = 0; i < books.length(); i++){ + JSONObject book = books.getJSONObject(i); + Log.d("json-test", book.get("id").toString() + book.get("title").toString() + book.get("slug").toString()); + // JSONException + ContentValues bookMap = new ContentValues(); + bookMap.put("id", book.get("id").toString()); + bookMap.put("title", book.get("title").toString()); + bookMap.put("slug", book.get("slug").toString()); + bookMap.put("epub", "epub"); + bookMap.put("html", "html"); + bookMap.put("mp3", "mp3"); + + long id = db.insert("books", null, bookMap); + Log.d("sql", id+""); + } + + for(int i = 0; i < tags.length(); i++){ + JSONObject tag = tags.getJSONObject(i); + Log.d("json-test", tag.get("id").toString() + tag.get("name").toString() + tag.get("slug").toString()+ tag.get("sort_key").toString()+ tag.get("category").toString()); + // JSONException + + //String bookData[] = {book.get("id").toString(), book.get("title").toString(), book.get("slug").toString()}; + ContentValues tagMap = new ContentValues(); + tagMap.put("id", tag.get("id").toString()); + tagMap.put("name", tag.get("name").toString()); + tagMap.put("slug", tag.get("slug").toString()); + tagMap.put("sort_key", tag.get("sort_key").toString()); + tagMap.put("category", tag.get("category").toString()); + tagMap.put("description", "description"); + long id = db.insert("tags", null, tagMap); + Log.d("sql", id+""); + } + + } catch (IOException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } catch (JSONException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + } + } @Override @@ -178,5 +270,29 @@ public class Catalogue extends Activity { return false; } + public static String readInputStreamAsString(InputStream is) + throws IOException { + + if (is != null) { + Writer writer = new StringWriter(); + + /* be careful if tempted to change buffer size, OutOfMemory exception is watching you */ + char[] buffer = new char[1024]; + try { + Reader reader = new BufferedReader( + new InputStreamReader(is, "UTF-8")); + int n; + while ((n = reader.read(buffer)) != -1) { + writer.write(buffer, 0, n); + } + } finally { + is.close(); + } + return writer.toString(); + } else { + return ""; + } + } + } \ No newline at end of file