• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2010 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.contacts.tests.allintents;
18 
19 import android.app.Activity;
20 import android.content.ContentUris;
21 import android.content.Intent;
22 import android.database.Cursor;
23 import android.graphics.Bitmap;
24 import android.graphics.BitmapFactory;
25 import android.graphics.Color;
26 import android.net.Uri;
27 import android.os.Bundle;
28 import android.os.Parcelable;
29 import android.provider.ContactsContract.CommonDataKinds.Photo;
30 import android.provider.ContactsContract.Contacts;
31 import android.provider.ContactsContract.Data;
32 import android.text.TextUtils;
33 import android.view.View;
34 import android.widget.ImageView;
35 import android.widget.ImageView.ScaleType;
36 import android.widget.TableLayout;
37 import android.widget.TableRow;
38 import android.widget.TextView;
39 
40 import com.android.contacts.tests.R;
41 
42 import java.util.Arrays;
43 
44 /**
45  * An activity that shows the result of a contacts activity invocation.
46  */
47 public class ResultActivity extends Activity {
48 
49     @Override
onCreate(Bundle savedInstanceState)50     protected void onCreate(Bundle savedInstanceState) {
51         super.onCreate(savedInstanceState);
52         setContentView(R.layout.result);
53 
54         Intent intent = getIntent();
55         addRowsForIntent((Intent)intent.getExtras().get("data"));
56     }
57 
addRowsForIntent(Intent intent)58     private void addRowsForIntent(Intent intent) {
59         if (intent == null) {
60             addRow("", "No data intent returned");
61         } else {
62             addRow("INTENT", intent.toString());
63             addSeparator(3);
64 
65             Bundle extras = intent.getExtras();
66             if (extras != null && !extras.isEmpty()) {
67                 for (String key : extras.keySet()) {
68                     Object value = extras.get(key);
69                     addRow("EXTRA", key);
70                     addRowForValue("", value);
71                 }
72 
73                 addSeparator(3);
74             }
75 
76             String dataUri = intent.getDataString();
77             if (dataUri != null) {
78                 addRowsForQuery(Uri.parse(dataUri));
79             }
80         }
81     }
82 
addRowForValue(String label, Object value)83     private void addRowForValue(String label, Object value) {
84         if (value == null) {
85             addRow(label, "null");
86         } else if (value instanceof Bitmap) {
87             addRowWithBitmap(label, (Bitmap)value);
88         } else if (value instanceof Intent) {
89             addRow(label, "INTENT");
90             addRowsForIntent((Intent)value);
91         } else if (value instanceof Uri) {
92             addRow(label, "DATA");
93             addRowsForQuery((Uri)value);
94         } else if (value.getClass().isArray()) {
95             addRow(label, "ARRAY");
96             Parcelable[] array = (Parcelable[])value;
97             for (int i = 0; i < array.length; i++) {
98                 addRowForValue("[" + i + "]", String.valueOf(array[i]));
99             }
100         } else {
101             addRow(label, String.valueOf(value));
102         }
103     }
104 
addRowsForQuery(Uri dataUri)105     private void addRowsForQuery(Uri dataUri) {
106         Cursor cursor = getContentResolver().query(dataUri, null, null, null, null);
107         if (cursor == null) {
108             addRow("", "No data for this URI");
109         } else {
110             try {
111                 while (cursor.moveToNext()) {
112                     addRow("", "DATA");
113                     String[] columnNames = cursor.getColumnNames();
114                     String[] names = new String[columnNames.length];
115                     System.arraycopy(columnNames, 0, names, 0, columnNames.length);
116                     Arrays.sort(names);
117                     for (int i = 0; i < names.length; i++) {
118                         int index = cursor.getColumnIndex(names[i]);
119                         String value = cursor.getString(index);
120                         addRow(names[i], value);
121 
122                         if (names[i].equals(Contacts.PHOTO_ID) && !TextUtils.isEmpty(value)) {
123                             addRowWithPhoto(Long.parseLong(value));
124                         }
125                     }
126                 }
127             } finally {
128                 cursor.close();
129             }
130         }
131     }
132 
addRow(String column0, String column1)133     private void addRow(String column0, String column1) {
134         TextView label = new TextView(this);
135         label.setPadding(4, 4, 4, 4);
136         label.setText(column0);
137         TextView value = new TextView(this);
138         value.setPadding(4, 4, 4, 4);
139         value.setText(column1);
140         addRow(label, value);
141     }
142 
addRowWithPhoto(long photoId)143     private void addRowWithPhoto(long photoId) {
144         byte[] data = null;
145         Cursor cursor = getContentResolver().query(
146                 ContentUris.withAppendedId(Data.CONTENT_URI, photoId),
147                 new String[]{Photo.PHOTO}, null, null, null);
148         try {
149             if (cursor.moveToNext()) {
150                 data = cursor.getBlob(0);
151             }
152         } finally {
153             if (cursor != null) {
154                 cursor.close();
155             }
156         }
157 
158         if (data == null) {
159             return;
160         }
161 
162         addRowWithBitmap("Photo", BitmapFactory.decodeByteArray(data, 0, data.length));
163     }
164 
addRowWithBitmap(String label, Bitmap bitmap)165     private void addRowWithBitmap(String label, Bitmap bitmap) {
166         TextView labelView = new TextView(this);
167         labelView.setPadding(4, 4, 4, 4);
168         labelView.setText(label);
169 
170         ImageView imageView = new ImageView(this);
171         imageView.setImageBitmap(bitmap);
172         imageView.setPadding(4, 4, 4, 4);
173         imageView.setScaleType(ScaleType.FIT_START);
174         addRow(labelView, imageView);
175     }
176 
addRow(View column0, View column1)177     private void addRow(View column0, View column1) {
178         TableLayout table = (TableLayout)findViewById(R.id.table);
179         TableRow row = new TableRow(this);
180         row.addView(column0);
181         row.addView(column1);
182         table.addView(row);
183 
184         addSeparator(1);
185     }
186 
addSeparator(int height)187     private void addSeparator(int height) {
188         TableLayout table = (TableLayout)findViewById(R.id.table);
189         View separator = new View(this);
190         TableLayout.LayoutParams params = new TableLayout.LayoutParams();
191         params.height = height;
192         separator.setLayoutParams(params);
193         separator.setBackgroundColor(Color.rgb(33, 66, 33));
194         table.addView(separator);
195     }
196 }
197