package com.geel9.facepunch.activities;
import com.actionbarsherlock.app.ActionBar;
import com.geel9.facepunch.APISession.Category;
import com.geel9.facepunch.APISession.Forum;
import com.geel9.facepunch.APISession.ForumCallback;
import com.geel9.facepunch.R.id;
import com.geel9.facepunch.R.layout;
import com.geel9.facepunch.R.string;
import com.geel9.facepunch.APISession;
import com.geel9.facepunch.R;
import android.content.Context;
import android.content.Intent;
import android.graphics.Color;
import android.os.Bundle;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ScrollView;
import android.widget.TextView;
import android.widget.Toast;
public class FrontpageActivity extends FPActivity
{
// Used for restoring list
private class State
{
Category[] categories;
int scrollY;
}
@Override
public void OnRefreshPressed(){
loadForums();
super.OnRefreshPressed();
}
@Override
public void OnLogout(){
loadForums();
super.OnLogout();
}
@Override
public void OnLogin(){
loadForums();
super.OnLogin();
}
private Category[] displayedCategories;
@Override
public void onBackPressed() {
super.onBackPressed();
//return;
}
@Override
public void onCreate( Bundle savedInstanceState )
{
// Load layout
super.onCreate( savedInstanceState );
setContentView( R.layout.frontpage );
ActionBar action = ActionBar();
if(action != null){
action.setHomeButtonEnabled(false);
action.setTitle("Facepunch");
}
// Restore forum list
final State data = (State)getLastCustomNonConfigurationInstance();
if ( data != null )
{
if(data.categories == null){
loadForums();
return;
}
populateList( data.categories );
final ScrollView scroller = (ScrollView)findViewById( R.id.scroller );
scroller.post( new Runnable()
{
public void run()
{
scroller.scrollTo( 0, data.scrollY );
}
} );
return;
}
loadForums();
}
public void loadForums(){
CheckLoginState();
// Show loading spinner
LayoutInflater inflater = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE );
final LinearLayout forumList = (LinearLayout)findViewById( R.id.forumList );
final ImageView loaderImage = (ImageView)inflater.inflate( R.layout.loadingspinner, forumList, false );
forumList.removeAllViews();
applyLoadingIcon( loaderImage );
forumList.addView( loaderImage );
forumList.setGravity( Gravity.CENTER_VERTICAL );
// Fetch main categories and forums
api.listForums(this, new APISession.ForumCallback()
{
public void onResult( boolean success, Category[] categories )
{
// Remove loading spinner
forumList.removeView( loaderImage );
forumList.setGravity( Gravity.NO_GRAVITY );
if ( success && categories != null )
{
populateList( categories );
} else {
Toast.makeText( FrontpageActivity.this, getString( R.string.frontpageLoadingFailed ), Toast.LENGTH_SHORT ).show();
}
}
} );
}
// Save activity state
@Override
public Object onRetainCustomNonConfigurationInstance()
{
State data = new State();
data.categories = displayedCategories;
data.scrollY = ( (ScrollView)findViewById( R.id.scroller ) ).getScrollY();
return data;
}
// Populate list with categories and forums
private void populateList( Category[] categories )
{
displayedCategories = categories;
LayoutInflater inflater = (LayoutInflater)getSystemService( Context.LAYOUT_INFLATER_SERVICE );
LinearLayout forumList = (LinearLayout)findViewById( R.id.forumList );
// Populate list with results
for ( Category cat : categories )
{
// Create header view
LinearLayout header = (LinearLayout)inflater.inflate( R.layout.listheader, forumList, false );
( (TextView)header.findViewById( R.id.headerTitle ) ).setText( cat.getName().toUpperCase() );
forumList.addView( header );
// Add forums
LinearLayout lastForum = null;
for ( final Forum forum : cat.getForums() )
{
LinearLayout forumItem = (LinearLayout)inflater.inflate( R.layout.listforum, forumList, false );
( (TextView)forumItem.findViewById( R.id.forumTitle ) ).setText( forum.getName() );
forumItem.setClickable(true);
forumItem.setOnClickListener(new OnClickListener(){
public void onClick(View v) {
Intent forumIntent = new Intent().setClass(FrontpageActivity.this, ForumActivity.class);
forumIntent.putExtra("forumId", forum.getId());
forumIntent.putExtra("forumName", forum.getName());
forumIntent.putExtra("subForums", forum.getSubForumsString());
startActivity(forumIntent);
}
});
// Attempt to find icon for this forum
int resId = getResources().getIdentifier( "drawable/forumicon_" + forum.getId(), "drawable", getPackageName() );
ImageView iconView = (ImageView)forumItem.findViewById( R.id.forumIcon );
if ( resId != 0 )
iconView.setImageResource( resId );
else
iconView.setVisibility( View.INVISIBLE );
forumList.addView( forumItem );
lastForum = forumItem;
}
// Modify separator of last forum to account for next category header
View separator = lastForum.findViewById( R.id.listSeparator );
separator.setBackgroundColor( Color.WHITE );
}
shamelesslyBeg();
}
}