/*
* Copyright 2016 Thomas Hoffmann
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package de.j4velin.pedometer.util;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.DialogInterface;
import android.os.Bundle;
import android.preference.Preference;
import android.view.View;
import android.widget.TextView;
import com.google.android.gms.games.Games;
import de.j4velin.pedometer.BuildConfig;
import de.j4velin.pedometer.R;
import de.j4velin.pedometer.ui.Activity_Main;
/**
* Class to wrap some Google Play related stuff in the SettingsFragment
*/
public class PlaySettingsWrapper {
public static void setupAccountSetting(final Preference account,
final Bundle savedInstanceState,
final Activity_Main main) {
account.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
@Override
public boolean onPreferenceClick(final Preference preference) {
AlertDialog.Builder builder = new AlertDialog.Builder(main);
View v = main.getLayoutInflater().inflate(R.layout.signin, null);
builder.setView(v);
builder.setNegativeButton(android.R.string.cancel,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
if (main.getGC().isConnected()) {
((TextView) v.findViewById(R.id.signedin)).setText(
main.getString(R.string.signed_in,
Games.Players.getCurrentPlayer(main.getGC()).getDisplayName()));
v.findViewById(R.id.sign_in_button).setVisibility(View.GONE);
builder.setPositiveButton(R.string.sign_out,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
main.signOut();
preference.setSummary(main.getString(R.string.sign_in));
dialog.dismiss();
}
});
}
final Dialog d = builder.create();
if (!main.getGC().isConnected()) {
v.findViewById(R.id.signedin).setVisibility(View.GONE);
v.findViewById(R.id.sign_in_button)
.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View v) {
// start the asynchronous sign in flow
main.beginSignIn();
d.dismiss();
}
});
}
d.show();
return false;
}
});
// If created for the first time, the GameClient should be setup and be
// connected, but when recreating the fragment (due to orientation
// change for example), then the fragment's onCreate is called before
// the new GamesClient is setup. In this case, just use the player name
// saved in the savedInstanceState bundle
if ((savedInstanceState == null && main.getGC().
isConnected()
) || (savedInstanceState != null && savedInstanceState.containsKey("player")))
{
account.setSummary(main.getString(R.string.signed_in, savedInstanceState == null ?
Games.Players.getCurrentPlayer(main.getGC()).getDisplayName() :
savedInstanceState.getString("player")));
}
}
public static void onSavedInstance(final Bundle outState, final Activity_Main main) {
try {
if (main.getGC().isConnected()) outState.putString("player",
Games.Players.getCurrentPlayer(main.getGC()).getDisplayName());
else outState.remove("player");
} catch (Exception e) {
if (BuildConfig.DEBUG) Logger.log(e);
}
}
}