[WifiSetup] L layout update
Changed the layout based on the new design mocks. Copied over
StickyHeaderListView and SetupWizardHeader. Currently using the
generic illustration but will update to Wifi setup specific version
once we get them.
Change-Id: I22bdef8c9860d419be55938e1e4a6a682db5b7e8
diff --git a/res/drawable-nodpi/grass_tile.jpg b/res/drawable-nodpi/grass_tile.jpg
new file mode 100644
index 0000000..7aef32c
--- /dev/null
+++ b/res/drawable-nodpi/grass_tile.jpg
Binary files differ
diff --git a/res/drawable-nodpi/illustration_wifi.jpg b/res/drawable-nodpi/illustration_wifi.jpg
new file mode 100644
index 0000000..0c03199
--- /dev/null
+++ b/res/drawable-nodpi/illustration_wifi.jpg
Binary files differ
diff --git a/res/drawable/grass.xml b/res/drawable/grass.xml
new file mode 100644
index 0000000..2fb5bd9
--- /dev/null
+++ b/res/drawable/grass.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 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.
+-->
+
+<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
+ android:src="@drawable/grass_tile"
+ android:tileMode="repeat" />
diff --git a/res/layout-land/setup_preference.xml b/res/layout-land/setup_preference.xml
new file mode 100644
index 0000000..e79f5c1
--- /dev/null
+++ b/res/layout-land/setup_preference.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (c) 2014 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/fragment"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:orientation="vertical">
+
+ <FrameLayout
+ android:id="@+id/title_area"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/grass">
+
+ <TextView
+ android:id="@+id/title"
+ style="@style/SetupTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/wifi_setup_wizard_title" />
+ </FrameLayout>
+
+ <TextView
+ android:id="@+id/wifi_required_info"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="6dip"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/wifi_required_info_text"
+ android:visibility="gone" />
+
+ <ListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
+ android:layout_weight="1"
+ android:cacheColorHint="@android:color/transparent"
+ android:clipToPadding="false"
+ android:drawSelectorOnTop="false"
+ android:headerDividersEnabled="false"
+ android:scrollbarAlwaysDrawVerticalTrack="true" />
+
+ <fragment android:name="com.android.setupwizard.navigationbar.SetupWizardNavBar"
+ android:id="@+id/navigation_bar"
+ style="@style/setup_wizard_navbar_style" />
+
+</LinearLayout>
+
diff --git a/res/layout/setup_preference.xml b/res/layout/setup_preference.xml
index c5d686f..46829c0 100644
--- a/res/layout/setup_preference.xml
+++ b/res/layout/setup_preference.xml
@@ -16,142 +16,34 @@
** limitations under the License.
*/
-->
-<LinearLayout
- xmlns:android="http://schemas.android.com/apk/res/android"
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment"
- android:orientation="vertical"
+ android:layout_width="match_parent"
android:layout_height="match_parent"
- android:layout_width="match_parent">
- <view
- class="com.android.settings.widget.ProportionalOuterFrame"
+ android:orientation="vertical">
+
+ <TextView
+ android:id="@+id/wifi_required_info"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="6dip"
+ android:textAppearance="?android:attr/textAppearanceMedium"
+ android:text="@string/wifi_required_info_text"
+ android:visibility="gone" />
+
+ <com.android.settings.widget.StickyHeaderListView
+ android:id="@android:id/list"
+ android:layout_width="match_parent"
+ android:layout_height="0dp"
android:layout_weight="1"
- android:layout_height="match_parent"
- android:layout_width="match_parent">
+ android:cacheColorHint="@android:color/transparent"
+ android:clipToPadding="false"
+ android:drawSelectorOnTop="false"
+ android:headerDividersEnabled="false"
+ android:scrollbarAlwaysDrawVerticalTrack="true" />
- <RelativeLayout
- android:id="@+id/title_area"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_alignParentTop="true"
- android:gravity="bottom">
-
- <LinearLayout
- android:id="@+id/title_bar"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:gravity="bottom"
- android:orientation="horizontal">
- <TextView
- android:id="@+id/title"
- android:layout_width="0dip"
- android:layout_height="wrap_content"
- android:layout_weight="1.0"
- style="@style/SetupTitle"
- android:text="@string/wifi_setup_wizard_title"
- android:gravity="bottom" />
-
- <ImageButton
- android:id="@+id/more"
- android:layout_width="@dimen/setup_button_size"
- android:layout_height="@dimen/setup_button_size"
- android:layout_marginStart="8dip"
- android:layout_marginEnd="8dip"
- android:layout_marginBottom="8dip"
- android:src="?attr/ic_menu_moreoverflow"
- android:background="?android:attr/actionBarItemBackground"
- android:contentDescription="@string/wifi_menu_more_options" />
-
- </LinearLayout>
-
- <!-- Divider -->
- <View
- android:id="@+id/top_divider"
- style="@style/TopDivider"
- android:layout_below="@id/title_bar" />
-
- </RelativeLayout>
-
- <LinearLayout
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- android:layout_below="@id/title_area"
- android:background="@android:color/transparent"
- android:orientation="vertical" >
-
- <TextView
- android:id="@+id/wifi_required_info"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="6dip"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/wifi_required_info_text"
- android:visibility="gone" />
-
- <ListView
- android:id="@android:id/list"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:cacheColorHint="@android:color/transparent"
- android:clipToPadding="false"
- android:drawSelectorOnTop="false"
- android:paddingTop="0dip"
- android:scrollbarAlwaysDrawVerticalTrack="true" />
-
- <TextView
- android:id="@android:id/empty"
- android:layout_width="match_parent"
- android:layout_height="0px"
- android:layout_weight="1"
- android:gravity="center"
- android:visibility="gone" />
-
- <ImageView
- android:id="@+id/divider"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/setup_item_margin"
- android:background="@*android:drawable/list_divider_holo_dark" />
-
- <LinearLayout
- android:id="@+id/other_network"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:layout_marginBottom="@dimen/setup_item_margin"
- android:background="?android:attr/selectableItemBackground"
- android:gravity="center_vertical"
- android:minHeight="?android:attr/listPreferredItemHeight"
- android:paddingEnd="?android:attr/scrollbarSize" >
-
- <ImageView
- android:id="@+id/add_icon"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:src="?attr/ic_menu_add" />
-
- <TextView
- android:id="@+id/other"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_marginBottom="6dip"
- android:layout_marginStart="15dip"
- android:layout_marginEnd="6dip"
- android:layout_marginTop="6dip"
- android:layout_weight="1"
- android:ellipsize="marquee"
- android:fadingEdge="horizontal"
- android:singleLine="true"
- android:textAppearance="?android:attr/textAppearanceMedium"
- android:text="@string/wifi_other_network" />
-
- </LinearLayout>
-
- </LinearLayout>
- </view>
<fragment android:name="com.android.setupwizard.navigationbar.SetupWizardNavBar"
android:id="@+id/navigation_bar"
- style="@style/setup_wizard_navbar_style"
- android:layout_weight="0"
- />
+ style="@style/setup_wizard_navbar_style" />
+
</LinearLayout>
diff --git a/res/layout/setup_wifi_add_network.xml b/res/layout/setup_wifi_add_network.xml
new file mode 100644
index 0000000..c62f983
--- /dev/null
+++ b/res/layout/setup_wifi_add_network.xml
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 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.
+-->
+
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/other_network"
+ android:layout_width="match_parent"
+ android:layout_height="@dimen/setup_add_network_item_height"
+ android:background="?android:attr/selectableItemBackground"
+ android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
+ android:paddingStart="?android:attr/listPreferredItemPaddingStart" >
+
+ <TextView
+ style="@style/SetupAddWifiNetwork"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:text="@string/wifi_other_network" />
+
+</LinearLayout>
diff --git a/res/layout/setup_wizard_header.xml b/res/layout/setup_wizard_header.xml
new file mode 100644
index 0000000..e2e2b0e
--- /dev/null
+++ b/res/layout/setup_wizard_header.xml
@@ -0,0 +1,35 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2014 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.
+-->
+
+<com.android.settings.widget.SetupWizardHeader
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/title_area"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:background="@drawable/grass"
+ android:foreground="@drawable/illustration_wifi"
+ android:tag="stickyContainer">
+
+ <TextView
+ android:id="@+id/title"
+ style="@style/SetupTitle"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:tag="sticky"
+ android:text="@string/wifi_setup_wizard_title"/>
+
+</com.android.settings.widget.SetupWizardHeader>
diff --git a/res/values-sw600dp/dimens.xml b/res/values-sw600dp/dimens.xml
index ffd6ac0..d35d973 100755
--- a/res/values-sw600dp/dimens.xml
+++ b/res/values-sw600dp/dimens.xml
@@ -24,12 +24,7 @@
<dimen name="content_margin_left">16dip</dimen>
<dimen name="description_margin_top">26dip</dimen>
<dimen name="crypt_clock_size">120sp</dimen>
- <dimen name="setup_title_size">60dp</dimen>
- <item type="dimen" name="setup_title_height">20%</item>
- <item type="dimen" name="setup_border_width">10%</item>
- <dimen name="setup_margin_bottom">0dip</dimen>
- <dimen name="setup_button_size">48dip</dimen>
- <dimen name="setup_item_margin">32dip</dimen>
+ <dimen name="setup_title_size">24sp</dimen>
<dimen name="appwidget_min_width">325dip</dimen>
<dimen name="appwidget_min_height">50dip</dimen>
diff --git a/res/values/colors.xml b/res/values/colors.xml
index ed1b3d3..0b3ea39 100644
--- a/res/values/colors.xml
+++ b/res/values/colors.xml
@@ -39,6 +39,7 @@
<color name="title_color">@android:color/holo_blue_light</color>
<color name="setup_divider_color_dark">#33ffffff</color>
<color name="setup_divider_color_light">#33000000</color>
+ <color name="setup_add_wifi_network_text_color">#ff009587</color>
<color name="circle_avatar_frame_color">#ffffffff</color>
<color name="circle_avatar_frame_shadow_color">#80000000</color>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index 992e57f..969f575 100755
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -38,12 +38,17 @@
<dimen name="crypt_clock_size">100sp</dimen>
- <item type="dimen" name="setup_title_height">15%</item>
- <item type="dimen" name="setup_border_width">5%</item>
<dimen name="setup_margin_bottom">0dip</dimen>
- <dimen name="setup_title_size">25dp</dimen>
- <dimen name="setup_button_size">32dip</dimen>
- <dimen name="setup_item_margin">16dip</dimen>
+ <dimen name="setup_title_size">24sp</dimen>
+ <dimen name="setup_title_margin_bottom">16dp</dimen>
+ <!-- This is the extra spacing required to make the leading exactly 32sp -->
+ <dimen name="setup_title_line_spacing_extra">3.67sp</dimen>
+ <dimen name="setup_title_padding_bottom">2dp</dimen>
+ <dimen name="setup_title_padding_top">16dp</dimen>
+ <!-- Size of padding to give in the wifi list when there is no icon -->
+ <dimen name="setup_list_no_icon_padding">56dp</dimen>
+ <dimen name="setup_add_network_item_height">56dp</dimen>
+ <dimen name="setup_wizard_margin_sides">40dp</dimen>
<dimen name="divider_height">3dip</dimen>
<dimen name="divider_margin_top">6dip</dimen>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index bf975e2..d4ee72f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -1372,7 +1372,7 @@
<!-- Wifi Settings. text displayed when user has restriction DISALLOW_CONFIG_WIFI [CHAR LIMIT=NONE]-->
<string name="wifi_empty_list_user_restricted">You don\'t have permission to change the Wi\u2011Fi network.</string>
<!-- Wi-Fi settings. title for setup other network button [CHAR LIMIT=35]-->
- <string name="wifi_other_network">Other network\u2026</string>
+ <string name="wifi_other_network">Add another network</string>
<!-- Wi-Fi settings. content description for more button [CHAR LIMIT=50]-->
<string name="wifi_more">More</string>
<!-- Wi-Fi settings. wps menu title [CHAR LIMIT=25]-->
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 0f7e652..cea615e 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -152,11 +152,26 @@
</style>
<style name="SetupTitle">
- <item name="android:fontFamily">sans-serif-light</item>
- <item name="android:textSize">@dimen/setup_title_size</item>
- <item name="android:textColor">@color/title_color</item>
+ <item name="android:layout_marginBottom">@dimen/setup_title_margin_bottom</item>
+ <item name="android:layout_marginEnd">@dimen/setup_wizard_margin_sides</item>
+ <item name="android:layout_marginStart">@dimen/setup_wizard_margin_sides</item>
<item name="android:clickable">false</item>
+ <item name="android:fontFamily">sans-serif</item>
+ <item name="android:lineSpacingExtra">@dimen/setup_title_line_spacing_extra</item>
<item name="android:longClickable">false</item>
+ <item name="android:textColor">@android:color/white</item>
+ <item name="android:textSize">@dimen/setup_title_size</item>
+ <item name="android:paddingBottom">@dimen/setup_title_padding_bottom</item>
+ <item name="android:paddingTop">@dimen/setup_title_padding_top</item>
+ </style>
+
+ <style name="SetupAddWifiNetwork">
+ <item name="android:fontFamily">sans-serif-medium</item>
+ <item name="android:gravity">start|center_vertical</item>
+ <item name="android:paddingStart">@dimen/setup_list_no_icon_padding</item>
+ <item name="android:textAllCaps">true</item>
+ <item name="android:textAppearance">@android:style/TextAppearance.Small</item>
+ <item name="android:textColor">@color/setup_add_wifi_network_text_color</item>
</style>
<style name="wifi_item">
diff --git a/res/values/themes.xml b/res/values/themes.xml
index 3583f84..4e80612 100644
--- a/res/values/themes.xml
+++ b/res/values/themes.xml
@@ -22,29 +22,35 @@
<attr name="wifi_signal" format="reference" />
<style name="SetupWizardWifiTheme" parent="android:Theme.Material.NoActionBar">
+ <item name="android:alertDialogTheme">@style/Theme.WifiDialog</item>
+ <item name="android:listPreferredItemPaddingEnd">@dimen/setup_wizard_margin_sides</item>
+ <item name="android:listPreferredItemPaddingStart">@dimen/setup_wizard_margin_sides</item>
+ <item name="android:windowBackground">?android:attr/colorBackground</item>
<item name="android:windowSoftInputMode">adjustPan</item>
<item name="@*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
- <item name="android:alertDialogTheme">@style/Theme.WifiDialog</item>
<item name="ic_menu_add">@drawable/ic_menu_add_dark</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_dark</item>
<item name="setup_divider_color">@color/setup_divider_color_dark</item>
- <item name="wifi_signal">@drawable/wifi_signal_dark</item>
<item name="switchBarMarginStart">0dip</item>
<item name="switchBarMarginEnd">0dip</item>
+ <item name="wifi_signal">@drawable/wifi_signal_dark</item>
</style>
<style name="SetupWizardWifiTheme.Light" parent="android:Theme.Material.Light.NoActionBar">
+ <item name="android:alertDialogTheme">@style/Theme.Light.WifiDialog</item>
+ <item name="android:listPreferredItemPaddingEnd">@dimen/setup_wizard_margin_sides</item>
+ <item name="android:listPreferredItemPaddingStart">@dimen/setup_wizard_margin_sides</item>
+ <item name="android:windowBackground">?android:attr/colorBackground</item>
<item name="android:windowSoftInputMode">adjustPan</item>
<item name="@*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</item>
- <item name="android:alertDialogTheme">@style/Theme.Light.WifiDialog</item>
<item name="ic_menu_add">@drawable/ic_menu_add_light</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_light</item>
<item name="setup_divider_color">@color/setup_divider_color_light</item>
- <item name="wifi_signal">@drawable/wifi_signal_light</item>
<item name="switchBarMarginStart">0dip</item>
<item name="switchBarMarginEnd">0dip</item>
+ <item name="wifi_signal">@drawable/wifi_signal_light</item>
</style>
<style name="Theme.WifiDialog" parent="@*android:style/Theme.Material.Dialog.Alert">
diff --git a/src/com/android/settings/widget/ProportionalOuterFrame.java b/src/com/android/settings/widget/ProportionalOuterFrame.java
deleted file mode 100644
index d23d2c4..0000000
--- a/src/com/android/settings/widget/ProportionalOuterFrame.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/*
- * Copyright (C) 2011 Google Inc.
- *
- * 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.settings.widget;
-
-import android.content.Context;
-import android.content.res.Resources;
-import android.util.AttributeSet;
-import android.view.View;
-import android.widget.RelativeLayout;
-
-import com.android.settings.R;
-
-/**
- * Used as the outer frame of all setup wizard pages that need to adjust their margins based
- * on the total size of the available display. (e.g. side margins set to 10% of total width.)
- */
-public class ProportionalOuterFrame extends RelativeLayout {
- public ProportionalOuterFrame(Context context) {
- super(context);
- }
-
- public ProportionalOuterFrame(Context context, AttributeSet attrs) {
- super(context, attrs);
- }
-
- public ProportionalOuterFrame(Context context, AttributeSet attrs, int defStyle) {
- super(context, attrs, defStyle);
- }
-
- /**
- * Set our margins and title area height proportionally to the available display size
- */
- @Override
- protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
- final int parentWidth = MeasureSpec.getSize(widthMeasureSpec);
- final int parentHeight = MeasureSpec.getSize(heightMeasureSpec);
- final Resources res = getContext().getResources();
- final float titleHeight = res.getFraction(R.dimen.setup_title_height, 1, 1);
- final float sideMargin = res.getFraction(R.dimen.setup_border_width, 1, 1);
- final int bottom = res.getDimensionPixelSize(R.dimen.setup_margin_bottom);
- setPaddingRelative((int) (parentWidth * sideMargin), 0,
- (int) (parentWidth * sideMargin), bottom);
- final View title = findViewById(R.id.title_area);
- if (title != null) {
- title.setMinimumHeight((int) (parentHeight * titleHeight));
- }
- super.onMeasure(widthMeasureSpec, heightMeasureSpec);
- }
-}
diff --git a/src/com/android/settings/widget/SetupWizardHeader.java b/src/com/android/settings/widget/SetupWizardHeader.java
new file mode 100644
index 0000000..43c8676
--- /dev/null
+++ b/src/com/android/settings/widget/SetupWizardHeader.java
@@ -0,0 +1,135 @@
+/*
+ * Copyright (C) 2014 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.settings.widget;
+
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.graphics.Canvas;
+import android.graphics.drawable.Drawable;
+import android.util.AttributeSet;
+import android.widget.FrameLayout;
+
+/*
+ * Copied from com.google.android.setupwizard.util.SetupWizardHeader
+ */
+public class SetupWizardHeader extends FrameLayout {
+
+ // Size the baseline grid in pixels
+ private float mBaselineGridSize;
+ private Drawable mBackground;
+ private Drawable mForeground;
+ private int mForegroundHeight;
+ private float mScale = 1.0f;
+
+ public SetupWizardHeader(Context context) {
+ super(context);
+ init();
+ }
+
+ public SetupWizardHeader(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ initFromAttributes(context, attrs);
+ }
+
+ public SetupWizardHeader(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ initFromAttributes(context, attrs);
+ }
+
+ public SetupWizardHeader(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ initFromAttributes(context, attrs);
+ }
+
+ private void initFromAttributes(Context context, AttributeSet attrs) {
+ TypedArray a = context.obtainStyledAttributes(attrs,
+ new int[] { android.R.attr.foreground });
+ setForeground(a.getDrawable(0));
+ init();
+ }
+
+ protected void init() {
+ // Number of pixels of the 8dp baseline grid as defined in material design specs
+ mBaselineGridSize = getResources().getDisplayMetrics().density * 8;
+ setWillNotDraw(false);
+ }
+
+ /**
+ * The background will be drawn to fill up the rest of the view. It will also be scaled by the
+ * same amount as the foreground so their textures look the same.
+ */
+ @Override
+ public void setBackground(Drawable background) {
+ mBackground = background;
+ }
+
+ /**
+ * Sets the drawable used as the illustration. THe drawable is expected to have intrinsic
+ * width and height defined and will be scaled to fit the width of the view.
+ */
+ public void setForeground(Drawable foreground) {
+ mForeground = foreground;
+ }
+
+ @Override
+ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ int illustrationHeight = MeasureSpec.getSize(widthMeasureSpec) / 2;
+ illustrationHeight -= illustrationHeight % mBaselineGridSize;
+ setPadding(0, illustrationHeight, 0, 0);
+ super.onMeasure(widthMeasureSpec, heightMeasureSpec);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ final int layoutWidth = right - left;
+ final int layoutHeight = bottom - top;
+ if (mForeground != null) {
+ // Scale the foreground to fill the width of the view
+ mScale = layoutWidth / (float) mForeground.getIntrinsicWidth();
+ mForegroundHeight = (int) (mForeground.getIntrinsicHeight() * mScale);
+ mForeground.setBounds(0, 0, layoutWidth, mForegroundHeight);
+ }
+ if (mBackground != null) {
+ // Scale the bounds by mScale to compensate for the scale done to the canvas before
+ // drawing.
+ mBackground.setBounds(0, 0, (int) (layoutWidth / mScale),
+ (int) ((layoutHeight - mForegroundHeight) / mScale));
+ }
+ super.onLayout(changed, left, top, right, bottom);
+ }
+
+ @Override
+ public void onDraw(Canvas canvas) {
+ if (mBackground != null) {
+ // Draw the background filling parts not covered by the illustration
+ int saveCount = canvas.save();
+ canvas.translate(0, mForegroundHeight);
+ // Scale the background so its size matches the foreground
+ canvas.scale(mScale, mScale, 0, 0);
+ mBackground.draw(canvas);
+ canvas.restoreToCount(saveCount);
+ }
+ if (mForeground != null) {
+ // Draw the illustration
+ mForeground.draw(canvas);
+ }
+ super.onDraw(canvas);
+ }
+}
+
diff --git a/src/com/android/settings/widget/StickyHeaderListView.java b/src/com/android/settings/widget/StickyHeaderListView.java
new file mode 100644
index 0000000..f95f8f3
--- /dev/null
+++ b/src/com/android/settings/widget/StickyHeaderListView.java
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2014 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.settings.widget;
+
+import android.content.Context;
+import android.graphics.Canvas;
+import android.graphics.RectF;
+import android.util.AttributeSet;
+import android.util.Log;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.WindowInsets;
+import android.widget.ListView;
+
+/**
+ * This class provides sticky header functionality in a list view, to use with SetupWizardHeader.
+ * To use this, add a header tagged with "sticky", or a header tagged with "stickyContainer" and
+ * one of its child tagged as "sticky". The sticky container will be draw when the sticky element
+ * hits the top of the view.
+ *
+ * There are a few things to note:
+ * 1. The two supported scenarios are StickyHeaderListView -> Header (stickyContainer) -> sticky,
+ * and StickyHeaderListView -> Header (sticky). The arrow (->) represents parent/child
+ * relationship and must be immediate child.
+ * 2. The view does not work well with padding. b/16190933
+ * 3. If fitsSystemWindows is true, then this will offset the sticking position by the height of
+ * the system decorations at the top of the screen.
+ *
+ * @see com.google.android.setupwizard.util.SetupWizardHeader
+ * @see com.google.android.setupwizard.util.StickyHeaderScrollView
+ *
+ * Copied from com.google.android.setupwizard.util.StickyHeaderListView
+ */
+public class StickyHeaderListView extends ListView {
+
+ private View mSticky;
+ private View mStickyContainer;
+ private boolean mDrawScrollBar;
+ private int mStatusBarInset = 0;
+ private RectF mStickyRect = new RectF();
+
+ public StickyHeaderListView(Context context) {
+ super(context);
+ }
+
+ public StickyHeaderListView(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public StickyHeaderListView(Context context, AttributeSet attrs, int defStyleAttr) {
+ super(context, attrs, defStyleAttr);
+ }
+
+ public StickyHeaderListView(Context context, AttributeSet attrs, int defStyleAttr,
+ int defStyleRes) {
+ super(context, attrs, defStyleAttr, defStyleRes);
+ }
+
+ @Override
+ protected void onLayout(boolean changed, int l, int t, int r, int b) {
+ super.onLayout(changed, l, t, r, b);
+ if (mSticky == null) {
+ updateStickyView();
+ }
+ }
+
+ public void updateStickyView() {
+ mSticky = findViewWithTag("sticky");
+ mStickyContainer = findViewWithTag("stickyContainer");
+ }
+
+ @Override
+ public boolean dispatchTouchEvent(MotionEvent ev) {
+ if (mStickyRect.contains(ev.getX(), ev.getY())) {
+ ev.offsetLocation(-mStickyRect.left, -mStickyRect.top);
+ return mStickyContainer.dispatchTouchEvent(ev);
+ } else {
+ return super.dispatchTouchEvent(ev);
+ }
+ }
+
+ @Override
+ public void draw(Canvas canvas) {
+ mDrawScrollBar = false;
+ super.draw(canvas);
+ if (mSticky != null) {
+ final int saveCount = canvas.save();
+ // The view to draw when sticking to the top
+ final View drawTarget = mStickyContainer != null ? mStickyContainer : mSticky;
+ // The offset to draw the view at when sticky
+ final int drawOffset = mStickyContainer != null ? mSticky.getTop() : 0;
+ // Position of the draw target, relative to the outside of the scrollView
+ final int drawTop = drawTarget.getTop();
+ if (drawTop + drawOffset < mStatusBarInset || !drawTarget.isShown()) {
+ // ListView does not translate the canvas, so we can simply draw at the top
+ canvas.translate(0, -drawOffset + mStatusBarInset);
+ canvas.clipRect(0, 0, drawTarget.getWidth(), drawTarget.getHeight());
+ drawTarget.draw(canvas);
+ mStickyRect.set(0, -drawOffset + mStatusBarInset, drawTarget.getWidth(),
+ drawTarget.getHeight() - drawOffset + mStatusBarInset);
+ } else {
+ mStickyRect.setEmpty();
+ }
+ canvas.restoreToCount(saveCount);
+ }
+ // Draw the scrollbars last so they are on top of the header
+ mDrawScrollBar = true;
+ onDrawScrollBars(canvas);
+ }
+
+ @Override
+ protected boolean isVerticalScrollBarHidden() {
+ return super.isVerticalScrollBarHidden() || !mDrawScrollBar;
+ }
+
+ @Override
+ public WindowInsets onApplyWindowInsets(WindowInsets insets) {
+ if (getFitsSystemWindows()) {
+ mStatusBarInset = insets.getSystemWindowInsetTop();
+ insets.consumeSystemWindowInsets(false, true, false, false);
+ }
+ return insets;
+ }
+}
diff --git a/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java b/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java
index b64e781..888396d 100644
--- a/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java
+++ b/src/com/android/settings/wifi/WifiSettingsForSetupWizard.java
@@ -34,8 +34,10 @@
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.widget.ImageButton;
+import android.widget.ListView;
import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener;
+import android.widget.TextView;
import com.android.settings.R;
@@ -88,7 +90,16 @@
Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.setup_preference, container, false);
- final View other = view.findViewById(R.id.other_network);
+
+ final ListView list = (ListView) view.findViewById(android.R.id.list);
+ final View title = view.findViewById(R.id.title);
+ if (title == null) {
+ final View header = inflater.inflate(R.layout.setup_wizard_header, list, false);
+ list.addHeaderView(header);
+ }
+
+ final View other = inflater.inflate(R.layout.setup_wifi_add_network, list, false);
+ list.addFooterView(other, null, true);
other.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
@@ -97,29 +108,6 @@
}
}
});
- final ImageButton b = (ImageButton) view.findViewById(R.id.more);
- if (b != null) {
- b.setOnClickListener(new OnClickListener() {
- @Override
- public void onClick(View v) {
- if (mWifiManager.isWifiEnabled()) {
- PopupMenu pm = new PopupMenu(inflater.getContext(), b);
- pm.inflate(R.menu.wifi_setup);
- pm.setOnMenuItemClickListener(new OnMenuItemClickListener() {
- @Override
- public boolean onMenuItemClick(MenuItem item) {
- if (R.id.wifi_wps == item.getItemId()) {
- showDialog(WPS_PBC_DIALOG_ID);
- return true;
- }
- return false;
- }
- });
- pm.show();
- }
- }
- });
- }
final Intent intent = getActivity().getIntent();
if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) {
@@ -206,5 +194,4 @@
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
ta.recycle();
}
-
}