From 1cd86a2346b69700550867a37284b9011b939280 Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 14 Oct 2012 00:44:17 +0400 Subject: tabs updates, implement browsing subdirectories --- src/org/fox/ttcomics/CbzComicArchive.java | 4 +- src/org/fox/ttcomics/ComicArchive.java | 9 +++ src/org/fox/ttcomics/ComicListFragment.java | 49 ++++++++++----- src/org/fox/ttcomics/CommonActivity.java | 17 +----- src/org/fox/ttcomics/MainActivity.java | 95 ++++++++++++++++++++++++----- 5 files changed, 128 insertions(+), 46 deletions(-) create mode 100644 src/org/fox/ttcomics/ComicArchive.java (limited to 'src') diff --git a/src/org/fox/ttcomics/CbzComicArchive.java b/src/org/fox/ttcomics/CbzComicArchive.java index ab53b85..753321a 100644 --- a/src/org/fox/ttcomics/CbzComicArchive.java +++ b/src/org/fox/ttcomics/CbzComicArchive.java @@ -11,17 +11,19 @@ import java.util.zip.ZipFile; import android.util.Log; -public class CbzComicArchive { +public class CbzComicArchive extends ComicArchive { private final String TAG = this.getClass().getSimpleName(); private ZipFile m_zipFile; private int m_count; private ArrayList m_entries = new ArrayList(); + @Override public int getCount() { return m_count; } + @Override public InputStream getItem(int index) throws IOException { return m_zipFile.getInputStream(m_entries.get(index)); } diff --git a/src/org/fox/ttcomics/ComicArchive.java b/src/org/fox/ttcomics/ComicArchive.java new file mode 100644 index 0000000..1dedda6 --- /dev/null +++ b/src/org/fox/ttcomics/ComicArchive.java @@ -0,0 +1,9 @@ +package org.fox.ttcomics; + +import java.io.IOException; +import java.io.InputStream; + +public abstract class ComicArchive { + public abstract int getCount(); + public abstract InputStream getItem(int index) throws IOException; +} diff --git a/src/org/fox/ttcomics/ComicListFragment.java b/src/org/fox/ttcomics/ComicListFragment.java index 3330ba8..e1acec6 100644 --- a/src/org/fox/ttcomics/ComicListFragment.java +++ b/src/org/fox/ttcomics/ComicListFragment.java @@ -42,11 +42,16 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { private ComicsListAdapter m_adapter; private ArrayList m_files = new ArrayList(); private int m_mode = 0; + private String m_baseDirectory = ""; public ComicListFragment() { super(); } + public void setBaseDirectory(String baseDirectory) { + m_baseDirectory = baseDirectory; + } + public ComicListFragment(int mode) { super(); @@ -89,7 +94,6 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { if (info != null) { if (size != -1) { info.setText(getString(R.string.file_progress_info, lastPos+1, size)); - info.setVisibility(View.VISIBLE); } else { info.setVisibility(View.GONE); } @@ -98,25 +102,30 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { ProgressBar progressBar = (ProgressBar) v.findViewById(R.id.file_progress_bar); if (progressBar != null) { - progressBar.setMax(size); - progressBar.setProgress(lastPos); + if (size != -1) { + progressBar.setMax(size); + progressBar.setProgress(lastPos); + } else { + progressBar.setVisibility(View.GONE); + } } File thumbnailFile = new File(Environment.getExternalStorageDirectory() + "/" + m_activity.THUMBNAIL_PATH + "/" + fileName); + + ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail); - if (thumbnailFile.exists()) { - ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail); - - if (thumbnail != null) { + if (thumbnail != null) { + if (thumbnailFile.exists()) { Bitmap bmp = BitmapFactory.decodeFile(thumbnailFile.getAbsolutePath()); if (bmp != null) { thumbnail.setImageBitmap(bmp); } + } else { + thumbnail.setImageResource(R.drawable.ic_launcher); } - - } - + } + return v; } } @@ -220,7 +229,7 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { protected Integer doInBackground(String... params) { String comicsDir = params[0]; - File dir = new File(comicsDir); + File dir = new File(comicsDir + "/" + m_baseDirectory); m_files.clear(); @@ -235,9 +244,12 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { for (File archive : archives) { String fileName = archive.getName(); - if (fileName.toLowerCase().matches(".*\\.(cbz|zip)") && isAdded() && m_activity != null) { + if (archive.isDirectory() && m_mode == 0) { + m_files.add(archive.getName()); + + } else if (fileName.toLowerCase().matches(".*\\.(cbz|zip)") && isAdded() && m_activity != null) { try { - CbzComicArchive cba = new CbzComicArchive(comicsDir + "/" + fileName); + CbzComicArchive cba = new CbzComicArchive(archive.getAbsolutePath()); if (cba.getCount() > 0) { // Get cover @@ -267,17 +279,24 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { e.printStackTrace(); } + int lastPos = m_activity.getLastPosition(fileName); + switch (m_mode) { case 0: m_files.add(fileName); break; case 1: - if (m_activity.getLastPosition(fileName) != cba.getCount()-1) { + if (lastPos == 0) { m_files.add(fileName); } break; case 2: - if (m_activity.getLastPosition(fileName) == cba.getCount()-1) { + if (lastPos > 0 && lastPos != cba.getCount()-1) { + m_files.add(fileName); + } + break; + case 3: + if (lastPos == cba.getCount()-1) { m_files.add(fileName); } break; diff --git a/src/org/fox/ttcomics/CommonActivity.java b/src/org/fox/ttcomics/CommonActivity.java index 8dee569..c768f70 100644 --- a/src/org/fox/ttcomics/CommonActivity.java +++ b/src/org/fox/ttcomics/CommonActivity.java @@ -1,5 +1,7 @@ package org.fox.ttcomics; +import java.io.File; + import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -40,20 +42,7 @@ public class CommonActivity extends FragmentActivity { public void onComicArchiveSelected(String fileName) { - - Intent intent = new Intent(CommonActivity.this, - ViewComicActivity.class); - - intent.putExtra("fileName", fileName); - - startActivityForResult(intent, 0); - - /* FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - - ft.replace(R.id.comics_list, new ComicPager(fileName), FRAG_COMICS_LIST); - ft.addToBackStack(null); - - ft.commit(); */ + // } public void setSize(String fileName, int size) { diff --git a/src/org/fox/ttcomics/MainActivity.java b/src/org/fox/ttcomics/MainActivity.java index a14d5bf..452cda3 100644 --- a/src/org/fox/ttcomics/MainActivity.java +++ b/src/org/fox/ttcomics/MainActivity.java @@ -1,5 +1,7 @@ package org.fox.ttcomics; +import java.io.File; + import android.animation.LayoutTransition; import android.app.ActionBar; import android.app.ActionBar.Tab; @@ -20,6 +22,7 @@ public class MainActivity extends CommonActivity { private TabListener m_tabListener = new TabListener(); private int m_selectedTab; + private String m_baseDirectory = ""; private class TabListener implements ActionBar.TabListener { @@ -31,17 +34,12 @@ public class MainActivity extends CommonActivity { FragmentTransaction sft = getSupportFragmentManager().beginTransaction(); if (m_selectedTab != tab.getPosition() && m_selectedTab != -1) { - switch (tab.getPosition()) { - case 0: - sft.replace(R.id.comics_list, new ComicListFragment(), FRAG_COMICS_LIST); - break; - case 1: - sft.replace(R.id.comics_list, new ComicListFragment(1), FRAG_COMICS_LIST); - break; - case 2: - sft.replace(R.id.comics_list, new ComicListFragment(2), FRAG_COMICS_LIST); - break; - } + + ComicListFragment frag = new ComicListFragment(tab.getPosition()); + + frag.setBaseDirectory(m_baseDirectory); + + sft.replace(R.id.comics_list, frag, FRAG_COMICS_LIST); } m_selectedTab = tab.getPosition(); @@ -69,13 +67,27 @@ public class MainActivity extends CommonActivity { setSmallScreen(findViewById(R.id.tablet_layout_hack) == null); if (savedInstanceState == null) { + m_selectedTab = getIntent().getIntExtra("selectedTab", 0); + + Log.d(TAG, "selTab=" + m_selectedTab); + + ComicListFragment frag = new ComicListFragment(m_selectedTab); + + if (getIntent().getStringExtra("baseDir") != null) { + m_baseDirectory = getIntent().getStringExtra("baseDir"); + frag.setBaseDirectory(m_baseDirectory); + } + FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); - ft.replace(R.id.comics_list, new ComicListFragment(), FRAG_COMICS_LIST); - ft.commit(); + ft.replace(R.id.comics_list, frag, FRAG_COMICS_LIST); + ft.commit(); + + m_selectedTab = -1; } else { m_selectedTab = -1; + m_baseDirectory = savedInstanceState.getString("baseDir"); } - + ActionBar actionBar = getActionBar(); actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS); @@ -87,13 +99,19 @@ public class MainActivity extends CommonActivity { actionBar.addTab(getActionBar().newTab() .setText(R.string.tab_unread) .setTabListener(m_tabListener)); - + actionBar.addTab(getActionBar().newTab() - .setText(R.string.tab_finished) + .setText(R.string.tab_unfinished) + .setTabListener(m_tabListener)); + + actionBar.addTab(getActionBar().newTab() + .setText(R.string.tab_read) .setTabListener(m_tabListener)); if (savedInstanceState != null) { m_selectedTab = savedInstanceState.getInt("selectedTab"); + } else { + m_selectedTab = getIntent().getIntExtra("selectedTab", 0); } actionBar.selectTab(actionBar.getTabAt(m_selectedTab)); @@ -120,6 +138,8 @@ public class MainActivity extends CommonActivity { alert.show(); } + actionBar.setDisplayHomeAsUpEnabled(m_baseDirectory.length() > 0); + ((ViewGroup)findViewById(R.id.comics_list)).setLayoutTransition(new LayoutTransition()); } @@ -134,6 +154,49 @@ public class MainActivity extends CommonActivity { super.onSaveInstanceState(out); out.putInt("selectedTab", m_selectedTab); + out.putString("baseDir", m_baseDirectory); + } + + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case android.R.id.home: + if (m_baseDirectory.length() > 0) { + finish(); + } + return true; + default: + Log.d(TAG, + "onOptionsItemSelected, unhandled id=" + item.getItemId()); + return super.onOptionsItemSelected(item); + } } + + @Override + public void onComicArchiveSelected(String fileName) { + super.onComicArchiveSelected(fileName); + + File file = new File(m_prefs.getString("comics_directory", "") + "/" + fileName); + + if (file.isDirectory()) { + Intent intent = new Intent(MainActivity.this, + MainActivity.class); + + intent.putExtra("baseDir", fileName); + intent.putExtra("selectedTab", m_selectedTab); + + startActivityForResult(intent, 0); + + + + } else if (file.canRead()) { + Intent intent = new Intent(MainActivity.this, + ViewComicActivity.class); + + intent.putExtra("fileName", fileName); + + startActivityForResult(intent, 0); + } + } + } -- cgit v1.2.3