am 0ed2e845
: Merge "DO NOT MERGE. Integrate add new screen width/height in "dp" configs." into honeycomb-mr2
* commit '0ed2e845db3f6bc7bc12a08ada18363942c2fb3d': DO NOT MERGE. Integrate add new screen width/height in "dp" configs.
This commit is contained in:
@ -57840,6 +57840,17 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="CONFIG_SCREEN_SIZE"
|
||||||
|
type="int"
|
||||||
|
transient="false"
|
||||||
|
volatile="false"
|
||||||
|
value="1024"
|
||||||
|
static="true"
|
||||||
|
final="true"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</field>
|
||||||
<field name="CONFIG_TOUCHSCREEN"
|
<field name="CONFIG_TOUCHSCREEN"
|
||||||
type="int"
|
type="int"
|
||||||
transient="false"
|
transient="false"
|
||||||
@ -63902,6 +63913,28 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="SCREEN_HEIGHT_DP_UNDEFINED"
|
||||||
|
type="int"
|
||||||
|
transient="false"
|
||||||
|
volatile="false"
|
||||||
|
value="0"
|
||||||
|
static="true"
|
||||||
|
final="true"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</field>
|
||||||
|
<field name="SCREEN_WIDTH_DP_UNDEFINED"
|
||||||
|
type="int"
|
||||||
|
transient="false"
|
||||||
|
volatile="false"
|
||||||
|
value="0"
|
||||||
|
static="true"
|
||||||
|
final="true"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</field>
|
||||||
<field name="TOUCHSCREEN_FINGER"
|
<field name="TOUCHSCREEN_FINGER"
|
||||||
type="int"
|
type="int"
|
||||||
transient="false"
|
transient="false"
|
||||||
@ -64145,6 +64178,16 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="screenHeightDp"
|
||||||
|
type="int"
|
||||||
|
transient="false"
|
||||||
|
volatile="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</field>
|
||||||
<field name="screenLayout"
|
<field name="screenLayout"
|
||||||
type="int"
|
type="int"
|
||||||
transient="false"
|
transient="false"
|
||||||
@ -64155,6 +64198,16 @@
|
|||||||
visibility="public"
|
visibility="public"
|
||||||
>
|
>
|
||||||
</field>
|
</field>
|
||||||
|
<field name="screenWidthDp"
|
||||||
|
type="int"
|
||||||
|
transient="false"
|
||||||
|
volatile="false"
|
||||||
|
static="false"
|
||||||
|
final="false"
|
||||||
|
deprecated="not deprecated"
|
||||||
|
visibility="public"
|
||||||
|
>
|
||||||
|
</field>
|
||||||
<field name="touchscreen"
|
<field name="touchscreen"
|
||||||
type="int"
|
type="int"
|
||||||
transient="false"
|
transient="false"
|
||||||
|
@ -332,6 +332,12 @@ public class ActivityInfo extends ComponentInfo
|
|||||||
* {@link android.R.attr#configChanges} attribute.
|
* {@link android.R.attr#configChanges} attribute.
|
||||||
*/
|
*/
|
||||||
public static final int CONFIG_UI_MODE = 0x0200;
|
public static final int CONFIG_UI_MODE = 0x0200;
|
||||||
|
/**
|
||||||
|
* Bit in {@link #configChanges} that indicates that the activity
|
||||||
|
* can itself handle the screen size. Set from the
|
||||||
|
* {@link android.R.attr#configChanges} attribute.
|
||||||
|
*/
|
||||||
|
public static final int CONFIG_SCREEN_SIZE = 0x0400;
|
||||||
/**
|
/**
|
||||||
* Bit in {@link #configChanges} that indicates that the activity
|
* Bit in {@link #configChanges} that indicates that the activity
|
||||||
* can itself handle changes to the font scaling factor. Set from the
|
* can itself handle changes to the font scaling factor. Set from the
|
||||||
@ -341,6 +347,37 @@ public class ActivityInfo extends ComponentInfo
|
|||||||
*/
|
*/
|
||||||
public static final int CONFIG_FONT_SCALE = 0x40000000;
|
public static final int CONFIG_FONT_SCALE = 0x40000000;
|
||||||
|
|
||||||
|
/** @hide
|
||||||
|
* Unfortunately the constants for config changes in native code are
|
||||||
|
* different from ActivityInfo. :( Here are the values we should use for the
|
||||||
|
* native side given the bit we have assigned in ActivityInfo.
|
||||||
|
*/
|
||||||
|
public static int[] CONFIG_NATIVE_BITS = new int[] {
|
||||||
|
0x0001, // MNC
|
||||||
|
0x0002, // MCC
|
||||||
|
0x0004, // LOCALE
|
||||||
|
0x0008, // TOUCH SCREEN
|
||||||
|
0x0010, // KEYBOARD
|
||||||
|
0x0020, // KEYBOARD HIDDEN
|
||||||
|
0x0040, // NAVIGATION
|
||||||
|
0x0080, // ORIENTATION
|
||||||
|
0x0800, // SCREEN LAYOUT
|
||||||
|
0x1000, // UI MODE
|
||||||
|
0x0200, // SCREEN SIZE
|
||||||
|
};
|
||||||
|
/** @hide
|
||||||
|
* Convert Java change bits to native.
|
||||||
|
*/
|
||||||
|
public static int activityInfoConfigToNative(int input) {
|
||||||
|
int output = 0;
|
||||||
|
for (int i=0; i<CONFIG_NATIVE_BITS.length; i++) {
|
||||||
|
if ((input&(1<<i)) != 0) {
|
||||||
|
output |= CONFIG_NATIVE_BITS[i];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return output;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Bit mask of kinds of configuration changes that this activity
|
* Bit mask of kinds of configuration changes that this activity
|
||||||
* can handle itself (without being restarted by the system).
|
* can handle itself (without being restarted by the system).
|
||||||
|
@ -396,7 +396,7 @@ public class PackageParser {
|
|||||||
int cookie = assmgr.addAssetPath(mArchiveSourcePath);
|
int cookie = assmgr.addAssetPath(mArchiveSourcePath);
|
||||||
if (cookie != 0) {
|
if (cookie != 0) {
|
||||||
res = new Resources(assmgr, metrics, null);
|
res = new Resources(assmgr, metrics, null);
|
||||||
assmgr.setConfiguration(0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
assmgr.setConfiguration(0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
Build.VERSION.RESOURCES_SDK_INT);
|
Build.VERSION.RESOURCES_SDK_INT);
|
||||||
parser = assmgr.openXmlResourceParser(cookie, "AndroidManifest.xml");
|
parser = assmgr.openXmlResourceParser(cookie, "AndroidManifest.xml");
|
||||||
assetError = false;
|
assetError = false;
|
||||||
@ -596,7 +596,7 @@ public class PackageParser {
|
|||||||
AssetManager assmgr = null;
|
AssetManager assmgr = null;
|
||||||
try {
|
try {
|
||||||
assmgr = new AssetManager();
|
assmgr = new AssetManager();
|
||||||
assmgr.setConfiguration(0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
assmgr.setConfiguration(0, 0, null, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
Build.VERSION.RESOURCES_SDK_INT);
|
Build.VERSION.RESOURCES_SDK_INT);
|
||||||
int cookie = assmgr.addAssetPath(packageFilePath);
|
int cookie = assmgr.addAssetPath(packageFilePath);
|
||||||
parser = assmgr.openXmlResourceParser(cookie, "AndroidManifest.xml");
|
parser = assmgr.openXmlResourceParser(cookie, "AndroidManifest.xml");
|
||||||
@ -1931,6 +1931,10 @@ public class PackageParser {
|
|||||||
a.info.configChanges = sa.getInt(
|
a.info.configChanges = sa.getInt(
|
||||||
com.android.internal.R.styleable.AndroidManifestActivity_configChanges,
|
com.android.internal.R.styleable.AndroidManifestActivity_configChanges,
|
||||||
0);
|
0);
|
||||||
|
if (owner.applicationInfo.targetSdkVersion
|
||||||
|
< android.os.Build.VERSION_CODES.HONEYCOMB_MR2) {
|
||||||
|
a.info.configChanges |= ActivityInfo.CONFIG_SCREEN_SIZE;
|
||||||
|
}
|
||||||
a.info.softInputMode = sa.getInt(
|
a.info.softInputMode = sa.getInt(
|
||||||
com.android.internal.R.styleable.AndroidManifestActivity_windowSoftInputMode,
|
com.android.internal.R.styleable.AndroidManifestActivity_windowSoftInputMode,
|
||||||
0);
|
0);
|
||||||
|
@ -652,7 +652,8 @@ public final class AssetManager {
|
|||||||
public native final void setConfiguration(int mcc, int mnc, String locale,
|
public native final void setConfiguration(int mcc, int mnc, String locale,
|
||||||
int orientation, int touchscreen, int density, int keyboard,
|
int orientation, int touchscreen, int density, int keyboard,
|
||||||
int keyboardHidden, int navigation, int screenWidth, int screenHeight,
|
int keyboardHidden, int navigation, int screenWidth, int screenHeight,
|
||||||
int screenLayout, int uiMode, int majorVersion);
|
int screenWidthDp, int screenHeightDp, int screenLayout, int uiMode,
|
||||||
|
int majorVersion);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Retrieve the resource identifier for the given resource name.
|
* Retrieve the resource identifier for the given resource name.
|
||||||
|
@ -245,6 +245,20 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
*/
|
*/
|
||||||
public int uiMode;
|
public int uiMode;
|
||||||
|
|
||||||
|
public static final int SCREEN_WIDTH_DP_UNDEFINED = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current width of the available screen space, in dp units.
|
||||||
|
*/
|
||||||
|
public int screenWidthDp;
|
||||||
|
|
||||||
|
public static final int SCREEN_HEIGHT_DP_UNDEFINED = 0;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The current height of the available screen space, in dp units.
|
||||||
|
*/
|
||||||
|
public int screenHeightDp;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @hide Internal book-keeping.
|
* @hide Internal book-keeping.
|
||||||
*/
|
*/
|
||||||
@ -282,6 +296,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
orientation = o.orientation;
|
orientation = o.orientation;
|
||||||
screenLayout = o.screenLayout;
|
screenLayout = o.screenLayout;
|
||||||
uiMode = o.uiMode;
|
uiMode = o.uiMode;
|
||||||
|
screenWidthDp = o.screenWidthDp;
|
||||||
|
screenHeightDp = o.screenHeightDp;
|
||||||
seq = o.seq;
|
seq = o.seq;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -320,6 +336,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
sb.append(java.lang.Integer.toHexString(screenLayout));
|
sb.append(java.lang.Integer.toHexString(screenLayout));
|
||||||
sb.append(" uiMode=0x");
|
sb.append(" uiMode=0x");
|
||||||
sb.append(java.lang.Integer.toHexString(uiMode));
|
sb.append(java.lang.Integer.toHexString(uiMode));
|
||||||
|
sb.append(" wdp=");
|
||||||
|
sb.append(screenWidthDp);
|
||||||
|
sb.append(" hdp=");
|
||||||
|
sb.append(screenHeightDp);
|
||||||
if (seq != 0) {
|
if (seq != 0) {
|
||||||
sb.append(" seq=");
|
sb.append(" seq=");
|
||||||
sb.append(seq);
|
sb.append(seq);
|
||||||
@ -345,6 +365,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
orientation = ORIENTATION_UNDEFINED;
|
orientation = ORIENTATION_UNDEFINED;
|
||||||
screenLayout = SCREENLAYOUT_SIZE_UNDEFINED;
|
screenLayout = SCREENLAYOUT_SIZE_UNDEFINED;
|
||||||
uiMode = UI_MODE_TYPE_UNDEFINED;
|
uiMode = UI_MODE_TYPE_UNDEFINED;
|
||||||
|
screenWidthDp = SCREEN_WIDTH_DP_UNDEFINED;
|
||||||
|
screenHeightDp = SCREEN_HEIGHT_DP_UNDEFINED;
|
||||||
seq = 0;
|
seq = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -438,6 +460,16 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
| (delta.uiMode&UI_MODE_NIGHT_MASK);
|
| (delta.uiMode&UI_MODE_NIGHT_MASK);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (delta.screenWidthDp != SCREEN_WIDTH_DP_UNDEFINED
|
||||||
|
&& screenWidthDp != delta.screenWidthDp) {
|
||||||
|
changed |= ActivityInfo.CONFIG_SCREEN_SIZE;
|
||||||
|
screenWidthDp = delta.screenWidthDp;
|
||||||
|
}
|
||||||
|
if (delta.screenHeightDp != SCREEN_HEIGHT_DP_UNDEFINED
|
||||||
|
&& screenHeightDp != delta.screenHeightDp) {
|
||||||
|
changed |= ActivityInfo.CONFIG_SCREEN_SIZE;
|
||||||
|
screenHeightDp = delta.screenHeightDp;
|
||||||
|
}
|
||||||
|
|
||||||
if (delta.seq != 0) {
|
if (delta.seq != 0) {
|
||||||
seq = delta.seq;
|
seq = delta.seq;
|
||||||
@ -467,9 +499,11 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
* {@link android.content.pm.ActivityInfo#CONFIG_NAVIGATION
|
* {@link android.content.pm.ActivityInfo#CONFIG_NAVIGATION
|
||||||
* PackageManager.ActivityInfo.CONFIG_NAVIGATION},
|
* PackageManager.ActivityInfo.CONFIG_NAVIGATION},
|
||||||
* {@link android.content.pm.ActivityInfo#CONFIG_ORIENTATION
|
* {@link android.content.pm.ActivityInfo#CONFIG_ORIENTATION
|
||||||
* PackageManager.ActivityInfo.CONFIG_ORIENTATION}, or
|
* PackageManager.ActivityInfo.CONFIG_ORIENTATION},
|
||||||
* {@link android.content.pm.ActivityInfo#CONFIG_SCREEN_LAYOUT
|
* {@link android.content.pm.ActivityInfo#CONFIG_SCREEN_LAYOUT
|
||||||
* PackageManager.ActivityInfo.CONFIG_SCREEN_LAYOUT}.
|
* PackageManager.ActivityInfo.CONFIG_SCREEN_LAYOUT}, or
|
||||||
|
* {@link android.content.pm.ActivityInfo#CONFIG_SCREEN_SIZE
|
||||||
|
* PackageManager.ActivityInfo.CONFIG_SCREEN_SIZE}.
|
||||||
*/
|
*/
|
||||||
public int diff(Configuration delta) {
|
public int diff(Configuration delta) {
|
||||||
int changed = 0;
|
int changed = 0;
|
||||||
@ -522,6 +556,14 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
&& uiMode != delta.uiMode) {
|
&& uiMode != delta.uiMode) {
|
||||||
changed |= ActivityInfo.CONFIG_UI_MODE;
|
changed |= ActivityInfo.CONFIG_UI_MODE;
|
||||||
}
|
}
|
||||||
|
if (delta.screenWidthDp != SCREEN_WIDTH_DP_UNDEFINED
|
||||||
|
&& screenWidthDp != delta.screenWidthDp) {
|
||||||
|
changed |= ActivityInfo.CONFIG_SCREEN_SIZE;
|
||||||
|
}
|
||||||
|
if (delta.screenHeightDp != SCREEN_HEIGHT_DP_UNDEFINED
|
||||||
|
&& screenHeightDp != delta.screenHeightDp) {
|
||||||
|
changed |= ActivityInfo.CONFIG_SCREEN_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
@ -603,6 +645,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
dest.writeInt(orientation);
|
dest.writeInt(orientation);
|
||||||
dest.writeInt(screenLayout);
|
dest.writeInt(screenLayout);
|
||||||
dest.writeInt(uiMode);
|
dest.writeInt(uiMode);
|
||||||
|
dest.writeInt(screenWidthDp);
|
||||||
|
dest.writeInt(screenHeightDp);
|
||||||
dest.writeInt(seq);
|
dest.writeInt(seq);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -624,6 +668,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
orientation = source.readInt();
|
orientation = source.readInt();
|
||||||
screenLayout = source.readInt();
|
screenLayout = source.readInt();
|
||||||
uiMode = source.readInt();
|
uiMode = source.readInt();
|
||||||
|
screenWidthDp = source.readInt();
|
||||||
|
screenHeightDp = source.readInt();
|
||||||
seq = source.readInt();
|
seq = source.readInt();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -684,6 +730,10 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
n = this.screenLayout - that.screenLayout;
|
n = this.screenLayout - that.screenLayout;
|
||||||
if (n != 0) return n;
|
if (n != 0) return n;
|
||||||
n = this.uiMode - that.uiMode;
|
n = this.uiMode - that.uiMode;
|
||||||
|
if (n != 0) return n;
|
||||||
|
n = this.screenWidthDp - that.screenWidthDp;
|
||||||
|
if (n != 0) return n;
|
||||||
|
n = this.screenHeightDp - that.screenHeightDp;
|
||||||
//if (n != 0) return n;
|
//if (n != 0) return n;
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
@ -717,6 +767,8 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
|||||||
result = 31 * result + orientation;
|
result = 31 * result + orientation;
|
||||||
result = 31 * result + screenLayout;
|
result = 31 * result + screenLayout;
|
||||||
result = 31 * result + uiMode;
|
result = 31 * result + uiMode;
|
||||||
|
result = 31 * result + screenWidthDp;
|
||||||
|
result = 31 * result + screenHeightDp;
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -21,6 +21,7 @@ import com.android.internal.util.XmlUtils;
|
|||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
import org.xmlpull.v1.XmlPullParserException;
|
import org.xmlpull.v1.XmlPullParserException;
|
||||||
|
|
||||||
|
import android.content.pm.ActivityInfo;
|
||||||
import android.graphics.Movie;
|
import android.graphics.Movie;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.graphics.drawable.ColorDrawable;
|
import android.graphics.drawable.ColorDrawable;
|
||||||
@ -1418,6 +1419,7 @@ public class Resources {
|
|||||||
mTmpConfig.setTo(config);
|
mTmpConfig.setTo(config);
|
||||||
mCompatibilityInfo.applyToConfiguration(mTmpConfig);
|
mCompatibilityInfo.applyToConfiguration(mTmpConfig);
|
||||||
configChanges = mConfiguration.updateFrom(mTmpConfig);
|
configChanges = mConfiguration.updateFrom(mTmpConfig);
|
||||||
|
configChanges = ActivityInfo.activityInfoConfigToNative(configChanges);
|
||||||
}
|
}
|
||||||
if (mConfiguration.locale == null) {
|
if (mConfiguration.locale == null) {
|
||||||
mConfiguration.locale = Locale.getDefault();
|
mConfiguration.locale = Locale.getDefault();
|
||||||
@ -1456,6 +1458,7 @@ public class Resources {
|
|||||||
mConfiguration.touchscreen,
|
mConfiguration.touchscreen,
|
||||||
(int)(mMetrics.density*160), mConfiguration.keyboard,
|
(int)(mMetrics.density*160), mConfiguration.keyboard,
|
||||||
keyboardHidden, mConfiguration.navigation, width, height,
|
keyboardHidden, mConfiguration.navigation, width, height,
|
||||||
|
mConfiguration.screenWidthDp, mConfiguration.screenHeightDp,
|
||||||
mConfiguration.screenLayout, mConfiguration.uiMode,
|
mConfiguration.screenLayout, mConfiguration.uiMode,
|
||||||
Build.VERSION.RESOURCES_SDK_INT);
|
Build.VERSION.RESOURCES_SDK_INT);
|
||||||
|
|
||||||
|
@ -532,6 +532,7 @@ static void android_content_AssetManager_setConfiguration(JNIEnv* env, jobject c
|
|||||||
jint keyboard, jint keyboardHidden,
|
jint keyboard, jint keyboardHidden,
|
||||||
jint navigation,
|
jint navigation,
|
||||||
jint screenWidth, jint screenHeight,
|
jint screenWidth, jint screenHeight,
|
||||||
|
jint screenWidthDp, jint screenHeightDp,
|
||||||
jint screenLayout, jint uiMode,
|
jint screenLayout, jint uiMode,
|
||||||
jint sdkVersion)
|
jint sdkVersion)
|
||||||
{
|
{
|
||||||
@ -555,6 +556,8 @@ static void android_content_AssetManager_setConfiguration(JNIEnv* env, jobject c
|
|||||||
config.navigation = (uint8_t)navigation;
|
config.navigation = (uint8_t)navigation;
|
||||||
config.screenWidth = (uint16_t)screenWidth;
|
config.screenWidth = (uint16_t)screenWidth;
|
||||||
config.screenHeight = (uint16_t)screenHeight;
|
config.screenHeight = (uint16_t)screenHeight;
|
||||||
|
config.screenWidthDp = (uint16_t)screenWidthDp;
|
||||||
|
config.screenHeightDp = (uint16_t)screenHeightDp;
|
||||||
config.screenLayout = (uint8_t)screenLayout;
|
config.screenLayout = (uint8_t)screenLayout;
|
||||||
config.uiMode = (uint8_t)uiMode;
|
config.uiMode = (uint8_t)uiMode;
|
||||||
config.sdkVersion = (uint16_t)sdkVersion;
|
config.sdkVersion = (uint16_t)sdkVersion;
|
||||||
@ -1693,7 +1696,7 @@ static JNINativeMethod gAssetManagerMethods[] = {
|
|||||||
(void*) android_content_AssetManager_setLocale },
|
(void*) android_content_AssetManager_setLocale },
|
||||||
{ "getLocales", "()[Ljava/lang/String;",
|
{ "getLocales", "()[Ljava/lang/String;",
|
||||||
(void*) android_content_AssetManager_getLocales },
|
(void*) android_content_AssetManager_getLocales },
|
||||||
{ "setConfiguration", "(IILjava/lang/String;IIIIIIIIIII)V",
|
{ "setConfiguration", "(IILjava/lang/String;IIIIIIIIIIIII)V",
|
||||||
(void*) android_content_AssetManager_setConfiguration },
|
(void*) android_content_AssetManager_setConfiguration },
|
||||||
{ "getResourceIdentifier","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
|
{ "getResourceIdentifier","(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)I",
|
||||||
(void*) android_content_AssetManager_getResourceIdentifier },
|
(void*) android_content_AssetManager_getResourceIdentifier },
|
||||||
|
@ -590,6 +590,11 @@
|
|||||||
<!-- The global user interface mode has changed. For example,
|
<!-- The global user interface mode has changed. For example,
|
||||||
going in or out of car mode, night mode changing, etc. -->
|
going in or out of car mode, night mode changing, etc. -->
|
||||||
<flag name="uiMode" value="0x0200" />
|
<flag name="uiMode" value="0x0200" />
|
||||||
|
<!-- The physical screen size has changed. If applications don't
|
||||||
|
target at least {@link android.os.Build.VERSION_CODES#HONEYCOMB_MR2}
|
||||||
|
then the activity will always handle this itself (the change
|
||||||
|
will not result in a restart). -->
|
||||||
|
<flag name="screenSize" value="0x0400" />
|
||||||
<!-- The font scaling factor has changed, that is the user has
|
<!-- The font scaling factor has changed, that is the user has
|
||||||
selected a new global font size. -->
|
selected a new global font size. -->
|
||||||
<flag name="fontScale" value="0x40000000" />
|
<flag name="fontScale" value="0x40000000" />
|
||||||
|
@ -383,6 +383,46 @@ is not related to the screen orientation.</p>
|
|||||||
which indicates whether the screen is long.</p>
|
which indicates whether the screen is long.</p>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr id="ScreenWidthQualifier">
|
||||||
|
<td>Screen width</td>
|
||||||
|
<td>Examples:<br/>
|
||||||
|
<code>w720dp</code><br/>
|
||||||
|
<code>w1024dp</code><br/>
|
||||||
|
etc.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Specifies a minimum screen width, in "dp" units, at which the resource
|
||||||
|
should be used. This configuration value will change when the orientation
|
||||||
|
changes between landscape and portrait to match the current actual width.
|
||||||
|
When multiple screen width configurations are available, the closest to
|
||||||
|
the current screen width will be used. The value specified here is
|
||||||
|
approximate; screen decorations like a status bar or system bar may cause
|
||||||
|
the actual space available in your UI to be slightly smaller.
|
||||||
|
<p><em>Added in API Level 13.</em></p>
|
||||||
|
<p>Also see the {@link android.content.res.Configuration#screenWidthDp}
|
||||||
|
configuration field, which holds the current screen width.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr id="ScreenHeightQualifier">
|
||||||
|
<td>Screen height</td>
|
||||||
|
<td>Examples:<br/>
|
||||||
|
<code>h720dp</code><br/>
|
||||||
|
<code>h1024dp</code><br/>
|
||||||
|
etc.
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<p>Specifies a minimum screen height, in "dp" units, at which the resource
|
||||||
|
should be used. This configuration value will change when the orientation
|
||||||
|
changes between landscape and portrait to match the current actual height.
|
||||||
|
When multiple screen height configurations are available, the closest to
|
||||||
|
the current screen height will be used. The value specified here is
|
||||||
|
approximate; screen decorations like a status bar or system bar may cause
|
||||||
|
the actual space available in your UI to be slightly smaller.
|
||||||
|
<p><em>Added in API Level 13.</em></p>
|
||||||
|
<p>Also see the {@link android.content.res.Configuration#screenHeightDp}
|
||||||
|
configuration field, which holds the current screen width.</p>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
<tr id="OrientationQualifier">
|
<tr id="OrientationQualifier">
|
||||||
<td>Screen orientation</td>
|
<td>Screen orientation</td>
|
||||||
<td>
|
<td>
|
||||||
|
@ -972,6 +972,14 @@ struct ResTable_config
|
|||||||
uint32_t screenConfig;
|
uint32_t screenConfig;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
uint16_t screenWidthDp;
|
||||||
|
uint16_t screenHeightDp;
|
||||||
|
};
|
||||||
|
uint32_t screenSizeDp;
|
||||||
|
};
|
||||||
|
|
||||||
inline void copyFromDeviceNoSwap(const ResTable_config& o) {
|
inline void copyFromDeviceNoSwap(const ResTable_config& o) {
|
||||||
const size_t size = dtohl(o.size);
|
const size_t size = dtohl(o.size);
|
||||||
if (size >= sizeof(ResTable_config)) {
|
if (size >= sizeof(ResTable_config)) {
|
||||||
@ -992,6 +1000,8 @@ struct ResTable_config
|
|||||||
screenHeight = dtohs(screenHeight);
|
screenHeight = dtohs(screenHeight);
|
||||||
sdkVersion = dtohs(sdkVersion);
|
sdkVersion = dtohs(sdkVersion);
|
||||||
minorVersion = dtohs(minorVersion);
|
minorVersion = dtohs(minorVersion);
|
||||||
|
screenWidthDp = dtohs(screenWidthDp);
|
||||||
|
screenHeightDp = dtohs(screenHeightDp);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline void swapHtoD() {
|
inline void swapHtoD() {
|
||||||
@ -1003,6 +1013,8 @@ struct ResTable_config
|
|||||||
screenHeight = htods(screenHeight);
|
screenHeight = htods(screenHeight);
|
||||||
sdkVersion = htods(sdkVersion);
|
sdkVersion = htods(sdkVersion);
|
||||||
minorVersion = htods(minorVersion);
|
minorVersion = htods(minorVersion);
|
||||||
|
screenWidthDp = htods(screenWidthDp);
|
||||||
|
screenHeightDp = htods(screenHeightDp);
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int compare(const ResTable_config& o) const {
|
inline int compare(const ResTable_config& o) const {
|
||||||
@ -1021,6 +1033,8 @@ struct ResTable_config
|
|||||||
diff = (int32_t)(screenLayout - o.screenLayout);
|
diff = (int32_t)(screenLayout - o.screenLayout);
|
||||||
if (diff != 0) return diff;
|
if (diff != 0) return diff;
|
||||||
diff = (int32_t)(uiMode - o.uiMode);
|
diff = (int32_t)(uiMode - o.uiMode);
|
||||||
|
if (diff != 0) return diff;
|
||||||
|
diff = (int32_t)(screenSizeDp - o.screenSizeDp);
|
||||||
return (int)diff;
|
return (int)diff;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1061,6 +1075,7 @@ struct ResTable_config
|
|||||||
if (version != o.version) diffs |= CONFIG_VERSION;
|
if (version != o.version) diffs |= CONFIG_VERSION;
|
||||||
if (screenLayout != o.screenLayout) diffs |= CONFIG_SCREEN_LAYOUT;
|
if (screenLayout != o.screenLayout) diffs |= CONFIG_SCREEN_LAYOUT;
|
||||||
if (uiMode != o.uiMode) diffs |= CONFIG_UI_MODE;
|
if (uiMode != o.uiMode) diffs |= CONFIG_UI_MODE;
|
||||||
|
if (screenSizeDp != o.screenSizeDp) diffs |= CONFIG_SCREEN_SIZE;
|
||||||
return diffs;
|
return diffs;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1105,6 +1120,18 @@ struct ResTable_config
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (screenSizeDp || o.screenSizeDp) {
|
||||||
|
if (screenWidthDp != o.screenWidthDp) {
|
||||||
|
if (!screenWidthDp) return false;
|
||||||
|
if (!o.screenWidthDp) return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (screenHeightDp != o.screenHeightDp) {
|
||||||
|
if (!screenHeightDp) return false;
|
||||||
|
if (!o.screenHeightDp) return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (orientation != o.orientation) {
|
if (orientation != o.orientation) {
|
||||||
if (!orientation) return false;
|
if (!orientation) return false;
|
||||||
if (!o.orientation) return true;
|
if (!o.orientation) return true;
|
||||||
@ -1243,6 +1270,30 @@ struct ResTable_config
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (screenSizeDp || o.screenSizeDp) {
|
||||||
|
// Better is based on the sum of the difference between both
|
||||||
|
// width and height from the requested dimensions. We are
|
||||||
|
// assuming the invalid configs (with smaller dimens) have
|
||||||
|
// already been filtered. Note that if a particular dimension
|
||||||
|
// is unspecified, we will end up with a large value (the
|
||||||
|
// difference between 0 and the requested dimension), which is
|
||||||
|
// good since we will prefer a config that has specified a
|
||||||
|
// dimension value.
|
||||||
|
int myDelta = 0, otherDelta = 0;
|
||||||
|
if (requested->screenWidthDp) {
|
||||||
|
myDelta += requested->screenWidthDp - screenWidthDp;
|
||||||
|
otherDelta += requested->screenWidthDp - o.screenWidthDp;
|
||||||
|
}
|
||||||
|
if (requested->screenHeightDp) {
|
||||||
|
myDelta += requested->screenHeightDp - screenHeightDp;
|
||||||
|
otherDelta += requested->screenHeightDp - o.screenHeightDp;
|
||||||
|
}
|
||||||
|
//LOGI("Comparing this %dx%d to other %dx%d in %dx%d: myDelta=%d otherDelta=%d",
|
||||||
|
// screenWidthDp, screenHeightDp, o.screenWidthDp, o.screenHeightDp,
|
||||||
|
// requested->screenWidthDp, requested->screenHeightDp, myDelta, otherDelta);
|
||||||
|
return (myDelta <= otherDelta);
|
||||||
|
}
|
||||||
|
|
||||||
if ((orientation != o.orientation) && requested->orientation) {
|
if ((orientation != o.orientation) && requested->orientation) {
|
||||||
return (orientation);
|
return (orientation);
|
||||||
}
|
}
|
||||||
@ -1426,6 +1477,18 @@ struct ResTable_config
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (screenSizeDp != 0) {
|
||||||
|
if (settings.screenWidthDp != 0 && screenWidthDp != 0
|
||||||
|
&& screenWidthDp > settings.screenWidthDp) {
|
||||||
|
//LOGI("Filtering out width %d in requested %d", screenWidthDp, settings.screenWidthDp);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (settings.screenHeightDp != 0 && screenHeightDp != 0
|
||||||
|
&& screenHeightDp > settings.screenHeightDp) {
|
||||||
|
//LOGI("Filtering out height %d in requested %d", screenHeightDp, settings.screenHeightDp);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (screenType != 0) {
|
if (screenType != 0) {
|
||||||
if (settings.orientation != 0 && orientation != 0
|
if (settings.orientation != 0 && orientation != 0
|
||||||
&& orientation != settings.orientation) {
|
&& orientation != settings.orientation) {
|
||||||
@ -1505,13 +1568,13 @@ struct ResTable_config
|
|||||||
String8 toString() const {
|
String8 toString() const {
|
||||||
char buf[200];
|
char buf[200];
|
||||||
sprintf(buf, "imsi=%d/%d lang=%c%c reg=%c%c orient=%d touch=%d dens=%d "
|
sprintf(buf, "imsi=%d/%d lang=%c%c reg=%c%c orient=%d touch=%d dens=%d "
|
||||||
"kbd=%d nav=%d input=%d scrnW=%d scrnH=%d sz=%d long=%d "
|
"kbd=%d nav=%d input=%d ssz=%dx%d %ddp x %ddp sz=%d long=%d "
|
||||||
"ui=%d night=%d vers=%d.%d",
|
"ui=%d night=%d vers=%d.%d",
|
||||||
mcc, mnc,
|
mcc, mnc,
|
||||||
language[0] ? language[0] : '-', language[1] ? language[1] : '-',
|
language[0] ? language[0] : '-', language[1] ? language[1] : '-',
|
||||||
country[0] ? country[0] : '-', country[1] ? country[1] : '-',
|
country[0] ? country[0] : '-', country[1] ? country[1] : '-',
|
||||||
orientation, touchscreen, density, keyboard, navigation, inputFlags,
|
orientation, touchscreen, density, keyboard, navigation, inputFlags,
|
||||||
screenWidth, screenHeight,
|
screenWidth, screenHeight, screenWidthDp, screenHeightDp,
|
||||||
screenLayout&MASK_SCREENSIZE, screenLayout&MASK_SCREENLONG,
|
screenLayout&MASK_SCREENSIZE, screenLayout&MASK_SCREENLONG,
|
||||||
uiMode&MASK_UI_MODE_TYPE, uiMode&MASK_UI_MODE_NIGHT,
|
uiMode&MASK_UI_MODE_TYPE, uiMode&MASK_UI_MODE_NIGHT,
|
||||||
sdkVersion, minorVersion);
|
sdkVersion, minorVersion);
|
||||||
|
@ -2424,7 +2424,7 @@ void ResTable::setParameters(const ResTable_config* params)
|
|||||||
{
|
{
|
||||||
mLock.lock();
|
mLock.lock();
|
||||||
TABLE_GETENTRY(LOGI("Setting parameters: imsi:%d/%d lang:%c%c cnt:%c%c "
|
TABLE_GETENTRY(LOGI("Setting parameters: imsi:%d/%d lang:%c%c cnt:%c%c "
|
||||||
"orien:%d touch:%d density:%d key:%d inp:%d nav:%d w:%d h:%d\n",
|
"orien:%d touch:%d density:%d key:%d inp:%d nav:%d sz:%dx%d %ddp x %ddp\n",
|
||||||
params->mcc, params->mnc,
|
params->mcc, params->mnc,
|
||||||
params->language[0] ? params->language[0] : '-',
|
params->language[0] ? params->language[0] : '-',
|
||||||
params->language[1] ? params->language[1] : '-',
|
params->language[1] ? params->language[1] : '-',
|
||||||
@ -2437,7 +2437,9 @@ void ResTable::setParameters(const ResTable_config* params)
|
|||||||
params->inputFlags,
|
params->inputFlags,
|
||||||
params->navigation,
|
params->navigation,
|
||||||
params->screenWidth,
|
params->screenWidth,
|
||||||
params->screenHeight));
|
params->screenHeight,
|
||||||
|
params->screenWidthDp,
|
||||||
|
params->screenHeightDp));
|
||||||
mParams = *params;
|
mParams = *params;
|
||||||
for (size_t i=0; i<mPackageGroups.size(); i++) {
|
for (size_t i=0; i<mPackageGroups.size(); i++) {
|
||||||
TABLE_NOISY(LOGI("CLEARING BAGS FOR GROUP %d!", i));
|
TABLE_NOISY(LOGI("CLEARING BAGS FOR GROUP %d!", i));
|
||||||
@ -3758,8 +3760,10 @@ ssize_t ResTable::getEntry(
|
|||||||
ResTable_config thisConfig;
|
ResTable_config thisConfig;
|
||||||
thisConfig.copyFromDtoH(thisType->config);
|
thisConfig.copyFromDtoH(thisType->config);
|
||||||
|
|
||||||
TABLE_GETENTRY(LOGI("Match entry 0x%x in type 0x%x (sz 0x%x): imsi:%d/%d=%d/%d lang:%c%c=%c%c cnt:%c%c=%c%c "
|
TABLE_GETENTRY(LOGI("Match entry 0x%x in type 0x%x (sz 0x%x): imsi:%d/%d=%d/%d "
|
||||||
"orien:%d=%d touch:%d=%d density:%d=%d key:%d=%d inp:%d=%d nav:%d=%d w:%d=%d h:%d=%d\n",
|
"lang:%c%c=%c%c cnt:%c%c=%c%c orien:%d=%d touch:%d=%d "
|
||||||
|
"density:%d=%d key:%d=%d inp:%d=%d nav:%d=%d w:%d=%d h:%d=%d "
|
||||||
|
"wdp:%d=%d hdp:%d=%d\n",
|
||||||
entryIndex, typeIndex+1, dtohl(thisType->config.size),
|
entryIndex, typeIndex+1, dtohl(thisType->config.size),
|
||||||
thisConfig.mcc, thisConfig.mnc,
|
thisConfig.mcc, thisConfig.mnc,
|
||||||
config ? config->mcc : 0, config ? config->mnc : 0,
|
config ? config->mcc : 0, config ? config->mnc : 0,
|
||||||
@ -3786,7 +3790,11 @@ ssize_t ResTable::getEntry(
|
|||||||
thisConfig.screenWidth,
|
thisConfig.screenWidth,
|
||||||
config ? config->screenWidth : 0,
|
config ? config->screenWidth : 0,
|
||||||
thisConfig.screenHeight,
|
thisConfig.screenHeight,
|
||||||
config ? config->screenHeight : 0));
|
config ? config->screenHeight : 0,
|
||||||
|
thisConfig.screenWidthDp,
|
||||||
|
config ? config->screenWidthDp : 0,
|
||||||
|
thisConfig.screenHeightDp,
|
||||||
|
config ? config->screenHeightDp : 0));
|
||||||
|
|
||||||
// Check to make sure this one is valid for the current parameters.
|
// Check to make sure this one is valid for the current parameters.
|
||||||
if (config && !thisConfig.match(*config)) {
|
if (config && !thisConfig.match(*config)) {
|
||||||
@ -4067,7 +4075,8 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg,
|
|||||||
ResTable_config thisConfig;
|
ResTable_config thisConfig;
|
||||||
thisConfig.copyFromDtoH(type->config);
|
thisConfig.copyFromDtoH(type->config);
|
||||||
LOGI("Adding config to type %d: imsi:%d/%d lang:%c%c cnt:%c%c "
|
LOGI("Adding config to type %d: imsi:%d/%d lang:%c%c cnt:%c%c "
|
||||||
"orien:%d touch:%d density:%d key:%d inp:%d nav:%d w:%d h:%d\n",
|
"orien:%d touch:%d density:%d key:%d inp:%d nav:%d w:%d h:%d "
|
||||||
|
"wdp:%d hdp:%d\n",
|
||||||
type->id,
|
type->id,
|
||||||
thisConfig.mcc, thisConfig.mnc,
|
thisConfig.mcc, thisConfig.mnc,
|
||||||
thisConfig.language[0] ? thisConfig.language[0] : '-',
|
thisConfig.language[0] ? thisConfig.language[0] : '-',
|
||||||
@ -4081,7 +4090,9 @@ status_t ResTable::parsePackage(const ResTable_package* const pkg,
|
|||||||
thisConfig.inputFlags,
|
thisConfig.inputFlags,
|
||||||
thisConfig.navigation,
|
thisConfig.navigation,
|
||||||
thisConfig.screenWidth,
|
thisConfig.screenWidth,
|
||||||
thisConfig.screenHeight));
|
thisConfig.screenHeight,
|
||||||
|
thisConfig.screenWidthDp,
|
||||||
|
thisConfig.screenHeightDp));
|
||||||
t->configs.add(type);
|
t->configs.add(type);
|
||||||
} else {
|
} else {
|
||||||
status_t err = validate_chunk(chunk, sizeof(ResChunk_header),
|
status_t err = validate_chunk(chunk, sizeof(ResChunk_header),
|
||||||
@ -4444,6 +4455,12 @@ void ResTable::print(bool inclValues) const
|
|||||||
if (type->config.screenHeight != 0) {
|
if (type->config.screenHeight != 0) {
|
||||||
printf(" h=%d", dtohs(type->config.screenHeight));
|
printf(" h=%d", dtohs(type->config.screenHeight));
|
||||||
}
|
}
|
||||||
|
if (type->config.screenWidthDp != 0) {
|
||||||
|
printf(" wdp=%d", dtohs(type->config.screenWidthDp));
|
||||||
|
}
|
||||||
|
if (type->config.screenHeightDp != 0) {
|
||||||
|
printf(" hdp=%d", dtohs(type->config.screenHeightDp));
|
||||||
|
}
|
||||||
if (type->config.sdkVersion != 0) {
|
if (type->config.sdkVersion != 0) {
|
||||||
printf(" sdk=%d", dtohs(type->config.sdkVersion));
|
printf(" sdk=%d", dtohs(type->config.sdkVersion));
|
||||||
}
|
}
|
||||||
|
@ -5454,6 +5454,9 @@ public class WindowManagerService extends IWindowManager.Stub
|
|||||||
mCompatibleScreenScale = CompatibilityInfo.updateCompatibleScreenFrame(
|
mCompatibleScreenScale = CompatibilityInfo.updateCompatibleScreenFrame(
|
||||||
dm, mCompatibleScreenFrame, null);
|
dm, mCompatibleScreenFrame, null);
|
||||||
|
|
||||||
|
config.screenWidthDp = (int)(dm.widthPixels / dm.density);
|
||||||
|
config.screenHeightDp = (int)(dm.heightPixels / dm.density);
|
||||||
|
|
||||||
if (mScreenLayout == Configuration.SCREENLAYOUT_SIZE_UNDEFINED) {
|
if (mScreenLayout == Configuration.SCREENLAYOUT_SIZE_UNDEFINED) {
|
||||||
// Note we only do this once because at this point we don't
|
// Note we only do this once because at this point we don't
|
||||||
// expect the screen to change in this way at runtime, and want
|
// expect the screen to change in this way at runtime, and want
|
||||||
|
@ -156,6 +156,20 @@ AaptGroupEntry::parseNamePart(const String8& part, int* axis, uint32_t* value)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// screen dp width
|
||||||
|
if (getScreenWidthDpName(part.string(), &config)) {
|
||||||
|
*axis = AXIS_SCREENWIDTHDP;
|
||||||
|
*value = config.screenWidthDp;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// screen dp height
|
||||||
|
if (getScreenHeightDpName(part.string(), &config)) {
|
||||||
|
*axis = AXIS_SCREENHEIGHTDP;
|
||||||
|
*value = config.screenHeightDp;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
// orientation
|
// orientation
|
||||||
if (getOrientationName(part.string(), &config)) {
|
if (getOrientationName(part.string(), &config)) {
|
||||||
*axis = AXIS_ORIENTATION;
|
*axis = AXIS_ORIENTATION;
|
||||||
@ -243,7 +257,7 @@ AaptGroupEntry::initFromDirName(const char* dir, String8* resType)
|
|||||||
|
|
||||||
String8 mcc, mnc, loc, layoutsize, layoutlong, orient, den;
|
String8 mcc, mnc, loc, layoutsize, layoutlong, orient, den;
|
||||||
String8 touch, key, keysHidden, nav, navHidden, size, vers;
|
String8 touch, key, keysHidden, nav, navHidden, size, vers;
|
||||||
String8 uiModeType, uiModeNight;
|
String8 uiModeType, uiModeNight, widthdp, heightdp;
|
||||||
|
|
||||||
const char *p = dir;
|
const char *p = dir;
|
||||||
const char *q;
|
const char *q;
|
||||||
@ -354,6 +368,30 @@ AaptGroupEntry::initFromDirName(const char* dir, String8* resType)
|
|||||||
//printf("not screen layout long: %s\n", part.string());
|
//printf("not screen layout long: %s\n", part.string());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (getScreenWidthDpName(part.string())) {
|
||||||
|
widthdp = part;
|
||||||
|
|
||||||
|
index++;
|
||||||
|
if (index == N) {
|
||||||
|
goto success;
|
||||||
|
}
|
||||||
|
part = parts[index];
|
||||||
|
} else {
|
||||||
|
//printf("not screen width dp: %s\n", part.string());
|
||||||
|
}
|
||||||
|
|
||||||
|
if (getScreenHeightDpName(part.string())) {
|
||||||
|
heightdp = part;
|
||||||
|
|
||||||
|
index++;
|
||||||
|
if (index == N) {
|
||||||
|
goto success;
|
||||||
|
}
|
||||||
|
part = parts[index];
|
||||||
|
} else {
|
||||||
|
//printf("not screen height dp: %s\n", part.string());
|
||||||
|
}
|
||||||
|
|
||||||
// orientation
|
// orientation
|
||||||
if (getOrientationName(part.string())) {
|
if (getOrientationName(part.string())) {
|
||||||
orient = part;
|
orient = part;
|
||||||
@ -503,6 +541,8 @@ success:
|
|||||||
this->locale = loc;
|
this->locale = loc;
|
||||||
this->screenLayoutSize = layoutsize;
|
this->screenLayoutSize = layoutsize;
|
||||||
this->screenLayoutLong = layoutlong;
|
this->screenLayoutLong = layoutlong;
|
||||||
|
this->screenWidthDp = widthdp;
|
||||||
|
this->screenHeightDp = heightdp;
|
||||||
this->orientation = orient;
|
this->orientation = orient;
|
||||||
this->uiModeType = uiModeType;
|
this->uiModeType = uiModeType;
|
||||||
this->uiModeNight = uiModeNight;
|
this->uiModeNight = uiModeNight;
|
||||||
@ -534,6 +574,10 @@ AaptGroupEntry::toString() const
|
|||||||
s += ",";
|
s += ",";
|
||||||
s += screenLayoutLong;
|
s += screenLayoutLong;
|
||||||
s += ",";
|
s += ",";
|
||||||
|
s += screenWidthDp;
|
||||||
|
s += ",";
|
||||||
|
s += screenHeightDp;
|
||||||
|
s += ",";
|
||||||
s += this->orientation;
|
s += this->orientation;
|
||||||
s += ",";
|
s += ",";
|
||||||
s += uiModeType;
|
s += uiModeType;
|
||||||
@ -582,6 +626,14 @@ AaptGroupEntry::toDirName(const String8& resType) const
|
|||||||
s += "-";
|
s += "-";
|
||||||
s += screenLayoutLong;
|
s += screenLayoutLong;
|
||||||
}
|
}
|
||||||
|
if (this->screenWidthDp != "") {
|
||||||
|
s += "-";
|
||||||
|
s += screenWidthDp;
|
||||||
|
}
|
||||||
|
if (this->screenHeightDp != "") {
|
||||||
|
s += "-";
|
||||||
|
s += screenHeightDp;
|
||||||
|
}
|
||||||
if (this->orientation != "") {
|
if (this->orientation != "") {
|
||||||
s += "-";
|
s += "-";
|
||||||
s += orientation;
|
s += orientation;
|
||||||
@ -1039,8 +1091,7 @@ bool AaptGroupEntry::getNavigationName(const char* name,
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AaptGroupEntry::getScreenSizeName(const char* name,
|
bool AaptGroupEntry::getScreenSizeName(const char* name, ResTable_config* out)
|
||||||
ResTable_config* out)
|
|
||||||
{
|
{
|
||||||
if (strcmp(name, kWildcardName) == 0) {
|
if (strcmp(name, kWildcardName) == 0) {
|
||||||
if (out) {
|
if (out) {
|
||||||
@ -1075,8 +1126,53 @@ bool AaptGroupEntry::getScreenSizeName(const char* name,
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AaptGroupEntry::getVersionName(const char* name,
|
bool AaptGroupEntry::getScreenWidthDpName(const char* name, ResTable_config* out)
|
||||||
ResTable_config* out)
|
{
|
||||||
|
if (strcmp(name, kWildcardName) == 0) {
|
||||||
|
if (out) {
|
||||||
|
out->screenWidthDp = out->SCREENWIDTH_ANY;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*name != 'w') return false;
|
||||||
|
name++;
|
||||||
|
const char* x = name;
|
||||||
|
while (*x >= '0' && *x <= '9') x++;
|
||||||
|
if (x == name || x[0] != 'd' || x[1] != 'p' || x[2] != 0) return false;
|
||||||
|
String8 xName(name, x-name);
|
||||||
|
|
||||||
|
if (out) {
|
||||||
|
out->screenWidthDp = (uint16_t)atoi(xName.string());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AaptGroupEntry::getScreenHeightDpName(const char* name, ResTable_config* out)
|
||||||
|
{
|
||||||
|
if (strcmp(name, kWildcardName) == 0) {
|
||||||
|
if (out) {
|
||||||
|
out->screenHeightDp = out->SCREENWIDTH_ANY;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (*name != 'h') return false;
|
||||||
|
name++;
|
||||||
|
const char* x = name;
|
||||||
|
while (*x >= '0' && *x <= '9') x++;
|
||||||
|
if (x == name || x[0] != 'd' || x[1] != 'p' || x[2] != 0) return false;
|
||||||
|
String8 xName(name, x-name);
|
||||||
|
|
||||||
|
if (out) {
|
||||||
|
out->screenHeightDp = (uint16_t)atoi(xName.string());
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool AaptGroupEntry::getVersionName(const char* name, ResTable_config* out)
|
||||||
{
|
{
|
||||||
if (strcmp(name, kWildcardName) == 0) {
|
if (strcmp(name, kWildcardName) == 0) {
|
||||||
if (out) {
|
if (out) {
|
||||||
@ -1112,6 +1208,8 @@ int AaptGroupEntry::compare(const AaptGroupEntry& o) const
|
|||||||
if (v == 0) v = vendor.compare(o.vendor);
|
if (v == 0) v = vendor.compare(o.vendor);
|
||||||
if (v == 0) v = screenLayoutSize.compare(o.screenLayoutSize);
|
if (v == 0) v = screenLayoutSize.compare(o.screenLayoutSize);
|
||||||
if (v == 0) v = screenLayoutLong.compare(o.screenLayoutLong);
|
if (v == 0) v = screenLayoutLong.compare(o.screenLayoutLong);
|
||||||
|
if (v == 0) v = screenWidthDp.compare(o.screenWidthDp);
|
||||||
|
if (v == 0) v = screenHeightDp.compare(o.screenHeightDp);
|
||||||
if (v == 0) v = orientation.compare(o.orientation);
|
if (v == 0) v = orientation.compare(o.orientation);
|
||||||
if (v == 0) v = uiModeType.compare(o.uiModeType);
|
if (v == 0) v = uiModeType.compare(o.uiModeType);
|
||||||
if (v == 0) v = uiModeNight.compare(o.uiModeNight);
|
if (v == 0) v = uiModeNight.compare(o.uiModeNight);
|
||||||
@ -1135,6 +1233,8 @@ ResTable_config AaptGroupEntry::toParams() const
|
|||||||
getLocaleName(locale.string(), ¶ms);
|
getLocaleName(locale.string(), ¶ms);
|
||||||
getScreenLayoutSizeName(screenLayoutSize.string(), ¶ms);
|
getScreenLayoutSizeName(screenLayoutSize.string(), ¶ms);
|
||||||
getScreenLayoutLongName(screenLayoutLong.string(), ¶ms);
|
getScreenLayoutLongName(screenLayoutLong.string(), ¶ms);
|
||||||
|
getScreenWidthDpName(screenWidthDp.string(), ¶ms);
|
||||||
|
getScreenHeightDpName(screenHeightDp.string(), ¶ms);
|
||||||
getOrientationName(orientation.string(), ¶ms);
|
getOrientationName(orientation.string(), ¶ms);
|
||||||
getUiModeTypeName(uiModeType.string(), ¶ms);
|
getUiModeTypeName(uiModeType.string(), ¶ms);
|
||||||
getUiModeNightName(uiModeNight.string(), ¶ms);
|
getUiModeNightName(uiModeNight.string(), ¶ms);
|
||||||
@ -1149,7 +1249,10 @@ ResTable_config AaptGroupEntry::toParams() const
|
|||||||
|
|
||||||
// Fix up version number based on specified parameters.
|
// Fix up version number based on specified parameters.
|
||||||
int minSdk = 0;
|
int minSdk = 0;
|
||||||
if ((params.uiMode&ResTable_config::MASK_UI_MODE_TYPE)
|
if (params.screenWidthDp != ResTable_config::SCREENWIDTH_ANY
|
||||||
|
|| params.screenHeightDp != ResTable_config::SCREENHEIGHT_ANY) {
|
||||||
|
minSdk = SDK_ICS;
|
||||||
|
} else if ((params.uiMode&ResTable_config::MASK_UI_MODE_TYPE)
|
||||||
!= ResTable_config::UI_MODE_TYPE_ANY
|
!= ResTable_config::UI_MODE_TYPE_ANY
|
||||||
|| (params.uiMode&ResTable_config::MASK_UI_MODE_NIGHT)
|
|| (params.uiMode&ResTable_config::MASK_UI_MODE_NIGHT)
|
||||||
!= ResTable_config::UI_MODE_NIGHT_ANY) {
|
!= ResTable_config::UI_MODE_NIGHT_ANY) {
|
||||||
|
@ -42,6 +42,8 @@ enum {
|
|||||||
AXIS_NAVHIDDEN,
|
AXIS_NAVHIDDEN,
|
||||||
AXIS_NAVIGATION,
|
AXIS_NAVIGATION,
|
||||||
AXIS_SCREENSIZE,
|
AXIS_SCREENSIZE,
|
||||||
|
AXIS_SCREENWIDTHDP,
|
||||||
|
AXIS_SCREENHEIGHTDP,
|
||||||
AXIS_VERSION
|
AXIS_VERSION
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -52,6 +54,7 @@ enum {
|
|||||||
SDK_ECLAIR_0_1 = 6,
|
SDK_ECLAIR_0_1 = 6,
|
||||||
SDK_MR1 = 7,
|
SDK_MR1 = 7,
|
||||||
SDK_FROYO = 8,
|
SDK_FROYO = 8,
|
||||||
|
SDK_ICS = 13,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -71,6 +74,8 @@ public:
|
|||||||
String8 vendor;
|
String8 vendor;
|
||||||
String8 screenLayoutSize;
|
String8 screenLayoutSize;
|
||||||
String8 screenLayoutLong;
|
String8 screenLayoutLong;
|
||||||
|
String8 screenWidthDp;
|
||||||
|
String8 screenHeightDp;
|
||||||
String8 orientation;
|
String8 orientation;
|
||||||
String8 uiModeType;
|
String8 uiModeType;
|
||||||
String8 uiModeNight;
|
String8 uiModeNight;
|
||||||
@ -102,6 +107,8 @@ public:
|
|||||||
static bool getNavigationName(const char* name, ResTable_config* out = NULL);
|
static bool getNavigationName(const char* name, ResTable_config* out = NULL);
|
||||||
static bool getNavHiddenName(const char* name, ResTable_config* out = NULL);
|
static bool getNavHiddenName(const char* name, ResTable_config* out = NULL);
|
||||||
static bool getScreenSizeName(const char* name, ResTable_config* out = NULL);
|
static bool getScreenSizeName(const char* name, ResTable_config* out = NULL);
|
||||||
|
static bool getScreenWidthDpName(const char* name, ResTable_config* out = NULL);
|
||||||
|
static bool getScreenHeightDpName(const char* name, ResTable_config* out = NULL);
|
||||||
static bool getVersionName(const char* name, ResTable_config* out = NULL);
|
static bool getVersionName(const char* name, ResTable_config* out = NULL);
|
||||||
|
|
||||||
int compare(const AaptGroupEntry& o) const;
|
int compare(const AaptGroupEntry& o) const;
|
||||||
|
@ -2607,6 +2607,15 @@ ResourceFilter::match(const ResTable_config& config) const
|
|||||||
if (!match(AXIS_SCREENSIZE, config.screenSize)) {
|
if (!match(AXIS_SCREENSIZE, config.screenSize)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
if (!match(AXIS_SCREENWIDTHDP, config.screenWidthDp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!match(AXIS_SCREENHEIGHTDP, config.screenHeightDp)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (!match(AXIS_SCREENLAYOUTSIZE, config.screenLayout&ResTable_config::MASK_SCREENSIZE)) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
if (!match(AXIS_VERSION, config.version)) {
|
if (!match(AXIS_VERSION, config.version)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -2800,7 +2809,7 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<AaptFile>& dest)
|
|||||||
ConfigDescription config = t->getUniqueConfigs().itemAt(ci);
|
ConfigDescription config = t->getUniqueConfigs().itemAt(ci);
|
||||||
|
|
||||||
NOISY(printf("Writing config %d config: imsi:%d/%d lang:%c%c cnt:%c%c "
|
NOISY(printf("Writing config %d config: imsi:%d/%d lang:%c%c cnt:%c%c "
|
||||||
"orien:%d ui:%d touch:%d density:%d key:%d inp:%d nav:%d w:%d h:%d\n",
|
"orien:%d ui:%d touch:%d density:%d key:%d inp:%d nav:%d sz:%dx%d %ddp x %ddp\n",
|
||||||
ti+1,
|
ti+1,
|
||||||
config.mcc, config.mnc,
|
config.mcc, config.mnc,
|
||||||
config.language[0] ? config.language[0] : '-',
|
config.language[0] ? config.language[0] : '-',
|
||||||
@ -2815,7 +2824,9 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<AaptFile>& dest)
|
|||||||
config.inputFlags,
|
config.inputFlags,
|
||||||
config.navigation,
|
config.navigation,
|
||||||
config.screenWidth,
|
config.screenWidth,
|
||||||
config.screenHeight));
|
config.screenHeight,
|
||||||
|
config.screenWidthDp,
|
||||||
|
config.screenHeightDp));
|
||||||
|
|
||||||
if (filterable && !filter.match(config)) {
|
if (filterable && !filter.match(config)) {
|
||||||
continue;
|
continue;
|
||||||
@ -2838,7 +2849,7 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<AaptFile>& dest)
|
|||||||
tHeader->entriesStart = htodl(typeSize);
|
tHeader->entriesStart = htodl(typeSize);
|
||||||
tHeader->config = config;
|
tHeader->config = config;
|
||||||
NOISY(printf("Writing type %d config: imsi:%d/%d lang:%c%c cnt:%c%c "
|
NOISY(printf("Writing type %d config: imsi:%d/%d lang:%c%c cnt:%c%c "
|
||||||
"orien:%d ui:%d touch:%d density:%d key:%d inp:%d nav:%d w:%d h:%d\n",
|
"orien:%d ui:%d touch:%d density:%d key:%d inp:%d nav:%d sz:%dx%d %ddp x %ddp\n",
|
||||||
ti+1,
|
ti+1,
|
||||||
tHeader->config.mcc, tHeader->config.mnc,
|
tHeader->config.mcc, tHeader->config.mnc,
|
||||||
tHeader->config.language[0] ? tHeader->config.language[0] : '-',
|
tHeader->config.language[0] ? tHeader->config.language[0] : '-',
|
||||||
@ -2853,7 +2864,9 @@ status_t ResourceTable::flatten(Bundle* bundle, const sp<AaptFile>& dest)
|
|||||||
tHeader->config.inputFlags,
|
tHeader->config.inputFlags,
|
||||||
tHeader->config.navigation,
|
tHeader->config.navigation,
|
||||||
tHeader->config.screenWidth,
|
tHeader->config.screenWidth,
|
||||||
tHeader->config.screenHeight));
|
tHeader->config.screenHeight,
|
||||||
|
tHeader->config.screenWidthDp,
|
||||||
|
tHeader->config.screenHeightDp));
|
||||||
tHeader->config.swapHtoD();
|
tHeader->config.swapHtoD();
|
||||||
|
|
||||||
// Build the entries inside of this type.
|
// Build the entries inside of this type.
|
||||||
@ -3435,7 +3448,7 @@ sp<ResourceTable::Entry> ResourceTable::Type::getEntry(const String16& entry,
|
|||||||
if (e == NULL) {
|
if (e == NULL) {
|
||||||
if (config != NULL) {
|
if (config != NULL) {
|
||||||
NOISY(printf("New entry at %s:%d: imsi:%d/%d lang:%c%c cnt:%c%c "
|
NOISY(printf("New entry at %s:%d: imsi:%d/%d lang:%c%c cnt:%c%c "
|
||||||
"orien:%d touch:%d density:%d key:%d inp:%d nav:%d w:%d h:%d\n",
|
"orien:%d touch:%d density:%d key:%d inp:%d nav:%d sz:%dx%d %ddp x %ddp\n",
|
||||||
sourcePos.file.string(), sourcePos.line,
|
sourcePos.file.string(), sourcePos.line,
|
||||||
config->mcc, config->mnc,
|
config->mcc, config->mnc,
|
||||||
config->language[0] ? config->language[0] : '-',
|
config->language[0] ? config->language[0] : '-',
|
||||||
@ -3449,7 +3462,9 @@ sp<ResourceTable::Entry> ResourceTable::Type::getEntry(const String16& entry,
|
|||||||
config->inputFlags,
|
config->inputFlags,
|
||||||
config->navigation,
|
config->navigation,
|
||||||
config->screenWidth,
|
config->screenWidth,
|
||||||
config->screenHeight));
|
config->screenHeight,
|
||||||
|
config->screenWidthDp,
|
||||||
|
config->screenHeightDp));
|
||||||
} else {
|
} else {
|
||||||
NOISY(printf("New entry at %s:%d: NULL config\n",
|
NOISY(printf("New entry at %s:%d: NULL config\n",
|
||||||
sourcePos.file.string(), sourcePos.line));
|
sourcePos.file.string(), sourcePos.line));
|
||||||
|
Reference in New Issue
Block a user