From acf5bb61b1d71ad582619384d4c3326970645efd Mon Sep 17 00:00:00 2001 From: Andrew Dolgov Date: Sun, 14 Oct 2012 10:52:00 +0400 Subject: implement sharing, page numbers, and other stuff --- src/org/fox/ttcomics/ComicFragment.java | 17 +++++++- src/org/fox/ttcomics/ComicListFragment.java | 16 +++---- src/org/fox/ttcomics/ComicPager.java | 11 +++-- src/org/fox/ttcomics/CommonActivity.java | 12 +++-- src/org/fox/ttcomics/MainActivity.java | 1 + src/org/fox/ttcomics/ViewComicActivity.java | 68 ++++++++++++++++++++++++++--- 6 files changed, 98 insertions(+), 27 deletions(-) (limited to 'src') diff --git a/src/org/fox/ttcomics/ComicFragment.java b/src/org/fox/ttcomics/ComicFragment.java index 1fa585e..9aa42e8 100644 --- a/src/org/fox/ttcomics/ComicFragment.java +++ b/src/org/fox/ttcomics/ComicFragment.java @@ -14,20 +14,23 @@ import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ImageView; +import android.widget.TextView; public class ComicFragment extends Fragment { private final String TAG = this.getClass().getSimpleName(); private SharedPreferences m_prefs; private Bitmap m_comic; + private int m_page; public ComicFragment() { super(); } - public ComicFragment(InputStream is) { + public ComicFragment(InputStream is, int page) { super(); m_comic = BitmapFactory.decodeStream(is); + m_page = page; } @Override @@ -39,6 +42,7 @@ public class ComicFragment extends Fragment { if (savedInstanceState != null) { m_comic = savedInstanceState.getParcelable("comic"); + m_page = savedInstanceState.getInt("page"); } if (m_comic != null) { @@ -49,11 +53,19 @@ public class ComicFragment extends Fragment { public void onScaleChanged(float scale) { ViewPager pager = (ViewPager) getActivity().findViewById(R.id.comics_pager); - pager.setPagingEnabled(scale - 1.0f < 0.01); + if (pager != null) { + pager.setPagingEnabled(scale - 1.0f < 0.01); + } } }); } + TextView page = (TextView) view.findViewById(R.id.comic_page); + + if (page != null) { + page.setText(String.valueOf(m_page)); + } + return view; } @@ -70,6 +82,7 @@ public class ComicFragment extends Fragment { super.onSaveInstanceState(out); out.putParcelable("comic", m_comic); + out.putInt("page", m_page); } } diff --git a/src/org/fox/ttcomics/ComicListFragment.java b/src/org/fox/ttcomics/ComicListFragment.java index 4fe63df..7bf20e6 100644 --- a/src/org/fox/ttcomics/ComicListFragment.java +++ b/src/org/fox/ttcomics/ComicListFragment.java @@ -110,8 +110,8 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { } } - File thumbnailFile = new File(CommonActivity.getCacheFileName(file.getAbsolutePath())); - + File thumbnailFile = new File(m_activity.getCacheFileName(file.getAbsolutePath())); + ImageView thumbnail = (ImageView) v.findViewById(R.id.thumbnail); if (thumbnail != null) { @@ -261,14 +261,10 @@ public class ComicListFragment extends Fragment implements OnItemClickListener { try { InputStream is = cba.getItem(0); - File thumbnailDir = new File(storage.getAbsolutePath() + "/" + m_activity.THUMBNAIL_PATH); - - if (!thumbnailDir.isDirectory()) { thumbnailDir.mkdirs(); }; - - File thumbnailFile = new File(CommonActivity.getCacheFileName(filePath)); - - if (thumbnailDir.isDirectory() && !thumbnailFile.exists()) { - FileOutputStream fos = new FileOutputStream(thumbnailFile.getAbsolutePath()); + File thumbnailFile = new File(m_activity.getCacheFileName(filePath)); + + if (!thumbnailFile.exists() || fullRescan) { + FileOutputStream fos = new FileOutputStream(thumbnailFile); byte[] buffer = new byte[1024]; int len = 0; diff --git a/src/org/fox/ttcomics/ComicPager.java b/src/org/fox/ttcomics/ComicPager.java index 08e9c65..233fa59 100644 --- a/src/org/fox/ttcomics/ComicPager.java +++ b/src/org/fox/ttcomics/ComicPager.java @@ -18,7 +18,7 @@ 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 ComicArchive m_archive; private CommonActivity m_activity; private class PagerAdapter extends FragmentStatePagerAdapter { @@ -29,7 +29,7 @@ public class ComicPager extends Fragment { @Override public Fragment getItem(int position) { try { - return new ComicFragment(m_archive.getItem(position)); + return new ComicFragment(m_archive.getItem(position), position+1); } catch (IOException e) { // TODO Auto-generated catch block @@ -52,6 +52,10 @@ public class ComicPager extends Fragment { super(); } + public ComicArchive getArchive() { + return m_archive; + } + public int getCount() { return m_adapter.getCount(); } @@ -105,7 +109,8 @@ public class ComicPager extends Fragment { pager.setAdapter(m_adapter); pager.setCurrentItem(position); - m_activity.setProgress(Math.round(((float)position / (float)m_archive.getCount()) * 10000)); + + m_activity.onComicSelected(m_fileName, position); } catch (IOException e) { diff --git a/src/org/fox/ttcomics/CommonActivity.java b/src/org/fox/ttcomics/CommonActivity.java index 933778e..c0a2d01 100644 --- a/src/org/fox/ttcomics/CommonActivity.java +++ b/src/org/fox/ttcomics/CommonActivity.java @@ -4,6 +4,7 @@ import java.io.File; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.os.Bundle; @@ -13,14 +14,13 @@ import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.Display; import android.view.MenuItem; +import android.widget.ShareActionProvider; 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; @@ -152,12 +152,10 @@ public class CommonActivity extends FragmentActivity { return null; } - public static String getCacheFileName(String fileName) { - String hashedUrl = md5(fileName); - - File storage = Environment.getExternalStorageDirectory(); + public String getCacheFileName(String fileName) { + String hash = md5(fileName); - File file = new File(storage.getAbsolutePath() + THUMBNAIL_PATH + "/" + hashedUrl + ".png"); + File file = new File(getExternalCacheDir().getAbsolutePath() + "/" + hash + ".png"); return file.getAbsolutePath(); } diff --git a/src/org/fox/ttcomics/MainActivity.java b/src/org/fox/ttcomics/MainActivity.java index d0ffda1..38b22a5 100644 --- a/src/org/fox/ttcomics/MainActivity.java +++ b/src/org/fox/ttcomics/MainActivity.java @@ -15,6 +15,7 @@ import android.view.Menu; import android.view.MenuItem; import android.view.ViewGroup; import android.view.Window; +import android.widget.ShareActionProvider; public class MainActivity extends CommonActivity { private final String TAG = this.getClass().getSimpleName(); diff --git a/src/org/fox/ttcomics/ViewComicActivity.java b/src/org/fox/ttcomics/ViewComicActivity.java index c8cac2c..b0d6db2 100644 --- a/src/org/fox/ttcomics/ViewComicActivity.java +++ b/src/org/fox/ttcomics/ViewComicActivity.java @@ -1,10 +1,15 @@ package org.fox.ttcomics; import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Dialog; import android.content.DialogInterface; +import android.content.Intent; +import android.net.Uri; import android.os.Bundle; import android.support.v4.app.FragmentTransaction; import android.util.Log; @@ -13,12 +18,14 @@ import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.Window; +import android.view.WindowManager; import android.widget.NumberPicker; public class ViewComicActivity extends CommonActivity { private final String TAG = this.getClass().getSimpleName(); private String m_fileName; + private Menu m_menu; @SuppressLint("NewApi") @Override @@ -43,11 +50,20 @@ public class ViewComicActivity extends CommonActivity { getActionBar().setDisplayHomeAsUpEnabled(true); setTitle(new File(m_fileName).getName()); + + if (m_prefs.getBoolean("use_full_screen", false)) { + getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, + WindowManager.LayoutParams.FLAG_FULLSCREEN); + } } @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.activity_view_comic, menu); + + m_menu = menu; + + //updateMenu(); return true; } @@ -58,10 +74,55 @@ public class ViewComicActivity extends CommonActivity { out.putString("fileName", m_fileName); } + @Override + public void onComicSelected(String fileName, int position) { + super.onComicSelected(fileName, position); + + //updateMenu(); + } + + private void shareComic() { + + ComicPager pager = (ComicPager) getSupportFragmentManager().findFragmentByTag(FRAG_COMICS_PAGER); + + if (pager != null) { + + try { + File tmpFile = File.createTempFile("ttshare", ".png"); + + InputStream is = pager.getArchive().getItem(pager.getPosition()); + FileOutputStream fos = new FileOutputStream(tmpFile); + + byte[] buffer = new byte[1024]; + int len = 0; + while ((len = is.read(buffer)) != -1) { + fos.write(buffer, 0, len); + } + + fos.close(); + is.close(); + + Intent shareIntent = new Intent(Intent.ACTION_SEND); + + shareIntent.setType("image/jpeg"); + shareIntent.putExtra(Intent.EXTRA_STREAM, Uri.fromFile(tmpFile)); + + startActivity(Intent.createChooser(shareIntent, "Share comic")); + + } catch (IOException e) { + e.printStackTrace(); + } + + } + + } + public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { - case R.id.menu_go_location: - + case R.id.menu_share: + shareComic(); + return true; + case R.id.menu_go_location: Dialog dialog = new Dialog(ViewComicActivity.this); AlertDialog.Builder builder = new AlertDialog.Builder(ViewComicActivity.this) .setTitle("Go to...") @@ -131,9 +192,6 @@ public class ViewComicActivity extends CommonActivity { dialog = builder.create(); dialog.show(); - - - // TODO display dialog: Beginning, Page..., Last unread return true; case android.R.id.home: -- cgit v1.2.3