+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2008 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_window_focused="false" android:state_enabled="true"
- android:drawable="@drawable/btn_default_small_normal" />
- <item android:state_window_focused="false" android:state_enabled="false"
- android:drawable="@drawable/btn_default_small_normal_disable" />
- <item android:state_pressed="true"
- android:drawable="@drawable/btn_default_small_pressed" />
- <item android:state_focused="true" android:state_enabled="true"
- android:drawable="@drawable/btn_default_small_selected" />
- <item android:state_enabled="true"
- android:drawable="@drawable/btn_default_small_normal" />
- <item android:state_focused="true"
- android:drawable="@drawable/btn_default_small_normal_disable_focused" />
- <item
- android:drawable="@drawable/btn_default_small_normal_disable" />
-</selector>
-
+++ /dev/null
-<?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
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:state_pressed="true"
- android:drawable="@drawable/notify_panel_clock_bg_pressed" />
- <item android:drawable="@drawable/notify_panel_clock_bg_normal" />
-</selector>
-
+++ /dev/null
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2011 The Android Open Source Project
-
- Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License.
- You may obtain a copy of the License at
-
- http://www.apache.org/licenses/LICENSE-2.0
-
- Unless required by applicable law or agreed to in writing, software
- distributed under the License is distributed on an "AS IS" BASIS,
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- See the License for the specific language governing permissions and
- limitations under the License.
--->
-
-<bitmap
- xmlns:android="http://schemas.android.com/apk/res/android"
- android:tileMode="repeat"
- android:src="@drawable/status_bar_bg_tile"
- />
+++ /dev/null
-<?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:paddingStart="40dp"
- android:paddingEnd="40dp"
- android:background="#DD000000"
- android:focusable="true"
- android:orientation="horizontal"
- android:gravity="top|start"
- >
-
- <ImageView
- android:layout_width="wrap_content"
- android:layout_weight="0"
- android:layout_height="wrap_content"
- android:layout_marginEnd="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:paddingStart="50dp"
- android:paddingEnd="50dp"
- android:text="@android:string/ok" />
- </LinearLayout>
-</LinearLayout>
+++ /dev/null
-<?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:paddingStart="40dp"
- android:paddingEnd="40dp"
- android:background="#DD000000"
- android:focusable="true"
- android:orientation="vertical"
- android:gravity="top|start"
- >
-
- <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:paddingStart="50dp"
- android:paddingEnd="50dp"
- android:text="@android:string/ok" />
-
-</LinearLayout>
\ No newline at end of file
+++ /dev/null
-<?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.
--->
-
-<resources>
- <item type="id" name="status_bar_cling_stub" />
-</resources>
<!-- 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>
<!-- Glyph to be overlaid atop the battery when the level is extremely low. Do not translate. -->
<string name="battery_meter_very_low_overlay_symbol">!</string>
<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>
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;
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 com.android.systemui.statusbar.policy.RotationLockController;
import java.io.FileDescriptor;
public static final boolean DUMPTRUCK = true; // extra dumpsys info
public static final boolean DEBUG_GESTURES = false;
- public static final boolean DEBUG_CLINGS = false;
public static final boolean DEBUG_WINDOW_STATE = true;
- public static final boolean ENABLE_NOTIFICATION_PANEL_CLING = false;
-
public static final boolean SETTINGS_DRAG_SHORTCUT = true;
// additional instrumentation for testing purposes; intended to be left on during development
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
-
int[] mAbsPos = new int[2];
Runnable mPostCollapseCleanup = null;
}
}
- mClingShown = ! (DEBUG_CLINGS
- || !Prefs.read(mContext).getBoolean(Prefs.SHOWN_QUICK_SETTINGS_HELP, false));
-
- if (!ENABLE_NOTIFICATION_PANEL_CLING || ActivityManager.isRunningInTestHarness()) {
- mClingShown = true;
- }
-
// final ImageView wimaxRSSI =
// (ImageView)sb.findViewById(R.id.wimax_signal);
// if (wimaxRSSI != null) {
}
}
- 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() {
- // lazily inflate this to accommodate orientation change
- final ViewStub stub = (ViewStub) mStatusBarWindow.findViewById(R.id.status_bar_cling_stub);
- if (stub == null) {
- mClingShown = true;
- return; // no clings on this device
- }
-
- mSuppressStatusBarDrags = true;
-
- mHandler.postDelayed(new Runnable() {
- @Override
- public void run() {
- 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(); // enforce visibility in case the shade is still animating closed
- animateExpandNotificationsPanel();
-
- mSuppressStatusBarDrags = false;
- }
- }, 500);
-
- animateExpandNotificationsPanel();
- }
-
public boolean interceptTouchEvent(MotionEvent event) {
if (DEBUG_GESTURES) {
if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
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();
- }
-
setInteracting(true);
return false;
}
public class Prefs {
private static final String SHARED_PREFS_NAME = "status_bar";
- 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);
}