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 java.util.ArrayList;
20 
21 import android.content.Intent;
22 import android.app.Activity;
23 import android.database.Cursor;
24 import android.graphics.Typeface;
25 import android.widget.LinearLayout;
26 import android.widget.ScrollView;
27 import android.os.Bundle;
28 import android.view.Menu;
29 import android.view.MenuItem;
30 import android.view.ViewGroup;
31 import android.widget.TextView;
32 
33 public class Details extends Activity
34 {
onCreate(Bundle icicle)35     public void onCreate(Bundle icicle)
36     {
37         super.onCreate(icicle);
38 
39         Intent intent = getIntent();
40 
41         String title = intent.getStringExtra("title");
42         if (title == null) {
43             title = "Details";
44         }
45         setTitle(title);
46 
47         mScrollView = new ScrollView(this);
48         setContentView(mScrollView);
49         mScrollView.setFocusable(true);
50 
51         mData = (ArrayList<ColumnData>)getIntent().getExtra("data");
52         addDataViews();
53     }
54 
onResume()55     public void onResume()
56     {
57         super.onResume();
58     }
59 
onCreateOptionsMenu(Menu menu)60     public boolean onCreateOptionsMenu(Menu menu)
61     {
62         super.onCreateOptionsMenu(menu);
63         menu.add(0, 0, 0, "Requery").setOnMenuItemClickListener(mRequery);
64         menu.add(0, 0, 0, "Print to stdout").setOnMenuItemClickListener(mPrintToStdout);
65         return true;
66     }
67 
addDataViews()68     void addDataViews()
69     {
70         int oldScroll = 0;
71 
72         if (mLinearLayout != null) {
73             mScrollView.removeView(mLinearLayout);
74         }
75         mLinearLayout = new LinearLayout(this);
76         mScrollView.addView(mLinearLayout, new ViewGroup.LayoutParams(
77                                         ViewGroup.LayoutParams.MATCH_PARENT,
78                                         ViewGroup.LayoutParams.MATCH_PARENT));
79         mLinearLayout.setOrientation(LinearLayout.VERTICAL);
80 
81         // Here in onStart, we're given data.  We use that because some
82         // data that we show is transient and can't be retrieved from a url.
83         // We'll try to use that in requery
84         int count = mData.size();
85         for (int i=0; i<count; i++) {
86             ColumnData cd = mData.get(i);
87             TextView label = makeView(cd.key, true, 12);
88             TextView contents = makeView(cd.value, false, 12);
89             contents.setPadding(3, 0, 0, i==count-1?0:3);
90             mLinearLayout.addView(label, lazy());
91             mLinearLayout.addView(contents, lazy());
92         }
93     }
94 
makeView(String str, boolean bold, int fontSize)95     TextView makeView(String str, boolean bold, int fontSize)
96     {
97         if (str == null) {
98             str = "(null)";
99         }
100         TextView v = new TextView(this);
101         v.setText(str);
102         v.setTextSize(fontSize);
103         if (bold) {
104             v.setTypeface(Typeface.DEFAULT_BOLD);
105         }
106         return v;
107     }
108 
lazy()109     LinearLayout.LayoutParams lazy()
110     {
111         return new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT,
112                                  ViewGroup.LayoutParams.WRAP_CONTENT, 0);
113     }
114 
115     MenuItem.OnMenuItemClickListener mRequery = new MenuItem.OnMenuItemClickListener() {
116         public boolean onMenuItemClick(MenuItem item) {
117             Intent intent = getIntent();
118             Cursor c = getContentResolver().query(intent.getData(), null, null, null, null);
119             if (c != null && c.moveToNext()) {
120                 mData.clear();
121                 String[] columnNames = c.getColumnNames();
122                 for (int i=0; i<columnNames.length; i++) {
123                     String str = c.getString(i);
124                     ColumnData cd = new ColumnData(columnNames[i], str);
125                     mData.add(cd);
126                 }
127                 addDataViews();
128             } else {
129                 TextView error = new TextView(Details.this);
130                 error.setText("Showing old data.\nURL couldn't be requeried:\n"
131                         + intent.getData());
132                 error.setTextColor(0xffff0000);
133                 error.setTextSize(11);
134                 mLinearLayout.addView(error, 0, lazy());
135             }
136             return true;
137         }
138     };
139 
140     MenuItem.OnMenuItemClickListener mPrintToStdout = new MenuItem.OnMenuItemClickListener() {
141         public boolean onMenuItemClick(MenuItem item) {
142             System.out.println("=== begin data ===");
143             int count = mData.size();
144             for (int i=0; i<count; i++) {
145                 ColumnData cd = mData.get(i);
146                 System.out.println("  " + cd.key + ": " + cd.value);
147             }
148             System.out.println("=== end data ===");
149             return true;
150         }
151     };
152 
153     LinearLayout mLinearLayout;
154     ScrollView mScrollView;
155     ArrayList<ColumnData> mData;
156 }
157