From ea193cebef78f954c505fd2547c067d6a9150de1 Mon Sep 17 00:00:00 2001 From: Daniel Sandler Date: Fri, 23 Sep 2011 15:56:52 -0400 Subject: [PATCH] DO NOT MERGE System bar now renders the back button for recents We used to render the back button in Recents itself, but that had an inconsistent visual experience. As a part of this change, add the early beginning of support for private status bar APIs for dimming navigation buttons. Bug: 3448536 Change-Id: Ie64369e3df3178178f35b56763ea96d380b6ddd4 --- core/java/android/app/StatusBarManager.java | 5 ++ ...ime_default.png => ic_sysbar_back_ime.png} | Bin .../ic_sysbar_back_ime_pressed.png | Bin 6719 -> 0 bytes ...ime_default.png => ic_sysbar_back_ime.png} | Bin .../ic_sysbar_back_ime_pressed.png | Bin 3485 -> 0 bytes ...ime_default.png => ic_sysbar_back_ime.png} | Bin .../ic_sysbar_back_ime_pressed.png | Bin 9956 -> 0 bytes .../res/drawable/ic_sysbar_back_ime.xml | 21 ----- .../status_bar_recent_panel.xml | 9 +- .../systemui/recent/RecentsPanelView.java | 55 ++++++++---- .../systemui/recent/StatusBarTouchProxy.java | 40 +++++++++ .../systemui/statusbar/CommandQueue.java | 13 +++ .../statusbar/phone/NavigationBarView.java | 32 +++++++ .../statusbar/phone/PhoneStatusBar.java | 26 +++++- .../statusbar/tablet/TabletStatusBar.java | 78 ++++++++++++------ .../statusbar/tablet/TabletStatusBarView.java | 5 +- 16 files changed, 213 insertions(+), 71 deletions(-) rename packages/SystemUI/res/drawable-hdpi/{ic_sysbar_back_ime_default.png => ic_sysbar_back_ime.png} (100%) delete mode 100644 packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_pressed.png rename packages/SystemUI/res/drawable-mdpi/{ic_sysbar_back_ime_default.png => ic_sysbar_back_ime.png} (100%) delete mode 100644 packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_pressed.png rename packages/SystemUI/res/drawable-xhdpi/{ic_sysbar_back_ime_default.png => ic_sysbar_back_ime.png} (100%) delete mode 100644 packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_pressed.png delete mode 100644 packages/SystemUI/res/drawable/ic_sysbar_back_ime.xml create mode 100644 packages/SystemUI/src/com/android/systemui/recent/StatusBarTouchProxy.java diff --git a/core/java/android/app/StatusBarManager.java b/core/java/android/app/StatusBarManager.java index 5b8addf2a7c2b..dd9f3376d74ef 100644 --- a/core/java/android/app/StatusBarManager.java +++ b/core/java/android/app/StatusBarManager.java @@ -56,6 +56,11 @@ public class StatusBarManager { | DISABLE_NOTIFICATION_ALERTS | DISABLE_NOTIFICATION_TICKER | DISABLE_SYSTEM_INFO | DISABLE_RECENT | DISABLE_HOME | DISABLE_BACK | DISABLE_CLOCK; + public static final int NAVIGATION_HINT_BACK_NOP = 1 << 0; + public static final int NAVIGATION_HINT_HOME_NOP = 1 << 1; + public static final int NAVIGATION_HINT_RECENT_NOP = 1 << 2; + public static final int NAVIGATION_HINT_BACK_ALT = 1 << 3; + private Context mContext; private IStatusBarService mService; private IBinder mToken = new Binder(); diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime.png similarity index 100% rename from packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_default.png rename to packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime.png diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_pressed.png deleted file mode 100644 index 475712560a740c10e6c26bd302d3623cb29b1b20..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6719 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 Ph6m7AH&8>X*uD54+&beH diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime.png similarity index 100% rename from packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_default.png rename to packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime.png diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_pressed.png deleted file mode 100644 index 0cd05a30b737104e5ef1f8fedce5dc40f7eae04b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3485 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 E4{5}e*8l(j diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime.png similarity index 100% rename from packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_default.png rename to packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime.png diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_pressed.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_pressed.png deleted file mode 100644 index 3e59c8dd0eaba79afd3cf49149970e70d3e0790c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9956 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 - - - - - - - diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml index 111f9a42de1ce..8e231d0a845cb 100644 --- a/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml +++ b/packages/SystemUI/res/layout-sw600dp/status_bar_recent_panel.xml @@ -32,7 +32,7 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_alignParentBottom="true" - android:paddingBottom="@*android:dimen/status_bar_height" + android:layout_marginBottom="@*android:dimen/status_bar_height" android:clipToPadding="false" android:clipChildren="false"> @@ -69,13 +69,12 @@ - diff --git a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java index 8bfd7111fb5aa..4aec22c9bbc77 100644 --- a/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java +++ b/packages/SystemUI/src/com/android/systemui/recent/RecentsPanelView.java @@ -68,10 +68,11 @@ public class RecentsPanelView extends RelativeLayout implements OnItemClickListe private View mRecentsScrim; private View mRecentsNoApps; private ViewGroup mRecentsContainer; + private StatusBarTouchProxy mStatusBarTouchProxy; private boolean mShowing; private Choreographer mChoreo; - private View mRecentsDismissButton; + OnRecentsPanelVisibilityChangedListener mVisibilityChangedListener; private RecentTasksLoader mRecentTasksLoader; private ArrayList mRecentTaskDescriptions; @@ -81,8 +82,8 @@ public class RecentsPanelView extends RelativeLayout implements OnItemClickListe private int mThumbnailWidth; private boolean mFitThumbnailToXY; - public void setRecentTasksLoader(RecentTasksLoader loader) { - mRecentTasksLoader = loader; + public static interface OnRecentsPanelVisibilityChangedListener { + public void onRecentsPanelVisibilityChanged(boolean visible); } private final class OnLongClickDelegate implements View.OnLongClickListener { @@ -171,15 +172,18 @@ public class RecentsPanelView extends RelativeLayout implements OnItemClickListe return super.onKeyUp(keyCode, event); } - public boolean isInContentArea(int x, int y) { - // use mRecentsContainer's exact bounds to determine horizontal position - final int l = mRecentsContainer.getLeft(); - final int r = mRecentsContainer.getRight(); - final int t = mRecentsContainer.getTop(); - final int b = mRecentsContainer.getBottom(); + private boolean pointInside(int x, int y, View v) { + final int l = v.getLeft(); + final int r = v.getRight(); + final int t = v.getTop(); + final int b = v.getBottom(); return x >= l && x < r && y >= t && y < b; } + public boolean isInContentArea(int x, int y) { + return pointInside(x, y, mRecentsContainer) || pointInside(x, y, mStatusBarTouchProxy); + } + public void show(boolean show, boolean animate) { show(show, animate, null); } @@ -278,7 +282,6 @@ public class RecentsPanelView extends RelativeLayout implements OnItemClickListe public void onAnimationStart(Animator animation) { } - /** * We need to be aligned at the bottom. LinearLayout can't do this, so instead, * let LinearLayout do all the hard work, and then shift everything down to the bottom. @@ -312,6 +315,29 @@ public class RecentsPanelView extends RelativeLayout implements OnItemClickListe public void setBar(StatusBar bar) { mBar = bar; + + } + + public void setStatusBarView(View statusBarView) { + if (mStatusBarTouchProxy != null) { + mStatusBarTouchProxy.setStatusBar(statusBarView); + } + } + + public void setRecentTasksLoader(RecentTasksLoader loader) { + mRecentTasksLoader = loader; + } + + public void setOnVisibilityChangedListener(OnRecentsPanelVisibilityChangedListener l) { + mVisibilityChangedListener = l; + + } + + public void setVisibility(int visibility) { + if (mVisibilityChangedListener != null) { + mVisibilityChangedListener.onRecentsPanelVisibilityChanged(visibility == VISIBLE); + } + super.setVisibility(visibility); } public RecentsPanelView(Context context, AttributeSet attrs) { @@ -335,6 +361,7 @@ public class RecentsPanelView extends RelativeLayout implements OnItemClickListe super.onFinishInflate(); mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE); mRecentsContainer = (ViewGroup) findViewById(R.id.recents_container); + mStatusBarTouchProxy = (StatusBarTouchProxy) findViewById(R.id.status_bar_touch_proxy); mListAdapter = new TaskDescriptionAdapter(mContext); if (mRecentsContainer instanceof RecentsHorizontalScrollView){ RecentsHorizontalScrollView scrollView @@ -355,14 +382,6 @@ public class RecentsPanelView extends RelativeLayout implements OnItemClickListe mRecentsScrim = findViewById(R.id.recents_bg_protect); mRecentsNoApps = findViewById(R.id.recents_no_apps); mChoreo = new Choreographer(this, mRecentsScrim, mRecentsContainer, mRecentsNoApps, this); - mRecentsDismissButton = findViewById(R.id.recents_dismiss_button); - if (mRecentsDismissButton != null) { - mRecentsDismissButton.setOnClickListener(new OnClickListener() { - public void onClick(View v) { - hide(true); - } - }); - } // In order to save space, we make the background texture repeat in the Y direction if (mRecentsScrim != null && mRecentsScrim.getBackground() instanceof BitmapDrawable) { diff --git a/packages/SystemUI/src/com/android/systemui/recent/StatusBarTouchProxy.java b/packages/SystemUI/src/com/android/systemui/recent/StatusBarTouchProxy.java new file mode 100644 index 0000000000000..ded114ff6d628 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/recent/StatusBarTouchProxy.java @@ -0,0 +1,40 @@ +/* + * 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.recent; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.MotionEvent; +import android.view.View; +import android.widget.FrameLayout; + +public class StatusBarTouchProxy extends FrameLayout { + + private View mStatusBar; + + public StatusBarTouchProxy(Context context, AttributeSet attrs) { + super(context, attrs); + } + + public void setStatusBar(View statusBar) { + mStatusBar = statusBar; + } + + public boolean onTouchEvent (MotionEvent event) { + return mStatusBar.dispatchTouchEvent(event); + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index bf2d5e88adddf..f8dfa8fcf6b0f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -62,6 +62,8 @@ public class CommandQueue extends IStatusBar.Stub { private static final int MSG_TOGGLE_RECENT_APPS = 11 << MSG_SHIFT; + private static final int MSG_SET_NAVIGATION_ICON_HINTS = 13 << MSG_SHIFT; + private StatusBarIconList mList; private Callbacks mCallbacks; private Handler mHandler = new H(); @@ -90,6 +92,7 @@ public class CommandQueue extends IStatusBar.Stub { public void setImeWindowStatus(IBinder token, int vis, int backDisposition); public void setHardKeyboardStatus(boolean available, boolean enabled); public void toggleRecentApps(); + public void setNavigationIconHints(int hints); } public CommandQueue(Callbacks callbacks, StatusBarIconList list) { @@ -196,6 +199,13 @@ public class CommandQueue extends IStatusBar.Stub { } } + public void setNavigationIconHints(int hints) { + synchronized (mList) { + mHandler.removeMessages(MSG_SET_NAVIGATION_ICON_HINTS); + mHandler.obtainMessage(MSG_SET_NAVIGATION_ICON_HINTS, hints, 0, null).sendToTarget(); + } + } + private final class H extends Handler { public void handleMessage(Message msg) { final int what = msg.what & MSG_MASK; @@ -265,6 +275,9 @@ public class CommandQueue extends IStatusBar.Stub { case MSG_TOGGLE_RECENT_APPS: mCallbacks.toggleRecentApps(); break; + case MSG_SET_NAVIGATION_ICON_HINTS: + mCallbacks.setNavigationIconHints(msg.arg1); + break; } } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java index 005d12f1bdb67..d33ed3fb41da7 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java @@ -18,6 +18,8 @@ package com.android.systemui.statusbar.phone; import android.animation.Animator; import android.animation.AnimatorListenerAdapter; +import android.animation.ObjectAnimator; +import android.app.StatusBarManager; import android.content.Context; import android.content.res.Resources; import android.graphics.Rect; @@ -33,6 +35,7 @@ import android.view.View; import android.view.ViewGroup; import android.view.Surface; import android.view.WindowManager; +import android.widget.ImageView; import android.widget.LinearLayout; import java.io.FileDescriptor; @@ -63,6 +66,7 @@ public class NavigationBarView extends LinearLayout { boolean mHidden, mLowProfile, mShowMenu; int mDisabledFlags = 0; + int mNavigationIconHints = 0; // workaround for LayoutTransitions leaving the nav buttons in a weird state (bug 5549288) final static boolean WORKAROUND_INVALID_LAYOUT = true; @@ -143,6 +147,34 @@ public class NavigationBarView extends LinearLayout { } }; + public void setNavigationIconHints(int hints) { + setNavigationIconHints(hints, false); + } + + public void setNavigationIconHints(int hints, boolean force) { + if (!force && hints == mNavigationIconHints) return; + + if (DEBUG) { + android.widget.Toast.makeText(mContext, + "Navigation icon hints = " + hints, + 500).show(); + } + + mNavigationIconHints = hints; + + getBackButton().setAlpha( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_BACK_NOP)) ? 0.5f : 1.0f); + getHomeButton().setAlpha( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_HOME_NOP)) ? 0.5f : 1.0f); + getRecentsButton().setAlpha( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_RECENT_NOP)) ? 0.5f : 1.0f); + + ((ImageView)getBackButton()).setImageResource( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_BACK_ALT)) + ? R.drawable.ic_sysbar_back_ime + : R.drawable.ic_sysbar_back); + } + public void setDisabledFlags(int disabledFlags) { setDisabledFlags(disabledFlags, false); } 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 3c9d12ce22214..5a1e3f440edd6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java @@ -32,6 +32,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager.NameNotFoundException; import android.content.res.Resources; import android.content.res.Configuration; +import android.inputmethodservice.InputMethodService; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -229,6 +230,8 @@ public class PhoneStatusBar extends StatusBar { DisplayMetrics mDisplayMetrics = new DisplayMetrics(); + private int mNavigationIconHints = 0; + private class ExpandedDialog extends Dialog { ExpandedDialog(Context context) { super(context, com.android.internal.R.style.Theme_Translucent_NoTitleBar); @@ -1540,6 +1543,17 @@ public class PhoneStatusBar extends StatusBar { event.offsetLocation(-deltaX, -deltaY); } + @Override // CommandQueue + public void setNavigationIconHints(int hints) { + if (hints == mNavigationIconHints) return; + + mNavigationIconHints = hints; + + if (mNavigationBarView != null) { + mNavigationBarView.setNavigationIconHints(hints); + } + } + @Override // CommandQueue public void setSystemUiVisibility(int vis) { final int old = mSystemUiVisibility; @@ -1590,8 +1604,16 @@ public class PhoneStatusBar extends StatusBar { if (showMenu) setLightsOn(true); } - // Not supported - public void setImeWindowStatus(IBinder token, int vis, int backDisposition) { } + @Override + public void setImeWindowStatus(IBinder token, int vis, int backDisposition) { + boolean altBack = (backDisposition == InputMethodService.BACK_DISPOSITION_WILL_DISMISS) + || ((vis & InputMethodService.IME_VISIBLE) != 0); + + mCommandQueue.setNavigationIconHints( + altBack ? (mNavigationIconHints | StatusBarManager.NAVIGATION_HINT_BACK_ALT) + : (mNavigationIconHints & ~StatusBarManager.NAVIGATION_HINT_BACK_ALT)); + } + @Override public void setHardKeyboardStatus(boolean available, boolean enabled) { } 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 92fbc7e8f85b6..09e38ff31434f 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java @@ -88,7 +88,8 @@ import com.android.systemui.statusbar.policy.Prefs; public class TabletStatusBar extends StatusBar implements HeightReceiver.OnBarHeightChangedListener, - InputMethodsPanel.OnHardKeyboardEnabledChangeListener { + InputMethodsPanel.OnHardKeyboardEnabledChangeListener, + RecentsPanelView.OnRecentsPanelVisibilityChangedListener { public static final boolean DEBUG = false; public static final boolean DEBUG_COMPAT_HELP = false; public static final String TAG = "TabletStatusBar"; @@ -145,6 +146,7 @@ public class TabletStatusBar extends StatusBar implements View mHomeButton; View mMenuButton; View mRecentButton; + private boolean mAltBackButtonEnabledForIme; ViewGroup mFeedbackIconArea; // notification icons, IME icon, compat icon InputMethodButton mInputMethodSwitchButton; @@ -195,6 +197,8 @@ public class TabletStatusBar extends StatusBar implements // used to notify status bar for suppressing notification LED private boolean mPanelSlightlyVisible; + private int mNavigationIconHints = 0; + public Context getContext() { return mContext; } protected void addPanelWindows() { @@ -307,12 +311,11 @@ public class TabletStatusBar extends StatusBar implements mRecentsPanel = (RecentsPanelView) View.inflate(context, R.layout.status_bar_recent_panel, null); mRecentsPanel.setVisibility(View.GONE); - mRecentsPanel.setSystemUiVisibility(View.STATUS_BAR_DISABLE_BACK); mRecentsPanel.setOnTouchListener(new TouchOutsideListener(MSG_CLOSE_RECENTS_PANEL, mRecentsPanel)); + mRecentsPanel.setOnVisibilityChangedListener(this); mRecentsPanel.setRecentTasksLoader(mRecentTasksLoader); mRecentTasksLoader.setRecentsPanel(mRecentsPanel); - mStatusBarView.setIgnoreChildren(2, mRecentButton, mRecentsPanel); lp = new WindowManager.LayoutParams( (int) res.getDimension(R.dimen.status_bar_recents_width), @@ -331,6 +334,7 @@ public class TabletStatusBar extends StatusBar implements WindowManagerImpl.getDefault().addView(mRecentsPanel, lp); mRecentsPanel.setBar(this); + mRecentsPanel.setStatusBarView(mStatusBarView); // Input methods Panel mInputMethodsPanel = (InputMethodsPanel) View.inflate(context, @@ -339,7 +343,7 @@ public class TabletStatusBar extends StatusBar implements mInputMethodsPanel.setOnTouchListener(new TouchOutsideListener( MSG_CLOSE_INPUT_METHODS_PANEL, mInputMethodsPanel)); mInputMethodsPanel.setImeSwitchButton(mInputMethodSwitchButton); - mStatusBarView.setIgnoreChildren(3, mInputMethodSwitchButton, mInputMethodsPanel); + mStatusBarView.setIgnoreChildren(2, mInputMethodSwitchButton, mInputMethodsPanel); lp = new WindowManager.LayoutParams( ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT, @@ -362,7 +366,7 @@ public class TabletStatusBar extends StatusBar implements MSG_CLOSE_COMPAT_MODE_PANEL, mCompatModePanel)); mCompatModePanel.setTrigger(mCompatModeButton); mCompatModePanel.setVisibility(View.GONE); - mStatusBarView.setIgnoreChildren(4, mCompatModeButton, mCompatModePanel); + mStatusBarView.setIgnoreChildren(3, mCompatModeButton, mCompatModePanel); lp = new WindowManager.LayoutParams( 250, ViewGroup.LayoutParams.WRAP_CONTENT, @@ -448,6 +452,10 @@ public class TabletStatusBar extends StatusBar implements } } + public View getStatusBarView() { + return mStatusBarView; + } + protected View makeStatusBarView() { final Context context = mContext; @@ -1109,6 +1117,31 @@ public class TabletStatusBar extends StatusBar implements } } + @Override // CommandQueue + public void setNavigationIconHints(int hints) { + if (hints == mNavigationIconHints) return; + + if (DEBUG) { + android.widget.Toast.makeText(mContext, + "Navigation icon hints = " + hints, + 500).show(); + } + + mNavigationIconHints = hints; + + mBackButton.setAlpha( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_BACK_NOP)) ? 0.5f : 1.0f); + mHomeButton.setAlpha( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_HOME_NOP)) ? 0.5f : 1.0f); + mRecentButton.setAlpha( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_RECENT_NOP)) ? 0.5f : 1.0f); + + mBackButton.setImageResource( + (0 != (hints & StatusBarManager.NAVIGATION_HINT_BACK_ALT)) + ? R.drawable.ic_sysbar_back_ime + : R.drawable.ic_sysbar_back); + } + private void notifyUiVisibilityChanged() { try { mWindowManager.statusBarVisibilityChanged(mSystemUiVisibility); @@ -1212,30 +1245,29 @@ public class TabletStatusBar extends StatusBar implements (vis & InputMethodService.IME_ACTIVE) != 0); updateNotificationIcons(); mInputMethodsPanel.setImeToken(token); - int res; - switch (backDisposition) { - case InputMethodService.BACK_DISPOSITION_WILL_NOT_DISMISS: - res = R.drawable.ic_sysbar_back; - break; - case InputMethodService.BACK_DISPOSITION_WILL_DISMISS: - res = R.drawable.ic_sysbar_back_ime; - break; - case InputMethodService.BACK_DISPOSITION_DEFAULT: - default: - if ((vis & InputMethodService.IME_VISIBLE) != 0) { - res = R.drawable.ic_sysbar_back_ime; - } else { - res = R.drawable.ic_sysbar_back; - } - break; - } - mBackButton.setImageResource(res); + + boolean altBack = (backDisposition == InputMethodService.BACK_DISPOSITION_WILL_DISMISS) + || ((vis & InputMethodService.IME_VISIBLE) != 0); + mAltBackButtonEnabledForIme = altBack; + + mCommandQueue.setNavigationIconHints( + altBack ? (mNavigationIconHints | StatusBarManager.NAVIGATION_HINT_BACK_ALT) + : (mNavigationIconHints & ~StatusBarManager.NAVIGATION_HINT_BACK_ALT)); + if (FAKE_SPACE_BAR) { mFakeSpaceBar.setVisibility(((vis & InputMethodService.IME_VISIBLE) != 0) ? View.VISIBLE : View.GONE); } } + @Override + public void onRecentsPanelVisibilityChanged(boolean visible) { + boolean altBack = visible || mAltBackButtonEnabledForIme; + mCommandQueue.setNavigationIconHints( + altBack ? (mNavigationIconHints | StatusBarManager.NAVIGATION_HINT_BACK_ALT) + : (mNavigationIconHints & ~StatusBarManager.NAVIGATION_HINT_BACK_ALT)); + } + @Override public void setHardKeyboardStatus(boolean available, boolean enabled) { if (DEBUG) { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java index 7d112516a9d07..877a40efae31a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java @@ -46,10 +46,11 @@ public class TabletStatusBarView extends FrameLayout { if (TabletStatusBar.DEBUG) { Slog.d(TabletStatusBar.TAG, "TabletStatusBarView intercepting touch event: " + ev); } + // do not close the recents panel here- the intended behavior is that recents is dismissed + // on touch up when clicking on status bar buttons + // TODO: should we be closing the notification panel and input methods panel? mHandler.removeMessages(TabletStatusBar.MSG_CLOSE_NOTIFICATION_PANEL); mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_NOTIFICATION_PANEL); - mHandler.removeMessages(TabletStatusBar.MSG_CLOSE_RECENTS_PANEL); - mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_RECENTS_PANEL); mHandler.removeMessages(TabletStatusBar.MSG_CLOSE_INPUT_METHODS_PANEL); mHandler.sendEmptyMessage(TabletStatusBar.MSG_CLOSE_INPUT_METHODS_PANEL); mHandler.removeMessages(TabletStatusBar.MSG_STOP_TICKER);