summaryrefslogtreecommitdiff
path: root/core/java/android
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android')
-rw-r--r--core/java/android/widget/Toast.java10
-rw-r--r--core/java/android/widget/ToastPresenter.java25
2 files changed, 24 insertions, 11 deletions
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index 08b32930971a..fb962103990c 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -43,7 +43,7 @@ import android.os.ServiceManager;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
-import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.IAccessibilityManager;
import com.android.internal.annotations.GuardedBy;
@@ -610,10 +610,10 @@ public class Toast {
*/
TN(Context context, String packageName, Binder token, List<Callback> callbacks,
@Nullable Looper looper) {
- WindowManager windowManager = context.getSystemService(WindowManager.class);
- AccessibilityManager accessibilityManager = AccessibilityManager.getInstance(context);
- mPresenter = new ToastPresenter(context, windowManager, accessibilityManager,
- getService(), packageName);
+ IAccessibilityManager accessibilityManager = IAccessibilityManager.Stub.asInterface(
+ ServiceManager.getService(Context.ACCESSIBILITY_SERVICE));
+ mPresenter = new ToastPresenter(context, accessibilityManager, getService(),
+ packageName);
mParams = mPresenter.getLayoutParams();
mPackageName = packageName;
mToken = token;
diff --git a/core/java/android/widget/ToastPresenter.java b/core/java/android/widget/ToastPresenter.java
index e9d4aa668891..2679c69be4f6 100644
--- a/core/java/android/widget/ToastPresenter.java
+++ b/core/java/android/widget/ToastPresenter.java
@@ -27,6 +27,7 @@ import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.os.IBinder;
import android.os.RemoteException;
+import android.os.UserHandle;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
@@ -34,8 +35,10 @@ import android.view.View;
import android.view.WindowManager;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
+import android.view.accessibility.IAccessibilityManager;
import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
/**
@@ -49,12 +52,14 @@ public class ToastPresenter {
private static final long SHORT_DURATION_TIMEOUT = 4000;
private static final long LONG_DURATION_TIMEOUT = 7000;
+ @VisibleForTesting
+ public static final int TEXT_TOAST_LAYOUT = R.layout.transient_notification;
+
/**
* Returns the default text toast view for message {@code text}.
*/
public static View getTextToastView(Context context, CharSequence text) {
- View view = LayoutInflater.from(context).inflate(
- R.layout.transient_notification, null);
+ View view = LayoutInflater.from(context).inflate(TEXT_TOAST_LAYOUT, null);
TextView textView = view.findViewById(com.android.internal.R.id.message);
textView.setText(text);
return view;
@@ -70,15 +75,23 @@ public class ToastPresenter {
@Nullable private View mView;
@Nullable private IBinder mToken;
- public ToastPresenter(Context context, WindowManager windowManager,
- AccessibilityManager accessibilityManager,
+ public ToastPresenter(Context context, IAccessibilityManager accessibilityManager,
INotificationManager notificationManager, String packageName) {
mContext = context;
mResources = context.getResources();
- mWindowManager = windowManager;
- mAccessibilityManager = accessibilityManager;
+ mWindowManager = context.getSystemService(WindowManager.class);
mNotificationManager = notificationManager;
mPackageName = packageName;
+
+ // We obtain AccessibilityManager manually via its constructor instead of using method
+ // AccessibilityManager.getInstance() for 2 reasons:
+ // 1. We want to be able to inject IAccessibilityManager in tests to verify behavior.
+ // 2. getInstance() caches the instance for the process even if we pass a different
+ // context to it. This is problematic for multi-user because callers can pass a context
+ // created via Context.createContextAsUser().
+ mAccessibilityManager = new AccessibilityManager(context, accessibilityManager,
+ UserHandle.getCallingUserId());
+
mParams = createLayoutParams();
}