summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDaniel Sandler <dsandler@android.com>2012-10-05 14:32:50 -0400
committerDaniel Sandler <dsandler@android.com>2012-10-07 14:48:24 -0400
commitb17a726f2fb1066060b5646d35233d26222e8721 (patch)
tree041c2872b53f265909835736f4f4119afd1df568
parent1ad0fd9c04ae2e352c59129b979145e662f25cbc (diff)
downloadframeworks_base-b17a726f2fb1066060b5646d35233d26222e8721.zip
frameworks_base-b17a726f2fb1066060b5646d35233d26222e8721.tar.gz
frameworks_base-b17a726f2fb1066060b5646d35233d26222e8721.tar.bz2
Notification & settings panel help.
Comes up the first time you touch the status bar; explains where quick settings is, and even allows you to swipe down to try it (instead of touching "OK"). Bug: 7209412 Change-Id: I72b1a91902e64b4623e0fcaf1555dc703870b59f
-rw-r--r--packages/SystemUI/res/drawable-hdpi/arrow_dashed.pngbin0 -> 12185 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/btn_cling_normal.9.pngbin0 -> 333 bytes
-rw-r--r--packages/SystemUI/res/drawable-hdpi/btn_cling_pressed.9.pngbin0 -> 467 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/arrow_dashed.pngbin0 -> 7244 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/btn_cling_normal.9.pngbin0 -> 245 bytes
-rw-r--r--packages/SystemUI/res/drawable-mdpi/btn_cling_pressed.9.pngbin0 -> 370 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/arrow_dashed.pngbin0 -> 17897 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/btn_cling_normal.9.pngbin0 -> 400 bytes
-rw-r--r--packages/SystemUI/res/drawable-xhdpi/btn_cling_pressed.9.pngbin0 -> 601 bytes
-rw-r--r--packages/SystemUI/res/drawable/cling_button_bg.xml20
-rw-r--r--packages/SystemUI/res/layout-land/status_bar_help.xml71
-rw-r--r--packages/SystemUI/res/layout/status_bar_help.xml63
-rw-r--r--packages/SystemUI/res/layout/super_status_bar.xml10
-rw-r--r--packages/SystemUI/res/values/strings.xml5
-rw-r--r--packages/SystemUI/res/values/styles.xml29
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java86
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java1
18 files changed, 285 insertions, 2 deletions
diff --git a/packages/SystemUI/res/drawable-hdpi/arrow_dashed.png b/packages/SystemUI/res/drawable-hdpi/arrow_dashed.png
new file mode 100644
index 0000000..a8075d5
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/arrow_dashed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/btn_cling_normal.9.png b/packages/SystemUI/res/drawable-hdpi/btn_cling_normal.9.png
new file mode 100644
index 0000000..aea8beb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/btn_cling_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/btn_cling_pressed.9.png b/packages/SystemUI/res/drawable-hdpi/btn_cling_pressed.9.png
new file mode 100644
index 0000000..ebefd20
--- /dev/null
+++ b/packages/SystemUI/res/drawable-hdpi/btn_cling_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/arrow_dashed.png b/packages/SystemUI/res/drawable-mdpi/arrow_dashed.png
new file mode 100644
index 0000000..c17c668
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/arrow_dashed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/btn_cling_normal.9.png b/packages/SystemUI/res/drawable-mdpi/btn_cling_normal.9.png
new file mode 100644
index 0000000..43a407e
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/btn_cling_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/btn_cling_pressed.9.png b/packages/SystemUI/res/drawable-mdpi/btn_cling_pressed.9.png
new file mode 100644
index 0000000..bf0c8cb
--- /dev/null
+++ b/packages/SystemUI/res/drawable-mdpi/btn_cling_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/arrow_dashed.png b/packages/SystemUI/res/drawable-xhdpi/arrow_dashed.png
new file mode 100644
index 0000000..c26ed9c
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/arrow_dashed.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/btn_cling_normal.9.png b/packages/SystemUI/res/drawable-xhdpi/btn_cling_normal.9.png
new file mode 100644
index 0000000..35511d6
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/btn_cling_normal.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/btn_cling_pressed.9.png b/packages/SystemUI/res/drawable-xhdpi/btn_cling_pressed.9.png
new file mode 100644
index 0000000..a38b40f
--- /dev/null
+++ b/packages/SystemUI/res/drawable-xhdpi/btn_cling_pressed.9.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/cling_button_bg.xml b/packages/SystemUI/res/drawable/cling_button_bg.xml
new file mode 100644
index 0000000..d175f53
--- /dev/null
+++ b/packages/SystemUI/res/drawable/cling_button_bg.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- Copyright (C) 2012 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.
+-->
+
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_pressed="true" android:drawable="@drawable/btn_cling_pressed" />
+ <item android:drawable="@drawable/btn_cling_normal" />
+</selector> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout-land/status_bar_help.xml b/packages/SystemUI/res/layout-land/status_bar_help.xml
new file mode 100644
index 0000000..5a635ae
--- /dev/null
+++ b/packages/SystemUI/res/layout-land/status_bar_help.xml
@@ -0,0 +1,71 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2012, 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 the combined status bar / notification panel window. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/status_bar_cling"
+ android:paddingLeft="40dp"
+ android:paddingRight="40dp"
+ android:background="#DD000000"
+ android:focusable="true"
+ android:orientation="horizontal"
+ android:gravity="top|left"
+ >
+
+ <ImageView
+ android:layout_width="wrap_content"
+ android:layout_weight="0"
+ android:layout_height="wrap_content"
+ android:layout_marginRight="50dp"
+ android:gravity="center"
+ android:src="@drawable/arrow_dashed"
+ tools:ignore="ContentDescription" />
+
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_weight="1"
+ android:orientation="vertical"
+ android:layout_marginTop="40dp"
+ >
+ <TextView
+ style="@style/ClingTitleText"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/status_bar_help_title" />
+
+ <TextView
+ style="@style/ClingText"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="30dp"
+ android:text="@string/status_bar_help_text" />
+
+ <Button
+ android:id="@+id/ok"
+ style="@style/ClingButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="50dp"
+ android:paddingRight="50dp"
+ android:text="@android:string/ok" />
+ </LinearLayout>
+</LinearLayout>
diff --git a/packages/SystemUI/res/layout/status_bar_help.xml b/packages/SystemUI/res/layout/status_bar_help.xml
new file mode 100644
index 0000000..41bde4b
--- /dev/null
+++ b/packages/SystemUI/res/layout/status_bar_help.xml
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2012, 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 the combined status bar / notification panel window. -->
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:systemui="http://schemas.android.com/apk/res/com.android.systemui"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:id="@+id/status_bar_cling"
+ android:paddingLeft="40dp"
+ android:paddingRight="40dp"
+ android:background="#DD000000"
+ android:focusable="true"
+ android:orientation="vertical"
+ android:gravity="top|left"
+ >
+
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="50dp"
+ android:gravity="center"
+ android:src="@drawable/arrow_dashed"
+ tools:ignore="ContentDescription" />
+
+ <TextView
+ style="@style/ClingTitleText"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/status_bar_help_title" />
+
+ <TextView
+ style="@style/ClingText"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:layout_marginBottom="30dp"
+ android:text="@string/status_bar_help_text" />
+
+ <Button
+ android:id="@+id/ok"
+ style="@style/ClingButton"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingLeft="50dp"
+ android:paddingRight="50dp"
+ android:text="@android:string/ok" />
+
+</LinearLayout> \ No newline at end of file
diff --git a/packages/SystemUI/res/layout/super_status_bar.xml b/packages/SystemUI/res/layout/super_status_bar.xml
index 5e0d1e8..4b895ec 100644
--- a/packages/SystemUI/res/layout/super_status_bar.xml
+++ b/packages/SystemUI/res/layout/super_status_bar.xml
@@ -48,4 +48,14 @@
/>
</com.android.systemui.statusbar.phone.PanelHolder>
+ <ViewStub
+ android:layout="@layout/status_bar_help"
+ android:id="@+id/status_bar_cling_stub"
+ android:inflatedId="@+id/status_bar_cling"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:layout_marginTop="@*android:dimen/status_bar_height"
+ android:visibility="gone"
+ />
+
</com.android.systemui.statusbar.phone.StatusBarWindowView>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 2b74f56..763aa35 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -454,4 +454,9 @@
<string name="quick_settings_brightness_dialog_title">Brightness</string>
<!-- QuickSettings: Brightness dialog auto brightness button [CHAR LIMIT=NONE] -->
<string name="quick_settings_brightness_dialog_auto_brightness_label">AUTO</string>
+
+ <!-- Title of help text shown when the notification panel is pulled down for the very first time. [CHAR LIMIT=NONE] -->
+ <string name="status_bar_help_title">Notifications appear here</string>
+ <!-- Body of help text shown when the notification panel is pulled down for the very first time. [CHAR LIMIT=NONE] -->
+ <string name="status_bar_help_text">Access them anytime by swiping down.\nSwipe down again for system controls.</string>
</resources>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index d666fc3..18c1c34 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -137,4 +137,33 @@
<item name="android:textSize">14dp</item>
</style>
+ <style name="ClingButton">
+ <item name="android:layout_width">wrap_content</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:paddingTop">10dp</item>
+ <item name="android:paddingBottom">15dp</item>
+ <item name="android:paddingLeft">35dp</item>
+ <item name="android:paddingRight">35dp</item>
+ <item name="android:textStyle">bold</item>
+ <item name="android:background">@drawable/cling_button_bg</item>
+ </style>
+ <style name="ClingTitleText">
+ <item name="android:layout_width">wrap_content</item>
+ <item name="android:layout_height">wrap_content</item>
+ <item name="android:layout_marginBottom">5dp</item>
+ <item name="android:textSize">23sp</item>
+ <item name="android:textColor">#49C0EC</item>
+ <item name="android:shadowColor">#000000</item>
+ <item name="android:shadowDy">2</item>
+ <item name="android:shadowRadius">2.0</item>
+ </style>
+ <style name="ClingText">
+ <item name="android:textSize">15sp</item>
+ <item name="android:textColor">#FFFFFF</item>
+ <item name="android:shadowColor">#000000</item>
+ <item name="android:shadowDy">2</item>
+ <item name="android:shadowRadius">2.0</item>
+ <item name="android:lineSpacingMultiplier">1.1</item>
+ </style>
+
</resources>
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index a8a92ec..0c9683d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -213,7 +213,7 @@ public class PanelView extends FrameLayout {
float deltaX = event.getRawX() - event.getX();
float deltaY = event.getRawY() - event.getY();
event.offsetLocation(deltaX, deltaY);
- mVelocityTracker.addMovement(event);
+ if (mVelocityTracker != null) mVelocityTracker.addMovement(event);
event.offsetLocation(-deltaX, -deltaY);
}
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 3aa81ea..0161f1d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -29,6 +29,7 @@ import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.graphics.Canvas;
@@ -60,6 +61,7 @@ import android.view.VelocityTracker;
import android.view.View;
import android.view.ViewGroup;
import android.view.ViewGroup.LayoutParams;
+import android.view.ViewStub;
import android.view.WindowManager;
import android.view.animation.AccelerateInterpolator;
import android.view.animation.Animation;
@@ -89,6 +91,7 @@ import com.android.systemui.statusbar.policy.LocationController;
import com.android.systemui.statusbar.policy.NetworkController;
import com.android.systemui.statusbar.policy.NotificationRowLayout;
import com.android.systemui.statusbar.policy.OnSizeChangedListener;
+import com.android.systemui.statusbar.policy.Prefs;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -101,6 +104,8 @@ public class PhoneStatusBar extends BaseStatusBar {
public static final boolean DUMPTRUCK = true; // extra dumpsys info
public static final boolean DEBUG_GESTURES = false;
+ public static final boolean DEBUG_CLINGS = false;
+
// additional instrumentation for testing purposes; intended to be left on during development
public static final boolean CHATTY = DEBUG;
@@ -223,6 +228,11 @@ public class PhoneStatusBar extends BaseStatusBar {
boolean mTracking;
VelocityTracker mVelocityTracker;
+ // help screen
+ private boolean mClingShown;
+ private ViewGroup mCling;
+ private boolean mSuppressStatusBarDrags; // while a cling is up, briefly deaden the bar to give things time to settle
+
boolean mAnimating;
boolean mClosing; // only valid when mAnimating; indicates the initial acceleration
float mAnimY;
@@ -477,6 +487,14 @@ public class PhoneStatusBar extends BaseStatusBar {
R.color.notification_panel_solid_background)));
}
+ mClingShown = ! (DEBUG_CLINGS
+ || !Prefs.read(mContext).getBoolean(Prefs.SHOWN_QUICK_SETTINGS_HELP, false));
+
+ // robots don't need help
+ if (ActivityManager.isRunningInTestHarness()) {
+ mClingShown = true;
+ }
+
// final ImageView wimaxRSSI =
// (ImageView)sb.findViewById(R.id.wimax_signal);
// if (wimaxRSSI != null) {
@@ -1345,7 +1363,58 @@ public class PhoneStatusBar extends BaseStatusBar {
}
}
- boolean interceptTouchEvent(MotionEvent event) {
+ public boolean isClinging() {
+ return mCling != null && mCling.getVisibility() == View.VISIBLE;
+ }
+
+ public void hideCling() {
+ if (isClinging()) {
+ mCling.animate().alpha(0f).setDuration(250).start();
+ mCling.setVisibility(View.GONE);
+ mSuppressStatusBarDrags = false;
+ }
+ }
+
+ public void showCling() {
+ mSuppressStatusBarDrags = true;
+
+ mHandler.postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ // lazily inflate this to accommodate orientation change
+ ViewStub stub = (ViewStub) mStatusBarWindow.findViewById(R.id.status_bar_cling_stub);
+ mCling = (ViewGroup) stub.inflate();
+ mCling.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ return true; // e eats everything
+ }});
+ mCling.findViewById(R.id.ok).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ hideCling();
+ }});
+
+ mCling.setAlpha(0f);
+ mCling.setVisibility(View.VISIBLE);
+ mCling.animate().alpha(1f);
+
+ mClingShown = true;
+ SharedPreferences.Editor editor = Prefs.edit(mContext);
+ editor.putBoolean(Prefs.SHOWN_QUICK_SETTINGS_HELP, true);
+ editor.apply();
+
+ makeExpandedVisible(true); // enforce visibility in case the shade is still animating closed
+ animateExpandNotificationsPanel();
+
+ mSuppressStatusBarDrags = false;
+ }
+ }, 500);
+
+ animateExpandNotificationsPanel();
+ }
+
+ public boolean interceptTouchEvent(MotionEvent event) {
if (SPEW) {
Slog.d(TAG, "Touch: rawY=" + event.getRawY() + " event=" + event + " mDisabled="
+ mDisabled + " mTracking=" + mTracking);
@@ -1362,6 +1431,21 @@ public class PhoneStatusBar extends BaseStatusBar {
mGestureRec.add(event);
}
+ // Cling (first-run help) handling.
+ // The cling is supposed to show the first time you drag, or even tap, the status bar.
+ // It should show the notification panel, then fade in after half a second, giving you
+ // an explanation of what just happened, as well as teach you how to access quick
+ // settings (another drag). The user can dismiss the cling by clicking OK or by
+ // dragging quick settings into view.
+ final int act = event.getActionMasked();
+ if (mSuppressStatusBarDrags) {
+ return true;
+ } else if (act == MotionEvent.ACTION_UP && !mClingShown) {
+ showCling();
+ } else {
+ hideCling();
+ }
+
return false;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java
index 83e8c96..5d2198e 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/Prefs.java
@@ -27,6 +27,7 @@ public class Prefs {
public static final boolean DO_NOT_DISTURB_DEFAULT = false;
public static final String SHOWN_COMPAT_MODE_HELP = "shown_compat_mode_help";
+ public static final String SHOWN_QUICK_SETTINGS_HELP = "shown_quick_settings_help";
public static SharedPreferences read(Context context) {
return context.getSharedPreferences(Prefs.SHARED_PREFS_NAME, Context.MODE_PRIVATE);