| Index: chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkAddEditFolderActivity.java | 
| diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkAddEditFolderActivity.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkAddEditFolderActivity.java | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..3a9475aed07718f834c196653faa985c9af48721 | 
| --- /dev/null | 
| +++ b/chrome/android/java_staging/src/org/chromium/chrome/browser/enhancedbookmarks/EnhancedBookmarkAddEditFolderActivity.java | 
| @@ -0,0 +1,244 @@ | 
| +// Copyright 2015 The Chromium Authors. All rights reserved. | 
| +// Use of this source code is governed by a BSD-style license that can be | 
| +// found in the LICENSE file. | 
| + | 
| +package org.chromium.chrome.browser.enhancedbookmarks; | 
| + | 
| +import android.content.Context; | 
| +import android.content.Intent; | 
| +import android.os.Bundle; | 
| +import android.text.Editable; | 
| +import android.text.TextWatcher; | 
| +import android.view.View; | 
| +import android.widget.Button; | 
| +import android.widget.EditText; | 
| +import android.widget.ImageButton; | 
| +import android.widget.TextView; | 
| + | 
| +import com.google.android.apps.chrome.R; | 
| + | 
| +import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem; | 
| +import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver; | 
| +import org.chromium.chrome.browser.enhanced_bookmarks.EnhancedBookmarksModel; | 
| +import org.chromium.components.bookmarks.BookmarkId; | 
| + | 
| +import java.util.ArrayList; | 
| +import java.util.List; | 
| + | 
| +/** | 
| + * Activity that allows a user to add or edit a bookmark folder. This activity has two modes: adding | 
| + * mode and editing mode. Depending on different modes, it should be started via two static creator | 
| + * functions. | 
| + */ | 
| +public class EnhancedBookmarkAddEditFolderActivity extends EnhancedBookmarkActivityBase implements | 
| +        View.OnClickListener { | 
| +    static final String INTENT_IS_ADD_MODE = "EnhancedBookmarkAddEditFolderActivity.isAddMode"; | 
| +    static final String INTENT_BOOKMARK_ID = "EnhancedBookmarkAddEditFolderActivity.BookmarkId"; | 
| +    static final String | 
| +            INTENT_CREATED_BOOKMARK = "EnhancedBookmarkAddEditFolderActivity.createdBookmark"; | 
| +    static final int PARENT_FOLDER_REQUEST_CODE = 10; | 
| + | 
| +    private boolean mIsAddMode; | 
| +    private BookmarkId mParentId; | 
| +    private EnhancedBookmarksModel mModel; | 
| +    private TextView mParentTextView; | 
| +    private EditText mFolderTitle; | 
| +    private ImageButton mBackButton; | 
| +    private ImageButton mSaveButton; | 
| + | 
| +    // Add mode member variable | 
| +    private List<BookmarkId> mBookmarksToMove; | 
| + | 
| +    // Edit mode member variables | 
| +    private BookmarkId mFolderId; | 
| +    private Button mDeleteButton; | 
| + | 
| +    private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObserver() { | 
| +        @Override | 
| +        public void bookmarkModelChanged() { | 
| +            if (mIsAddMode) { | 
| +                if (mModel.doesBookmarkExist(mParentId)) updateParent(mParentId); | 
| +                else updateParent(mModel.getDefaultFolder()); | 
| +            } else { | 
| +                assert mModel.doesBookmarkExist(mFolderId); | 
| +                updateParent(mModel.getBookmarkById(mFolderId).getParentId()); | 
| +            } | 
| +        } | 
| + | 
| +        @Override | 
| +        public void bookmarkNodeMoved(BookmarkItem oldParent, int oldIndex, BookmarkItem newParent, | 
| +                int newIndex) { | 
| +            if (!oldParent.getId().equals(newParent.getId()) | 
| +                    && mModel.getChildAt(newParent.getId(), newIndex).equals(mFolderId)) { | 
| +                updateParent(newParent.getId()); | 
| +            } | 
| +        } | 
| + | 
| +        @Override | 
| +        public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, BookmarkItem node, | 
| +                boolean isDoingExtensiveChanges) { | 
| +            if (!node.getId().equals(mFolderId)) return; | 
| +            finish(); | 
| +        } | 
| +    }; | 
| + | 
| +    /** | 
| +     * Starts an edit folder activity. Require the context to fire an intent. | 
| +     */ | 
| +    public static void startEditFolderActivity(Context context, BookmarkId idToEdit) { | 
| +        Intent intent = new Intent(context, EnhancedBookmarkAddEditFolderActivity.class); | 
| +        intent.putExtra(INTENT_IS_ADD_MODE, false); | 
| +        intent.putExtra(INTENT_BOOKMARK_ID, idToEdit.toString()); | 
| +        context.startActivity(intent); | 
| +    } | 
| + | 
| +    /** | 
| +     * Starts an add folder activity. This method should only be called by | 
| +     * {@link EnhancedBookmarkFolderSelectActivity}. | 
| +     */ | 
| +    public static void startAddFolderActivity(EnhancedBookmarkFolderSelectActivity activity, | 
| +            List<BookmarkId> bookmarksToMove) { | 
| +        assert bookmarksToMove.size() > 0; | 
| +        Intent intent = new Intent(activity, EnhancedBookmarkAddEditFolderActivity.class); | 
| +        intent.putExtra(INTENT_IS_ADD_MODE, true); | 
| +        ArrayList<String> bookmarkStrings = new ArrayList<>(bookmarksToMove.size()); | 
| +        for (BookmarkId id : bookmarksToMove) { | 
| +            bookmarkStrings.add(id.toString()); | 
| +        } | 
| +        intent.putStringArrayListExtra( | 
| +                EnhancedBookmarkFolderSelectActivity.INTENT_BOOKMARKS_TO_MOVE, bookmarkStrings); | 
| +        activity.startActivityForResult(intent, | 
| +                EnhancedBookmarkFolderSelectActivity.CREATE_FOLDER_REQUEST_CODE); | 
| +    } | 
| + | 
| +    @Override | 
| +    public void onCreate(Bundle savedInstanceState) { | 
| +        super.onCreate(savedInstanceState); | 
| +        EnhancedBookmarkUtils.setTaskDescriptionInDocumentMode(this, | 
| +                getString(R.string.enhanced_bookmark_action_bar_edit_folder)); | 
| +        mModel = new EnhancedBookmarksModel(); | 
| +        mModel.addModelObserver(mBookmarkModelObserver); | 
| +        mIsAddMode = getIntent().getBooleanExtra(INTENT_IS_ADD_MODE, false); | 
| +        if (mIsAddMode) { | 
| +            List<String> stringList = getIntent().getStringArrayListExtra( | 
| +                    EnhancedBookmarkFolderSelectActivity.INTENT_BOOKMARKS_TO_MOVE); | 
| +            mBookmarksToMove = new ArrayList<>(stringList.size()); | 
| +            for (String string : stringList) { | 
| +                mBookmarksToMove.add(BookmarkId.getBookmarkIdFromString(string)); | 
| +            } | 
| +        } else { | 
| +            mFolderId = BookmarkId.getBookmarkIdFromString( | 
| +                    getIntent().getStringExtra(INTENT_BOOKMARK_ID)); | 
| +        } | 
| +        setContentView(R.layout.eb_add_edit_folder_activity); | 
| +        TextView dialogTitle = (TextView) findViewById(R.id.dialog_title); | 
| + | 
| +        mParentTextView = (TextView) findViewById(R.id.parent_folder); | 
| +        mFolderTitle = (EditText) findViewById(R.id.folder_title); | 
| +        clearErrorWhenNonEmpty(mFolderTitle); | 
| +        mDeleteButton = (Button) findViewById(R.id.delete); | 
| +        mBackButton = (ImageButton) findViewById(R.id.back); | 
| +        mSaveButton = (ImageButton) findViewById(R.id.save); | 
| + | 
| +        mBackButton.setOnClickListener(this); | 
| +        mSaveButton.setOnClickListener(this); | 
| +        mParentTextView.setOnClickListener(this); | 
| +        mDeleteButton.setOnClickListener(this); | 
| + | 
| +        if (mIsAddMode) { | 
| +            mDeleteButton.setVisibility(View.GONE); | 
| +            dialogTitle.setText(R.string.add_folder); | 
| +            updateParent(mModel.getDefaultFolder()); | 
| +        } else { | 
| +            // Edit mode | 
| +            dialogTitle.setText(R.string.edit_folder); | 
| +            BookmarkItem bookmarkItem = mModel.getBookmarkById(mFolderId); | 
| +            updateParent(bookmarkItem.getParentId()); | 
| +            mFolderTitle.setText(bookmarkItem.getTitle()); | 
| +        } | 
| +        mParentTextView.setText(mModel.getBookmarkTitle(mParentId)); | 
| +    } | 
| + | 
| +    @Override | 
| +    public void onClick(View v) { | 
| +        if (v == mParentTextView) { | 
| +            if (mIsAddMode) { | 
| +                EnhancedBookmarkFolderSelectActivity.startNewFolderSelectActivity(this, | 
| +                        mBookmarksToMove); | 
| +            } else { | 
| +                EnhancedBookmarkFolderSelectActivity.startFolderSelectActivity(this, mFolderId); | 
| +            } | 
| +        } else if (v == mSaveButton) { | 
| +            String folderTitle = mFolderTitle.getText().toString(); | 
| + | 
| +            if (folderTitle.isEmpty()) { | 
| +                mFolderTitle.setError(getResources().getText(R.string.bookmark_missing_title)); | 
| +                mFolderTitle.requestFocus(); | 
| +                return; | 
| +            } | 
| + | 
| +            if (mIsAddMode) { | 
| +                BookmarkId newFolder = mModel.addFolder(mParentId, 0, folderTitle); | 
| +                Intent intent = new Intent(); | 
| +                intent.putExtra(INTENT_CREATED_BOOKMARK, newFolder.toString()); | 
| +                setResult(RESULT_OK, intent); | 
| +            } else { | 
| +                mModel.setBookmarkTitle(mFolderId, folderTitle); | 
| +            } | 
| +            finish(); | 
| +        } else if (v == mBackButton) { | 
| +            finish(); | 
| +        } else if (v == mDeleteButton) { | 
| +            // When deleting, wait till the model has done its job and notify us via model observer, | 
| +            // and then we finish this activity. | 
| +            mModel.deleteBookmarks(mFolderId); | 
| +        } | 
| +    } | 
| + | 
| +    @Override | 
| +    protected void onActivityResult(int requestCode, int resultCode, Intent data) { | 
| +        super.onActivityResult(requestCode, resultCode, data); | 
| +        assert mIsAddMode; | 
| +        if (requestCode == PARENT_FOLDER_REQUEST_CODE && resultCode == RESULT_OK) { | 
| +            BookmarkId selectedBookmark = BookmarkId.getBookmarkIdFromString(data.getStringExtra( | 
| +                    EnhancedBookmarkFolderSelectActivity.INTENT_SELECTED_FOLDER)); | 
| +            updateParent(selectedBookmark); | 
| +        } | 
| +    } | 
| + | 
| +    @Override | 
| +    protected void onDestroy() { | 
| +        super.onDestroy(); | 
| +        mModel.removeModelObserver(mBookmarkModelObserver); | 
| +        mModel.destroy(); | 
| +        mModel = null; | 
| +    } | 
| + | 
| +    private void updateParent(BookmarkId newParent) { | 
| +        mParentId = newParent; | 
| +        mParentTextView.setText(mModel.getBookmarkTitle(mParentId)); | 
| +    } | 
| + | 
| +    /** | 
| +     * Adds a listener to |textView| that will clear the TextView's error once the user types | 
| +     * something. | 
| +     */ | 
| +    private static void clearErrorWhenNonEmpty(final TextView textView) { | 
| +        textView.addTextChangedListener(new TextWatcher() { | 
| +            @Override | 
| +            public void afterTextChanged(Editable s) { | 
| +            } | 
| + | 
| +            @Override | 
| +            public void beforeTextChanged(CharSequence s, int start, int count, int after) { | 
| +            } | 
| + | 
| +            @Override | 
| +            public void onTextChanged(CharSequence s, int start, int before, int count) { | 
| +                if (s.length() != 0) { | 
| +                    textView.setError(null); | 
| +                } | 
| +            } | 
| +        }); | 
| +    } | 
| +} | 
|  |