Fix for incognito Tab and url

- Prevents incognito tab from being opened from
  regular tab
- Hides the incognito url when opening incognito
  tab

Change-Id: I873f1ddf9ba99594d58a0984f19f3520a806ea1a
diff --git a/res/values/strings.xml b/res/values/strings.xml
index fdbf17d..3dac55d 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -784,7 +784,6 @@
     <string name="feedback">Feedback</string>
     <string name="swe_legal">Legal information</string>
     <string name="swe_open_source_licenses">Open source licenses</string>
-    <string name="swe_open_source_license_url" translatable="False">chrome://credits</string>
     <string name="swe_pref_legal_info_summary">Copyright (c) 2015, The Linux Foundation. All rights reserved.</string>
     <string name="swe_eula">End user licenses agreement</string>
     <string name="swe_privacy_policy">Privacy policy</string>
diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java
index c3befc8..f4c5dc9 100644
--- a/src/com/android/browser/Controller.java
+++ b/src/com/android/browser/Controller.java
@@ -132,7 +132,7 @@
     private static final String LOGTAG = "Controller";
     private static final String SEND_APP_ID_EXTRA =
         "android.speech.extras.SEND_APPLICATION_ID_EXTRA";
-    private static final String INCOGNITO_URI = "chrome://incognito";
+    public static final String INCOGNITO_URI = "chrome://incognito";
     public static final String EXTRA_REQUEST_CODE = "_fake_request_code_";
     public static final String EXTRA_RESULT_CODE = "_fake_result_code_";
 
diff --git a/src/com/android/browser/Tab.java b/src/com/android/browser/Tab.java
index a65fda5..d3621ef 100644
--- a/src/com/android/browser/Tab.java
+++ b/src/com/android/browser/Tab.java
@@ -228,11 +228,10 @@
 
         PageState(Context c, boolean incognito) {
             mIncognito = incognito;
+            mOriginalUrl = mUrl = "";
             if (mIncognito) {
-                mOriginalUrl = mUrl = "chrome://incognito";
                 mTitle = c.getString(R.string.new_incognito_tab);
             } else {
-                mOriginalUrl = mUrl = "";
                 mTitle = c.getString(R.string.new_tab);
             }
             mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
@@ -240,7 +239,10 @@
 
         PageState(Context c, boolean incognito, String url, Bitmap favicon) {
             mIncognito = incognito;
-            mOriginalUrl = mUrl = url;
+            if (mIncognito)
+                mOriginalUrl = mUrl = "";
+            else
+                mOriginalUrl = mUrl = url;
             mSecurityState = SecurityState.SECURITY_STATE_NOT_SECURE;
             mFavicon = favicon;
         }
@@ -506,7 +508,12 @@
         public WebResourceResponse shouldInterceptRequest(WebView view,
                 String url) {
             //intercept if opening a new incognito tab - show the incognito welcome page
-            if (url.startsWith("chrome://incognito")) {
+
+            // show only incognito content and webview has private
+            // and cannot go back(only supported if explicit from UI )
+            if (view.isPrivateBrowsingEnabled() &&
+                !view.canGoBack() &&
+                url.startsWith(Controller.INCOGNITO_URI)) {
                 Resources resourceHandle = mContext.getResources();
                 InputStream inStream = resourceHandle.openRawResource(
                         com.android.browser.R.raw.incognito_mode_start_page);
@@ -640,13 +647,20 @@
     private void syncCurrentState(WebView view, String url) {
         // Sync state (in case of stop/timeout)
 
+
+
         if (mReceivedError) {
             mCurrentState.mUrl =  url;
             mCurrentState.mOriginalUrl = url;
-        } else {
-             mCurrentState.mUrl =  view.getUrl();
-             mCurrentState.mOriginalUrl = view.getOriginalUrl();
-             mCurrentState.mFavicon = view.getFavicon();
+        } else if (view.isPrivateBrowsingEnabled() &&
+                   !TextUtils.isEmpty(url) &&
+                   url.contains(Controller.INCOGNITO_URI)) {
+            mCurrentState.mUrl = mCurrentState.mOriginalUrl = "";
+        }
+        else {
+            mCurrentState.mUrl = view.getUrl();
+            mCurrentState.mOriginalUrl = view.getOriginalUrl();
+            mCurrentState.mFavicon = view.getFavicon();
         }
 
         if (mCurrentState.mUrl == null) {
@@ -1899,7 +1913,8 @@
     public void loadUrl(String url, Map<String, String> headers) {
         if (mMainView != null) {
             mPageLoadProgress = INITIAL_PROGRESS;
-            mCurrentState = new PageState(mContext, false, url, null);
+            mCurrentState = new PageState(
+                                mContext, mMainView.isPrivateBrowsingEnabled(), url, null);
             mMainView.loadUrl(url, headers);
         }
     }
diff --git a/src/com/android/browser/preferences/LegalPreferencesFragment.java b/src/com/android/browser/preferences/LegalPreferencesFragment.java
index ce75630..23b4163 100644
--- a/src/com/android/browser/preferences/LegalPreferencesFragment.java
+++ b/src/com/android/browser/preferences/LegalPreferencesFragment.java
@@ -48,6 +48,7 @@
 public class LegalPreferencesFragment extends PreferenceFragment
                             implements OnPreferenceClickListener {
 
+    private static final String creditsUrl = "browser://credits";
     PreferenceScreen mHeadPref = null;
     String mEulaUrl = "";
     String mPrivacyPolicyUrl = "";
@@ -101,8 +102,7 @@
         Bundle b = new Bundle();
         if(preference.getKey().equals(PreferenceKeys.PREF_LEGAL_CREDITS)) {
             Intent i = new Intent(getActivity(), LegalPreviewActivity.class);
-            i.putExtra(LegalPreviewActivity.URL_INTENT_EXTRA, getResources()
-                    .getString(R.string.swe_open_source_license_url));
+            i.putExtra(LegalPreviewActivity.URL_INTENT_EXTRA, creditsUrl);
             startActivity(i);
             return true;
         } else if(preference.getKey().equals(PreferenceKeys.PREF_LEGAL_EULA)) {