diff --git a/android/android.iml b/android/android.iml index a162bd1..0ee1481 100644 --- a/android/android.iml +++ b/android/android.iml @@ -1,5 +1,5 @@ - + @@ -8,14 +8,138 @@ + - + + + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/android/local.properties b/android/local.properties index d9dc6da..ffb1ddd 100644 --- a/android/local.properties +++ b/android/local.properties @@ -7,6 +7,5 @@ # Location of the SDK. This is only used by Gradle. # For customization when using a Version Control System, please read the # header note. -#Fri Sep 02 11:41:31 PDT 2016 -sdk.dir=/usr/local/opt/android-sdk -ndk.dir=/usr/local/opt/android-ndk \ No newline at end of file +#Tue Apr 11 11:36:49 IST 2017 +sdk.dir=/Users/divyanshunegi/Downloads/adt-bundle-mac-x86_64-20140321/sdk diff --git a/android/src/main/java/io/fullstack/oauth/OAuthManagerDialogFragment.java b/android/src/main/java/io/fullstack/oauth/OAuthManagerDialogFragment.java index adead8d..6398199 100644 --- a/android/src/main/java/io/fullstack/oauth/OAuthManagerDialogFragment.java +++ b/android/src/main/java/io/fullstack/oauth/OAuthManagerDialogFragment.java @@ -1,54 +1,51 @@ package io.fullstack.oauth; -import im.delight.android.webview.AdvancedWebView; -import android.app.Dialog; - -import android.net.Uri; -import java.util.Set; -import java.net.URL; -import java.net.MalformedURLException; -import android.text.TextUtils; import android.annotation.SuppressLint; -import android.widget.LinearLayout; -import android.view.Gravity; -import android.os.Build; - +import android.app.Dialog; import android.app.DialogFragment; -import android.content.DialogInterface; -import android.widget.FrameLayout; - -import android.webkit.WebView; -import android.view.View; -import android.webkit.WebViewClient; +import android.content.Context; import android.content.Intent; +import android.content.res.Resources; +import android.graphics.Bitmap; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.net.Uri; +import android.os.Build; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.DisplayMetrics; +import android.util.Log; +import android.view.Display; import android.view.LayoutInflater; +import android.view.View; import android.view.ViewGroup; import android.view.ViewGroup.LayoutParams; -import android.content.Context; -import android.util.DisplayMetrics; -import android.view.Display; -import java.lang.reflect.Method; +import android.view.Window; import android.view.WindowManager; +import android.webkit.WebView; +import android.webkit.WebViewClient; +import android.widget.ProgressBar; +import android.widget.RelativeLayout; -import com.github.scribejava.core.model.OAuth1AccessToken; -import com.github.scribejava.core.model.OAuth1RequestToken; -import android.util.Log; -import android.graphics.Bitmap; -import android.os.Bundle; -import android.app.Fragment; -import java.io.IOException; import com.facebook.react.bridge.ReactContext; +import com.github.scribejava.core.model.OAuth1AccessToken; + +import java.lang.reflect.Method; +import java.util.Set; + +import im.delight.android.webview.AdvancedWebView; public class OAuthManagerDialogFragment extends DialogFragment implements AdvancedWebView.Listener { private static final int WEBVIEW_TAG = 100001; private static final int WIDGET_TAG = 100002; - private static final String TAG = "OAuthManagerDialogFragment"; + private static final String TAG = "OauthFragment"; private OAuthManagerFragmentController mController; private ReactContext mReactContext; private AdvancedWebView mWebView; + private ProgressBar mProgressBar; public static final OAuthManagerDialogFragment newInstance( final ReactContext reactContext, @@ -57,7 +54,6 @@ public static final OAuthManagerDialogFragment newInstance( Bundle args = new Bundle(); OAuthManagerDialogFragment frag = new OAuthManagerDialogFragment(reactContext, controller); - return frag; } @@ -69,28 +65,43 @@ public OAuthManagerDialogFragment( this.mReactContext = reactContext; } + @Override + public Dialog onCreateDialog(Bundle savedInstanceState) { + Dialog dialog = super.onCreateDialog(savedInstanceState); + dialog.getWindow().requestFeature(Window.FEATURE_NO_TITLE); + return dialog; + } + + @Override + public void onStart() { + super.onStart(); + Dialog dialog = getDialog(); + if (dialog != null) { + dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); + dialog.getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + } + } + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { - // View rootView = inflater.inflate(R.id.primary, container, false); - // final Context context = inflater.getContext(); - // DisplayMetrics metrics = context.getResources().getDisplayMetrics(); - // final int DIALOG_HEIGHT = (int) Math.min(0.99f * metrics.heightPixels, 1024); - - // LayoutParams rootViewLayoutParams = new LayoutParams( - // LayoutParams.FILL_PARENT, - // LayoutParams.FILL_PARENT - // ); final Context context = mReactContext; LayoutParams rootViewLayoutParams = this.getFullscreenLayoutParams(context); - FrameLayout rootView = new FrameLayout(context); + RelativeLayout rootView = new RelativeLayout(context); + + mProgressBar = new ProgressBar(context); + RelativeLayout.LayoutParams progressParams = new RelativeLayout.LayoutParams(convertDpToPixel(50f,context),convertDpToPixel(50f,context)); + progressParams.addRule(RelativeLayout.CENTER_IN_PARENT); + mProgressBar.setLayoutParams(progressParams); + mProgressBar.setIndeterminate(true); + getDialog().setCanceledOnTouchOutside(true); rootView.setLayoutParams(rootViewLayoutParams); // mWebView = (AdvancedWebView) rootView.findViewById(R.id.webview); Log.d(TAG, "Creating webview"); mWebView = new AdvancedWebView(context); - mWebView.setId(WEBVIEW_TAG); +// mWebView.setId(WEBVIEW_TAG); mWebView.setListener(this, this); mWebView.setVisibility(View.VISIBLE); mWebView.getSettings().setJavaScriptEnabled(true); @@ -100,13 +111,14 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa LayoutParams layoutParams = this.getFullscreenLayoutParams(context); //new LayoutParams( - // LayoutParams.FILL_PARENT, + // LayoutParams.FILL_PARENT, // DIALOG_HEIGHT // ); // mWebView.setLayoutParams(layoutParams); rootView.addView(mWebView, layoutParams); - + rootView.addView(mProgressBar,progressParams); + // LinearLayout pframe = new LinearLayout(context); // pframe.setId(WIDGET_TAG); // pframe.setOrientation(LinearLayout.VERTICAL); @@ -157,7 +169,7 @@ private LayoutParams getFullscreenLayoutParams(Context context) { realHeight = display.getHeight(); } - return new LayoutParams(realWidth, realHeight); + return new LayoutParams(realWidth, realHeight-convertDpToPixel(50f,context)); } @@ -168,7 +180,13 @@ public boolean shouldOverrideUrlLoading(WebView view, String url) { return interceptUrl(view, url, true); } - @Override + @Override + public void onPageFinished(WebView view, String url) { + super.onPageFinished(view, url); + mProgressBar.setVisibility(View.GONE); + } + + @Override public void onReceivedError(WebView view, int code, String desc, String failingUrl) { Log.i(TAG, "onReceivedError: " + failingUrl); super.onReceivedError(view, code, desc, failingUrl); @@ -179,7 +197,6 @@ private boolean interceptUrl(WebView view, String url, boolean loadUrl) { Log.i(TAG, "interceptUrl called with url: " + url); if (isCallbackUri(url, mController.getCallbackUrl())) { mController.getAccessToken(mWebView, url); - return true; } @@ -196,18 +213,12 @@ public void setComplete(final OAuth1AccessToken accessToken) { Log.d(TAG, "Completed: " + accessToken); } - @Override - public void onStart() { - super.onStart(); - - Log.d(TAG, "onStart for DialogFragment"); - } - @Override - public void onDismiss(final DialogInterface dialog) { - super.onDismiss(dialog); - Log.d(TAG, "Dismissing dialog"); - } +// @Override +// public void onDismiss(final DialogInterface dialog) { +// super.onDismiss(dialog); +// Log.d(TAG, "Dismissing dialog"); +// } // @Override @@ -308,4 +319,11 @@ static boolean isCallbackUri(String uri, String callbackUrl) { if (!TextUtils.isEmpty(frag) && !TextUtils.equals(frag, u.getFragment())) return false; return true; } + + public static int convertDpToPixel(float dp, Context context){ + Resources resources = context.getResources(); + DisplayMetrics metrics = resources.getDisplayMetrics(); + float px = dp * ((float)metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT); + return (int)px; + } } \ No newline at end of file diff --git a/android/src/main/java/io/fullstack/oauth/OAuthManagerFragmentController.java b/android/src/main/java/io/fullstack/oauth/OAuthManagerFragmentController.java index 6f2ca3f..accf7e8 100644 --- a/android/src/main/java/io/fullstack/oauth/OAuthManagerFragmentController.java +++ b/android/src/main/java/io/fullstack/oauth/OAuthManagerFragmentController.java @@ -1,35 +1,26 @@ package io.fullstack.oauth; -import android.app.Dialog; -import android.os.Bundle; +import android.app.Fragment; +import android.app.FragmentTransaction; +import android.net.Uri; +import android.os.AsyncTask; import android.os.Handler; import android.os.Looper; -import android.os.AsyncTask; -import android.text.TextUtils; -import im.delight.android.webview.AdvancedWebView; - -import com.facebook.react.bridge.ReactContext; -import android.net.Uri; import android.util.Log; -import android.view.View; -import android.view.ViewGroup; -import android.app.Fragment; -import android.app.FragmentTransaction; -import java.util.HashMap; -import java.util.Map; -import java.io.IOException; - -import com.github.scribejava.core.model.OAuth1RequestToken; +import com.facebook.react.bridge.ReactContext; +import com.github.scribejava.core.exceptions.OAuthConnectionException; import com.github.scribejava.core.model.OAuth1AccessToken; +import com.github.scribejava.core.model.OAuth1RequestToken; import com.github.scribejava.core.model.OAuth2AccessToken; -import com.github.scribejava.core.model.Token; - -import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.oauth.OAuthService; import com.github.scribejava.core.oauth.OAuth10aService; import com.github.scribejava.core.oauth.OAuth20Service; -import com.github.scribejava.core.exceptions.OAuthConnectionException; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import im.delight.android.webview.AdvancedWebView; // Credit where credit is due: // Mostly taken from @@ -135,7 +126,7 @@ public void run() { (OAuthManagerDialogFragment) fragmentManager.findFragmentByTag(TAG); if (frag != null) { - frag.dismissAllowingStateLoss(); + //frag.dismissAllowingStateLoss(); } } }); diff --git a/android/src/main/java/io/fullstack/oauth/OAuthManagerModule.java b/android/src/main/java/io/fullstack/oauth/OAuthManagerModule.java index 7cf8c2b..ebea2c3 100644 --- a/android/src/main/java/io/fullstack/oauth/OAuthManagerModule.java +++ b/android/src/main/java/io/fullstack/oauth/OAuthManagerModule.java @@ -1,56 +1,38 @@ package io.fullstack.oauth; -import android.util.Log; +import android.app.Activity; +import android.app.FragmentManager; import android.content.Context; -import android.net.Uri; -import android.os.Handler; -import android.content.SharedPreferences; - -import java.net.URL; -import java.net.MalformedURLException; - import android.support.annotation.Nullable; -import android.app.FragmentManager; -import android.support.v4.app.FragmentActivity; -import android.app.Activity; -import android.text.TextUtils; - -import java.io.IOException; -import java.util.Map; -import java.util.Set; -import java.util.Iterator; -import java.util.HashMap; -import java.util.List; -import java.util.ArrayList; +import android.util.Log; import com.facebook.react.bridge.Arguments; -import com.facebook.react.bridge.LifecycleEventListener; +import com.facebook.react.bridge.Callback; import com.facebook.react.bridge.ReactApplicationContext; +import com.facebook.react.bridge.ReactContext; import com.facebook.react.bridge.ReactContextBaseJavaModule; import com.facebook.react.bridge.ReactMethod; -import com.facebook.react.bridge.Callback; -import com.facebook.react.bridge.WritableMap; -import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableArray; -import com.facebook.react.bridge.ReadableType; +import com.facebook.react.bridge.ReadableMap; import com.facebook.react.bridge.ReadableMapKeySetIterator; -import com.facebook.react.bridge.ReactContext; - -import com.github.scribejava.core.builder.api.BaseApi; -import com.github.scribejava.core.model.Verb; - -import com.github.scribejava.core.builder.ServiceBuilder; +import com.facebook.react.bridge.ReadableType; +import com.facebook.react.bridge.WritableMap; import com.github.scribejava.core.model.OAuth1AccessToken; -import com.github.scribejava.core.model.OAuth1RequestToken; +import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.model.OAuthRequest; -import com.github.scribejava.core.model.OAuthConfig; import com.github.scribejava.core.model.Response; import com.github.scribejava.core.model.Verb; import com.github.scribejava.core.oauth.OAuth10aService; - -import com.github.scribejava.core.model.OAuth2AccessToken; import com.github.scribejava.core.oauth.OAuth20Service; +import java.io.IOException; +import java.net.MalformedURLException; +import java.net.URL; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + class ProviderNotConfiguredException extends Exception { public ProviderNotConfiguredException(String message) { super(message); @@ -71,7 +53,6 @@ class OAuthManagerModule extends ReactContextBaseJavaModule { public OAuthManagerModule(ReactApplicationContext reactContext) { super(reactContext); mReactContext = reactContext; - _credentialsStore = OAuthManagerStore.getOAuthManagerStore(mReactContext, TAG, Context.MODE_PRIVATE); Log.d(TAG, "New instance"); } @@ -128,7 +109,7 @@ public void authorize( final OAuthManagerModule self = this; final HashMap cfg = this.getConfiguration(providerName); final String authVersion = (String) cfg.get("auth_version"); - Activity activity = mReactContext.getCurrentActivity(); + Activity activity = this.getCurrentActivity(); FragmentManager fragmentManager = activity.getFragmentManager(); String callbackUrl = "http://localhost/" + providerName; diff --git a/android/src/main/res/layout/webview_layout.xml b/android/src/main/res/layout/webview_layout.xml new file mode 100644 index 0000000..29f061f --- /dev/null +++ b/android/src/main/res/layout/webview_layout.xml @@ -0,0 +1,12 @@ + + + + + +