X-Git-Url: http://gitweb.fperrin.net/?a=blobdiff_plain;f=src%2Fcom%2Fhughes%2Fandroid%2Fdictionary%2FDictionaryManagerActivity.java;h=6becda6cb35ae04c846fb625d761ff14cd46fb72;hb=5028fc2c15207ee98ff575ee257a5798e76d5b4f;hp=266ea87248ad4cf08ea38595eb1fd108334c62a2;hpb=81a6a5b64b423bad8f1bf0e3f24d0f65c585f44b;p=Dictionary.git diff --git a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java index 266ea87..6becda6 100644 --- a/src/com/hughes/android/dictionary/DictionaryManagerActivity.java +++ b/src/com/hughes/android/dictionary/DictionaryManagerActivity.java @@ -188,58 +188,75 @@ public class DictionaryManagerActivity extends ActionBarActivity { Toast.makeText(context, getString(R.string.unzippingDictionary, dest), Toast.LENGTH_LONG).show(); - - final Uri zipUri = Uri.parse(dest); - File localZipFile = null; - InputStream zipFileStream = null; - ZipInputStream zipFile = null; - FileOutputStream zipOut = null; - try { - if (zipUri.getScheme().equals("content")) { - zipFileStream = context.getContentResolver().openInputStream(zipUri); - localZipFile = null; - } else { - localZipFile = new File(zipUri.getPath()); - zipFileStream = new FileInputStream(localZipFile); - } - zipFile = new ZipInputStream(new BufferedInputStream(zipFileStream)); - final ZipEntry zipEntry = zipFile.getNextEntry(); - Log.d(LOG, "Unzipping entry: " + zipEntry.getName()); - File targetFile = new File(application.getDictDir(), zipEntry.getName()); - if (targetFile.exists()) { - targetFile.renameTo(new File(targetFile.getAbsolutePath().replace(".quickdic", ".bak.quickdic"))); - targetFile = new File(application.getDictDir(), zipEntry.getName()); - } - zipOut = new FileOutputStream(targetFile); - copyStream(zipFile, zipOut); - application.backgroundUpdateDictionaries(dictionaryUpdater); - Toast.makeText(context, getString(R.string.installationFinished, dest), - Toast.LENGTH_LONG).show(); + if (unzipInstall(context, Uri.parse(dest), dest, true)) { finishedDownloadIds.add(downloadId); Log.w(LOG, "Unzipping finished: " + dest + " Id: " + downloadId); + } + } + } + }; + + private boolean unzipInstall(Context context, Uri zipUri, String dest, boolean delete) { + File localZipFile = null; + InputStream zipFileStream = null; + ZipInputStream zipFile = null; + FileOutputStream zipOut = null; + boolean result = false; + try { + if (zipUri.getScheme().equals("content")) { + zipFileStream = context.getContentResolver().openInputStream(zipUri); + localZipFile = null; + } else { + localZipFile = new File(zipUri.getPath()); + try { + zipFileStream = new FileInputStream(localZipFile); } catch (Exception e) { - String msg = getString(R.string.unzippingFailed, dest); - File dir = application.getDictDir(); - if (!dir.canWrite() || !application.checkFileCreate(dir)) { - msg = getString(R.string.notWritable, dir.getAbsolutePath()); + if (ContextCompat.checkSelfPermission(getApplicationContext(), Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) { + ActivityCompat.requestPermissions(this, + new String[] {Manifest.permission.READ_EXTERNAL_STORAGE, + Manifest.permission.WRITE_EXTERNAL_STORAGE + }, 0); + return false; } - new AlertDialog.Builder(context).setTitle(getString(R.string.error)).setMessage(msg).setNeutralButton("Close", null).show(); - Log.e(LOG, "Failed to unzip.", e); - } finally { - try { - if (zipOut != null) zipOut.close(); - } catch (IOException e) {} - try { - if (zipFile != null) zipFile.close(); - } catch (IOException e) {} - try { - if (zipFileStream != null) zipFileStream.close(); - } catch (IOException e) {} - if (localZipFile != null) localZipFile.delete(); + throw e; } } + zipFile = new ZipInputStream(new BufferedInputStream(zipFileStream)); + final ZipEntry zipEntry = zipFile.getNextEntry(); + Log.d(LOG, "Unzipping entry: " + zipEntry.getName()); + File targetFile = new File(application.getDictDir(), zipEntry.getName()); + if (targetFile.exists()) { + targetFile.renameTo(new File(targetFile.getAbsolutePath().replace(".quickdic", ".bak.quickdic"))); + targetFile = new File(application.getDictDir(), zipEntry.getName()); + } + zipOut = new FileOutputStream(targetFile); + copyStream(zipFile, zipOut); + application.backgroundUpdateDictionaries(dictionaryUpdater); + Toast.makeText(context, getString(R.string.installationFinished, dest), + Toast.LENGTH_LONG).show(); + result = true; + } catch (Exception e) { + String msg = getString(R.string.unzippingFailed, dest + ": " + e.getMessage()); + File dir = application.getDictDir(); + if (!dir.canWrite() || !application.checkFileCreate(dir)) { + msg = getString(R.string.notWritable, dir.getAbsolutePath()); + } + new AlertDialog.Builder(context).setTitle(getString(R.string.error)).setMessage(msg).setNeutralButton("Close", null).show(); + Log.e(LOG, "Failed to unzip.", e); + } finally { + try { + if (zipOut != null) zipOut.close(); + } catch (IOException e) {} + try { + if (zipFile != null) zipFile.close(); + } catch (IOException e) {} + try { + if (zipFileStream != null) zipFileStream.close(); + } catch (IOException e) {} + if (localZipFile != null && delete) localZipFile.delete(); } - }; + return result; + } public static Intent getLaunchIntent(Context c) { final Intent intent = new Intent(c, DictionaryManagerActivity.class); @@ -282,14 +299,16 @@ public class DictionaryManagerActivity extends ActionBarActivity { @Override public void onCreate(Bundle savedInstanceState) { - // This must be first, otherwise the actiona bar doesn't get + DictionaryApplication.INSTANCE.init(getApplicationContext()); + application = DictionaryApplication.INSTANCE; + // This must be first, otherwise the action bar doesn't get // styled properly. - setTheme(((DictionaryApplication) getApplication()).getSelectedTheme().themeId); + setTheme(application.getSelectedTheme().themeId); super.onCreate(savedInstanceState); Log.d(LOG, "onCreate:" + this); - application = (DictionaryApplication) getApplication(); + setTheme(application.getSelectedTheme().themeId); blockAutoLaunch = false; @@ -333,6 +352,14 @@ public class DictionaryManagerActivity extends ActionBarActivity { readableCheckAndError(true); onCreateSetupActionBar(); + + final Intent intent = getIntent(); + if (intent != null && intent.getAction() != null && + intent.getAction().equals(Intent.ACTION_VIEW)) { + blockAutoLaunch = true; + Uri uri = intent.getData(); + unzipInstall(this, uri, uri.getLastPathSegment(), false); + } } private void onCreateSetupActionBar() { @@ -441,7 +468,7 @@ public class DictionaryManagerActivity extends ActionBarActivity { startActivity(DictionaryActivity.getLaunchIntent(getApplicationContext(), new File(prefs.getString(C.DICT_FILE, "")), prefs.getString(C.INDEX_SHORT_NAME, ""), - prefs.getString(C.SEARCH_TOKEN, ""))); + "")); finish(); return; } @@ -661,8 +688,8 @@ public class DictionaryManagerActivity extends ActionBarActivity { builder.append(getString(R.string.updateAvailable)); } for (IndexInfo indexInfo : sortedIndexInfos) { - final View button = application.createButton(buttons.getContext(), dictionaryInfo, - indexInfo); + final View button = IsoUtils.INSTANCE.createButton(buttons.getContext(), dictionaryInfo, + indexInfo, application.languageButtonPixels); buttons.addView(button); if (canLaunch) { @@ -722,8 +749,9 @@ public class DictionaryManagerActivity extends ActionBarActivity { // Due to a bug, cursor is null instead of empty when // the download manager is disabled. if (cursor == null) { + String msg = getString(R.string.downloadManagerQueryFailed); new AlertDialog.Builder(DictionaryManagerActivity.this).setTitle(getString(R.string.error)) - .setMessage(getString(R.string.downloadFailed, R.string.downloadManagerQueryFailed)) + .setMessage(getString(R.string.downloadFailed, msg)) .setNeutralButton("Close", null).show(); return; }