summaryrefslogtreecommitdiffstats
path: root/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java')
-rw-r--r--src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java214
1 files changed, 214 insertions, 0 deletions
diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java b/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java
new file mode 100644
index 0000000..44493ee
--- /dev/null
+++ b/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java
@@ -0,0 +1,214 @@
+/*
+ * Copyright (C) 2009 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.wallpaper.livepicker;
+
+import android.app.ListActivity;
+import android.app.WallpaperInfo;
+import android.os.Bundle;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.content.pm.ComponentInfo;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.BitmapDrawable;
+import android.graphics.Paint;
+import android.graphics.Canvas;
+import android.graphics.Bitmap;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.View;
+import android.view.ViewGroup;
+import android.view.LayoutInflater;
+import android.service.wallpaper.WallpaperService;
+import android.widget.BaseAdapter;
+import android.widget.TextView;
+import android.widget.ImageView;
+import android.widget.AdapterView;
+import android.text.Html;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.io.IOException;
+
+import org.xmlpull.v1.XmlPullParserException;
+
+public class LiveWallpaperListActivity extends ListActivity implements AdapterView.OnItemClickListener {
+ private static final String LOG_TAG = "LiveWallpapersPicker";
+
+ private static final int REQUEST_PREVIEW = 100;
+
+ private PackageManager mPackageManager;
+
+ private ArrayList<Drawable> mThumbnails;
+ private ArrayList<WallpaperInfo> mWallpaperInfos;
+ private ArrayList<Intent> mWallpaperIntents;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.live_wallpaper_list);
+
+ mPackageManager = getPackageManager();
+
+ findLiveWallpapers();
+
+ setListAdapter(new LiveWallpapersAdapter());
+ getListView().setOnItemClickListener(this);
+ }
+
+ private void findLiveWallpapers() {
+ List<ResolveInfo> list = mPackageManager.queryIntentServices(
+ new Intent(WallpaperService.SERVICE_INTERFACE),
+ PackageManager.GET_META_DATA);
+
+ int listSize = list.size();
+
+ mThumbnails = new ArrayList<Drawable>(listSize);
+ mWallpaperIntents = new ArrayList<Intent>(listSize);
+ mWallpaperInfos = new ArrayList<WallpaperInfo>(listSize);
+
+ Resources res = getResources();
+ Drawable galleryIcon = res.getDrawable(R.drawable.livewallpaper_placeholder);
+
+ Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG | Paint.DITHER_FLAG);
+ paint.setTextAlign(Paint.Align.CENTER);
+
+ Canvas canvas = new Canvas();
+
+ for (int i = 0; i < listSize; i++) {
+ ResolveInfo resolveInfo = list.get(i);
+ ComponentInfo ci = resolveInfo.serviceInfo;
+ WallpaperInfo info;
+ try {
+ info = new WallpaperInfo(this, resolveInfo);
+ } catch (XmlPullParserException e) {
+ Log.w(LOG_TAG, "Skipping wallpaper " + ci, e);
+ continue;
+ } catch (IOException e) {
+ Log.w(LOG_TAG, "Skipping wallpaper " + ci, e);
+ continue;
+ }
+
+ String packageName = info.getPackageName();
+ String className = info.getServiceName();
+
+ Intent intent = new Intent(WallpaperService.SERVICE_INTERFACE);
+ intent.setClassName(packageName, className);
+
+ mWallpaperIntents.add(intent);
+ mWallpaperInfos.add(info);
+
+ Drawable thumb = info.loadThumbnail(mPackageManager);
+ if (thumb == null) {
+ int thumbWidth = res.getDimensionPixelSize(R.dimen.live_wallpaper_thumbnail_width);
+ int thumbHeight = res.getDimensionPixelSize(R.dimen.live_wallpaper_thumbnail_height);
+
+ Bitmap thumbnail = Bitmap.createBitmap(thumbWidth, thumbHeight,
+ Bitmap.Config.ARGB_8888);
+
+ paint.setColor(res.getColor(R.color.live_wallpaper_thumbnail_background));
+ canvas.setBitmap(thumbnail);
+ canvas.drawPaint(paint);
+
+ galleryIcon.setBounds(0, 0, thumbWidth, thumbHeight);
+ ((BitmapDrawable) galleryIcon).setGravity(Gravity.CENTER);
+ galleryIcon.draw(canvas);
+
+ String title = info.loadLabel(mPackageManager).toString();
+
+ paint.setColor(res.getColor(R.color.live_wallpaper_thumbnail_text_color));
+ paint.setTextSize(
+ res.getDimensionPixelSize(R.dimen.live_wallpaper_thumbnail_text_size));
+
+ canvas.drawText(title, (int) (thumbWidth * 0.5),
+ thumbHeight - res.getDimensionPixelSize(
+ R.dimen.live_wallpaper_thumbnail_text_offset), paint);
+
+ thumb = new BitmapDrawable(res, thumbnail);
+ }
+
+ thumb.setDither(true);
+ mThumbnails.add(thumb);
+ }
+ }
+
+ @Override
+ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+
+ if (requestCode == REQUEST_PREVIEW) {
+ if (resultCode == RESULT_OK) finish();
+ }
+ }
+
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ final Intent intent = mWallpaperIntents.get(position);
+ final WallpaperInfo info = mWallpaperInfos.get(position);
+ LiveWallpaperPreview.showPreview(this, REQUEST_PREVIEW, intent, info);
+ }
+
+ static class ViewHolder {
+ TextView titleAuthor;
+ TextView description;
+ ImageView thumbnail;
+ }
+
+ private class LiveWallpapersAdapter extends BaseAdapter {
+ private final LayoutInflater mInflater;
+
+ LiveWallpapersAdapter() {
+ mInflater = LayoutInflater.from(LiveWallpaperListActivity.this);
+ }
+
+ public int getCount() {
+ return mWallpaperInfos.size();
+ }
+
+ public Object getItem(int position) {
+ return mWallpaperInfos.get(position);
+ }
+
+ public long getItemId(int position) {
+ return position;
+ }
+
+ public View getView(int position, View convertView, ViewGroup parent) {
+ ViewHolder holder;
+ if (convertView == null) {
+ convertView = mInflater.inflate(R.layout.live_wallpaper_entry, parent, false);
+
+ holder = new ViewHolder();
+ holder.titleAuthor = (TextView) convertView.findViewById(R.id.title_author);
+ holder.description = (TextView) convertView.findViewById(R.id.description);
+ holder.thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail);
+ convertView.setTag(holder);
+ } else {
+ holder = (ViewHolder) convertView.getTag();
+ }
+
+ WallpaperInfo info = mWallpaperInfos.get(position);
+ holder.thumbnail.setImageDrawable(mThumbnails.get(position));
+ holder.titleAuthor.setText(getString(R.string.wallpaper_title_and_author,
+ info.loadLabel(mPackageManager), info.loadAuthor(mPackageManager)));
+ holder.description.setText(Html.fromHtml(
+ info.loadDescription(mPackageManager).toString()));
+
+ return convertView;
+ }
+ }
+}