Loading core/java/android/view/ViewRoot.java +7 −2 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ public final class ViewRoot extends Handler implements ViewParent, private final Surface mSurface = new Surface(); boolean mAdded; private boolean mAttached; boolean mAddedTouchMode; /*package*/ int mAddNesting; Loading Loading @@ -762,7 +763,10 @@ public final class ViewRoot extends Handler implements ViewParent, attachInfo.mKeepScreenOn = false; viewVisibilityChanged = false; mLastConfiguration.setTo(host.getResources().getConfiguration()); if (!mAttached) { host.dispatchAttachedToWindow(attachInfo, 0); mAttached = true; } //Log.i(TAG, "Screen on initialized: " + attachInfo.mKeepScreenOn); } else { Loading Loading @@ -1743,8 +1747,9 @@ public final class ViewRoot extends Handler implements ViewParent, void dispatchDetachedFromWindow() { if (Config.LOGV) Log.v(TAG, "Detaching in " + this + " of " + mSurface); if (mView != null) { if (mView != null && mAttached) { mView.dispatchDetachedFromWindow(); mAttached = false; } mView = null; Loading core/tests/coretests/AndroidManifest.xml +6 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,12 @@ <application android:theme="@style/Theme"> <uses-library android:name="android.test.runner" /> <activity android:name="android.view.ViewAttachTestActivity" android:label="View Attach Test"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" /> </intent-filter> </activity> <activity android:name="StubTestBrowserActivity" android:label="Stubbed Test Browser"> <intent-filter> <action android:name="android.intent.action.MAIN"/> Loading core/tests/coretests/res/layout/attach_view_test.xml 0 → 100644 +12 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.view.ViewAttachView android:id="@+id/view_attach_view" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"/> </LinearLayout> core/tests/coretests/src/android/view/ViewAttachTest.java 0 → 100644 +54 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import android.content.pm.ActivityInfo; import android.os.SystemClock; import android.test.ActivityInstrumentationTestCase2; public class ViewAttachTest extends ActivityInstrumentationTestCase2<ViewAttachTestActivity> { public ViewAttachTest() { super(ViewAttachTestActivity.class); } /** * Make sure that onAttachedToWindow and onDetachedToWindow is called in the * correct order The ViewAttachTestActivity contains a view that will throw * an RuntimeException if onDetachedToWindow and onAttachedToWindow is * called in the wrong order. * * 1. Initiate the activity 2. Perform a series of orientation changes to * the activity (this will force the View hierarchy to be rebuild, * generating onAttachedToWindow and onDetachedToWindow) * * Expected result: No RuntimeException is thrown from the TestView in * ViewFlipperTestActivity. * * @throws Throwable */ public void testAttached() throws Throwable { final ViewAttachTestActivity activity = getActivity(); for (int i = 0; i < 20; i++) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); SystemClock.sleep(250); activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); SystemClock.sleep(250); } } } core/tests/coretests/src/android/view/ViewAttachTestActivity.java 0 → 100644 +31 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import com.android.frameworks.coretests.R; import android.app.Activity; import android.os.Bundle; public class ViewAttachTestActivity extends Activity { public static final String TAG = "OnAttachedTest"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.attach_view_test); } } Loading
core/java/android/view/ViewRoot.java +7 −2 Original line number Diff line number Diff line Loading @@ -176,6 +176,7 @@ public final class ViewRoot extends Handler implements ViewParent, private final Surface mSurface = new Surface(); boolean mAdded; private boolean mAttached; boolean mAddedTouchMode; /*package*/ int mAddNesting; Loading Loading @@ -762,7 +763,10 @@ public final class ViewRoot extends Handler implements ViewParent, attachInfo.mKeepScreenOn = false; viewVisibilityChanged = false; mLastConfiguration.setTo(host.getResources().getConfiguration()); if (!mAttached) { host.dispatchAttachedToWindow(attachInfo, 0); mAttached = true; } //Log.i(TAG, "Screen on initialized: " + attachInfo.mKeepScreenOn); } else { Loading Loading @@ -1743,8 +1747,9 @@ public final class ViewRoot extends Handler implements ViewParent, void dispatchDetachedFromWindow() { if (Config.LOGV) Log.v(TAG, "Detaching in " + this + " of " + mSurface); if (mView != null) { if (mView != null && mAttached) { mView.dispatchDetachedFromWindow(); mAttached = false; } mView = null; Loading
core/tests/coretests/AndroidManifest.xml +6 −0 Original line number Diff line number Diff line Loading @@ -96,6 +96,12 @@ <application android:theme="@style/Theme"> <uses-library android:name="android.test.runner" /> <activity android:name="android.view.ViewAttachTestActivity" android:label="View Attach Test"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.FRAMEWORK_INSTRUMENTATION_TEST" /> </intent-filter> </activity> <activity android:name="StubTestBrowserActivity" android:label="Stubbed Test Browser"> <intent-filter> <action android:name="android.intent.action.MAIN"/> Loading
core/tests/coretests/res/layout/attach_view_test.xml 0 → 100644 +12 −0 Original line number Diff line number Diff line <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <android.view.ViewAttachView android:id="@+id/view_attach_view" android:layout_width="match_parent" android:layout_height="match_parent" android:keepScreenOn="true"/> </LinearLayout>
core/tests/coretests/src/android/view/ViewAttachTest.java 0 → 100644 +54 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import android.content.pm.ActivityInfo; import android.os.SystemClock; import android.test.ActivityInstrumentationTestCase2; public class ViewAttachTest extends ActivityInstrumentationTestCase2<ViewAttachTestActivity> { public ViewAttachTest() { super(ViewAttachTestActivity.class); } /** * Make sure that onAttachedToWindow and onDetachedToWindow is called in the * correct order The ViewAttachTestActivity contains a view that will throw * an RuntimeException if onDetachedToWindow and onAttachedToWindow is * called in the wrong order. * * 1. Initiate the activity 2. Perform a series of orientation changes to * the activity (this will force the View hierarchy to be rebuild, * generating onAttachedToWindow and onDetachedToWindow) * * Expected result: No RuntimeException is thrown from the TestView in * ViewFlipperTestActivity. * * @throws Throwable */ public void testAttached() throws Throwable { final ViewAttachTestActivity activity = getActivity(); for (int i = 0; i < 20; i++) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); SystemClock.sleep(250); activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); SystemClock.sleep(250); } } }
core/tests/coretests/src/android/view/ViewAttachTestActivity.java 0 → 100644 +31 −0 Original line number Diff line number Diff line /* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.view; import com.android.frameworks.coretests.R; import android.app.Activity; import android.os.Bundle; public class ViewAttachTestActivity extends Activity { public static final String TAG = "OnAttachedTest"; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.attach_view_test); } }