Android Open Source - SevenWonders Story Pages Controller






From Project

Back to project page SevenWonders.

License

The source code is released under:

Apache License

If you think the Android project SevenWonders listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package skylight1.sevenwonders.view;
/*from   w  w  w  .java  2 s  .  c o m*/
import java.util.List;

import skylight1.sevenwonders.R;
import android.app.Activity;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

/**
 * Controls switching between different pages of the back story.
 * 
 * @author johannes
 */
public class StoryPagesController implements OnClickListener, Runnable {    
    public final List<Integer> pageTextResourceIds;
    
    private int currentPage;

    private TextView contentTextView;

    private Button leftButton;
    
    private final TextStyles wonderFonts;

    private Button rightButton;

  private final OnOutOfPageSequenceBoundsListener onOutOfPageBoundsListener;

  private Handler handler;

  private final boolean isFirstTimeUse;
    
  /**
   * Listener to be notified when one of the ends of the sequence of pages was reached.
   *
   */
    public interface OnOutOfPageSequenceBoundsListener {
      public void onLeftPageSequenceOnTheLeft();
      public void onLeftPageSequenceOnTheRight();
    }
    
    public StoryPagesController(Activity activity, OnOutOfPageSequenceBoundsListener listener,
        List<Integer> pageTexts, boolean isFirstTimeUse) {
    onOutOfPageBoundsListener = listener;
    pageTextResourceIds = pageTexts;
    this.isFirstTimeUse = isFirstTimeUse;
        contentTextView = (TextView) activity.findViewById(R.id.story_content_textview);        
        leftButton = (Button) activity.findViewById(R.id.story_left_button);
        rightButton = (Button) activity.findViewById(R.id.story_right_button);             
       
        wonderFonts = new TextStyles(activity);
              
        wonderFonts.applyBodyTextStyle(contentTextView);        
        wonderFonts.applyHeaderTextStyle(leftButton);
        wonderFonts.applyHeaderTextStyle(rightButton);            

        leftButton.setOnClickListener(this);
        rightButton.setOnClickListener(this);        
        
        handler = new Handler();
        goToFirstPage();     
    }

    private void goToFirstPage() {
        currentPage = -1;
        goToNextPage();        
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()) {
        case R.id.story_left_button:
            goToPreviousPage();
            break;
        case R.id.story_right_button:
            goToNextPage();
            break;
        }
    }

    private void goToPreviousPage() {
        currentPage--;
        if (currentPage < 0) {
          this.onOutOfPageBoundsListener.onLeftPageSequenceOnTheLeft();
          currentPage = 0;
        } else {
            updatePageContents();
        }
    }

    private void updatePageContents() {
        contentTextView.setText(pageTextResourceIds.get(currentPage));
        maybeChangeButtonLabels();
    }

    private void goToNextPage() {
        currentPage++;
        final int length = pageTextResourceIds.size();
        if (currentPage == length) {
          this.onOutOfPageBoundsListener.onLeftPageSequenceOnTheRight();
          currentPage = length-1;
        } else {
            updatePageContents();
        }        
        
        if (isFirstTimeUse) {
          //Prevent user from skipping through without reading..        
          rightButton.setEnabled(false);
          enableAfterDelay();
        } else {
          rightButton.setEnabled(true);
        }
    }

  /**
     * Sets different labels for the buttons depending on which page we are on.
     */
    private void maybeChangeButtonLabels() {
        final int leftButtonLabel;
        final int rightButtonLabel;
        if (currentPage == 0) {
            leftButtonLabel = R.string.story_button_cancel; 
            rightButtonLabel = R.string.story_button_right;        
        } else if (currentPage == pageTextResourceIds.size()-1) {
            leftButtonLabel = R.string.story_button_left; 
            rightButtonLabel = R.string.story_button_start;
        } else {
            leftButtonLabel = R.string.story_button_left; 
            rightButtonLabel = R.string.story_button_right;
        }
        
        leftButton.setText(leftButtonLabel);
        rightButton.setText(rightButtonLabel);
    }

  @Override
  public void run() {
    rightButton.setEnabled(true);    
  }

    private void enableAfterDelay() {
      handler.postDelayed(this, 2000);
  }
}




Java Source Code List

com.facebook.android.AsyncFacebookRunner.java
com.facebook.android.DialogError.java
com.facebook.android.FacebookError.java
com.facebook.android.Facebook.java
com.facebook.android.FbDialog.java
com.facebook.android.Util.java
skylight1.sevenwonders.AboutActivity.java
skylight1.sevenwonders.Adverts.java
skylight1.sevenwonders.Analytics.java
skylight1.sevenwonders.GameState.java
skylight1.sevenwonders.LevelChooserActivity.java
skylight1.sevenwonders.MenuActivity.java
skylight1.sevenwonders.PlayActivity.java
skylight1.sevenwonders.ScoreActivity.java
skylight1.sevenwonders.SettingsActivity.java
skylight1.sevenwonders.Settings.java
skylight1.sevenwonders.SevenWondersApplication.java
skylight1.sevenwonders.SoundTracksStoppingExceptionHandler.java
skylight1.sevenwonders.SplashActivity.java
skylight1.sevenwonders.StoryActivity.java
skylight1.sevenwonders.levels.CoinCollisionAction.java
skylight1.sevenwonders.levels.CollisionAction.java
skylight1.sevenwonders.levels.ExtraTimeAction.java
skylight1.sevenwonders.levels.GameLevel.java
skylight1.sevenwonders.levels.GameObjectDescriptor.java
skylight1.sevenwonders.levels.HazardCollisionAction.java
skylight1.sevenwonders.levels.LevelConstructionToolkit.java
skylight1.sevenwonders.levels.ProtectionAction.java
skylight1.sevenwonders.levels.RubyCollisionAction.java
skylight1.sevenwonders.levels.SpellCollisionAction.java
skylight1.sevenwonders.services.SoundTracks.java
skylight1.sevenwonders.social.DialogUtil.java
skylight1.sevenwonders.social.NoNPEWebView.java
skylight1.sevenwonders.social.facebook.FacebookApplicationPost.java
skylight1.sevenwonders.social.facebook.FacebookConfig.java
skylight1.sevenwonders.social.facebook.FacebookScoreActivity.java
skylight1.sevenwonders.social.facebook.FacebookUtil.java
skylight1.sevenwonders.social.facebook.LoginAndGetPermissions.java
skylight1.sevenwonders.social.facebook.SessionStore.java
skylight1.sevenwonders.social.facebook.WallPost.java
skylight1.sevenwonders.social.twitter.AuthRequest.java
skylight1.sevenwonders.social.twitter.AuthStore.java
skylight1.sevenwonders.social.twitter.TwitterUpdater.java
skylight1.sevenwonders.view.Carpet.java
skylight1.sevenwonders.view.CubeBounds.java
skylight1.sevenwonders.view.GameMessagesDisplay.java
skylight1.sevenwonders.view.GameTexture.java
skylight1.sevenwonders.view.Position.java
skylight1.sevenwonders.view.SevenWondersGLRenderer.java
skylight1.sevenwonders.view.SevenWondersGLSurfaceView.java
skylight1.sevenwonders.view.StoryPagesController.java
skylight1.sevenwonders.view.StyledSpannableStringBuilder.java
skylight1.sevenwonders.view.TextStyles.java
skylight1.sevenwonders.view.TiltControl.java
wave.Constants.java
wave.CreateWave.java
wave.RectangleWave.java
wave.TriangleWave.java
wave.UtilsWave.java
wave.VertexWave.java