Merge "[WifiSetup] L layout update"

This commit is contained in:
Maurice Lam
2014-07-10 18:22:19 +00:00
committed by Android (Google) Code Review
17 changed files with 501 additions and 239 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

20
res/drawable/grass.xml Normal file
View File

@@ -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" />

View File

@@ -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>

View File

@@ -16,67 +16,11 @@
** limitations under the License. ** limitations under the License.
*/ */
--> -->
<LinearLayout <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/fragment" android:id="@+id/fragment"
android:orientation="vertical"
android:layout_height="match_parent"
android:layout_width="match_parent">
<view
class="com.android.settings.widget.ProportionalOuterFrame"
android:layout_weight="1"
android:layout_height="match_parent"
android:layout_width="match_parent">
<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_width="match_parent"
android:layout_height="match_parent" android:layout_height="match_parent"
android:layout_below="@id/title_area" android:orientation="vertical">
android:background="@android:color/transparent"
android:orientation="vertical" >
<TextView <TextView
android:id="@+id/wifi_required_info" android:id="@+id/wifi_required_info"
@@ -87,71 +31,19 @@
android:text="@string/wifi_required_info_text" android:text="@string/wifi_required_info_text"
android:visibility="gone" /> android:visibility="gone" />
<ListView <com.android.settings.widget.StickyHeaderListView
android:id="@android:id/list" android:id="@android:id/list"
android:layout_width="match_parent" android:layout_width="match_parent"
android:layout_height="0px" android:layout_height="0dp"
android:layout_weight="1" android:layout_weight="1"
android:cacheColorHint="@android:color/transparent" android:cacheColorHint="@android:color/transparent"
android:clipToPadding="false" android:clipToPadding="false"
android:drawSelectorOnTop="false" android:drawSelectorOnTop="false"
android:paddingTop="0dip" android:headerDividersEnabled="false"
android:scrollbarAlwaysDrawVerticalTrack="true" /> 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" <fragment android:name="com.android.setupwizard.navigationbar.SetupWizardNavBar"
android:id="@+id/navigation_bar" android:id="@+id/navigation_bar"
style="@style/setup_wizard_navbar_style" style="@style/setup_wizard_navbar_style" />
android:layout_weight="0"
/>
</LinearLayout> </LinearLayout>

View File

@@ -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>

View File

@@ -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>

View File

@@ -24,12 +24,7 @@
<dimen name="content_margin_left">16dip</dimen> <dimen name="content_margin_left">16dip</dimen>
<dimen name="description_margin_top">26dip</dimen> <dimen name="description_margin_top">26dip</dimen>
<dimen name="crypt_clock_size">120sp</dimen> <dimen name="crypt_clock_size">120sp</dimen>
<dimen name="setup_title_size">60dp</dimen> <dimen name="setup_title_size">24sp</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="appwidget_min_width">325dip</dimen> <dimen name="appwidget_min_width">325dip</dimen>
<dimen name="appwidget_min_height">50dip</dimen> <dimen name="appwidget_min_height">50dip</dimen>

View File

@@ -39,6 +39,7 @@
<color name="title_color">@android:color/holo_blue_light</color> <color name="title_color">@android:color/holo_blue_light</color>
<color name="setup_divider_color_dark">#33ffffff</color> <color name="setup_divider_color_dark">#33ffffff</color>
<color name="setup_divider_color_light">#33000000</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_color">#ffffffff</color>
<color name="circle_avatar_frame_shadow_color">#80000000</color> <color name="circle_avatar_frame_shadow_color">#80000000</color>

View File

@@ -38,12 +38,17 @@
<dimen name="crypt_clock_size">100sp</dimen> <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_margin_bottom">0dip</dimen>
<dimen name="setup_title_size">25dp</dimen> <dimen name="setup_title_size">24sp</dimen>
<dimen name="setup_button_size">32dip</dimen> <dimen name="setup_title_margin_bottom">16dp</dimen>
<dimen name="setup_item_margin">16dip</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_height">3dip</dimen>
<dimen name="divider_margin_top">6dip</dimen> <dimen name="divider_margin_top">6dip</dimen>

View File

