Upstream version 10.38.220.0
[platform/framework/web/crosswalk.git] / src / chrome / android / java / src / org / chromium / chrome / browser / signin / SigninManager.java
index f2eb434..e8d0352 100644 (file)
@@ -13,6 +13,8 @@ import android.content.DialogInterface;
 import android.os.Handler;
 import android.util.Log;
 
+import org.chromium.base.ActivityState;
+import org.chromium.base.ApplicationStatus;
 import org.chromium.base.CalledByNative;
 import org.chromium.base.ObserverList;
 import org.chromium.base.ThreadUtils;
@@ -63,6 +65,8 @@ public class SigninManager {
 
     private AlertDialog mPolicyConfirmationDialog;
 
+    private boolean mSigninAllowedByPolicy;
+
     /**
      * SignInAllowedObservers will be notified once signing-in becomes allowed or disallowed.
      */
@@ -111,6 +115,7 @@ public class SigninManager {
         ThreadUtils.assertOnUiThread();
         mContext = context.getApplicationContext();
         mNativeSigninManagerAndroid = nativeInit();
+        mSigninAllowedByPolicy = nativeIsSigninAllowedByPolicy(mNativeSigninManagerAndroid);
     }
 
     /**
@@ -130,11 +135,19 @@ public class SigninManager {
      * Returns true if signin can be started now.
      */
     public boolean isSignInAllowed() {
-        return !mFirstRunCheckIsPending &&
+        return mSigninAllowedByPolicy &&
+                !mFirstRunCheckIsPending &&
                 mSignInAccount == null &&
                 ChromeSigninController.get(mContext).getSignedInUser() == null;
     }
 
+    /**
+     * Returns true if signin is disabled by policy.
+     */
+    public boolean isSigninDisabledByPolicy() {
+        return !mSigninAllowedByPolicy;
+    }
+
     public void addSignInAllowedObserver(SignInAllowedObserver observer) {
         mSignInAllowedObservers.addObserver(observer);
     }
@@ -204,7 +217,8 @@ public class SigninManager {
             return;
         }
 
-        if (mSignInActivity.isDestroyed()) {
+        if (mSignInActivity != null &&
+            ApplicationStatus.getStateForActivity(mSignInActivity) == ActivityState.DESTROYED) {
             // The activity is no longer running, cancel sign in.
             cancelSignIn();
             return;
@@ -243,7 +257,8 @@ public class SigninManager {
                         mPolicyConfirmationDialog = null;
                     }
                 });
-        builder.setOnDismissListener(
+        mPolicyConfirmationDialog = builder.create();
+        mPolicyConfirmationDialog.setOnDismissListener(
                 new DialogInterface.OnDismissListener() {
                     @Override
                     public void onDismiss(DialogInterface dialog) {
@@ -254,7 +269,6 @@ public class SigninManager {
                         }
                     }
                 });
-        mPolicyConfirmationDialog = builder.create();
         mPolicyConfirmationDialog.show();
     }
 
@@ -387,8 +401,15 @@ public class SigninManager {
         return nativeIsNewProfileManagementEnabled();
     }
 
+    @CalledByNative
+    private void onSigninAllowedByPolicyChanged(boolean newSigninAllowedByPolicy) {
+        mSigninAllowedByPolicy = newSigninAllowedByPolicy;
+        notifySignInAllowedChanged();
+    }
+
     // Native methods.
     private native long nativeInit();
+    private native boolean nativeIsSigninAllowedByPolicy(long nativeSigninManagerAndroid);
     private native boolean nativeShouldLoadPolicyForUser(String username);
     private native void nativeCheckPolicyBeforeSignIn(
             long nativeSigninManagerAndroid, String username);