First crack at a Gallery-based live wallpaper picker.
No thumbnails yet, but I hope the placeholder graphics are compelling enough to convince you to BUY NOW!
diff --git a/src/com/android/launcher2/LiveWallpaperPickActivity.java b/src/com/android/launcher2/LiveWallpaperPickActivity.java
index 40d183a..d423743 100644
--- a/src/com/android/launcher2/LiveWallpaperPickActivity.java
+++ b/src/com/android/launcher2/LiveWallpaperPickActivity.java
@@ -16,7 +16,7 @@
package com.android.launcher2;
-import android.app.LauncherActivity;
+import android.app.Activity;
import android.app.ListActivity;
import android.app.WallpaperManager;
import android.content.ComponentName;
@@ -24,10 +24,12 @@
import android.content.DialogInterface;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.content.pm.ComponentInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.graphics.drawable.Drawable;
+import android.graphics.Bitmap;
import android.os.Binder;
import android.os.Bundle;
import android.os.IBinder;
@@ -39,8 +41,14 @@
import android.service.wallpaper.IWallpaperService;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
+import android.view.LayoutInflater;
import android.view.View;
+import android.view.ViewGroup;
import android.view.WindowManager;
+import android.widget.AdapterView;
+import android.widget.BaseAdapter;
+import android.widget.Gallery;
+import android.widget.ImageView;
import android.widget.ListView;
import java.text.Collator;
@@ -53,8 +61,11 @@
* Displays a list of live wallpapers, allowing the user to select one
* and make it the system global wallpaper.
*/
-public class LiveWallpaperPickActivity extends LauncherActivity
- implements View.OnClickListener {
+public class LiveWallpaperPickActivity
+ extends Activity
+ implements AdapterView.OnItemSelectedListener,
+ View.OnClickListener
+{
private static final String TAG = "LiveWallpaperPickActivity";
private PackageManager mPackageManager;
@@ -62,7 +73,13 @@
Intent mSelectedIntent;
WallpaperConnection mWallpaperConnection;
-
+
+ private Gallery mGallery;
+
+ private ArrayList<Intent> mWallpaperIntents;
+
+ private ArrayList<Bitmap> mThumbBitmaps;
+
class WallpaperConnection extends IWallpaperConnection.Stub
implements ServiceConnection {
final Intent mIntent;
@@ -145,17 +162,98 @@
return null;
}
}
-
+
+ private class ImageAdapter extends BaseAdapter {
+ private LayoutInflater mLayoutInflater;
+
+ ImageAdapter(LiveWallpaperPickActivity context) {
+ mLayoutInflater = context.getLayoutInflater();
+ }
+
+ public int getCount() {
+ return mThumbBitmaps.size();
+ }
+
+ public Object getItem(int position) {
+ return position;
+ }
+
+ public long getItemId(int position) {
+ return position;
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ImageView image;
+
+ if (convertView == null) {
+ image = (ImageView) mLayoutInflater.inflate(R.layout.wallpaper_item, parent, false);
+ } else {
+ image = (ImageView) convertView;
+ }
+
+ image.setImageBitmap(mThumbBitmaps.get(position));
+ image.getDrawable().setDither(true);
+ return image;
+ }
+ }
+
+
+ private void findLiveWallpapers() {
+ mThumbBitmaps = new ArrayList<Bitmap>(24);
+ List<ResolveInfo> list =
+ mPackageManager.queryIntentServices(getTargetIntent(),
+ /*noflags*/ 0);
+
+ mWallpaperIntents = new ArrayList<Intent>(list.size());
+
+ int listSize = list.size();
+ Log.d(TAG, String.format("findLiveWallpapers: found %d wallpaper services", listSize));
+ for (int i = 0; i < listSize; i++) {
+ ResolveInfo resolveInfo = list.get(i);
+ ComponentInfo ci = resolveInfo.serviceInfo;
+ String packageName = ci.applicationInfo.packageName;
+ String className = ci.name;
+ Log.d(TAG, String.format("findLiveWallpapers: [%d] pkg=%s cls=%s",
+ i, packageName, className));
+ Intent intent = new Intent(getTargetIntent());
+ intent.setClassName(packageName, className);
+ mWallpaperIntents.add(intent);
+
+ Bitmap thumb = Bitmap.createBitmap(240,160,Bitmap.Config.ARGB_8888);
+ android.graphics.Canvas can = new android.graphics.Canvas(thumb);
+ android.graphics.Paint pt = new android.graphics.Paint(android.graphics.Paint.ANTI_ALIAS_FLAG|android.graphics.Paint.DITHER_FLAG);
+ pt.setARGB(255, 0, 0, 255);
+ can.drawPaint(pt);
+ pt.setARGB(255, 255, 255, 255);
+ pt.setTextSize(12);
+ can.drawText(className, 16, 150, pt);
+ pt.setTextSize(80);
+ can.drawText(String.format("%d", i), 100,100, pt);
+ mThumbBitmaps.add(thumb);
+ }
+
+
+ }
+
@Override
public void onCreate(Bundle icicle) {
+ super.onCreate(icicle);
+
mPackageManager = getPackageManager();
mWallpaperManager = WallpaperManager.getInstance(this);
- super.onCreate(icicle);
+ findLiveWallpapers();
+
+ setContentView(R.layout.live_wallpaper_content);
+ mGallery = (Gallery) findViewById(R.id.gallery);
+ mGallery.setAdapter(new ImageAdapter(this));
+ mGallery.setOnItemSelectedListener(this);
+ mGallery.setCallbackDuringFling(false);
+
View button = findViewById(R.id.set);
- button.setEnabled(false);
+// button.setEnabled(false);
button.setOnClickListener(this);
// Set default return data
@@ -193,24 +291,14 @@
mWallpaperConnection = null;
}
- @Override
- protected void onSetContentView() {
- setContentView(R.layout.live_wallpaper_content);
- }
-
- @Override
protected Intent getTargetIntent() {
return new Intent(WallpaperService.SERVICE_INTERFACE);
}
- @Override
- protected List<ResolveInfo> onQueryPackageManager(Intent queryIntent) {
- return mPackageManager.queryIntentServices(queryIntent, /* no flags */ 0);
- }
-
- @Override
- protected void onListItemClick(ListView l, View v, int position, long id) {
- mSelectedIntent = intentForPosition(position);
+ public void onItemSelected(AdapterView parent, View v, int position, long id) {
+ Log.d(TAG, String.format("onItemSelected: position=%d", position));
+
+ mSelectedIntent = mWallpaperIntents.get(position);
findViewById(R.id.set).setEnabled(true);
WallpaperConnection conn = new WallpaperConnection(mSelectedIntent);
@@ -222,7 +310,10 @@
}
}
- public void onClick(View v) {
+ public void onClick(View v) { // "Set" button
+ Log.d(TAG, "Set clicked");
+
+// mSelectedIntent = mWallpaperIntents.get(mGallery.getSelectedItemPosition());
if (mSelectedIntent != null) {
try {
mWallpaperManager.getIWallpaperManager().setWallpaperComponent(
@@ -236,4 +327,8 @@
finish();
}
}
+
+ public void onNothingSelected(AdapterView parent) {
+ }
+
}