chromium/components/browser_ui/widget/android/java/src/org/chromium/components/browser_ui/widget/text/VerticallyFixedEditText.java

// Copyright 2015 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.components.browser_ui.widget.text;

import android.content.Context;
import android.util.AttributeSet;
import android.widget.EditText;

import androidx.appcompat.widget.AppCompatEditText;

/**
 * This custom {@link EditText} does not allow the user to scroll the text vertically.  This is
 * can be useful when the EditText is put into a layout where it is smaller than it's normal height.
 */
public class VerticallyFixedEditText extends AppCompatEditText {
    public VerticallyFixedEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    private boolean mBringingPointIntoView;

    @Override
    public boolean bringPointIntoView(int offset) {
        try {
            mBringingPointIntoView = true;
            return super.bringPointIntoView(offset);
        } finally {
            mBringingPointIntoView = false;
        }
    }

    @Override
    public void scrollTo(int x, int y) {
        // To prevent vertical scroll on touch events, only allow
        // TextView.bringPointIntoView(...) to change the vertical scroll.
        super.scrollTo(x, mBringingPointIntoView ? y : getScrollY());
    }
}