package com.xeishawn.googleplusmini;
import android.accounts.AccountManager;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.View;
import android.widget.Toast;
import com.google.android.gms.auth.GooglePlayServicesAvailabilityException;
import com.google.android.gms.auth.UserRecoverableAuthException;
import com.google.android.gms.common.AccountPicker;
import com.google.android.gms.common.GooglePlayServicesUtil;
import com.google.android.gms.common.SignInButton;
public class LoginActivity extends Activity {
// private static final String TAG = "gpm-login-activity";
static final int REQUEST_CODE_PICK_ACCOUNT = 1000;
private static final String SCOPE;
private SignInButton sign_in_button;
private static String[] scopes = new String[]{
"https://www.googleapis.com/auth/plus.me",
"https://www.googleapis.com/auth/plus.circles.read",
"https://www.googleapis.com/auth/plus.profiles.read"
};
static {
SCOPE = "oauth2: " + TextUtils.join(" ", scopes);
}
private GetUsernameTask user;
String mEmail;
static final int REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR = 1001;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.login_main);
// Log.i(TAG, "onCreate");
sign_in_button = (SignInButton) findViewById(R.id.sign_in_button);
sign_in_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getUsername();
}
});
}
private void getUsername() {
// Log.i(TAG, "getUsername");
if (mEmail == null) {
pickUserAccount();
} else {
if (isDeviceOnline()) {
user = new GetUsernameTask(LoginActivity.this, mEmail, SCOPE);
user.execute();
} else {
Toast.makeText(this, "not online", Toast.LENGTH_LONG).show();
}
}
}
private void pickUserAccount() {
// Log.i(TAG, "pickUserAccount");
String[] accountTypes = new String[]{"com.google"};
Intent intent = AccountPicker.newChooseAccountIntent(null, null, accountTypes, false, null, null, null, null);
startActivityForResult(intent, REQUEST_CODE_PICK_ACCOUNT);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// Log.i(TAG, "onActivityResult");
if (requestCode == REQUEST_CODE_PICK_ACCOUNT) {
if (resultCode == RESULT_OK) {
mEmail = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
getUsername();
} else if (resultCode == RESULT_CANCELED) {
Toast.makeText(this, "Please pick an account", Toast.LENGTH_SHORT).show();
}
}
}
public void handleException(final Exception e) {
runOnUiThread(new Runnable() {
@Override
public void run() {
if (e instanceof GooglePlayServicesAvailabilityException) {
int statusCode = ((GooglePlayServicesAvailabilityException)e).getConnectionStatusCode();
Dialog dialog = GooglePlayServicesUtil.getErrorDialog(statusCode, LoginActivity.this, REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR);
dialog.show();
} else if (e instanceof UserRecoverableAuthException) {
Intent intent = ((UserRecoverableAuthException)e).getIntent();
startActivityForResult(intent, REQUEST_CODE_RECOVER_FROM_PLAY_SERVICES_ERROR);
}
}
});
}
boolean isDeviceOnline() {
// Log.i(TAG, "isDeviceOnline");
ConnectivityManager connMgr = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
boolean isWifiConn = networkInfo.isConnected();
networkInfo = connMgr.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean isMobileConn = networkInfo.isConnected();
return isMobileConn || isWifiConn;
}
}