Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 20cb56e2 authored by Dianne Hackborn's avatar Dianne Hackborn
Browse files

Fix some bugs.

Bug #2376231: Apps lose window focus (and back key causes ANR) if the
lock screen is dismissed while the phone is in landscape mode

This is another case where we weren't recomputing the focused window
after changing the visibility policy.

bug #2479958: Investigate source of "Resources don't contain package
for resource number 0x7f0a0000"

Um, okay, so it turns out there were bugs all over the place where
we would load an XML resource from a another application, but not
use the Resources for that application to retrieve its resources...!
I think the only reason any of this stuff was working at all was
because it typically only cared about retrieving the resource
identifiers of the items (it would look up the values later).

Bug #2401082: Passion ERE26 monkey crash - InputMethodManagerService

Add some null checks.
parent 89d6d00a
Loading
Loading
Loading
Loading
+4 −2
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@ package android.accounts;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.RegisteredServicesCache;
import android.content.pm.RegisteredServicesCache;
import android.content.pm.XmlSerializerAndParser;
import android.content.pm.XmlSerializerAndParser;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.content.Context;
import android.content.Context;
import android.util.AttributeSet;
import android.util.AttributeSet;
@@ -47,8 +48,9 @@ import java.io.IOException;
                AccountManager.AUTHENTICATOR_ATTRIBUTES_NAME, sSerializer);
                AccountManager.AUTHENTICATOR_ATTRIBUTES_NAME, sSerializer);
    }
    }


    public AuthenticatorDescription parseServiceAttributes(String packageName, AttributeSet attrs) {
    public AuthenticatorDescription parseServiceAttributes(Resources res,
        TypedArray sa = mContext.getResources().obtainAttributes(attrs,
            String packageName, AttributeSet attrs) {
        TypedArray sa = res.obtainAttributes(attrs,
                com.android.internal.R.styleable.AccountAuthenticator);
                com.android.internal.R.styleable.AccountAuthenticator);
        try {
        try {
            final String accountType =
            final String accountType =
+8 −1
Original line number Original line Diff line number Diff line
@@ -25,7 +25,9 @@ import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.ServiceInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources.NotFoundException;
import android.content.res.Resources.NotFoundException;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.content.res.XmlResourceParser;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.Drawable;
@@ -96,6 +98,8 @@ public final class WallpaperInfo implements Parcelable {
                        + WallpaperService.SERVICE_META_DATA + " meta-data");
                        + WallpaperService.SERVICE_META_DATA + " meta-data");
            }
            }
        
        
            Resources res = pm.getResourcesForApplication(si.applicationInfo);
            
            AttributeSet attrs = Xml.asAttributeSet(parser);
            AttributeSet attrs = Xml.asAttributeSet(parser);
            
            
            int type;
            int type;
@@ -109,7 +113,7 @@ public final class WallpaperInfo implements Parcelable {
                        "Meta-data does not start with wallpaper tag");
                        "Meta-data does not start with wallpaper tag");
            }
            }
            
            
            TypedArray sa = context.getResources().obtainAttributes(attrs,
            TypedArray sa = res.obtainAttributes(attrs,
                    com.android.internal.R.styleable.Wallpaper);
                    com.android.internal.R.styleable.Wallpaper);
            settingsActivityComponent = sa.getString(
            settingsActivityComponent = sa.getString(
                    com.android.internal.R.styleable.Wallpaper_settingsActivity);
                    com.android.internal.R.styleable.Wallpaper_settingsActivity);
@@ -125,6 +129,9 @@ public final class WallpaperInfo implements Parcelable {
                    -1);
                    -1);


            sa.recycle();
            sa.recycle();
        } catch (NameNotFoundException e) {
            throw new XmlPullParserException(
                    "Unable to create context for: " + si.packageName);
        } finally {
        } finally {
            if (parser != null) parser.close();
            if (parser != null) parser.close();
        }
        }
+8 −1
Original line number Original line Diff line number Diff line
@@ -26,6 +26,8 @@ import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ResolveInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.content.res.XmlResourceParser;
import android.content.res.Resources.NotFoundException;
import android.content.res.Resources.NotFoundException;
@@ -181,6 +183,8 @@ public final class DeviceAdminInfo implements Parcelable {
                        + DeviceAdminReceiver.DEVICE_ADMIN_META_DATA + " meta-data");
                        + DeviceAdminReceiver.DEVICE_ADMIN_META_DATA + " meta-data");
            }
            }
        
        
            Resources res = pm.getResourcesForApplication(ai.applicationInfo);
            
            AttributeSet attrs = Xml.asAttributeSet(parser);
            AttributeSet attrs = Xml.asAttributeSet(parser);
            
            
            int type;
            int type;
