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(); } }