summaryrefslogtreecommitdiff
path: root/src/org
diff options
context:
space:
mode:
authorAndrew Dolgov <[email protected]>2012-10-14 00:44:17 +0400
committerAndrew Dolgov <[email protected]>2012-10-14 00:44:17 +0400
commit1cd86a2346b69700550867a37284b9011b939280 (patch)
tree5b0d32ab91c99533cfed90921c88eb1db4afd8d7 /src/org
parent76fc2c28792817a7cd204caf486f3c0d5f9b779a (diff)
tabs updates, implement browsing subdirectories
Diffstat (limited to 'src/org')
-rw-r--r--src/org/fox/ttcomics/CbzComicArchive.java4
-rw-r--r--src/org/fox/ttcomics/ComicArchive.java9
-rw-r--r--src/org/fox/ttcomics/ComicListFragment.java49
-rw-r--r--src/org/fox/ttcomics/CommonActivity.java17
-rw-r--r--src/org/fox/ttcomics/MainActivity.java95
5 files changed, 128 insertions, 46 deletions
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<ZipEntry> m_entries = new ArrayList<ZipEntry>();
+ @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<String> m_files = new ArrayList<String>();
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);
+ }
+ }
+
}