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") {
"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/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/service/DownloadBackgroundTask.java",
"java/src/org/chromium/chrome/browser/download/service/DownloadTaskScheduler.java",
......
......@@ -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/RenameDialogManager.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/UndoUiUtils.java",
"java/src/org/chromium/chrome/browser/download/home/storage/StorageCoordinator.java",
......
......@@ -13,7 +13,7 @@ import org.chromium.ui.modaldialog.ModalDialogProperties;
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}.
*/
public class RenameDialogCoordinator {
......
......@@ -14,7 +14,6 @@ import android.view.inputmethod.InputMethodManager;
import android.widget.ScrollView;
import android.widget.TextView;
import org.chromium.base.FileUtils;
import org.chromium.chrome.browser.widget.AlertDialogEditText;
import org.chromium.chrome.download.R;
import org.chromium.components.offline_items_collection.RenameResult;
......@@ -90,9 +89,7 @@ public class RenameDialogCustomView extends ScrollView {
}
private void highlightEditText(String name) {
// TODO(hesen): Use backend getExtension instead.
int pos = name.length() - FileUtils.getExtension(name).length() - 1;
highlightEditText(0, pos);
highlightEditText(0, name.length() - RenameUtils.getFileExtension(name).length());
}
/**
......
......@@ -7,7 +7,6 @@ import android.content.Context;
import android.text.TextUtils;
import org.chromium.base.Callback;
import org.chromium.base.FileUtils;
import org.chromium.components.offline_items_collection.RenameResult;
import org.chromium.ui.modaldialog.DialogDismissalCause;
import org.chromium.ui.modaldialog.ModalDialogManager;
......@@ -159,23 +158,21 @@ public class RenameDialogManager {
if (isPositiveButton) {
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)) {
processDialogState(RenameDialogState.RENAME_DIALOG_CANCEL,
DialogDismissalCause.POSITIVE_BUTTON_CLICKED);
return;
}
// TODO(hesen): Have a TextWatcher on the input, and disable OK button if it's empty.
if (TextUtils.isEmpty(mRenameDialogCoordinator.getCurSuggestedName())) return;
// TODO(hesen): Use backend getExtension instead.
if (!TextUtils.equals(FileUtils.getExtension(mLastAttemptedName),
FileUtils.getExtension(mOriginalName))) {
if (!RenameUtils.getFileExtension(mLastAttemptedName)
.equalsIgnoreCase(RenameUtils.getFileExtension(mOriginalName))) {
processDialogState(RenameDialogState.RENAME_EXTENSION_DIALOG_DEFAULT,
DialogDismissalCause.POSITIVE_BUTTON_CLICKED);
return;
}
runRenameCallback();
} else {
mRenameDialogCoordinator.dismissDialog(DialogDismissalCause.NEGATIVE_BUTTON_CLICKED);
......
......@@ -14,7 +14,7 @@ import org.chromium.ui.modaldialog.ModalDialogProperties;
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}.
*/
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") {
"android/download/items/offline_content_aggregator_factory_android.cc",
"android/download/local_media_data_source_factory.cc",
"android/download/local_media_data_source_factory.h",
"android/download/rename_utils.cc",
"android/download/service/download_background_task.cc",
"android/download/service/download_task_scheduler.cc",
"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