@@ -1375,7 +1375,7 @@
<!-- Wifi Settings. text displayed when user has restriction DISALLOW_CONFIG_WIFI [CHAR LIMIT=NONE]--> <!-- 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> <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]--> <!-- 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]--> <!-- Wi-Fi settings. content description for more button [CHAR LIMIT=50]-->
<string name="wifi_more">More</string> <string name="wifi_more">More</string>
<!-- Wi-Fi settings. wps menu title [CHAR LIMIT=25]--> <!-- Wi-Fi settings. wps menu title [CHAR LIMIT=25]-->

View File

@@ -152,11 +152,26 @@
</style> </style>
<style name="SetupTitle"> <style name="SetupTitle">
<item name="android:fontFamily">sans-serif-light</item> <item name="android:layout_marginBottom">@dimen/setup_title_margin_bottom</item>
<item name="android:textSize">@dimen/setup_title_size</item> <item name="android:layout_marginEnd">@dimen/setup_wizard_margin_sides</item>
<item name="android:textColor">@color/title_color</item> <item name="android:layout_marginStart">@dimen/setup_wizard_margin_sides</item>
<item name="android:clickable">false</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: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>
<style name="wifi_item"> <style name="wifi_item">

View File

@@ -22,29 +22,35 @@
<attr name="wifi_signal" format="reference" /> <attr name="wifi_signal" format="reference" />
<style name="SetupWizardWifiTheme" parent="android:Theme.Material.NoActionBar"> <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:windowSoftInputMode">adjustPan</item>
<item name="@*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</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_add">@drawable/ic_menu_add_dark</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item> <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_dark</item> <item name="ic_wps">@drawable/ic_wps_dark</item>
<item name="setup_divider_color">@color/setup_divider_color_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="switchBarMarginStart">0dip</item>
<item name="switchBarMarginEnd">0dip</item> <item name="switchBarMarginEnd">0dip</item>
<item name="wifi_signal">@drawable/wifi_signal_dark</item>
</style> </style>
<style name="SetupWizardWifiTheme.Light" parent="android:Theme.Material.Light.NoActionBar"> <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:windowSoftInputMode">adjustPan</item>
<item name="@*android:preferencePanelStyle">@*android:style/PreferencePanel.Dialog</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_add">@drawable/ic_menu_add_light</item>
<item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item> <item name="ic_menu_moreoverflow">@*android:drawable/ic_menu_moreoverflow_material</item>
<item name="ic_wps">@drawable/ic_wps_light</item> <item name="ic_wps">@drawable/ic_wps_light</item>
<item name="setup_divider_color">@color/setup_divider_color_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="switchBarMarginStart">0dip</item>
<item name="switchBarMarginEnd">0dip</item> <item name="switchBarMarginEnd">0dip</item>
<item name="wifi_signal">@drawable/wifi_signal_light</item>
</style> </style>
<style name="Theme.WifiDialog" parent="@*android:style/Theme.Material.Dialog.Alert"> <style name="Theme.WifiDialog" parent="@*android:style/Theme.Material.Dialog.Alert">

View File

@@ -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);
}
}

View File

@@ -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);
}
}

View File

@@ -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;
}
}

View File

@@ -34,8 +34,10 @@ import android.view.View;
import android.view.View.OnClickListener; import android.view.View.OnClickListener;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.ImageButton; import android.widget.ImageButton;
import android.widget.ListView;
import android.widget.PopupMenu; import android.widget.PopupMenu;
import android.widget.PopupMenu.OnMenuItemClickListener; import android.widget.PopupMenu.OnMenuItemClickListener;
import android.widget.TextView;
import com.android.settings.R; import com.android.settings.R;
@@ -88,7 +90,16 @@ public class WifiSettingsForSetupWizard extends WifiSettings {
Bundle savedInstanceState) { Bundle savedInstanceState) {
final View view = inflater.inflate(R.layout.setup_preference, container, false); 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() { other.setOnClickListener(new OnClickListener() {
@Override @Override
public void onClick(View v) { public void onClick(View v) {
@@ -97,29 +108,6 @@ public class WifiSettingsForSetupWizard extends WifiSettings {
} }
} }
}); });
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(); final Intent intent = getActivity().getIntent();
if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) { if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) {
@@ -206,5 +194,4 @@ public class WifiSettingsForSetupWizard extends WifiSettings {
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS); .setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
ta.recycle(); ta.recycle();
} }
} }