Show prelogin only once

 Bug: 5081641

Change-Id: I1c625e3528de9a7cd37dae5b8b428ff141759e14
diff --git a/src/com/android/browser/GoogleAccountLogin.java b/src/com/android/browser/GoogleAccountLogin.java
index 93996cd..cd96346 100644
--- a/src/com/android/browser/GoogleAccountLogin.java
+++ b/src/com/android/browser/GoogleAccountLogin.java
@@ -16,12 +16,6 @@
 
 package com.android.browser;
 
-import org.apache.http.HttpEntity;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpStatus;
-import org.apache.http.client.methods.HttpPost;
-import org.apache.http.util.EntityUtils;
-
 import android.accounts.Account;
 import android.accounts.AccountManager;
 import android.accounts.AccountManagerCallback;
@@ -35,13 +29,17 @@
 import android.net.Uri;
 import android.net.http.AndroidHttpClient;
 import android.os.Bundle;
-import android.os.Handler;
-import android.preference.PreferenceManager;
 import android.util.Log;
 import android.webkit.CookieSyncManager;
 import android.webkit.WebView;
 import android.webkit.WebViewClient;
 
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.util.EntityUtils;
+
 public class GoogleAccountLogin implements Runnable,
         AccountManagerCallback<Bundle>, OnCancelListener {
 
@@ -56,14 +54,11 @@
     // Google account type
     private static final String GOOGLE = "com.google";
     // Last auto login time
-    private static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
+    public static final String PREF_AUTOLOGIN_TIME = "last_autologin_time";
 
     private final Activity mActivity;
     private final Account mAccount;
     private final WebView mWebView;
-    // Does not matter if this is initialized in a non-ui thread.
-    // Dialog.dismiss() will post to the right handler.
-    private final Handler mHandler = new Handler();
     private Runnable mRunnable;
     private ProgressDialog mProgressDialog;
 
@@ -93,15 +88,13 @@
             }
             @Override
             public void onPageFinished(WebView view, String url) {
-                saveLoginTime();
                 done();
             }
         });
     }
 
     private void saveLoginTime() {
-        Editor ed = PreferenceManager.
-                getDefaultSharedPreferences(mActivity).edit();
+        Editor ed = BrowserSettings.getInstance().getPreferences().edit();
         ed.putLong(PREF_AUTOLOGIN_TIME, System.currentTimeMillis());
         ed.apply();
     }
@@ -228,7 +221,7 @@
     public static void startLoginIfNeeded(Activity activity,
             Runnable runnable) {
         // Already logged in?
-        if (isLoggedIn(activity)) {
+        if (isLoggedIn()) {
             runnable.run();
             return;
         }
@@ -246,6 +239,7 @@
     }
 
     private void startLogin() {
+        saveLoginTime();
         mProgressDialog = ProgressDialog.show(mActivity,
                 mActivity.getString(R.string.pref_autologin_title),
                 mActivity.getString(R.string.pref_autologin_progress,
@@ -263,11 +257,10 @@
     }
 
     // Checks if we already did pre-login.
-    private static boolean isLoggedIn(Context ctx) {
+    private static boolean isLoggedIn() {
         // See if we last logged in less than a week ago.
-        long lastLogin = PreferenceManager.
-                getDefaultSharedPreferences(ctx).
-                getLong(PREF_AUTOLOGIN_TIME, -1);
+        long lastLogin = BrowserSettings.getInstance().getPreferences()
+                .getLong(PREF_AUTOLOGIN_TIME, -1);
         if (lastLogin == -1) {
             return false;
         }
diff --git a/src/com/android/browser/PreferenceKeys.java b/src/com/android/browser/PreferenceKeys.java
index 4174732..ce8ec9f 100644
--- a/src/com/android/browser/PreferenceKeys.java
+++ b/src/com/android/browser/PreferenceKeys.java
@@ -70,6 +70,7 @@
     static final String PREF_NORMAL_LAYOUT = "normal_layout";
     static final String PREF_SMALL_SCREEN = "small_screen";
     static final String PREF_WIDE_VIEWPORT = "wide_viewport";
+    static final String PREF_RESET_PRELOGIN = "reset_prelogin";
 
     // ----------------------
     // Keys for lab_preferences.xml
diff --git a/src/com/android/browser/preferences/DebugPreferencesFragment.java b/src/com/android/browser/preferences/DebugPreferencesFragment.java
index 984c12a..566eee2 100644
--- a/src/com/android/browser/preferences/DebugPreferencesFragment.java
+++ b/src/com/android/browser/preferences/DebugPreferencesFragment.java
@@ -18,6 +18,7 @@
 
 import com.android.browser.BrowserActivity;
 import com.android.browser.BrowserSettings;
+import com.android.browser.GoogleAccountLogin;
 import com.android.browser.PreferenceKeys;
 import com.android.browser.R;
 
@@ -25,10 +26,11 @@
 import android.os.Bundle;
 import android.preference.Preference;
 import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.Preference.OnPreferenceClickListener;
 import android.preference.PreferenceFragment;
 
 public class DebugPreferencesFragment extends PreferenceFragment
-        implements OnPreferenceChangeListener {
+        implements OnPreferenceChangeListener, OnPreferenceClickListener {
     @Override
     public void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -38,6 +40,8 @@
 
         Preference e = findPreference(PreferenceKeys.PREF_ENABLE_HARDWARE_ACCEL);
         e.setOnPreferenceChangeListener(this);
+        e = findPreference(PreferenceKeys.PREF_RESET_PRELOGIN);
+        e.setOnPreferenceClickListener(this);
     }
 
     @Override
@@ -47,4 +51,15 @@
                 getActivity(), BrowserActivity.class));
         return true;
     }
+
+    @Override
+    public boolean onPreferenceClick(Preference preference) {
+        if (PreferenceKeys.PREF_RESET_PRELOGIN.equals(preference.getKey())) {
+            BrowserSettings.getInstance().getPreferences().edit()
+                    .remove(GoogleAccountLogin.PREF_AUTOLOGIN_TIME)
+                    .apply();
+            return true;
+        }
+        return false;
+    }
 }