auto import from //depot/cupcake/@135843
diff --git a/tests/FrameworkTest/src/com/android/frameworktest/listview/ListViewHeight.java b/tests/FrameworkTest/src/com/android/frameworktest/listview/ListViewHeight.java
new file mode 100644
index 0000000..17222d9
--- /dev/null
+++ b/tests/FrameworkTest/src/com/android/frameworktest/listview/ListViewHeight.java
@@ -0,0 +1,109 @@
+/*
+ * Copyright (C) 2007 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 com.android.frameworktest.listview;
+
+import android.app.Activity;
+import android.os.Bundle;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ListView;
+
+import com.android.frameworktest.R;
+
+public class ListViewHeight extends Activity {
+
+ private View mButton1;
+ private View mButton2;
+ private View mButton3;
+
+ private View mOuterLayout;
+ private ListView mInnerList;
+
+ ArrayAdapter<String> mAdapter;
+ private String[] mStrings = {
+ "Abbaye de Belloc", "Abbaye du Mont des Cats", "Abertam", "Abondance", "Ackawi" };
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ setContentView(R.layout.linear_layout_listview_height);
+
+ mButton1 = findViewById(R.id.button1);
+ mButton2 = findViewById(R.id.button2);
+ mButton3 = findViewById(R.id.button3);
+
+ mOuterLayout = findViewById(R.id.layout);
+ mInnerList = (ListView)findViewById(R.id.inner_list);
+
+ mAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,
+ mStrings);
+
+ // Clicking this button will show the list view and set it to a fixed height
+ // If you then hide the views, there is no problem.
+ mButton1.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ // set listview to fixed height
+ ViewGroup.MarginLayoutParams lp;
+ lp = (ViewGroup.MarginLayoutParams) mInnerList.getLayoutParams();
+ lp.height = 200;
+ mInnerList.setLayoutParams(lp);
+ // enable list adapter
+ mInnerList.setAdapter(mAdapter);
+ // and show it
+ mOuterLayout.setVisibility(View.VISIBLE);
+ }
+ });
+
+ // Clicking this button will show the list view and set it fill_parent height
+ // If you then hide the views, there is an NPE when calculating the ListView height.
+ mButton2.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ // set listview to fill screen
+ ViewGroup.MarginLayoutParams lp;
+ lp = (ViewGroup.MarginLayoutParams) mInnerList.getLayoutParams();
+ lp.height = lp.FILL_PARENT;
+ mInnerList.setLayoutParams(lp);
+ // enable list adapter
+ mInnerList.setAdapter(mAdapter);
+ // and show it
+ mOuterLayout.setVisibility(View.VISIBLE);
+ }
+ });
+
+ // Clicking this button will remove the list adapter and hide the outer enclosing view.
+ // We have to climb all the way to the top because the bug (not checking visibility)
+ // only occurs at the very outer loop of ViewRoot.performTraversals and in the case of
+ // an Activity, this means you have to crawl all the way out to the root view.
+ // In the search manager, it's sufficient to simply show/hide the outer search manager
+ // view to trigger the same bug.
+ mButton3.setOnClickListener(new View.OnClickListener() {
+ public void onClick(View v) {
+ mInnerList.setAdapter(null);
+ // hide listview's owner
+ // as it turns out, the owner doesn't take us high enough
+ // because our activity includes a title bar, thus another layer
+ View parent = (View) mOuterLayout.getParent(); // FrameLayout (app container)
+ View grandpa = (View) parent.getParent(); // LinearLayout (title+app)
+ View great = (View) grandpa.getParent(); // PhoneWindow.DecorView
+ great.setVisibility(View.GONE);
+ }
+ });
+ }
+
+}