package com.cloudrail.advancedauthentication;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
import com.cloudrail.si.CloudRail;
import com.cloudrail.si.exceptions.ParseException;
import com.cloudrail.si.interfaces.CloudStorage;
import com.cloudrail.si.services.Dropbox;
public class MainActivity extends AppCompatActivity {
private final static String LOGIN_PENDING = "LOGIN_PENDING";
private final static String AUTH_DATA = "AUTH_DATA";
// TODO: Fill in your credentials here
private final static String LICENSE_KEY = "<Your License Key>";
private final static String DB_CLIENT_ID = "<Dropbox Client ID>";
private final static String DB_CLIENT_SECRET = "<Dropbox Client Secret>";
private CloudStorage cs = new Dropbox(this, DB_CLIENT_ID, DB_CLIENT_SECRET);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Configure CloudRail
CloudRail.setAppKey(LICENSE_KEY);
CloudRail.setAdvancedAuthenticationMode(true);
// Register click listener
Button dbLogin = (Button) findViewById(R.id.dropbox);
dbLogin.setOnClickListener(new StartLogin());
SharedPreferences sharedPreferences = getPreferences(MODE_PRIVATE);
if (sharedPreferences.getString(AUTH_DATA, null) != null) {
/* If there is already a logged in user, load data */
try {
cs.loadAsString(sharedPreferences.getString(AUTH_DATA, null));
new GetUserName().execute();
} catch (ParseException e) {
// If parsing fails, remove user data -> new login required
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.remove(AUTH_DATA);
editor.apply();
}
} else if (sharedPreferences.getBoolean(LOGIN_PENDING, false)) {
/* If a login is pending, continue it */
// Set pending login to false
final SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(LOGIN_PENDING, false);
editor.apply();
// Set result and continue login
CloudRail.setAuthenticationResponse(getIntent());
new Thread() {
@Override
public void run() {
cs.login();
editor.putString(AUTH_DATA, cs.saveAsString());
editor.apply();
new GetUserName().execute();
}
}.start();
}
}
private class StartLogin implements View.OnClickListener {
@Override
public void onClick(View v) {
SharedPreferences sharedPreferences = getPreferences(Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
// Set the login to pending so that we now that a login process has been started
editor.putBoolean(LOGIN_PENDING, true);
editor.apply();
// Start the login process
new Thread() {
@Override
public void run() {
cs.login();
}
}.start();
}
}
private class GetUserName extends AsyncTask<Void, Void, String> {
@Override
protected String doInBackground(Void... params) {
return cs.getUserName();
}
@Override
protected void onPostExecute(String s) {
TextView tv = (TextView) findViewById(R.id.username);
tv.setText(s);
}
}
}