diff options
author | Andrew Dolgov <[email protected]> | 2015-06-09 20:07:56 +0300 |
---|---|---|
committer | Andrew Dolgov <[email protected]> | 2015-06-09 20:07:56 +0300 |
commit | 248103410a656e9d66cc8208cd5af205d196aa09 (patch) | |
tree | 1cbdea1cadbcc68d6577b0d677c6fde0897cdd85 | |
parent | 01558ce1b04eb11e46f334fd626409a273ef0055 (diff) |
add viewholder, speed up comics list a bit
-rw-r--r-- | org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java | 131 | ||||
-rw-r--r-- | org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java | 2 |
2 files changed, 83 insertions, 50 deletions
diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java index 6060c09..be32ca9 100644 --- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java @@ -20,6 +20,7 @@ import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; +import android.widget.AbsListView; import android.widget.AdapterView; import android.widget.AdapterView.AdapterContextMenuInfo; import android.widget.AdapterView.OnItemClickListener; @@ -57,6 +58,7 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { private String m_baseDirectory = ""; private SwipeRefreshLayout m_swipeLayout; private AnimationAdapter m_animationAdapter; + private ImageLoader m_imageLoader = ImageLoader.getInstance(); public ComicListFragment() { super(); @@ -69,8 +71,27 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { public void setMode(int mode) { m_mode = mode; } - + + static class ComicsViewHolder { + TextView name; + TextView info; + ProgressBar progressBar; + ImageView overflow; + ImageView thumbnail; + + public ComicsViewHolder(View v) { + name = (TextView) v.findViewById(R.id.file_name); + info = (TextView) v.findViewById(R.id.file_progress_info); + progressBar = (ProgressBar) v.findViewById(R.id.file_progress_bar); + overflow = (ImageView) v.findViewById(R.id.overflow); + thumbnail = (ImageView) v.findViewById(R.id.thumbnail); + + } + + } + private class ComicsListAdapter extends SimpleCursorAdapter { + public ComicsListAdapter(Context context, int layout, Cursor c, String[] from, int[] to, int flags) { super(context, layout, c, from, to, flags); @@ -79,7 +100,7 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { @Override public View getView(int position, View convertView, ViewGroup parent) { - View v = convertView; + //View v = convertView; Cursor c = (Cursor) getItem(position); @@ -87,68 +108,67 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { String fileBaseName = c.getString(c.getColumnIndex("filename")); String firstChild = c.getString(c.getColumnIndex("firstchild")); - int lastPos = m_activity.getLastPosition(filePath + "/" + fileBaseName); - int size = m_activity.getSize(filePath + "/" + fileBaseName); + int lastPos = c.getInt(c.getColumnIndex("position")); + int size = c.getInt(c.getColumnIndex("size")); + + ComicsViewHolder holder; - if (v == null) { + if (convertView == null) { LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE); - v = vi.inflate(R.layout.comics_grid_row, null); + convertView = vi.inflate(R.layout.comics_grid_row, null); + + holder = new ComicsViewHolder(convertView); + convertView.setTag(holder); + } else { + holder = (ComicsViewHolder) convertView.getTag(); } - TextView name = (TextView) v.findViewById(R.id.file_name); - - if (name != null) { - name.setText(fileBaseName); + if (holder.name != null) { + holder.name.setText(fileBaseName); } - TextView info = (TextView) v.findViewById(R.id.file_progress_info); - - if (info != null) { + if (holder.info != null) { if (size != -1 && size != SIZE_DIR) { if (lastPos == size - 1) { - info.setText(getString(R.string.file_finished)); + holder.info.setText(getString(R.string.file_finished)); } else if (lastPos > 0) { - info.setText(getString(R.string.file_progress_info, lastPos + 1, size, (int) (lastPos / (float) size * 100f))); + holder.info.setText(getString(R.string.file_progress_info, lastPos + 1, size, (int) (lastPos / (float) size * 100f))); } else { - info.setText(getString(R.string.file_unread, size)); + holder.info.setText(getString(R.string.file_unread, size)); } - info.setVisibility(View.VISIBLE); + holder.info.setVisibility(View.VISIBLE); } else if (size == SIZE_DIR) { - info.setText(getString(R.string.list_type_directory)); - info.setVisibility(View.VISIBLE); + holder.info.setText(getString(R.string.list_type_directory)); + holder.info.setVisibility(View.VISIBLE); } else { - info.setText(getString(R.string.list_type_unknown)); - info.setVisibility(View.VISIBLE); + holder.info.setText(getString(R.string.list_type_unknown)); + holder.info.setVisibility(View.VISIBLE); } } - - ProgressBar progressBar = (ProgressBar) v.findViewById(R.id.file_progress_bar); - - if (progressBar != null) { + + if (holder.progressBar != null) { if (size != -1 && size != SIZE_DIR) { - progressBar.setMax(size - 1); - progressBar.setProgress(lastPos); - progressBar.setEnabled(true); - progressBar.setVisibility(View.VISIBLE); + holder.progressBar.setMax(size - 1); + holder.progressBar.setProgress(lastPos); + holder.progressBar.setEnabled(true); + holder.progressBar.setVisibility(View.VISIBLE); } else { - progressBar.setProgress(0); - progressBar.setMax(0); - progressBar.setEnabled(false); - progressBar.setVisibility(View.VISIBLE); + holder.progressBar.setProgress(0); + holder.progressBar.setMax(0); + holder.progressBar.setEnabled(false); + holder.progressBar.setVisibility(View.VISIBLE); } } - ImageView overflow = (ImageView) v.findViewById(R.id.overflow); - - if (overflow != null) { + if (holder.overflow != null) { if (size == SIZE_DIR) { - overflow.setImageResource(R.drawable.ic_folder); + holder.overflow.setImageResource(R.drawable.ic_folder); } else { - overflow.setImageResource(R.drawable.ic_dots_vertical); + holder.overflow.setImageResource(R.drawable.ic_dots_vertical); - overflow.setOnClickListener(new View.OnClickListener() { + holder.overflow.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { @@ -159,18 +179,18 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { } File thumbnailFile = new File(m_activity.getCacheFileName(firstChild != null ? firstChild : filePath + "/" + fileBaseName)); - - ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail); - - if (thumbnail != null && thumbnailFile != null && thumbnailFile.exists()) { - ImageLoader imageLoader = ImageLoader.getInstance(); - imageLoader.displayImage("file://" + thumbnailFile.getAbsolutePath(), thumbnail); + if (holder.thumbnail != null && thumbnailFile != null && thumbnailFile.exists()) { + + if (!thumbnailFile.getAbsolutePath().equals(holder.thumbnail.getTag())) { + m_imageLoader.displayImage("file://" + thumbnailFile.getAbsolutePath(), holder.thumbnail); + holder.thumbnail.setTag(thumbnailFile.getAbsolutePath()); + } } else { - thumbnail.setImageDrawable(null); + holder.thumbnail.setImageDrawable(null); } - return v; + return convertView; } } @@ -222,6 +242,21 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { grid.setAdapter(m_animationAdapter); grid.setOnTouchListener(new ShowHideOnScroll(fab)); + grid.setOnScrollListener(new AbsListView.OnScrollListener() { + @Override + public void onScrollStateChanged(AbsListView view, int scrollState) { + if (scrollState == AbsListView.OnScrollListener.SCROLL_STATE_FLING || scrollState == AbsListView.OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) { + m_imageLoader.pause(); + } else { + m_imageLoader.resume(); + } + } + + @Override + public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) { + + } + }); grid.setEmptyView(view.findViewById(R.id.no_comics)); grid.setOnItemClickListener(this); @@ -300,7 +335,7 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { selectionArgs = new String[] { baseDir }; } - return m_activity.getReadableDb().query("comics_cache", new String[] { BaseColumns._ID, "filename", "path", + return m_activity.getReadableDb().query("comics_cache", new String[] { BaseColumns._ID, "filename", "path", "position", "size", "(SELECT path || '/' || filename FROM comics_cache AS t2 WHERE t2.path = comics_cache.path || '/' || comics_cache.filename AND filename != '' ORDER BY filename LIMIT 1) AS firstchild" }, selection, selectionArgs, null, null, "size != " + SIZE_DIR + ", filename, size = " + SIZE_DIR + ", filename"); } diff --git a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java index da2198d..d0fe0f4 100644 --- a/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java +++ b/org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java @@ -26,7 +26,6 @@ import android.widget.Toast; import com.nostra13.universalimageloader.core.DisplayImageOptions; import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; -import com.nostra13.universalimageloader.core.display.FadeInBitmapDisplayer; import java.io.File; import java.security.MessageDigest; @@ -63,7 +62,6 @@ public class CommonActivity extends ActionBarActivity { .cacheInMemory(true) .resetViewBeforeLoading(true) .cacheOnDisk(false) - .displayer(new FadeInBitmapDisplayer(250)) .build(); ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this) |