package com.aptoide.amethyst.ui;
import android.accounts.Account;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
import android.content.ContentResolver;
import android.content.SharedPreferences;
import android.os.Build;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v7.widget.Toolbar;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import com.aptoide.amethyst.Aptoide;
import com.aptoide.amethyst.AptoideBaseActivity;
import com.aptoide.amethyst.BuildConfig;
import com.aptoide.amethyst.R;
import com.aptoide.amethyst.configuration.AptoideConfiguration;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.GoogleApiAvailability;
import com.google.android.gms.common.api.GoogleApiClient;
import java.util.Arrays;
import java.util.Collection;
import java.util.Properties;
/**
* Created by rmateus on 31-12-2013.
*/
public class MyAccountActivity extends AptoideBaseActivity implements GoogleApiClient.ConnectionCallbacks , GoogleApiClient.OnConnectionFailedListener{
public static final String WEBINSTALL_SYNC_AUTHORITY = BuildConfig.APPLICATION_ID + ".StubProvider";
private Toolbar mToolbar;
private AccountManager mAccountManager;
private UiLifecycleHelper uiLifecycleHelper;
private Session.StatusCallback statusCallback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
}
};
private View mLogout;
private GoogleApiClient googleApiClient;
@Override
public void onCreate(Bundle savedInstanceState) {
//Aptoide.getThemePicker().setAptoideTheme(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.form_logout);
mToolbar = (Toolbar) findViewById(R.id.toolbar_login);
mLogout = findViewById(R.id.button_logout);
setSupportActionBar(mToolbar);
getSupportActionBar().setHomeButtonEnabled(true);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowTitleEnabled(true);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
uiLifecycleHelper = new UiLifecycleHelper(this, statusCallback);
uiLifecycleHelper.onCreate(savedInstanceState);
}
final String accountType = Aptoide.getConfiguration().getAccountType();
mAccountManager = AccountManager.get(this);
if (mAccountManager.getAccountsByType(accountType).length <= 0) {
addAccount();
finish();
return;
}
final Account account = mAccountManager.getAccountsByType(accountType)[0];
((TextView) findViewById(R.id.username)).setText(account.name);
final int connectionResult = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(this);
final Collection<Integer> badResults = Arrays.asList(ConnectionResult.SERVICE_MISSING, ConnectionResult.SERVICE_DISABLED);
final boolean gmsAvailable = BuildConfig.GMS_CONFIGURED && !badResults.contains(connectionResult);
if (gmsAvailable) {
mLogout.setEnabled(false);
final GoogleSignInOptions gso = new GoogleSignInOptions
.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestServerAuthCode(BuildConfig.GMS_SERVER_ID)
.build();
googleApiClient = new GoogleApiClient.Builder(this)
.addConnectionCallbacks(this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.enableAutoManage(this, this)
.build();
googleApiClient.connect();
}
mLogout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
singOutGoogle();
singOutFacebook();
removeAccount(account);
}
});
}
private void singOutGoogle() {
if (googleApiClient != null && googleApiClient.isConnected()) {
Auth.GoogleSignInApi.signOut(googleApiClient);
}
}
private void singOutFacebook() {
if (Build.VERSION.SDK_INT >= 8) {
Session session = new Session(MyAccountActivity.this);
Session.setActiveSession(session);
if (Session.getActiveSession() != null) {
Session.getActiveSession().closeAndClearTokenInformation();
}
}
}
private void removeAccount(final Account account) {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
sharedPreferences.edit().remove("queueName").apply();
ContentResolver.setIsSyncable(account, WEBINSTALL_SYNC_AUTHORITY, 0);
ContentResolver.setSyncAutomatically(account, MyAccountActivity.WEBINSTALL_SYNC_AUTHORITY, false);
if(Build.VERSION.SDK_INT>=8){
ContentResolver.removePeriodicSync(account, MyAccountActivity.WEBINSTALL_SYNC_AUTHORITY, new Bundle());
}
mAccountManager.removeAccount(account, new AccountManagerCallback<Boolean>() {
@Override
public void run(AccountManagerFuture<Boolean> future) {
addAccount();
finish();
}
}, null);
}
private void addAccount() {
mAccountManager.addAccount(Aptoide.getConfiguration().getAccountType(), AptoideConfiguration.AccountGeneral.AUTHTOKEN_TYPE_FULL_ACCESS, null, null, this, new AccountManagerCallback<Bundle>() {
@Override
public void run(AccountManagerFuture<Bundle> future) {
try {
Bundle bnd = future.getResult();
if (bnd.containsKey(AccountManager.KEY_AUTHTOKEN)) {
setContentView(R.layout.form_logout);
} else {
finish();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}, null);
}
@Override
protected void onResume() {
super.onResume();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
uiLifecycleHelper.onResume();
}
}
@Override
public void onPause() {
super.onPause();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
uiLifecycleHelper.onPause();
}
}
@Override
public void onDestroy() {
super.onDestroy();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
uiLifecycleHelper.onDestroy();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.GINGERBREAD) {
uiLifecycleHelper.onSaveInstanceState(outState);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int i = item.getItemId();
if (i == android.R.id.home) {
finish();
} else if (i == R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
@Override
public void onConnected(Bundle bundle) {
mLogout.setEnabled(true);
}
@Override
public void onConnectionSuspended(int i) {
mLogout.setEnabled(false);
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
new Properties().getProperty("");
}
@Override
protected String getScreenName() {
return "My Account";
}
}