Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 090476d5 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "DO NOT MERGE back porting for fixing sysui direct reply" into oc-dev

parents 70ffc41c 08aae908
Loading
Loading
Loading
Loading
+53 −0
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package android.widget;

import static android.Manifest.permission.INTERACT_ACROSS_USERS_FULL;
import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_LENGTH;
import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_ARG_START_INDEX;
import static android.view.accessibility.AccessibilityNodeInfo.EXTRA_DATA_TEXT_CHARACTER_LOCATION_KEY;
@@ -28,11 +29,13 @@ import android.annotation.FloatRange;
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.Size;
import android.annotation.StringRes;
import android.annotation.StyleRes;
import android.annotation.XmlRes;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.assist.AssistStructure;
import android.content.ClipData;
import android.content.ClipDescription;
@@ -66,6 +69,7 @@ import android.os.Parcel;
import android.os.Parcelable;
import android.os.ParcelableParcel;
import android.os.SystemClock;
import android.os.UserHandle;
import android.provider.Settings;
import android.text.BoringLayout;
import android.text.DynamicLayout;
@@ -684,6 +688,19 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener

    private InputFilter[] mFilters = NO_FILTERS;

    /**
     * To keep the information to indicate if there is necessary to restrict the power of
     * INTERACT_ACROSS_USERS_FULL.
     * <p>
     * SystemUI always run as user 0 to process all of direct reply. SystemUI has the poer of
     * INTERACT_ACROSS_USERS_FULL. However, all of the notifications not only belong to user 0 but
     * also to the other users in multiple user environment.
     * </p>
     *
     * @see #setRestrictedAcrossUser(boolean)
     */
    private boolean mIsRestrictedAcrossUser;

    private volatile Locale mCurrentSpellCheckerLocaleCache;

    // It is possible to have a selection even when mEditor is null (programmatically set, like when
@@ -10035,6 +10052,24 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
                : mCurrentSpellCheckerLocaleCache;
    }

    /**
     * To notify the TextView to restricted the power of the app granted INTERACT_ACROSS_USERS_FULL
     * permission.
     * <p>
     * Most of applications should not granted the INTERACT_ACROSS_USERS_FULL permssion.
     * SystemUI is the special one that run in user 0 process to handle multiple user notification.
     * Unforunately, the power of INTERACT_ACROSS_USERS_FULL should be limited or restricted for
     * preventing from information leak.</p>
     * <p>This function call is called for SystemUI Keyguard and Notification.</p>
     *
     * @param isRestricted is true if the power of INTERACT_ACROSS_USERS_FULL should be limited.
     * @hide
     */
    @RequiresPermission(INTERACT_ACROSS_USERS_FULL)
    public final void setRestrictedAcrossUser(boolean isRestricted) {
        mIsRestrictedAcrossUser = isRestricted;
    }

    /**
     * This is a temporary method. Future versions may support multi-locale text.
     * Caveat: This method may not return the latest text services locale, but this should be
@@ -11055,6 +11090,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }

    boolean canCut() {
        if (mIsRestrictedAcrossUser
                && UserHandle.myUserId() != ActivityManager.getCurrentUser()) {
            // When it's restricted, and the curren user is not the process user. It can't cut
            // because it may cut the text of the user 10 into the clipboard of user 0.
            return false;
        }
        if (hasPasswordTransformationMethod()) {
            return false;
        }
@@ -11068,6 +11109,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }

    boolean canCopy() {
        if (mIsRestrictedAcrossUser
                && UserHandle.myUserId() != ActivityManager.getCurrentUser()) {
            // When it's restricted, and the curren user is not the process user. It can't copy
            // because it may copy the text of the user 10 to the clipboard of user 0.
            return false;
        }
        if (hasPasswordTransformationMethod()) {
            return false;
        }
@@ -11097,6 +11144,12 @@ public class TextView extends View implements ViewTreeObserver.OnPreDrawListener
    }

    boolean canPaste() {
        if (mIsRestrictedAcrossUser
                && UserHandle.myUserId() != ActivityManager.getCurrentUser()) {
            // When it's restricted, and the curren user is not the process user. It can't paste
            // because it may copy the text from the user 0 clipboard in current user is 10.
            return false;
        }
        return (mText instanceof Editable
                && mEditor != null && mEditor.mKeyListener != null
                && getSelectionStart() >= 0
+2 −0
Original line number Diff line number Diff line
@@ -79,6 +79,7 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView

    @Override
    protected void resetState() {
        mPasswordEntry.setRestrictedAcrossUser(true);
        mSecurityMessageDisplay.setMessage("");
        final boolean wasDisabled = mPasswordEntry.isEnabled();
        setPasswordEntryEnabled(true);
@@ -175,6 +176,7 @@ public class KeyguardPasswordView extends KeyguardAbsKeyInputView
                Context.INPUT_METHOD_SERVICE);

        mPasswordEntry = findViewById(getPasswordTextViewId());
        mPasswordEntry.setRestrictedAcrossUser(true);
        mPasswordEntryDisabler = new TextViewInputDisabler(mPasswordEntry);
        mPasswordEntry.setKeyListener(TextKeyListener.getInstance());
        mPasswordEntry.setInputType(InputType.TYPE_CLASS_TEXT
+1 −0
Original line number Diff line number Diff line
@@ -179,6 +179,7 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene
                LayoutInflater.from(context).inflate(R.layout.remote_input, root, false);
        v.mController = controller;
        v.mEntry = entry;
        v.mEditText.setRestrictedAcrossUser(true);
        v.setTag(VIEW_TAG);

        return v;