Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +25 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.text.SpannedString; import android.text.TextWatcher; import android.util.AttributeSet; import android.util.Log; import android.view.ActionMode; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; Loading @@ -48,6 +49,7 @@ import android.view.inputmethod.CompletionInfo; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.view.textclassifier.TextClassifier; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; Loading Loading @@ -192,9 +194,32 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene v.mEntry = entry; v.setTag(VIEW_TAG); // Disable the TextClassifier to avoid cross user interactions. v.mEditText.setTextClassifier(TextClassifier.NO_OP); return v; } @Override public ActionMode startActionMode(ActionMode.Callback callback, int type) { try { UserHandle notificationUser = mEntry.notification.getUser(); UserHandle currentUser = UserHandle.of(ActivityManager.getCurrentUser()); if (!UserHandle.ALL.equals(notificationUser) && !currentUser.equals(notificationUser)) { // If this happens to be a selection action mode, a non-NO_OP TextClassifier could // leak data across users. This widget uses TextClassifier.NO_OP so this is fine. // Log the security fix. android.util.EventLog.writeEvent(0x534e4554, "123232892", -1, ""); } } catch (Throwable t) { // Avoid crashing because of this log attempt. Log.i(TAG, "Error attempting to log security fix for bug 123232892", t); } return super.startActionMode(callback, type); } @Override public void onClick(View v) { if (v == mSendButton) { Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java +10 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import android.view.textclassifier.TextClassifier; import android.widget.EditText; import android.widget.ImageButton; Loading Loading @@ -109,4 +110,13 @@ public class RemoteInputViewTest extends SysuiTestCase { mView.setVisibility(View.INVISIBLE); mView.setVisibility(View.VISIBLE); } @Test public void testUsesNoOpTextClassifier() { RemoteInput input = new RemoteInput.Builder(TEST_RESULT_KEY).build(); mView.setRemoteInput(new RemoteInput[]{input}, input); EditText editText = mView.findViewById(R.id.remote_input_text); assertEquals(TextClassifier.NO_OP, editText.getTextClassifier()); } } Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java +25 −0 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.text.SpannedString; import android.text.TextWatcher; import android.util.AttributeSet; import android.util.Log; import android.view.ActionMode; import android.view.KeyEvent; import android.view.LayoutInflater; import android.view.MotionEvent; Loading @@ -48,6 +49,7 @@ import android.view.inputmethod.CompletionInfo; import android.view.inputmethod.EditorInfo; import android.view.inputmethod.InputConnection; import android.view.inputmethod.InputMethodManager; import android.view.textclassifier.TextClassifier; import android.widget.EditText; import android.widget.ImageButton; import android.widget.LinearLayout; Loading Loading @@ -192,9 +194,32 @@ public class RemoteInputView extends LinearLayout implements View.OnClickListene v.mEntry = entry; v.setTag(VIEW_TAG); // Disable the TextClassifier to avoid cross user interactions. v.mEditText.setTextClassifier(TextClassifier.NO_OP); return v; } @Override public ActionMode startActionMode(ActionMode.Callback callback, int type) { try { UserHandle notificationUser = mEntry.notification.getUser(); UserHandle currentUser = UserHandle.of(ActivityManager.getCurrentUser()); if (!UserHandle.ALL.equals(notificationUser) && !currentUser.equals(notificationUser)) { // If this happens to be a selection action mode, a non-NO_OP TextClassifier could // leak data across users. This widget uses TextClassifier.NO_OP so this is fine. // Log the security fix. android.util.EventLog.writeEvent(0x534e4554, "123232892", -1, ""); } } catch (Throwable t) { // Avoid crashing because of this log attempt. Log.i(TAG, "Error attempting to log security fix for bug 123232892", t); } return super.startActionMode(callback, type); } @Override public void onClick(View v) { if (v == mSendButton) { Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/RemoteInputViewTest.java +10 −0 Original line number Diff line number Diff line Loading @@ -26,6 +26,7 @@ import android.support.test.filters.SmallTest; import android.testing.AndroidTestingRunner; import android.testing.TestableLooper; import android.view.View; import android.view.textclassifier.TextClassifier; import android.widget.EditText; import android.widget.ImageButton; Loading Loading @@ -109,4 +110,13 @@ public class RemoteInputViewTest extends SysuiTestCase { mView.setVisibility(View.INVISIBLE); mView.setVisibility(View.VISIBLE); } @Test public void testUsesNoOpTextClassifier() { RemoteInput input = new RemoteInput.Builder(TEST_RESULT_KEY).build(); mView.setRemoteInput(new RemoteInput[]{input}, input); EditText editText = mView.findViewById(R.id.remote_input_text); assertEquals(TextClassifier.NO_OP, editText.getTextClassifier()); } }