Index: chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/AddEditBookmarkFragment.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/AddEditBookmarkFragment.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/AddEditBookmarkFragment.java |
deleted file mode 100644 |
index 956d8e956e279407785b5277a0540ae894e51b68..0000000000000000000000000000000000000000 |
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/AddEditBookmarkFragment.java |
+++ /dev/null |
@@ -1,737 +0,0 @@ |
-// 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.bookmark; |
- |
-import static org.chromium.chrome.browser.ChromeBrowserProviderClient.INVALID_BOOKMARK_ID; |
- |
-import android.app.AlertDialog; |
-import android.content.ContentUris; |
-import android.content.ContentValues; |
-import android.content.Context; |
-import android.content.DialogInterface; |
-import android.content.res.Resources; |
-import android.net.Uri; |
-import android.os.Bundle; |
-import android.provider.Browser; |
-import android.text.Editable; |
-import android.text.TextUtils; |
-import android.text.TextWatcher; |
-import android.util.Log; |
-import android.view.LayoutInflater; |
-import android.view.View; |
-import android.view.View.OnClickListener; |
-import android.view.ViewGroup; |
-import android.view.inputmethod.InputMethodManager; |
-import android.widget.Button; |
-import android.widget.EditText; |
-import android.widget.TextView; |
- |
-import org.chromium.base.VisibleForTesting; |
-import org.chromium.chrome.R; |
-import org.chromium.chrome.browser.ChromeBrowserProvider; |
-import org.chromium.chrome.browser.ChromeBrowserProvider.BookmarkNode; |
-import org.chromium.chrome.browser.ChromeBrowserProviderClient; |
- |
-import javax.annotation.Nullable; |
- |
-/** |
- * UI container that manages adding or editing bookmark nodes. |
- */ |
-public class AddEditBookmarkFragment extends AsyncTaskFragment implements OnClickListener { |
- private static final String TAG = "AddEditBookmarkFragment"; |
- |
- /** |
- * Defines the constants used as arguments to this fragment. |
- * @see android.app.Fragment#setArguments(Bundle) |
- */ |
- private static class Arguments { |
- private Arguments() {} |
- |
- public static final String MODE = "mode"; |
- public static final String ID = "id"; |
- public static final String NAME = "name"; |
- public static final String URL = "url"; |
- public static final String PARENT_FOLDER_ID = "parentId"; |
- public static final String PARENT_FOLDER_NAME = "parentName"; |
- } |
- |
- /** |
- * Determines the operating mode/UI of this fragment. |
- */ |
- private enum Mode { |
- ADD_BOOKMARK, |
- EDIT_BOOKMARK, |
- ADD_FOLDER(true), |
- EDIT_FOLDER(true); |
- |
- private final boolean mIsFolder; |
- |
- private Mode() { |
- mIsFolder = false; |
- } |
- |
- private Mode(boolean isFolder) { |
- mIsFolder = isFolder; |
- } |
- |
- /** @return Whether this mode is operating on a folder (creation or editing). */ |
- protected boolean isFolder() { |
- return mIsFolder; |
- } |
- } |
- |
- private Button mFolderInput; |
- private Button mRemoveButton; |
- private Button mOkButton; |
- private Button mCancelButton; |
- |
- private EditText mTitleInput; |
- private EditText mUrlInput; |
- |
- /** The initial name of a bookmark (will only be used if adding a new node). */ |
- private String mInitialName; |
- |
- /** The initial URL of a bookmark (will only be used if adding a new non-folder node). */ |
- private String mInitialUrl; |
- |
- private long mParentFolderId = INVALID_BOOKMARK_ID; |
- |
- /** The name of the parent folder to this bookmark. */ |
- private String mParentFolderName; |
- |
- /** The mode of the current activity to distinguish between adding vs editing. */ |
- private Mode mActivityMode = Mode.ADD_BOOKMARK; |
- |
- /** |
- * The ID of the current bookmark being edited (if adding a new bookmark then this will |
- * be null). |
- */ |
- private Long mBookmarkId; |
- |
- /** The listener that will be notified when the actions of this fragment are completed. */ |
- private OnActionListener mActionListener; |
- |
- /** Lock for synchronizing calls to the loaded status checks. */ |
- private final Object mLoadedLock = new Object(); |
- private boolean mBookmarkNodeLoaded = false; |
- private boolean mDefaultFolderLoaded = false; |
- |
- /** |
- * Creates a new add bookmark folder fragment. |
- * |
- * @param parentFolderId The ID of the default parent folder for the new folder. |
- * @param parentFolderName The name of the default parent folder for the new folder. |
- * @return An initialized add new bookmark folder fragment. |
- */ |
- public static AddEditBookmarkFragment newAddNewFolderInstance( |
- long parentFolderId, String parentFolderName) { |
- AddEditBookmarkFragment fragment = new AddEditBookmarkFragment(); |
- Bundle arguments = new Bundle(); |
- arguments.putSerializable(Arguments.MODE, Mode.ADD_FOLDER); |
- arguments.putLong(Arguments.PARENT_FOLDER_ID, parentFolderId); |
- arguments.putString(Arguments.PARENT_FOLDER_NAME, parentFolderName); |
- fragment.setArguments(arguments); |
- return fragment; |
- } |
- |
- /** |
- * Creates a new editing bookmark fragment where all the details of the bookmark node are to |
- * be loaded from the model. |
- * |
- * @param isFolder Whether the node being edited is a folder. |
- * @param bookmarkId The ID of the node being edited. |
- * @return An initialized edit bookmark fragment. |
- */ |
- public static AddEditBookmarkFragment newEditInstance(boolean isFolder, long bookmarkId) { |
- AddEditBookmarkFragment fragment = new AddEditBookmarkFragment(); |
- Bundle arguments = new Bundle(); |
- arguments.putSerializable(Arguments.MODE, isFolder ? Mode.EDIT_FOLDER : Mode.EDIT_BOOKMARK); |
- arguments.putLong(Arguments.ID, bookmarkId); |
- fragment.setArguments(arguments); |
- return fragment; |
- } |
- |
- /** |
- * Creates a new add/edit bookmark fragment with the given details. |
- * |
- * @param isFolder Whether the node being edited is a folder. |
- * @param bookmarkId The ID of the node being edited (or null if adding a new bookmark node). |
- * @param name The name of the bookmark being added/edited. |
- * @param url The url of the bookmark being added/edited (not applicable if isFolder is set) |
- * @return An initialized add or edit bookmark fragment. |
- */ |
- public static AddEditBookmarkFragment newInstance( |
- boolean isFolder, |
- @Nullable Long bookmarkId, |
- @Nullable String name, |
- @Nullable String url) { |
- AddEditBookmarkFragment fragment = new AddEditBookmarkFragment(); |
- Bundle arguments = new Bundle(); |
- if (bookmarkId == null || bookmarkId == INVALID_BOOKMARK_ID) { |
- arguments.putSerializable( |
- Arguments.MODE, isFolder ? Mode.ADD_FOLDER : Mode.ADD_BOOKMARK); |
- } else { |
- arguments.putSerializable( |
- Arguments.MODE, isFolder ? Mode.EDIT_FOLDER : Mode.EDIT_BOOKMARK); |
- arguments.putLong(Arguments.ID, bookmarkId); |
- } |
- if (name != null) arguments.putString(Arguments.NAME, name); |
- if (url != null) arguments.putString(Arguments.URL, url); |
- fragment.setArguments(arguments); |
- return fragment; |
- } |
- |
- /** |
- * Sets the action listener for this fragment. |
- * @param listener The listener to be set. |
- */ |
- public void setOnActionListener(OnActionListener listener) { |
- mActionListener = listener; |
- } |
- |
- /** |
- * Retrieves the current action listener for this fragment. |
- * Used by testing to intercept calls as a proxy. |
- */ |
- @VisibleForTesting |
- public OnActionListener getOnActionListenerForTest() { |
- return mActionListener; |
- } |
- |
- /** |
- * @return Whether the default bookmark folder has been loaded. |
- */ |
- protected boolean isDefaultFolderLoaded() { |
- synchronized (mLoadedLock) { |
- return mDefaultFolderLoaded; |
- } |
- } |
- |
- /** |
- * @return Whether the bookmark node has been loaded from the backend model. |
- */ |
- protected boolean isBookmarkNodeLoaded() { |
- synchronized (mLoadedLock) { |
- return mBookmarkNodeLoaded; |
- } |
- } |
- |
- @Override |
- public void onCreate(Bundle savedInstanceState) { |
- super.onCreate(savedInstanceState); |
- |
- Bundle args = getArguments(); |
- mActivityMode = (Mode) args.get(Arguments.MODE); |
- if (mActivityMode == null) { |
- Log.e(getClass().getName(), "Created new AddEditBookmarkFragment without a mode " |
- + "defined. Make sure arguments are correctly populated."); |
- mActivityMode = Mode.ADD_BOOKMARK; |
- return; |
- } |
- if (args.containsKey(Arguments.ID)) mBookmarkId = args.getLong(Arguments.ID); |
- mParentFolderId = args.getLong(Arguments.PARENT_FOLDER_ID, INVALID_BOOKMARK_ID); |
- mParentFolderName = args.getString(Arguments.PARENT_FOLDER_NAME, null); |
- mInitialName = args.getString(Arguments.NAME, null); |
- mInitialUrl = args.getString(Arguments.URL, null); |
- } |
- |
- @Override |
- public View onCreateView( |
- LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { |
- return inflater.inflate(R.layout.add_bookmark, container, false); |
- } |
- |
- @Override |
- public void onViewCreated(View view, Bundle savedInstanceState) { |
- super.onViewCreated(view, savedInstanceState); |
- |
- mRemoveButton = (Button) getView().findViewById(R.id.remove); |
- mRemoveButton.setOnClickListener(this); |
- mOkButton = (Button) getView().findViewById(R.id.ok); |
- mOkButton.setOnClickListener(this); |
- mCancelButton = (Button) getView().findViewById(R.id.cancel); |
- mCancelButton.setOnClickListener(this); |
- mTitleInput = (EditText) getView().findViewById(R.id.bookmark_title_input); |
- clearErrorWhenNonEmpty(mTitleInput); |
- mUrlInput = (EditText) getView().findViewById(R.id.bookmark_url_input); |
- clearErrorWhenNonEmpty(mUrlInput); |
- mFolderInput = (Button) getView().findViewById(R.id.bookmark_folder_select); |
- mFolderInput.setOnClickListener(this); |
- } |
- |
- @Override |
- public void onActivityCreated(Bundle savedInstanceState) { |
- super.onActivityCreated(savedInstanceState); |
- |
- int actionTitleTextResId = R.string.edit_bookmark; |
- int bookmarkInputDescResId = R.string.accessibility_bookmark_title_textbox; |
- |
- switch (mActivityMode) { |
- case ADD_BOOKMARK: |
- actionTitleTextResId = R.string.add_bookmark; |
- bookmarkInputDescResId = R.string.accessibility_bookmark_title_textbox; |
- break; |
- case EDIT_BOOKMARK: |
- actionTitleTextResId = R.string.edit_bookmark; |
- bookmarkInputDescResId = R.string.accessibility_bookmark_title_textbox; |
- break; |
- case ADD_FOLDER: |
- actionTitleTextResId = R.string.add_folder; |
- bookmarkInputDescResId = R.string.accessibility_bookmark_folder_name_textbox; |
- break; |
- case EDIT_FOLDER: |
- actionTitleTextResId = R.string.edit_folder; |
- bookmarkInputDescResId = R.string.accessibility_bookmark_folder_name_textbox; |
- break; |
- default: |
- assert false; |
- } |
- |
- TextView actionTitle = (TextView) getView().findViewById(R.id.bookmark_action_title); |
- EditText titleInput = (EditText) getView().findViewById(R.id.bookmark_title_input); |
- actionTitle.setText(actionTitleTextResId); |
- titleInput.setContentDescription(getResources().getString(bookmarkInputDescResId)); |
- |
- if (mActivityMode == Mode.ADD_BOOKMARK || mActivityMode == Mode.ADD_FOLDER) { |
- mRemoveButton.setVisibility(View.GONE); |
- } |
- if (mActivityMode.isFolder()) { |
- hideUrlInputRow(); |
- } |
- |
- initializeFolderInputContent(savedInstanceState); |
- initializeStateFromIntent(savedInstanceState); |
- |
- if (mActivityMode == Mode.ADD_FOLDER) { |
- mTitleInput.post(new Runnable() { |
- @Override |
- public void run() { |
- if (getActivity() == null) return; |
- |
- mTitleInput.requestFocus(); |
- InputMethodManager imm = (InputMethodManager) getActivity().getSystemService( |
- Context.INPUT_METHOD_SERVICE); |
- imm.showSoftInput(mTitleInput, InputMethodManager.SHOW_IMPLICIT); |
- } |
- }); |
- } |
- } |
- |
- private void hideUrlInputRow() { |
- getView().findViewById(R.id.bookmark_url_label).setVisibility(View.GONE); |
- getView().findViewById(R.id.bookmark_url_input).setVisibility(View.GONE); |
- } |
- |
- private void initializeStateFromIntent(Bundle savedInstanceState) { |
- // If restoring from a previous state, do not set the fields to their initial values |
- // (allow the individual views to reset their values correctly). |
- if (savedInstanceState != null) { |
- return; |
- } |
- |
- if (!TextUtils.isEmpty(mInitialName)) mTitleInput.setText(mInitialName); |
- if (!TextUtils.isEmpty(mTitleInput.getText())) { |
- mTitleInput.setSelection(mTitleInput.getText().length()); |
- } |
- if (!TextUtils.isEmpty(mInitialUrl)) mUrlInput.setText(mInitialUrl); |
- } |
- |
- private void initializeFolderInputContent(Bundle savedInstanceState) { |
- if (savedInstanceState != null) { |
- long savedParentId = savedInstanceState.getLong( |
- Arguments.PARENT_FOLDER_ID, INVALID_BOOKMARK_ID); |
- if (savedParentId != INVALID_BOOKMARK_ID) { |
- mParentFolderId = savedParentId; |
- mFolderInput.setText(savedInstanceState.getString(Arguments.PARENT_FOLDER_NAME)); |
- return; |
- } |
- } else if (mParentFolderId != INVALID_BOOKMARK_ID && mParentFolderName != null) { |
- mFolderInput.setText(mParentFolderName); |
- return; |
- } |
- |
- // Start a new asynchronous fragment task to read the bookmark folder data. |
- if (!isFragmentAsyncTaskRunning() && !isDefaultFolderLoaded() && !isBookmarkNodeLoaded()) { |
- runFragmentAsyncTask(new LoadBookmarkNodeTask( |
- (mActivityMode == Mode.ADD_BOOKMARK || mActivityMode == Mode.ADD_FOLDER) |
- ? null : mBookmarkId), |
- getActivity().getString(R.string.loading_bookmark)); |
- } |
- } |
- |
- @Override |
- public void onSaveInstanceState(Bundle outState) { |
- super.onSaveInstanceState(outState); |
- |
- if (!isVisible()) return; |
- |
- outState.putString(Arguments.PARENT_FOLDER_NAME, mFolderInput.getText().toString()); |
- outState.putLong(Arguments.PARENT_FOLDER_ID, mParentFolderId); |
- } |
- |
- @Override |
- public void onClick(View v) { |
- if (mActionListener == null) { |
- Log.d(getClass().getName(), "No OnResultListener specified -- onClick == NoOp"); |
- return; |
- } |
- String title = mTitleInput.getText().toString().trim(); |
- String url = mUrlInput.getText().toString().trim(); |
- if (v == mOkButton) { |
- if (!checkValidInputs(title, url)) return; |
- if (isFragmentAsyncTaskRunning()) { |
- Log.e(TAG, "Pending asynchronous task when trying to add/update bookmarks."); |
- return; |
- } |
- |
- ContentValues bookmarkValues = new ContentValues(); |
- if (!mActivityMode.isFolder()) { |
- bookmarkValues.put(Browser.BookmarkColumns.URL, url); |
- } |
- bookmarkValues.put(Browser.BookmarkColumns.TITLE, title); |
- bookmarkValues.put( |
- ChromeBrowserProvider.BOOKMARK_PARENT_ID_PARAM, mParentFolderId); |
- bookmarkValues.put( |
- ChromeBrowserProvider.BOOKMARK_IS_FOLDER_PARAM, mActivityMode.isFolder()); |
- |
- runFragmentAsyncTask(new InsertUpdateBookmarkTask( |
- bookmarkValues, |
- (mActivityMode == Mode.ADD_BOOKMARK || mActivityMode == Mode.ADD_FOLDER) |
- ? null : mBookmarkId), |
- getActivity().getString(R.string.saving_bookmark)); |
- |
- } else if (v == mRemoveButton) { |
- if (mActivityMode == Mode.ADD_BOOKMARK) { |
- throw new AssertionError( |
- "The remove functionality should be disabled for new bookmarks."); |
- } |
- |
- if (isFragmentAsyncTaskRunning()) { |
- Log.e(TAG, "Pending asynchronous task when trying to delete bookmarks."); |
- return; |
- } |
- |
- runFragmentAsyncTask(new DeleteBookmarkTask(mBookmarkId), |
- getActivity().getString(R.string.removing_bookmark)); |
- |
- } else if (v == mCancelButton) { |
- mActionListener.onCancel(); |
- } else if (v == mFolderInput) { |
- mActionListener.triggerFolderSelection(); |
- } |
- } |
- |
- /** |
- * Adds a listener to |textView| that will clear the TextView's error once the user types |
- * something. |
- * Note that we needed this function in EnhancedBookmarkAddEditFolderDialog.java and just |
- * duplicated there instead of sharing, because the old bookmark UI is supposed go away anyways. |
- * If you have found this message in the latest repository in 2016, you can come by Kibeom's |
- * desk and punch him. |
- */ |
- private 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); |
- } |
- } |
- }); |
- } |
- |
- private boolean checkValidInputs(String title, String url) { |
- Resources resources = getResources(); |
- boolean validInput = true; |
- if (!mActivityMode.isFolder() && url.isEmpty()) { |
- mUrlInput.setError(resources.getText(R.string.bookmark_missing_url)); |
- mUrlInput.requestFocus(); |
- validInput = false; |
- } |
- if (title.isEmpty()) { |
- mTitleInput.setError(resources.getText(R.string.bookmark_missing_title)); |
- mTitleInput.requestFocus(); |
- validInput = false; |
- } |
- return validInput; |
- } |
- |
- @VisibleForTesting |
- public boolean isLoadingBookmarks() { |
- return mCurrentTask instanceof LoadBookmarkNodeTask; |
- } |
- |
- /** |
- * Sets the parent folder information for this bookmark node (updating the view if present). |
- * @param id The ID of the parent folder. |
- * @param name The name of the parent folder. |
- */ |
- protected void setParentFolderInfo(long id, String name) { |
- mParentFolderName = name; |
- mParentFolderId = id; |
- if (isVisible()) { |
- mFolderInput.setText(name); |
- } |
- } |
- |
- /** |
- * @return The ID of the parent node of this bookmark. |
- */ |
- protected long getParentFolderId() { |
- return mParentFolderId; |
- } |
- |
- /** |
- * @return boolean Whether a folder or bookmark is being created/edited. |
- */ |
- protected boolean isFolder() { |
- return mActivityMode.isFolder(); |
- } |
- |
- private void handleGetBookmarkNode(BookmarkNode result) { |
- if (getActivity() == null || getActivity().isFinishing()) return; |
- |
- if (result == null) { |
- AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()) |
- .setMessage(getActivity().getResources().getText(R.string.invalid_bookmark)) |
- .setPositiveButton(getActivity().getResources().getText(R.string.ok), |
- new DialogInterface.OnClickListener() { |
- @Override |
- public void onClick(DialogInterface dialog, int id) { |
- getActivity().finish(); |
- } |
- }).setOnCancelListener(new DialogInterface.OnCancelListener() { |
- @Override |
- public void onCancel(DialogInterface dialog) { |
- getActivity().finish(); |
- } |
- }); |
- builder.create().show(); |
- return; |
- } |
- |
- mTitleInput.setText(result.name()); |
- if (result.isUrl()) mUrlInput.setText(result.url()); |
- if (result.parent() != null) { |
- setParentFolderInfo(result.parent().id(), result.parent().name()); |
- } |
- |
- synchronized (mLoadedLock) { |
- mBookmarkNodeLoaded = true; |
- } |
- } |
- |
- private void handleDefaultBookmarkNode(BookmarkNode result) { |
- if (getActivity() == null || getActivity().isFinishing()) return; |
- |
- if (result != null) { |
- setParentFolderInfo(result.id(), result.name()); |
- } else { |
- mFolderInput.setError(getResources().getText(R.string.default_folder_error)); |
- } |
- |
- synchronized (mLoadedLock) { |
- mDefaultFolderLoaded = true; |
- } |
- } |
- |
- /** |
- * Asynchronously retrieves the requested bookmark node showing a progress dialog if the task |
- * takes too long. |
- */ |
- private class LoadBookmarkNodeTask extends FragmentAsyncTask { |
- private final Context mContext; |
- private final Long mBookmarkId; |
- private BookmarkNode mResult; |
- |
- /** |
- * @param bookmarkId Id of the bookmark node to retrieve. Will retrieve the default bookmark |
- * folder if null. |
- */ |
- LoadBookmarkNodeTask(Long bookmarkId) { |
- // The activity might be temporarily detached during the background operation if the |
- // screen is rotated. Make sure to use a valid context even in that case. |
- mContext = getActivity().getApplicationContext(); |
- mBookmarkId = bookmarkId; |
- } |
- |
- @Override |
- protected void runBackgroundTask() { |
- mResult = (mBookmarkId == null) |
- ? ChromeBrowserProviderClient.getDefaultBookmarkFolder(mContext) |
- : ChromeBrowserProviderClient.getBookmarkNode(mContext, mBookmarkId, |
- ChromeBrowserProviderClient.GET_PARENT); |
- } |
- |
- @Override |
- protected void onTaskFinished() { |
- if (mBookmarkId == null) { |
- handleDefaultBookmarkNode(mResult); |
- } else { |
- handleGetBookmarkNode(mResult); |
- } |
- } |
- |
- @Override |
- protected void setDependentUIEnabled(boolean enabled) { |
- mOkButton.setEnabled(enabled); |
- mFolderInput.setEnabled(enabled); |
- |
- switch (mActivityMode) { |
- case ADD_BOOKMARK: |
- case ADD_FOLDER: |
- break; |
- case EDIT_BOOKMARK: |
- case EDIT_FOLDER: |
- mTitleInput.setEnabled(enabled); |
- mUrlInput.setEnabled(enabled); |
- mRemoveButton.setEnabled(enabled); |
- |
- if (!enabled) { |
- mUrlInput.setText(R.string.loading_bookmark); |
- mTitleInput.setText(R.string.loading_bookmark); |
- } |
- break; |
- default: |
- assert false; |
- } |
- } |
- } |
- |
- /** |
- * Asynchronously inserts or updates a bookmark showing a progress dialog if the task takes |
- * too long. |
- */ |
- private class InsertUpdateBookmarkTask extends FragmentAsyncTask { |
- private final Context mContext; |
- private final ContentValues mBookmarkValues; |
- private Long mBookmarkId; |
- |
- /** |
- * @param bookmarkValues Contents of the bookmark to be inserted or updated. |
- * @param bookmarkId Id of the bookmark node to update. If null the bookmark will be |
- * inserted. |
- */ |
- InsertUpdateBookmarkTask(ContentValues bookmarkValues, Long bookmarkId) { |
- mContext = getActivity().getApplicationContext(); |
- mBookmarkValues = bookmarkValues; |
- mBookmarkId = bookmarkId; |
- } |
- |
- @Override |
- protected void runBackgroundTask() { |
- Uri bookmarksUri = ChromeBrowserProvider.getBookmarksUri(mContext); |
- if (mBookmarkId == null) { |
- Uri response = mContext.getContentResolver().insert( |
- bookmarksUri, mBookmarkValues); |
- mBookmarkId = response != null ? ContentUris.parseId(response) : |
- INVALID_BOOKMARK_ID; |
- } else { |
- mContext.getContentResolver().update( |
- ContentUris.withAppendedId(bookmarksUri, mBookmarkId), |
- mBookmarkValues, null, null); |
- } |
- } |
- |
- @Override |
- protected void onTaskFinished() { |
- if (isFolder()) { |
- mActionListener.onFolderCreated(mBookmarkId, mTitleInput.getText().toString()); |
- } else { |
- mActionListener.onNodeEdited(mBookmarkId); |
- } |
- } |
- |
- @Override |
- protected void setDependentUIEnabled(boolean enabled) { |
- mOkButton.setEnabled(enabled); |
- mRemoveButton.setEnabled(enabled); |
- mCancelButton.setEnabled(enabled); |
- mActionListener.setBackEnabled(enabled); |
- } |
- } |
- |
- /** |
- * Asynchronously deletes a bookmark showing a progress dialog if the task takes too long. |
- */ |
- private class DeleteBookmarkTask extends FragmentAsyncTask { |
- private final Context mContext; |
- private final long mBookmarkId; |
- |
- DeleteBookmarkTask(long bookmarkId) { |
- mContext = getActivity().getApplicationContext(); |
- mBookmarkId = bookmarkId; |
- } |
- |
- @Override |
- protected void runBackgroundTask() { |
- Uri bookmarksUri = ChromeBrowserProvider.getBookmarksUri(mContext); |
- mContext.getContentResolver().delete( |
- ContentUris.withAppendedId(bookmarksUri, mBookmarkId), |
- null, null); |
- } |
- |
- @Override |
- protected void onTaskFinished() { |
- mActionListener.onRemove(); |
- } |
- |
- @Override |
- protected void setDependentUIEnabled(boolean enabled) { |
- mOkButton.setEnabled(enabled); |
- mRemoveButton.setEnabled(enabled); |
- mCancelButton.setEnabled(enabled); |
- mActionListener.setBackEnabled(enabled); |
- } |
- } |
- |
- /** |
- * Listener to handle actions triggered by this fragment. |
- */ |
- public static interface OnActionListener { |
- /** |
- * Called when the addition/editing of this bookmark node has been canceled. |
- */ |
- public void onCancel(); |
- |
- /** |
- * The add/edit of this bookmark node was successful. |
- * @param id The ID of the newly added bookmark (or the ID of the existing |
- * bookmark being edited). |
- */ |
- public void onNodeEdited(long id); |
- |
- /** |
- * The folder was succesfully created. |
- * @param id The ID of the newly added folder. |
- * @param name Name of the folder as well. |
- */ |
- public void onFolderCreated(long id, String name); |
- |
- /** |
- * Triggered when the user asks select a different bookmark folder for this node. |
- */ |
- public void triggerFolderSelection(); |
- |
- /** |
- * Called when the bookmark node has been removed. |
- */ |
- public void onRemove(); |
- |
- /** |
- * Called when the fragment wants to temporarily disable the back button. |
- * Done only while performing an asynchronous task that changes the bookmark model. |
- */ |
- public void setBackEnabled(boolean enabled); |
- } |
-} |