// Copyright 2019 The Chromium Authors
// 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 android.content.Context;
import android.view.LayoutInflater;
import org.chromium.base.Callback;
import org.chromium.chrome.browser.download.internal.R;
import org.chromium.ui.modaldialog.DialogDismissalCause;
import org.chromium.ui.modaldialog.ModalDialogManager;
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
* handles communication with the {@link ModalDialogManager}.
*/
public class RenameDialogCoordinator {
private final ModalDialogManager mModalDialogManager;
private final PropertyModel mRenameDialogModel;
private final RenameDialogCustomView mRenameDialogCustomView;
private final Callback<Boolean> mOnClickEventCallback;
public RenameDialogCoordinator(
Context context,
ModalDialogManager modalDialogManager,
Callback<Boolean> onClickCallback) {
mModalDialogManager = modalDialogManager;
mRenameDialogCustomView =
(RenameDialogCustomView)
LayoutInflater.from(context)
.inflate(R.layout.download_rename_custom_dialog, null);
mRenameDialogModel =
new PropertyModel.Builder(ModalDialogProperties.ALL_KEYS)
.with(ModalDialogProperties.CONTROLLER, new RenameDialogController())
.with(ModalDialogProperties.TITLE, context.getString(R.string.rename))
.with(ModalDialogProperties.CUSTOM_VIEW, mRenameDialogCustomView)
.with(
ModalDialogProperties.POSITIVE_BUTTON_TEXT,
context.getResources(),
R.string.ok)
.with(
ModalDialogProperties.NEGATIVE_BUTTON_TEXT,
context.getResources(),
R.string.cancel)
.build();
mOnClickEventCallback = onClickCallback;
mRenameDialogCustomView.setEmptyInputObserver(
(result) -> {
mRenameDialogModel.set(ModalDialogProperties.POSITIVE_BUTTON_DISABLED, result);
});
}
public void destroy() {
dismissDialog(DialogDismissalCause.ACTIVITY_DESTROYED);
}
public String getCurSuggestedName() {
return mRenameDialogCustomView.getTargetName();
}
/**
* Initialize rename dialog view and its sub-components, {@link ModalDialogManager}.
* @param name The content to initialize display on EditTextBox.
*/
public void showDialog(String name) {
mModalDialogManager.showDialog(
mRenameDialogModel, ModalDialogManager.ModalDialogType.APP, true);
mRenameDialogCustomView.initializeView(name);
}
/**
* Update rename dialog view and its sub-components, {@link ModalDialogManager}.
* @param name The content to update the display on EditText box.
* @param error {@RenameResult} Error message to display on subtitle view.
*/
public void showDialogWithErrorMessage(String name, int /*RenameResult*/ error) {
mRenameDialogCustomView.updateToErrorView(name, error);
if (!mModalDialogManager.isShowing()) {
mModalDialogManager.showDialog(
mRenameDialogModel, ModalDialogManager.ModalDialogType.APP, true);
}
}
public void dismissDialog(int dismissalCause) {
if (mModalDialogManager != null) {
mModalDialogManager.dismissDialog(mRenameDialogModel, dismissalCause);
}
}
private class RenameDialogController implements ModalDialogProperties.Controller {
@Override
public void onDismiss(PropertyModel model, int dismissalCause) {}
@Override
public void onClick(PropertyModel model, int buttonType) {
switch (buttonType) {
case ModalDialogProperties.ButtonType.POSITIVE:
mOnClickEventCallback.onResult(true);
break;
case ModalDialogProperties.ButtonType.NEGATIVE:
mOnClickEventCallback.onResult(false);
break;
default:
break;
}
}
}
}