package com.rafali.flickruploader.ui.activity;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatActivity;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.widget.TextView;
import com.google.android.gms.analytics.GoogleAnalytics;
import com.rafali.common.STR;
import com.rafali.common.ToolString;
import com.rafali.flickruploader.AppInstall;
import com.rafali.flickruploader.api.FlickrApi;
import com.rafali.flickruploader.tool.RPC;
import com.rafali.flickruploader.tool.Utils;
import com.rafali.flickruploader2.R;
import org.androidannotations.annotations.AfterViews;
import org.androidannotations.annotations.Background;
import org.androidannotations.annotations.Click;
import org.androidannotations.annotations.EActivity;
import org.androidannotations.annotations.UiThread;
import org.androidannotations.annotations.ViewById;
import org.slf4j.LoggerFactory;
@EActivity(R.layout.flickr_web_auth_activity)
public class FlickrWebAuthActivity extends AppCompatActivity {
public static final int RESULT_CODE_AUTH = 2227;
static final org.slf4j.Logger LOG = LoggerFactory.getLogger(FlickrWebAuthActivity.class);
@ViewById(R.id.progress_container)
View progressContainer;
@ViewById(R.id.error_container)
View errorContainer;
@ViewById(R.id.progress_text)
TextView progressText;
@ViewById(R.id.error_text)
TextView errorText;
@Click(R.id.error_button)
void onErrorClick() {
loadAuthorizationUrl();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
requestWindowFeature(Window.FEATURE_PROGRESS);
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setDisplayHomeAsUpEnabled(true);
}
super.onCreate(savedInstanceState);
}
@SuppressLint({"SetJavaScriptEnabled", "NewApi"})
@AfterViews
protected void onAfterViews() {
setLoading("Opening browser…");
if (System.currentTimeMillis() - Utils.getLongProperty(STR.lastBrowserOpenForAuth) < 10 * 60 * 1000L) {
doDataCallback();
} else {
loadAuthorizationUrl();
}
}
@Background
void loadAuthorizationUrl() {
try {
Utils.saveAndroidDevice();
String url = "http://ra-fa-li.appspot.com/flickr?oauth_redirect=true&device_id=" + Utils.getDeviceId();
Intent i = new Intent(Intent.ACTION_VIEW);
i.setData(Uri.parse(url));
startActivity(i);
setLoading("Waiting for browser info…");
Utils.setLongProperty(STR.lastBrowserOpenForAuth, System.currentTimeMillis());
} catch (Throwable e) {
setError(e);
}
}
@Override
protected void onStart() {
super.onStart();
GoogleAnalytics.getInstance(this).reportActivityStart(this);
}
boolean paused = false;
@Override
protected void onStop() {
super.onStop();
GoogleAnalytics.getInstance(this).reportActivityStop(this);
}
@Override
protected void onPause() {
paused = true;
super.onPause();
}
@Override
protected void onResume() {
if (paused) {
doDataCallback();
}
paused = false;
super.onResume();
}
@UiThread
void setLoading(String message) {
errorContainer.setVisibility(View.GONE);
progressContainer.setVisibility(View.VISIBLE);
progressText.setText(message);
}
@UiThread
void setError(Throwable e) {
LOG.error(ToolString.stack2string(e));
errorContainer.setVisibility(View.VISIBLE);
progressContainer.setVisibility(View.GONE);
errorText.setText("Error: " + (ToolString.isBlank(e.getMessage()) ? e.getClass().getName() : e.getMessage()));
}
@Background
void doDataCallback() {
Utils.clearProperty(STR.lastBrowserOpenForAuth);
setLoading("Almost done…");
try {
AppInstall appInstall = RPC.getRpcService().ensureInstall(Utils.createAndroidDevice());
if (ToolString.isBlank(appInstall.getFlickrToken())) {
setError(new Exception("app not in sync with server"));
} else {
Utils.setStringProperty(STR.accessToken, appInstall.getFlickrToken());
Utils.setStringProperty(STR.accessTokenSecret, appInstall.getFlickrTokenSecret());
Utils.setStringProperty(STR.userId, appInstall.getFlickrUserId());
Utils.setStringProperty(STR.userName, appInstall.getFlickrUserName());
FlickrApi.reset();
FlickrApi.syncMedia();
setResult(RESULT_CODE_AUTH);
finish();
}
} catch (Throwable e) {
setError(e);
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
finish();
}
return super.onOptionsItemSelected(item);
}
}