• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /* //device/apps/Notes/NotesList.java
2 **
3 ** Copyright 2006, The Android Open Source Project
4 **
5 ** Licensed under the Apache License, Version 2.0 (the "License");
6 ** you may not use this file except in compliance with the License.
7 ** You may obtain a copy of the License at
8 **
9 **     http://www.apache.org/licenses/LICENSE-2.0
10 **
11 ** Unless required by applicable law or agreed to in writing, software
12 ** distributed under the License is distributed on an "AS IS" BASIS,
13 ** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 ** See the License for the specific language governing permissions and
15 ** limitations under the License.
16 */
17 package com.android.development;
18 
19 import android.app.ListActivity;
20 import android.content.ContentValues;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.database.Cursor;
24 import android.database.sqlite.SQLiteDatabase;
25 import android.net.Uri;
26 import android.os.Bundle;
27 import android.text.Editable;
28 import android.text.Selection;
29 import android.text.format.DateUtils;
30 import android.util.AttributeSet;
31 import android.view.Menu;
32 import android.view.MenuItem;
33 import android.view.View;
34 import android.widget.EditText;
35 import android.widget.ListView;
36 import android.widget.SimpleAdapter;
37 import android.graphics.Rect;
38 
39 import java.io.FileNotFoundException;
40 import java.util.ArrayList;
41 import java.util.GregorianCalendar;
42 import java.util.HashMap;
43 
44 public class EnterURL extends ListActivity
45 {
46     private static final int DATABASE_VERSION = 1;
47     public static class UrlEditText extends EditText
48     {
UrlEditText(Context context, AttributeSet attrs)49         public UrlEditText(Context context, AttributeSet attrs)
50         {
51             super(context, attrs);
52         }
53 
54         @Override
onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect)55         protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect)
56         {
57             super.onFocusChanged(focused, direction, previouslyFocusedRect);
58             if (focused) {
59                 Editable text = getText();
60                 String str = text.toString();
61                 int highlightStart = 0;
62                 if (str.startsWith("content://")) {
63                     highlightStart = "content://".length();
64                 }
65                 Selection.setSelection(text, highlightStart, text.length());
66             }
67         }
68     }
69 
70     public static class DisplayEditText extends EditText
71     {
DisplayEditText(Context context, AttributeSet attrs)72         public DisplayEditText(Context context, AttributeSet attrs)
73         {
74             super(context, attrs);
75         }
76 
77         @Override
onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect)78         protected void onFocusChanged(boolean focused, int direction, Rect previouslyFocusedRect)
79         {
80             super.onFocusChanged(focused, direction, previouslyFocusedRect);
81             if (focused) {
82                 Editable text = getText();
83                 Selection.setSelection(text, 0, text.length());
84             }
85         }
86     }
87 
88     @Override
onCreateView(String name, Context context, AttributeSet attrs)89     public View onCreateView(String name, Context context, AttributeSet attrs)
90     {
91         if (name.equals("com.android.development.UrlEditText")) {
92             return new UrlEditText(this, attrs);
93         }
94         if (name.equals("com.android.development.DisplayEditText")) {
95             return new DisplayEditText(this, attrs);
96         }
97         return null;
98     }
99 
100     View.OnClickListener mViewItemAction = new View.OnClickListener () {
101         public void onClick(View v)
102         {
103             String url = mUrlField.getText().toString();
104             String display = mDisplayField.getText().toString();
105             viewItem(url, display);
106         }
107     };
108 
onCreate(Bundle icicle)109     public void onCreate(Bundle icicle)
110     {
111         super.onCreate(icicle);
112         setContentView(R.layout.enter_url);
113 
114         // display
115         mDisplayField = (DisplayEditText)findViewById(R.id.display_edit_text);
116         mDisplayField.setOnClickListener(mViewItemAction);
117         // url
118         mUrlField = (UrlEditText)findViewById(R.id.url_edit_text);
119         mUrlField.setOnClickListener(mViewItemAction);
120     }
121 
onStop()122     public void onStop()
123     {
124         super.onStop();
125 
126         if (mCursor != null) {
127             mCursor.deactivate();
128         }
129     }
130 
onResume()131     public void onResume()
132     {
133         super.onResume();
134 
135         // show the history
136         loadPrefs();
137         fillListView();
138         if (mHistory.size() > 0) {
139             ListView lv = this.getListView();
140             lv.setSelection(0);
141             lv.requestFocus();
142         }
143     }
144 
onCreateOptionsMenu(Menu menu)145     public boolean onCreateOptionsMenu(Menu menu)
146     {
147         super.onCreateOptionsMenu(menu);
148         menu.add(0, 0, 0, "Clear Bookmarks").setOnMenuItemClickListener(mClearBookmarks);
149         return true;
150     }
151 
onListItemClick(ListView l, View v, int position, long id)152     protected void onListItemClick(ListView l, View v, int position, long id)
153     {
154         HistoryEntry he = mHistory.get(position);
155         viewItem(he.url, he.display);
156     }
157 
viewItem(String url, String display)158     private final void viewItem(String url, String display)
159     {
160         // -------------- save this in the history ----------------
161         // look in the history
162         int count = mHistory.size();
163         int i;
164         for (i=0; i<count; i++) {
165             HistoryEntry he = mHistory.get(i);
166             if (he.url.equals(url) && he.display.equals(display)) {
167                 he.updateAccessTime();
168                 mHistory.remove(i);
169                 mHistory.add(0, he);
170                 break;
171             }
172         }
173         if (i >= count) {
174             // didn't find it, add it first
175             HistoryEntry he = new HistoryEntry();
176             he.url = url;
177             he.display = display;
178             he.updateAccessTime();
179             mHistory.add(0, he);
180         }
181 
182         savePrefs();
183 
184         // -------------- view it ---------------------------------
185         Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(url));
186         intent.setClass(this, DataList.class);
187         intent.putExtra("display", display);
188         startActivity(intent);
189     }
190 
191     MenuItem.OnMenuItemClickListener mClearBookmarks = new MenuItem.OnMenuItemClickListener() {
192         public boolean onMenuItemClick(MenuItem item) {
193             mHistory.clear();
194             savePrefs();
195             fillListView();
196             return true;
197         }
198     };
199 
fillListView()200     private void fillListView()
201     {
202         loadPrefs();
203         ArrayList<HashMap<String, String>> d = new ArrayList<HashMap<String, String>>();
204         int count = mHistory.size();
205         for (int i=0; i<count; i++) {
206             HashMap<String, String> m = new HashMap<String, String>();
207             HistoryEntry he = mHistory.get(i);
208             m.put("title", he.url + " (" + he.display + ")");
209             d.add(m);
210         }
211         setListAdapter(new SimpleAdapter(this, d, R.layout.url_list,
212                                          new String[] {"title"},
213                                          new int[] {android.R.id.text1}));
214     }
215 
openDB()216     SQLiteDatabase openDB()
217     {
218         SQLiteDatabase db = null;
219         db = openOrCreateDatabase("inspector.db", 0, null);
220         int version = db.getVersion();
221         if (version != DATABASE_VERSION) {
222             db.execSQL("CREATE TABLE History ("
223                         + " url TEXT,"
224                         + " display TEXT,"
225                         + " lastAccessTime TEXT"
226                         + ");");
227             db.execSQL("CREATE TABLE FieldState ("
228                         + " url TEXT,"
229                         + " display TEXT"
230                         + ");");
231             db.setVersion(DATABASE_VERSION);
232         }
233         return db;
234     }
235 
loadPrefs()236     private void loadPrefs()
237     {
238         SQLiteDatabase db = openDB();
239         Cursor c = db.query("History",
240                             new String[] { "url", "display", "lastAccessTime" },
241                             null, null, null, null, "lastAccessTime DESC");
242         int urlCol = c.getColumnIndex("url");
243         int accessCol = c.getColumnIndex("lastAccessTime");
244         int displayCol = c.getColumnIndex("display");
245         mHistory.clear();
246         while (c.moveToNext()) {
247             HistoryEntry he = new HistoryEntry();
248             he.url = c.getString(urlCol);
249             he.display = c.getString(displayCol);
250             he.lastAccessTime = c.getString(accessCol);
251             mHistory.add(he);
252         }
253 
254         c = db.query("FieldState", null, null, null, null, null, null);
255         if (c.moveToNext()) {
256             urlCol = c.getColumnIndex("url");
257             displayCol = c.getColumnIndex("display");
258             mUrlField.setText(c.getString(urlCol));
259             mDisplayField.setText(c.getString(displayCol));
260         } else {
261             mDisplayField.setText("_id");
262             mUrlField.setText("content://");
263         }
264 
265         db.close();
266     }
267 
savePrefs()268     private void savePrefs()
269     {
270         ContentValues m;
271         HistoryEntry he;
272 
273         SQLiteDatabase db = openDB();
274         db.execSQL("DELETE FROM History;");
275         int count = mHistory.size();
276         for (int i=0; i<count; i++) {
277             m = new ContentValues();
278             he = mHistory.get(i);
279             m.put("url", he.url);
280             m.put("display", he.display);
281             m.put("lastAccessTime", he.lastAccessTime);
282             db.insert("History", null, m);
283         }
284 
285         db.execSQL("DELETE FROM FieldState");
286         m = new ContentValues();
287         m.put("url", mUrlField.getText().toString());
288         m.put("display", mDisplayField.getText().toString());
289         db.insert("FieldState", null, m);
290 
291         db.close();
292     }
293 
294     private class HistoryEntry
295     {
296         public String url;
297         public String display;
298         public String lastAccessTime;
updateAccessTime()299         public void updateAccessTime()
300         {
301             this.lastAccessTime = DateUtils.writeDateTime(
302                                                     new GregorianCalendar());
303         }
304     }
305 
306     private ArrayList<HistoryEntry> mHistory = new ArrayList<HistoryEntry>();
307     private UrlEditText mUrlField;
308     private DisplayEditText mDisplayField;
309     private Cursor mCursor;
310 }
311