diff --git a/Chan/AndroidManifest.xml b/Chan/AndroidManifest.xml index 71a1ab7e..4341339d 100644 --- a/Chan/AndroidManifest.xml +++ b/Chan/AndroidManifest.xml @@ -53,6 +53,7 @@ diff --git a/Chan/res/layout/reply_view.xml b/Chan/res/layout/reply_view.xml index 7ee66d1a..cc22e78f 100644 --- a/Chan/res/layout/reply_view.xml +++ b/Chan/res/layout/reply_view.xml @@ -2,8 +2,8 @@ @@ -84,26 +84,36 @@ - - - - - - - + + + + + + + + + + + No file selected Post Successful Failed to load captcha + Tap to reload the captcha Ask before opening links Open link? diff --git a/Chan/src/org/floens/chan/activity/BoardActivity.java b/Chan/src/org/floens/chan/activity/BoardActivity.java index 10300d60..3a384f02 100644 --- a/Chan/src/org/floens/chan/activity/BoardActivity.java +++ b/Chan/src/org/floens/chan/activity/BoardActivity.java @@ -209,10 +209,10 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio return true; case R.id.action_reply: if (pane.isOpen()) { - startReply(pane.isSlideable(), boardFragment); + startReply(pane.isSlideable(), boardLoadable); } else { if (threadFragment.getThreadManager().hasThread()) { - startReply(pane.isSlideable(), threadFragment); + startReply(pane.isSlideable(), threadLoadable); } } @@ -257,13 +257,13 @@ public class BoardActivity extends BaseActivity implements ActionBar.OnNavigatio updateActionBarState(); } - private void startReply(boolean inActivity, ThreadFragment fragment) { - if (inActivity) { - ReplyActivity.setThreadFragment(fragment); + private void startReply(boolean startInActivity, Loadable loadable) { + if (startInActivity) { + ReplyActivity.setLoadable(loadable); Intent i = new Intent(this, ReplyActivity.class); startActivity(i); } else { - ReplyFragment reply = ReplyFragment.newInstance(fragment); + ReplyFragment reply = ReplyFragment.newInstance(loadable); reply.show(getFragmentManager(), "replyDialog"); } } diff --git a/Chan/src/org/floens/chan/activity/ReplyActivity.java b/Chan/src/org/floens/chan/activity/ReplyActivity.java index da63a357..062c8a24 100644 --- a/Chan/src/org/floens/chan/activity/ReplyActivity.java +++ b/Chan/src/org/floens/chan/activity/ReplyActivity.java @@ -1,7 +1,7 @@ package org.floens.chan.activity; +import org.floens.chan.entity.Loadable; import org.floens.chan.fragment.ReplyFragment; -import org.floens.chan.fragment.ThreadFragment; import android.app.Activity; import android.app.FragmentTransaction; @@ -10,24 +10,24 @@ import android.util.Log; import android.view.MenuItem; public class ReplyActivity extends Activity { - private static ThreadFragment threadFragment; + private static Loadable loadable; - public static void setThreadFragment(ThreadFragment tf) { - threadFragment = tf; + public static void setLoadable(Loadable l) { + loadable = l; } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - if (threadFragment != null) { + if (loadable != null) { getActionBar().setDisplayHomeAsUpEnabled(true); FragmentTransaction ft = getFragmentManager().beginTransaction(); - ft.replace(android.R.id.content, ReplyFragment.newInstance(threadFragment)); + ft.replace(android.R.id.content, ReplyFragment.newInstance(loadable)); ft.commitAllowingStateLoss(); - threadFragment = null; + loadable = null; } else { Log.e("Chan", "ThreadFragment was null, exiting!"); finish(); diff --git a/Chan/src/org/floens/chan/activity/ThreadActivity.java b/Chan/src/org/floens/chan/activity/ThreadActivity.java index 304e68ac..a630218a 100644 --- a/Chan/src/org/floens/chan/activity/ThreadActivity.java +++ b/Chan/src/org/floens/chan/activity/ThreadActivity.java @@ -68,7 +68,7 @@ public class ThreadActivity extends BaseActivity { return true; case R.id.action_reply: - ReplyFragment reply = ReplyFragment.newInstance(threadFragment); + ReplyFragment reply = ReplyFragment.newInstance(loadable); reply.show(getFragmentManager(), "replyDialog"); return true; diff --git a/Chan/src/org/floens/chan/entity/Loadable.java b/Chan/src/org/floens/chan/entity/Loadable.java index 8f1fd92b..0f77f111 100644 --- a/Chan/src/org/floens/chan/entity/Loadable.java +++ b/Chan/src/org/floens/chan/entity/Loadable.java @@ -7,7 +7,7 @@ import android.os.Bundle; * Something that can be loaded, like a board or thread. */ public class Loadable { - public Mode mode = Mode.INVALID; + public int mode = Mode.INVALID; public String board = ""; public int no = -1; public String title = ""; @@ -84,31 +84,29 @@ public class Loadable { public void readFromBundle(Context context, Bundle bundle) { String p = context.getPackageName(); + mode = bundle.getInt(p + ".mode", Mode.INVALID); board = bundle.getString(p + ".board", ""); no = bundle.getInt(p + ".no", -1); title = bundle.getString(p + ".subject", ""); listViewIndex = bundle.getInt(p + ".listViewIndex"); listViewTop = bundle.getInt(p + ".listViewTop"); - - // Log.e("Chan", "Read: " + board + ", " + no); } public void writeToBundle(Context context, Bundle bundle) { String p = context.getPackageName(); + bundle.putInt(p + ".mode", mode); bundle.putString(p + ".board", board); bundle.putInt(p + ".no", no); bundle.putString(p + ".subject", title); bundle.putInt(p + ".listViewIndex", listViewIndex); bundle.putInt(p + ".listViewTop", listViewTop); - - // Log.e("Chan", "Write: " + board + ", " + no); } - public static enum Mode { - INVALID, - THREAD, - BOARD, - CATALOG + public static class Mode { + public static final int INVALID = -1; + public static final int THREAD = 0; + public static final int BOARD = 1; + public static final int CATALOG = 2; } } diff --git a/Chan/src/org/floens/chan/fragment/ReplyFragment.java b/Chan/src/org/floens/chan/fragment/ReplyFragment.java index 8d8736e4..13129dc3 100644 --- a/Chan/src/org/floens/chan/fragment/ReplyFragment.java +++ b/Chan/src/org/floens/chan/fragment/ReplyFragment.java @@ -8,7 +8,6 @@ import org.floens.chan.entity.Loadable; import org.floens.chan.entity.Reply; import org.floens.chan.manager.ReplyManager; import org.floens.chan.manager.ReplyManager.ReplyResponse; -import org.floens.chan.manager.ThreadManager; import org.floens.chan.net.ChanUrls; import org.floens.chan.utils.ImageDecoder; import org.floens.chan.utils.LoadView; @@ -21,6 +20,7 @@ import android.content.DialogInterface; import android.graphics.Bitmap; import android.os.Bundle; import android.text.TextUtils; +import android.util.Log; import android.view.Gravity; import android.view.KeyEvent; import android.view.LayoutInflater; @@ -45,8 +45,7 @@ import com.android.volley.toolbox.StringRequest; public class ReplyFragment extends DialogFragment { private int page = 0; - private ThreadManager threadManager; - private ThreadFragment threadFragment; + private Loadable loadable; private final Reply draft = new Reply(); private boolean shouldSaveDraft = true; @@ -70,28 +69,83 @@ public class ReplyFragment extends DialogFragment { private TextView captchaText; private LoadView responseContainer; - public static ReplyFragment newInstance(ThreadFragment fragment) { + public static ReplyFragment newInstance(Loadable loadable) { ReplyFragment reply = new ReplyFragment(); - reply.threadFragment = fragment; - reply.threadManager = fragment.getThreadManager(); + reply.loadable = loadable; return reply; } + @Override + public void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + + loadable.writeToBundle(getActivity(), outState); + } + @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); - if (threadManager == null) return; + if (loadable == null && savedInstanceState != null) { + loadable = new Loadable(); + loadable.readFromBundle(getActivity(), savedInstanceState); + } - getCaptcha(); + if (loadable != null) { + setClosable(true); + + Dialog dialog = getDialog(); + Context context = getActivity(); + String title = loadable.isThreadMode() ? + context.getString(R.string.reply) + " /" + loadable.board + "/" + loadable.no : + context.getString(R.string.reply_to_board) + " /" + loadable.board + "/"; + + if (dialog == null) { + getActivity().getActionBar().setTitle(title); + } else { + dialog.setTitle(title); + } + + if (getDialog() != null) { + getDialog().setOnKeyListener(new Dialog.OnKeyListener() { + @Override + public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK) { + if (page == 1) flipPage(0); + else if (page == 2) closeReply(); + return true; + } else return false; + } + }); + } + + Reply draft = ReplyManager.getInstance().getReplyDraft(); + + if (TextUtils.isEmpty(draft.name)) { + draft.name = ChanApplication.getPreferences().getString("preference_default_name", ""); + } + + if (TextUtils.isEmpty(draft.email)) { + draft.email = ChanApplication.getPreferences().getString("preference_default_email", ""); + } + + nameView.setText(draft.name); + emailView.setText(draft.email); + subjectView.setText(draft.subject); + commentView.setText(draft.comment); + setFile(draft.file); + + getCaptcha(); + } else { + Log.e("Chan", "Loadable in ReplyFragment was null"); + closeReply(); + } } @Override public void onPause() { super.onPause(); - if (threadManager == null) return; - ReplyManager replyManager = ReplyManager.getInstance(); if (shouldSaveDraft) { @@ -105,32 +159,18 @@ public class ReplyFragment extends DialogFragment { replyManager.removeReplyDraft(); setFile(null); } + } + + @Override + public void onDestroy() { + super.onDestroy(); + ReplyManager replyManager = ReplyManager.getInstance(); replyManager.removeFileListener(); } @Override public View onCreateView(LayoutInflater inflater, ViewGroup parent, Bundle savedInstanceState) { - if (threadManager == null) { - closeReply(); - return new View(inflater.getContext()); - } - - Dialog dialog = getDialog(); - Loadable l = threadManager.getLoadable(); - Context context = inflater.getContext(); - String title = l.isThreadMode() ? - context.getString(R.string.reply) + " /" + l.board + "/" + l.no : - context.getString(R.string.reply_to_board) + " /" + l.board + "/"; - - if (dialog == null) { - getActivity().getActionBar().setTitle(title); - } else { - dialog.setTitle(title); - } - - setClosable(true); - // Setup the views with listeners container = inflater.inflate(R.layout.reply_view, null); flipper = (ViewFlipper)container.findViewById(R.id.reply_flipper); @@ -201,41 +241,6 @@ public class ReplyFragment extends DialogFragment { } }); - if (dialog != null) { - dialog.setOnKeyListener(new Dialog.OnKeyListener() { - @Override - public boolean onKey(DialogInterface dialogInterface, int keyCode, KeyEvent event) { - if (keyCode == KeyEvent.KEYCODE_BACK) { - if (page == 1) { - flipPage(0); - } else if (page == 2) { - closeReply(); - } - - return true; - } else { - return false; - } - } - }); - } - - Reply draft = ReplyManager.getInstance().getReplyDraft(); - - if (TextUtils.isEmpty(draft.name)) { - draft.name = ChanApplication.getPreferences().getString("preference_default_name", ""); - } - - if (TextUtils.isEmpty(draft.email)) { - draft.email = ChanApplication.getPreferences().getString("preference_default_email", ""); - } - - nameView.setText(draft.name); - emailView.setText(draft.email); - subjectView.setText(draft.subject); - commentView.setText(draft.comment); - setFile(draft.file); - return container; } @@ -308,7 +313,7 @@ public class ReplyFragment extends DialogFragment { @Override public void run() { // Other thread - final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), 1000); + final Bitmap bitmap = ImageDecoder.decodeFile(file, imageViewContainer.getWidth(), 3000); getActivity().runOnUiThread(new Runnable() { @Override @@ -377,8 +382,6 @@ public class ReplyFragment extends DialogFragment { responseContainer.setView(null); - Loadable loadable = threadManager.getLoadable(); - draft.name = nameView.getText().toString(); draft.email = emailView.getText().toString(); draft.subject = subjectView.getText().toString(); @@ -415,7 +418,7 @@ public class ReplyFragment extends DialogFragment { } else if (response.isSuccessful) { shouldSaveDraft = false; Toast.makeText(getActivity(), R.string.reply_success, Toast.LENGTH_SHORT).show(); - threadFragment.reload(); +// threadFragment.reload(); // TODO closeReply(); } else { if (isVisible()) {