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