diff options
Diffstat (limited to 'src/main/java/com/xtremelabs/robolectric/tester/android/view/TestWindow.java')
-rw-r--r-- | src/main/java/com/xtremelabs/robolectric/tester/android/view/TestWindow.java | 57 |
1 files changed, 39 insertions, 18 deletions
diff --git a/src/main/java/com/xtremelabs/robolectric/tester/android/view/TestWindow.java b/src/main/java/com/xtremelabs/robolectric/tester/android/view/TestWindow.java index d222fe7e9..fa1b1a067 100644 --- a/src/main/java/com/xtremelabs/robolectric/tester/android/view/TestWindow.java +++ b/src/main/java/com/xtremelabs/robolectric/tester/android/view/TestWindow.java @@ -1,21 +1,17 @@ package com.xtremelabs.robolectric.tester.android.view; +import android.R; import android.content.Context; import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.net.Uri; import android.os.Bundle; -import android.view.InputQueue; -import android.view.KeyEvent; -import android.view.LayoutInflater; -import android.view.MotionEvent; -import android.view.SurfaceHolder; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; +import android.view.*; +import android.widget.FrameLayout; import com.xtremelabs.robolectric.Robolectric; +import static com.xtremelabs.robolectric.Robolectric.shadowOf; + public class TestWindow extends Window { public int flags; public int requestedFeatureId; @@ -23,6 +19,7 @@ public class TestWindow extends Window { public int featureDrawableResourceResId; public int softInputMode; private TestWindowManager windowManager; + private View contentView; public TestWindow(Context context) { super(context); @@ -58,15 +55,21 @@ public class TestWindow extends Window { } @Override public void setContentView(int layoutResID) { + setContentView(getLayoutInflater().inflate(layoutResID, null)); } @Override public void setContentView(View view) { + if (contentView != null) shadowOf(contentView).callOnDetachedFromWindow(); + contentView = view; + if (contentView != null) shadowOf(contentView).callOnAttachedToWindow(); } @Override public void setContentView(View view, ViewGroup.LayoutParams params) { + setContentView(view); } @Override public void addContentView(View view, ViewGroup.LayoutParams params) { + setContentView(view); } @Override public View getCurrentFocus() { @@ -74,7 +77,7 @@ public class TestWindow extends Window { } @Override public LayoutInflater getLayoutInflater() { - return null; + return LayoutInflater.from(Robolectric.application); } @Override public void setTitle(CharSequence title) { @@ -92,6 +95,10 @@ public class TestWindow extends Window { @Override public void togglePanel(int featureId, KeyEvent event) { } + @Override + public void invalidatePanelMenu(int i) { + } + @Override public boolean performPanelShortcut(int featureId, int keyCode, KeyEvent event, int flags) { return false; } @@ -145,14 +152,35 @@ public class TestWindow extends Window { return false; } + @Override + public boolean superDispatchGenericMotionEvent(MotionEvent motionEvent) { + return false; + } + @Override public View getDecorView() { - return new View(Robolectric.application); + final FrameLayout decorView = new FrameLayout(Robolectric.application); + + // On a typical Android device you can call: + // myWindow.getDecorView().findViewById(android.R.content) + final FrameLayout contentWrapper = new FrameLayout(Robolectric.application); + contentWrapper.setId(R.id.content); + + decorView.addView(contentWrapper); + if (contentView != null) { + contentWrapper.addView(contentView); + } + return decorView; } @Override public View peekDecorView() { return null; } + @Override + public View findViewById(int id) { + return getDecorView().findViewById(id); + } + @Override public Bundle saveHierarchyState() { return null; } @@ -184,14 +212,7 @@ public class TestWindow extends Window { this.softInputMode = softInputMode; } - @Override public void invalidatePanelMenu(int featureId) { - } - @Override public boolean superDispatchKeyShortcutEvent(KeyEvent event) { return false; } - - @Override public boolean superDispatchGenericMotionEvent(MotionEvent event) { - return false; - } } |