OLD | NEW |
(Empty) | |
| 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 package org.chromium.chrome.browser.enhancedbookmarks; |
| 6 |
| 7 import android.content.Context; |
| 8 import android.content.Intent; |
| 9 import android.os.Bundle; |
| 10 import android.text.Editable; |
| 11 import android.text.TextWatcher; |
| 12 import android.view.View; |
| 13 import android.widget.Button; |
| 14 import android.widget.EditText; |
| 15 import android.widget.ImageButton; |
| 16 import android.widget.TextView; |
| 17 |
| 18 import com.google.android.apps.chrome.R; |
| 19 |
| 20 import org.chromium.chrome.browser.BookmarksBridge.BookmarkItem; |
| 21 import org.chromium.chrome.browser.BookmarksBridge.BookmarkModelObserver; |
| 22 import org.chromium.chrome.browser.enhanced_bookmarks.EnhancedBookmarksModel; |
| 23 import org.chromium.components.bookmarks.BookmarkId; |
| 24 |
| 25 import java.util.ArrayList; |
| 26 import java.util.List; |
| 27 |
| 28 /** |
| 29 * Activity that allows a user to add or edit a bookmark folder. This activity h
as two modes: adding |
| 30 * mode and editing mode. Depending on different modes, it should be started via
two static creator |
| 31 * functions. |
| 32 */ |
| 33 public class EnhancedBookmarkAddEditFolderActivity extends EnhancedBookmarkActiv
ityBase implements |
| 34 View.OnClickListener { |
| 35 static final String INTENT_IS_ADD_MODE = "EnhancedBookmarkAddEditFolderActiv
ity.isAddMode"; |
| 36 static final String INTENT_BOOKMARK_ID = "EnhancedBookmarkAddEditFolderActiv
ity.BookmarkId"; |
| 37 static final String |
| 38 INTENT_CREATED_BOOKMARK = "EnhancedBookmarkAddEditFolderActivity.cre
atedBookmark"; |
| 39 static final int PARENT_FOLDER_REQUEST_CODE = 10; |
| 40 |
| 41 private boolean mIsAddMode; |
| 42 private BookmarkId mParentId; |
| 43 private EnhancedBookmarksModel mModel; |
| 44 private TextView mParentTextView; |
| 45 private EditText mFolderTitle; |
| 46 private ImageButton mBackButton; |
| 47 private ImageButton mSaveButton; |
| 48 |
| 49 // Add mode member variable |
| 50 private List<BookmarkId> mBookmarksToMove; |
| 51 |
| 52 // Edit mode member variables |
| 53 private BookmarkId mFolderId; |
| 54 private Button mDeleteButton; |
| 55 |
| 56 private BookmarkModelObserver mBookmarkModelObserver = new BookmarkModelObse
rver() { |
| 57 @Override |
| 58 public void bookmarkModelChanged() { |
| 59 if (mIsAddMode) { |
| 60 if (mModel.doesBookmarkExist(mParentId)) updateParent(mParentId)
; |
| 61 else updateParent(mModel.getDefaultFolder()); |
| 62 } else { |
| 63 assert mModel.doesBookmarkExist(mFolderId); |
| 64 updateParent(mModel.getBookmarkById(mFolderId).getParentId()); |
| 65 } |
| 66 } |
| 67 |
| 68 @Override |
| 69 public void bookmarkNodeMoved(BookmarkItem oldParent, int oldIndex, Book
markItem newParent, |
| 70 int newIndex) { |
| 71 if (!oldParent.getId().equals(newParent.getId()) |
| 72 && mModel.getChildAt(newParent.getId(), newIndex).equals(mFo
lderId)) { |
| 73 updateParent(newParent.getId()); |
| 74 } |
| 75 } |
| 76 |
| 77 @Override |
| 78 public void bookmarkNodeRemoved(BookmarkItem parent, int oldIndex, Bookm
arkItem node, |
| 79 boolean isDoingExtensiveChanges) { |
| 80 if (!node.getId().equals(mFolderId)) return; |
| 81 finish(); |
| 82 } |
| 83 }; |
| 84 |
| 85 /** |
| 86 * Starts an edit folder activity. Require the context to fire an intent. |
| 87 */ |
| 88 public static void startEditFolderActivity(Context context, BookmarkId idToE
dit) { |
| 89 Intent intent = new Intent(context, EnhancedBookmarkAddEditFolderActivit
y.class); |
| 90 intent.putExtra(INTENT_IS_ADD_MODE, false); |
| 91 intent.putExtra(INTENT_BOOKMARK_ID, idToEdit.toString()); |
| 92 context.startActivity(intent); |
| 93 } |
| 94 |
| 95 /** |
| 96 * Starts an add folder activity. This method should only be called by |
| 97 * {@link EnhancedBookmarkFolderSelectActivity}. |
| 98 */ |
| 99 public static void startAddFolderActivity(EnhancedBookmarkFolderSelectActivi
ty activity, |
| 100 List<BookmarkId> bookmarksToMove) { |
| 101 assert bookmarksToMove.size() > 0; |
| 102 Intent intent = new Intent(activity, EnhancedBookmarkAddEditFolderActivi
ty.class); |
| 103 intent.putExtra(INTENT_IS_ADD_MODE, true); |
| 104 ArrayList<String> bookmarkStrings = new ArrayList<>(bookmarksToMove.size
()); |
| 105 for (BookmarkId id : bookmarksToMove) { |
| 106 bookmarkStrings.add(id.toString()); |
| 107 } |
| 108 intent.putStringArrayListExtra( |
| 109 EnhancedBookmarkFolderSelectActivity.INTENT_BOOKMARKS_TO_MOVE, b
ookmarkStrings); |
| 110 activity.startActivityForResult(intent, |
| 111 EnhancedBookmarkFolderSelectActivity.CREATE_FOLDER_REQUEST_CODE)
; |
| 112 } |
| 113 |
| 114 @Override |
| 115 public void onCreate(Bundle savedInstanceState) { |
| 116 super.onCreate(savedInstanceState); |
| 117 EnhancedBookmarkUtils.setTaskDescriptionInDocumentMode(this, |
| 118 getString(R.string.enhanced_bookmark_action_bar_edit_folder)); |
| 119 mModel = new EnhancedBookmarksModel(); |
| 120 mModel.addModelObserver(mBookmarkModelObserver); |
| 121 mIsAddMode = getIntent().getBooleanExtra(INTENT_IS_ADD_MODE, false); |
| 122 if (mIsAddMode) { |
| 123 List<String> stringList = getIntent().getStringArrayListExtra( |
| 124 EnhancedBookmarkFolderSelectActivity.INTENT_BOOKMARKS_TO_MOV
E); |
| 125 mBookmarksToMove = new ArrayList<>(stringList.size()); |
| 126 for (String string : stringList) { |
| 127 mBookmarksToMove.add(BookmarkId.getBookmarkIdFromString(string))
; |
| 128 } |
| 129 } else { |
| 130 mFolderId = BookmarkId.getBookmarkIdFromString( |
| 131 getIntent().getStringExtra(INTENT_BOOKMARK_ID)); |
| 132 } |
| 133 setContentView(R.layout.eb_add_edit_folder_activity); |
| 134 TextView dialogTitle = (TextView) findViewById(R.id.dialog_title); |
| 135 |
| 136 mParentTextView = (TextView) findViewById(R.id.parent_folder); |
| 137 mFolderTitle = (EditText) findViewById(R.id.folder_title); |
| 138 clearErrorWhenNonEmpty(mFolderTitle); |
| 139 mDeleteButton = (Button) findViewById(R.id.delete); |
| 140 mBackButton = (ImageButton) findViewById(R.id.back); |
| 141 mSaveButton = (ImageButton) findViewById(R.id.save); |
| 142 |
| 143 mBackButton.setOnClickListener(this); |
| 144 mSaveButton.setOnClickListener(this); |
| 145 mParentTextView.setOnClickListener(this); |
| 146 mDeleteButton.setOnClickListener(this); |
| 147 |
| 148 if (mIsAddMode) { |
| 149 mDeleteButton.setVisibility(View.GONE); |
| 150 dialogTitle.setText(R.string.add_folder); |
| 151 updateParent(mModel.getDefaultFolder()); |
| 152 } else { |
| 153 // Edit mode |
| 154 dialogTitle.setText(R.string.edit_folder); |
| 155 BookmarkItem bookmarkItem = mModel.getBookmarkById(mFolderId); |
| 156 updateParent(bookmarkItem.getParentId()); |
| 157 mFolderTitle.setText(bookmarkItem.getTitle()); |
| 158 } |
| 159 mParentTextView.setText(mModel.getBookmarkTitle(mParentId)); |
| 160 } |
| 161 |
| 162 @Override |
| 163 public void onClick(View v) { |
| 164 if (v == mParentTextView) { |
| 165 if (mIsAddMode) { |
| 166 EnhancedBookmarkFolderSelectActivity.startNewFolderSelectActivit
y(this, |
| 167 mBookmarksToMove); |
| 168 } else { |
| 169 EnhancedBookmarkFolderSelectActivity.startFolderSelectActivity(t
his, mFolderId); |
| 170 } |
| 171 } else if (v == mSaveButton) { |
| 172 String folderTitle = mFolderTitle.getText().toString(); |
| 173 |
| 174 if (folderTitle.isEmpty()) { |
| 175 mFolderTitle.setError(getResources().getText(R.string.bookmark_m
issing_title)); |
| 176 mFolderTitle.requestFocus(); |
| 177 return; |
| 178 } |
| 179 |
| 180 if (mIsAddMode) { |
| 181 BookmarkId newFolder = mModel.addFolder(mParentId, 0, folderTitl
e); |
| 182 Intent intent = new Intent(); |
| 183 intent.putExtra(INTENT_CREATED_BOOKMARK, newFolder.toString()); |
| 184 setResult(RESULT_OK, intent); |
| 185 } else { |
| 186 mModel.setBookmarkTitle(mFolderId, folderTitle); |
| 187 } |
| 188 finish(); |
| 189 } else if (v == mBackButton) { |
| 190 finish(); |
| 191 } else if (v == mDeleteButton) { |
| 192 // When deleting, wait till the model has done its job and notify us
via model observer, |
| 193 // and then we finish this activity. |
| 194 mModel.deleteBookmarks(mFolderId); |
| 195 } |
| 196 } |
| 197 |
| 198 @Override |
| 199 protected void onActivityResult(int requestCode, int resultCode, Intent data
) { |
| 200 super.onActivityResult(requestCode, resultCode, data); |
| 201 assert mIsAddMode; |
| 202 if (requestCode == PARENT_FOLDER_REQUEST_CODE && resultCode == RESULT_OK
) { |
| 203 BookmarkId selectedBookmark = BookmarkId.getBookmarkIdFromString(dat
a.getStringExtra( |
| 204 EnhancedBookmarkFolderSelectActivity.INTENT_SELECTED_FOLDER)
); |
| 205 updateParent(selectedBookmark); |
| 206 } |
| 207 } |
| 208 |
| 209 @Override |
| 210 protected void onDestroy() { |
| 211 super.onDestroy(); |
| 212 mModel.removeModelObserver(mBookmarkModelObserver); |
| 213 mModel.destroy(); |
| 214 mModel = null; |
| 215 } |
| 216 |
| 217 private void updateParent(BookmarkId newParent) { |
| 218 mParentId = newParent; |
| 219 mParentTextView.setText(mModel.getBookmarkTitle(mParentId)); |
| 220 } |
| 221 |
| 222 /** |
| 223 * Adds a listener to |textView| that will clear the TextView's error once t
he user types |
| 224 * something. |
| 225 */ |
| 226 private static void clearErrorWhenNonEmpty(final TextView textView) { |
| 227 textView.addTextChangedListener(new TextWatcher() { |
| 228 @Override |
| 229 public void afterTextChanged(Editable s) { |
| 230 } |
| 231 |
| 232 @Override |
| 233 public void beforeTextChanged(CharSequence s, int start, int count,
int after) { |
| 234 } |
| 235 |
| 236 @Override |
| 237 public void onTextChanged(CharSequence s, int start, int before, int
count) { |
| 238 if (s.length() != 0) { |
| 239 textView.setError(null); |
| 240 } |
| 241 } |
| 242 }); |
| 243 } |
| 244 } |
OLD | NEW |