package me.pjq.pushup.fragment;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import com.google.android.gms.games.Player;
import com.squareup.otto.Bus;
import com.squareup.otto.Subscribe;
import me.pjq.pushup.AppPreference;
import me.pjq.pushup.R;
import me.pjq.pushup.ServiceProvider;
import me.pjq.pushup.msg.MsgSignIn;
import me.pjq.pushup.msg.MsgSignOut;
import me.pjq.pushup.utils.TitlebarHelper;
public class GameBoardFragment extends BaseFragment implements View.OnClickListener {
public static final String TAG = GameBoardFragment.class.getSimpleName();
private Button archievementButton;
private Button leaderboardButton;
private Button invitationButton;
private TitlebarHelper titlebarHelper;
private FragmentController fragmentController;
private AppPreference appPreference;
private TextView userInfo;
private ImageView userIcon;
private View view;
private Bus bus;
private SignInOutSubscribe subscribe = new SignInOutSubscribe();
public static GameBoardFragment newInstance(Bundle bundle) {
GameBoardFragment fragment = new GameBoardFragment();
if (null != bundle) {
fragment.setArguments(bundle);
}
return fragment;
}
@Override
protected View onGetFragmentView(LayoutInflater inflater) {
view = inflater.inflate(R.layout.game_fragment, null);
return view;
}
@Override
protected void ensureUi() {
appPreference = AppPreference.getInstance(getApplicationContext());
archievementButton = (Button) view.findViewById(R.id.button_archievement);
leaderboardButton = (Button) view.findViewById(R.id.button_leaderboard);
invitationButton = (Button) view.findViewById(R.id.button_invitation);
userIcon = (ImageView) view.findViewById(R.id.user_icon);
userInfo = (TextView) view.findViewById(R.id.user_info);
titlebarHelper = new TitlebarHelper(view, new TitlebarHelper.OnTitlebarClickListener() {
@Override
public void onClickIcon() {
fragmentController.showFragment(DashboardFragment.TAG);
}
@Override
public void onClickTitle() {
fragmentController.showFragment(DashboardFragment.TAG);
}
});
leaderboardButton.setOnClickListener(this);
archievementButton.setOnClickListener(this);
invitationButton.setOnClickListener(this);
view.findViewById(R.id.button_sign_in).setOnClickListener(this);
view.findViewById(R.id.button_sign_out).setOnClickListener(this);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
fragmentController = (FragmentController) getActivity();
bus = ServiceProvider.getBus();
bus.register(subscribe);
}
private class SignInOutSubscribe {
@Subscribe
public void signIn(MsgSignIn signIn) {
onSignInSucceeded();
}
@Subscribe
public void signOut(MsgSignOut signOut) {
showSignInBar();
}
}
@Override
public void onResume() {
super.onResume();
if (fragmentController.isSignedInPublic()) {
onSignInSucceeded();
} else {
showSignInBar();
}
}
// Shows the "sign in" bar (explanation and button).
private void showSignInBar() {
view.findViewById(R.id.sign_in_bar).setVisibility(View.VISIBLE);
view.findViewById(R.id.sign_out_bar).setVisibility(View.GONE);
}
// Shows the "sign out" bar (explanation and button).
private void showSignOutBar() {
view.findViewById(R.id.sign_in_bar).setVisibility(View.GONE);
view.findViewById(R.id.sign_out_bar).setVisibility(View.VISIBLE);
}
public void onSignInFailed() {
// Sign-in has failed. So show the user the sign-in button
// so they can click the "Sign-in" button.
showSignInBar();
}
/**
* Called to notify us that sign in succeeded. We react by loading the loot from the
* cloud and updating the UI to show a sign-out button.
*/
public void onSignInSucceeded() {
// Sign-in worked!
showSignOutBar();
playerInfo();
}
private void playerInfo() {
Player player = fragmentController.getGamesClientPublic().getCurrentPlayer();
String name = player.getDisplayName();
Uri uri = player.getIconImageUri();
String displayName;
if (player == null) {
Log.w(TAG, "mGamesClient.getCurrentPlayer() is NULL!");
displayName = "???";
} else {
displayName = player.getDisplayName();
appPreference.setLoginName(displayName);
}
userInfo.setText(String.format(getString(R.string.you_are_signed_in_as), displayName));
//userIcon.setImageURI(uri);
}
@Override
public void onClick(View view) {
switch (view.getId()) {
case R.id.button_archievement:
onShowAchievementsRequested();
break;
case R.id.button_leaderboard:
onShowLeaderboardsRequested();
break;
case R.id.button_invitation:
onShowInvitationRequested();
break;
case R.id.button_sign_in:
// start the sign-in flow
fragmentController.beginUserInitiatedSignInImpl();
break;
case R.id.button_sign_out:
// sign out.
fragmentController.signOutImpl();
showSignInBar();
break;
}
}
// request codes we use when invoking an external activity
final int RC_RESOLVE = 5000, RC_UNUSED = 5001;
public void onShowAchievementsRequested() {
fragmentController.onShowAchievementsRequested();
}
public void onShowLeaderboardsRequested() {
fragmentController.onShowLeaderboardsRequested();
}
public void onShowInvitationRequested() {
fragmentController.onShowInvitationRequested();
}
@Override
public void changeToFragment(String tag) {
if (tag.equalsIgnoreCase(TAG)) {
onResume();
} else {
onPause();
}
}
@Override
public void onDestroyView() {
super.onDestroyView();
bus.unregister(subscribe);
}
// private void exit() {
// finish();
// Utils.overridePendingTransitionLeft2Right(this);
// }
}