Search in sources :

Example 31 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class ShortcutPackage method rescanPackageIfNeeded.

/**
     * Called when the package may be added or updated, or its activities may be disabled, and
     * if so, rescan the package and do the necessary stuff.
     *
     * Add case:
     * - Publish manifest shortcuts.
     *
     * Update case:
     * - Re-publish manifest shortcuts.
     * - If there are shortcuts with resources (icons or strings), update their timestamps.
     * - Disable shortcuts whose target activities are disabled.
     *
     * @return TRUE if any shortcuts have been changed.
     */
public boolean rescanPackageIfNeeded(boolean isNewApp, boolean forceRescan) {
    final ShortcutService s = mShortcutUser.mService;
    final long start = s.injectElapsedRealtime();
    final PackageInfo pi;
    try {
        pi = mShortcutUser.mService.getPackageInfo(getPackageName(), getPackageUserId());
        if (pi == null) {
            // Shouldn't happen.
            return false;
        }
        if (!isNewApp && !forceRescan) {
            // really change on OTAs.
            if ((getPackageInfo().getVersionCode() == pi.versionCode) && (getPackageInfo().getLastUpdateTime() == pi.lastUpdateTime) && areAllActivitiesStillEnabled()) {
                return false;
            }
        }
    } finally {
        s.logDurationStat(Stats.PACKAGE_UPDATE_CHECK, start);
    }
    // Now prepare to publish manifest shortcuts.
    List<ShortcutInfo> newManifestShortcutList = null;
    try {
        newManifestShortcutList = ShortcutParser.parseShortcuts(mShortcutUser.mService, getPackageName(), getPackageUserId());
    } catch (IOException | XmlPullParserException e) {
        Slog.e(TAG, "Failed to load shortcuts from AndroidManifest.xml.", e);
    }
    final int manifestShortcutSize = newManifestShortcutList == null ? 0 : newManifestShortcutList.size();
    if (ShortcutService.DEBUG) {
        Slog.d(TAG, String.format("Package %s has %d manifest shortcut(s)", getPackageName(), manifestShortcutSize));
    }
    if (isNewApp && (manifestShortcutSize == 0)) {
        // disabled.
        return false;
    }
    if (ShortcutService.DEBUG) {
        Slog.d(TAG, String.format("Package %s %s, version %d -> %d", getPackageName(), (isNewApp ? "added" : "updated"), getPackageInfo().getVersionCode(), pi.versionCode));
    }
    getPackageInfo().updateVersionInfo(pi);
    boolean changed = false;
    // Also check if shortcuts' activities are still main activities.  Otherwise, disable them.
    if (!isNewApp) {
        Resources publisherRes = null;
        for (int i = mShortcuts.size() - 1; i >= 0; i--) {
            final ShortcutInfo si = mShortcuts.valueAt(i);
            if (si.isDynamic()) {
                if (!s.injectIsMainActivity(si.getActivity(), getPackageUserId())) {
                    Slog.w(TAG, String.format("%s is no longer main activity. Disabling shorcut %s.", getPackageName(), si.getId()));
                    if (disableDynamicWithId(si.getId())) {
                        // Actually removed.
                        continue;
                    }
                // Still pinned, so fall-through and possibly update the resources.
                }
                changed = true;
            }
            if (si.hasAnyResources()) {
                if (!si.isOriginallyFromManifest()) {
                    if (publisherRes == null) {
                        publisherRes = getPackageResources();
                        if (publisherRes == null) {
                            // Resources couldn't be loaded.
                            break;
                        }
                    }
                    // If this shortcut is not from a manifest, then update all resource IDs
                    // from resource names.  (We don't allow resource strings for
                    // non-manifest at the moment, but icons can still be resources.)
                    si.lookupAndFillInResourceIds(publisherRes);
                }
                changed = true;
                si.setTimestamp(s.injectCurrentTimeMillis());
            }
        }
    }
    // (Re-)publish manifest shortcut.
    changed |= publishManifestShortcuts(newManifestShortcutList);
    if (newManifestShortcutList != null) {
        changed |= pushOutExcessShortcuts();
    }
    s.verifyStates();
    if (changed) {
        // This will send a notification to the launcher, and also save .
        s.packageShortcutsChanged(getPackageName(), getPackageUserId());
    } else {
        // Still save the version code.
        s.scheduleSaveUser(getPackageUserId());
    }
    return changed;
}
Also used : ShortcutInfo(android.content.pm.ShortcutInfo) PackageInfo(android.content.pm.PackageInfo) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) Resources(android.content.res.Resources)

Example 32 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class ShortcutService method loadUserLocked.

