summaryrefslogtreecommitdiff
path: root/org.fox.ttcomics
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2015-06-09 20:07:56 +0300
committerAndrew Dolgov <[email protected]>2015-06-09 20:07:56 +0300
commit248103410a656e9d66cc8208cd5af205d196aa09 (patch)
tree1cbdea1cadbcc68d6577b0d677c6fde0897cdd85 /org.fox.ttcomics
parent01558ce1b04eb11e46f334fd626409a273ef0055 (diff)
add viewholder, speed up comics list a bit
Diffstat (limited to 'org.fox.ttcomics')
-rw-r--r--org.fox.ttcomics/src/main/java/org/fox/ttcomics2/ComicListFragment.java131
-rw-r--r--org.fox.ttcomics/src/main/java/org/fox/ttcomics2/CommonActivity.java2
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)