summaryrefslogtreecommitdiff
path: root/core/java/android/widget/ToastPresenter.java
diff options
context:
space:
mode:
Diffstat (limited to 'core/java/android/widget/ToastPresenter.java')
-rw-r--r--core/java/android/widget/ToastPresenter.java25
1 files changed, 19 insertions, 6 deletions
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();
}