@Nullable
private ShortcutUser loadUserLocked(@UserIdInt int userId) {
    final File path = getUserFile(userId);
    if (DEBUG) {
        Slog.d(TAG, "Loading from " + path);
    }
    final AtomicFile file = new AtomicFile(path);
    final FileInputStream in;
    try {
        in = file.openRead();
    } catch (FileNotFoundException e) {
        if (DEBUG) {
            Slog.d(TAG, "Not found " + path);
        }
        return null;
    }
    try {
        final ShortcutUser ret = loadUserInternal(userId, in, /* forBackup= */
        false);
        return ret;
    } catch (IOException | XmlPullParserException | InvalidFileFormatException e) {
        Slog.e(TAG, "Failed to read file " + file.getBaseFile(), e);
        return null;
    } finally {
        IoUtils.closeQuietly(in);
    }
}
Also used : AtomicFile(android.util.AtomicFile) FileNotFoundException(java.io.FileNotFoundException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) File(java.io.File) AtomicFile(android.util.AtomicFile) FileInputStream(java.io.FileInputStream) Nullable(android.annotation.Nullable)

Example 33 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class RecommendationServiceImpl method onConnected.

@Override
public void onConnected() {
    mPlugins = new ArrayList<>();
    try {
        for (VendorConfig config : VendorConfig.getAllConfigs(this)) {
            try {
                mPlugins.add(new RemotePrintServicePlugin(new MDNSFilterPlugin(this, config.name, config.packageName, config.mDNSNames), this, false));
            } catch (Exception e) {
                Log.e(LOG_TAG, "Could not initiate simple MDNS plugin for " + config.packageName, e);
            }
        }
    } catch (IOException | XmlPullParserException e) {
        new RuntimeException("Could not parse vendorconfig", e);
    }
    try {
        mPlugins.add(new RemotePrintServicePlugin(new HPRecommendationPlugin(this), this, false));
    } catch (Exception e) {
        Log.e(LOG_TAG, "Could not initiate " + getString(R.string.plugin_vendor_hp) + " plugin", e);
    }
    try {
        mPlugins.add(new RemotePrintServicePlugin(new MopriaRecommendationPlugin(this), this, true));
    } catch (Exception e) {
        Log.e(LOG_TAG, "Could not initiate " + getString(R.string.plugin_vendor_morpia) + " plugin", e);
    }
    try {
        mPlugins.add(new RemotePrintServicePlugin(new SamsungRecommendationPlugin(this), this, true));
    } catch (Exception e) {
        Log.e(LOG_TAG, "Could not initiate " + getString(R.string.plugin_vendor_samsung) + " plugin", e);
    }
    try {
        mPlugins.add(new RemotePrintServicePlugin(new XeroxPrintServiceRecommendationPlugin(this), this, false));
    } catch (Exception e) {
        Log.e(LOG_TAG, "Could not initiate " + getString(R.string.plugin_vendor_xerox) + " plugin", e);
    }
    final int numPlugins = mPlugins.size();
    for (int i = 0; i < numPlugins; i++) {
        try {
            mPlugins.get(i).start();
        } catch (RemotePrintServicePlugin.PluginException e) {
            Log.e(LOG_TAG, "Could not start plugin", e);
        }
    }
}
Also used : XeroxPrintServiceRecommendationPlugin(com.android.printservice.recommendation.plugin.xerox.XeroxPrintServiceRecommendationPlugin) IOException(java.io.IOException) IOException(java.io.IOException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) SamsungRecommendationPlugin(com.android.printservice.recommendation.plugin.samsung.SamsungRecommendationPlugin) MopriaRecommendationPlugin(com.android.printservice.recommendation.plugin.mopria.MopriaRecommendationPlugin) HPRecommendationPlugin(com.android.printservice.recommendation.plugin.hp.HPRecommendationPlugin) VendorConfig(com.android.printservice.recommendation.plugin.mdnsFilter.VendorConfig) MDNSFilterPlugin(com.android.printservice.recommendation.plugin.mdnsFilter.MDNSFilterPlugin) XmlPullParserException(org.xmlpull.v1.XmlPullParserException)

Example 34 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class AppOpsService method readState.

