diff options
178 files changed, 1068 insertions, 550 deletions
diff --git a/api/current.xml b/api/current.xml index f80701b0385a..8b0c5559cb33 100644 --- a/api/current.xml +++ b/api/current.xml @@ -1475,7 +1475,7 @@ type="int" transient="false" volatile="false" - value="17432591" + value="17432589" static="true" final="true" deprecated="not deprecated" @@ -1508,29 +1508,7 @@ type="int" transient="false" volatile="false" - value="17432593" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="animator_fade_in" - type="int" - transient="false" - volatile="false" - value="17432589" - static="true" - final="true" - deprecated="not deprecated" - visibility="public" -> -</field> -<field name="animator_fade_out" - type="int" - transient="false" - volatile="false" - value="17432590" + value="17432591" static="true" final="true" deprecated="not deprecated" @@ -1585,7 +1563,7 @@ type="int" transient="false" volatile="false" - value="17432592" + value="17432590" static="true" final="true" deprecated="not deprecated" @@ -1607,7 +1585,7 @@ type="int" transient="false" volatile="false" - value="17432594" + value="17432592" static="true" final="true" deprecated="not deprecated" diff --git a/core/java/android/webkit/ZoomManager.java b/core/java/android/webkit/ZoomManager.java index 2fd5bb11b864..b4a33de232c3 100644 --- a/core/java/android/webkit/ZoomManager.java +++ b/core/java/android/webkit/ZoomManager.java @@ -150,6 +150,12 @@ class ZoomManager { private static float MINIMUM_SCALE_INCREMENT = 0.01f; /* + * The touch points could be changed even the fingers stop moving. + * We use the following to filter out the zooming jitters. + */ + private static float MINIMUM_SCALE_WITHOUT_JITTER = 0.05f; + + /* * The following member variables are only to be used for animating zoom. If * mZoomScale is non-zero then we are in the middle of a zoom animation. The * other variables are used as a cache (e.g. inverse) or as a way to store @@ -684,6 +690,10 @@ class ZoomManager { } else { scale = Math.max(scale, mActualScale * 0.8f); } + // if the scale change is too small, regard it as jitter and skip it. + if (Math.abs(scale - mActualScale) < MINIMUM_SCALE_WITHOUT_JITTER) { + return false; + } setZoomCenter(detector.getFocusX(), detector.getFocusY()); setZoomScale(scale, false); mWebView.invalidate(); diff --git a/core/java/android/widget/FastScroller.java b/core/java/android/widget/FastScroller.java index c06fe64538fa..d4ef044c6a18 100644 --- a/core/java/android/widget/FastScroller.java +++ b/core/java/android/widget/FastScroller.java @@ -606,7 +606,7 @@ class FastScroller { final int positionsInSection = nextSectionPos - sectionPos; final View child = mList.getChildAt(0); - final float incrementalPos = firstVisibleItem + + final float incrementalPos = child == null ? 0 : firstVisibleItem + (float) (mList.getPaddingTop() - child.getTop()) / child.getHeight(); final float posWithinSection = (incrementalPos - sectionPos) / positionsInSection; int result = (int) ((section + posWithinSection) / sectionCount * trackHeight); diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java index e38432071c67..a139d31faed3 100644 --- a/core/java/com/android/internal/app/AlertController.java +++ b/core/java/com/android/internal/app/AlertController.java @@ -412,9 +412,17 @@ public class AlertController { /* Only display the divider if we have a title and a * custom view or a message. */ - if (hasTitle && ((mMessage != null) || (mView != null))) { - View divider = mWindow.findViewById(R.id.titleDivider); - divider.setVisibility(View.VISIBLE); + if (hasTitle) { + View divider = null; + if (mMessage != null || mView != null || mListView != null) { + divider = mWindow.findViewById(R.id.titleDivider); + } else { + divider = mWindow.findViewById(R.id.titleDividerTop); + } + + if (divider != null) { + divider.setVisibility(View.VISIBLE); + } } setBackground(topPanel, contentPanel, customPanel, hasButtons, a, hasTitle, buttonPanel); diff --git a/core/res/res/anim/animator_fade_in.xml b/core/res/res/anim/animator_fade_in.xml deleted file mode 100644 index cff98cf1dfb9..000000000000 --- a/core/res/res/anim/animator_fade_in.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> - -<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@interpolator/accelerate_quad" - android:valueFrom="0" - android:valueTo="1" - android:propertyName="alpha" - android:duration="@android:integer/config_mediumAnimTime" -/> diff --git a/core/res/res/anim/animator_fade_out.xml b/core/res/res/anim/animator_fade_out.xml deleted file mode 100644 index 6a3d5eee4691..000000000000 --- a/core/res/res/anim/animator_fade_out.xml +++ /dev/null @@ -1,26 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> - -<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@interpolator/accelerate_quad" - android:valueFrom="1.0" - android:valueTo="0.0" - android:propertyName="alpha" - android:duration="@android:integer/config_mediumAnimTime" -/> diff --git a/core/res/res/anim/fragment_close_enter.xml b/core/res/res/anim/fragment_close_enter.xml deleted file mode 100644 index c0abbc599e54..000000000000 --- a/core/res/res/anim/fragment_close_enter.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="normal"> - <objectAnimator - android:interpolator="@interpolator/decelerate_quint" - android:valueFrom="0.975" android:valueTo="1.0" - android:valueType="floatType" - android:propertyName="scaleY" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/decelerate_quint" - android:valueFrom="0.975" android:valueTo="1.0" - android:valueType="floatType" - android:propertyName="scaleX" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="0.0" android:valueTo="1.0" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityDefaultDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/anim/fragment_close_exit.xml b/core/res/res/anim/fragment_close_exit.xml deleted file mode 100644 index 9a5708c578c1..000000000000 --- a/core/res/res/anim/fragment_close_exit.xml +++ /dev/null @@ -1,39 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="top"> - <objectAnimator - android:interpolator="@interpolator/decelerate_quint" - android:valueFrom="1.0" android:valueTo="1.075" - android:valueType="floatType" - android:propertyName="scaleY" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/decelerate_quint" - android:valueFrom="1.0" android:valueTo="1.075" - android:valueType="floatType" - android:propertyName="scaleX" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="1.0" android:valueTo="0.0" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityDefaultDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/anim/fragment_next_enter.xml b/core/res/res/anim/fragment_next_enter.xml deleted file mode 100644 index 13b15f318e46..000000000000 --- a/core/res/res/anim/fragment_next_enter.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="top"> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityDefaultDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/anim/fragment_next_exit.xml b/core/res/res/anim/fragment_next_exit.xml deleted file mode 100644 index 503b7ad2338a..000000000000 --- a/core/res/res/anim/fragment_next_exit.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="normal"> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityShortDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/anim/fragment_open_enter.xml b/core/res/res/anim/fragment_open_enter.xml deleted file mode 100644 index 6b16cb43400c..000000000000 --- a/core/res/res/anim/fragment_open_enter.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android"> - <objectAnimator - android:interpolator="@interpolator/decelerate_quint" - android:valueFrom="1.125" android:valueTo="1.0" - android:valueType="floatType" - android:propertyName="scaleY" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/decelerate_quint" - android:valueFrom="1.125" android:valueTo="1.0" - android:valueType="floatType" - android:propertyName="scaleX" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="0.0" android:valueTo="1.0" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityDefaultDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/anim/fragment_open_exit.xml b/core/res/res/anim/fragment_open_exit.xml deleted file mode 100644 index d77ee8ee5efb..000000000000 --- a/core/res/res/anim/fragment_open_exit.xml +++ /dev/null @@ -1,38 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android"> - <objectAnimator - android:interpolator="@interpolator/linear" - android:valueFrom="1.0" android:valueTo="0.975" - android:valueType="floatType" - android:propertyName="scaleY" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/linear" - android:valueFrom="1.0" android:valueTo="0.975" - android:valueType="floatType" - android:propertyName="scaleX" - android:duration="@android:integer/config_activityDefaultDur"/> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="1.0" android:valueTo="0.0" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityDefaultDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/anim/fragment_prev_enter.xml b/core/res/res/anim/fragment_prev_enter.xml deleted file mode 100644 index 13b15f318e46..000000000000 --- a/core/res/res/anim/fragment_prev_enter.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="top"> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="0" - android:valueTo="1" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityDefaultDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/anim/fragment_prev_exit.xml b/core/res/res/anim/fragment_prev_exit.xml deleted file mode 100644 index 503b7ad2338a..000000000000 --- a/core/res/res/anim/fragment_prev_exit.xml +++ /dev/null @@ -1,28 +0,0 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- -/* -** Copyright 2010, 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. -*/ ---> -<set xmlns:android="http://schemas.android.com/apk/res/android" - android:zAdjustment="normal"> - <objectAnimator - android:interpolator="@interpolator/decelerate_cubic" - android:valueFrom="1" - android:valueTo="0" - android:valueType="floatType" - android:propertyName="alpha" - android:duration="@android:integer/config_activityShortDur"/> -</set>
\ No newline at end of file diff --git a/core/res/res/animator/fade_in.xml b/core/res/res/animator/fade_in.xml index 2a28b4d541ec..cff98cf1dfb9 100644 --- a/core/res/res/animator/fade_in.xml +++ b/core/res/res/animator/fade_in.xml @@ -18,7 +18,7 @@ --> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@anim/accelerate_interpolator" + android:interpolator="@interpolator/accelerate_quad" android:valueFrom="0" android:valueTo="1" android:propertyName="alpha" diff --git a/core/res/res/animator/fade_out.xml b/core/res/res/animator/fade_out.xml index 4db6591f189b..6a3d5eee4691 100644 --- a/core/res/res/animator/fade_out.xml +++ b/core/res/res/animator/fade_out.xml @@ -18,7 +18,7 @@ --> <objectAnimator xmlns:android="http://schemas.android.com/apk/res/android" - android:interpolator="@anim/accelerate_interpolator" + android:interpolator="@interpolator/accelerate_quad" android:valueFrom="1.0" android:valueTo="0.0" android:propertyName="alpha" diff --git a/core/res/res/drawable-hdpi/btn_check_off.png b/core/res/res/drawable-hdpi/btn_check_off.png Binary files differindex aad9ef7800fd..bb62e6fd9f08 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_off.png +++ b/core/res/res/drawable-hdpi/btn_check_off.png diff --git a/core/res/res/drawable-hdpi/btn_check_off_disable.png b/core/res/res/drawable-hdpi/btn_check_off_disable.png Binary files differindex eaee9e0bec4d..b346381b4b78 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_off_disable.png +++ b/core/res/res/drawable-hdpi/btn_check_off_disable.png diff --git a/core/res/res/drawable-hdpi/btn_check_off_disable_focused.png b/core/res/res/drawable-hdpi/btn_check_off_disable_focused.png Binary files differindex 6d2c2938a5a5..8663369cfa48 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_off_disable_focused.png +++ b/core/res/res/drawable-hdpi/btn_check_off_disable_focused.png diff --git a/core/res/res/drawable-hdpi/btn_check_off_pressed.png b/core/res/res/drawable-hdpi/btn_check_off_pressed.png Binary files differindex 1c442e9b45b9..67e49dffbdce 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_off_pressed.png +++ b/core/res/res/drawable-hdpi/btn_check_off_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_check_off_selected.png b/core/res/res/drawable-hdpi/btn_check_off_selected.png Binary files differindex b852b2cb2f06..1791d1f86618 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_off_selected.png +++ b/core/res/res/drawable-hdpi/btn_check_off_selected.png diff --git a/core/res/res/drawable-hdpi/btn_check_on.png b/core/res/res/drawable-hdpi/btn_check_on.png Binary files differindex cd5c1814344a..15cd25ee582f 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_on.png +++ b/core/res/res/drawable-hdpi/btn_check_on.png diff --git a/core/res/res/drawable-hdpi/btn_check_on_disable.png b/core/res/res/drawable-hdpi/btn_check_on_disable.png Binary files differindex b4fc51a1bf34..e3fe32303cd8 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_on_disable.png +++ b/core/res/res/drawable-hdpi/btn_check_on_disable.png diff --git a/core/res/res/drawable-hdpi/btn_check_on_disable_focused.png b/core/res/res/drawable-hdpi/btn_check_on_disable_focused.png Binary files differindex bf346471edd5..fa41bb7ce54a 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_on_disable_focused.png +++ b/core/res/res/drawable-hdpi/btn_check_on_disable_focused.png diff --git a/core/res/res/drawable-hdpi/btn_check_on_pressed.png b/core/res/res/drawable-hdpi/btn_check_on_pressed.png Binary files differindex fa5c7a23d932..906e283d29ad 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_on_pressed.png +++ b/core/res/res/drawable-hdpi/btn_check_on_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_check_on_selected.png b/core/res/res/drawable-hdpi/btn_check_on_selected.png Binary files differindex a6a21adc1e02..eb496a8dbd65 100644..100755 --- a/core/res/res/drawable-hdpi/btn_check_on_selected.png +++ b/core/res/res/drawable-hdpi/btn_check_on_selected.png diff --git a/core/res/res/drawable-hdpi/btn_circle_disable.png b/core/res/res/drawable-hdpi/btn_circle_disable.png Binary files differindex d829716f89db..39652a855800 100644..100755 --- a/core/res/res/drawable-hdpi/btn_circle_disable.png +++ b/core/res/res/drawable-hdpi/btn_circle_disable.png diff --git a/core/res/res/drawable-hdpi/btn_circle_disable_focused.png b/core/res/res/drawable-hdpi/btn_circle_disable_focused.png Binary files differindex c1b5b6e4091b..1aa7ffe69b11 100644..100755 --- a/core/res/res/drawable-hdpi/btn_circle_disable_focused.png +++ b/core/res/res/drawable-hdpi/btn_circle_disable_focused.png diff --git a/core/res/res/drawable-hdpi/btn_circle_normal.png b/core/res/res/drawable-hdpi/btn_circle_normal.png Binary files differindex bf3fb5a05626..6011219dc7a7 100644..100755 --- a/core/res/res/drawable-hdpi/btn_circle_normal.png +++ b/core/res/res/drawable-hdpi/btn_circle_normal.png diff --git a/core/res/res/drawable-hdpi/btn_circle_pressed.png b/core/res/res/drawable-hdpi/btn_circle_pressed.png Binary files differindex 50e22e610490..4942e50d8219 100644..100755 --- a/core/res/res/drawable-hdpi/btn_circle_pressed.png +++ b/core/res/res/drawable-hdpi/btn_circle_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_circle_selected.png b/core/res/res/drawable-hdpi/btn_circle_selected.png Binary files differindex cfc68fb62ba0..fe49a4040def 100644..100755 --- a/core/res/res/drawable-hdpi/btn_circle_selected.png +++ b/core/res/res/drawable-hdpi/btn_circle_selected.png diff --git a/core/res/res/drawable-hdpi/btn_close_normal.png b/core/res/res/drawable-hdpi/btn_close_normal.png Binary files differindex 38b49f1a392c..47f11e5bf67f 100644..100755 --- a/core/res/res/drawable-hdpi/btn_close_normal.png +++ b/core/res/res/drawable-hdpi/btn_close_normal.png diff --git a/core/res/res/drawable-hdpi/btn_close_pressed.png b/core/res/res/drawable-hdpi/btn_close_pressed.png Binary files differindex aa9ea49f00c5..5b96b4e091be 100644..100755 --- a/core/res/res/drawable-hdpi/btn_close_pressed.png +++ b/core/res/res/drawable-hdpi/btn_close_pressed.png diff --git a/core/res/res/drawable-hdpi/btn_close_selected.png b/core/res/res/drawable-hdpi/btn_close_selected.png Binary files differindex 870c670f7236..e27d6847e784 100644..100755 --- a/core/res/res/drawable-hdpi/btn_close_selected.png +++ b/core/res/res/drawable-hdpi/btn_close_selected.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal.9.png b/core/res/res/drawable-hdpi/btn_default_normal.9.png Binary files differindex 329ce6e331d2..803651bcd4ee 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_normal.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png Binary files differindex a518c6bcec68..f4f01c754628 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal_disable.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png Binary files differindex 71a05b75e55e..5376db245791 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png +++ b/core/res/res/drawable-hdpi/btn_default_normal_disable_focused.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_pressed.9.png Binary files differindex d9d02bf81998..4312c27f4d6d 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_pressed.9.png +++ b/core/res/res/drawable-hdpi/btn_default_pressed.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_selected.9.png b/core/res/res/drawable-hdpi/btn_default_selected.9.png Binary files differindex ab7c6124c967..06b7790ffcab 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_selected.9.png +++ b/core/res/res/drawable-hdpi/btn_default_selected.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal.9.png Binary files differindex baafed647bc7..6d3ea9a24639 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_small_normal.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_normal.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png Binary files differindex 175197bb2ec7..2646ba03f6b8 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_normal_disable.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png Binary files differindex ec1feff39597..013210c35980 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_normal_disable_focused.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png b/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png Binary files differindex c1f9a0f20113..24cefd4a44d6 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_pressed.9.png diff --git a/core/res/res/drawable-hdpi/btn_default_small_selected.9.png b/core/res/res/drawable-hdpi/btn_default_small_selected.9.png Binary files differindex 0ea3f4050cca..bedbceb08d90 100644..100755 --- a/core/res/res/drawable-hdpi/btn_default_small_selected.9.png +++ b/core/res/res/drawable-hdpi/btn_default_small_selected.9.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_disabled.9.png b/core/res/res/drawable-hdpi/btn_dropdown_disabled.9.png Binary files differindex c6503c7cc131..0d25b6e196c3 100644 --- a/core/res/res/drawable-hdpi/btn_dropdown_disabled.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_disabled.9.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_disabled_focused.9.png b/core/res/res/drawable-hdpi/btn_dropdown_disabled_focused.9.png Binary files differindex 152de8b54440..e21fd75fdd01 100644 --- a/core/res/res/drawable-hdpi/btn_dropdown_disabled_focused.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_disabled_focused.9.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png b/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png Binary files differindex 9392495ce94b..f10402fd4df2 100644..100755 --- a/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_normal.9.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png b/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png Binary files differindex beaba45415b5..366c6e0b8786 100644..100755 --- a/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_pressed.9.png diff --git a/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png b/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png Binary files differindex ec51fc9e019d..f063c8d27184 100644..100755 --- a/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png +++ b/core/res/res/drawable-hdpi/btn_dropdown_selected.9.png diff --git a/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png b/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png Binary files differindex f0b204179a56..3b9e0cfd2090 100644 --- a/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png +++ b/core/res/res/drawable-hdpi/dialog_full_holo_dark.9.png diff --git a/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png b/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png Binary files differindex 5b93be7098ee..0665b08feba7 100644 --- a/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png +++ b/core/res/res/drawable-hdpi/dialog_full_holo_light.9.png diff --git a/core/res/res/drawable-hdpi/expander_ic_maximized.9.png b/core/res/res/drawable-hdpi/expander_ic_maximized.9.png Binary files differindex 04943aa7f390..2ec27afa7725 100644 --- a/core/res/res/drawable-hdpi/expander_ic_maximized.9.png +++ b/core/res/res/drawable-hdpi/expander_ic_maximized.9.png diff --git a/core/res/res/drawable-hdpi/expander_ic_minimized.9.png b/core/res/res/drawable-hdpi/expander_ic_minimized.9.png Binary files differindex 7bddbcef5dbd..0c19bb782a60 100644 --- a/core/res/res/drawable-hdpi/expander_ic_minimized.9.png +++ b/core/res/res/drawable-hdpi/expander_ic_minimized.9.png diff --git a/core/res/res/drawable-hdpi/ic_menu_help.png b/core/res/res/drawable-hdpi/ic_menu_help.png Binary files differindex 4300e86f0390..01a77da43c22 100644 --- a/core/res/res/drawable-hdpi/ic_menu_help.png +++ b/core/res/res/drawable-hdpi/ic_menu_help.png diff --git a/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png Binary files differindex ab377d8f0377..9e1c42a675ba 100644..100755 --- a/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png +++ b/core/res/res/drawable-hdpi/list_selector_background_disabled.9.png diff --git a/core/res/res/drawable-hdpi/list_selector_background_focus.9.png b/core/res/res/drawable-hdpi/list_selector_background_focus.9.png Binary files differindex 94a9fbad8129..5563c80d1e98 100644..100755 --- a/core/res/res/drawable-hdpi/list_selector_background_focus.9.png +++ b/core/res/res/drawable-hdpi/list_selector_background_focus.9.png diff --git a/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png b/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png Binary files differindex bd74426710b7..72d3a08484f9 100644..100755 --- a/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png +++ b/core/res/res/drawable-hdpi/list_selector_background_longpress.9.png diff --git a/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png b/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png Binary files differindex d18d6f76d802..7568b30c22e2 100644..100755 --- a/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png +++ b/core/res/res/drawable-hdpi/list_selector_background_pressed.9.png diff --git a/core/res/res/drawable-hdpi/menu_background.9.png b/core/res/res/drawable-hdpi/menu_background.9.png Binary files differindex 60f073192d1f..f4c9e08c6a43 100644 --- a/core/res/res/drawable-hdpi/menu_background.9.png +++ b/core/res/res/drawable-hdpi/menu_background.9.png diff --git a/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png b/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png Binary files differindex 09eac9b4895f..a3cec110ef42 100644 --- a/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png +++ b/core/res/res/drawable-hdpi/menu_background_fill_parent_width.9.png diff --git a/core/res/res/drawable-hdpi/panel_background.9.png b/core/res/res/drawable-hdpi/panel_background.9.png Binary files differindex bfe57136f063..03175d44f0c0 100644 --- a/core/res/res/drawable-hdpi/panel_background.9.png +++ b/core/res/res/drawable-hdpi/panel_background.9.png diff --git a/core/res/res/drawable-hdpi/popup_bottom_bright.9.png b/core/res/res/drawable-hdpi/popup_bottom_bright.9.png Binary files differindex cca47d384f02..6e5fbb5ab262 100644 --- a/core/res/res/drawable-hdpi/popup_bottom_bright.9.png +++ b/core/res/res/drawable-hdpi/popup_bottom_bright.9.png diff --git a/core/res/res/drawable-hdpi/popup_bottom_dark.9.png b/core/res/res/drawable-hdpi/popup_bottom_dark.9.png Binary files differindex 62a0bd0b27e1..3434b2dc35a9 100644 --- a/core/res/res/drawable-hdpi/popup_bottom_dark.9.png +++ b/core/res/res/drawable-hdpi/popup_bottom_dark.9.png diff --git a/core/res/res/drawable-hdpi/popup_bottom_medium.9.png b/core/res/res/drawable-hdpi/popup_bottom_medium.9.png Binary files differindex 6ebb4f759fbb..673a5095c44a 100644 --- a/core/res/res/drawable-hdpi/popup_bottom_medium.9.png +++ b/core/res/res/drawable-hdpi/popup_bottom_medium.9.png diff --git a/core/res/res/drawable-hdpi/popup_center_bright.9.png b/core/res/res/drawable-hdpi/popup_center_bright.9.png Binary files differindex 756e9edc7e96..c2a739c42a8d 100644 --- a/core/res/res/drawable-hdpi/popup_center_bright.9.png +++ b/core/res/res/drawable-hdpi/popup_center_bright.9.png diff --git a/core/res/res/drawable-hdpi/popup_center_dark.9.png b/core/res/res/drawable-hdpi/popup_center_dark.9.png Binary files differindex 77b4524c1d84..9d2bfb155d80 100644 --- a/core/res/res/drawable-hdpi/popup_center_dark.9.png +++ b/core/res/res/drawable-hdpi/popup_center_dark.9.png diff --git a/core/res/res/drawable-hdpi/popup_center_medium.9.png b/core/res/res/drawable-hdpi/popup_center_medium.9.png Binary files differindex de4be2a54a85..4375bf2d6b27 100644 --- a/core/res/res/drawable-hdpi/popup_center_medium.9.png +++ b/core/res/res/drawable-hdpi/popup_center_medium.9.png diff --git a/core/res/res/drawable-hdpi/popup_full_bright.9.png b/core/res/res/drawable-hdpi/popup_full_bright.9.png Binary files differindex 6c30bec0a5c3..6b8aa9d521be 100644 --- a/core/res/res/drawable-hdpi/popup_full_bright.9.png +++ b/core/res/res/drawable-hdpi/popup_full_bright.9.png diff --git a/core/res/res/drawable-hdpi/popup_full_dark.9.png b/core/res/res/drawable-hdpi/popup_full_dark.9.png Binary files differindex fc8c00e7be1f..2884abeabe18 100644 --- a/core/res/res/drawable-hdpi/popup_full_dark.9.png +++ b/core/res/res/drawable-hdpi/popup_full_dark.9.png diff --git a/core/res/res/drawable-hdpi/popup_top_bright.9.png b/core/res/res/drawable-hdpi/popup_top_bright.9.png Binary files differindex ddd30ab5b3ec..76c35ec9e81b 100644 --- a/core/res/res/drawable-hdpi/popup_top_bright.9.png +++ b/core/res/res/drawable-hdpi/popup_top_bright.9.png diff --git a/core/res/res/drawable-hdpi/popup_top_dark.9.png b/core/res/res/drawable-hdpi/popup_top_dark.9.png Binary files differindex 144d0fc6d619..f3173301c22f 100644 --- a/core/res/res/drawable-hdpi/popup_top_dark.9.png +++ b/core/res/res/drawable-hdpi/popup_top_dark.9.png diff --git a/core/res/res/drawable-mdpi/btn_check_off.png b/core/res/res/drawable-mdpi/btn_check_off.png Binary files differindex 56d3861542ea..251ddff37b1a 100644 --- a/core/res/res/drawable-mdpi/btn_check_off.png +++ b/core/res/res/drawable-mdpi/btn_check_off.png diff --git a/core/res/res/drawable-mdpi/btn_check_off_disable.png b/core/res/res/drawable-mdpi/btn_check_off_disable.png Binary files differindex e012afd28ddd..45e6804ed7f5 100644 --- a/core/res/res/drawable-mdpi/btn_check_off_disable.png +++ b/core/res/res/drawable-mdpi/btn_check_off_disable.png diff --git a/core/res/res/drawable-mdpi/btn_check_off_disable_focused.png b/core/res/res/drawable-mdpi/btn_check_off_disable_focused.png Binary files differindex 0837bbdb89f7..193acd2f37b3 100644 --- a/core/res/res/drawable-mdpi/btn_check_off_disable_focused.png +++ b/core/res/res/drawable-mdpi/btn_check_off_disable_focused.png diff --git a/core/res/res/drawable-mdpi/btn_check_off_pressed.png b/core/res/res/drawable-mdpi/btn_check_off_pressed.png Binary files differindex 984dfd750d30..807901c772c3 100644 --- a/core/res/res/drawable-mdpi/btn_check_off_pressed.png +++ b/core/res/res/drawable-mdpi/btn_check_off_pressed.png diff --git a/core/res/res/drawable-mdpi/btn_check_off_selected.png b/core/res/res/drawable-mdpi/btn_check_off_selected.png Binary files differindex 20842d41c8f1..dbc3bebafcc7 100644 --- a/core/res/res/drawable-mdpi/btn_check_off_selected.png +++ b/core/res/res/drawable-mdpi/btn_check_off_selected.png diff --git a/core/res/res/drawable-mdpi/btn_check_on.png b/core/res/res/drawable-mdpi/btn_check_on.png Binary files differindex 791ac1d92c32..4c83e2eb4af0 100644 --- a/core/res/res/drawable-mdpi/btn_check_on.png +++ b/core/res/res/drawable-mdpi/btn_check_on.png diff --git a/core/res/res/drawable-mdpi/btn_check_on_disable.png b/core/res/res/drawable-mdpi/btn_check_on_disable.png Binary files differindex 6cb02f3e4674..f1bf17844cef 100644 --- a/core/res/res/drawable-mdpi/btn_check_on_disable.png +++ b/core/res/res/drawable-mdpi/btn_check_on_disable.png diff --git a/core/res/res/drawable-mdpi/btn_check_on_disable_focused.png b/core/res/res/drawable-mdpi/btn_check_on_disable_focused.png Binary files differindex 8a73b33f0df5..ea232eed8261 100644 --- a/core/res/res/drawable-mdpi/btn_check_on_disable_focused.png +++ b/core/res/res/drawable-mdpi/btn_check_on_disable_focused.png diff --git a/core/res/res/drawable-mdpi/btn_check_on_pressed.png b/core/res/res/drawable-mdpi/btn_check_on_pressed.png Binary files differindex 300d64afecb9..0de8a4c50ced 100644 --- a/core/res/res/drawable-mdpi/btn_check_on_pressed.png +++ b/core/res/res/drawable-mdpi/btn_check_on_pressed.png diff --git a/core/res/res/drawable-mdpi/btn_check_on_selected.png b/core/res/res/drawable-mdpi/btn_check_on_selected.png Binary files differindex 0b36adbe2712..20294f3e7443 100644 --- a/core/res/res/drawable-mdpi/btn_check_on_selected.png +++ b/core/res/res/drawable-mdpi/btn_check_on_selected.png diff --git a/core/res/res/drawable-mdpi/btn_circle_disable.png b/core/res/res/drawable-mdpi/btn_circle_disable.png Binary files differindex 33b74a66c07f..29e227c989e9 100644 --- a/core/res/res/drawable-mdpi/btn_circle_disable.png +++ b/core/res/res/drawable-mdpi/btn_circle_disable.png diff --git a/core/res/res/drawable-mdpi/btn_circle_disable_focused.png b/core/res/res/drawable-mdpi/btn_circle_disable_focused.png Binary files differindex 005ad8dcaeae..c5aa3c5618b2 100644 --- a/core/res/res/drawable-mdpi/btn_circle_disable_focused.png +++ b/core/res/res/drawable-mdpi/btn_circle_disable_focused.png diff --git a/core/res/res/drawable-mdpi/btn_circle_normal.png b/core/res/res/drawable-mdpi/btn_circle_normal.png Binary files differindex fc5af1c9fc50..6358351352b7 100644 --- a/core/res/res/drawable-mdpi/btn_circle_normal.png +++ b/core/res/res/drawable-mdpi/btn_circle_normal.png diff --git a/core/res/res/drawable-mdpi/btn_circle_pressed.png b/core/res/res/drawable-mdpi/btn_circle_pressed.png Binary files differindex 8f40afdfcb30..dc07a61630c3 100644 --- a/core/res/res/drawable-mdpi/btn_circle_pressed.png +++ b/core/res/res/drawable-mdpi/btn_circle_pressed.png diff --git a/core/res/res/drawable-mdpi/btn_circle_selected.png b/core/res/res/drawable-mdpi/btn_circle_selected.png Binary files differindex c74fac227a23..6eb2ff5471a0 100644 --- a/core/res/res/drawable-mdpi/btn_circle_selected.png +++ b/core/res/res/drawable-mdpi/btn_circle_selected.png diff --git a/core/res/res/drawable-mdpi/btn_close_normal.png b/core/res/res/drawable-mdpi/btn_close_normal.png Binary files differindex 4c6e79dc8881..eca5828bf818 100644 --- a/core/res/res/drawable-mdpi/btn_close_normal.png +++ b/core/res/res/drawable-mdpi/btn_close_normal.png diff --git a/core/res/res/drawable-mdpi/btn_close_pressed.png b/core/res/res/drawable-mdpi/btn_close_pressed.png Binary files differindex fc983afdcf06..3c745bbeb20a 100644 --- a/core/res/res/drawable-mdpi/btn_close_pressed.png +++ b/core/res/res/drawable-mdpi/btn_close_pressed.png diff --git a/core/res/res/drawable-mdpi/btn_close_selected.png b/core/res/res/drawable-mdpi/btn_close_selected.png Binary files differindex f2bf91a2d716..c41f039b3487 100644 --- a/core/res/res/drawable-mdpi/btn_close_selected.png +++ b/core/res/res/drawable-mdpi/btn_close_selected.png diff --git a/core/res/res/drawable-mdpi/btn_default_normal.9.png b/core/res/res/drawable-mdpi/btn_default_normal.9.png Binary files differindex a2d5ccd20c59..7ff74b2586a3 100644 --- a/core/res/res/drawable-mdpi/btn_default_normal.9.png +++ b/core/res/res/drawable-mdpi/btn_default_normal.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_normal_disable.9.png b/core/res/res/drawable-mdpi/btn_default_normal_disable.9.png Binary files differindex edd3a3eb22cc..d3e11b5d47a0 100644 --- a/core/res/res/drawable-mdpi/btn_default_normal_disable.9.png +++ b/core/res/res/drawable-mdpi/btn_default_normal_disable.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_normal_disable_focused.9.png b/core/res/res/drawable-mdpi/btn_default_normal_disable_focused.9.png Binary files differindex f506179795bf..843ca7a92f16 100644 --- a/core/res/res/drawable-mdpi/btn_default_normal_disable_focused.9.png +++ b/core/res/res/drawable-mdpi/btn_default_normal_disable_focused.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_pressed.9.png b/core/res/res/drawable-mdpi/btn_default_pressed.9.png Binary files differindex 033bf89cb8f9..74fd58b5004e 100644 --- a/core/res/res/drawable-mdpi/btn_default_pressed.9.png +++ b/core/res/res/drawable-mdpi/btn_default_pressed.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_selected.9.png b/core/res/res/drawable-mdpi/btn_default_selected.9.png Binary files differindex 1e900bf1a03e..415b14569b8c 100644 --- a/core/res/res/drawable-mdpi/btn_default_selected.9.png +++ b/core/res/res/drawable-mdpi/btn_default_selected.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal.9.png Binary files differindex bcedd5f0ff38..5dddd4640d9c 100644 --- a/core/res/res/drawable-mdpi/btn_default_small_normal.9.png +++ b/core/res/res/drawable-mdpi/btn_default_small_normal.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_disable.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_disable.9.png Binary files differindex ac6260f906c8..6ab5c4a20e03 100644 --- a/core/res/res/drawable-mdpi/btn_default_small_normal_disable.9.png +++ b/core/res/res/drawable-mdpi/btn_default_small_normal_disable.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_small_normal_disable_focused.9.png b/core/res/res/drawable-mdpi/btn_default_small_normal_disable_focused.9.png Binary files differindex 4ee1b3fb17a7..c65bace36acd 100644 --- a/core/res/res/drawable-mdpi/btn_default_small_normal_disable_focused.9.png +++ b/core/res/res/drawable-mdpi/btn_default_small_normal_disable_focused.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_small_pressed.9.png b/core/res/res/drawable-mdpi/btn_default_small_pressed.9.png Binary files differindex 25e38f4e7635..43e82f977878 100644 --- a/core/res/res/drawable-mdpi/btn_default_small_pressed.9.png +++ b/core/res/res/drawable-mdpi/btn_default_small_pressed.9.png diff --git a/core/res/res/drawable-mdpi/btn_default_small_selected.9.png b/core/res/res/drawable-mdpi/btn_default_small_selected.9.png Binary files differindex cc209c6a21c5..7a376a97f0d6 100644 --- a/core/res/res/drawable-mdpi/btn_default_small_selected.9.png +++ b/core/res/res/drawable-mdpi/btn_default_small_selected.9.png diff --git a/core/res/res/drawable-mdpi/btn_dropdown_disabled.9.png b/core/res/res/drawable-mdpi/btn_dropdown_disabled.9.png Binary files differindex f7464c7a9276..72915b5597a0 100644 --- a/core/res/res/drawable-mdpi/btn_dropdown_disabled.9.png +++ b/core/res/res/drawable-mdpi/btn_dropdown_disabled.9.png diff --git a/core/res/res/drawable-mdpi/btn_dropdown_disabled_focused.9.png b/core/res/res/drawable-mdpi/btn_dropdown_disabled_focused.9.png Binary files differindex ffe219f2c7af..438c06a685f0 100644 --- a/core/res/res/drawable-mdpi/btn_dropdown_disabled_focused.9.png +++ b/core/res/res/drawable-mdpi/btn_dropdown_disabled_focused.9.png diff --git a/core/res/res/drawable-mdpi/btn_dropdown_normal.9.png b/core/res/res/drawable-mdpi/btn_dropdown_normal.9.png Binary files differindex f6e9a19b3239..8540501d801c 100644 --- a/core/res/res/drawable-mdpi/btn_dropdown_normal.9.png +++ b/core/res/res/drawable-mdpi/btn_dropdown_normal.9.png diff --git a/core/res/res/drawable-mdpi/btn_dropdown_pressed.9.png b/core/res/res/drawable-mdpi/btn_dropdown_pressed.9.png Binary files differindex 3bdf52d4627f..9a50396b00ae 100644 --- a/core/res/res/drawable-mdpi/btn_dropdown_pressed.9.png +++ b/core/res/res/drawable-mdpi/btn_dropdown_pressed.9.png diff --git a/core/res/res/drawable-mdpi/btn_dropdown_selected.9.png b/core/res/res/drawable-mdpi/btn_dropdown_selected.9.png Binary files differindex 087956e4b402..a0a3fef9677f 100644 --- a/core/res/res/drawable-mdpi/btn_dropdown_selected.9.png +++ b/core/res/res/drawable-mdpi/btn_dropdown_selected.9.png diff --git a/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png b/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png Binary files differindex a71af8d45429..bd5f9e0d281f 100644 --- a/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png +++ b/core/res/res/drawable-mdpi/dialog_full_holo_dark.9.png diff --git a/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png b/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png Binary files differindex 4017bf71cc83..45e97120dc13 100644 --- a/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png +++ b/core/res/res/drawable-mdpi/dialog_full_holo_light.9.png diff --git a/core/res/res/drawable-mdpi/expander_ic_maximized.9.png b/core/res/res/drawable-mdpi/expander_ic_maximized.9.png Binary files differindex 465cabd7e929..d5c32766cece 100644 --- a/core/res/res/drawable-mdpi/expander_ic_maximized.9.png +++ b/core/res/res/drawable-mdpi/expander_ic_maximized.9.png diff --git a/core/res/res/drawable-mdpi/expander_ic_minimized.9.png b/core/res/res/drawable-mdpi/expander_ic_minimized.9.png Binary files differindex 9967ecbd6c1e..4515b42177bb 100644 --- a/core/res/res/drawable-mdpi/expander_ic_minimized.9.png +++ b/core/res/res/drawable-mdpi/expander_ic_minimized.9.png diff --git a/core/res/res/drawable-mdpi/ic_bullet_key_permission.png b/core/res/res/drawable-mdpi/ic_bullet_key_permission.png Binary files differindex ccb010f4c03d..68ad03952405 100644 --- a/core/res/res/drawable-mdpi/ic_bullet_key_permission.png +++ b/core/res/res/drawable-mdpi/ic_bullet_key_permission.png diff --git a/core/res/res/drawable-mdpi/ic_menu_help.png b/core/res/res/drawable-mdpi/ic_menu_help.png Binary files differindex 7c55dfd6936b..12ca235fd2c7 100644 --- a/core/res/res/drawable-mdpi/ic_menu_help.png +++ b/core/res/res/drawable-mdpi/ic_menu_help.png diff --git a/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png b/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png Binary files differindex 60f19fe459eb..43c36cb9e1d2 100644 --- a/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png +++ b/core/res/res/drawable-mdpi/list_selector_background_disabled.9.png diff --git a/core/res/res/drawable-mdpi/list_selector_background_focus.9.png b/core/res/res/drawable-mdpi/list_selector_background_focus.9.png Binary files differindex 421e734e2905..53a7eaccbee3 100644 --- a/core/res/res/drawable-mdpi/list_selector_background_focus.9.png +++ b/core/res/res/drawable-mdpi/list_selector_background_focus.9.png diff --git a/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png b/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png Binary files differindex 78176673d570..0818761cb2c8 100644 --- a/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png +++ b/core/res/res/drawable-mdpi/list_selector_background_longpress.9.png diff --git a/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png b/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png Binary files differindex 1531d9dd2728..8bd86b2b81b3 100644 --- a/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png +++ b/core/res/res/drawable-mdpi/list_selector_background_pressed.9.png diff --git a/core/res/res/drawable-mdpi/menu_background.9.png b/core/res/res/drawable-mdpi/menu_background.9.png Binary files differindex 9f16df9aa778..41a3d343961a 100644 --- a/core/res/res/drawable-mdpi/menu_background.9.png +++ b/core/res/res/drawable-mdpi/menu_background.9.png diff --git a/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png b/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png Binary files differindex da3011b1c3c8..1ddf0919b800 100644 --- a/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png +++ b/core/res/res/drawable-mdpi/menu_background_fill_parent_width.9.png diff --git a/core/res/res/drawable-mdpi/panel_background.9.png b/core/res/res/drawable-mdpi/panel_background.9.png Binary files differindex 2305be4648c6..822b6c632637 100644 --- a/core/res/res/drawable-mdpi/panel_background.9.png +++ b/core/res/res/drawable-mdpi/panel_background.9.png diff --git a/core/res/res/drawable-mdpi/popup_bottom_bright.9.png b/core/res/res/drawable-mdpi/popup_bottom_bright.9.png Binary files differindex e8e203b3dcb8..e7b713dd3ec4 100644 --- a/core/res/res/drawable-mdpi/popup_bottom_bright.9.png +++ b/core/res/res/drawable-mdpi/popup_bottom_bright.9.png diff --git a/core/res/res/drawable-mdpi/popup_bottom_dark.9.png b/core/res/res/drawable-mdpi/popup_bottom_dark.9.png Binary files differindex 76a2a7fec8b9..88ce336131b4 100644 --- a/core/res/res/drawable-mdpi/popup_bottom_dark.9.png +++ b/core/res/res/drawable-mdpi/popup_bottom_dark.9.png diff --git a/core/res/res/drawable-mdpi/popup_bottom_medium.9.png b/core/res/res/drawable-mdpi/popup_bottom_medium.9.png Binary files differindex dee6d6bb0e56..e5aaad0b4839 100755..100644 --- a/core/res/res/drawable-mdpi/popup_bottom_medium.9.png +++ b/core/res/res/drawable-mdpi/popup_bottom_medium.9.png diff --git a/core/res/res/drawable-mdpi/popup_center_bright.9.png b/core/res/res/drawable-mdpi/popup_center_bright.9.png Binary files differindex c817338db553..a25935616ce2 100644 --- a/core/res/res/drawable-mdpi/popup_center_bright.9.png +++ b/core/res/res/drawable-mdpi/popup_center_bright.9.png diff --git a/core/res/res/drawable-mdpi/popup_center_dark.9.png b/core/res/res/drawable-mdpi/popup_center_dark.9.png Binary files differindex 79ffdaa87dd5..9378dbf9f113 100644 --- a/core/res/res/drawable-mdpi/popup_center_dark.9.png +++ b/core/res/res/drawable-mdpi/popup_center_dark.9.png diff --git a/core/res/res/drawable-mdpi/popup_center_medium.9.png b/core/res/res/drawable-mdpi/popup_center_medium.9.png Binary files differindex ba2e9bf747b9..885403cacdc0 100755..100644 --- a/core/res/res/drawable-mdpi/popup_center_medium.9.png +++ b/core/res/res/drawable-mdpi/popup_center_medium.9.png diff --git a/core/res/res/drawable-mdpi/popup_full_bright.9.png b/core/res/res/drawable-mdpi/popup_full_bright.9.png Binary files differindex d33ff2b90f16..d7fb3dbbea35 100644 --- a/core/res/res/drawable-mdpi/popup_full_bright.9.png +++ b/core/res/res/drawable-mdpi/popup_full_bright.9.png diff --git a/core/res/res/drawable-mdpi/popup_full_dark.9.png b/core/res/res/drawable-mdpi/popup_full_dark.9.png Binary files differindex 2305be4648c6..7b9f2918acde 100644 --- a/core/res/res/drawable-mdpi/popup_full_dark.9.png +++ b/core/res/res/drawable-mdpi/popup_full_dark.9.png diff --git a/core/res/res/drawable-mdpi/popup_top_bright.9.png b/core/res/res/drawable-mdpi/popup_top_bright.9.png Binary files differindex 727a94824fd8..72d82f0003fe 100644 --- a/core/res/res/drawable-mdpi/popup_top_bright.9.png +++ b/core/res/res/drawable-mdpi/popup_top_bright.9.png diff --git a/core/res/res/drawable-mdpi/popup_top_dark.9.png b/core/res/res/drawable-mdpi/popup_top_dark.9.png Binary files differindex af511f2f5d73..616d80f91b4b 100644 --- a/core/res/res/drawable-mdpi/popup_top_dark.9.png +++ b/core/res/res/drawable-mdpi/popup_top_dark.9.png diff --git a/core/res/res/layout-xlarge/alert_dialog_holo.xml b/core/res/res/layout-xlarge/alert_dialog_holo.xml index 2ae8db774d9e..2ebe7cd5af58 100644 --- a/core/res/res/layout-xlarge/alert_dialog_holo.xml +++ b/core/res/res/layout-xlarge/alert_dialog_holo.xml @@ -23,10 +23,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:paddingTop="9dip" - android:paddingBottom="3dip" - android:paddingLeft="3dip" - android:paddingRight="1dip" android:majorWeightMin="0.45" android:minorWeightMin="0.72"> @@ -35,6 +31,15 @@ android:layout_height="wrap_content" android:minHeight="64dip" android:orientation="vertical"> + <ImageView android:id="@+id/titleDividerTop" + android:layout_width="match_parent" + android:layout_height="4dip" + android:visibility="gone" + android:scaleType="fitXY" + android:gravity="fill_horizontal" + android:paddingLeft="16dip" + android:paddingRight="16dip" + android:src="@android:drawable/divider_strong_holo" /> <LinearLayout android:id="@+id/title_template" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/core/res/res/layout/alert_dialog_holo.xml b/core/res/res/layout/alert_dialog_holo.xml index 07a2853cba78..187504ec539d 100644 --- a/core/res/res/layout/alert_dialog_holo.xml +++ b/core/res/res/layout/alert_dialog_holo.xml @@ -23,10 +23,6 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" - android:paddingTop="9dip" - android:paddingBottom="3dip" - android:paddingLeft="3dip" - android:paddingRight="1dip" android:majorWeightMin="0.65" android:minorWeightMin="0.9"> @@ -35,6 +31,15 @@ android:layout_height="wrap_content" android:minHeight="64dip" android:orientation="vertical"> + <ImageView android:id="@+id/titleDividerTop" + android:layout_width="match_parent" + android:layout_height="4dip" + android:visibility="gone" + android:scaleType="fitXY" + android:gravity="fill_horizontal" + android:paddingLeft="16dip" + android:paddingRight="16dip" + android:src="@android:drawable/divider_strong_holo" /> <LinearLayout android:id="@+id/title_template" android:layout_width="match_parent" android:layout_height="wrap_content" diff --git a/core/res/res/layout/dialog_custom_title_holo.xml b/core/res/res/layout/dialog_custom_title_holo.xml new file mode 100644 index 000000000000..854873f02e7e --- /dev/null +++ b/core/res/res/layout/dialog_custom_title_holo.xml @@ -0,0 +1,43 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- +This is an custom layout for a dialog. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:fitsSystemWindows="true"> + <FrameLayout android:id="@android:id/title_container" + android:layout_width="match_parent" + android:layout_height="24dip" + android:layout_weight="0" + style="?android:attr/windowTitleBackgroundStyle"> + </FrameLayout> + <FrameLayout + android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_weight="1" + android:orientation="vertical" + android:foreground="?android:attr/windowContentOverlay"> + <FrameLayout android:id="@android:id/content" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:paddingTop="6dip" + android:paddingBottom="10dip" + android:paddingLeft="10dip" + android:paddingRight="10dip" /> + </FrameLayout> +</LinearLayout> diff --git a/core/res/res/layout/dialog_title_holo.xml b/core/res/res/layout/dialog_title_holo.xml new file mode 100644 index 000000000000..534dd8dac96f --- /dev/null +++ b/core/res/res/layout/dialog_title_holo.xml @@ -0,0 +1,50 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- +/* +** Copyright 2011, The Android Open Source Project +** +** Licensed under the Apache License, Version 2.0 (the "License"); +** you may not use this file except in compliance with the License. +** You may obtain a copy of the License at +** +** http://www.apache.org/licenses/LICENSE-2.0 +** +** Unless required by applicable law or agreed to in writing, software +** distributed under the License is distributed on an "AS IS" BASIS, +** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +** See the License for the specific language governing permissions and +** limitations under the License. +*/ + +This is an optimized layout for a screen, with the minimum set of features +enabled. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:fitsSystemWindows="true"> + <TextView android:id="@android:id/title" style="?android:attr/windowTitleStyle" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:minHeight="60dip" + android:paddingLeft="32dip" + android:paddingRight="32dip" + android:gravity="center_vertical|left" /> + <ImageView android:id="@+id/titleDivider" + android:layout_width="match_parent" + android:layout_height="4dip" + android:scaleType="fitXY" + android:gravity="fill_horizontal" + android:paddingLeft="16dip" + android:paddingRight="16dip" + android:src="@android:drawable/divider_strong_holo" /> + <FrameLayout + android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_weight="1" + android:orientation="vertical" + android:foreground="?android:attr/windowContentOverlay"> + <FrameLayout android:id="@android:id/content" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + </FrameLayout> +</LinearLayout> diff --git a/core/res/res/layout/dialog_title_icons_holo.xml b/core/res/res/layout/dialog_title_icons_holo.xml new file mode 100644 index 000000000000..a3cd3afa5575 --- /dev/null +++ b/core/res/res/layout/dialog_title_icons_holo.xml @@ -0,0 +1,69 @@ +<?xml version="1.0" encoding="utf-8"?> +<!-- Copyright (C) 2011 The Android Open Source Project + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +--> + +<!-- +This is an optimized layout for a screen, with the minimum set of features +enabled. +--> + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" + android:orientation="vertical" + android:fitsSystemWindows="true"> + + <LinearLayout android:id="@+id/title_container" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:orientation="horizontal" + android:gravity="center_vertical" + android:minHeight="60dip" + android:paddingLeft="32dip" + android:paddingRight="32dip"> + <ImageView android:id="@+id/left_icon" + android:layout_width="32dip" + android:layout_height="32dip" + android:scaleType="fitCenter" + android:layout_marginRight="8dip" /> + <TextView android:id="@android:id/title" + style="?android:attr/windowTitleStyle" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_weight="0" /> + <ImageView android:id="@+id/right_icon" + android:layout_width="32dip" + android:layout_height="32dip" + android:scaleType="fitCenter" + android:layout_marginLeft="8dip" /> + </LinearLayout> + + <ImageView android:id="@+id/titleDivider" + android:layout_width="match_parent" + android:layout_height="4dip" + android:scaleType="fitXY" + android:gravity="fill_horizontal" + android:paddingLeft="16dip" + android:paddingRight="16dip" + android:src="@android:drawable/divider_strong_holo" /> + + <FrameLayout + android:layout_width="match_parent" android:layout_height="wrap_content" + android:layout_weight="1" + android:orientation="vertical" + android:foreground="?android:attr/windowContentOverlay"> + <FrameLayout android:id="@android:id/content" + android:layout_width="match_parent" + android:layout_height="match_parent" /> + </FrameLayout> +</LinearLayout> diff --git a/core/res/res/values-es-rUS-xlarge/strings.xml b/core/res/res/values-es-rUS-xlarge/strings.xml index cef8d1271d70..4743ac5daf1c 100644 --- a/core/res/res/values-es-rUS-xlarge/strings.xml +++ b/core/res/res/values-es-rUS-xlarge/strings.xml @@ -301,6 +301,8 @@ <!-- XL --> <string name="websearch" msgid="904596193450917688">"Búsqueda web"</string> <!-- XL --> + <string name="status_bar_notification_info_overflow" msgid="1081154808901480710">"100+"</string> + <!-- XL --> <string name="permlab_mediaStorageWrite" product="default" msgid="5585262071354704256">"modificar/eliminar los contenidos del almacenamientos de medios internos"</string> <!-- XL --> <string name="permdesc_mediaStorageWrite" product="default" msgid="2372999661142345443">"Permite que una aplicación modifique los contenidos del almacenamiento interno de medios."</string> diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index b8b9e6c2754f..fb269a69a9b7 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -634,6 +634,12 @@ <!-- Theme to use for dialogs spawned from this theme. --> <attr name="dialogTheme" format="reference" /> + <!-- Window decor layout to use in dialog mode with icons --> + <attr name="dialogTitleIconsDecorLayout" format="reference" /> + <!-- Window decor layout to use in dialog mode with custom titles --> + <attr name="dialogCustomTitleDecorLayout" format="reference" /> + <!-- Window decor layout to use in dialog mode with title only --> + <attr name="dialogTitleDecorLayout" format="reference" /> <!-- Theme to use for alert dialogs spawned from this theme. --> <attr name="alertDialogTheme" format="reference" /> <!-- Icon drawable to use for alerts --> diff --git a/core/res/res/values/colors.xml b/core/res/res/values/colors.xml index 2e87883416b4..1a6f404d62ff 100644 --- a/core/res/res/values/colors.xml +++ b/core/res/res/values/colors.xml @@ -91,7 +91,7 @@ <color name="search_url_text_selected">@android:color/black</color> <color name="search_url_text_pressed">@android:color/black</color> <color name="search_widget_corpus_item_background">@android:color/lighter_gray</color> - + <!-- SlidingTab --> <color name="sliding_tab_text_color_active">@android:color/black</color> <color name="sliding_tab_text_color_shadow">@android:color/black</color> @@ -105,7 +105,7 @@ <!-- keyguard clock --> <color name="lockscreen_clock_background">#b3ffffff</color> - <color name="lockscreen_clock_foreground">#40000000</color> + <color name="lockscreen_clock_foreground">#7affffff</color> <color name="lockscreen_clock_am_pm">#ff9a9a9a</color> <color name="lockscreen_owner_info">#ff9a9a9a</color> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index c2a848dce96a..e124d9df1de4 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1458,9 +1458,6 @@ sinusoidal pattern. --> <public type="interpolator" name="cycle" /> - <public type="anim" name="animator_fade_in" /> - <public type="anim" name="animator_fade_out" /> - <!-- Acceleration curve matching a cubic ease in function. --> <public type="anim" name="accelerate_cubic_interpolator" /> <!-- Acceleration curve matching a cubic ease out function. --> diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index 96e60f29f191..5709f58a9129 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -81,14 +81,14 @@ <item name="wallpaperIntraOpenExitAnimation">@anim/wallpaper_intra_open_exit</item> <item name="wallpaperIntraCloseEnterAnimation">@anim/wallpaper_intra_close_enter</item> <item name="wallpaperIntraCloseExitAnimation">@anim/wallpaper_intra_close_exit</item> - <item name="fragmentOpenEnterAnimation">@anim/fragment_open_enter</item> - <item name="fragmentOpenExitAnimation">@anim/fragment_open_exit</item> - <item name="fragmentCloseEnterAnimation">@anim/fragment_close_enter</item> - <item name="fragmentCloseExitAnimation">@anim/fragment_close_exit</item> - <item name="fragmentNextEnterAnimation">@anim/fragment_next_enter</item> - <item name="fragmentNextExitAnimation">@anim/fragment_next_exit</item> - <item name="fragmentPrevEnterAnimation">@anim/fragment_prev_enter</item> - <item name="fragmentPrevExitAnimation">@anim/fragment_prev_exit</item> + <item name="fragmentOpenEnterAnimation">@animator/fragment_open_enter</item> + <item name="fragmentOpenExitAnimation">@animator/fragment_open_exit</item> + <item name="fragmentCloseEnterAnimation">@animator/fragment_close_enter</item> + <item name="fragmentCloseExitAnimation">@animator/fragment_close_exit</item> + <item name="fragmentNextEnterAnimation">@animator/fragment_next_enter</item> + <item name="fragmentNextExitAnimation">@animator/fragment_next_exit</item> + <item name="fragmentPrevEnterAnimation">@animator/fragment_prev_enter</item> + <item name="fragmentPrevExitAnimation">@animator/fragment_prev_exit</item> </style> <!-- Standard animations for a non-full-screen window or activity. --> @@ -1512,8 +1512,8 @@ <style name="Widget.Holo.ProgressBar.Horizontal" parent="Widget.ProgressBar.Horizontal"> <item name="android:progressDrawable">@android:drawable/progress_horizontal_holo_dark</item> <item name="android:indeterminateDrawable">@android:drawable/progress_indeterminate_horizontal_holo</item> - <item name="android:minHeight">24dip</item> - <item name="android:maxHeight">24dip</item> + <item name="android:minHeight">16dip</item> + <item name="android:maxHeight">16dip</item> </style> <style name="Widget.Holo.ProgressBar.Small" parent="Widget.ProgressBar.Small"> @@ -1728,7 +1728,7 @@ <style name="Widget.Holo.Light.Button" parent="Widget.Button"> <item name="android:background">@android:drawable/btn_default_holo_light</item> - <item name="android:textAppearance">?android:attr/textAppearanceMedium</item> + <item name="android:textAppearance">?android:attr/textAppearanceMediumInverse</item> <item name="android:textColor">@android:color/primary_text_holo_light</item> <item name="android:minHeight">48dip</item> <item name="android:paddingLeft">32dip</item> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index ed8b20d7e6f6..94a58f0785ce 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -142,6 +142,9 @@ <!-- Dialog attributes --> <item name="alertDialogStyle">@android:style/AlertDialog</item> <item name="dialogTheme">@android:style/Theme.Dialog</item> + <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons</item> + <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title</item> + <item name="dialogTitleDecorLayout">@layout/dialog_title</item> <item name="alertDialogTheme">@android:style/Theme.Dialog.Alert</item> <item name="alertDialogCenterButtons">true</item> <item name="alertDialogIcon">@android:drawable/ic_dialog_alert</item> @@ -807,6 +810,9 @@ <!-- Dialog attributes --> <item name="alertDialogStyle">@android:style/AlertDialog.Holo</item> <item name="dialogTheme">@android:style/Theme.Holo.Dialog</item> + <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_holo</item> + <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_holo</item> + <item name="dialogTitleDecorLayout">@layout/dialog_title_holo</item> <item name="alertDialogTheme">@android:style/Theme.Holo.Dialog.Alert</item> <item name="alertDialogCenterButtons">false</item> <item name="alertDialogIcon">@android:drawable/ic_dialog_alert_holo_dark</item> @@ -1065,6 +1071,9 @@ <!-- Dialog attributes --> <item name="alertDialogStyle">@android:style/AlertDialog.Holo.Light</item> <item name="dialogTheme">@android:style/Theme.Holo.Light.Dialog</item> + <item name="dialogTitleIconsDecorLayout">@layout/dialog_title_icons_holo</item> + <item name="dialogCustomTitleDecorLayout">@layout/dialog_custom_title_holo</item> + <item name="dialogTitleDecorLayout">@layout/dialog_title_holo</item> <item name="alertDialogTheme">@android:style/Theme.Holo.Light.Dialog.Alert</item> <item name="alertDialogIcon">@android:drawable/ic_dialog_alert_holo_light</item> diff --git a/data/fonts/AndroidClock.ttf b/data/fonts/AndroidClock.ttf Binary files differindex 24a7f087234b..03e36cb66903 100644 --- a/data/fonts/AndroidClock.ttf +++ b/data/fonts/AndroidClock.ttf diff --git a/data/fonts/AndroidClock_Highlight.ttf b/data/fonts/AndroidClock_Highlight.ttf Binary files differindex 1e14a8f726a1..8fb31bae8d3a 100644 --- a/data/fonts/AndroidClock_Highlight.ttf +++ b/data/fonts/AndroidClock_Highlight.ttf diff --git a/libs/hwui/PathCache.cpp b/libs/hwui/PathCache.cpp index 8740a64601ae..3184598d48c4 100644 --- a/libs/hwui/PathCache.cpp +++ b/libs/hwui/PathCache.cpp @@ -197,10 +197,16 @@ PathTexture* PathCache::addTexture(const PathCacheEntry& entry, bitmap.eraseColor(0); SkPaint pathPaint(*paint); - if (!pathPaint.getXfermode()) { - SkXfermode* mode = SkXfermode::Create(SkXfermode::kSrc_Mode); - pathPaint.setXfermode(mode)->safeUnref(); - } + + // Make sure the paint is opaque, color, alpha, filter, etc. + // will be applied later when compositing the alpha8 texture + pathPaint.setColor(0xff000000); + pathPaint.setAlpha(255); + pathPaint.setColorFilter(NULL); + pathPaint.setMaskFilter(NULL); + pathPaint.setShader(NULL); + SkXfermode* mode = SkXfermode::Create(SkXfermode::kSrc_Mode); + pathPaint.setXfermode(mode)->safeUnref(); SkCanvas canvas(bitmap); canvas.translate(-bounds.fLeft + offset, -bounds.fTop + offset); diff --git a/media/java/android/media/MediaPlayer.java b/media/java/android/media/MediaPlayer.java index 01134f2111aa..f61ac0f794b8 100644 --- a/media/java/android/media/MediaPlayer.java +++ b/media/java/android/media/MediaPlayer.java @@ -1300,9 +1300,9 @@ public class MediaPlayer return; case MEDIA_INFO: - // For PV specific code values (msg.arg2) look in - // opencore/pvmi/pvmf/include/pvmf_return_codes.h - Log.i(TAG, "Info (" + msg.arg1 + "," + msg.arg2 + ")"); + if (msg.arg1 != MEDIA_INFO_VIDEO_TRACK_LAGGING) { + Log.i(TAG, "Info (" + msg.arg1 + "," + msg.arg2 + ")"); + } if (mOnInfoListener != null) { mOnInfoListener.onInfo(mMediaPlayer, msg.arg1, msg.arg2); } diff --git a/media/libmedia/mediaplayer.cpp b/media/libmedia/mediaplayer.cpp index a098d6953a53..87c8fe432336 100644 --- a/media/libmedia/mediaplayer.cpp +++ b/media/libmedia/mediaplayer.cpp @@ -607,7 +607,9 @@ void MediaPlayer::notify(int msg, int ext1, int ext2) case MEDIA_INFO: // ext1: Media framework error code. // ext2: Implementation dependant error code. - LOGW("info/warning (%d, %d)", ext1, ext2); + if (ext1 != MEDIA_INFO_VIDEO_TRACK_LAGGING) { + LOGW("info/warning (%d, %d)", ext1, ext2); + } break; case MEDIA_SEEK_COMPLETE: LOGV("Received seek complete"); diff --git a/media/libstagefright/AwesomePlayer.cpp b/media/libstagefright/AwesomePlayer.cpp index 914e409c35b1..4cfe28ec37c9 100644 --- a/media/libstagefright/AwesomePlayer.cpp +++ b/media/libstagefright/AwesomePlayer.cpp @@ -179,6 +179,8 @@ AwesomePlayer::AwesomePlayer() mStreamDoneEventPending = false; mBufferingEvent = new AwesomeEvent(this, &AwesomePlayer::onBufferingUpdate); mBufferingEventPending = false; + mVideoLagEvent = new AwesomeEvent(this, &AwesomePlayer::onVideoLagUpdate); + mVideoEventPending = false; mCheckAudioStatusEvent = new AwesomeEvent( this, &AwesomePlayer::onCheckAudioStatus); @@ -205,6 +207,8 @@ void AwesomePlayer::cancelPlayerEvents(bool keepBufferingGoing) { mStreamDoneEventPending = false; mQueue.cancelEvent(mCheckAudioStatusEvent->eventID()); mAudioStatusEventPending = false; + mQueue.cancelEvent(mVideoLagEvent->eventID()); + mVideoLagEventPending = false; if (!keepBufferingGoing) { mQueue.cancelEvent(mBufferingEvent->eventID()); @@ -530,6 +534,28 @@ void AwesomePlayer::ensureCacheIsFetching_l() { } } +void AwesomePlayer::onVideoLagUpdate() { + Mutex::Autolock autoLock(mLock); + if (!mVideoLagEventPending) { + return; + } + mVideoLagEventPending = false; + + int64_t audioTimeUs = mAudioPlayer->getMediaTimeUs(); + int64_t videoLateByUs = audioTimeUs - mVideoTimeUs; + + if (videoLateByUs > 300000ll) { + LOGV("video late by %lld ms.", videoLateByUs / 1000ll); + + notifyListener_l( + MEDIA_INFO, + MEDIA_INFO_VIDEO_TRACK_LAGGING, + videoLateByUs / 1000ll); + } + + postVideoLagEvent_l(); +} + void AwesomePlayer::onBufferingUpdate() { Mutex::Autolock autoLock(mLock); if (!mBufferingEventPending) { @@ -788,6 +814,10 @@ status_t AwesomePlayer::play_l() { if (mVideoSource != NULL) { // Kick off video playback postVideoEvent_l(); + + if (mAudioSource != NULL && mVideoSource != NULL) { + postVideoLagEvent_l(); + } } if (deferredAudioSeek) { @@ -1347,6 +1377,14 @@ void AwesomePlayer::postBufferingEvent_l() { mQueue.postEventWithDelay(mBufferingEvent, 1000000ll); } +void AwesomePlayer::postVideoLagEvent_l() { + if (mVideoLagEventPending) { + return; + } + mVideoLagEventPending = true; + mQueue.postEventWithDelay(mVideoLagEvent, 1000000ll); +} + void AwesomePlayer::postCheckAudioStatusEvent_l() { if (mAudioStatusEventPending) { return; diff --git a/media/libstagefright/NuCachedSource2.cpp b/media/libstagefright/NuCachedSource2.cpp index 110fb038cd17..cdf4270db34e 100644 --- a/media/libstagefright/NuCachedSource2.cpp +++ b/media/libstagefright/NuCachedSource2.cpp @@ -348,7 +348,7 @@ void NuCachedSource2::restartPrefetcherIfNecessary_l( ssize_t NuCachedSource2::readAt(off64_t offset, void *data, size_t size) { Mutex::Autolock autoSerializer(mSerializer); - LOGV("readAt offset %ld, size %d", offset, size); + LOGV("readAt offset %lld, size %d", offset, size); Mutex::Autolock autoLock(mLock); @@ -408,7 +408,7 @@ size_t NuCachedSource2::approxDataRemaining_l(bool *eos) { } ssize_t NuCachedSource2::readInternal(off64_t offset, void *data, size_t size) { - LOGV("readInternal offset %ld size %d", offset, size); + LOGV("readInternal offset %lld size %d", offset, size); Mutex::Autolock autoLock(mLock); diff --git a/media/libstagefright/include/AwesomePlayer.h b/media/libstagefright/include/AwesomePlayer.h index 17b83c143a4a..130ad8228900 100644 --- a/media/libstagefright/include/AwesomePlayer.h +++ b/media/libstagefright/include/AwesomePlayer.h @@ -173,6 +173,8 @@ private: bool mBufferingEventPending; sp<TimedEventQueue::Event> mCheckAudioStatusEvent; bool mAudioStatusEventPending; + sp<TimedEventQueue::Event> mVideoLagEvent; + bool mVideoLagEventPending; sp<TimedEventQueue::Event> mAsyncPrepareEvent; Condition mPreparedCondition; @@ -184,6 +186,7 @@ private: void postBufferingEvent_l(); void postStreamDoneEvent_l(status_t status); void postCheckAudioStatusEvent_l(); + void postVideoLagEvent_l(); status_t play_l(); MediaBuffer *mVideoBuffer; @@ -233,6 +236,7 @@ private: void onPrepareAsyncEvent(); void abortPrepare(status_t err); void finishAsyncPrepare_l(); + void onVideoLagUpdate(); bool getCachedDuration_l(int64_t *durationUs, bool *eos); diff --git a/media/libstagefright/include/NuCachedSource2.h b/media/libstagefright/include/NuCachedSource2.h index 78719c16abb4..aa320fc2bdcc 100644 --- a/media/libstagefright/include/NuCachedSource2.h +++ b/media/libstagefright/include/NuCachedSource2.h @@ -55,8 +55,8 @@ private: enum { kPageSize = 65536, - kHighWaterThreshold = 5 * 1024 * 1024, - kLowWaterThreshold = 1024 * 1024, + kHighWaterThreshold = 20 * 1024 * 1024, + kLowWaterThreshold = 4 * 1024 * 1024, // Read data after a 15 sec timeout whether we're actively // fetching or not. diff --git a/media/libstagefright/matroska/MatroskaExtractor.cpp b/media/libstagefright/matroska/MatroskaExtractor.cpp index e0ac49fcee82..eca9ed69a23b 100644 --- a/media/libstagefright/matroska/MatroskaExtractor.cpp +++ b/media/libstagefright/matroska/MatroskaExtractor.cpp @@ -118,6 +118,9 @@ struct MatroskaSource : public MediaSource { virtual status_t read( MediaBuffer **buffer, const ReadOptions *options); +protected: + virtual ~MatroskaSource(); + private: enum Type { AVC, @@ -131,8 +134,13 @@ private: BlockIterator mBlockIter; size_t mNALSizeLen; // for type AVC + List<MediaBuffer *> mPendingFrames; + status_t advance(); + status_t readBlock(); + void clearPendingFrames(); + MatroskaSource(const MatroskaSource &); MatroskaSource &operator=(const MatroskaSource &); }; @@ -168,6 +176,10 @@ MatroskaSource::MatroskaSource( } } +MatroskaSource::~MatroskaSource() { + clearPendingFrames(); +} + status_t MatroskaSource::start(MetaData *params) { mBlockIter.reset(); @@ -175,6 +187,8 @@ status_t MatroskaSource::start(MetaData *params) { } status_t MatroskaSource::stop() { + clearPendingFrames(); + return OK; } @@ -256,99 +270,309 @@ static unsigned U24_AT(const uint8_t *ptr) { return ptr[0] << 16 | ptr[1] << 8 | ptr[2]; } -status_t MatroskaSource::read( - MediaBuffer **out, const ReadOptions *options) { - *out = NULL; +static size_t clz(uint8_t x) { + size_t numLeadingZeroes = 0; - int64_t seekTimeUs; - ReadOptions::SeekMode mode; - if (options && options->getSeekTo(&seekTimeUs, &mode)) { - mBlockIter.seek(seekTimeUs); + while (!(x & 0x80)) { + ++numLeadingZeroes; + x = x << 1; } -again: + return numLeadingZeroes; +} + +void MatroskaSource::clearPendingFrames() { + while (!mPendingFrames.empty()) { + MediaBuffer *frame = *mPendingFrames.begin(); + mPendingFrames.erase(mPendingFrames.begin()); + + frame->release(); + frame = NULL; + } +} + +#define BAIL(err) \ + do { \ + if (bigbuf) { \ + bigbuf->release(); \ + bigbuf = NULL; \ + } \ + \ + return err; \ + } while (0) + +status_t MatroskaSource::readBlock() { + CHECK(mPendingFrames.empty()); + if (mBlockIter.eos()) { return ERROR_END_OF_STREAM; } const mkvparser::Block *block = mBlockIter.block(); + size_t size = block->GetSize(); int64_t timeUs = mBlockIter.blockTimeUs(); + int32_t isSync = block->IsKey(); - // In the case of AVC content, each NAL unit is prefixed by - // mNALSizeLen bytes of length. We want to prefix the data with - // a four-byte 0x00000001 startcode instead of the length prefix. - // mNALSizeLen ranges from 1 through 4 bytes, so add an extra - // 3 bytes of padding to the buffer start. - static const size_t kPadding = 3; - - MediaBuffer *buffer = new MediaBuffer(size + kPadding); - buffer->meta_data()->setInt64(kKeyTime, timeUs); - buffer->meta_data()->setInt32(kKeyIsSyncFrame, block->IsKey()); + MediaBuffer *bigbuf = new MediaBuffer(size); long res = block->Read( - mExtractor->mReader, (unsigned char *)buffer->data() + kPadding); + mExtractor->mReader, (unsigned char *)bigbuf->data()); if (res != 0) { + bigbuf->release(); + bigbuf = NULL; + return ERROR_END_OF_STREAM; } - buffer->set_range(kPadding, size); + mBlockIter.advance(); - if (mType == AVC) { - CHECK_GE(size, mNALSizeLen); + bigbuf->meta_data()->setInt64(kKeyTime, timeUs); + bigbuf->meta_data()->setInt32(kKeyIsSyncFrame, isSync); - uint8_t *data = (uint8_t *)buffer->data(); + unsigned lacing = (block->Flags() >> 1) & 3; - size_t NALsize; - switch (mNALSizeLen) { - case 1: NALsize = data[kPadding]; break; - case 2: NALsize = U16_AT(&data[kPadding]); break; - case 3: NALsize = U24_AT(&data[kPadding]); break; - case 4: NALsize = U32_AT(&data[kPadding]); break; - default: - TRESPASS(); + if (lacing == 0) { + mPendingFrames.push_back(bigbuf); + return OK; + } + + LOGV("lacing = %u, size = %d", lacing, size); + + const uint8_t *data = (const uint8_t *)bigbuf->data(); + // hexdump(data, size); + + if (size == 0) { + BAIL(ERROR_MALFORMED); + } + + unsigned numFrames = (unsigned)data[0] + 1; + ++data; + --size; + + Vector<uint64_t> frameSizes; + + switch (lacing) { + case 1: // Xiph + { + for (size_t i = 0; i < numFrames - 1; ++i) { + size_t frameSize = 0; + uint8_t byte; + do { + if (size == 0) { + BAIL(ERROR_MALFORMED); + } + byte = data[0]; + ++data; + --size; + + frameSize += byte; + } while (byte == 0xff); + + frameSizes.push(frameSize); + } + + break; } - CHECK_GE(size, NALsize + mNALSizeLen); - if (size > NALsize + mNALSizeLen) { - LOGW("discarding %d bytes of data.", size - NALsize - mNALSizeLen); + case 2: // fixed-size + { + if ((size % numFrames) != 0) { + BAIL(ERROR_MALFORMED); + } + + size_t frameSize = size / numFrames; + for (size_t i = 0; i < numFrames - 1; ++i) { + frameSizes.push(frameSize); + } + + break; } - // actual data starts at &data[kPadding + mNALSizeLen] + case 3: // EBML + { + uint64_t lastFrameSize = 0; + for (size_t i = 0; i < numFrames - 1; ++i) { + uint8_t byte; - memcpy(&data[mNALSizeLen - 1], "\x00\x00\x00\x01", 4); - buffer->set_range(mNALSizeLen - 1, NALsize + 4); - } else if (mType == AAC) { - // There's strange junk at the beginning... + if (size == 0) { + BAIL(ERROR_MALFORMED); + } + byte = data[0]; + ++data; + --size; + + size_t numLeadingZeroes = clz(byte); + + uint64_t frameSize = byte & ~(0x80 >> numLeadingZeroes); + for (size_t j = 0; j < numLeadingZeroes; ++j) { + if (size == 0) { + BAIL(ERROR_MALFORMED); + } + + frameSize = frameSize << 8; + frameSize |= data[0]; + ++data; + --size; + } - const uint8_t *data = (const uint8_t *)buffer->data() + kPadding; + if (i == 0) { + frameSizes.push(frameSize); + } else { + size_t shift = + 7 - numLeadingZeroes + 8 * numLeadingZeroes; - // hexdump(data, size); + int64_t delta = + (int64_t)frameSize - (1ll << (shift - 1)) + 1; - size_t offset = 0; - while (offset < size && data[offset] != 0x21) { - ++offset; - } + frameSize = lastFrameSize + delta; - if (size == offset) { - buffer->release(); + frameSizes.push(frameSize); + } - mBlockIter.advance(); - goto again; + lastFrameSize = frameSize; + } + break; } - buffer->set_range(kPadding + offset, size - offset); + default: + TRESPASS(); } - *out = buffer; - #if 0 - hexdump((const uint8_t *)buffer->data() + buffer->range_offset(), - buffer->range_length()); + AString out; + for (size_t i = 0; i < frameSizes.size(); ++i) { + if (i > 0) { + out.append(", "); + } + out.append(StringPrintf("%llu", frameSizes.itemAt(i))); + } + LOGV("sizes = [%s]", out.c_str()); #endif - mBlockIter.advance(); + for (size_t i = 0; i < frameSizes.size(); ++i) { + uint64_t frameSize = frameSizes.itemAt(i); + + if (size < frameSize) { + BAIL(ERROR_MALFORMED); + } + + MediaBuffer *mbuf = new MediaBuffer(frameSize); + mbuf->meta_data()->setInt64(kKeyTime, timeUs); + mbuf->meta_data()->setInt32(kKeyIsSyncFrame, isSync); + memcpy(mbuf->data(), data, frameSize); + mPendingFrames.push_back(mbuf); + + data += frameSize; + size -= frameSize; + } + + size_t offset = bigbuf->range_length() - size; + bigbuf->set_range(offset, size); + + mPendingFrames.push_back(bigbuf); + + return OK; +} + +#undef BAIL + +status_t MatroskaSource::read( + MediaBuffer **out, const ReadOptions *options) { + *out = NULL; + + int64_t seekTimeUs; + ReadOptions::SeekMode mode; + if (options && options->getSeekTo(&seekTimeUs, &mode)) { + clearPendingFrames(); + mBlockIter.seek(seekTimeUs); + } + +again: + while (mPendingFrames.empty()) { + status_t err = readBlock(); + + if (err != OK) { + clearPendingFrames(); + + return err; + } + } + + MediaBuffer *frame = *mPendingFrames.begin(); + mPendingFrames.erase(mPendingFrames.begin()); + + size_t size = frame->range_length(); + + if (mType != AVC) { + *out = frame; + + return OK; + } + + if (size < mNALSizeLen) { + frame->release(); + frame = NULL; + + return ERROR_MALFORMED; + } + + // In the case of AVC content, each NAL unit is prefixed by + // mNALSizeLen bytes of length. We want to prefix the data with + // a four-byte 0x00000001 startcode instead of the length prefix. + // mNALSizeLen ranges from 1 through 4 bytes, so add an extra + // 3 bytes of padding to the buffer start. + static const size_t kPadding = 3; + + MediaBuffer *buffer = new MediaBuffer(size + kPadding); + + int64_t timeUs; + CHECK(frame->meta_data()->findInt64(kKeyTime, &timeUs)); + int32_t isSync; + CHECK(frame->meta_data()->findInt32(kKeyIsSyncFrame, &isSync)); + + buffer->meta_data()->setInt64(kKeyTime, timeUs); + buffer->meta_data()->setInt32(kKeyIsSyncFrame, isSync); + + memcpy((uint8_t *)buffer->data() + kPadding, + (const uint8_t *)frame->data() + frame->range_offset(), + size); + + buffer->set_range(kPadding, size); + + frame->release(); + frame = NULL; + + uint8_t *data = (uint8_t *)buffer->data(); + + size_t NALsize; + switch (mNALSizeLen) { + case 1: NALsize = data[kPadding]; break; + case 2: NALsize = U16_AT(&data[kPadding]); break; + case 3: NALsize = U24_AT(&data[kPadding]); break; + case 4: NALsize = U32_AT(&data[kPadding]); break; + default: + TRESPASS(); + } + + if (size < NALsize + mNALSizeLen) { + buffer->release(); + buffer = NULL; + + return ERROR_MALFORMED; + } + + if (size > NALsize + mNALSizeLen) { + LOGW("discarding %d bytes of data.", size - NALsize - mNALSizeLen); + } + + // actual data starts at &data[kPadding + mNALSizeLen] + + memcpy(&data[mNALSizeLen - 1], "\x00\x00\x00\x01", 4); + buffer->set_range(mNALSizeLen - 1, NALsize + 4); + + *out = buffer; return OK; } diff --git a/media/libstagefright/matroska/mkvparser.cpp b/media/libstagefright/matroska/mkvparser.cpp index 455b1d663753..7448d96337b2 100644 --- a/media/libstagefright/matroska/mkvparser.cpp +++ b/media/libstagefright/matroska/mkvparser.cpp @@ -4474,6 +4474,9 @@ bool Block::IsKey() const return ((m_flags & static_cast<unsigned char>(1 << 7)) != 0);
}
+unsigned char Block::Flags() const {
+ return m_flags;
+}
void Block::SetKey(bool bKey)
{
diff --git a/media/libstagefright/matroska/mkvparser.hpp b/media/libstagefright/matroska/mkvparser.hpp index c46d349b8deb..f7d89483bca3 100644 --- a/media/libstagefright/matroska/mkvparser.hpp +++ b/media/libstagefright/matroska/mkvparser.hpp @@ -80,6 +80,8 @@ public: bool IsKey() const;
void SetKey(bool);
+ unsigned char Flags() const;
+
long long GetOffset() const;
long GetSize() const;
long Read(IMkvReader*, unsigned char*) const;
diff --git a/packages/SystemUI/res/layout-xlarge/status_bar.xml b/packages/SystemUI/res/layout-xlarge/status_bar.xml index 0eaf08e53009..0533b6f5e66c 100644 --- a/packages/SystemUI/res/layout-xlarge/status_bar.xml +++ b/packages/SystemUI/res/layout-xlarge/status_bar.xml @@ -25,7 +25,8 @@ <FrameLayout android:id="@+id/bar_contents_holder" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="@*android:dimen/status_bar_height" + android:layout_gravity="bottom" > <RelativeLayout android:id="@+id/bar_contents" @@ -93,7 +94,8 @@ <FrameLayout android:id="@+id/bar_shadow_holder" android:layout_width="match_parent" - android:layout_height="match_parent" + android:layout_height="@*android:dimen/status_bar_height" + android:layout_gravity="bottom" > <!-- lights out shade --> <RelativeLayout diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml index df846f1d4fbd..caafbdb38fb8 100644 --- a/packages/SystemUI/res/values/strings.xml +++ b/packages/SystemUI/res/values/strings.xml @@ -108,4 +108,6 @@ <!-- Recent apps label. Shown as title on recent apps panel --> <string name="recent_tasks_app_label">Apps</string> + <!-- Network connection string for Bluetooth Reverse Tethering --> + <string name="bluetooth_tethered">Bluetooth tethered"</string> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java index 472a22568dc0..8fca759ebf15 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBar.java @@ -52,6 +52,7 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac // Up-call methods protected abstract View makeStatusBarView(); protected abstract int getStatusBarGravity(); + public abstract int getStatusBarHeight(); private DoNotDisturb mDoNotDisturb; @@ -104,8 +105,7 @@ public abstract class StatusBar extends SystemUI implements CommandQueue.Callbac } // Put up the view - final Resources res = mContext.getResources(); - final int height= res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); + final int height = getStatusBarHeight(); final WindowManager.LayoutParams lp = new WindowManager.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java index 0d6c5f65f218..132433b40cd7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -287,9 +287,13 @@ public class PhoneStatusBar extends StatusBar { return Gravity.TOP | Gravity.FILL_HORIZONTAL; } - private void addIntruderView() { + public int getStatusBarHeight() { final Resources res = mContext.getResources(); - final int height= res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); + return res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); + } + + private void addIntruderView() { + final int height = getStatusBarHeight(); WindowManager.LayoutParams lp = new WindowManager.LayoutParams( ViewGroup.LayoutParams.MATCH_PARENT, diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java index b0b93e01116b..cb5e36180d42 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/NetworkController.java @@ -77,7 +77,7 @@ public class NetworkController extends BroadcastReceiver { int mDataDirectionIconId; int mDataSignalIconId; int mDataTypeIconId; - + // wifi final WifiManager mWifiManager; boolean mWifiEnabled, mWifiConnected; @@ -85,6 +85,11 @@ public class NetworkController extends BroadcastReceiver { String mWifiSsid; int mWifiIconId; + // bluetooth + private boolean mBluetoothTethered = false; + private int mBluetoothTetherIconId = + com.android.internal.R.drawable.stat_sys_tether_bluetooth; + // data connectivity (regardless of state, can we access the internet?) // state of inet connection - 0 not connected, 100 connected private int mInetCondition = 0; @@ -104,7 +109,7 @@ public class NetworkController extends BroadcastReceiver { int mLastCombinedSignalIconId = -1; int mLastDataTypeIconId = -1; String mLastLabel = ""; - + // yuck -- stop doing this here and put it in the framework IBatteryStats mBatteryStats; @@ -235,7 +240,7 @@ public class NetworkController extends BroadcastReceiver { @Override public void onDataConnectionStateChanged(int state, int networkType) { if (DEBUG) { - Slog.d(TAG, "onDataConnectionStateChanged: state=" + state + Slog.d(TAG, "onDataConnectionStateChanged: state=" + state + " type=" + networkType); } mDataState = state; @@ -649,13 +654,22 @@ public class NetworkController extends BroadcastReceiver { mInetCondition = inetCondition; updateWifiIcons(); break; + case ConnectivityManager.TYPE_BLUETOOTH: + mInetCondition = inetCondition; + if (info != null) { + mBluetoothTethered = info.isConnected() ? true: false; + } else { + mBluetoothTethered = false; + } + break; } } // ===== Update the views ======================================================= - // figure out what to show: first wifi, then 3G, then nothing + // figure out what to show- there should be one connected network or nothing + // General order of preference is: wifi, 3G than bluetooth. This might vary by product. void refreshViews() { Context context = mContext; @@ -672,12 +686,16 @@ public class NetworkController extends BroadcastReceiver { } combinedSignalIconId = mWifiIconId; dataTypeIconId = 0; + } else if (mDataConnected) { + label = mNetworkName; + combinedSignalIconId = mDataSignalIconId; + dataTypeIconId = mDataTypeIconId; + } else if (mBluetoothTethered) { + label = mContext.getString(R.string.bluetooth_tethered); + combinedSignalIconId = mBluetoothTetherIconId; + dataTypeIconId = 0; } else { - if (mDataConnected) { - label = mNetworkName; - } else { - label = context.getString(R.string.status_bar_settings_signal_meter_disconnected); - } + label = context.getString(R.string.status_bar_settings_signal_meter_disconnected); combinedSignalIconId = mDataSignalIconId; dataTypeIconId = mDataTypeIconId; } @@ -689,7 +707,8 @@ public class NetworkController extends BroadcastReceiver { + " mDataDirectionIconId=0x" + Integer.toHexString(mDataDirectionIconId) + " mDataSignalIconId=0x" + Integer.toHexString(mDataSignalIconId) + " mDataTypeIconId=0x" + Integer.toHexString(mDataTypeIconId) - + " mWifiIconId=0x" + Integer.toHexString(mWifiIconId)); + + " mWifiIconId=0x" + Integer.toHexString(mWifiIconId) + + "mBluetoothTetherIconId=0x" + Integer.toHexString(mBluetoothTetherIconId)); } // the phone icon on phones @@ -809,6 +828,10 @@ public class NetworkController extends BroadcastReceiver { pw.print(" mWifiIconId="); pw.println(mWifiIconId); + pw.println(" - Bluetooth ----"); + pw.print(" mBtReverseTethered="); + pw.println(mBluetoothTethered); + pw.println(" - connectivity ------"); pw.print(" mInetCondition="); pw.println(mInetCondition); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/HeightReceiver.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/HeightReceiver.java new file mode 100644 index 000000000000..561615929571 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/HeightReceiver.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.systemui.statusbar.tablet; + +import java.util.ArrayList; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.content.res.Resources; +import android.util.DisplayMetrics; +import android.util.Slog; +import android.view.View; +import android.view.WindowManager; +import android.view.WindowManagerImpl; +import android.view.WindowManagerPolicy; + +public class HeightReceiver extends BroadcastReceiver { + private static final String TAG = "StatusBar.HeightReceiver"; + + public interface OnBarHeightChangedListener { + public void onBarHeightChanged(int height); + } + + Context mContext; + ArrayList<OnBarHeightChangedListener> mListeners = new ArrayList<OnBarHeightChangedListener>(); + WindowManager mWindowManager; + int mHeight; + + public HeightReceiver(Context context) { + mContext = context; + mWindowManager = WindowManagerImpl.getDefault(); + } + + public void addOnBarHeightChangedListener(OnBarHeightChangedListener l) { + mListeners.add(l); + l.onBarHeightChanged(mHeight); + } + + public void removeOnBarHeightChangedListener(OnBarHeightChangedListener l) { + mListeners.remove(l); + } + + @Override + public void onReceive(Context context, Intent intent) { + final boolean plugged + = intent.getBooleanExtra(WindowManagerPolicy.EXTRA_HDMI_PLUGGED_STATE, false); + setPlugged(plugged); + } + + public void registerReceiver() { + final IntentFilter filter = new IntentFilter(); + filter.addAction(WindowManagerPolicy.ACTION_HDMI_PLUGGED); + final Intent val = mContext.registerReceiver(this, filter); + onReceive(mContext, val); + } + + private void setPlugged(boolean plugged) { + final Resources res = mContext.getResources(); + + Slog.d(TAG, "plugged=" + plugged); + int height = -1; + if (plugged) { + final DisplayMetrics metrics = new DisplayMetrics(); + mWindowManager.getDefaultDisplay().getMetrics(metrics); + Slog.d(TAG, "metrics=" + metrics); + height = metrics.heightPixels - 720; + } + + final int minHeight + = res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height); + if (height < minHeight) { + height = minHeight; + } + Slog.d(TAG, "using height=" + height + " old=" + mHeight); + mHeight = height; + + final int N = mListeners.size(); + for (int i=0; i<N; i++) { + mListeners.get(i).onBarHeightChanged(height); + } + } + + public int getHeight() { + return mHeight; + } +} + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java index 3201d063ecf6..ffbc0e33b0cc 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/NotificationPanel.java @@ -58,7 +58,6 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, ViewGroup mContentParent; Choreographer mChoreo = new Choreographer(); - int mStatusBarHeight; public NotificationPanel(Context context, AttributeSet attrs) { this(context, attrs, 0); @@ -66,11 +65,6 @@ public class NotificationPanel extends RelativeLayout implements StatusBarPanel, public NotificationPanel(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); - - final Resources res = context.getResources(); - - mStatusBarHeight = res.getDimensionPixelSize( - com.android.internal.R.dimen.status_bar_height); } @Override diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java index cd39d71be3b2..f858f61b1b9c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -74,7 +74,8 @@ import com.android.systemui.statusbar.policy.BatteryController; import com.android.systemui.statusbar.policy.NetworkController; import com.android.systemui.recent.RecentApplicationsActivity; -public class TabletStatusBar extends StatusBar { +public class TabletStatusBar extends StatusBar implements + HeightReceiver.OnBarHeightChangedListener { public static final boolean DEBUG = false; public static final String TAG = "TabletStatusBar"; @@ -97,7 +98,9 @@ public class TabletStatusBar extends StatusBar { public static final int LIGHTS_ON_DELAY = 5000; - int mBarHeight = -1; + // The height of the bar, as definied by the build. It may be taller if we're plugged + // into hdmi. + int mNaturalBarHeight = -1; int mIconSize = -1; int mIconHPadding = -1; @@ -134,6 +137,7 @@ public class TabletStatusBar extends StatusBar { ViewGroup mPile; + HeightReceiver mHeightReceiver; BatteryController mBatteryController; NetworkController mNetworkController; @@ -269,15 +273,15 @@ public class TabletStatusBar extends StatusBar { } @Override - protected void onConfigurationChanged (Configuration newConfig) { + protected void onConfigurationChanged(Configuration newConfig) { loadDimens(); } protected void loadDimens() { final Resources res = mContext.getResources(); - mBarHeight = res.getDimensionPixelSize( - com.android.internal.R.dimen.status_bar_height); + mNaturalBarHeight = res.getDimensionPixelSize( + com.android.internal.R.dimen.status_bar_height); int newIconSize = res.getDimensionPixelSize( com.android.internal.R.dimen.status_bar_icon_size); @@ -298,6 +302,10 @@ public class TabletStatusBar extends StatusBar { mWindowManager = IWindowManager.Stub.asInterface( ServiceManager.getService(Context.WINDOW_SERVICE)); + // This guy will listen for HDMI plugged broadcasts so we can resize the + // status bar as appropriate. + mHeightReceiver = new HeightReceiver(mContext); + mHeightReceiver.registerReceiver(); loadDimens(); final TabletStatusBarView sb = (TabletStatusBarView)View.inflate( @@ -408,13 +416,33 @@ public class TabletStatusBar extends StatusBar { ScrollView scroller = (ScrollView)mPile.getParent(); scroller.setFillViewport(true); + mHeightReceiver.addOnBarHeightChangedListener(this); + return sb; } + public int getStatusBarHeight() { + return mHeightReceiver.getHeight(); + } + protected int getStatusBarGravity() { return Gravity.BOTTOM | Gravity.FILL_HORIZONTAL; } + public void onBarHeightChanged(int height) { + final WindowManager.LayoutParams lp + = (WindowManager.LayoutParams)mStatusBarView.getLayoutParams(); + if (lp == null) { + // haven't been added yet + return; + } + if (lp.height != height) { + lp.height = height; + final WindowManager wm = WindowManagerImpl.getDefault(); + wm.updateViewLayout(mStatusBarView, lp); + } + } + private class H extends Handler { public void handleMessage(Message m) { switch (m.what) { @@ -1048,7 +1076,7 @@ public class TabletStatusBar extends StatusBar { if (mIconLayout == null) return; final LinearLayout.LayoutParams params - = new LinearLayout.LayoutParams(mIconSize + 2*mIconHPadding, mBarHeight); + = new LinearLayout.LayoutParams(mIconSize + 2*mIconHPadding, mNaturalBarHeight); int N = mNotns.size(); diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java index 38eed506d193..6232afd21b5d 100644 --- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java @@ -2329,7 +2329,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // System.out.println("Features: 0x" + Integer.toHexString(features)); if ((features & ((1 << FEATURE_LEFT_ICON) | (1 << FEATURE_RIGHT_ICON))) != 0) { if (mIsFloating) { - layoutResource = com.android.internal.R.layout.dialog_title_icons; + TypedValue res = new TypedValue(); + getContext().getTheme().resolveAttribute( + com.android.internal.R.attr.dialogTitleIconsDecorLayout, res, true); + layoutResource = res.resourceId; } else { layoutResource = com.android.internal.R.layout.screen_title_icons; } @@ -2346,7 +2349,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // Special case for a window with a custom title. // If the window is floating, we need a dialog layout if (mIsFloating) { - layoutResource = com.android.internal.R.layout.dialog_custom_title; + TypedValue res = new TypedValue(); + getContext().getTheme().resolveAttribute( + com.android.internal.R.attr.dialogCustomTitleDecorLayout, res, true); + layoutResource = res.resourceId; } else { layoutResource = com.android.internal.R.layout.screen_custom_title; } @@ -2356,7 +2362,10 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback { // If no other features and not embedded, only need a title. // If the window is floating, we need a dialog layout if (mIsFloating) { - layoutResource = com.android.internal.R.layout.dialog_title; + TypedValue res = new TypedValue(); + getContext().getTheme().resolveAttribute( + com.android.internal.R.attr.dialogTitleDecorLayout, res, true); + layoutResource = res.resourceId; } else if ((features & (1 << FEATURE_ACTION_BAR)) != 0) { if ((features & (1 << FEATURE_ACTION_BAR_OVERLAY)) != 0) { layoutResource = com.android.internal.R.layout.screen_action_bar_overlay; diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java index 3e8318ed1786..243fa072623a 100755 --- a/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java +++ b/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java @@ -122,6 +122,8 @@ import android.media.IAudioService; import android.media.AudioManager; import java.io.File; +import java.io.FileReader; +import java.io.IOException; import java.util.ArrayList; /** @@ -712,6 +714,8 @@ public class PhoneWindowManager implements WindowManagerPolicy { if (new File("/sys/devices/virtual/switch/hdmi/state").exists()) { mHDMIObserver.startObserving("DEVPATH=/devices/virtual/switch/hdmi"); } + mHdmiPlugged = !readHdmiState(); + setHdmiPlugged(!mHdmiPlugged); // Note: the Configuration is not stable here, so we cannot load mStatusBarCanHide from // config_statusBarCanHide because the latter depends on the screen size @@ -2000,11 +2004,40 @@ public class PhoneWindowManager implements WindowManagerPolicy { mHdmiPlugged = plugged; updateRotation(Surface.FLAGS_ORIENTATION_ANIMATION_DISABLE); Intent intent = new Intent(ACTION_HDMI_PLUGGED); + intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY_BEFORE_BOOT); intent.putExtra(EXTRA_HDMI_PLUGGED_STATE, plugged); mContext.sendStickyBroadcast(intent); } } + boolean readHdmiState() { + final String filename = "/sys/class/switch/hdmi/state"; + FileReader reader = null; + try { + reader = new FileReader(filename); + char[] buf = new char[15]; + int n = reader.read(buf); + if (n > 1) { + return 0 != Integer.parseInt(new String(buf, 0, n-1)); + } else { + return false; + } + } catch (IOException ex) { + Slog.d(TAG, "couldn't read hdmi state from " + filename + ": " + ex); + return false; + } catch (NumberFormatException ex) { + Slog.d(TAG, "couldn't read hdmi state from " + filename + ": " + ex); + return false; + } finally { + if (reader != null) { + try { + reader.close(); + } catch (IOException ex) { + } + } + } + } + /** * @return Whether music is being played right now. */ diff --git a/services/java/com/android/server/WifiService.java b/services/java/com/android/server/WifiService.java index cff989286600..1b590ba2190b 100644 --- a/services/java/com/android/server/WifiService.java +++ b/services/java/com/android/server/WifiService.java @@ -954,8 +954,10 @@ public class WifiService extends IWifiManager.Stub { * @see #shouldDeviceStayAwake(int, int) */ private boolean shouldWifiStayAwake(int stayAwakeConditions, int pluggedType) { + //Never sleep when plugged in as long as the user has not changed the settings int wifiSleepPolicy = Settings.System.getInt(mContext.getContentResolver(), - Settings.System.WIFI_SLEEP_POLICY, Settings.System.WIFI_SLEEP_POLICY_DEFAULT); + Settings.System.WIFI_SLEEP_POLICY, + Settings.System.WIFI_SLEEP_POLICY_NEVER_WHILE_PLUGGED); if (wifiSleepPolicy == Settings.System.WIFI_SLEEP_POLICY_NEVER) { // Never sleep diff --git a/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetHostActivity.java b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetHostActivity.java index bb0fa6007808..2c8c5ba4cef6 100644 --- a/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetHostActivity.java +++ b/tests/appwidgets/AppWidgetHostTest/src/com/android/tests/appwidgethost/AppWidgetHostActivity.java @@ -46,14 +46,22 @@ public class AppWidgetHostActivity extends Activity AppWidgetContainerView mAppWidgetContainer; public AppWidgetHostActivity() { - mAppWidgetManager = AppWidgetManager.getInstance(this); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + mAppWidgetManager = AppWidgetManager.getInstance(this); + setContentView(R.layout.appwidget_host); + mHost = new AppWidgetHost(this, HOST_ID) { + protected AppWidgetHostView onCreateView(Context context, int appWidgetId, AppWidgetProviderInfo appWidget) { + return new MyAppWidgetView(appWidgetId); + } + }; + + findViewById(R.id.add_appwidget).setOnClickListener(mOnClickListener); mAppWidgetContainer = (AppWidgetContainerView)findViewById(R.id.appwidget_container); @@ -188,11 +196,7 @@ public class AppWidgetHostActivity extends Activity } } - AppWidgetHost mHost = new AppWidgetHost(this, HOST_ID) { - protected AppWidgetHostView onCreateView(Context context, int appWidgetId, AppWidgetProviderInfo appWidget) { - return new MyAppWidgetView(appWidgetId); - } - }; + AppWidgetHost mHost; } diff --git a/tools/layoutlib/bridge/src/android/graphics/BitmapFactory.java b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory.java index c57aef679c83..096498ba9bd1 100644 --- a/tools/layoutlib/bridge/src/android/graphics/BitmapFactory.java +++ b/tools/layoutlib/bridge/src/android/graphics/BitmapFactory.java @@ -351,7 +351,8 @@ public class BitmapFactory { If the exception happened on open, bm will be null. If it happened on close, bm is still valid. */ - Bridge.getLog().error(null, e); + Bridge.getLog().error(null, + String.format("Error decoding bitmap of id 0x%x", id), e); } finally { try { if (is != null) is.close(); diff --git a/tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java index e9fb30a2f2a1..5524f4f1c3fe 100644 --- a/tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/NinePatch_Delegate.java @@ -73,7 +73,7 @@ public final class NinePatch_Delegate { oos = new ObjectOutputStream(baos); oos.writeObject(chunk); } catch (IOException e) { - Bridge.getLog().error("Failed to serialize NinePatchChunk.", e); + Bridge.getLog().error(null, "Failed to serialize NinePatchChunk.", e); return null; } finally { if (oos != null) { @@ -196,10 +196,10 @@ public final class NinePatch_Delegate { sChunkCache.put(array, new SoftReference<NinePatchChunk>(chunk)); } } catch (IOException e) { - Bridge.getLog().error("Failed to deserialize NinePatchChunk content.", e); + Bridge.getLog().error(null, "Failed to deserialize NinePatchChunk content.", e); return null; } catch (ClassNotFoundException e) { - Bridge.getLog().error("Failed to deserialize NinePatchChunk class.", e); + Bridge.getLog().error(null, "Failed to deserialize NinePatchChunk class.", e); return null; } finally { if (ois != null) { diff --git a/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java b/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java index bc13b52edefc..33c2aed963a0 100644 --- a/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java +++ b/tools/layoutlib/bridge/src/android/graphics/Region_Delegate.java @@ -135,6 +135,123 @@ public class Region_Delegate { // ---- native methods ---- + /*package*/ static boolean isEmpty(Region thisRegion) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return true; + } + + return regionDelegate.mArea.isEmpty(); + } + + /*package*/ static boolean isRect(Region thisRegion) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return true; + } + + return regionDelegate.mArea.isRectangular(); + } + + /*package*/ static boolean isComplex(Region thisRegion) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return true; + } + + return regionDelegate.mArea.isSingular() == false; + } + + /*package*/ static boolean contains(Region thisRegion, int x, int y) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + return regionDelegate.mArea.contains(x, y); + } + + /*package*/ static boolean quickContains(Region thisRegion, + int left, int top, int right, int bottom) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + return regionDelegate.mArea.isRectangular() && + regionDelegate.mArea.contains(left, top, right - left, bottom - top); + } + + /*package*/ static boolean quickReject(Region thisRegion, + int left, int top, int right, int bottom) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + return regionDelegate.mArea.isEmpty() || + regionDelegate.mArea.intersects(left, top, right - left, bottom - top) == false; + } + + /*package*/ static boolean quickReject(Region thisRegion, Region rgn) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return false; + } + + Region_Delegate targetRegionDelegate = sManager.getDelegate(rgn.mNativeRegion); + if (targetRegionDelegate == null) { + return false; + } + + return regionDelegate.mArea.isEmpty() || + regionDelegate.mArea.getBounds().intersects( + targetRegionDelegate.mArea.getBounds()) == false; + + } + + /*package*/ static void translate(Region thisRegion, int dx, int dy, Region dst) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return; + } + + Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); + if (targetRegionDelegate == null) { + return; + } + + if (regionDelegate.mArea.isEmpty()) { + targetRegionDelegate.mArea = new Area(); + } else { + targetRegionDelegate.mArea = new Area(regionDelegate.mArea); + AffineTransform mtx = new AffineTransform(); + mtx.translate(dx, dy); + targetRegionDelegate.mArea.transform(mtx); + } + } + + /*package*/ static void scale(Region thisRegion, float scale, Region dst) { + Region_Delegate regionDelegate = sManager.getDelegate(thisRegion.mNativeRegion); + if (regionDelegate == null) { + return; + } + + Region_Delegate targetRegionDelegate = sManager.getDelegate(dst.mNativeRegion); + if (targetRegionDelegate == null) { + return; + } + + if (regionDelegate.mArea.isEmpty()) { + targetRegionDelegate.mArea = new Area(); + } else { + targetRegionDelegate.mArea = new Area(regionDelegate.mArea); + AffineTransform mtx = new AffineTransform(); + mtx.scale(scale, scale); + targetRegionDelegate.mArea.transform(mtx); + } + } + /*package*/ static int nativeConstructor() { Region_Delegate newDelegate = new Region_Delegate(); return sManager.addDelegate(newDelegate); diff --git a/tools/layoutlib/bridge/src/com/android/internal/util/XmlUtils_Delegate.java b/tools/layoutlib/bridge/src/com/android/internal/util/XmlUtils_Delegate.java new file mode 100644 index 000000000000..7fa167983814 --- /dev/null +++ b/tools/layoutlib/bridge/src/com/android/internal/util/XmlUtils_Delegate.java @@ -0,0 +1,70 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.internal.util; + + +/** + * Delegate used to provide new implementation of a select few methods of {@link XmlUtils} + * + * Through the layoutlib_create tool, the original methods of XmlUtils have been replaced + * by calls to methods of the same name in this delegate class. + * + */ +public class XmlUtils_Delegate { + /*package*/ static final int convertValueToInt(CharSequence charSeq, int defaultValue) { + if (null == charSeq) + return defaultValue; + + String nm = charSeq.toString(); + + // This code is copied from the original implementation. The issue is that + // The Dalvik libraries are able to handle Integer.parse("XXXXXXXX", 16) where XXXXXXX + // is > 80000000 but the Java VM cannot. + + int sign = 1; + int index = 0; + int len = nm.length(); + int base = 10; + + if ('-' == nm.charAt(0)) { + sign = -1; + index++; + } + + if ('0' == nm.charAt(index)) { + // Quick check for a zero by itself + if (index == (len - 1)) + return 0; + + char c = nm.charAt(index + 1); + + if ('x' == c || 'X' == c) { + index += 2; + base = 16; + } else { + index++; + base = 8; + } + } + else if ('#' == nm.charAt(index)) { + index++; + base = 16; + } + + return ((int)Long.parseLong(nm.substring(index), base)) * sign; + } +} diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java index c042327ebf1b..7713f4be0ee5 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/Bridge.java @@ -142,16 +142,6 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge { } @Override - public void error(String tag, Throwable t) { - String message = t.getMessage(); - if (message == null) { - message = t.getClass().getName(); - } - - System.err.println(message); - } - - @Override public void error(String tag, String message, Throwable throwable) { System.err.println(message); } @@ -328,7 +318,7 @@ public final class Bridge extends com.android.ide.common.rendering.api.Bridge { t2 = t.getCause(); } return new BridgeRenderSession(null, - ERROR_UNKNOWN.createResult(t2.getMessage(), t2)); + ERROR_UNKNOWN.createResult(t2.getMessage(), t)); } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java index 596cbfca2cb3..194687ebb48d 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeConstants.java @@ -48,7 +48,6 @@ public class BridgeConstants { public final static String PREFIX_ANDROID = "android:"; - public final static String RES_ANIM = "anim"; public final static String RES_ANIMATOR = "animator"; public final static String RES_STYLE = "style"; public final static String RES_ATTR = "attr"; diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java index 6ebc56c72a71..4c4eedb85c9c 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/BridgeRenderSession.java @@ -170,7 +170,9 @@ public class BridgeRenderSession extends RenderSession { /*package*/ BridgeRenderSession(RenderSessionImpl scene, Result lastResult) { mSession = scene; - mSession.setScene(this); + if (scene != null) { + mSession.setScene(this); + } mLastResult = lastResult; } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java index fb79473658b9..28a690b0dc4e 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeContext.java @@ -382,8 +382,9 @@ public final class BridgeContext extends Activity { defStyleValues = (StyleResourceValue)item; } } else { - // TODO: log the error properly - System.out.println("Failed to find defStyle: " + defStyleName); + Bridge.getLog().error(null, + String.format( + "Failed to find style '%s' in current theme", defStyleName)); } } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java index 1b59621be0bb..36aa33552933 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeInflater.java @@ -178,8 +178,10 @@ public final class BridgeInflater extends LayoutInflater { return inflate(bridgeParser, root); } catch (Exception e) { - Bridge.getLog().error(null, e); - // return null below. + Bridge.getLog().error(null, + "Failed to parse file " + f.getAbsolutePath(), e); + + return null; } } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java index 215c5f936628..a56800c036ec 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeResources.java @@ -43,7 +43,6 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileReader; -import java.io.IOException; import java.io.InputStream; /** @@ -173,14 +172,13 @@ public final class BridgeResources extends Resources { return ColorStateList.createFromXml(this, new BridgeXmlBlockParser(parser, mContext, resValue.isFramework())); - } catch (XmlPullParserException e) { - Bridge.getLog().error(null, e); - } catch (FileNotFoundException e) { - // will not happen, since we pre-check - } catch (IOException e) { - Bridge.getLog().error(null, e); - } + } catch (Exception e) { + // this is an error and not warning since the file existence is checked before + // attempting to parse it. + Bridge.getLog().error(null, "Failed to parse file " + value, e); + return null; + } } else { // try to load the color state list from an int try { @@ -245,7 +243,8 @@ public final class BridgeResources extends Resources { return new BridgeXmlBlockParser(parser, mContext, mPlatformResourceFlag[0]); } } catch (XmlPullParserException e) { - Bridge.getLog().error(null, e); + Bridge.getLog().error(null, + "Failed to configure parser for " + value.getValue(), e); // we'll return null below. } catch (FileNotFoundException e) { // this shouldn't happen since we check above. @@ -279,7 +278,8 @@ public final class BridgeResources extends Resources { return new BridgeXmlBlockParser(parser, mContext, mPlatformResourceFlag[0]); } } catch (XmlPullParserException e) { - Bridge.getLog().error(null, e); + Bridge.getLog().error(null, + "Failed to configure parser for " + value.getValue(), e); // we'll return null below. } catch (FileNotFoundException e) { // this shouldn't happen since we check above. diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java index d36846bc569c..7f118976de84 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeTypedArray.java @@ -322,9 +322,9 @@ public final class BridgeTypedArray extends TypedArray { } catch (Exception e) { // this is an error and not warning since the file existence is checked before // attempting to parse it. - Bridge.getLog().error(null, e); + Bridge.getLog().error(null, "Failed to parse file " + value, e); - // return null below. + return null; } // looks like were unable to resolve the color value. diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java index d2fef5e04bd4..5d5f2a163e76 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/RenderSessionImpl.java @@ -365,7 +365,7 @@ public class RenderSessionImpl { } // log it - mParams.getLog().error("Scene inflate failed", t); + mParams.getLog().error(null, "Scene inflate failed", t); return ERROR_INFLATION.createResult(t.getMessage(), t); } @@ -481,7 +481,7 @@ public class RenderSessionImpl { } // log it - mParams.getLog().error("Scene Render failed", t); + mParams.getLog().error(null, "Scene Render failed", t); return ERROR_UNKNOWN.createResult(t.getMessage(), t); } @@ -505,18 +505,18 @@ public class RenderSessionImpl { ResourceValue animationResource = null; int animationId = 0; if (isFrameworkAnimation) { - animationResource = mContext.getFrameworkResource(BridgeConstants.RES_ANIM, + animationResource = mContext.getFrameworkResource(BridgeConstants.RES_ANIMATOR, animationName); if (animationResource != null) { - animationId = Bridge.getResourceValue(BridgeConstants.RES_ANIM, + animationId = Bridge.getResourceValue(BridgeConstants.RES_ANIMATOR, animationName); } } else { - animationResource = mContext.getProjectResource(BridgeConstants.RES_ANIM, + animationResource = mContext.getProjectResource(BridgeConstants.RES_ANIMATOR, animationName); if (animationResource != null) { animationId = mContext.getProjectCallback().getResourceValue( - BridgeConstants.RES_ANIM, animationName); + BridgeConstants.RES_ANIMATOR, animationName); } } diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java index 5427f142697d..fb52c861dda7 100644 --- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java +++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/impl/ResourceHelper.java @@ -27,7 +27,6 @@ import com.android.ninepatch.NinePatchChunk; import org.kxml2.io.KXmlParser; import org.xmlpull.v1.XmlPullParser; -import org.xmlpull.v1.XmlPullParserException; import android.graphics.Bitmap; import android.graphics.Bitmap_Delegate; @@ -40,7 +39,6 @@ import android.graphics.drawable.NinePatchDrawable; import android.util.TypedValue; import java.io.File; -import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.net.MalformedURLException; @@ -162,7 +160,7 @@ public final class ResourceHelper { // URL is wrong, we'll return null below } catch (IOException e) { // failed to read the file, we'll return null below. - Bridge.getLog().error(null, e); + Bridge.getLog().error(null, "Failed lot load " + file.getAbsolutePath(), e); } } @@ -190,13 +188,14 @@ public final class ResourceHelper { d = Drawable.createFromXml(context.getResources(), new BridgeXmlBlockParser(parser, context, isFramework)); return d; - } catch (XmlPullParserException e) { - Bridge.getLog().error(null, e); - } catch (FileNotFoundException e) { - // will not happen, since we pre-check - } catch (IOException e) { - Bridge.getLog().error(null, e); + } catch (Exception e) { + // this is an error and not warning since the file existence is checked before + // attempting to parse it. + Bridge.getLog().error(null, "Failed to parse file " + value, e); } + } else { + Bridge.getLog().error(null, + String.format("File %s does not exist (or is not a file)", stringValue)); } return null; @@ -222,7 +221,7 @@ public final class ResourceHelper { return new BitmapDrawable(context.getResources(), bitmap); } catch (IOException e) { // we'll return null below - Bridge.getLog().error(null, e); + Bridge.getLog().error(null, "Failed lot load " + bmpFile.getAbsolutePath(), e); } } else { // attempt to get a color from the value diff --git a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java index 6b589d771690..4198006c5218 100644 --- a/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java +++ b/tools/layoutlib/create/src/com/android/tools/layoutlib/create/CreateInfo.java @@ -97,6 +97,7 @@ public final class CreateInfo implements ICreateInfo { "android.app.Fragment#instantiate", //(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;", "android.os.Handler#sendMessageAtTime", "android.view.View#isInEditMode", + "com.android.internal.util.XmlUtils#convertValueToInt" // TODO: comment out once DelegateClass is working // "android.content.res.Resources$Theme#obtainStyledAttributes", }; diff --git a/wifi/java/android/net/wifi/SupplicantStateTracker.java b/wifi/java/android/net/wifi/SupplicantStateTracker.java index 1a0050742a13..f96a5ae65e96 100644 --- a/wifi/java/android/net/wifi/SupplicantStateTracker.java +++ b/wifi/java/android/net/wifi/SupplicantStateTracker.java @@ -192,27 +192,16 @@ class SupplicantStateTracker extends HierarchicalStateMachine { @Override public void enter() { if (DBG) Log.d(TAG, getName() + "\n"); - mWifiStateMachine.setNetworkAvailable(false); } - @Override - public void exit() { - mWifiStateMachine.setNetworkAvailable(true); - } } class InactiveState extends HierarchicalState { @Override public void enter() { if (DBG) Log.d(TAG, getName() + "\n"); - mWifiStateMachine.setNetworkAvailable(false); } - @Override - public void exit() { - mWifiStateMachine.setNetworkAvailable(true); - } } - class DisconnectedState extends HierarchicalState { @Override public void enter() { @@ -336,4 +325,4 @@ class SupplicantStateTracker extends HierarchicalStateMachine { if (DBG) Log.d(TAG, getName() + "\n"); } } -}
\ No newline at end of file +} diff --git a/wifi/java/android/net/wifi/WifiStateMachine.java b/wifi/java/android/net/wifi/WifiStateMachine.java index 10faedaa1ad9..871811730679 100644 --- a/wifi/java/android/net/wifi/WifiStateMachine.java +++ b/wifi/java/android/net/wifi/WifiStateMachine.java @@ -299,10 +299,8 @@ public class WifiStateMachine extends HierarchicalStateMachine { static final int CMD_SET_FREQUENCY_BAND = 90; /* Commands from/to the SupplicantStateTracker */ - /* Indicates whether a wifi network is available for connection */ - static final int CMD_SET_NETWORK_AVAILABLE = 111; /* Reset the supplicant state tracker */ - static final int CMD_RESET_SUPPLICANT_STATE = 112; + static final int CMD_RESET_SUPPLICANT_STATE = 111; /* Commands/events reported by WpsStateMachine */ @@ -1451,10 +1449,6 @@ public class WifiStateMachine extends HierarchicalStateMachine { setWifiEnabled(true); } - void setNetworkAvailable(boolean available) { - sendMessage(obtainMessage(CMD_SET_NETWORK_AVAILABLE, available ? 1 : 0, 0)); - } - /******************************************************** * HSM states *******************************************************/ @@ -1480,9 +1474,6 @@ public class WifiStateMachine extends HierarchicalStateMachine { case CMD_ENABLE_RSSI_POLL: mEnableRssiPolling = (message.arg1 == 1); break; - case CMD_SET_NETWORK_AVAILABLE: - mNetworkInfo.setIsAvailable(message.arg1 == 1); - break; /* Discard */ case CMD_LOAD_DRIVER: case CMD_UNLOAD_DRIVER: @@ -1873,6 +1864,8 @@ public class WifiStateMachine extends HierarchicalStateMachine { EventLog.writeEvent(EVENTLOG_WIFI_STATE_CHANGED, getName()); /* Initialize for connect mode operation at start */ mIsScanMode = false; + /* Wifi is available as long as we have a connection to supplicant */ + mNetworkInfo.setIsAvailable(true); } @Override public boolean processMessage(Message message) { @@ -1886,6 +1879,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { Log.e(TAG, "Failed to stop supplicant, issue kill"); WifiNative.killSupplicant(); } + mNetworkInfo.setIsAvailable(false); handleNetworkDisconnect(); setWifiState(WIFI_STATE_DISABLING); sendSupplicantConnectionChangedBroadcast(false); @@ -1896,6 +1890,7 @@ public class WifiStateMachine extends HierarchicalStateMachine { Log.e(TAG, "Connection lost, restart supplicant"); WifiNative.killSupplicant(); WifiNative.closeSupplicantConnection(); + mNetworkInfo.setIsAvailable(false); handleNetworkDisconnect(); sendSupplicantConnectionChangedBroadcast(false); mSupplicantStateTracker.sendMessage(CMD_RESET_SUPPLICANT_STATE); @@ -1975,6 +1970,11 @@ public class WifiStateMachine extends HierarchicalStateMachine { } return HANDLED; } + + @Override + public void exit() { + mNetworkInfo.setIsAvailable(false); + } } class SupplicantStoppingState extends HierarchicalState { |