package com.adamnickle.deck;
import android.app.Activity;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import com.adamnickle.deck.Game.Game;
import java.util.ArrayList;
import dev.dworks.libs.awizard.model.PageFragmentCallbacks;
import dev.dworks.libs.awizard.model.ReviewItem;
import dev.dworks.libs.awizard.model.WizardModelCallbacks;
import dev.dworks.libs.awizard.model.page.Page;
public class GameSetupPage extends Page
{
public static final String KEY_GAME_NAME = "game_name_ley";
public static final String KEY_DRAW_PILES = "draw_piles_key";
public static final String KEY_DISCARD_PILES = "discard_piles_key";
protected GameSetupPage( WizardModelCallbacks callbacks, String title )
{
super( callbacks, title );
}
@Override
public Fragment createFragment()
{
return CardPilesFragment.create( getKey() );
}
@Override
public void getReviewItems( ArrayList<ReviewItem> destination )
{
destination.add( new ReviewItem( "Game Name", mData.getString( KEY_GAME_NAME ), getKey(), 1 ) );
destination.add( new ReviewItem( "Draw Piles", mData.getString( KEY_DRAW_PILES ), getKey(), 2 ) );
destination.add( new ReviewItem( "Discard Piles", mData.getString( KEY_DISCARD_PILES ), getKey(), 3 ) );
}
@Override
public boolean isCompleted()
{
final String gameName = getGameName();
final int drawPiles = getDrawPiles();
final int discardPiles = getDiscardPiles();
return !gameName.isEmpty() && 0 <= drawPiles && drawPiles <= Game.MAX_DRAW_PILES && 0 <= discardPiles && discardPiles <= Game.MAX_DISCARD_PILES;
}
public String getGameName()
{
final String gameName = getData().getString( KEY_GAME_NAME );
return ( gameName != null ) ? gameName : "";
}
public int getDrawPiles()
{
int drawPiles;
try
{
drawPiles = Integer.parseInt( getData().getString( KEY_DRAW_PILES ) );
}
catch( NumberFormatException e )
{
drawPiles = -1;
}
return drawPiles;
}
public int getDiscardPiles()
{
int discardPiles;
try
{
discardPiles = Integer.parseInt( getData().getString( KEY_DISCARD_PILES ) );
}
catch( NumberFormatException e )
{
discardPiles = -1;
}
return discardPiles;
}
public static class CardPilesFragment extends Fragment
{
private static final String ARG_KEY = "key";
private PageFragmentCallbacks mCallbacks;
private String mKey;
private GameSetupPage mPage;
private TextView mGameName;
private TextView mDrawPiles;
private TextView mDiscardPiles;
public static CardPilesFragment create( String key )
{
Bundle args = new Bundle();
args.putString( ARG_KEY, key );
CardPilesFragment fragment = new CardPilesFragment();
fragment.setArguments( args );
return fragment;
}
@Override
public void onCreate( Bundle savedInstanceState )
{
super.onCreate( savedInstanceState );
Bundle args = getArguments();
mKey = args.getString( ARG_KEY );
mPage = (GameSetupPage) mCallbacks.onGetPage( mKey );
}
@Override
public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState )
{
View rootView = inflater.inflate( R.layout.fragment_page_card_piles, container, false );
( (TextView) rootView.findViewById( android.R.id.title ) ).setText( mPage.getTitle() );
mGameName = (TextView) rootView.findViewById( R.id.gameName );
mGameName.addTextChangedListener( new TextWatcher()
{
@Override
public void beforeTextChanged( CharSequence charSequence, int i, int i2, int i3 )
{
}
@Override
public void onTextChanged( CharSequence charSequence, int i, int i2, int i3 )
{
}
@Override
public void afterTextChanged( Editable editable )
{
mPage.getData().putString( KEY_GAME_NAME, ( editable != null ) ? editable.toString() : null );
}
} );
mDrawPiles = (TextView) rootView.findViewById( R.id.drawPiles );
mDrawPiles.setText( mPage.getData().getString( GameSetupPage.KEY_DRAW_PILES ) );
mDrawPiles.setHint( "0 - " + Game.MAX_DRAW_PILES );
mDrawPiles.addTextChangedListener( new TextWatcher()
{
@Override
public void beforeTextChanged( CharSequence charSequence, int i, int i1, int i2 )
{
}
@Override
public void onTextChanged( CharSequence charSequence, int i, int i1, int i2 )
{
}
@Override
public void afterTextChanged( Editable editable )
{
mPage.getData().putString( GameSetupPage.KEY_DRAW_PILES, ( editable != null ) ? editable.toString() : null );
mPage.notifyDataChanged();
}
} );
mDiscardPiles = ( (TextView) rootView.findViewById( R.id.discardPiles ) );
mDiscardPiles.setText( mPage.getData().getString( GameSetupPage.KEY_DISCARD_PILES ) );
mDiscardPiles.setHint( "0 - " + Game.MAX_DISCARD_PILES );
mDiscardPiles.addTextChangedListener( new TextWatcher()
{
@Override
public void beforeTextChanged( CharSequence charSequence, int i, int i1, int i2 )
{
}
@Override
public void onTextChanged( CharSequence charSequence, int i, int i1, int i2 )
{
}
@Override
public void afterTextChanged( Editable editable )
{
mPage.getData().putString( GameSetupPage.KEY_DISCARD_PILES, ( editable != null ) ? editable.toString() : null );
mPage.notifyDataChanged();
}
} );
return rootView;
}
@Override
public void onAttach( Activity activity )
{
super.onAttach( activity );
if( !( activity instanceof PageFragmentCallbacks ) )
{
throw new ClassCastException( "Activity must implement PageFragmentCallbacks" );
}
mCallbacks = (PageFragmentCallbacks) activity;
}
@Override
public void onDetach()
{
super.onDetach();
mCallbacks = null;
}
@Override
public void onViewCreated( View view, Bundle savedInstanceState )
{
super.onViewCreated( view, savedInstanceState );
}
}
}