From 6d9ff2d539824d50e12c97eb660844c90f79be6a Mon Sep 17 00:00:00 2001 From: fkloft Date: Tue, 18 Feb 2014 17:55:26 +0100 Subject: [PATCH] Extract IntentAdapter from IntentListView. Delete IntentListView (only a small wrapper was left, remainders could be moved to IntentAdapter --- .../iitc_mobile/share/IntentAdapter.java | 68 +++++++++++++ .../iitc_mobile/share/IntentFragment.java | 13 ++- .../iitc_mobile/share/IntentListView.java | 99 ------------------- 3 files changed, 77 insertions(+), 103 deletions(-) create mode 100644 mobile/src/com/cradle/iitc_mobile/share/IntentAdapter.java delete mode 100644 mobile/src/com/cradle/iitc_mobile/share/IntentListView.java diff --git a/mobile/src/com/cradle/iitc_mobile/share/IntentAdapter.java b/mobile/src/com/cradle/iitc_mobile/share/IntentAdapter.java new file mode 100644 index 00000000..3c3cde4a --- /dev/null +++ b/mobile/src/com/cradle/iitc_mobile/share/IntentAdapter.java @@ -0,0 +1,68 @@ +package com.cradle.iitc_mobile.share; + +import android.app.Activity; +import android.content.Context; +import android.content.Intent; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.graphics.drawable.Drawable; +import android.util.DisplayMetrics; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ArrayAdapter; +import android.widget.TextView; + +import com.cradle.iitc_mobile.Log; +import com.cradle.iitc_mobile.R; + +import java.util.Collections; +import java.util.List; + +class IntentAdapter extends ArrayAdapter { + private static final int MDPI_PX = 36; + + private final PackageManager mPackageManager; + + public IntentAdapter(final Context context) { + super(context, android.R.layout.simple_list_item_1); + mPackageManager = getContext().getPackageManager(); + } + + @Override + public View getView(final int position, final View convertView, final ViewGroup parent) { + final LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); + final TextView view = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, parent, false); + + final Intent item = getItem(position); + + view.setText(IntentGenerator.getTitle(item)); + view.setCompoundDrawablePadding((int) getContext().getResources().getDimension(R.dimen.icon_margin)); + + // get icon and scale it manually to ensure that all have the same size + final DisplayMetrics dm = new DisplayMetrics(); + ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm); + final float densityScale = dm.density; + final float scaledWidth = MDPI_PX * densityScale; + final float scaledHeight = MDPI_PX * densityScale; + + try { + final Drawable icon = mPackageManager.getActivityIcon(item); + icon.setBounds(0, 0, Math.round(scaledWidth), Math.round(scaledHeight)); + view.setCompoundDrawables(icon, null, null, null); + } catch (final NameNotFoundException e) { + Log.e(e); + } + + return view; + } + + public void setIntents(final List intents) { + Collections.sort(intents, ((ShareActivity) getContext()).getIntentComparator()); + + setNotifyOnChange(false); + clear(); + addAll(intents); + notifyDataSetChanged(); + } +} \ No newline at end of file diff --git a/mobile/src/com/cradle/iitc_mobile/share/IntentFragment.java b/mobile/src/com/cradle/iitc_mobile/share/IntentFragment.java index 9b185630..11301938 100644 --- a/mobile/src/com/cradle/iitc_mobile/share/IntentFragment.java +++ b/mobile/src/com/cradle/iitc_mobile/share/IntentFragment.java @@ -10,13 +10,15 @@ import android.widget.AbsListView; import android.widget.AbsListView.OnScrollListener; import android.widget.AdapterView; import android.widget.AdapterView.OnItemClickListener; +import android.widget.ListView; import java.util.ArrayList; public class IntentFragment extends Fragment implements OnScrollListener, OnItemClickListener { private ArrayList mIntents; - private IntentListView mListView; + private IntentAdapter mAdapter; private int mScrollIndex, mScrollTop; + private ListView mListView; public int getIcon() { return getArguments().getInt("icon"); @@ -31,8 +33,11 @@ public class IntentFragment extends Fragment implements OnScrollListener, OnItem final Bundle args = getArguments(); mIntents = args.getParcelableArrayList("intents"); - mListView = new IntentListView(getActivity()); - mListView.setIntents(mIntents); + + mAdapter = new IntentAdapter(getActivity()); + mAdapter.setIntents(mIntents); + + mListView = new ListView(getActivity()); if (mScrollIndex != -1 && mScrollTop != -1) { mListView.setSelectionFromTop(mScrollIndex, mScrollTop); } @@ -44,7 +49,7 @@ public class IntentFragment extends Fragment implements OnScrollListener, OnItem @Override public void onItemClick(final AdapterView parent, final View view, final int position, final long id) { - final Intent intent = mListView.getItem(position); + final Intent intent = mAdapter.getItem(position); ((ShareActivity) getActivity()).getIntentComparator().trackIntentSelection(intent); startActivity(intent); diff --git a/mobile/src/com/cradle/iitc_mobile/share/IntentListView.java b/mobile/src/com/cradle/iitc_mobile/share/IntentListView.java deleted file mode 100644 index c6e175fc..00000000 --- a/mobile/src/com/cradle/iitc_mobile/share/IntentListView.java +++ /dev/null @@ -1,99 +0,0 @@ -package com.cradle.iitc_mobile.share; - -import android.app.Activity; -import android.content.Context; -import android.content.Intent; -import android.content.pm.PackageManager; -import android.content.pm.PackageManager.NameNotFoundException; -import android.graphics.drawable.Drawable; -import android.util.AttributeSet; -import android.util.DisplayMetrics; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ArrayAdapter; -import android.widget.ListView; -import android.widget.TextView; - -import com.cradle.iitc_mobile.Log; -import com.cradle.iitc_mobile.R; - -import java.util.Collections; -import java.util.List; - -public class IntentListView extends ListView { - private IntentAdapter mAdapter; - private PackageManager mPackageManager; - - public IntentListView(final Context context) { - super(context); - init(); - } - - public IntentListView(final Context context, final AttributeSet attrs) { - super(context, attrs); - init(); - } - - public IntentListView(final Context context, final AttributeSet attrs, final int defStyle) { - super(context, attrs, defStyle); - init(); - } - - private void init() { - mPackageManager = getContext().getPackageManager(); - mAdapter = new IntentAdapter(); - setAdapter(mAdapter); - } - - public Intent getItem(final int position) { - return mAdapter.getItem(position); - } - - public void setIntents(final List intents) { - Collections.sort(intents, ((ShareActivity) getContext()).getIntentComparator()); - - mAdapter.setNotifyOnChange(false); - mAdapter.clear(); - mAdapter.addAll(intents); - mAdapter.notifyDataSetChanged(); - } - - private class IntentAdapter extends ArrayAdapter { - - // actually the mdpi pixel size is 48, but this looks ugly...so scale icons down for listView - private static final int MDPI_PX = 36; - - private IntentAdapter() { - super(IntentListView.this.getContext(), android.R.layout.simple_list_item_1); - } - - @Override - public View getView(final int position, final View convertView, final ViewGroup parent) { - final LayoutInflater inflater = ((Activity) getContext()).getLayoutInflater(); - final TextView view = (TextView) inflater.inflate(android.R.layout.simple_list_item_1, parent, false); - - final Intent item = getItem(position); - - view.setText(IntentGenerator.getTitle(item)); - view.setCompoundDrawablePadding((int) getResources().getDimension(R.dimen.icon_margin)); - - // get icon and scale it manually to ensure that all have the same size - final DisplayMetrics dm = new DisplayMetrics(); - ((Activity) getContext()).getWindowManager().getDefaultDisplay().getMetrics(dm); - final float densityScale = dm.density; - final float scaledWidth = MDPI_PX * densityScale; - final float scaledHeight = MDPI_PX * densityScale; - - try { - final Drawable icon = mPackageManager.getActivityIcon(item); - icon.setBounds(0, 0, Math.round(scaledWidth), Math.round(scaledHeight)); - view.setCompoundDrawables(icon, null, null, null); - } catch (final NameNotFoundException e) { - Log.e(e); - } - - return view; - } - } -}