void readState() {
    synchronized (mFile) {
        synchronized (this) {
            FileInputStream stream;
            try {
                stream = mFile.openRead();
            } catch (FileNotFoundException e) {
                Slog.i(TAG, "No existing app ops " + mFile.getBaseFile() + "; starting empty");
                return;
            }
            boolean success = false;
            mUidStates.clear();
            try {
                XmlPullParser parser = Xml.newPullParser();
                parser.setInput(stream, StandardCharsets.UTF_8.name());
                int type;
                while ((type = parser.next()) != XmlPullParser.START_TAG && type != XmlPullParser.END_DOCUMENT) {
                    ;
                }
                if (type != XmlPullParser.START_TAG) {
                    throw new IllegalStateException("no start tag found");
                }
                int outerDepth = parser.getDepth();
                while ((type = parser.next()) != XmlPullParser.END_DOCUMENT && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
                    if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
                        continue;
                    }
                    String tagName = parser.getName();
                    if (tagName.equals("pkg")) {
                        readPackage(parser);
                    } else if (tagName.equals("uid")) {
                        readUidOps(parser);
                    } else {
                        Slog.w(TAG, "Unknown element under <app-ops>: " + parser.getName());
                        XmlUtils.skipCurrentTag(parser);
                    }
                }
                success = true;
            } catch (IllegalStateException e) {
                Slog.w(TAG, "Failed parsing " + e);
            } catch (NullPointerException e) {
                Slog.w(TAG, "Failed parsing " + e);
            } catch (NumberFormatException e) {
                Slog.w(TAG, "Failed parsing " + e);
            } catch (XmlPullParserException e) {
                Slog.w(TAG, "Failed parsing " + e);
            } catch (IOException e) {
                Slog.w(TAG, "Failed parsing " + e);
            } catch (IndexOutOfBoundsException e) {
                Slog.w(TAG, "Failed parsing " + e);
            } finally {
                if (!success) {
                    mUidStates.clear();
                }
                try {
                    stream.close();
                } catch (IOException e) {
                }
            }
        }
    }
}
Also used : FileNotFoundException(java.io.FileNotFoundException) XmlPullParser(org.xmlpull.v1.XmlPullParser) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream)

Example 35 with XmlPullParserException

use of org.xmlpull.v1.XmlPullParserException in project platform_frameworks_base by android.

the class ConnectivityService method getProvisioningUrlBaseFromFile.

private String getProvisioningUrlBaseFromFile() {
    FileReader fileReader = null;
    XmlPullParser parser = null;
    Configuration config = mContext.getResources().getConfiguration();
    try {
        fileReader = new FileReader(mProvisioningUrlFile);
        parser = Xml.newPullParser();
        parser.setInput(fileReader);
        XmlUtils.beginDocument(parser, TAG_PROVISIONING_URLS);
        while (true) {
            XmlUtils.nextElement(parser);
            String element = parser.getName();
            if (element == null)
                break;
            if (element.equals(TAG_PROVISIONING_URL)) {
                String mcc = parser.getAttributeValue(null, ATTR_MCC);
                try {
                    if (mcc != null && Integer.parseInt(mcc) == config.mcc) {
                        String mnc = parser.getAttributeValue(null, ATTR_MNC);
                        if (mnc != null && Integer.parseInt(mnc) == config.mnc) {
                            parser.next();
                            if (parser.getEventType() == XmlPullParser.TEXT) {
                                return parser.getText();
                            }
                        }
                    }
                } catch (NumberFormatException e) {
                    loge("NumberFormatException in getProvisioningUrlBaseFromFile: " + e);
                }
            }
        }
        return null;
    } catch (FileNotFoundException e) {
        loge("Carrier Provisioning Urls file not found");
    } catch (XmlPullParserException e) {
        loge("Xml parser exception reading Carrier Provisioning Urls file: " + e);
    } catch (IOException e) {
        loge("I/O exception reading Carrier Provisioning Urls file: " + e);
    } finally {
        if (fileReader != null) {
            try {
                fileReader.close();
            } catch (IOException e) {
            }
        }
    }
    return null;
}
Also used : Configuration(android.content.res.Configuration) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) FileReader(java.io.FileReader) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) NetworkPolicyManager.uidRulesToString(android.net.NetworkPolicyManager.uidRulesToString) IOException(java.io.IOException)

Aggregations

XmlPullParserException (org.xmlpull.v1.XmlPullParserException)1071 IOException (java.io.IOException)630 XmlPullParser (org.xmlpull.v1.XmlPullParser)440 FileNotFoundException (java.io.FileNotFoundException)187 XmlResourceParser (android.content.res.XmlResourceParser)186 FileInputStream (java.io.FileInputStream)182 AttributeSet (android.util.AttributeSet)159 TypedArray (android.content.res.TypedArray)156 Resources (android.content.res.Resources)101 File (java.io.File)101 ArrayList (java.util.ArrayList)99 PackageManager (android.content.pm.PackageManager)62 HashMap (java.util.HashMap)58 ComponentName (android.content.ComponentName)57 InputStream (java.io.InputStream)57 Intent (android.content.Intent)54 XmlSerializer (org.xmlpull.v1.XmlSerializer)54 AtomicFile (android.util.AtomicFile)50 BufferedInputStream (java.io.BufferedInputStream)44 TypedValue (android.util.TypedValue)43