Fix layoutlib by avoiding Java7 calls

This change also fixes a NPE in TypedArray caused by changes in the
framework.

Change-Id: Ie64237c567fa16c35c807db22ce9a4b609ee411d
This commit is contained in:
Deepanshu Gupta
2014-02-14 15:21:53 -08:00
parent d5c8044e7e
commit 857ba4af85
4 changed files with 46 additions and 2 deletions

View File

@ -1625,7 +1625,7 @@ public class Resources {
String locale = null;
if (mConfiguration.locale != null) {
locale = mConfiguration.locale.toLanguageTag();
locale = localeToLanguageTag(mConfiguration.locale);
}
int width, height;
if (mMetrics.widthPixels >= mMetrics.heightPixels) {
@ -1706,6 +1706,12 @@ public class Resources {
}
}
// Locale.toLanguageTag() is not available in Java6. LayoutLib overrides
// this method to enable users to use Java6.
private String localeToLanguageTag(Locale locale) {
return locale.toLanguageTag();
}
/**
* Update the system resources configuration if they have previously
* been initialized.

View File

@ -58,7 +58,7 @@ public final class BridgeTypedArray extends TypedArray {
public BridgeTypedArray(BridgeResources resources, BridgeContext context, int len,
boolean platformFile) {
super(null, null, null, 0);
super(resources, null, null, 0);
mBridgeResources = resources;
mContext = context;
mPlatformFile = platformFile;

View File

@ -0,0 +1,37 @@
/*
* Copyright (C) 2014 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 java.util.Locale;
import com.android.tools.layoutlib.annotations.LayoutlibDelegate;
import com.ibm.icu.util.ULocale;
/**
* Delegate used to provide new implementation of a select few methods of {@link Resources}
*
* Through the layoutlib_create tool, the original methods of Resources have been replaced
* by calls to methods of the same name in this delegate class.
*
*/
public class Resources_Delegate {
@LayoutlibDelegate
/*package*/ static String localeToLanguageTag(Resources res, Locale locale) {
return ULocale.forLocale(locale).toLanguageTag();
}
}

View File

@ -125,6 +125,7 @@ public final class CreateInfo implements ICreateInfo {
"android.app.Fragment#instantiate", //(Landroid/content/Context;Ljava/lang/String;Landroid/os/Bundle;)Landroid/app/Fragment;",
"android.content.res.Resources$Theme#obtainStyledAttributes",
"android.content.res.Resources$Theme#resolveAttribute",
"android.content.res.Resources#localeToLanguageTag",
"android.content.res.TypedArray#getValueAt",
"android.graphics.BitmapFactory#finishDecode",
"android.os.Handler#sendMessageAtTime",