Merge "Add ResourceId validation helper method" into oc-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
24c18af14a
@@ -25,6 +25,7 @@ import android.annotation.StringRes;
|
||||
import android.annotation.StyleRes;
|
||||
import android.content.Context;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.res.ResourceId;
|
||||
import android.database.Cursor;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Bundle;
|
||||
@@ -204,7 +205,7 @@ public class AlertDialog extends Dialog implements DialogInterface {
|
||||
mAlert = AlertController.create(getContext(), this, getWindow());
|
||||
}
|
||||
|
||||
static int resolveDialogTheme(Context context, int themeResId) {
|
||||
static @StyleRes int resolveDialogTheme(Context context, @StyleRes int themeResId) {
|
||||
if (themeResId == THEME_TRADITIONAL) {
|
||||
return R.style.Theme_Dialog_Alert;
|
||||
} else if (themeResId == THEME_HOLO_DARK) {
|
||||
@@ -215,7 +216,7 @@ public class AlertDialog extends Dialog implements DialogInterface {
|
||||
return R.style.Theme_DeviceDefault_Dialog_Alert;
|
||||
} else if (themeResId == THEME_DEVICE_DEFAULT_LIGHT) {
|
||||
return R.style.Theme_DeviceDefault_Light_Dialog_Alert;
|
||||
} else if (Integer.compareUnsigned(themeResId, 0x01000000) >= 0) {
|
||||
} else if (ResourceId.isValid(themeResId)) {
|
||||
// start of real resource IDs.
|
||||
return themeResId;
|
||||
} else {
|
||||
@@ -450,7 +451,7 @@ public class AlertDialog extends Dialog implements DialogInterface {
|
||||
* @param context the parent context
|
||||
*/
|
||||
public Builder(Context context) {
|
||||
this(context, resolveDialogTheme(context, 0));
|
||||
this(context, resolveDialogTheme(context, ResourceId.ID_NULL));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -34,6 +34,7 @@ import android.content.ContextWrapper;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.res.Configuration;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.res.ResourceId;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.net.Uri;
|
||||
import android.os.Bundle;
|
||||
@@ -169,7 +170,7 @@ public class Dialog implements DialogInterface, Window.Callback,
|
||||
|
||||
Dialog(@NonNull Context context, @StyleRes int themeResId, boolean createContextThemeWrapper) {
|
||||
if (createContextThemeWrapper) {
|
||||
if (themeResId == 0) {
|
||||
if (themeResId == ResourceId.ID_NULL) {
|
||||
final TypedValue outValue = new TypedValue();
|
||||
context.getTheme().resolveAttribute(R.attr.dialogTheme, outValue, true);
|
||||
themeResId = outValue.resourceId;
|
||||
|
||||
@@ -20,6 +20,7 @@ import android.annotation.NonNull;
|
||||
import android.content.Context;
|
||||
import android.content.pm.ActivityInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.res.ResourceId;
|
||||
import android.content.res.Resources;
|
||||
import android.graphics.drawable.Drawable;
|
||||
import android.os.Parcel;
|
||||
@@ -368,7 +369,7 @@ public class AppWidgetProviderInfo implements Parcelable {
|
||||
try {
|
||||
Resources resources = context.getPackageManager().getResourcesForApplication(
|
||||
providerInfo.applicationInfo);
|
||||
if (resourceId != 0) {
|
||||
if (ResourceId.isValid(resourceId)) {
|
||||
if (density < 0) {
|
||||
density = 0;
|
||||
}
|
||||
|
||||
44
core/java/android/content/res/ResourceId.java
Normal file
44
core/java/android/content/res/ResourceId.java
Normal file
@@ -0,0 +1,44 @@
|
||||
/*
|
||||
* Copyright (C) 2017 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.
|
||||
*/
|
||||
package android.content.res;
|
||||
|
||||
import android.annotation.AnyRes;
|
||||
|
||||
/**
|
||||
* Provides a set of utility methods for dealing with Resource IDs.
|
||||
* @hide
|
||||
*/
|
||||
public final class ResourceId {
|
||||
|
||||
/**
|
||||
* The {@code null} resource ID.
|
||||
*/
|
||||
public static final @AnyRes int ID_NULL = 0;
|
||||
|
||||
/**
|
||||
* Checks whether the integer {@code id} is a valid resource ID, as generated by AAPT.
|
||||
* <p>Note that a negative integer is not necessarily an invalid resource ID, and custom
|
||||
* validations that compare the {@code id} against {@code 0} are incorrect.</p>
|
||||
* @param id The integer to validate.
|
||||
* @return {@code true} if the integer is a valid resource ID.
|
||||
*/
|
||||
public static boolean isValid(@AnyRes int id) {
|
||||
// With the introduction of packages with IDs > 0x7f, resource IDs can be negative when
|
||||
// represented as a signed Java int. Some legacy code assumes -1 is an invalid resource ID,
|
||||
// despite the existing documentation.
|
||||
return id != -1 && (id & 0xff000000) != 0 && (id & 0x00ff0000) != 0;
|
||||
}
|
||||
}
|
||||
@@ -151,7 +151,7 @@ public class Resources {
|
||||
/** @hide */
|
||||
public static int selectSystemTheme(int curTheme, int targetSdkVersion, int orig, int holo,
|
||||
int dark, int deviceDefault) {
|
||||
if (curTheme != 0) {
|
||||
if (curTheme != ResourceId.ID_NULL) {
|
||||
return curTheme;
|
||||
}
|
||||
if (targetSdkVersion < Build.VERSION_CODES.HONEYCOMB) {
|
||||
|
||||
Reference in New Issue
Block a user