diff options
author | laco0416 <laco0416@gmail.com> | 2014-09-19 22:25:11 +0900 |
---|---|---|
committer | laco0416 <laco0416@gmail.com> | 2014-09-19 22:25:11 +0900 |
commit | f4841e386e0009e7e0bfe2ae2d94103a75109883 (patch) | |
tree | b5e20b27cd9fe1cf69c0f510ff0f29c1db47398e | |
parent | 0d72e15f31eed611aaaad893b849b16e2ef826b2 (diff) | |
download | SmileEssence-f4841e386e0009e7e0bfe2ae2d94103a75109883.tar.gz |
Close #64 Resize image if media file size is over 1MB
3 files changed, 82 insertions, 8 deletions
diff --git a/src/net/lacolaco/smileessence/twitter/task/TweetTask.java b/src/net/lacolaco/smileessence/twitter/task/TweetTask.java index e9a2ebe2..ea6eba15 100644 --- a/src/net/lacolaco/smileessence/twitter/task/TweetTask.java +++ b/src/net/lacolaco/smileessence/twitter/task/TweetTask.java @@ -25,6 +25,10 @@ package net.lacolaco.smileessence.twitter.task; import android.app.Activity; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.os.Environment; +import android.text.TextUtils; import net.lacolaco.smileessence.R; import net.lacolaco.smileessence.data.StatusCache; import net.lacolaco.smileessence.logging.Logger; @@ -35,23 +39,82 @@ import twitter4j.StatusUpdate; import twitter4j.Twitter; import twitter4j.TwitterException; +import java.io.File; +import java.io.FileOutputStream; +import java.io.IOException; + public class TweetTask extends TwitterTask<Status> { // ------------------------------ FIELDS ------------------------------ + private static final int MEDIA_SIZE_LIMIT = 1 * 1024 * 1024; + private final StatusUpdate update; + private final String mediaPath; private final Activity activity; // --------------------------- CONSTRUCTORS --------------------------- public TweetTask(Twitter twitter, StatusUpdate update, Activity activity) { + this(twitter, update, null, activity); + } + + public TweetTask(Twitter twitter, StatusUpdate update, String mediaPath, Activity activity) + { super(twitter); this.update = update; + this.mediaPath = mediaPath; this.activity = activity; } + // --------------------- GETTER / SETTER METHODS --------------------- + + public File getMediaFile() + { + File file = new File(mediaPath); + if(file.length() >= MEDIA_SIZE_LIMIT) + { + BitmapFactory.Options opt = new BitmapFactory.Options(); + opt.inJustDecodeBounds = true; //decoder is not return bitmap but set option + BitmapFactory.decodeFile(mediaPath, opt); + String tempFilePath = "temp.jpg"; + File compressedFile = new File(Environment.getExternalStorageDirectory() + "/" + tempFilePath); + FileOutputStream fos = null; + try + { + fos = new FileOutputStream(compressedFile); + float ratio = (float) file.length() / (float) MEDIA_SIZE_LIMIT; + BitmapFactory.Options resizeOpt = new BitmapFactory.Options(); + resizeOpt.inPurgeable = true; + resizeOpt.inSampleSize = (int) Math.ceil(ratio); + Bitmap bitmap = BitmapFactory.decodeFile(mediaPath, resizeOpt); + bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); + bitmap.recycle(); + return compressedFile; + } + catch(Exception e) + { + e.printStackTrace(); + Logger.error(e); + } + finally + { + try + { + fos.close(); + } + catch(IOException e) + { + e.printStackTrace(); + Logger.error(e); + } + } + } + return file; + } + // ------------------------ OVERRIDE METHODS ------------------------ @Override @@ -73,7 +136,19 @@ public class TweetTask extends TwitterTask<Status> { try { - return twitter.tweets().updateStatus(update); + if(TextUtils.isEmpty(mediaPath)) + { + return twitter.tweets().updateStatus(update); + } + else + { + File mediaFile = getMediaFile(); + if(mediaFile.exists()) + { + update.setMedia(mediaFile); + } + return twitter.tweets().updateStatus(update); + } } catch(TwitterException e) { diff --git a/src/net/lacolaco/smileessence/view/PostFragment.java b/src/net/lacolaco/smileessence/view/PostFragment.java index 1546a610..f0636fe0 100644 --- a/src/net/lacolaco/smileessence/view/PostFragment.java +++ b/src/net/lacolaco/smileessence/view/PostFragment.java @@ -436,13 +436,14 @@ public class PostFragment extends Fragment implements TextWatcher, View.OnFocusC private void submitPost() { + hideIME(); setStateFromView(); - StatusUpdate statusUpdate = PostState.getState().toStatusUpdate(); + PostState state = PostState.getState(); + StatusUpdate statusUpdate = state.toStatusUpdate(); MainActivity mainActivity = (MainActivity) getActivity(); - TweetTask tweetTask = new TweetTask(TwitterApi.getTwitter(mainActivity.getCurrentAccount()), statusUpdate, mainActivity); + TweetTask tweetTask = new TweetTask(TwitterApi.getTwitter(mainActivity.getCurrentAccount()), statusUpdate, state.getMediaFilePath(), mainActivity); tweetTask.execute(); PostState.newState().beginTransaction().commit(); - hideIME(); mainActivity.setSelectedPageIndex(MainActivity.ADAPTER_HOME); } } diff --git a/src/net/lacolaco/smileessence/view/adapter/PostState.java b/src/net/lacolaco/smileessence/view/adapter/PostState.java index f193fba8..f7e0fa0f 100644 --- a/src/net/lacolaco/smileessence/view/adapter/PostState.java +++ b/src/net/lacolaco/smileessence/view/adapter/PostState.java @@ -24,13 +24,10 @@ package net.lacolaco.smileessence.view.adapter; -import android.text.TextUtils; import net.lacolaco.smileessence.activity.MainActivity; import net.lacolaco.smileessence.view.dialog.DialogHelper; import twitter4j.StatusUpdate; -import java.io.File; - public class PostState { @@ -125,7 +122,8 @@ public class PostState */ public StatusUpdate toStatusUpdate() { - return new StatusUpdate(getText()).inReplyToStatusId(getInReplyToStatusID()).media(TextUtils.isEmpty(getMediaFilePath()) ? null : new File(getMediaFilePath())); + return new StatusUpdate(getText()) + .inReplyToStatusId(getInReplyToStatusID()); } private PostState copy(PostState another) |