summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--core/res/res/drawable/ic_expand_more_48dp.xml27
-rw-r--r--core/res/res/drawable/immersive_cling_bg_circ.xml26
-rw-r--r--core/res/res/drawable/immersive_cling_light_bg_circ.xml26
-rw-r--r--core/res/res/layout/immersive_mode_cling.xml111
-rw-r--r--core/res/res/values/strings.xml10
-rw-r--r--core/res/res/values/styles.xml6
-rwxr-xr-xcore/res/res/values/symbols.xml2
-rw-r--r--services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java68
-rw-r--r--services/core/java/com/android/server/policy/PhoneWindowManager.java4
9 files changed, 201 insertions, 79 deletions
diff --git a/core/res/res/drawable/ic_expand_more_48dp.xml b/core/res/res/drawable/ic_expand_more_48dp.xml
new file mode 100644
index 0000000..11323e3
--- /dev/null
+++ b/core/res/res/drawable/ic_expand_more_48dp.xml
@@ -0,0 +1,27 @@
+<!--
+Copyright (C) 2015 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48.0dp"
+ android:height="48.0dp"
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M33.17,17.17L24.0,26.34l-9.17,-9.17L12.0,20.0l12.0,12.0 12.0,-12.0z"/>
+ <path
+ android:pathData="M0 0h48v48H0z"
+ android:fillColor="#00000000"/>
+</vector>
diff --git a/core/res/res/drawable/immersive_cling_bg_circ.xml b/core/res/res/drawable/immersive_cling_bg_circ.xml
new file mode 100644
index 0000000..4731bbd
--- /dev/null
+++ b/core/res/res/drawable/immersive_cling_bg_circ.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 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
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval" >
+
+ <solid android:color="@color/white" />
+
+ <size
+ android:height="56dp"
+ android:width="56dp" />
+
+</shape>
diff --git a/core/res/res/drawable/immersive_cling_light_bg_circ.xml b/core/res/res/drawable/immersive_cling_light_bg_circ.xml
new file mode 100644
index 0000000..df5d5ad
--- /dev/null
+++ b/core/res/res/drawable/immersive_cling_light_bg_circ.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ ~ Copyright (C) 2015 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
+ -->
+<shape xmlns:android="http://schemas.android.com/apk/res/android"
+ android:shape="oval" >
+
+ <solid android:color="#80ffffff" />
+
+ <size
+ android:height="76dp"
+ android:width="76dp" />
+
+</shape>
diff --git a/core/res/res/layout/immersive_mode_cling.xml b/core/res/res/layout/immersive_mode_cling.xml
index c0cd93d..28fbea5 100644
--- a/core/res/res/layout/immersive_mode_cling.xml
+++ b/core/res/res/layout/immersive_mode_cling.xml
@@ -13,55 +13,80 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:orientation="vertical"
- android:padding="12dp"
- >
- <LinearLayout
- android:id="@+id/text"
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="vertical"
- android:layout_marginTop="4dp"
- android:padding="1dp"
- >
+ android:background="#ff009688"
+ android:gravity="center_vertical"
+ android:paddingBottom="24dp">
+
+ <FrameLayout
+ android:id="@+id/immersive_cling_chevron"
+ android:layout_width="76dp"
+ android:layout_height="76dp"
+ android:layout_marginTop="-24dp"
+ android:layout_centerHorizontal="true">
+
<ImageView
- android:layout_width="wrap_content"
+ android:id="@+id/immersive_cling_back_bg_light"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scaleType="center"
+ android:src="@drawable/immersive_cling_light_bg_circ" />
+
+ <ImageView
+ android:id="@+id/immersive_cling_back_bg"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:scaleType="center"
+ android:src="@drawable/immersive_cling_bg_circ" />
+
+ <ImageView
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:paddingTop="8dp"
+ android:scaleType="center"
+ android:src="@drawable/ic_expand_more_48dp"
+ android:tint="#ff009688"/>
+ </FrameLayout>
+
+ <TextView
+ android:id="@+id/immersive_cling_title"
+ android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal"
- android:src="@drawable/cling_arrow_up"
- />
- <FrameLayout
+ android:layout_below="@id/immersive_cling_chevron"
+ android:paddingEnd="48dp"
+ android:paddingStart="48dp"
+ android:paddingTop="40dp"
+ android:text="@string/immersive_cling_title"
+ android:textColor="@color/primary_text_default_material_light"
+ android:textSize="24sp" />
+
+ <TextView
+ android:id="@+id/immersive_cling_description"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:background="@drawable/cling_bg"
- android:paddingStart="14dp"
- android:paddingEnd="14dp"
- android:paddingTop="24dp"
- android:paddingBottom="24dp">
- <TextView
- android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:text="@string/immersive_mode_confirmation"
- android:textColor="#80000000"
- android:textSize="16sp"
- />
- </FrameLayout>
- </LinearLayout>
+ android:layout_below="@id/immersive_cling_title"
+ android:paddingEnd="48dp"
+ android:paddingStart="48dp"
+ android:paddingTop="12.6dp"
+ android:text="@string/immersive_cling_description"
+ android:textColor="@color/primary_text_default_material_light"
+ android:textSize="16sp" />
<Button
- android:id="@+id/ok"
- android:layout_width="160sp"
- android:layout_height="wrap_content"
- android:layout_gravity="right"
- android:layout_marginTop="18dp"
- android:gravity="center"
- android:text="@string/ok"
- android:background="@drawable/cling_button"
- />
-
-</LinearLayout>
-
+ android:id="@+id/ok"
+ style="@style/Widget.Material.Button.Borderless"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:layout_below="@+id/immersive_cling_description"
+ android:layout_marginEnd="40dp"
+ android:layout_marginTop="18dp"
+ android:paddingEnd="8dp"
+ android:paddingStart="8dp"
+ android:text="@string/immersive_cling_positive"
+ android:textColor="@android:color/white"
+ android:textSize="14sp" />
+</RelativeLayout> \ No newline at end of file
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index d93d2c8..7c745ac 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -4983,8 +4983,14 @@
<!-- PIN entry dialog tells the user to not enter a PIN for a while. [CHAR LIMIT=none] -->
<string name="restr_pin_try_later">Try again later</string>
- <!-- Cling help message when hiding the navigation bar entering immersive mode [CHAR LIMIT=none] -->
- <string name="immersive_mode_confirmation" msgid="8554991488096662508">Swipe down from the top to exit full screen.</string>
+ <!-- Cling help message title when hiding the navigation bar entering immersive mode [CHAR LIMIT=none] -->
+ <string name="immersive_cling_title">Viewing full screen</string>
+
+ <!-- Cling help message description when hiding the navigation bar entering immersive mode [CHAR LIMIT=none] -->
+ <string name="immersive_cling_description">To exit, swipe down from the top.</string>
+
+ <!-- Cling help message confirmation button when hiding the navigation bar entering immersive mode [CHAR LIMIT=30] -->
+ <string name="immersive_cling_positive">Got it</string>
<!-- Label for button to confirm chosen date or time [CHAR LIMIT=30] -->
<string name="done_label">Done</string>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index c520a46..cc64b43 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -237,6 +237,12 @@ please see styles_device_defaults.xml.
<item name="windowExitAnimation">@anim/fade_out</item>
</style>
+ <!-- Window animations used for immersive mode confirmation. -->
+ <style name="Animation.ImmersiveModeConfirmation">
+ <item name="windowEnterAnimation">@null</item>
+ <item name="windowExitAnimation">@anim/fast_fade_out</item>
+ </style>
+
<!-- Window animations for screen savers. {@hide} -->
<style name="Animation.Dream">
<item name="windowEnterAnimation">@anim/slow_fade_in</item>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 86e46f6..e17f5fc 100755
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2147,6 +2147,8 @@
<java-symbol type="integer" name="config_defaultNightMode" />
+ <java-symbol type="style" name="Animation.ImmersiveModeConfirmation" />
+
<java-symbol type="integer" name="config_screen_magnification_multi_tap_adjustment" />
<java-symbol type="dimen" name="config_screen_magnification_scaling_threshold" />
<java-symbol type="dimen" name="timepicker_selector_stroke"/>
diff --git a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
index e511346..e720f3e 100644
--- a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
+++ b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
@@ -40,6 +40,7 @@ import android.view.WindowManager;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.view.animation.DecelerateInterpolator;
+import android.view.animation.Interpolator;
import android.widget.Button;
import android.widget.FrameLayout;
@@ -170,7 +171,7 @@ public class ImmersiveModeConfirmation {
final WindowManager.LayoutParams lp = new WindowManager.LayoutParams(
ViewGroup.LayoutParams.MATCH_PARENT,
ViewGroup.LayoutParams.MATCH_PARENT,
- WindowManager.LayoutParams.TYPE_TOAST,
+ WindowManager.LayoutParams.TYPE_STATUS_BAR_PANEL,
0
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN
| WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
@@ -179,8 +180,7 @@ public class ImmersiveModeConfirmation {
PixelFormat.TRANSLUCENT);
lp.privateFlags |= WindowManager.LayoutParams.PRIVATE_FLAG_SHOW_FOR_ALL_USERS;
lp.setTitle("ImmersiveModeConfirmation");
- lp.windowAnimations = com.android.internal.R.style.Animation_RecentApplications;
- lp.gravity = Gravity.FILL;
+ lp.windowAnimations = com.android.internal.R.style.Animation_ImmersiveModeConfirmation;
return lp;
}
@@ -194,10 +194,12 @@ public class ImmersiveModeConfirmation {
private class ClingWindowView extends FrameLayout {
private static final int BGCOLOR = 0x80000000;
- private static final int OFFSET_DP = 48;
+ private static final int OFFSET_DP = 96;
+ private static final int ANIMATION_DURATION = 250;
private final Runnable mConfirm;
private final ColorDrawable mColor = new ColorDrawable(0);
+ private final Interpolator mInterpolator;
private ValueAnimator mColorAnim;
private ViewGroup mClingLayout;
@@ -222,8 +224,10 @@ public class ImmersiveModeConfirmation {
public ClingWindowView(Context context, Runnable confirm) {
super(context);
mConfirm = confirm;
- setClickable(true);
setBackground(mColor);
+ setImportantForAccessibility(IMPORTANT_FOR_ACCESSIBILITY_NO);
+ mInterpolator = AnimationUtils
+ .loadInterpolator(mContext, android.R.interpolator.linear_out_slow_in);
}
@Override
@@ -248,40 +252,40 @@ public class ImmersiveModeConfirmation {
addView(mClingLayout, getBubbleLayoutParams());
if (ActivityManager.isHighEndGfx()) {
- final View bubble = mClingLayout.findViewById(R.id.text);
- bubble.setAlpha(0f);
- bubble.setTranslationY(-OFFSET_DP*density);
- bubble.animate()
- .alpha(1f)
- .translationY(0)
- .setDuration(300)
- .setInterpolator(new DecelerateInterpolator())
- .start();
-
- ok.setAlpha(0f);
- ok.setTranslationY(-OFFSET_DP*density);
- ok.animate().alpha(1f)
- .translationY(0)
- .setDuration(300)
- .setStartDelay(200)
- .setInterpolator(new DecelerateInterpolator())
- .start();
-
- mColorAnim = ValueAnimator.ofObject(new ArgbEvaluator(), 0, BGCOLOR);
- mColorAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ final View cling = mClingLayout;
+ cling.setAlpha(0f);
+ cling.setTranslationY(-OFFSET_DP * density);
+
+ postOnAnimation(new Runnable() {
@Override
- public void onAnimationUpdate(ValueAnimator animation) {
- final int c = (Integer) animation.getAnimatedValue();
- mColor.setColor(c);
+ public void run() {
+ cling.animate()
+ .alpha(1f)
+ .translationY(0)
+ .setDuration(ANIMATION_DURATION)
+ .setInterpolator(mInterpolator)
+ .withLayer()
+ .start();
+
+ mColorAnim = ValueAnimator.ofObject(new ArgbEvaluator(), 0, BGCOLOR);
+ mColorAnim.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() {
+ @Override
+ public void onAnimationUpdate(ValueAnimator animation) {
+ final int c = (Integer) animation.getAnimatedValue();
+ mColor.setColor(c);
+ }
+ });
+ mColorAnim.setDuration(ANIMATION_DURATION);
+ mColorAnim.setInterpolator(mInterpolator);
+ mColorAnim.start();
}
});
- mColorAnim.setDuration(1000);
- mColorAnim.start();
} else {
mColor.setColor(BGCOLOR);
}
- mContext.registerReceiver(mReceiver, new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED));
+ mContext.registerReceiver(mReceiver,
+ new IntentFilter(Intent.ACTION_CONFIGURATION_CHANGED));
}
@Override
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index 5185cf6..9746142 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -5032,8 +5032,8 @@ public class PhoneWindowManager implements WindowManagerPolicy {
boolean sb = mStatusBarController.checkShowTransientBarLw();
boolean nb = mNavigationBarController.checkShowTransientBarLw();
if (sb || nb) {
- WindowState barTarget = sb ? mStatusBar : mNavigationBar;
- if (sb ^ nb && barTarget != swipeTarget) {
+ // Don't show status bar when swiping on already visible navigation bar
+ if (!nb && swipeTarget == mNavigationBar) {
if (DEBUG) Slog.d(TAG, "Not showing transient bar, wrong swipe target");
return;
}