@@ -194,7 +198,7 @@ public final class DeviceAdminInfo implements Parcelable {
                        "Meta-data does not start with device-admin tag");
                        "Meta-data does not start with device-admin tag");
            }
            }
            
            
            TypedArray sa = context.getResources().obtainAttributes(attrs,
            TypedArray sa = res.obtainAttributes(attrs,
                    com.android.internal.R.styleable.DeviceAdmin);
                    com.android.internal.R.styleable.DeviceAdmin);


            mVisible = sa.getBoolean(
            mVisible = sa.getBoolean(
@@ -227,6 +231,9 @@ public final class DeviceAdminInfo implements Parcelable {
                    }
                    }
                }
                }
            }
            }
        } catch (NameNotFoundException e) {
            throw new XmlPullParserException(
                    "Unable to create context for: " + ai.packageName);
        } finally {
        } finally {
            if (parser != null) parser.close();
            if (parser != null) parser.close();
        }
        }
+4 −2
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package android.content;


import android.content.pm.RegisteredServicesCache;
import android.content.pm.RegisteredServicesCache;
import android.content.pm.XmlSerializerAndParser;
import android.content.pm.XmlSerializerAndParser;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.util.AttributeSet;
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParser;
@@ -42,8 +43,9 @@ import java.io.IOException;
        super(context, SERVICE_INTERFACE, SERVICE_META_DATA, ATTRIBUTES_NAME, sSerializer);
        super(context, SERVICE_INTERFACE, SERVICE_META_DATA, ATTRIBUTES_NAME, sSerializer);
    }
    }


    public SyncAdapterType parseServiceAttributes(String packageName, AttributeSet attrs) {
    public SyncAdapterType parseServiceAttributes(Resources res,
        TypedArray sa = mContext.getResources().obtainAttributes(attrs,
            String packageName, AttributeSet attrs) {
        TypedArray sa = res.obtainAttributes(attrs,
                com.android.internal.R.styleable.SyncAdapter);
                com.android.internal.R.styleable.SyncAdapter);
        try {
        try {
            final String authority =
            final String authority =
+9 −2
Original line number Original line Diff line number Diff line
@@ -21,6 +21,8 @@ import android.content.BroadcastReceiver;
import android.content.Intent;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentFilter;
import android.content.ComponentName;
import android.content.ComponentName;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.content.res.XmlResourceParser;
import android.content.res.XmlResourceParser;
import android.os.Environment;
import android.os.Environment;
import android.os.Handler;
import android.os.Handler;
@@ -402,7 +404,8 @@ public abstract class RegisteredServicesCache<V> {
                        "Meta-data does not start with " + mAttributesName +  " tag");
                        "Meta-data does not start with " + mAttributesName +  " tag");
            }
            }


            V v = parseServiceAttributes(si.packageName, attrs);
            V v = parseServiceAttributes(pm.getResourcesForApplication(si.applicationInfo),
                    si.packageName, attrs);
            if (v == null) {
            if (v == null) {
                return null;
                return null;
            }
            }
@@ -410,6 +413,9 @@ public abstract class RegisteredServicesCache<V> {
            final ApplicationInfo applicationInfo = serviceInfo.applicationInfo;
            final ApplicationInfo applicationInfo = serviceInfo.applicationInfo;
            final int uid = applicationInfo.uid;
            final int uid = applicationInfo.uid;
            return new ServiceInfo<V>(v, componentName, uid);
            return new ServiceInfo<V>(v, componentName, uid);
        } catch (NameNotFoundException e) {
            throw new XmlPullParserException(
                    "Unable to load resources for pacakge " + si.packageName);
        } finally {
        } finally {
            if (parser != null) parser.close();
            if (parser != null) parser.close();
        }
        }
@@ -499,5 +505,6 @@ public abstract class RegisteredServicesCache<V> {
        }
        }
    }
    }


    public abstract V parseServiceAttributes(String packageName, AttributeSet attrs);
    public abstract V parseServiceAttributes(Resources res,
            String packageName, AttributeSet attrs);
}
}
Loading