Commit cd2804f3 authored by Hesen Zhang's avatar Hesen Zhang Committed by Commit Bot

Using backend file utils to replace getExtension in rename dialogs

> Cleaned up a TODO flag for one corner case: for filename with
double extension like "foo.tar.gz", "foo" should be highlighted
by recognizing the extension ".tar.gz";
Previously using Java side util function, now
using RenameUtils instead which connects the one in backend
under FilePath class.

Bug: 924751
Change-Id: Iea09538eccda452c1ebf91c2bf9e8e42458bec8c
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1546586
Commit-Queue: Hesen Zhang <hesen@google.com>
Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarDavid Trainor <dtrainor@chromium.org>
Cr-Commit-Position: refs/heads/master@{#649222}
parent af2bd19d
...@@ -2330,6 +2330,7 @@ generate_jni("chrome_jni_headers") { ...@@ -2330,6 +2330,7 @@ generate_jni("chrome_jni_headers") {
"java/src/org/chromium/chrome/browser/download/DownloadMediaData.java", "java/src/org/chromium/chrome/browser/download/DownloadMediaData.java",
"java/src/org/chromium/chrome/browser/download/DownloadMediaParserBridge.java", "java/src/org/chromium/chrome/browser/download/DownloadMediaParserBridge.java",
"java/src/org/chromium/chrome/browser/download/DownloadUtils.java", "java/src/org/chromium/chrome/browser/download/DownloadUtils.java",
"java/src/org/chromium/chrome/browser/download/home/rename/RenameUtils.java",
"java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorFactory.java", "java/src/org/chromium/chrome/browser/download/items/OfflineContentAggregatorFactory.java",
"java/src/org/chromium/chrome/browser/download/service/DownloadBackgroundTask.java", "java/src/org/chromium/chrome/browser/download/service/DownloadBackgroundTask.java",
"java/src/org/chromium/chrome/browser/download/service/DownloadTaskScheduler.java", "java/src/org/chromium/chrome/browser/download/service/DownloadTaskScheduler.java",
......
...@@ -631,6 +631,7 @@ chrome_java_sources = [ ...@@ -631,6 +631,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/download/home/rename/RenameDialogCustomView.java", "java/src/org/chromium/chrome/browser/download/home/rename/RenameDialogCustomView.java",
"java/src/org/chromium/chrome/browser/download/home/rename/RenameDialogManager.java", "java/src/org/chromium/chrome/browser/download/home/rename/RenameDialogManager.java",
"java/src/org/chromium/chrome/browser/download/home/rename/RenameExtensionDialogCoordinator.java", "java/src/org/chromium/chrome/browser/download/home/rename/RenameExtensionDialogCoordinator.java",
"java/src/org/chromium/chrome/browser/download/home/rename/RenameUtils.java",
"java/src/org/chromium/chrome/browser/download/home/snackbars/DeleteUndoCoordinator.java", "java/src/org/chromium/chrome/browser/download/home/snackbars/DeleteUndoCoordinator.java",
"java/src/org/chromium/chrome/browser/download/home/snackbars/UndoUiUtils.java", "java/src/org/chromium/chrome/browser/download/home/snackbars/UndoUiUtils.java",
"java/src/org/chromium/chrome/browser/download/home/storage/StorageCoordinator.java", "java/src/org/chromium/chrome/browser/download/home/storage/StorageCoordinator.java",
......
...@@ -13,7 +13,7 @@ import org.chromium.ui.modaldialog.ModalDialogProperties; ...@@ -13,7 +13,7 @@ import org.chromium.ui.modaldialog.ModalDialogProperties;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
/** /**
* The Coordinator for the Rename Extension Dialog. Manages UI objects like views and model, and * The Coordinator for the Rename Dialog. Manages UI objects like views and model, and
* handles communication with the {@link ModalDialogManager}. * handles communication with the {@link ModalDialogManager}.
*/ */
public class RenameDialogCoordinator { public class RenameDialogCoordinator {
......
...@@ -14,7 +14,6 @@ import android.view.inputmethod.InputMethodManager; ...@@ -14,7 +14,6 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.ScrollView; import android.widget.ScrollView;
import android.widget.TextView; import android.widget.TextView;
import org.chromium.base.FileUtils;
import org.chromium.chrome.browser.widget.AlertDialogEditText; import org.chromium.chrome.browser.widget.AlertDialogEditText;
import org.chromium.chrome.download.R; import org.chromium.chrome.download.R;
import org.chromium.components.offline_items_collection.RenameResult; import org.chromium.components.offline_items_collection.RenameResult;
...@@ -90,9 +89,7 @@ public class RenameDialogCustomView extends ScrollView { ...@@ -90,9 +89,7 @@ public class RenameDialogCustomView extends ScrollView {
} }
private void highlightEditText(String name) { private void highlightEditText(String name) {
// TODO(hesen): Use backend getExtension instead. highlightEditText(0, name.length() - RenameUtils.getFileExtension(name).length());
int pos = name.length() - FileUtils.getExtension(name).length() - 1;
highlightEditText(0, pos);
} }
/** /**
......
...@@ -7,7 +7,6 @@ import android.content.Context; ...@@ -7,7 +7,6 @@ import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.FileUtils;
import org.chromium.components.offline_items_collection.RenameResult; import org.chromium.components.offline_items_collection.RenameResult;
import org.chromium.ui.modaldialog.DialogDismissalCause; import org.chromium.ui.modaldialog.DialogDismissalCause;
import org.chromium.ui.modaldialog.ModalDialogManager; import org.chromium.ui.modaldialog.ModalDialogManager;
...@@ -159,23 +158,21 @@ public class RenameDialogManager { ...@@ -159,23 +158,21 @@ public class RenameDialogManager {
if (isPositiveButton) { if (isPositiveButton) {
mLastAttemptedName = mRenameDialogCoordinator.getCurSuggestedName(); mLastAttemptedName = mRenameDialogCoordinator.getCurSuggestedName();
// TODO(hesen): Have a TextWatcher on the input, and disable OK button if it's empty.
if (TextUtils.isEmpty(mLastAttemptedName)) return;
if (TextUtils.equals(mLastAttemptedName, mOriginalName)) { if (TextUtils.equals(mLastAttemptedName, mOriginalName)) {
processDialogState(RenameDialogState.RENAME_DIALOG_CANCEL, processDialogState(RenameDialogState.RENAME_DIALOG_CANCEL,
DialogDismissalCause.POSITIVE_BUTTON_CLICKED); DialogDismissalCause.POSITIVE_BUTTON_CLICKED);
return; return;
} }
// TODO(hesen): Have a TextWatcher on the input, and disable OK button if it's empty. if (!RenameUtils.getFileExtension(mLastAttemptedName)
if (TextUtils.isEmpty(mRenameDialogCoordinator.getCurSuggestedName())) return; .equalsIgnoreCase(RenameUtils.getFileExtension(mOriginalName))) {
// TODO(hesen): Use backend getExtension instead.
if (!TextUtils.equals(FileUtils.getExtension(mLastAttemptedName),
FileUtils.getExtension(mOriginalName))) {
processDialogState(RenameDialogState.RENAME_EXTENSION_DIALOG_DEFAULT, processDialogState(RenameDialogState.RENAME_EXTENSION_DIALOG_DEFAULT,
DialogDismissalCause.POSITIVE_BUTTON_CLICKED); DialogDismissalCause.POSITIVE_BUTTON_CLICKED);
return; return;
} }
runRenameCallback(); runRenameCallback();
} else { } else {
mRenameDialogCoordinator.dismissDialog(DialogDismissalCause.NEGATIVE_BUTTON_CLICKED); mRenameDialogCoordinator.dismissDialog(DialogDismissalCause.NEGATIVE_BUTTON_CLICKED);
......
...@@ -14,7 +14,7 @@ import org.chromium.ui.modaldialog.ModalDialogProperties; ...@@ -14,7 +14,7 @@ import org.chromium.ui.modaldialog.ModalDialogProperties;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
/** /**
* The Coordinator for the Rename Dialog. Manages UI objects like views and model, and * The Coordinator for the Rename Extension Dialog. Manages UI objects like views and model, and
* handles communication with the {@link ModalDialogManager}. * handles communication with the {@link ModalDialogManager}.
*/ */
final class RenameExtensionDialogCoordinator { final class RenameExtensionDialogCoordinator {
......
// Copyright 2019 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.download.home.rename;
import org.chromium.base.FileUtils;
import org.chromium.base.VisibleForTesting;
/**
* A class containing some utility static methods for rename.
*/
public class RenameUtils {
static private boolean sIsDisabledNativeForTesting;
/**
* Determine the extension of a downloaded item.
*
* @param fileName input to determine the extension.
* @return String representing the extension part of fileName.
* Return empty if there is no extension, otherwise return extension part starting with
* separator. e.g. it will return ".jpg" for the path "foo/bar.jpg", and return ".tar.gz" for
* the path "foo/bar.tar.gz".
*/
public static String getFileExtension(String fileName) {
return sIsDisabledNativeForTesting ? FileUtils.getExtension(fileName)
: nativeGetFileExtension(fileName);
}
/**
* Disables the native APIs. This is only intended for testing purposes.
*/
@VisibleForTesting
public static void disableNativeForTesting() {
sIsDisabledNativeForTesting = true;
}
private static native String nativeGetFileExtension(String fileName);
}
...@@ -2281,6 +2281,7 @@ jumbo_split_static_library("browser") { ...@@ -2281,6 +2281,7 @@ jumbo_split_static_library("browser") {
"android/download/items/offline_content_aggregator_factory_android.cc", "android/download/items/offline_content_aggregator_factory_android.cc",
"android/download/local_media_data_source_factory.cc", "android/download/local_media_data_source_factory.cc",
"android/download/local_media_data_source_factory.h", "android/download/local_media_data_source_factory.h",
"android/download/rename_utils.cc",
"android/download/service/download_background_task.cc", "android/download/service/download_background_task.cc",
"android/download/service/download_task_scheduler.cc", "android/download/service/download_task_scheduler.cc",
"android/download/service/download_task_scheduler.h", "android/download/service/download_task_scheduler.h",
......
// Copyright 2019 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.
#include "base/android/jni_string.h"
#include "base/files/file_path.h"
#include "jni/RenameUtils_jni.h"
using base::android::ConvertUTF8ToJavaString;
using base::android::JavaParamRef;
using base::android::ScopedJavaLocalRef;
// static
static base::android::ScopedJavaLocalRef<jstring>
JNI_RenameUtils_GetFileExtension(
JNIEnv* env,
const base::android::JavaParamRef<jstring>& fileName) {
std::string extension =
base::FilePath(ConvertJavaStringToUTF8(env, fileName)).Extension();
return ConvertUTF8ToJavaString(env, extension);
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment