Updates to add bookmark.

Bug:2953515

Create an empty view for the list showing sub folders.

Update the text in the new folder button.

When the user changes bread crumbs, cancel folder naming.

Change-Id: I8c3f33b5b3bb6e07cd0fd421199eb905f40e45f4
diff --git a/src/com/android/browser/AddBookmarkPage.java b/src/com/android/browser/AddBookmarkPage.java
index d0679e1..9e5b349 100644
--- a/src/com/android/browser/AddBookmarkPage.java
+++ b/src/com/android/browser/AddBookmarkPage.java
@@ -97,6 +97,7 @@
     private BreadCrumbView mCrumbs;
     private TextView mFakeTitle;
     private View mCrumbHolder;
+    private ListView mListView;
 
     private static class Folder {
         String Name;
@@ -128,6 +129,9 @@
         loader.setUri(uri);
         loader.forceLoad();
         updateVisible();
+        if (mFolderNamer.getVisibility() == View.VISIBLE) {
+            completeOrCancelFolderNaming(true);
+        }
     }
 
     /**
@@ -169,7 +173,7 @@
                 if (actionId == EditorInfo.IME_NULL) {
                     // Only want to do this once.
                     if (event.getAction() == KeyEvent.ACTION_UP) {
-                        completeFolderNaming();
+                        completeOrCancelFolderNaming(false);
                     }
                 }
             }
@@ -200,7 +204,7 @@
             if (mFolderSelector.getVisibility() == View.VISIBLE) {
                 // We are showing the folder selector.
                 if (mFolderNamer.getVisibility() == View.VISIBLE) {
-                    completeFolderNaming();
+                    completeOrCancelFolderNaming(false);
                 } else {
                     // User has selected a folder.  Go back to the opening page
                     switchToDefaultView(true);
@@ -210,9 +214,7 @@
             }
         } else if (v == mCancelButton) {
             if (mFolderNamer.getVisibility() == View.VISIBLE) {
-                mFolderNamer.setVisibility(View.GONE);
-                mAddNewFolder.setVisibility(View.VISIBLE);
-                mAddSeparator.setVisibility(View.VISIBLE);
+                completeOrCancelFolderNaming(true);
             } else if (mFolderSelector.getVisibility() == View.VISIBLE) {
                 switchToDefaultView(false);
             } else {
@@ -224,6 +226,7 @@
             mFolderNamer.setVisibility(View.VISIBLE);
             mFolderNamer.setText(R.string.new_folder);
             mFolderNamer.requestFocus();
+            updateList();
             mAddNewFolder.setVisibility(View.GONE);
             mAddSeparator.setVisibility(View.GONE);
             getInputMethodManager().showSoftInput(mFolderNamer,
@@ -231,17 +234,27 @@
         }
     }
 
-    private void completeFolderNaming() {
-        if (!TextUtils.isEmpty(mFolderNamer.getText())) {
+    // Refresh the ListView to hide or show the empty view, as necessary.
+    // Should be called after mFolderNamer is shown or hidden.
+    private void updateList() {
+        if (mAdapter.getCount() == 0) {
+            // XXX: Is there a better way to refresh the ListView?
+            mListView.setAdapter(mAdapter);
+        }
+    }
+
+    private void completeOrCancelFolderNaming(boolean cancel) {
+        if (!cancel && !TextUtils.isEmpty(mFolderNamer.getText())) {
             String name = mFolderNamer.getText().toString();
             long id = addFolderToCurrent(mFolderNamer.getText().toString());
             descendInto(name, id);
-            mFolderNamer.setVisibility(View.GONE);
-            mAddNewFolder.setVisibility(View.VISIBLE);
-            mAddSeparator.setVisibility(View.VISIBLE);
-            getInputMethodManager().hideSoftInputFromWindow(
-                    mFolderNamer.getWindowToken(), 0);
         }
+        mFolderNamer.setVisibility(View.GONE);
+        mAddNewFolder.setVisibility(View.VISIBLE);
+        mAddSeparator.setVisibility(View.VISIBLE);
+        getInputMethodManager().hideSoftInputFromWindow(
+                mFolderNamer.getWindowToken(), 0);
+        updateList();
     }
 
     private long addFolderToCurrent(String name) {
@@ -398,6 +411,12 @@
                     getDrawable(android.R.drawable.list_selector_background));
             return view;
         }
+
+        @Override
+        public boolean isEmpty() {
+            // Do not show the empty view if the user is creating a new folder.
+            return super.isEmpty() && mFolderNamer.getVisibility() == View.GONE;
+        }
     }
 
     protected void onCreate(Bundle icicle) {
@@ -484,9 +503,11 @@
         mCrumbHolder = findViewById(R.id.crumb_holder);
 
         mAdapter = new FolderAdapter(this);
-        ListView list = (ListView) findViewById(R.id.list);
-        list.setAdapter(mAdapter);
-        list.setOnItemClickListener(this);
+        mListView = (ListView) findViewById(R.id.list);
+        View empty = findViewById(R.id.empty);
+        mListView.setEmptyView(empty);
+        mListView.setAdapter(mAdapter);
+        mListView.setOnItemClickListener(this);
         LoaderManager manager = getLoaderManager();
         if (mCurrentFolder != BrowserProvider2.FIXED_ID_ROOT) {
             // Find all the folders