From 494767f1f8a29d2197837463fb6477646e682478 Mon Sep 17 00:00:00 2001 From: Adam Lesinski Date: Wed, 1 Dec 2010 17:00:10 -0800 Subject: Updated the LivePicker for tablet UI - Basic UI for the new LivePicker. Missing small tweaks Change-Id: I5d48e5ea5afc7feccf5f35124b944283060685df --- .../livepicker/LiveWallpaperListActivity.java | 100 ++++++++++++++++++--- .../livepicker/LiveWallpaperListAdapter.java | 69 ++++++++++---- 2 files changed, 140 insertions(+), 29 deletions(-) (limited to 'src/com') diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java b/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java index ecfbdea..c96e18c 100644 --- a/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java +++ b/src/com/android/wallpaper/livepicker/LiveWallpaperListActivity.java @@ -16,25 +16,46 @@ package com.android.wallpaper.livepicker; -import android.app.ListActivity; +import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; +import android.app.DialogFragment; +import android.app.FragmentTransaction; import android.app.WallpaperInfo; import android.os.Bundle; +import android.content.DialogInterface; import android.content.Intent; +import android.content.res.Configuration; +import android.util.Log; +import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.widget.AdapterView; +import android.widget.BaseAdapter; -public class LiveWallpaperListActivity extends ListActivity implements - AdapterView.OnItemClickListener { +public class LiveWallpaperListActivity extends Activity { private static final String LOG_TAG = "LiveWallpapersPicker"; private static final int REQUEST_PREVIEW = 100; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - setContentView(R.layout.live_wallpaper_list); + setContentView(R.layout.live_wallpaper_base); + ViewGroup baseView = (ViewGroup) findViewById(R.id.live_wallpaper_base_view); - setListAdapter(new LiveWallpaperListAdapter(this)); - getListView().setOnItemClickListener(this); + boolean isXLarge = (getResources().getConfiguration().screenLayout + & Configuration.SCREENLAYOUT_SIZE_MASK) == Configuration.SCREENLAYOUT_SIZE_XLARGE; + + DialogFragment fragment = new WallpaperDialogFragment(this, baseView, !isXLarge); + if (isXLarge) { + // When the screen is XLarge + fragment.show(getFragmentManager(), "dialog"); + } else { + // When the screen is normal. i.e: a phone + FragmentTransaction ft = getFragmentManager().openTransaction(); + ft.add(R.id.live_wallpaper_base_view, fragment); + ft.commit(); + } } @Override @@ -46,11 +67,66 @@ public class LiveWallpaperListActivity extends ListActivity implements } } - public void onItemClick(AdapterView parent, View view, int position, long id) { - LiveWallpaperListAdapter.LiveWallpaperInfo wallpaperInfo = - (LiveWallpaperListAdapter.LiveWallpaperInfo) getListAdapter().getItem(position); - final Intent intent = wallpaperInfo.intent; - final WallpaperInfo info = wallpaperInfo.info; - LiveWallpaperPreview.showPreview(this, REQUEST_PREVIEW, intent, info); + private class WallpaperDialogFragment extends DialogFragment implements + AdapterView.OnItemClickListener{ + private Activity mActivity; + private LiveWallpaperListAdapter mAdapter; + private ViewGroup mBaseView; + private boolean mEmbedded; + + public WallpaperDialogFragment(Activity activity, ViewGroup baseView, boolean embedded) { + mActivity = activity; + mEmbedded = embedded; + mBaseView = baseView; + setCancelable(true); + } + + @Override + public void onDismiss(DialogInterface dialog) { + mActivity.finish(); + } + + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + final int contentInset = getResources().getDimensionPixelSize( + R.dimen.dialog_content_inset); + View view = generateView(getLayoutInflater(), mBaseView); + + AlertDialog.Builder builder = new AlertDialog.Builder(mActivity); + builder.setNegativeButton(R.string.wallpaper_cancel, null); + builder.setTitle(R.string.live_wallpaper_picker_title); + builder.setView(view, contentInset, contentInset, contentInset, contentInset); + return builder.create(); + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + if (mEmbedded) { + return generateView(inflater, container); + } + return super.onCreateView(inflater, container, savedInstanceState); + } + + @SuppressWarnings("unchecked") + private View generateView(LayoutInflater inflater, ViewGroup container) { + View layout = inflater.inflate(R.layout.live_wallpaper_list, container, false); + + mAdapter = new LiveWallpaperListAdapter(mActivity); + AdapterView adapterView = + (AdapterView) layout.findViewById(android.R.id.list); + adapterView.setAdapter(mAdapter); + adapterView.setOnItemClickListener(this); + adapterView.setEmptyView(layout.findViewById(android.R.id.empty)); + return layout; + } + + public void onItemClick(AdapterView parent, View view, int position, long id) { + LiveWallpaperListAdapter.LiveWallpaperInfo wallpaperInfo = + (LiveWallpaperListAdapter.LiveWallpaperInfo) mAdapter.getItem(position); + final Intent intent = wallpaperInfo.intent; + final WallpaperInfo info = wallpaperInfo.info; + LiveWallpaperPreview.showPreview(mActivity, REQUEST_PREVIEW, intent, info); + } } } diff --git a/src/com/android/wallpaper/livepicker/LiveWallpaperListAdapter.java b/src/com/android/wallpaper/livepicker/LiveWallpaperListAdapter.java index 87e0384..6c07dcd 100644 --- a/src/com/android/wallpaper/livepicker/LiveWallpaperListAdapter.java +++ b/src/com/android/wallpaper/livepicker/LiveWallpaperListAdapter.java @@ -55,13 +55,29 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter private final LayoutInflater mInflater; private final PackageManager mPackageManager; - private List mWallpapers = new ArrayList(); + private List mWallpapers; + @SuppressWarnings("unchecked") public LiveWallpaperListAdapter(Context context) { mInflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mPackageManager = context.getPackageManager(); - new LiveWallpaperEnumerator(context).execute(); + List list = mPackageManager.queryIntentServices( + new Intent(WallpaperService.SERVICE_INTERFACE), + PackageManager.GET_META_DATA); + + mWallpapers = generatePlaceholderViews(list.size()); + + new LiveWallpaperEnumerator(context).execute(list); + } + + private List generatePlaceholderViews(int amount) { + ArrayList list = new ArrayList(amount); + for (int i = 0; i < amount; i++) { + LiveWallpaperInfo info = new LiveWallpaperInfo(); + list.add(info); + } + return list; } public int getCount() { @@ -85,7 +101,7 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter convertView = mInflater.inflate(R.layout.live_wallpaper_entry, parent, false); holder = new ViewHolder(); - holder.title = (TextView) convertView.findViewById(R.id.title_author); + holder.title = (TextView) convertView.findViewById(R.id.title); holder.description = (TextView) convertView.findViewById(R.id.description); holder.thumbnail = (ImageView) convertView.findViewById(R.id.thumbnail); convertView.setTag(holder); @@ -94,15 +110,28 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter } LiveWallpaperInfo wallpaperInfo = mWallpapers.get(position); - holder.thumbnail.setImageDrawable(wallpaperInfo.thumbnail); - holder.title.setText(wallpaperInfo.info.loadLabel(mPackageManager)); - try { - holder.description.setVisibility(View.VISIBLE); - holder.description.setText(Html.fromHtml( - wallpaperInfo.info.loadDescription(mPackageManager).toString())); - } catch (Resources.NotFoundException e) { - holder.description.setVisibility(View.GONE); + if (holder.thumbnail != null) { + holder.thumbnail.setImageDrawable(wallpaperInfo.thumbnail); } + + if (holder.title != null && wallpaperInfo.info != null) { + holder.title.setText(wallpaperInfo.info.loadLabel(mPackageManager)); + if (holder.thumbnail == null) { + holder.title.setCompoundDrawablesWithIntrinsicBounds(null, wallpaperInfo.thumbnail, + null, null); + } + } + + if (holder.description != null && wallpaperInfo.info != null) { + try { + holder.description.setVisibility(View.VISIBLE); + holder.description.setText(Html.fromHtml( + wallpaperInfo.info.loadDescription(mPackageManager).toString())); + } catch (Resources.NotFoundException e) { + holder.description.setVisibility(View.GONE); + } + } + return convertView; } @@ -118,21 +147,22 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter ImageView thumbnail; } - private class LiveWallpaperEnumerator extends AsyncTask { + private class LiveWallpaperEnumerator extends + AsyncTask, LiveWallpaperInfo, Void> { private Context mContext; + private int mWallpaperPosition; public LiveWallpaperEnumerator(Context context) { super(); mContext = context; + mWallpaperPosition = 0; } @Override - protected Void doInBackground(Void... params) { + protected Void doInBackground(List... params) { final PackageManager packageManager = mContext.getPackageManager(); - List list = packageManager.queryIntentServices( - new Intent(WallpaperService.SERVICE_INTERFACE), - PackageManager.GET_META_DATA); + List list = params[0]; final Resources res = mContext.getResources(); BitmapDrawable galleryIcon = (BitmapDrawable) res.getDrawable( @@ -214,7 +244,12 @@ public class LiveWallpaperListAdapter extends BaseAdapter implements ListAdapter @Override protected void onProgressUpdate(LiveWallpaperInfo...infos) { for (LiveWallpaperInfo info : infos) { - mWallpapers.add(info); + if (mWallpaperPosition < mWallpapers.size()) { + mWallpapers.set(mWallpaperPosition, info); + } else { + mWallpapers.add(info); + } + mWallpaperPosition++; LiveWallpaperListAdapter.this.notifyDataSetChanged(); } } -- cgit v1.2.3