/** * Setup missing application files into the "home directory". * * @param targetDir * @throws IOException * @return true on success */ private boolean restoreMissingFiles(final File targetDir) throws IOException { Debug.enter(); boolean success = false; final SharedPreferences prefs = Settings.INSTANCE.getSharedPreferences(); final String oldTarball = prefs.getString(SettingsStorage.FIELD_TARBALL, null); final String newTarball = getString(R.string.build_tarball); final boolean keepOldFiles = newTarball.equals(oldTarball); try { // extract the tar-ball to recover any missing file, if any final TarArchive tarball = new TarArchive(new GZIPInputStream(tarballFile())); tarball.keepOldFiles = keepOldFiles; tarball.extract(targetDir); tarball.close(); // once the restore is completed successfully, // we need to update the shared preference, if necessary if (!keepOldFiles) { final SharedPreferences.Editor edit = prefs.edit(); edit.putString(SettingsStorage.FIELD_TARBALL, newTarball); success = edit.commit(); } else { success = true; } } catch (final Resources.NotFoundException ex) { // this exception usually would happen from the unit-tests Debug.error(ex, "tarball resources not found", keepOldFiles); // not really a fatal error if keepOldFiles is true if (!keepOldFiles) { Debug.leave(); throw new IOException("Tarball resources missing"); } } catch (final TarArchive.TarHeaderException ex) { Debug.error(ex, "invalid tarball header", keepOldFiles); Debug.leave(); throw new IOException("Invalid tarball format"); } catch (final IOException ex) { Debug.error(ex, "unable to install tarball", keepOldFiles); // not really a fatal error if keepOldFiles is true if (!keepOldFiles) { Debug.leave(); throw ex; } } Debug.leave(success); return success; }
/** {@inheritDoc} */ @Override public void onConfigurationChanged(final Configuration newConfig) { super.onConfigurationChanged(newConfig); { Debug.enter(); try { Debug.print(tag, "configurationChanged", newConfig.locale); Android.App.setLocale(newConfig.locale); } catch (final IOException ex) { Debug.error(ex, tag, "unable to set new locale", newConfig.locale); } Debug.leave(); } }