/* //device/apps/Notes/NotesList.java ** ** Copyright 2006, The Android Open Source Project ** ** Licensed under the Apache License, Version 2.0 (the "License"); ** you may not use this file except in compliance with the License. ** You may obtain a copy of the License at ** ** http://www.apache.org/licenses/LICENSE-2.0 ** ** Unless required by applicable law or agreed to in writing, software ** distributed under the License is distributed on an "AS IS" BASIS, ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. ** See the License for the specific language governing permissions and ** limitations under the License. */ package com.android.development; import android.app.ListActivity; import android.content.ContentValues; import android.content.Context; import android.content.Intent; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.net.Uri; import android.os.Bundle; import android.text.Editable; import android.text.Selection; import android.text.format.DateUtils; import android.util.AttributeSet; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.ListView; import android.widget.SimpleAdapter; import android.graphics.Rect; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.GregorianCalendar; import java.util.HashMap; public class EnterURL extends ListActivity { private static final int DATABASE_VERSION = 1; public static class UrlEditText extends EditText { public UrlEditText(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused) { Editable text = getText(); String str = text.toString(); int highlightStart = 0; if (str.startsWith("content://")) { highlightStart = "content://".length(); } Selection.setSelection(text, highlightStart, text.length()); } } } public static class DisplayEditText extends EditText { public DisplayEditText(Context context, AttributeSet attrs) { super(context, attrs); } @Override protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect) { super.onFocusChanged(focused, direction, previouslyFocusedRect); if (focused) { Editable text = getText(); Selection.setSelection(text, 0, text.length()); } } } @Override public View onCreateView(String name, Context context, AttributeSet attrs) { if (name.equals("com.android.development.UrlEditText")) { return new UrlEditText(this, attrs); } if (name.equals("com.android.development.DisplayEditText")) { return new DisplayEditText(this, attrs); } return null; } View.OnClickListener mViewItemAction = new View.OnClickListener () { public void onClick(View v) { String url = mUrlField.getText().toString(); String display = mDisplayField.getText().toString(); viewItem(url, display); } }; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.enter_url); // display mDisplayField = (DisplayEditText)findViewById(R.id.display_edit_text); mDisplayField.setOnClickListener(mViewItemAction); // url mUrlField = (UrlEditText)findViewById(R.id.url_edit_text); mUrlField.setOnClickListener(mViewItemAction); } public void onStop() { super.onStop(); if (mCursor != null) { mCursor.deactivate(); } } public void onResume() { super.onResume(); // show the history loadPrefs(); fillListView(); if (mHistory.size() > 0) { ListView lv = this.getListView(); lv.setSelection(0); lv.requestFocus(); } } public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); menu.add(0, 0, 0, "Clear Bookmarks").setOnMenuItemClickListener(mClearBookmarks); return true; } protected void onListItemClick(ListView l, View v, int position, long id) { HistoryEntry he = mHistory.get(position); viewItem(he.url, he.display); } private final void viewItem(String url, String display) { // -------------- save this in the history ---------------- // look in the history int count = mHistory.size(); int i; for (i=0; i<count; i++) { HistoryEntry he = mHistory.get(i); if (he.url.equals(url) && he.display.equals(display)) { he.updateAccessTime(); mHistory.remove(i); mHistory.add(0, he); break; } } if (i >= count) { // didn't find it, add it first HistoryEntry he = new HistoryEntry(); he.url = url; he.display = display; he.updateAccessTime(); mHistory.add(0, he); } savePrefs(); // -------------- view it --------------------------------- Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url)); intent.setClass(this, DataList.class); intent.putExtra("display", display); startActivity(intent); } MenuItem.OnMenuItemClickListener mClearBookmarks = new MenuItem.OnMenuItemClickListener() { public boolean onMenuItemClick(MenuItem item) { mHistory.clear(); savePrefs(); fillListView(); return true; } }; private void fillListView() { loadPrefs(); ArrayList<HashMap<String, String>> d = new ArrayList<HashMap<String, String>>(); int count = mHistory.size(); for (int i=0; i<count; i++) { HashMap<String, String> m = new HashMap<String, String>(); HistoryEntry he = mHistory.get(i); m.put("title", he.url + " (" + he.display + ")"); d.add(m); } setListAdapter(new SimpleAdapter(this, d, R.layout.url_list, new String[] {"title"}, new int[] {android.R.id.text1})); } SQLiteDatabase openDB() { SQLiteDatabase db = null; db = openOrCreateDatabase("inspector.db", 0, null); int version = db.getVersion(); if (version != DATABASE_VERSION) { db.execSQL("CREATE TABLE History (" + " url TEXT," + " display TEXT," + " lastAccessTime TEXT" + ");"); db.execSQL("CREATE TABLE FieldState (" + " url TEXT," + " display TEXT" + ");"); db.setVersion(DATABASE_VERSION); } return db; } private void loadPrefs() { SQLiteDatabase db = openDB(); Cursor c = db.query("History", new String[] { "url", "display", "lastAccessTime" }, null, null, null, null, "lastAccessTime DESC"); int urlCol = c.getColumnIndex("url"); int accessCol = c.getColumnIndex("lastAccessTime"); int displayCol = c.getColumnIndex("display"); mHistory.clear(); while (c.moveToNext()) { HistoryEntry he = new HistoryEntry(); he.url = c.getString(urlCol); he.display = c.getString(displayCol); he.lastAccessTime = c.getString(accessCol); mHistory.add(he); } c = db.query("FieldState", null, null, null, null, null, null); if (c.moveToNext()) { urlCol = c.getColumnIndex("url"); displayCol = c.getColumnIndex("display"); mUrlField.setText(c.getString(urlCol)); mDisplayField.setText(c.getString(displayCol)); } else { mDisplayField.setText("_id"); mUrlField.setText("content://"); } db.close(); } private void savePrefs() { ContentValues m; HistoryEntry he; SQLiteDatabase db = openDB(); db.execSQL("DELETE FROM History;"); int count = mHistory.size(); for (int i=0; i<count; i++) { m = new ContentValues(); he = mHistory.get(i); m.put("url", he.url); m.put("display", he.display); m.put("lastAccessTime", he.lastAccessTime); db.insert("History", null, m); } db.execSQL("DELETE FROM FieldState"); m = new ContentValues(); m.put("url", mUrlField.getText().toString()); m.put("display", mDisplayField.getText().toString()); db.insert("FieldState", null, m); db.close(); } private class HistoryEntry { public String url; public String display; public String lastAccessTime; public void updateAccessTime() { this.lastAccessTime = DateUtils.writeDateTime( new GregorianCalendar()); } } private ArrayList<HistoryEntry> mHistory = new ArrayList<HistoryEntry>(); private UrlEditText mUrlField; private DisplayEditText mDisplayField; private Cursor mCursor; }