package com.hkm.disqus.application;
import android.app.Activity;
import android.net.Uri;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.view.ViewCompat;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;
import com.hkm.disqus.DisqusClient;
import com.hkm.disqus.DisqusConstants;
import com.hkm.disqus.api.ApiConfig;
import com.hkm.ezwebview.Util.Fx9C;
import com.hkm.ezwebview.app.BasicWebViewNormal;
import com.hkm.ezwebview.webviewclients.PaymentClient;
import retrofit.RestAdapter;
/**
* Created by hesk on 6/11/15.
*/
public class AuthorizationFragment extends BasicWebViewNormal {
public static AuthorizationFragment B(final Bundle b) {
final AuthorizationFragment t = new AuthorizationFragment();
t.setArguments(b);
return t;
}
public static Bundle ScopeBundle(@Nullable String apikey,
@Nullable String scope,
@Nullable String redirect_uri,
@Nullable String secret) {
final Bundle n = new Bundle();
n.putString(AuthorizeActivity.EXTRA_API_KEY, apikey);
n.putString(AuthorizeActivity.EXTRA_SCOPES, scope);
n.putString(AuthorizeActivity.EXTRA_REDIRECT_URI, redirect_uri);
n.putString(AuthorizeActivity.EXTRA_SECRET, secret);
return n;
}
public static Bundle bundleConfig(@Nullable String apikey,
@Nullable String access_default,
@Nullable String redirect_uri,
@Nullable String secret) {
final Bundle n = new Bundle();
n.putString(AuthorizeActivity.EXTRA_API_KEY, apikey);
n.putString(AuthorizeActivity.EXTRA_DEFAULT_ACCESS, access_default);
n.putString(AuthorizeActivity.EXTRA_REDIRECT_URI, redirect_uri);
n.putString(AuthorizeActivity.EXTRA_SECRET, secret);
return n;
}
public static ApiConfig genConfig(Bundle bundle) {
ApiConfig conf = new ApiConfig(
bundle.getString(AuthorizeActivity.EXTRA_API_KEY),
bundle.getString(AuthorizeActivity.EXTRA_DEFAULT_ACCESS),
RestAdapter.LogLevel.BASIC);
conf.setApiSecret(bundle.getString(AuthorizeActivity.EXTRA_SECRET));
conf.setRedirectUri(bundle.getString(AuthorizeActivity.EXTRA_REDIRECT_URI));
return conf;
}
/**
* on press
*/
private static final String authURI = "https://disqus.com/api/oauth/2.0/grant/";
/**
* Logging tag
*/
protected static final String TAG = "AuthorizLog";
protected ACTION maction;
/**
* The Disqus API key
*/
private String mApiKey;
/**
* The Disqus secret id
*/
private String mSecret;
/**
* Scopes
*/
private String[] mScopes;
/**
* Authorize redirect URI
*/
private String mRedirectUri;
/**
* Authorization listener
*/
// private AuthorizeListener mListener;
/**
* A {@link WebView} to display the Disqus disqusloginactivityframelayout
*/
private WebView mWebView;
private boolean isDialogShown = false;
enum ACTION {
REFRESH_TOKEN, STEP1, STEP2
}
protected void LoadConfig() {
if (getArguments().containsKey(AuthorizeActivity.EXTRA_API_KEY)) {
mApiKey = getArguments().getString(AuthorizeActivity.EXTRA_API_KEY);
}
if (getArguments().containsKey(AuthorizeActivity.EXTRA_SCOPES)) {
mScopes = getArguments().getStringArray(AuthorizeActivity.EXTRA_SCOPES);
}
if (getArguments().containsKey(AuthorizeActivity.EXTRA_REDIRECT_URI)) {
mRedirectUri = getArguments().getString(AuthorizeActivity.EXTRA_REDIRECT_URI);
}
if (getArguments().containsKey(AuthorizeActivity.EXTRA_SECRET)) {
mSecret = getArguments().getString(AuthorizeActivity.EXTRA_SECRET);
}
}
/**
* Load authorize url
*
* @return the string
*/
private String getScopes() {
String scope;
try {
scope = AuthorizeUtils.buildScope(mScopes);
} catch (Exception e) {
scope = "read,write";
}
return scope;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
LoadConfig();
Uri request_access_token_path_final = AuthorizeUtils.buildAuthorizeUri(mApiKey, getScopes(), mRedirectUri);
String msg = "Loading authorize url: " + request_access_token_path_final.toString();
Log.d(TAG, msg);
final AuthorizationClient mAth = new AuthorizationClient(getActivity(), block);
Fx9C.setup_payment_gateway(
mAth,
framer,
block,
betterCircleBar,
request_access_token_path_final.toString(),
"Disqus/1.0",
1600);
}
protected void load() {
if (betterCircleBar == null) return;
betterCircleBar.setVisibility(View.INVISIBLE);
ViewCompat.animate(betterCircleBar).alpha(1.0F);
}
private class AuthorizationClient extends PaymentClient {
@Override
protected void triggerNative(Uri trigger_url) {
try {
DisqusClient.getInstance().getAuthManager().authorizeAsync(trigger_url.getQueryParameter("code"));
} catch (NullPointerException e) {
}
}
@Override
protected boolean interceptUrl(WebView view, String url) {
Log.d(TAG, "base change: " + url);
Uri uri = Uri.parse(url);
try {
if (!uri.getQueryParameter("code").equalsIgnoreCase("")) {
triggerNative(Uri.parse(url));
return true;
}
if (url.startsWith(authURI)) {
load();
return false;
}
} catch (NullPointerException e) {
Log.d(TAG, "no key is found change: " + url);
return false;
} catch (UnsupportedOperationException e) {
Log.d(TAG, "UnsupportedOperationException change: " + url);
return false;
} catch (Exception e) {
Log.d(TAG, "Other things change: " + url);
return false;
}
return false;
}
public AuthorizationClient(Activity context, WebView fmWebView) {
super(context, fmWebView);
}
}
}