Home | History | Annotate | Download | only in allintents
      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
     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 
     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 
     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 
    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 
    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 
    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 
    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 
    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 
    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