diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png
deleted file mode 100644
index eb6eb0c82391a..0000000000000
Binary files a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_default.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png
deleted file mode 100644
index 11f66f547cf04..0000000000000
Binary files a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_ime_pressed.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png
deleted file mode 100644
index f907de7e73aa0..0000000000000
Binary files a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_default.png and /dev/null differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png
deleted file mode 100644
index 36f8853a21a06..0000000000000
Binary files a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_ime_pressed.png and /dev/null differ
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
new file mode 100644
index 0000000000000..1a9d88c0b664a
Binary files /dev/null and b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_default.png differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png
new file mode 100644
index 0000000000000..a6d7507dd30b7
Binary files /dev/null and b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_ime_pressed.png differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png
index e2584e3a2f9a7..1e1324a6bb19d 100644
Binary files a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png and b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_default.png differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png
index 58b85102d9b31..e4e13c52b3026 100644
Binary files a/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png and b/packages/SystemUI/res/drawable-sw600dp-hdpi/ic_sysbar_zoom_pressed.png differ
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
new file mode 100644
index 0000000000000..33edce00137ca
Binary files /dev/null and b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_default.png differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_pressed.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_pressed.png
new file mode 100644
index 0000000000000..8bab6cf338f78
Binary files /dev/null and b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_ime_pressed.png differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_default.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_default.png
index 2795c345f62ef..89d486f391dec 100644
Binary files a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_default.png and b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_default.png differ
diff --git a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_pressed.png b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_pressed.png
index bbed6a6467d6b..b134436072556 100644
Binary files a/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_pressed.png and b/packages/SystemUI/res/drawable-sw600dp-mdpi/ic_sysbar_zoom_pressed.png differ
diff --git a/packages/SystemUI/res/drawable/ic_sysbar_zoom.xml b/packages/SystemUI/res/drawable/ic_sysbar_zoom.xml
index 977e00205e6fd..97d0348f0a3bf 100644
--- a/packages/SystemUI/res/drawable/ic_sysbar_zoom.xml
+++ b/packages/SystemUI/res/drawable/ic_sysbar_zoom.xml
@@ -16,6 +16,7 @@
+
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar.xml b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
index 707a8cb56f730..d9f3f2324499c 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar.xml
@@ -75,13 +75,6 @@
systemui:keyCode="82"
android:visibility="invisible"
/>
-
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_compat_mode_panel.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_compat_mode_panel.xml
new file mode 100644
index 0000000000000..c151565fe798f
--- /dev/null
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_compat_mode_panel.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
diff --git a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
index f53b29e36beb7..fecfe7f1ae1b2 100644
--- a/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
+++ b/packages/SystemUI/res/layout-sw600dp/status_bar_notification_area.xml
@@ -27,7 +27,7 @@
>
-
+
+
+
-
diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
index dec8b672734b9..944e0eeffe6d2 100644
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
@@ -26,5 +26,6 @@
512dp
770dp
+
+ 56dp
-
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 446827b2869ed..973a4b2849ed5 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -143,4 +143,11 @@
Use by default for this USB accessory
+
+ Zoom to fill screen
+
+
+ Stretch to fill screen
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java
index c3052e8c3d2cd..7fbf7344a25be 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CompatModeButton.java
@@ -27,7 +27,8 @@ import android.widget.ImageView;
import com.android.systemui.R;
-public class CompatModeButton extends ImageView implements View.OnClickListener {
+public class CompatModeButton extends ImageView {
+ private static final boolean DEBUG = false;
private static final String TAG = "StatusBar.CompatModeButton";
private ActivityManager mAM;
@@ -43,22 +44,14 @@ public class CompatModeButton extends ImageView implements View.OnClickListener
mAM = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
- setOnClickListener(this);
-
refresh();
}
- @Override
- public void onClick(View v) {
- mAM.setFrontActivityScreenCompatMode(ActivityManager.COMPAT_MODE_TOGGLE);
- }
-
public void refresh() {
int mode = mAM.getFrontActivityScreenCompatMode();
- setVisibility((mode == ActivityManager.COMPAT_MODE_NEVER
- || mode == ActivityManager.COMPAT_MODE_ALWAYS)
- ? View.GONE
- : View.VISIBLE
- );
+ final boolean vis = (mode != ActivityManager.COMPAT_MODE_NEVER
+ && mode != ActivityManager.COMPAT_MODE_ALWAYS);
+ if (DEBUG) Slog.d(TAG, "compat mode is " + mode + "; icon will " + (vis ? "show" : "hide"));
+ setVisibility(vis ? View.VISIBLE : View.GONE);
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/CompatModePanel.java b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/CompatModePanel.java
new file mode 100644
index 0000000000000..5a82d1b47e57e
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/CompatModePanel.java
@@ -0,0 +1,115 @@
+/*
+ * 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 android.app.ActivityManager;
+import android.content.Context;
+import android.content.res.TypedArray;
+import android.os.RemoteException;
+import android.util.AttributeSet;
+import android.util.Slog;
+import android.view.View;
+import android.widget.FrameLayout;
+import android.widget.ImageView;
+import android.widget.RadioButton;
+import android.widget.RadioGroup;
+
+import com.android.systemui.R;
+
+public class CompatModePanel extends FrameLayout implements StatusBarPanel,
+ View.OnClickListener {
+ private static final boolean DEBUG = TabletStatusBar.DEBUG;
+ private static final String TAG = "CompatModePanel";
+
+ private ActivityManager mAM;
+
+ private boolean mAttached = false;
+ private Context mContext;
+ private RadioButton mOnButton, mOffButton;
+
+ private View mTrigger;
+// private InputMethodButton mInputMethodSwitchButton;
+
+ public CompatModePanel(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ mContext = context;
+ mAM = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
+ }
+
+ @Override
+ public void onFinishInflate() {
+ mOnButton = (RadioButton) findViewById(R.id.compat_mode_on_radio);
+ mOffButton = (RadioButton) findViewById(R.id.compat_mode_off_radio);
+ mOnButton.setOnClickListener(this);
+ mOffButton.setOnClickListener(this);
+
+ refresh();
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ if (mAttached) {
+ mAttached = false;
+ }
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ if (!mAttached) {
+ mAttached = true;
+ }
+ }
+
+ @Override
+ public void onClick(View v) {
+ if (v == mOnButton) {
+ mAM.setFrontActivityScreenCompatMode(ActivityManager.COMPAT_MODE_ENABLED);
+ } else if (v == mOffButton) {
+ mAM.setFrontActivityScreenCompatMode(ActivityManager.COMPAT_MODE_DISABLED);
+ }
+ }
+
+ @Override
+ public boolean isInContentArea(int x, int y) {
+ return false;
+ }
+
+ public void setTrigger(View v) {
+ mTrigger = v;
+ }
+
+ public void openPanel() {
+ setVisibility(View.VISIBLE);
+ if (mTrigger != null) mTrigger.setSelected(true);
+ refresh();
+ }
+
+ public void closePanel() {
+ setVisibility(View.GONE);
+ if (mTrigger != null) mTrigger.setSelected(false);
+ }
+
+ private void refresh() {
+ int mode = mAM.getFrontActivityScreenCompatMode();
+ final boolean on = (mode == ActivityManager.COMPAT_MODE_ENABLED);
+ mOnButton.setChecked(on);
+ mOffButton.setChecked(!on);
+ }
+
+}
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 b304ebca2a67b..412cfc7944c12 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBar.java
@@ -92,6 +92,8 @@ public class TabletStatusBar extends StatusBar implements
public static final int MSG_HIDE_CHROME = 1031;
public static final int MSG_OPEN_INPUT_METHODS_PANEL = 1040;
public static final int MSG_CLOSE_INPUT_METHODS_PANEL = 1041;
+ public static final int MSG_OPEN_COMPAT_MODE_PANEL = 1050;
+ public static final int MSG_CLOSE_COMPAT_MODE_PANEL = 1051;
public static final int MSG_STOP_TICKER = 2000;
// Fitts' Law assistance for LatinIME; see policy.EventHole
@@ -125,8 +127,9 @@ public class TabletStatusBar extends StatusBar implements
View mMenuButton;
View mRecentButton;
- ViewGroup mNotificationAndImeArea;
+ ViewGroup mFeedbackIconArea; // notification icons, IME icon, compat icon
InputMethodButton mInputMethodSwitchButton;
+ CompatModeButton mCompatModeButton;
NotificationPanel mNotificationPanel;
WindowManager.LayoutParams mNotificationPanelParams;
@@ -165,6 +168,7 @@ public class TabletStatusBar extends StatusBar implements
private RecentAppsPanel mRecentsPanel;
private InputMethodsPanel mInputMethodsPanel;
+ private CompatModePanel mCompatModePanel;
public Context getContext() { return mContext; }
@@ -304,6 +308,29 @@ public class TabletStatusBar extends StatusBar implements
lp.windowAnimations = R.style.Animation_RecentPanel;
WindowManagerImpl.getDefault().addView(mInputMethodsPanel, lp);
+
+ // Compatibility mode selector panel
+ mCompatModePanel = (CompatModePanel) View.inflate(context,
+ R.layout.status_bar_compat_mode_panel, null);
+ mCompatModePanel.setOnTouchListener(new TouchOutsideListener(
+ MSG_CLOSE_COMPAT_MODE_PANEL, mCompatModePanel));
+ mCompatModePanel.setTrigger(mCompatModeButton);
+ mCompatModePanel.setVisibility(View.GONE);
+ mStatusBarView.setIgnoreChildren(4, mCompatModeButton, mCompatModePanel);
+ lp = new WindowManager.LayoutParams(
+ 250,
+ ViewGroup.LayoutParams.WRAP_CONTENT,
+ WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
+ WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
+ | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM
+ | WindowManager.LayoutParams.FLAG_SPLIT_TOUCH
+ | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED,
+ PixelFormat.TRANSLUCENT);
+ lp.gravity = Gravity.BOTTOM | Gravity.RIGHT;
+ lp.setTitle("CompatModePanel");
+ lp.windowAnimations = android.R.style.Animation_Dialog;
+
+ WindowManagerImpl.getDefault().addView(mCompatModePanel, lp);
}
private int getNotificationPanelHeight() {
@@ -430,11 +457,14 @@ public class TabletStatusBar extends StatusBar implements
mNavigationArea.setLayoutTransition(mBarContentsLayoutTransition);
// The bar contents buttons
- mNotificationAndImeArea = (ViewGroup)sb.findViewById(R.id.notificationAndImeArea);
+ mFeedbackIconArea = (ViewGroup)sb.findViewById(R.id.feedbackIconArea);
mInputMethodSwitchButton = (InputMethodButton) sb.findViewById(R.id.imeSwitchButton);
// Overwrite the lister
mInputMethodSwitchButton.setOnClickListener(mOnClickListener);
+ mCompatModeButton = (CompatModeButton) sb.findViewById(R.id.compatModeButton);
+ mCompatModeButton.setOnClickListener(mOnClickListener);
+
// for redirecting errant bar taps to the IME
mFakeSpaceBar = sb.findViewById(R.id.fake_space_bar);
@@ -646,6 +676,14 @@ public class TabletStatusBar extends StatusBar implements
if (DEBUG) Slog.d(TAG, "closing input methods panel");
if (mInputMethodsPanel != null) mInputMethodsPanel.closePanel(false);
break;
+ case MSG_OPEN_COMPAT_MODE_PANEL:
+ if (DEBUG) Slog.d(TAG, "opening compat panel");
+ if (mCompatModePanel != null) mCompatModePanel.openPanel();
+ break;
+ case MSG_CLOSE_COMPAT_MODE_PANEL:
+ if (DEBUG) Slog.d(TAG, "closing compat panel");
+ if (mCompatModePanel != null) mCompatModePanel.closePanel();
+ break;
case MSG_SHOW_CHROME:
if (DEBUG) Slog.d(TAG, "hiding shadows (lights on)");
mBarContents.setVisibility(View.VISIBLE);
@@ -914,14 +952,14 @@ public class TabletStatusBar extends StatusBar implements
if (0 == (mDisabled & (StatusBarManager.DISABLE_NOTIFICATION_ICONS
| StatusBarManager.DISABLE_NOTIFICATION_TICKER))) {
mTicker.add(key, n);
- mNotificationAndImeArea.setVisibility(View.GONE);
+ mFeedbackIconArea.setVisibility(View.GONE);
}
}
}
// called by TabletTicker when it's done with all queued ticks
public void doneTicking() {
- mNotificationAndImeArea.setVisibility(View.VISIBLE);
+ mFeedbackIconArea.setVisibility(View.VISIBLE);
}
public void animateExpand() {
@@ -939,6 +977,8 @@ public class TabletStatusBar extends StatusBar implements
mHandler.sendEmptyMessage(MSG_CLOSE_RECENTS_PANEL);
mHandler.removeMessages(MSG_CLOSE_INPUT_METHODS_PANEL);
mHandler.sendEmptyMessage(MSG_CLOSE_INPUT_METHODS_PANEL);
+ mHandler.removeMessages(MSG_CLOSE_COMPAT_MODE_PANEL);
+ mHandler.sendEmptyMessage(MSG_CLOSE_COMPAT_MODE_PANEL);
mHandler.removeMessages(MSG_CLOSE_NOTIFICATION_PEEK);
mHandler.sendEmptyMessage(MSG_CLOSE_NOTIFICATION_PEEK);
}
@@ -965,9 +1005,8 @@ public class TabletStatusBar extends StatusBar implements
// See above re: lights-out policy for legacy apps.
if (windowVisible) setLightsOn(true);
- // XXX: HACK: not sure if this is the best way to catch a new activity that might require a
- // change in compatibility features, but it's a start.
- ((CompatModeButton) mBarContents.findViewById(R.id.compat_button)).refresh();
+ // XXX: this is broken: http://b/4603422
+ mCompatModeButton.refresh();
}
public void setImeWindowStatus(IBinder token, int vis, int backDisposition) {
@@ -1060,6 +1099,8 @@ public class TabletStatusBar extends StatusBar implements
onClickRecentButton();
} else if (v == mInputMethodSwitchButton) {
onClickInputMethodSwitchButton();
+ } else if (v == mCompatModeButton) {
+ onClickCompatModeButton();
}
}
};
@@ -1102,6 +1143,13 @@ public class TabletStatusBar extends StatusBar implements
mHandler.sendEmptyMessage(msg);
}
+ public void onClickCompatModeButton() {
+ int msg = (mCompatModePanel.getVisibility() == View.GONE) ?
+ MSG_OPEN_COMPAT_MODE_PANEL : MSG_CLOSE_COMPAT_MODE_PANEL;
+ mHandler.removeMessages(msg);
+ mHandler.sendEmptyMessage(msg);
+ }
+
public NotificationClicker makeClicker(PendingIntent intent, String pkg, String tag, int id) {
return new NotificationClicker(intent, pkg, tag, id);
}
@@ -1438,13 +1486,13 @@ public class TabletStatusBar extends StatusBar implements
ArrayList toShow = new ArrayList();
- // When IME button is visible, the number of notification icons should be decremented
- // to fit the upper limit.
- // IME switcher icon is big and occupy width of one icon
- final int maxNotificationIconsImeButtonVisible = mMaxNotificationIcons - 1;
- final int maxNotificationIconsCount =
- (mInputMethodSwitchButton.getVisibility() != View.GONE) ?
- maxNotificationIconsImeButtonVisible : mMaxNotificationIcons;
+ // Extra Special Icons
+ // The IME switcher and compatibility mode icons take the place of notifications. You didn't
+ // need to see all those new emails, did you?
+ int maxNotificationIconsCount = mMaxNotificationIcons;
+ if (mInputMethodSwitchButton.getVisibility() != View.GONE) maxNotificationIconsCount --;
+ if (mCompatModeButton.getVisibility() != View.GONE) maxNotificationIconsCount --;
+
for (int i=0; i< maxNotificationIconsCount; i++) {
if (i>=N) break;
toShow.add(mNotificationData.get(N-i-1).icon);
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 4e2faf7927711..dff1f6ada0e0b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/tablet/TabletStatusBarView.java
@@ -27,8 +27,9 @@ import android.widget.FrameLayout;
public class TabletStatusBarView extends FrameLayout {
private Handler mHandler;
- private final View[] mIgnoreChildren = new View[4];
- private final View[] mPanels = new View[4];
+ private final int MAX_PANELS = 5;
+ private final View[] mIgnoreChildren = new View[MAX_PANELS];
+ private final View[] mPanels = new View[MAX_PANELS];
private final int[] mPos = new int[2];
public TabletStatusBarView(Context context) {