Initial changes to allow resolution of arbitrary clip data to widgets that support them.

Change-Id: Id5dfa8436a5bf6eb7bd300ec603911a9d3698de3
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 0ac42dd..549303d 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -17,8 +17,13 @@
 
 package com.android.launcher2;
 
-import com.android.common.Search;
-import com.android.launcher.R;
+import java.io.DataInputStream;
+import java.io.DataOutputStream;
+import java.io.FileNotFoundException;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
 
 import android.animation.Animator;
 import android.animation.AnimatorSet;
@@ -35,17 +40,19 @@
 import android.appwidget.AppWidgetProviderInfo;
 import android.content.ActivityNotFoundException;
 import android.content.BroadcastReceiver;
+import android.content.ClipData;
+import android.content.ClipDescription;
 import android.content.ComponentName;
 import android.content.ContentResolver;
 import android.content.Context;
 import android.content.DialogInterface;
 import android.content.Intent;
-import android.content.IntentFilter;
 import android.content.Intent.ShortcutIconResource;
+import android.content.IntentFilter;
 import android.content.pm.ActivityInfo;
 import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
 import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.pm.ResolveInfo;
 import android.content.res.Configuration;
 import android.content.res.Resources;
 import android.content.res.TypedArray;
@@ -78,9 +85,9 @@
 import android.view.MenuItem;
 import android.view.MotionEvent;
 import android.view.View;
+import android.view.View.OnLongClickListener;
 import android.view.ViewGroup;
 import android.view.WindowManager;
-import android.view.View.OnLongClickListener;
 import android.view.animation.AccelerateInterpolator;
 import android.view.animation.DecelerateInterpolator;
 import android.view.inputmethod.InputMethodManager;
@@ -89,18 +96,13 @@
 import android.widget.LinearLayout;
 import android.widget.PopupWindow;
 import android.widget.TabHost;
-import android.widget.TextView;
-import android.widget.Toast;
 import android.widget.TabHost.OnTabChangeListener;
 import android.widget.TabHost.TabContentFactory;
+import android.widget.TextView;
+import android.widget.Toast;
 
-import java.io.DataInputStream;
-import java.io.DataOutputStream;
-import java.io.FileNotFoundException;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
+import com.android.common.Search;
+import com.android.launcher.R;
 
 /**
  * Default launcher application.
@@ -1461,8 +1463,33 @@
             intent.setComponent(appWidget.configure);
             intent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId);
             if (info != null) {
-                intent.putExtra(InstallWidgetReceiver.EXTRA_APPWIDGET_CONFIGURATION_DATA,
-                        info.configurationData);
+                if (info.mimeType != null && !info.mimeType.isEmpty()) {
+                    intent.putExtra(
+                            InstallWidgetReceiver.EXTRA_APPWIDGET_CONFIGURATION_DATA_MIME_TYPE,
+                            info.mimeType);
+
+                    final String mimeType = info.mimeType;
+                    final ClipData clipData = (ClipData) info.configurationData;
+                    final ClipDescription clipDesc = clipData.getDescription();
+                    for (int i = 0; i < clipDesc.getMimeTypeCount(); ++i) {
+                        if (clipDesc.getMimeType(i).equals(mimeType)) {
+                            final ClipData.Item item = clipData.getItem(i);
+                            final CharSequence stringData = item.getText();
+                            final Uri uriData = item.getUri();
+                            final Intent intentData = item.getIntent();
+                            final String key =
+                                InstallWidgetReceiver.EXTRA_APPWIDGET_CONFIGURATION_DATA;
+                            if (uriData != null) {
+                                intent.putExtra(key, uriData);
+                            } else if (intentData != null) {
+                                intent.putExtra(key, intentData);
+                            } else if (stringData != null) {
+                                intent.putExtra(key, stringData);
+                            }
+                            break;
+                        }
+                    }
+                }
             }
 
             startActivityForResultSafely(intent, REQUEST_CREATE_APPWIDGET);