[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
This commit is contained in:
BIN
res/drawable-nodpi/grass_tile.jpg
Normal file
BIN
res/drawable-nodpi/grass_tile.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 9.5 KiB |
BIN
res/drawable-nodpi/illustration_wifi.jpg
Normal file
BIN
res/drawable-nodpi/illustration_wifi.jpg
Normal file
Binary file not shown.
After Width: | Height: | Size: 57 KiB |
20
res/drawable/grass.xml
Normal file
20
res/drawable/grass.xml
Normal 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" />
|
63
res/layout-land/setup_preference.xml
Normal file
63
res/layout-land/setup_preference.xml
Normal 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>
|
||||
|
@@ -16,67 +16,11 @@
|
||||
** 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_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_height="match_parent"
|
||||
android:layout_below="@id/title_area"
|
||||
android:background="@android:color/transparent"
|
||||
android:orientation="vertical" >
|
||||
android:orientation="vertical">
|
||||
|
||||
<TextView
|
||||
android:id="@+id/wifi_required_info"
|
||||
@@ -87,71 +31,19 @@
|
||||
android:text="@string/wifi_required_info_text"
|
||||
android:visibility="gone" />
|
||||
|
||||
<ListView
|
||||
<com.android.settings.widget.StickyHeaderListView
|
||||
android:id="@android:id/list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="0px"
|
||||
android:layout_height="0dp"
|
||||
android:layout_weight="1"
|
||||
android:cacheColorHint="@android:color/transparent"
|
||||
android:clipToPadding="false"
|
||||
android:drawSelectorOnTop="false"
|
||||
android:paddingTop="0dip"
|
||||
android:headerDividersEnabled="false"
|
||||
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>
|
||||
|
32
res/layout/setup_wifi_add_network.xml
Normal file
32
res/layout/setup_wifi_add_network.xml
Normal 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>
|
35
res/layout/setup_wizard_header.xml
Normal file
35
res/layout/setup_wizard_header.xml
Normal 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>
|
@@ -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>
|
||||
|
||||
|
@@ -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>
|
||||
|
@@ -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>
|
||||
|
@@ -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]-->
|
||||
|
@@ -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">
|
||||
|
@@ -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">
|
||||
|
@@ -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);
|
||||
}
|
||||
}
|
135
src/com/android/settings/widget/SetupWizardHeader.java
Normal file
135
src/com/android/settings/widget/SetupWizardHeader.java
Normal 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);
|
||||
}
|
||||
}
|
||||
|
139
src/com/android/settings/widget/StickyHeaderListView.java
Normal file
139
src/com/android/settings/widget/StickyHeaderListView.java
Normal 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;
|
||||
}
|
||||
}
|
@@ -34,8 +34,10 @@ import android.view.View;
|
||||
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 @@ public class WifiSettingsForSetupWizard extends WifiSettings {
|
||||
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 @@ 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();
|
||||
if (intent.getBooleanExtra(EXTRA_SHOW_WIFI_REQUIRED_INFO, false)) {
|
||||
@@ -206,5 +194,4 @@ public class WifiSettingsForSetupWizard extends WifiSettings {
|
||||
.setShowAsAction(MenuItem.SHOW_AS_ACTION_ALWAYS);
|
||||
ta.recycle();
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user