/* * Copyright 2013 JNRain * * Licensed under the Apache License, Version 2.0 (the "License"); you may * not use this file except in compliance with the License. You may obtain a * copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the * License for the specific language governing permissions and limitations * under the License. */ package org.jnrain.mobile.ui.kbs; import name.xen0n.cytosol.app.CytosolFragment; import name.xen0n.cytosol.data.SimpleReturnCode; import name.xen0n.cytosol.ui.util.ToastHelper; import org.jnrain.mobile.R; import org.jnrain.mobile.network.requests.NewPostRequest; import roboguice.inject.InjectView; import android.os.Bundle; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.EditText; import com.actionbarsherlock.view.Menu; import com.actionbarsherlock.view.MenuInflater; import com.actionbarsherlock.view.MenuItem; import com.octo.android.robospice.persistence.exception.SpiceException; import com.octo.android.robospice.request.listener.RequestListener; public class NewPostFragment extends CytosolFragment<SimpleReturnCode> { @InjectView(R.id.editTitle) EditText editTitle; @InjectView(R.id.editContent) EditText editContent; private static final String TAG = "NewPostFragment"; private String _brd_id; private boolean _is_new_thread; private long _tid; private long _reid; private String _title = null; public NewPostFragment(String brdId) { super(); initState(brdId); } public NewPostFragment(String brdId, long tid, long reid, String title) { super(); initState(brdId, tid, reid, title); } public NewPostFragment() { super(); } protected void initState(String brdId) { _brd_id = brdId; _is_new_thread = true; } protected void initState(String brdId, long tid, long reid, String title) { _brd_id = brdId; _is_new_thread = false; _tid = tid; _reid = reid; _title = title; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setHasOptionsMenu(true); if (savedInstanceState != null) { boolean isNewThread = savedInstanceState.getBoolean( KBSUIConstants.IS_NEW_THREAD_STORE, false); if (isNewThread) { initState(savedInstanceState .getString(KBSUIConstants.BOARD_ID_STORE)); } else { initState( savedInstanceState.getString(KBSUIConstants.BOARD_ID_STORE), savedInstanceState .getLong(KBSUIConstants.THREAD_ID_STORE), savedInstanceState .getLong(KBSUIConstants.POST_REPLY_ID_STORE), savedInstanceState .getString(KBSUIConstants.POST_TITLE_STORE)); } } } @Override public void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(outState); outState.putBoolean( KBSUIConstants.IS_NEW_THREAD_STORE, _is_new_thread); outState.putString(KBSUIConstants.BOARD_ID_STORE, _brd_id); if (_is_new_thread) { outState.putLong(KBSUIConstants.THREAD_ID_STORE, _tid); outState.putLong(KBSUIConstants.POST_REPLY_ID_STORE, _reid); outState.putString(KBSUIConstants.POST_TITLE_STORE, _title); } } @Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { View view = inflater.inflate( R.layout.frag_kbs_new_post, container, false); return view; } @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // if (_is_new_thread) { setActionBarTitle(R.string.title_kbs_new_post); // } // Show the Up button in the action bar. // getSupportActionBar().setDisplayHomeAsUpEnabled(true); // set title if (_title != null) { editTitle.setText(_title); } } @Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { inflater.inflate(R.menu.new_post, menu); super.onCreateOptionsMenu(menu, inflater); } @Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection switch (item.getItemId()) { case android.R.id.home: // TODO: confirmation finishFragment(); return true; case R.id.action_do_post: Log.d(TAG, "do post activated"); String title = editTitle.getText().toString(); String content = editContent.getText().toString(); // TODO: proper signature selection if (_is_new_thread) { _listener.makeSpiceRequest( new NewPostRequest( _brd_id, title, content, NewPostRequest.SIGN_RANDOM), new NewPostRequestListener()); } else { _listener.makeSpiceRequest( new NewPostRequest( _brd_id, _tid, _reid, title, content, NewPostRequest.SIGN_RANDOM), new NewPostRequestListener()); } // disable edit while performing request setEditableStatus(false); return true; default: return super.onOptionsItemSelected(item); } } public synchronized void setEditableStatus(boolean enabled) { editTitle.setEnabled(enabled); editContent.setEnabled(enabled); } private class NewPostRequestListener implements RequestListener<SimpleReturnCode> { @Override public void onRequestFailure(SpiceException spiceException) { Log.d(TAG, "err on req: " + spiceException.toString()); // restore editable status NewPostFragment.this.setEditableStatus(true); } @Override public void onRequestSuccess(SimpleReturnCode result) { int status = result.getStatus(); switch (status) { case 0: // toast according to action type ToastHelper.makeTextToast(getActivity(), _is_new_thread ? R.string.msg_post_success : R.string.msg_post_success_reply); // finish off self finishFragment(); break; case 1: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_no_guest_post); break; case 2: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_no_brd_given); break; case 3: case 12: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_no_such_brd); break; case 4: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_eperm); break; case 5: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_erofs); break; case 6: case 15: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_denied); break; case 7: case 14: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_no_title); break; case 8: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_no_content); case 9: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_ebadf); break; case 10: case 19: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_locked); break; case 11: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_river_crab); break; case 13: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_directory); break; case 16: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_banned); break; case 17: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_eagain); break; case 18: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_idx_io); break; case 20: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_internal_err); break; case 21: ToastHelper.makeTextToast( getActivity(), R.string.msg_post_silent_night); break; default: ToastHelper.makeTextToast( getActivity(), R.string.msg_unknown_status, status); break; } // restore editable status NewPostFragment.this.setEditableStatus(true); } } }