* commit '7539a5afa73e9d7bc77803295368542ef535f28c': Ensure the simple CAB appears below the status bar. Add 'no system permission' test app.
This commit is contained in:
9
core/tests/coretests/apks/version_nosys/Android.mk
Normal file
9
core/tests/coretests/apks/version_nosys/Android.mk
Normal file
@@ -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)
|
||||||
|
|
||||||
27
core/tests/coretests/apks/version_nosys/AndroidManifest.xml
Normal file
27
core/tests/coretests/apks/version_nosys/AndroidManifest.xml
Normal file
@@ -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>
|
||||||
@@ -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>
|
||||||
@@ -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";
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -1922,7 +1922,9 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
private PopupWindow mActionModePopup;
|
private PopupWindow mActionModePopup;
|
||||||
private Runnable mShowActionModePopup;
|
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;
|
private View mNavigationGuard;
|
||||||
|
|
||||||
public DecorView(Context context, int featureId) {
|
public DecorView(Context context, int featureId) {
|
||||||
@@ -2484,7 +2486,64 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
@Override
|
@Override
|
||||||
protected boolean fitSystemWindows(Rect insets) {
|
protected boolean fitSystemWindows(Rect insets) {
|
||||||
mFrameOffsets.set(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)
|
// IMEs lay out below the nav bar, but the content view must not (for back compat)
|
||||||
if (getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) {
|
if (getAttributes().type == WindowManager.LayoutParams.TYPE_INPUT_METHOD) {
|
||||||
// prevent the content view from including the nav bar height
|
// 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);
|
mNavigationGuard.setLayoutParams(lp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (getForeground() != null) {
|
|
||||||
drawableChanged();
|
|
||||||
}
|
|
||||||
return super.fitSystemWindows(insets);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void drawableChanged() {
|
private void drawableChanged() {
|
||||||
@@ -2693,6 +2747,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
|
public boolean onPrepareActionMode(ActionMode mode, Menu menu) {
|
||||||
|
requestFitSystemWindows();
|
||||||
return mWrapped.onPrepareActionMode(mode, menu);
|
return mWrapped.onPrepareActionMode(mode, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2719,6 +2774,7 @@ public class PhoneWindow extends Window implements MenuBuilder.Callback {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
mActionMode = null;
|
mActionMode = null;
|
||||||
|
requestFitSystemWindows();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user