summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/org/fox/ttcomics/CbzComicArchive.java42
-rw-r--r--src/org/fox/ttcomics/ComicFragment.java65
-rw-r--r--src/org/fox/ttcomics/ComicListFragment.java341
-rw-r--r--src/org/fox/ttcomics/ComicPager.java139
-rw-r--r--src/org/fox/ttcomics/CommonActivity.java123
-rw-r--r--src/org/fox/ttcomics/MainActivity.java134
-rw-r--r--src/org/fox/ttcomics/PreferencesActivity.java19
-rw-r--r--src/org/fox/ttcomics/ViewComicActivity.java73
8 files changed, 936 insertions, 0 deletions
diff --git a/src/org/fox/ttcomics/CbzComicArchive.java b/src/org/fox/ttcomics/CbzComicArchive.java
new file mode 100644
index 0000000..a3464c6
--- /dev/null
+++ b/src/org/fox/ttcomics/CbzComicArchive.java
@@ -0,0 +1,42 @@
+package org.fox.ttcomics;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import android.util.Log;
+
+public class CbzComicArchive {
+ private final String TAG = this.getClass().getSimpleName();
+
+ private ZipFile m_zipFile;
+ private int m_count;
+ private ArrayList<ZipEntry> m_entries = new ArrayList<ZipEntry>();
+
+ public int getCount() {
+ return m_count;
+ }
+
+ public InputStream getItem(int index) throws IOException {
+ return m_zipFile.getInputStream(m_entries.get(index));
+ }
+
+ public CbzComicArchive(String fileName) throws IOException {
+ m_zipFile = new ZipFile(fileName);
+
+ Enumeration<? extends ZipEntry> e = m_zipFile.entries();
+
+ while (e.hasMoreElements()) {
+ ZipEntry ze = e.nextElement();
+ if (!ze.isDirectory() && ze.getName().toLowerCase().matches(".*\\.(jpg|bmp|gif)$")) {
+ m_entries.add(ze);
+ m_count++;
+ }
+ }
+
+ }
+
+}
diff --git a/src/org/fox/ttcomics/ComicFragment.java b/src/org/fox/ttcomics/ComicFragment.java
new file mode 100644
index 0000000..e1a753b
--- /dev/null
+++ b/src/org/fox/ttcomics/ComicFragment.java
@@ -0,0 +1,65 @@
+package org.fox.ttcomics;
+
+import java.io.InputStream;
+
+import android.app.Activity;
+import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+
+public class ComicFragment extends Fragment {
+ private final String TAG = this.getClass().getSimpleName();
+
+ private SharedPreferences m_prefs;
+ private Bitmap m_comic;
+
+ public ComicFragment() {
+ super();
+ }
+
+ public ComicFragment(InputStream is) {
+ super();
+ m_comic = BitmapFactory.decodeStream(is);
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ View view = inflater.inflate(R.layout.fragment_comic, container, false);
+
+ ImageView image = (ImageView) view.findViewById(R.id.comic_image);
+
+ if (savedInstanceState != null) {
+ m_comic = savedInstanceState.getParcelable("comic");
+ }
+
+ if (m_comic != null) {
+ image.setImageBitmap(m_comic);
+ }
+
+ return view;
+
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle out) {
+ super.onSaveInstanceState(out);
+
+ out.putParcelable("comic", m_comic);
+ }
+
+}
diff --git a/src/org/fox/ttcomics/ComicListFragment.java b/src/org/fox/ttcomics/ComicListFragment.java
new file mode 100644
index 0000000..533970a
--- /dev/null
+++ b/src/org/fox/ttcomics/ComicListFragment.java
@@ -0,0 +1,341 @@
+package org.fox.ttcomics;
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.ArrayList;
+
+import android.app.Activity;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.graphics.Bitmap;
+import android.graphics.BitmapFactory;
+import android.os.AsyncTask;
+import android.os.Bundle;
+import android.os.Environment;
+import android.preference.PreferenceManager;
+import android.support.v4.app.Fragment;
+import android.util.Log;
+import android.view.ContextMenu;
+import android.view.ContextMenu.ContextMenuInfo;
+import android.view.LayoutInflater;
+import android.view.MenuItem;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.AdapterView.AdapterContextMenuInfo;
+import android.widget.ArrayAdapter;
+import android.widget.GridView;
+import android.widget.ImageView;
+import android.widget.ListView;
+import android.widget.AdapterView.OnItemClickListener;
+import android.widget.ProgressBar;
+import android.widget.TextView;
+
+public class ComicListFragment extends Fragment implements OnItemClickListener {
+ private final String TAG = this.getClass().getSimpleName();
+
+ private CommonActivity m_activity;
+ private SharedPreferences m_prefs;
+ private ComicsListAdapter m_adapter;
+ private ArrayList<String> m_files = new ArrayList<String>();
+ private int m_mode = 0;
+
+ public ComicListFragment() {
+ super();
+ }
+
+ public ComicListFragment(int mode) {
+ super();
+
+ m_mode = mode;
+ }
+
+ private class ComicsListAdapter extends ArrayAdapter<String> {
+ private ArrayList<String> items;
+
+ public ComicsListAdapter(Context context, int textViewResourceId, ArrayList<String> items) {
+ super(context, textViewResourceId, items);
+ this.items = items;
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+ View v = convertView;
+
+ String fileName = items.get(position);
+
+ int lastPos = m_activity.getLastPosition(fileName);
+ int size = m_activity.getSize(fileName);
+
+ if (v == null) {
+ LayoutInflater vi = (LayoutInflater)getActivity().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
+
+
+ v = vi.inflate(m_activity.isPortrait() ? R.layout.comics_list_row : R.layout.comics_grid_row, null);
+
+ }
+
+ TextView name = (TextView) v.findViewById(R.id.file_name);
+
+ if (name != null) {
+ name.setText(fileName);
+ }
+
+ TextView info = (TextView) v.findViewById(R.id.file_progress_info);
+
+ 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);
+ }
+ }
+
+ ProgressBar progressBar = (ProgressBar) v.findViewById(R.id.file_progress_bar);
+
+ if (progressBar != null) {
+ progressBar.setMax(size);
+ progressBar.setProgress(lastPos);
+ }
+
+ File thumbnailFile = new File(Environment.getExternalStorageDirectory() + "/" + m_activity.THUMBNAIL_PATH + "/" + fileName);
+
+ if (thumbnailFile.exists()) {
+ ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail);
+
+ if (thumbnail != null) {
+ Bitmap bmp = BitmapFactory.decodeFile(thumbnailFile.getAbsolutePath());
+
+ if (bmp != null) {
+ thumbnail.setImageBitmap(bmp);
+ }
+ }
+
+ }
+
+ return v;
+ }
+ }
+
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ View view = inflater.inflate(R.layout.fragment_comics_list, container, false);
+
+ if (savedInstanceState != null) {
+ m_mode = savedInstanceState.getInt("mode");
+ }
+
+ m_adapter = new ComicsListAdapter(getActivity(), R.layout.comics_list_row, m_files);
+
+ if (m_activity.isPortrait()) {
+ ListView list = (ListView) view.findViewById(R.id.comics_list);
+ list.setAdapter(m_adapter);
+ list.setEmptyView(view.findViewById(R.id.no_comics));
+ list.setOnItemClickListener(this);
+
+ registerForContextMenu(list);
+
+ } else {
+ GridView grid = (GridView) view.findViewById(R.id.comics_grid);
+ grid.setAdapter(m_adapter);
+ grid.setEmptyView(view.findViewById(R.id.no_comics));
+ grid.setOnItemClickListener(this);
+
+ registerForContextMenu(grid);
+
+ }
+
+ return view;
+ }
+
+ @Override
+ public void onCreateContextMenu(ContextMenu menu, View v,
+ ContextMenuInfo menuInfo) {
+
+ getActivity().getMenuInflater().inflate(R.menu.comic_archive_context, menu);
+
+ // menu.setTitle(..); etc
+
+ super.onCreateContextMenu(menu, v, menuInfo);
+ }
+
+ @Override
+ public boolean onContextItemSelected(MenuItem item) {
+ AdapterContextMenuInfo info = (AdapterContextMenuInfo) item
+ .getMenuInfo();
+
+ String fileName = m_adapter.getItem(info.position);
+
+ switch (item.getItemId()) {
+ case R.id.menu_reset_progress:
+ if (fileName != null) {
+ m_activity.setLastPosition(fileName, 0);
+ m_adapter.notifyDataSetChanged();
+ }
+ return true;
+ case R.id.menu_mark_as_read:
+
+ if (fileName != null) {
+ m_activity.setLastPosition(fileName, m_activity.getSize(fileName)-1);
+ m_adapter.notifyDataSetChanged();
+ }
+
+ return true;
+ default:
+ Log.d(TAG, "onContextItemSelected, unhandled id=" + item.getItemId());
+ return super.onContextItemSelected(item);
+ }
+ }
+
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ m_activity = (CommonActivity)activity;
+
+ m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
+ }
+
+ protected void rescan() {
+
+ AsyncTask<String, Integer, Integer> rescanTask = new AsyncTask<String, Integer, Integer>() {
+
+ @Override
+ protected void onProgressUpdate(Integer... progress) {
+ m_activity.setProgress(Math.round(((float)progress[0] / (float)progress[1]) * 10000));
+ }
+
+ @Override
+ protected Integer doInBackground(String... params) {
+ String comicsDir = params[0];
+
+ File dir = new File(comicsDir);
+
+ m_files.clear();
+
+ File storage = Environment.getExternalStorageDirectory();
+
+ if (dir.isDirectory()) {
+ File archives[] = dir.listFiles();
+ int fileIndex = 0;
+
+ java.util.Arrays.sort(archives);
+
+ for (File archive : archives) {
+ String fileName = archive.getName();
+
+ if (fileName.indexOf(".cbz") != -1 && isAdded() && m_activity != null) {
+ try {
+ CbzComicArchive cba = new CbzComicArchive(comicsDir + "/" + fileName);
+
+ if (cba.getCount() > 0) {
+ // Get cover
+
+ try {
+ InputStream is = cba.getItem(0);
+
+ File thumbnailDir = new File(storage.getAbsolutePath() + "/" + m_activity.THUMBNAIL_PATH);
+
+ if (!thumbnailDir.isDirectory()) { thumbnailDir.mkdirs(); };
+
+ if (thumbnailDir.isDirectory()) {
+ FileOutputStream fos = new FileOutputStream(thumbnailDir.getAbsolutePath() + "/" + fileName);
+
+ byte[] buffer = new byte[1024];
+ int len = 0;
+ while ((len = is.read(buffer)) != -1) {
+ fos.write(buffer, 0, len);
+ }
+
+ fos.close();
+ is.close();
+ }
+ } catch (IOException e) {
+ e.printStackTrace();
+ }
+
+ switch (m_mode) {
+ case 0:
+ m_files.add(fileName);
+ break;
+ case 1:
+ if (m_activity.getLastPosition(fileName) != cba.getCount()-1) {
+ m_files.add(fileName);
+ }
+ break;
+ case 2:
+ if (m_activity.getLastPosition(fileName) == cba.getCount()-1) {
+ m_files.add(fileName);
+ }
+ break;
+ }
+
+ m_activity.setSize(fileName, cba.getCount());
+ }
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+ }
+
+ ++fileIndex;
+
+ publishProgress(Integer.valueOf(fileIndex), Integer.valueOf(archives.length));
+ }
+ }
+
+ return m_files.size();
+ }
+
+ @Override
+ protected void onPostExecute(Integer result) {
+ if (isAdded() && m_adapter != null) {
+ m_adapter.notifyDataSetChanged();
+ }
+ }
+ };
+
+ String comicsDir = m_prefs.getString("comics_directory", null);
+
+ if (comicsDir != null) {
+ rescanTask.execute(comicsDir);
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ if (m_files.size() == 0) {
+ rescan();
+ } else {
+ m_adapter.notifyDataSetChanged();
+ }
+ }
+
+ public void onItemClick(AdapterView<?> av, View view, int position, long id) {
+ Log.d(TAG, "onItemClick position=" + position);
+
+ String fileName = m_adapter.getItem(position);
+
+ if (fileName != null) {
+ m_activity.onComicArchiveSelected(fileName);
+ }
+ }
+
+
+ @Override
+ public void onSaveInstanceState(Bundle out) {
+ super.onSaveInstanceState(out);
+
+ out.putInt("mode", m_mode);
+ }
+
+}
diff --git a/src/org/fox/ttcomics/ComicPager.java b/src/org/fox/ttcomics/ComicPager.java
new file mode 100644
index 0000000..3fc210d
--- /dev/null
+++ b/src/org/fox/ttcomics/ComicPager.java
@@ -0,0 +1,139 @@
+package org.fox.ttcomics;
+
+import java.io.IOException;
+import java.io.InputStream;
+
+import android.annotation.SuppressLint;
+import android.app.Activity;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.FragmentManager;
+import android.support.v4.app.FragmentStatePagerAdapter;
+import android.support.v4.view.ViewPager;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+public class ComicPager extends Fragment {
+ private String m_fileName;
+ private SharedPreferences m_prefs;
+ private final String TAG = this.getClass().getSimpleName();
+ private CbzComicArchive m_archive;
+ private CommonActivity m_activity;
+
+ private class PagerAdapter extends FragmentStatePagerAdapter {
+ public PagerAdapter(FragmentManager fm) {
+ super(fm);
+ }
+
+ @Override
+ public Fragment getItem(int position) {
+ Log.d(TAG, "getItem=" + position);
+
+ try {
+ return new ComicFragment(m_archive.getItem(position));
+
+ } catch (IOException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
+ }
+
+ return null;
+ }
+
+ @Override
+ public int getCount() {
+ return m_archive.getCount();
+ }
+
+ }
+
+ private PagerAdapter m_adapter;
+
+ public ComicPager() {
+ super();
+ }
+
+ public ComicPager(String fileName) {
+ super();
+
+ m_fileName = fileName;
+ }
+
+ @SuppressLint("NewApi")
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
+ final View view = inflater.inflate(R.layout.fragment_comics_pager, container, false);
+
+ m_adapter = new PagerAdapter(getActivity().getSupportFragmentManager());
+
+ ViewPager pager = (ViewPager) view.findViewById(R.id.comics_pager);
+
+ if (savedInstanceState != null) {
+ m_fileName = savedInstanceState.getString("fileName");
+ }
+
+ try {
+ m_archive = new CbzComicArchive(m_prefs.getString("comics_directory", "") + "/" + m_fileName);
+
+ int position = m_activity.getLastPosition(m_fileName);
+
+ pager.setAdapter(m_adapter);
+ pager.setCurrentItem(position);
+ m_activity.setProgress(Math.round(((float)position / (float)m_archive.getCount()) * 10000));
+
+ } catch (IOException e) {
+
+ // TODO Can't open comic, display error...
+
+ e.printStackTrace();
+ }
+
+ pager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
+
+ public void onPageSelected(int position) {
+ m_activity.onComicSelected(m_fileName, position);
+
+ m_activity.setProgress(Math.round(((float)position / (float)m_archive.getCount()) * 10000));
+
+ if (m_prefs.getBoolean("dim_status_bar", false)) {
+ view.setSystemUiVisibility(View.STATUS_BAR_HIDDEN);
+ }
+ }
+
+ public void onPageScrolled(int arg0, float arg1, int arg2) {
+ // TODO Auto-generated method stub
+
+ }
+
+ public void onPageScrollStateChanged(int arg0) {
+ // TODO Auto-generated method stub
+
+ }
+ });
+
+ return view;
+ }
+
+ @Override
+ public void onAttach(Activity activity) {
+ super.onAttach(activity);
+
+ m_activity = (CommonActivity) activity;
+
+ m_prefs = PreferenceManager.getDefaultSharedPreferences(activity.getApplicationContext());
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle out) {
+ super.onSaveInstanceState(out);
+
+ out.putString("fileName", m_fileName);
+ }
+
+
+}
diff --git a/src/org/fox/ttcomics/CommonActivity.java b/src/org/fox/ttcomics/CommonActivity.java
new file mode 100644
index 0000000..48a4b15
--- /dev/null
+++ b/src/org/fox/ttcomics/CommonActivity.java
@@ -0,0 +1,123 @@
+package org.fox.ttcomics;
+
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.FragmentActivity;
+import android.util.Log;
+import android.view.Display;
+import android.view.MenuItem;
+
+public class CommonActivity extends FragmentActivity {
+ private final String TAG = this.getClass().getSimpleName();
+
+ protected static final String FRAG_COMICS_PAGER = "comic_pager";
+ protected static final String FRAG_COMICS_LIST = "comics_list";
+
+ public static final String THUMBNAIL_PATH = "/data/org.fox.ttcomics/thumbnails/";
+
+ protected SharedPreferences m_prefs;
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ m_prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
+
+ }
+
+ 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) {
+ SharedPreferences lastread = getSharedPreferences("lastread", 0);
+
+ SharedPreferences.Editor editor = lastread.edit();
+ editor.putInt(fileName + ":size", size);
+
+ editor.commit();
+
+ }
+
+ public void setLastPosition(String fileName, int position) {
+ SharedPreferences lastread = getSharedPreferences("lastread", 0);
+
+ int lastPosition = getLastPosition(fileName);
+
+ SharedPreferences.Editor editor = lastread.edit();
+ editor.putInt(fileName + ":last", position);
+ editor.putInt(fileName + ":max", Math.max(lastPosition, position));
+
+ editor.commit();
+ }
+
+ public int getLastPosition(String fileName) {
+ SharedPreferences lastread = getSharedPreferences("lastread", 0);
+
+ return lastread.getInt(fileName + ":last", 0);
+ }
+
+ public int getMaxPosition(String fileName) {
+ SharedPreferences lastread = getSharedPreferences("lastread", 0);
+
+ return lastread.getInt(fileName + ":max", 0);
+ }
+
+ public int getSize(String fileName) {
+ SharedPreferences lastread = getSharedPreferences("lastread", 0);
+
+ return lastread.getInt(fileName + ":size", -1);
+ }
+
+ public void onComicSelected(String fileName, int position) {
+ setLastPosition(fileName, position);
+ }
+
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_rescan:
+ ComicListFragment frag = (ComicListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_LIST);
+
+ if (frag != null && frag.isAdded()) {
+ frag.rescan();
+ }
+
+ return true;
+ case R.id.menu_settings:
+ Intent intent = new Intent(CommonActivity.this,
+ PreferencesActivity.class);
+ startActivityForResult(intent, 0);
+ return true;
+ default:
+ Log.d(TAG,
+ "onOptionsItemSelected, unhandled id=" + item.getItemId());
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+ @SuppressWarnings("deprecation")
+ public boolean isPortrait() {
+ Display display = getWindowManager().getDefaultDisplay();
+
+ int width = display.getWidth();
+ int height = display.getHeight();
+
+ return width < height;
+ }
+
+}
diff --git a/src/org/fox/ttcomics/MainActivity.java b/src/org/fox/ttcomics/MainActivity.java
new file mode 100644
index 0000000..d8c58a0
--- /dev/null
+++ b/src/org/fox/ttcomics/MainActivity.java
@@ -0,0 +1,134 @@
+package org.fox.ttcomics;
+
+import android.app.ActionBar;
+import android.app.ActionBar.Tab;
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.content.Intent;
+import android.os.Bundle;
+import android.preference.PreferenceManager;
+import android.support.v4.app.FragmentTransaction;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.Window;
+
+public class MainActivity extends CommonActivity {
+ private final String TAG = this.getClass().getSimpleName();
+
+ private TabListener m_tabListener = new TabListener();
+
+ private class TabListener implements ActionBar.TabListener {
+
+ public void onTabReselected(Tab tab, android.app.FragmentTransaction ft) {
+ // TODO Auto-generated method stub
+ }
+
+ public void onTabSelected(Tab tab, android.app.FragmentTransaction ft) {
+ // TODO Auto-generated method stub
+
+ Log.d(TAG, "POS=" + tab.getPosition());
+
+ FragmentTransaction sft = getSupportFragmentManager().beginTransaction();
+
+ 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;
+ }
+
+ sft.commit();
+
+ }
+
+ public void onTabUnselected(Tab tab, android.app.FragmentTransaction ft) {
+ // TODO Auto-generated method stub
+
+ }
+
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ requestWindowFeature(Window.FEATURE_PROGRESS);
+
+ setContentView(R.layout.activity_main);
+
+ int tabIndex = 0;
+
+ if (savedInstanceState == null) {
+ FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+
+ ft.replace(R.id.comics_list, new ComicListFragment(), FRAG_COMICS_LIST);
+
+ ft.commit();
+ } else {
+ tabIndex = savedInstanceState.getInt("tabIndex");
+ }
+
+ ActionBar actionBar = getActionBar();
+
+ actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
+
+ actionBar.addTab(getActionBar().newTab()
+ .setText(R.string.tab_all_comics)
+ .setTabListener(m_tabListener));
+
+ actionBar.addTab(getActionBar().newTab()
+ .setText(R.string.tab_unread)
+ .setTabListener(m_tabListener));
+
+ actionBar.addTab(getActionBar().newTab()
+ .setText(R.string.tab_finished)
+ .setTabListener(m_tabListener));
+
+ if (tabIndex != 0) {
+ actionBar.selectTab(actionBar.getTabAt(tabIndex));
+ }
+
+
+ if (m_prefs.getString("comics_directory", null) == null) {
+ AlertDialog.Builder builder = new AlertDialog.Builder(this);
+ builder.setMessage(R.string.dialog_need_prefs_message)
+ .setCancelable(false)
+ .setPositiveButton(R.string.dialog_need_prefs_preferences, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ // launch preferences
+
+ Intent intent = new Intent(MainActivity.this,
+ PreferencesActivity.class);
+ startActivityForResult(intent, 0);
+ }
+ })
+ .setNegativeButton(R.string.cancel, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int id) {
+ dialog.cancel();
+ }
+ });
+ AlertDialog alert = builder.create();
+ alert.show();
+ }
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_main, menu);
+ return true;
+ }
+
+ @Override
+ public void onSaveInstanceState(Bundle out) {
+ super.onSaveInstanceState(out);
+
+ out.putInt("tabIndex", getActionBar().getSelectedTab().getPosition());
+ }
+
+}
diff --git a/src/org/fox/ttcomics/PreferencesActivity.java b/src/org/fox/ttcomics/PreferencesActivity.java
new file mode 100644
index 0000000..50df35c
--- /dev/null
+++ b/src/org/fox/ttcomics/PreferencesActivity.java
@@ -0,0 +1,19 @@
+package org.fox.ttcomics;
+
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceManager;
+
+public class PreferencesActivity extends PreferenceActivity {
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ SharedPreferences prefs = PreferenceManager
+ .getDefaultSharedPreferences(getApplicationContext());
+
+ addPreferencesFromResource(R.xml.preferences);
+ }
+}
diff --git a/src/org/fox/ttcomics/ViewComicActivity.java b/src/org/fox/ttcomics/ViewComicActivity.java
new file mode 100644
index 0000000..2387075
--- /dev/null
+++ b/src/org/fox/ttcomics/ViewComicActivity.java
@@ -0,0 +1,73 @@
+package org.fox.ttcomics;
+import android.annotation.SuppressLint;
+import android.content.Intent;
+import android.os.Bundle;
+import android.support.v4.app.FragmentTransaction;
+import android.util.Log;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.Window;
+
+public class ViewComicActivity extends CommonActivity {
+ private final String TAG = this.getClass().getSimpleName();
+
+ private String m_fileName;
+
+ @SuppressLint("NewApi")
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ requestWindowFeature(Window.FEATURE_PROGRESS);
+
+ setContentView(R.layout.activity_view_comic);
+
+ if (savedInstanceState == null) {
+ m_fileName = getIntent().getStringExtra("fileName");
+
+ FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
+ ft.replace(R.id.comics_pager_container, new ComicPager(m_fileName), FRAG_COMICS_PAGER);
+ ft.commit();
+ } else {
+ m_fileName = savedInstanceState.getString("fileName");
+ }
+
+ getActionBar().setDisplayHomeAsUpEnabled(true);
+ setTitle(m_fileName);
+ }
+
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ getMenuInflater().inflate(R.menu.activity_view_comic, menu);
+ return true;
+ }
+
+ /* public void onComicSelected(String fileName, int position, int size) {
+ super.onComicSelected(fileName, position, size);
+ } */
+
+ @Override
+ public void onSaveInstanceState(Bundle out) {
+ super.onSaveInstanceState(out);
+
+ out.putString("fileName", m_fileName);
+ }
+
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case R.id.menu_go_location:
+
+ // TODO display dialog: Beginning, Page..., Last unread
+
+ return true;
+ case android.R.id.home:
+ finish();
+ return true;
+ default:
+ Log.d(TAG,
+ "onOptionsItemSelected, unhandled id=" + item.getItemId());
+ return super.onOptionsItemSelected(item);
+ }
+ }
+
+}