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); |
+ } |
+ } |
+ }); |
+ } |
+} |