/*
* Copyright 2012-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 org.jnrain.kbs.entity.Post;
import org.jnrain.mobile.R;
import roboguice.inject.InjectView;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.octo.android.robospice.request.SpiceRequest;
import com.octo.android.robospice.request.listener.RequestListener;
import com.viewpagerindicator.TitlePageIndicator;
import com.viewpagerindicator.TitlePageIndicator.IndicatorStyle;
@SuppressWarnings("rawtypes")
public class ReadThreadFragment extends CytosolFragment
implements ReadThreadFragmentListener {
@InjectView(R.id.pager)
ViewPager viewPager;
@InjectView(R.id.indicator)
TitlePageIndicator indicator;
ReadThreadPageFragmentAdapter _adapter;
private String _brd_id;
private String _title;
private long _tid;
private int _totalposts;
private int _page;
private int _totalpages;
private static final String TAG = "ReadThreadActivity";
public ReadThreadFragment(
String brdId,
long threadId,
String title,
int totalPosts) {
super();
initState(brdId, threadId, title, totalPosts);
}
public ReadThreadFragment() {
super();
}
protected void initState(
String brdId,
long threadId,
String title,
int totalPosts) {
_brd_id = brdId;
_tid = threadId;
_title = title;
_totalposts = totalPosts;
_totalpages = (int) Math.ceil((double) _totalposts
/ KBSUIConstants.POSTS_PER_PAGE);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (savedInstanceState != null) {
initState(
savedInstanceState.getString(KBSUIConstants.BOARD_ID_STORE),
savedInstanceState
.getLong(KBSUIConstants.THREAD_ID_STORE),
savedInstanceState
.getString(KBSUIConstants.POST_TITLE_STORE),
savedInstanceState
.getInt(KBSUIConstants.POST_COUNT_STORE));
}
}
@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString(KBSUIConstants.BOARD_ID_STORE, _brd_id);
outState.putLong(KBSUIConstants.THREAD_ID_STORE, _tid);
outState.putString(KBSUIConstants.POST_TITLE_STORE, _title);
outState.putInt(KBSUIConstants.POST_COUNT_STORE, _totalposts);
}
@Override
public View onCreateView(
LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(
name.xen0n.cytosol.R.layout.cy__dyn_pages,
container,
false);
return view;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
setActionBarTitle(_title);
_adapter = new ReadThreadPageFragmentAdapter(
getChildFragmentManager(),
getActivity());
viewPager.setAdapter(_adapter);
indicator.setViewPager(viewPager);
indicator.setFooterIndicatorStyle(IndicatorStyle.Triangle);
// Show the Up button in the action bar.
// getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// update title of action bar
// getSupportActionBar().setTitle(this._title);
// initial tabs
addReplyPage(1);
if (_totalpages == 1) {
_page = 1;
} else {
_page = 2;
addReplyPage(2);
}
// pager listener
indicator
.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrollStateChanged(int state) {
// intentionally left blank
// Log.d(TAG, "PageScrollStateChanged: " +
// Integer.toString(state));
}
@Override
public void onPageScrolled(
int position,
float positionOffset,
int positionOffsetPixels) {
// intentionally left blank
}
@Override
public void onPageSelected(int position) {
Log.d(TAG, "PageSelected: " + Integer.toString(position)
+ ", _page = " + Integer.toString(_page));
if (position == _page - 1) {
// last tab, add another page if there are still
// enough
// threads to display
if (_page < _totalpages) {
_page++;
addReplyPage(_page);
}
}
}
});
}
public void addReplyPage(int page) {
_adapter.addItem(this._brd_id, this._tid, page);
}
public void showReplyUIFor(Post post) {
Log.d(TAG, "reply to post " + post.toString() + " pressed");
// reply title
String postTitle = post.getTitle();
String replyTitle = "";
if (postTitle.startsWith("Re:")) {
// prevent flooding of "Re: "'s
replyTitle = postTitle;
} else {
replyTitle = "Re: " + postTitle;
}
// fire up post fragment
Fragment frag = new NewPostFragment(
_brd_id,
_tid,
post.getID(),
replyTitle);
switchMainContentTo(frag, true);
}
@Override
public Activity getThisActivity() {
return getActivity();
}
@SuppressWarnings("unchecked")
@Override
public void makeSpiceRequest(
SpiceRequest request,
RequestListener requestListener) {
_listener.makeSpiceRequest(request, requestListener);
}
@SuppressWarnings("unchecked")
@Override
public void makeSpiceRequest(
SpiceRequest request,
String requestCacheKey,
long cacheDuration,
RequestListener requestListener) {
_listener.makeSpiceRequest(
request,
requestCacheKey,
cacheDuration,
requestListener);
}
}