Index: chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/SelectBookmarkFolderFragment.java |
diff --git a/chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/SelectBookmarkFolderFragment.java b/chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/SelectBookmarkFolderFragment.java |
deleted file mode 100644 |
index 1ab74088955089ca85516d4b7f9ba8424a5e9e30..0000000000000000000000000000000000000000 |
--- a/chrome/android/java_staging/src/org/chromium/chrome/browser/bookmark/SelectBookmarkFolderFragment.java |
+++ /dev/null |
@@ -1,361 +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.content.Context; |
-import android.content.res.Resources; |
-import android.graphics.Typeface; |
-import android.graphics.drawable.BitmapDrawable; |
-import android.os.Bundle; |
-import android.util.Log; |
-import android.view.LayoutInflater; |
-import android.view.View; |
-import android.view.View.OnClickListener; |
-import android.view.ViewGroup; |
-import android.widget.ArrayAdapter; |
-import android.widget.Button; |
-import android.widget.ListView; |
-import android.widget.TextView; |
- |
-import org.chromium.base.ApiCompatibilityUtils; |
-import org.chromium.base.VisibleForTesting; |
-import org.chromium.chrome.R; |
-import org.chromium.chrome.browser.ChromeBrowserProvider.BookmarkNode; |
-import org.chromium.chrome.browser.ChromeBrowserProvider.Type; |
-import org.chromium.chrome.browser.ChromeBrowserProviderClient; |
-import org.chromium.chrome.browser.widget.TintedDrawable; |
-import org.chromium.sync.AndroidSyncSettings; |
-import org.chromium.ui.base.LocalizationUtils; |
- |
-/** |
- * The user interface for selecting a bookmark folder. |
- */ |
-public class SelectBookmarkFolderFragment extends AsyncTaskFragment implements OnClickListener { |
- /** |
- * 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 ALLOW_FOLDER_ADDITION = "allowAdd"; |
- public static final String FOLDER_ID_TO_SELECT = "selectedFolder"; |
- public static final String IS_FOLDER = "isFolder"; |
- } |
- |
- private Button mNewFolderButton; |
- |
- private ListView mFoldersList; |
- private FolderListAdapter mFoldersAdapter; |
- private TextView mEmptyFoldersView; |
- |
- private boolean mAllowFolderAddition; |
- private long mFolderIdToSelect; |
- // Used to determine if a bookmark's or a folder's parent is being changed. |
- private boolean mIsFolder; |
- |
- private OnActionListener mActionListener; |
- |
- /** |
- * The maximum depth that will be indented. Folders with a depth greater than this will |
- * all appear at this same depth. |
- */ |
- private int mMaximumFolderIndentDepth = 8; |
- |
- /** |
- * Constructs a new fragment in charge of handling bookmark folder selection. |
- * @param allowFolderAddition Whether this fragment should allow additional folders to be added |
- * as children. |
- * @param folderIdToSelect The ID of the folder to select when shown initially. |
- * @return The selection fragment. |
- */ |
- public static SelectBookmarkFolderFragment newInstance( |
- boolean allowFolderAddition, long folderIdToSelect, boolean isFolder) { |
- SelectBookmarkFolderFragment fragment = new SelectBookmarkFolderFragment(); |
- Bundle arguments = new Bundle(); |
- arguments.putBoolean(Arguments.ALLOW_FOLDER_ADDITION, allowFolderAddition); |
- arguments.putLong(Arguments.FOLDER_ID_TO_SELECT, folderIdToSelect); |
- arguments.putBoolean(Arguments.IS_FOLDER, isFolder); |
- fragment.setArguments(arguments); |
- return fragment; |
- } |
- |
- /** |
- * Retrieves the current action listener for this fragment. |
- * Used by testing to intercept calls as a proxy. |
- */ |
- @VisibleForTesting |
- public OnActionListener getOnActionListenerForTest() { |
- return mActionListener; |
- } |
- |
- /** |
- * Sets the action listener for this fragment. |
- * @param listener The listener to be set. |
- */ |
- public void setOnActionListener(OnActionListener listener) { |
- mActionListener = listener; |
- } |
- |
- @Override |
- public void onCreate(Bundle savedInstanceState) { |
- super.onCreate(savedInstanceState); |
- |
- mAllowFolderAddition = getArguments().getBoolean(Arguments.ALLOW_FOLDER_ADDITION); |
- mFolderIdToSelect = getArguments().getLong( |
- Arguments.FOLDER_ID_TO_SELECT, INVALID_BOOKMARK_ID); |
- mIsFolder = getArguments().getBoolean(Arguments.IS_FOLDER); |
- } |
- |
- @Override |
- public View onCreateView(LayoutInflater inflater, ViewGroup container, |
- Bundle savedInstanceState) { |
- View contentView = inflater.inflate(R.layout.select_bookmark_folder, container, false); |
- |
- mNewFolderButton = (Button) contentView.findViewById(R.id.new_folder_btn); |
- if (mAllowFolderAddition) { |
- mNewFolderButton.setOnClickListener(this); |
- } else { |
- mNewFolderButton.setVisibility(View.GONE); |
- } |
- |
- mFoldersList = (ListView) contentView.findViewById(R.id.bookmark_folder_list); |
- mEmptyFoldersView = (TextView) contentView.findViewById(R.id.empty_folders); |
- mFoldersList.setEmptyView(mEmptyFoldersView); |
- |
- if (mFoldersAdapter != null) mFoldersList.setAdapter(mFoldersAdapter); |
- return contentView; |
- } |
- |
- @Override |
- public void onActivityCreated(Bundle savedInstanceState) { |
- super.onActivityCreated(savedInstanceState); |
- |
- if (mFoldersAdapter == null) { |
- mFoldersAdapter = new FolderListAdapter(getActivity().getApplicationContext()); |
- mFoldersList.setAdapter(mFoldersAdapter); |
- |
- long selectedFolder = INVALID_BOOKMARK_ID; |
- if (savedInstanceState == null) { |
- // Only use the folder ID passed in from the intent if the activity is not being |
- // restored. During restoration, the ListView will handle reselecting the |
- // previously selected entity and we do not want to override that with the initial |
- // value. |
- selectedFolder = mFolderIdToSelect; |
- } |
- |
- loadAllFolders(selectedFolder); |
- } else { |
- if (!areFoldersLoaded()) { |
- loadAllFolders(mFolderIdToSelect); |
- } |
- } |
- |
- mMaximumFolderIndentDepth = |
- getResources().getInteger(R.integer.select_bookmark_folder_max_depth_indent); |
- } |
- |
- @Override |
- public void onClick(View v) { |
- if (mActionListener == null) { |
- Log.d(getClass().getName(), "No OnResultListener specified -- onClick == NoOp"); |
- return; |
- } |
- if (v == mNewFolderButton) { |
- long parentId = INVALID_BOOKMARK_ID; |
- String parentName = null; |
- for (int i = 0; i < mFoldersAdapter.getCount(); i++) { |
- FolderListEntry selectedFolder = mFoldersAdapter.getItem(i); |
- if (selectedFolder.mFolder.id() == mFolderIdToSelect) { |
- parentId = selectedFolder.mFolder.id(); |
- parentName = selectedFolder.mFolder.name(); |
- } |
- } |
- mActionListener.triggerNewFolderCreation(parentId, parentName); |
- } |
- } |
- |
- /** |
- * @return Whether or not the bookmark folders have been loaded asynchronously yet. |
- */ |
- @VisibleForTesting |
- public boolean areFoldersLoaded() { |
- return mFoldersAdapter.getCount() > 0; |
- } |
- |
- private void loadAllFolders(long folderId) { |
- if (isFragmentAsyncTaskRunning()) return; |
- runFragmentAsyncTask(new LoadAllFoldersTask(folderId), |
- getActivity().getString(R.string.loading_bookmark)); |
- } |
- |
- private void handleLoadAllFolders(BookmarkNode result, long selectedFolderId, |
- boolean syncEnabled) { |
- if (getActivity() == null || getActivity().isFinishing()) return; |
- |
- mFoldersAdapter.clear(); |
- if (result == null) { |
- mEmptyFoldersView.setText(R.string.bookmark_folder_tree_error); |
- } else { |
- mEmptyFoldersView.setText(R.string.no_bookmark_folders); |
- |
- // The root node is just a placeholder, so directly add it's children. |
- for (BookmarkNode child : result.children()) { |
- if (!syncEnabled) { |
- Type type = child.type(); |
- if (type == Type.BOOKMARK_BAR || type == Type.OTHER_NODE) { |
- continue; |
- } |
- } |
- addFolderItem(child, 0, selectedFolderId); |
- } |
- } |
- } |
- |
- private void addFolderItem(BookmarkNode folder, int depth, long selectedFolderId) { |
- boolean isSelectedFolder = (folder.id() == selectedFolderId); |
- mFoldersAdapter.add(new FolderListEntry(folder, depth, isSelectedFolder)); |
- // Hiding sub folders will prevent current folder to be moved under a sub folder. |
- if (folder.id() != selectedFolderId || !mIsFolder) { |
- for (BookmarkNode child : folder.children()) { |
- addFolderItem(child, depth + 1, selectedFolderId); |
- } |
- } |
- } |
- |
- /** |
- * Data object used in the list adapter. |
- */ |
- private static class FolderListEntry { |
- final BookmarkNode mFolder; |
- final int mDepth; |
- final boolean mIsSelectedFolder; |
- |
- FolderListEntry(BookmarkNode folder, int depth, boolean isSelectedFolder) { |
- mFolder = folder; |
- mDepth = depth; |
- mIsSelectedFolder = isSelectedFolder; |
- } |
- |
- @Override |
- public String toString() { |
- return mFolder.name(); |
- } |
- } |
- |
- /** |
- * List adapter for the folder selection view. |
- */ |
- private class FolderListAdapter extends ArrayAdapter<FolderListEntry> { |
- private final int mDefaultPaddingLeft; |
- private final int mPaddingLeftInc; |
- |
- public FolderListAdapter(Context context) { |
- super(context, R.layout.select_bookmark_folder_item); |
- |
- Resources resources = context.getResources(); |
- mDefaultPaddingLeft = |
- resources.getDimensionPixelSize(R.dimen.select_bookmark_folder_item_left); |
- mPaddingLeftInc = |
- resources.getDimensionPixelSize(R.dimen.select_bookmark_folder_item_inc_left); |
- } |
- |
- @Override |
- public View getView(int position, View convertView, ViewGroup parent) { |
- TextView view = (TextView) super.getView(position, convertView, parent); |
- final FolderListEntry entry = getItem(position); |
- |
- BitmapDrawable icon = TintedDrawable.constructTintedDrawable( |
- getResources(), R.drawable.eb_folder); |
- ApiCompatibilityUtils.setCompoundDrawablesRelativeWithIntrinsicBounds( |
- view, icon, null, null, null); |
- |
- // TODO: For folders that exceed the maximum depth, come up with a UI treatment to |
- // give some indication of that. |
- int paddingLeft = mDefaultPaddingLeft |
- + Math.min(entry.mDepth, mMaximumFolderIndentDepth) * mPaddingLeftInc; |
- if (LocalizationUtils.isLayoutRtl()) { |
- view.setPadding(0, 0, paddingLeft, 0); |
- } else { |
- view.setPadding(paddingLeft, 0, 0, 0); |
- } |
- view.setTypeface(null, entry.mIsSelectedFolder ? Typeface.BOLD : Typeface.NORMAL); |
- view.setBackgroundResource(R.drawable.btn_bg_holo); |
- view.setOnClickListener(new OnClickListener() { |
- @Override |
- public void onClick(View v) { |
- executeFolderSelection(entry.mFolder.id(), entry.mFolder.name()); |
- } |
- }); |
- return view; |
- } |
- |
- @Override |
- public long getItemId(int position) { |
- return getCount() > 0 ? getItem(position).mFolder.id() : -1; |
- } |
- |
- @Override |
- public boolean hasStableIds() { |
- return true; |
- } |
- } |
- |
- /** |
- * Select the folder to be used for the Add/Edit Fragment. |
- * @param folderId Id of the selected folder. |
- * @param folderName Name of the selected folder. |
- */ |
- public void executeFolderSelection(long folderId, String folderName) { |
- getFragmentManager().popBackStackImmediate(); |
- ((AddEditBookmarkFragment) getTargetFragment()).setParentFolderInfo( |
- folderId, folderName); |
- } |
- |
- /** |
- * Asynchronously retrieves all the bookmark folders that the user can edit, |
- * showing a progress dialog if the task takes too long. |
- */ |
- private class LoadAllFoldersTask extends FragmentAsyncTask { |
- private final Context mContext; |
- private final long mFolderId; |
- private BookmarkNode mResult; |
- |
- LoadAllFoldersTask(long folderId) { |
- mContext = getActivity().getApplicationContext(); |
- mFolderId = folderId; |
- } |
- |
- @Override |
- protected void runBackgroundTask() { |
- mResult = ChromeBrowserProviderClient.getEditableBookmarkFolderHierarchy(mContext); |
- } |
- |
- @Override |
- protected void onTaskFinished() { |
- handleLoadAllFolders(mResult, mFolderId, AndroidSyncSettings.isSyncEnabled(mContext)); |
- } |
- |
- @Override |
- protected void setDependentUIEnabled(boolean enabled) { |
- mNewFolderButton.setEnabled(enabled); |
- } |
- } |
- |
- /** |
- * Listener to handle actions triggered by this fragment. |
- */ |
- public static interface OnActionListener { |
- /** |
- * Triggered when the user asks to create a new subfolder. |
- * @param selectedFolderId The currently selected folder ID, which should be used as the |
- * default parent of the newly added folder. |
- * @param selectedFolderName The currently selected folder name. |
- */ |
- public void triggerNewFolderCreation(long selectedFolderId, String selectedFolderName); |
- } |
-} |