diff options
54 files changed, 219 insertions, 43 deletions
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java index 600ce6f71e16..8e3df472a3fe 100644 --- a/core/java/android/bluetooth/BluetoothAdapter.java +++ b/core/java/android/bluetooth/BluetoothAdapter.java @@ -1232,6 +1232,18 @@ public final class BluetoothAdapter { } /** + * Enable the Bluetooth Adapter, but don't auto-connect devices + * and don't persist state. Only for use by system applications. + * @hide + */ + public boolean enableNoAutoConnect() { + try { + return mService.enableNoAutoConnect(); + } catch (RemoteException e) {Log.e(TAG, "", e);} + return false; + } + + /** * Enable control of the Bluetooth Adapter for a single application. * * <p>Some applications need to use Bluetooth for short periods of time to diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl index deea2b801036..6075363e51b4 100644 --- a/core/java/android/bluetooth/IBluetooth.aidl +++ b/core/java/android/bluetooth/IBluetooth.aidl @@ -34,6 +34,7 @@ interface IBluetooth boolean isEnabled(); int getBluetoothState(); boolean enable(); + boolean enableNoAutoConnect(); boolean disable(boolean persistSetting); String getAddress(); diff --git a/core/java/android/server/BluetoothService.java b/core/java/android/server/BluetoothService.java index 36c01893c4c2..7a974554fd06 100755 --- a/core/java/android/server/BluetoothService.java +++ b/core/java/android/server/BluetoothService.java @@ -165,6 +165,8 @@ public class BluetoothService extends IBluetooth.Stub { private static String mDockAddress; private String mDockPin; + private boolean mAllowConnect = true; + private int mAdapterConnectionState = BluetoothAdapter.STATE_DISCONNECTED; private BluetoothPanProfileHandler mBluetoothPanProfileHandler; private BluetoothInputProfileHandler mBluetoothInputProfileHandler; @@ -472,7 +474,7 @@ public class BluetoothService extends IBluetooth.Stub { /** Bring up BT and persist BT on in settings */ public boolean enable() { - return enable(true); + return enable(true, true); } /** @@ -480,9 +482,11 @@ public class BluetoothService extends IBluetooth.Stub { * This turns on/off the underlying hardware. * * @param saveSetting If true, persist the new state of BT in settings + * @param allowConnect If true, auto-connects device when BT is turned on + * and allows incoming A2DP/HSP connections * @return True on success (so far) */ - public synchronized boolean enable(boolean saveSetting) { + public synchronized boolean enable(boolean saveSetting, boolean allowConnect) { mContext.enforceCallingOrSelfPermission(BLUETOOTH_ADMIN_PERM, "Need BLUETOOTH_ADMIN permission"); @@ -490,11 +494,29 @@ public class BluetoothService extends IBluetooth.Stub { if (mIsAirplaneSensitive && isAirplaneModeOn() && !mIsAirplaneToggleable) { return false; } + mAllowConnect = allowConnect; mBluetoothState.sendMessage(BluetoothAdapterStateMachine.USER_TURN_ON, saveSetting); return true; } /** + * Enable this Bluetooth device, asynchronously, but does not + * auto-connect devices. In this state the Bluetooth adapter + * also does not allow incoming A2DP/HSP connections (that + * must go through this service), but does allow communication + * on RFCOMM sockets implemented outside of this service (ie BTOPP). + * This method is used to temporarily enable Bluetooth + * for data transfer, without changing + * + * This turns on/off the underlying hardware. + * + * @return True on success (so far) + */ + public boolean enableNoAutoConnect() { + return enable(false, false); + } + + /** * Turn on Bluetooth Module, Load firmware, and do all the preparation * needed to get the Bluetooth Module ready but keep it not discoverable * and not connectable. @@ -2441,6 +2463,13 @@ public class BluetoothService extends IBluetooth.Stub { } private void autoConnect() { + synchronized (this) { + if (!mAllowConnect) { + Log.d(TAG, "Not auto-connecting devices because of temporary BT on state."); + return; + } + } + String[] bonds = getKnownDevices(); if (bonds == null) { return; @@ -2457,6 +2486,12 @@ public class BluetoothService extends IBluetooth.Stub { } public boolean notifyIncomingConnection(String address, boolean rejected) { + synchronized (this) { + if (!mAllowConnect) { + Log.d(TAG, "Not allowing incoming connection because of temporary BT on state."); + return false; + } + } BluetoothDeviceProfileState state = mDeviceProfileState.get(address); if (state != null) { Message msg = new Message(); @@ -2478,6 +2513,13 @@ public class BluetoothService extends IBluetooth.Stub { } /*package*/ boolean notifyIncomingA2dpConnection(String address, boolean rejected) { + synchronized (this) { + if (!mAllowConnect) { + Log.d(TAG, "Not allowing a2dp connection because of temporary BT on state."); + return false; + } + } + BluetoothDeviceProfileState state = mDeviceProfileState.get(address); if (state != null) { Message msg = new Message(); diff --git a/docs/html/training/basics/activity-lifecycle/starting.jd b/docs/html/training/basics/activity-lifecycle/starting.jd index d3266aef1718..1d328c717856 100644 --- a/docs/html/training/basics/activity-lifecycle/starting.jd +++ b/docs/html/training/basics/activity-lifecycle/starting.jd @@ -79,9 +79,9 @@ ensures your app behaves well in several ways, including that it:</p> while using your app.</li> <li>Does not consume valuable system resources when the user is not actively using it.</li> - <li>Does not loose the user's progress if they leave your app and return to it at a + <li>Does not lose the user's progress if they leave your app and return to it at a later time.</li> - <li>Does not crash of loose the user's progress when the screen rotates between + <li>Does not crash or lose the user's progress when the screen rotates between landscape and portrait orientation.</li> </ul> @@ -257,7 +257,7 @@ activity until they switch to a different activity.</p> <h2 id="Destroy">Destroy the Activity</h2> <p>While the activity's first lifecycle callback is {@link android.app.Activity#onCreate -onCreate()}, it's very last callback is {@link android.app.Activity#onDestroy}. The system calls +onCreate()}, its very last callback is {@link android.app.Activity#onDestroy}. The system calls this method on your activity as the final signal that your activity instance is being completely removed from the system memory.</p> diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_airplane_on.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_airplane_on.png Binary files differdeleted file mode 100644 index be65c74f0798..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_airplane_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back.png Binary files differindex 345aef6b7edc..38bd0cd18f42 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_ime.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_ime.png Binary files differindex 4b8f2635849c..6d4825e67922 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_ime.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_ime.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_land.png Binary files differindex f5ab80d6cd34..baeb49e1d93a 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_brightness.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_brightness.png Binary files differindex 316f0e1a342c..77eae9ad0515 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_brightness.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_brightness.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight.png Binary files differindex f2de78e6d0dc..f911e1197e66 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight_land.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight_land.png Binary files differindex 4da3f7aa07ad..a8c88cf375c8 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_highlight_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home.png Binary files differindex 8713c06c461c..0652753eabf2 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home_land.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home_land.png Binary files differindex 05efe0f35d4c..b8ea74058524 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_home_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png Binary files differindex 2263d5cc0f50..2d5594cbf8fe 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_large.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_large.png Binary files differindex a97440ea675d..5e8e7f6f664f 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_large.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_large.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_small.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_small.png Binary files differindex 7d45617299dd..3529974ca300 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_small.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_lights_out_dot_small.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu.png Binary files differindex d7b9670f16b5..bfec94364ba9 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu_land.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu_land.png Binary files differindex 5c1e7cc89160..3a6a2d840dff 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_menu_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_quicksettings.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_quicksettings.png Binary files differdeleted file mode 100644 index dd88daef814c..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_quicksettings.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent.png Binary files differindex da766c558164..61f409de310b 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent_land.png Binary files differindex c247d2855ccc..5629ccad778d 100644 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_rotate_on.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_rotate_on.png Binary files differdeleted file mode 100644 index 4c0e80caa443..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_rotate_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_wifi_on.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_wifi_on.png Binary files differdeleted file mode 100644 index 0d833b89b486..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_wifi_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_airplane_on.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_airplane_on.png Binary files differdeleted file mode 100644 index ecc822f39bca..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_airplane_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back.png Binary files differindex ac5841e8f810..0c12c1601e56 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_ime.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_ime.png Binary files differindex a479cc5e88b9..ec38e6a0ac2b 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_ime.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_ime.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_land.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_land.png Binary files differindex 4038951f9e11..23f976c2c4cf 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_back_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_brightness.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_brightness.png Binary files differindex 52f21ccfa210..f5fcb04554c1 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_brightness.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_brightness.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight.png Binary files differindex 6214f08dd5d8..0132e20516f3 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight_land.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight_land.png Binary files differindex bac44eb37dad..291444c05807 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_highlight_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home.png Binary files differindex dfecfc9314e0..e3e683c452f5 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home_land.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home_land.png Binary files differindex 71f8a367ab29..1f3410d21805 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_home_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_default.png Binary files differindex 1e79859d5dae..bea5339d9eaa 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_default.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_default.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_large.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_large.png Binary files differindex 0ee70861b9dc..1849a53a2303 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_large.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_large.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_small.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_small.png Binary files differindex f35c36bb955f..c5fe4df27d3e 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_small.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_lights_out_dot_small.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu.png Binary files differindex 7083de019a43..a0ea296c4d6f 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu_land.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu_land.png Binary files differindex 68c10c0d8a2a..54d9cdacf9f6 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_menu_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_quicksettings.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_quicksettings.png Binary files differdeleted file mode 100644 index 65e761d19b7f..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_quicksettings.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent.png Binary files differindex 67d6796ad7ba..670fed98a0f7 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent_land.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent_land.png Binary files differindex def3808b1736..a567e0742f7b 100644 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent_land.png +++ b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_recent_land.png diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_rotate_on.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_rotate_on.png Binary files differdeleted file mode 100644 index 6efef06ecced..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_rotate_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_wifi_on.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_wifi_on.png Binary files differdeleted file mode 100644 index 7efc161634f9..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_wifi_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_airplane_on.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_airplane_on.png Binary files differdeleted file mode 100644 index 8e5791f08743..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_airplane_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_quicksettings.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_quicksettings.png Binary files differdeleted file mode 100644 index d6afed139125..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_quicksettings.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_rotate_on.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_rotate_on.png Binary files differdeleted file mode 100644 index 61bcf6ea5e24..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_rotate_on.png +++ /dev/null diff --git a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_wifi_on.png b/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_wifi_on.png Binary files differdeleted file mode 100644 index a00a9b859e9d..000000000000 --- a/packages/SystemUI/res/drawable-sw600dp-xhdpi/ic_sysbar_wifi_on.png +++ /dev/null diff --git a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java index 6141eadbcf15..5387bf5bd455 100644 --- a/packages/SystemUI/src/com/android/systemui/ExpandHelper.java +++ b/packages/SystemUI/src/com/android/systemui/ExpandHelper.java @@ -17,6 +17,7 @@ package com.android.systemui; +import android.animation.AnimatorSet; import android.animation.ObjectAnimator; import android.content.Context; import android.graphics.RectF; @@ -38,6 +39,8 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { private static final String TAG = "ExpandHelper"; protected static final boolean DEBUG = false; private static final long EXPAND_DURATION = 250; + private static final long GLOW_DURATION = 150; + // amount of overstretch for maximum brightness expressed in U // 2f: maximum brightness is stretching a 1U to 3U, or a 4U to 6U @@ -60,7 +63,10 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { private Callback mCallback; private ScaleGestureDetector mDetector; private ViewScaler mScaler; - private ObjectAnimator mAnimation; + private ObjectAnimator mScaleAnimation; + private AnimatorSet mGlowAnimationSet; + private ObjectAnimator mGlowTopAnimation; + private ObjectAnimator mGlowBottomAnimation; private int mSmallSize; private int mLargeSize; @@ -110,6 +116,16 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { mContext = context; mCallback = callback; mScaler = new ViewScaler(); + + mScaleAnimation = ObjectAnimator.ofFloat(mScaler, "height", 0f); + mScaleAnimation.setDuration(EXPAND_DURATION); + + mGlowTopAnimation = ObjectAnimator.ofFloat(null, "alpha", 0f); + mGlowBottomAnimation = ObjectAnimator.ofFloat(null, "alpha", 0f); + mGlowAnimationSet = new AnimatorSet(); + mGlowAnimationSet.play(mGlowTopAnimation).with(mGlowBottomAnimation); + mGlowAnimationSet.setDuration(GLOW_DURATION); + mDetector = new ScaleGestureDetector(context, new ScaleGestureDetector.SimpleOnScaleGestureListener() { @@ -155,11 +171,22 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { }); } public void setGlow(float glow) { - if (mCurrViewTopGlow != null) { - mCurrViewTopGlow.setAlpha(glow); - } - if (mCurrViewBottomGlow != null) { - mCurrViewBottomGlow.setAlpha(glow); + if (!mGlowAnimationSet.isRunning()) { + if (mCurrViewTopGlow != null && mCurrViewBottomGlow != null) { + if (glow == 0f || mCurrViewTopGlow.getAlpha() == 0f) { + // animate glow in and out + mGlowTopAnimation.setTarget(mCurrViewTopGlow); + mGlowBottomAnimation.setTarget(mCurrViewBottomGlow); + mGlowTopAnimation.setFloatValues(glow); + mGlowBottomAnimation.setFloatValues(glow); + mGlowAnimationSet.setupStartValues(); + mGlowAnimationSet.start(); + } else { + // set it explicitly in reponse to touches. + mCurrViewTopGlow.setAlpha(glow); + mCurrViewBottomGlow.setAlpha(glow); + } + } } } @@ -216,8 +243,12 @@ public class ExpandHelper implements Gefingerpoken, OnClickListener { h = (force || h < mNaturalHeight) ? mSmallSize : mNaturalHeight; } if (DEBUG && mCurrView != null) mCurrView.setBackgroundColor(0); - mAnimation = ObjectAnimator.ofFloat(mScaler, "height", h).setDuration(EXPAND_DURATION); - mAnimation.start(); + if (mScaleAnimation.isRunning()) { + mScaleAnimation.cancel(); + } + mScaleAnimation.setFloatValues(h); + mScaleAnimation.setupStartValues(); + mScaleAnimation.start(); mStretching = false; setGlow(0f); clearView(); diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java index 722e312b4ed1..faa8d3ce1cd9 100644 --- a/services/java/com/android/server/ConnectivityService.java +++ b/services/java/com/android/server/ConnectivityService.java @@ -1366,7 +1366,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all - if (DBG) loge("Exception trying to remove a route: " + e); + if (VDBG) loge("Exception trying to remove a route: " + e); return false; } } else { @@ -1378,7 +1378,7 @@ private NetworkStateTracker makeWimaxStateTracker() { mNetd.removeSecondaryRoute(ifaceName, r); } catch (Exception e) { // never crash - catch them all - if (DBG) loge("Exception trying to remove a route: " + e); + if (VDBG) loge("Exception trying to remove a route: " + e); return false; } } diff --git a/services/java/com/android/server/NativeDaemonConnector.java b/services/java/com/android/server/NativeDaemonConnector.java index 0b5eaffe7f93..6a6c585fe73c 100644 --- a/services/java/com/android/server/NativeDaemonConnector.java +++ b/services/java/com/android/server/NativeDaemonConnector.java @@ -94,7 +94,7 @@ final class NativeDaemonConnector implements Runnable, Handler.Callback, Watchdo public boolean handleMessage(Message msg) { String event = (String) msg.obj; try { - if (!mCallbacks.onEvent(msg.what, event, event.split(" "))) { + if (!mCallbacks.onEvent(msg.what, event, NativeDaemonEvent.unescapeArgs(event))) { log(String.format("Unhandled event '%s'", event)); } } catch (Exception e) { diff --git a/services/java/com/android/server/NativeDaemonEvent.java b/services/java/com/android/server/NativeDaemonEvent.java index d5e9f660279f..f11ae1d391eb 100644 --- a/services/java/com/android/server/NativeDaemonEvent.java +++ b/services/java/com/android/server/NativeDaemonEvent.java @@ -16,6 +16,7 @@ package com.android.server; +import android.util.Slog; import com.google.android.collect.Lists; import java.util.ArrayList; @@ -32,12 +33,14 @@ public class NativeDaemonEvent { private final int mCode; private final String mMessage; private final String mRawEvent; + private String[] mParsed; private NativeDaemonEvent(int cmdNumber, int code, String message, String rawEvent) { mCmdNumber = cmdNumber; mCode = code; mMessage = message; mRawEvent = rawEvent; + mParsed = null; } public int getCmdNumber() { @@ -166,4 +169,86 @@ public class NativeDaemonEvent { } return result.toArray(new String[result.size()]); } + + /** + * Find the Nth field of the event. + * + * This ignores and code or cmdNum, the first return value is given for N=0. + * Also understands "\"quoted\" multiword responses" and tries them as a single field + */ + public String getField(int n) { + if (mParsed == null) { + mParsed = unescapeArgs(mRawEvent); + } + n += 2; // skip code and command# + if (n > mParsed.length) return null; + return mParsed[n]; + } + + public static String[] unescapeArgs(String rawEvent) { + final boolean DEBUG_ROUTINE = false; + final String LOGTAG = "unescapeArgs"; + final ArrayList<String> parsed = new ArrayList<String>(); + final int length = rawEvent.length(); + int current = 0; + int wordEnd = -1; + boolean quoted = false; + + if (DEBUG_ROUTINE) Slog.e(LOGTAG, "parsing '" + rawEvent + "'"); + if (rawEvent.charAt(current) == '\"') { + quoted = true; + current++; + } + while (current < length) { + // find the end of the word + if (quoted) { + wordEnd = current; + while ((wordEnd = rawEvent.indexOf('\"', wordEnd)) != -1) { + if (rawEvent.charAt(wordEnd - 1) != '\\') { + break; + } else { + wordEnd++; // skip this escaped quote and keep looking + } + } + } else { + wordEnd = rawEvent.indexOf(' ', current); + } + // if we didn't find the end-o-word token, take the rest of the string + if (wordEnd == -1) wordEnd = length; + String word = rawEvent.substring(current, wordEnd); + current += word.length(); + if (!quoted) { + word = word.trim(); + } else { + current++; // skip the trailing quote + } + // unescape stuff within the word + word.replace("\\\\", "\\"); + word.replace("\\\"", "\""); + + if (DEBUG_ROUTINE) Slog.e(LOGTAG, "found '" + word + "'"); + parsed.add(word); + + // find the beginning of the next word - either of these options + int nextSpace = rawEvent.indexOf(' ', current); + int nextQuote = rawEvent.indexOf(" \"", current); + if (DEBUG_ROUTINE) { + Slog.e(LOGTAG, "nextSpace=" + nextSpace + ", nextQuote=" + nextQuote); + } + if (nextQuote > -1 && nextQuote <= nextSpace) { + quoted = true; + current = nextQuote + 2; + } else { + quoted = false; + if (nextSpace > -1) { + current = nextSpace + 1; + } + } // else we just start the next word after the current and read til the end + if (DEBUG_ROUTINE) { + Slog.e(LOGTAG, "next loop - current=" + current + + ", length=" + length + ", quoted=" + quoted); + } + } + return parsed.toArray(new String[parsed.size()]); + } } diff --git a/services/java/com/android/server/wm/AppWindowAnimator.java b/services/java/com/android/server/wm/AppWindowAnimator.java index c3b5465d208b..696413727a70 100644 --- a/services/java/com/android/server/wm/AppWindowAnimator.java +++ b/services/java/com/android/server/wm/AppWindowAnimator.java @@ -15,6 +15,7 @@ import java.io.PrintWriter; * */ public class AppWindowAnimator { + static final String TAG = "AppWindowAnimator"; final AppWindowToken mAppToken; final WindowManagerService mService; @@ -43,6 +44,8 @@ public class AppWindowAnimator { Animation thumbnailAnimation; final Transformation thumbnailTransformation = new Transformation(); + static final Animation sDummyAnimation = new DummyAnimation(); + public AppWindowAnimator(final WindowManagerService service, final AppWindowToken atoken) { mService = service; mAppToken = atoken; @@ -51,7 +54,7 @@ public class AppWindowAnimator { public void setAnimation(Animation anim, boolean initialized) { if (WindowManagerService.localLOGV) Slog.v( - WindowManagerService.TAG, "Setting animation in " + this + ": " + anim); + TAG, "Setting animation in " + this + ": " + anim); animation = anim; animating = false; animInitialized = initialized; @@ -78,8 +81,8 @@ public class AppWindowAnimator { public void setDummyAnimation() { if (animation == null) { if (WindowManagerService.localLOGV) Slog.v( - WindowManagerService.TAG, "Setting dummy animation in " + this); - animation = WindowManagerService.sDummyAnimation; + TAG, "Setting dummy animation in " + this); + animation = sDummyAnimation; animInitialized = false; } } @@ -111,7 +114,7 @@ public class AppWindowAnimator { if (winAnimator.mAnimLayer > thumbnailLayer) { thumbnailLayer = winAnimator.mAnimLayer; } - if (WindowManagerService.DEBUG_LAYERS) Slog.v(WindowManagerService.TAG, "Updating layer " + w + ": " + if (WindowManagerService.DEBUG_LAYERS) Slog.v(TAG, "Updating layer " + w + ": " + winAnimator.mAnimLayer); if (w == mService.mInputMethodTarget && !mService.mInputMethodTargetWaitingAnim) { mService.setInputMethodAnimLayerAdjustment(adj); @@ -162,14 +165,12 @@ public class AppWindowAnimator { transformation.clear(); final boolean more = animation.getTransformation(currentTime, transformation); if (WindowManagerService.DEBUG_ANIM) Slog.v( - WindowManagerService.TAG, "Stepped animation in " + this + - ": more=" + more + ", xform=" + transformation); + TAG, "Stepped animation in " + this + ": more=" + more + ", xform=" + transformation); if (!more) { animation = null; clearThumbnail(); if (WindowManagerService.DEBUG_ANIM) Slog.v( - WindowManagerService.TAG, "Finished animation in " + this + - " @ " + currentTime); + TAG, "Finished animation in " + this + " @ " + currentTime); } hasTransformation = more; return more; @@ -180,11 +181,13 @@ public class AppWindowAnimator { if (mService.okToDisplay()) { // We will run animations as long as the display isn't frozen. - if (animation == WindowManagerService.sDummyAnimation) { + if (animation == sDummyAnimation) { // This guy is going to animate, but not yet. For now count // it as not animating for purposes of scheduling transactions; // when it is really time to animate, this will be set to // a real animation and the next call will execute normally. + hasTransformation = true; + transformation.setAlpha(mAppToken.reportedVisible ? 1 : 0); return false; } @@ -192,7 +195,7 @@ public class AppWindowAnimator { && animation != null) { if (!animating) { if (WindowManagerService.DEBUG_ANIM) Slog.v( - WindowManagerService.TAG, "Starting animation in " + this + + TAG, "Starting animation in " + this + " @ " + currentTime + ": dw=" + dw + " dh=" + dh + " scale=" + mService.mTransitionAnimationScale + " allDrawn=" + mAppToken.allDrawn + " animating=" + animating); @@ -245,7 +248,7 @@ public class AppWindowAnimator { } if (WindowManagerService.DEBUG_ANIM) Slog.v( - WindowManagerService.TAG, "Animation done in " + this + TAG, "Animation done in " + this + ": reportedVisible=" + mAppToken.reportedVisible); transformation.clear(); @@ -264,7 +267,7 @@ public class AppWindowAnimator { final int NW = mAppToken.allAppWindows.size(); for (int i=0; i<NW; i++) { WindowStateAnimator winAnimator = mAppToken.allAppWindows.get(i).mWinAnimator; - if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(WindowManagerService.TAG, + if (WindowManagerService.DEBUG_VISIBILITY) Slog.v(TAG, "performing show on: " + winAnimator); winAnimator.performShowLocked(); isAnimating |= winAnimator.isAnimating(); @@ -298,4 +301,15 @@ public class AppWindowAnimator { pw.println(thumbnailTransformation.toShortString()); } } + + // This is an animation that does nothing: it just immediately finishes + // itself every time it is called. It is used as a stub animation in cases + // where we want to synchronize multiple things that may be animating. + static final class DummyAnimation extends Animation { + @Override + public boolean getTransformation(long currentTime, Transformation outTransformation) { + return false; + } + } + } diff --git a/services/java/com/android/server/wm/WindowAnimator.java b/services/java/com/android/server/wm/WindowAnimator.java index 8333ab5eeb8f..f1ad53915623 100644 --- a/services/java/com/android/server/wm/WindowAnimator.java +++ b/services/java/com/android/server/wm/WindowAnimator.java @@ -130,7 +130,7 @@ public class WindowAnimator { for (i=0; i<NAT; i++) { final AppWindowAnimator appAnimator = mService.mAppTokens.get(i).mAppAnimator; final boolean wasAnimating = appAnimator.animation != null - && appAnimator.animation != WindowManagerService.sDummyAnimation; + && appAnimator.animation != AppWindowAnimator.sDummyAnimation; if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) { mAnimating = true; } else if (wasAnimating) { @@ -147,7 +147,7 @@ public class WindowAnimator { for (i=0; i<NEAT; i++) { final AppWindowAnimator appAnimator = mService.mExitingAppTokens.get(i).mAppAnimator; final boolean wasAnimating = appAnimator.animation != null - && appAnimator.animation != WindowManagerService.sDummyAnimation; + && appAnimator.animation != AppWindowAnimator.sDummyAnimation; if (appAnimator.stepAnimationLocked(mCurrentTime, mInnerDw, mInnerDh)) { mAnimating = true; } else if (wasAnimating) { diff --git a/services/java/com/android/server/wm/WindowManagerService.java b/services/java/com/android/server/wm/WindowManagerService.java index ff41899d5c2a..1f7b29780390 100755 --- a/services/java/com/android/server/wm/WindowManagerService.java +++ b/services/java/com/android/server/wm/WindowManagerService.java @@ -4111,7 +4111,7 @@ public class WindowManagerService extends IWindowManager.Stub boolean runningAppAnimation = false; if (transit != WindowManagerPolicy.TRANSIT_UNSET) { - if (wtoken.mAppAnimator.animation == sDummyAnimation) { + if (wtoken.mAppAnimator.animation == AppWindowAnimator.sDummyAnimation) { wtoken.mAppAnimator.animation = null; } if (applyAnimationLocked(wtoken, lp, transit, visible)) { @@ -6580,16 +6580,6 @@ public class WindowManagerService extends IWindowManager.Stub } } - // This is an animation that does nothing: it just immediately finishes - // itself every time it is called. It is used as a stub animation in cases - // where we want to synchronize multiple things that may be animating. - static final class DummyAnimation extends Animation { - public boolean getTransformation(long currentTime, Transformation outTransformation) { - return false; - } - } - static final Animation sDummyAnimation = new DummyAnimation(); - // ------------------------------------------------------------- // Async Handler // ------------------------------------------------------------- diff --git a/services/java/com/android/server/wm/WindowStateAnimator.java b/services/java/com/android/server/wm/WindowStateAnimator.java index 74e3304b02fd..9147a1062690 100644 --- a/services/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/java/com/android/server/wm/WindowStateAnimator.java @@ -390,10 +390,10 @@ class WindowStateAnimator { // This must be called while inside a transaction. boolean commitFinishDrawingLocked(long currentTime) { - //Slog.i(TAG, "commitFinishDrawingLocked: " + mSurface); if (mDrawState != COMMIT_DRAW_PENDING) { return false; } + //Slog.i(TAG, "commitFinishDrawingLocked: Draw pending. " + mSurface); mDrawState = READY_TO_SHOW; final boolean starting = mWin.mAttrs.type == TYPE_APPLICATION_STARTING; final AppWindowToken atoken = mWin.mAppToken; @@ -515,7 +515,8 @@ class WindowStateAnimator { @Override public String toString() { - return "Surface " + mName + ": shown=" + mShown + " layer=" + mLayer + return "Surface " + Integer.toHexString(System.identityHashCode(this)) + " " + + mName + ": shown=" + mShown + " layer=" + mLayer + " alpha=" + mSurfaceTraceAlpha + " " + mPosition.x + "," + mPosition.y + " " + mSize.x + "x" + mSize.y; } |