1package org.robolectric.shadows;
2
3import static android.os.Build.VERSION_CODES.M;
4import static org.robolectric.RuntimeEnvironment.getApiLevel;
5import static org.robolectric.shadow.api.Shadow.directlyOn;
6
7import android.content.Context;
8import android.graphics.drawable.Drawable;
9import android.view.Window;
10import android.widget.ProgressBar;
11import org.robolectric.annotation.Implementation;
12import org.robolectric.annotation.Implements;
13import org.robolectric.annotation.RealObject;
14import org.robolectric.util.ReflectionHelpers;
15import org.robolectric.util.ReflectionHelpers.ClassParameter;
16
17@SuppressWarnings({"UnusedDeclaration"})
18@Implements(Window.class)
19public class ShadowWindow {
20  private @RealObject Window realWindow;
21
22  protected CharSequence title = "";
23  protected Drawable backgroundDrawable;
24  private int flags;
25  private int softInputMode;
26
27  public static Window create(Context context) throws Exception {
28    String className = getApiLevel() >= M
29        ? "com.android.internal.policy.PhoneWindow"
30        : "com.android.internal.policy.impl.PhoneWindow";
31    Class<? extends Window> phoneWindowClass =
32        (Class<? extends Window>) Window.class.getClassLoader().loadClass(className);
33    return ReflectionHelpers.callConstructor(phoneWindowClass, ClassParameter.from(Context.class, context));
34  }
35
36  @Implementation
37  public void setFlags(int flags, int mask) {
38    this.flags = (this.flags & ~mask) | (flags & mask);
39    directlyOn(realWindow, Window.class, "setFlags", ClassParameter.from(int.class, flags), ClassParameter.from(int.class, mask));
40  }
41
42  @Implementation
43  public void setSoftInputMode(int softInputMode) {
44    this.softInputMode = softInputMode;
45    directlyOn(realWindow, Window.class, "setSoftInputMode", ClassParameter.from(int.class, softInputMode));
46  }
47
48  public boolean getFlag(int flag) {
49    return (flags & flag) == flag;
50  }
51
52  public CharSequence getTitle() {
53    return title;
54  }
55
56  public int getSoftInputMode() {
57    return softInputMode;
58  }
59
60  public Drawable getBackgroundDrawable() {
61    return backgroundDrawable;
62  }
63
64  public ProgressBar getProgressBar() {
65    return (ProgressBar) directlyOn(realWindow, realWindow.getClass().getName(), "getHorizontalProgressBar", ClassParameter.from(boolean.class, false));
66  }
67
68  public ProgressBar getIndeterminateProgressBar() {
69    return (ProgressBar) directlyOn(realWindow, realWindow.getClass().getName(), "getCircularProgressBar", ClassParameter.from(boolean.class, false));
70  }
71}
72