summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Spurlock <jspurlock@google.com>2013-10-23 10:20:09 -0700
committerAndroid Git Automerger <android-git-automerger@android.com>2013-10-23 10:20:09 -0700
commit759bc4f421e01460cff92522bf70d52c53b79e85 (patch)
treeba60e2e087bde25664786828fdd0473cefea088c
parent037fa2489ff4d8646e4df67950fc93a80345d879 (diff)
parent7539a5afa73e9d7bc77803295368542ef535f28c (diff)
downloadframeworks_base-759bc4f421e01460cff92522bf70d52c53b79e85.zip
frameworks_base-759bc4f421e01460cff92522bf70d52c53b79e85.tar.gz
frameworks_base-759bc4f421e01460cff92522bf70d52c53b79e85.tar.bz2
am 7539a5af: am 2f566900: Merge "Ensure the simple CAB appears below the status bar." into klp-dev
* commit '7539a5afa73e9d7bc77803295368542ef535f28c': Ensure the simple CAB appears below the status bar. Add 'no system permission' test app.
-rw-r--r--core/tests/coretests/apks/version_nosys/Android.mk9
-rw-r--r--core/tests/coretests/apks/version_nosys/AndroidManifest.xml27
-rw-r--r--core/tests/coretests/apks/version_nosys/res/values/strings.xml6
-rw-r--r--core/tests/coretests/apks/version_nosys/src/com/android/frameworks/coretests/version_test/NullProvider.java39
-rw-r--r--policy/src/com/android/internal/policy/impl/PhoneWindow.java68
5 files changed, 143 insertions, 6 deletions
diff --git a/core/tests/coretests/apks/version_nosys/Android.mk b/core/tests/coretests/apks/version_nosys/Android.mk
new file mode 100644
index 0000000..bbc8e12
--- /dev/null
+++ b/core/tests/coretests/apks/version_nosys/Android.mk
@@ -0,0 +1,9 @@
+LOCAL_PATH:= $(call my-dir)
+
+include $(CLEAR_VARS)
+LOCAL_SRC_FILES := $(call all-subdir-java-files)
+LOCAL_PACKAGE_NAME := version_1_nosys
+LOCAL_AAPT_FLAGS := --version-code 1 --version-name 1.0
+LOCAL_CERTIFICATE := $(LOCAL_PATH)/../../certs/unit_test
+include $(FrameworkCoreTests_BUILD_PACKAGE)
+
diff --git a/core/tests/coretests/apks/version_nosys/AndroidManifest.xml b/core/tests/coretests/apks/version_nosys/AndroidManifest.xml
new file mode 100644
index 0000000..46aac38
--- /dev/null
+++ b/core/tests/coretests/apks/version_nosys/AndroidManifest.xml
@@ -0,0 +1,27 @@
+<?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.
+-->
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ package="com.android.frameworks.coretests.version_test">
+
+ <!-- Do not ask for this system permission -->
+<!-- <uses-permission android:name="android.permission.ACCESS_CACHE_FILESYSTEM" />
+-->
+ <!-- Which permission it uses is not important as long as it's a normal
+ permission -->
+ <uses-permission android:name="android.permission.VIBRATE" />
+
+ <application android:hasCode="false"/>
+</manifest>
diff --git a/core/tests/coretests/apks/version_nosys/res/values/strings.xml b/core/tests/coretests/apks/version_nosys/res/values/strings.xml
new file mode 100644
index 0000000..3b8b3b1
--- /dev/null
+++ b/core/tests/coretests/apks/version_nosys/res/values/strings.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+
+<!-- Just need this dummy file to have something to build. -->
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <string name="dummy">dummy</string>
+</resources>
diff --git a/core/tests/coretests/apks/version_nosys/src/com/android/frameworks/coretests/version_test/NullProvider.java b/core/tests/coretests/apks/version_nosys/src/com/android/frameworks/coretests/version_test/NullProvider.java
new file mode 100644
index 0000000..f5742f0
--- /dev/null
+++ b/core/tests/coretests/apks/version_nosys/src/com/android/frameworks/coretests/version_test/NullProvider.java
@@ -0,0 +1,39 @@
+package com.android.frameworks.coretests.version_test;
+
+import android.content.ContentProvider;
+import android.content.ContentValues;
+import android.database.Cursor;
+import android.net.Uri;
+
+public class NullProvider extends ContentProvider {
+ @Override
+ public boolean onCreate() {
+ return true;
+ }
+
+ @Override
+ public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
+ String sortOrder) {
+ return null;
+ }
+
+ @Override
+ public Uri insert(Uri uri, ContentValues values) {
+ return null;
+ }
+
+ @Override
+ public int delete(Uri uri, String selection, String[] selectionArgs) {
+ return 0;
+ }
+
+ @Override
+ public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
+ return 0;
+ }
+
+ @Override
+ public String getType(Uri uri) {
+ return "text/plain";
+ }
+}
diff --git a/policy/src/com/android/internal/policy/impl/PhoneWindow.java b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
index 1745bc7..44fc1f8 100644
--- a/policy/src/com/android/internal/policy/impl/PhoneWindow.java
+++ b/policy/src/com/android/internal/policy/impl/PhoneWindow.java
@@ -1922,7 +1922,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
private PopupWindow mActionModePopup;
private Runnable mShowActionModePopup;
- // View added at runtime to IME windows to cover the navigation bar
+ // View added at runtime to draw under the status bar area
+ private View mStatusGuard;
+ // View added at runtime to draw under the navigation bar area
private View mNavigationGuard;
public DecorView(Context context, int featureId) {
@@ -2484,7 +2486,64 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
@Override
protected boolean fitSystemWindows(Rect insets) {
mFrameOffsets.set(insets);
+ updateStatusGuard(insets);
+ updateNavigationGuard(insets);
+ if (getForeground() != null) {
+ drawableChanged();
+ }
+ return super.fitSystemWindows(insets);
+ }
+ private void updateStatusGuard(Rect insets) {
+ boolean showStatusGuard = false;
+ // Show the status guard when the non-overlay contextual action bar is showing
+ if (mActionModeView != null) {
+ if (mActionModeView.getLayoutParams() instanceof MarginLayoutParams) {
+ MarginLayoutParams mlp = (MarginLayoutParams) mActionModeView.getLayoutParams();
+ boolean mlpChanged = false;
+ final boolean nonOverlayShown =
+ (getLocalFeatures() & (1 << FEATURE_ACTION_MODE_OVERLAY)) == 0
+ && mActionModeView.isShown();
+ if (nonOverlayShown) {
+ // set top margin to top insets, show status guard
+ if (mlp.topMargin != insets.top) {
+ mlpChanged = true;
+ mlp.topMargin = insets.top;
+ if (mStatusGuard == null) {
+ mStatusGuard = new View(mContext);
+ mStatusGuard.setBackgroundColor(mContext.getResources()
+ .getColor(R.color.input_method_navigation_guard));
+ addView(mStatusGuard, new LayoutParams(
+ LayoutParams.MATCH_PARENT, mlp.topMargin,
+ Gravity.START | Gravity.TOP));
+ } else {
+ LayoutParams lp = (LayoutParams) mStatusGuard.getLayoutParams();
+ if (lp.height != mlp.topMargin) {
+ lp.height = mlp.topMargin;
+ mStatusGuard.setLayoutParams(lp);
+ }
+ }
+ }
+ insets.top = 0; // consume top insets
+ showStatusGuard = true;
+ } else {
+ // reset top margin
+ if (mlp.topMargin != 0) {
+ mlpChanged = true;
+ mlp.topMargin = 0;
+ }
+ }
+ if (mlpChanged) {
+ mActionModeView.setLayoutParams(mlp);
+ }
+ }
+ }
+ if (mStatusGuard != null) {
+ mStatusGuard.setVisibility(showStatusGuard ? View.VISIBLE : View.GONE);
+ }
+ }
+
+ private void updateNavigationGuard(Rect insets) {
// IMEs lay out below the nav bar, but the content view must not (for back compat)
if (getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) {
// prevent the content view from including the nav bar height
@@ -2510,11 +2569,6 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
mNavigationGuard.setLayoutParams(lp);
}
}
-
- if (getForeground() != null) {
- drawableChanged();
- }
- return super.fitSystemWindows(insets);
}
private void drawableChanged() {
@@ -2693,6 +2747,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
+ requestFitSystemWindows();
return mWrapped.onPrepareActionMode(mode, menu);
}
@@ -2719,6 +2774,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
}
}
mActionMode = null;
+ requestFitSystemWindows();
}
}
}