From 950829ea9667768af1110aa18f37c4d4086e8c25 Mon Sep 17 00:00:00 2001 From: Chih-Wei Huang Date: Tue, 3 Nov 2009 17:49:22 +0800 Subject: [PATCH] update to version 1.1.0. (r2363) --- AndroidManifest.xml | 33 ++++++++-- readme.txt | 17 +++-- res/values-de/strings.xml | 19 +++--- res/values-es/strings.xml | 24 ++++--- res/values-nl/strings.xml | 17 ++--- res/values-zh-rCN/strings.xml | 10 +-- res/values/strings_not_for_translation.xml | 3 + res/xml/mimetypes.xml | 4 +- src/org/openintents/distribution/AboutDialog.java | 5 +- .../distribution/GetFromMarketDialog.java | 31 +++++++-- src/org/openintents/distribution/RD.java | 4 ++ src/org/openintents/distribution/UpdateMenu.java | 75 ++++++++++++---------- .../openintents/filemanager/DirectoryScanner.java | 32 +++++++-- .../filemanager/FileManagerActivity.java | 26 +++++--- 14 files changed, 193 insertions(+), 107 deletions(-) diff --git a/AndroidManifest.xml b/AndroidManifest.xml index 8c0d172..8eda711 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -16,11 +16,34 @@ --> - + android:versionName="1.1.0" + android:versionCode="5"> + + + + + + + + + + + + --> - \ No newline at end of file + diff --git a/readme.txt b/readme.txt index bbf37d9..05158b2 100644 --- a/readme.txt +++ b/readme.txt @@ -22,16 +22,21 @@ To obtain the current release, visit http://www.openintents.org --------------------------------------------------------- -release: 1.0.1 -date: 2008-12-?? -- Added support for following extensions: +release: 1.1.0 +date: 2009-10-30 +- display file size. +- show thumbnails for images. +- copy files. +- handle GET_CONTENT action. +- added support for all WebKit extensions. +- added support for following extensions: .amr, .3gp -- Added support for upper case or mixed case letter +- added support for upper case or mixed case letter extensions (like .png and .PNG) -- Fix for send files via MMS. +- fix for send files via MMS. - support for OI About. - encode file URIs properly -- translations: French, German +- translations: Chinese, French, German, Japanese, Spanish --------------------------------------------------------- release: 1.0.0 diff --git a/res/values-de/strings.xml b/res/values-de/strings.xml index 9dcca92..f357c95 100644 --- a/res/values-de/strings.xml +++ b/res/values-de/strings.xml @@ -21,7 +21,8 @@ Launchpad Contributions: - Peli https://launchpad.net/~peli0101 + Peli https://launchpad.net/~peli0101 + marco.jahn https://launchpad.net/~accounts+launchpad-net OI Dateimanager ist ein offener Dateimanager, der nahtlos mit anderen Anwendungen zusammenarbeitet. OI Dateimanager auf OpenIntents @@ -37,7 +38,7 @@ Senden Öffnen Verschieben - Copy + Kopie Neuen Ordner erstellen Name des Ordners @@ -50,14 +51,14 @@ Ordner umbenannt. Datei verschoben. Ordner verschoben. - File copied. + Datei kopiert. Ordner zum Verschieben auswählen Hierher verschieben - Select folder to copy to - Copy here - - Copy of %s - Copy %d of %s + Wählen Sie Zielverzeichnis für den Kopiervorgang + Hierher kopieren + + Kopie von %s + %d von %s kopiert Neuer Ordner konnte nicht erstellt werden. Datei konnte nicht gelöscht werden. @@ -66,7 +67,7 @@ Ordner konnte nicht umbenannt werden. Datei konnte nicht verschoben werden. Ordner konnte nicht verschoben werden. - Could not copy file. + Datei kann nicht kopiert werden. Datei existiert nicht. Keine Anwendung zum Senden vorhanden. diff --git a/res/values-es/strings.xml b/res/values-es/strings.xml index 7494b20..d6fd849 100644 --- a/res/values-es/strings.xml +++ b/res/values-es/strings.xml @@ -21,9 +21,10 @@ Launchpad Contributions: + DiegoJ https://launchpad.net/~diegojromerolopez miwie https://launchpad.net/~mw-miwie - OI File Manager is an open file manager that seamlessly cooperates with other applications. + OI File Manager es un gestor abierto de archivos que cooperar fluidamente con otras aplicaciones. OI File Manager en OpenIntents - Please check manually for updates or install OI Update -for automatic notifications. -Current version: %s - + Por favor, compruebe manualmente las actualizaciones o instale OI Update para notificaciones automáticas. Versión actual: %s Comprobar ahora. Obtenga el Actualizador de OI Descarga aplicación no disponible. @@ -94,7 +92,7 @@ Current version: %s Sobre - Version %s\n\nNo compatible extension available to display full info (contact, credits, license). + La versión %s\nNo es compatible con el complemento disponible para mostrar información completa (contacto, créditos, licencia). Obtenga Acerca de OI diff --git a/res/values-nl/strings.xml b/res/values-nl/strings.xml index 86d9174..800a8ba 100644 --- a/res/values-nl/strings.xml +++ b/res/values-nl/strings.xml @@ -21,6 +21,7 @@ Launchpad Contributions: + Simon de Vlieger https://launchpad.net/~ikanobori pjv https://launchpad.net/~pjv OI File Manager is an open file manager that seamlessly cooperates with other applications. @@ -37,7 +38,7 @@ Verzenden Openen Verplaatsen - Copy + Kopieer Nieuwe map aanmaken Naam van de map @@ -50,14 +51,14 @@ Map hernoemd. Bestand verplaatst. Map verplaatst. - File copied. - Select folder to move to - Move here - Select folder to copy to - Copy here + Bestand gekopieerd. + Kies map om naartoe te verplaatsen + Hierheen verplaatsen + Kies map om naartoe te kopiëren + Kopieer hier - Copy of %s - Copy %d of %s + Kopie van %s + Kopie %d van %s Could not create new folder. Could not delete file. diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index d5ea26d..328fb3b 100644 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -23,13 +23,13 @@ Launchpad Contributions: Swandle https://launchpad.net/~swandle - OI文件管理是一个开源的文件管理软件,它可以与其它应用程序进行无缝整合。 - OpenIntents的文件管理 + OI文件管理器是一个开源的文件管理软件,它可以与其它应用程序进行无缝整合。 + 开放组件的OI文件管理器 - OI文件管理 + OI文件管理器 新建文件夹 删除 @@ -43,10 +43,10 @@ 文件夹名 文件夹名 该文件夹为空 - 你真要删除 %s 吗? + 确实要删除 %s 吗? 文件已删除 文件夹已删除 - 文件重命名 + 文件已重命名 文件夹已重命名 文件已移动 文件夹已移动 diff --git a/res/values/strings_not_for_translation.xml b/res/values/strings_not_for_translation.xml index 82b30fa..335344f 100644 --- a/res/values/strings_not_for_translation.xml +++ b/res/values/strings_not_for_translation.xml @@ -48,10 +48,13 @@ *************************** --> market://search?q=pname:org.openintents.filemanager + http://www.openintents.org/en/node/159 market://search?q=pname:org.openintents.updatechecker + http://www.openintents.org/en/node/203 market://search?q=pname:org.openintents.about + http://www.openintents.org/en/node/202 + @@ -53,4 +53,4 @@ - + \ No newline at end of file diff --git a/src/org/openintents/distribution/AboutDialog.java b/src/org/openintents/distribution/AboutDialog.java index 52d707f..d1490db 100644 --- a/src/org/openintents/distribution/AboutDialog.java +++ b/src/org/openintents/distribution/AboutDialog.java @@ -27,7 +27,7 @@ import android.content.Intent; /** * About dialog * - * @version 2009-01-16 + * @version 2009-02-04 * @author Peli * */ @@ -38,7 +38,8 @@ public class AboutDialog extends GetFromMarketDialog { super(context, RD.string.aboutapp_not_available, RD.string.aboutapp_get, - RD.string.aboutapp_market_uri); + RD.string.aboutapp_market_uri, + RD.string.aboutapp_developer_uri); String version = VersionUtils.getVersionNumber(context); String name = VersionUtils.getApplicationName(context); diff --git a/src/org/openintents/distribution/GetFromMarketDialog.java b/src/org/openintents/distribution/GetFromMarketDialog.java index 494b6e0..78356b9 100644 --- a/src/org/openintents/distribution/GetFromMarketDialog.java +++ b/src/org/openintents/distribution/GetFromMarketDialog.java @@ -10,16 +10,23 @@ import android.net.Uri; import android.util.Log; import android.widget.Toast; +/** + * @version 2009-02-04 + * @author Peli + * + */ public class GetFromMarketDialog extends AlertDialog implements OnClickListener { private static final String TAG = "StartSaveActivity"; Context mContext; int mMarketUri; + int mDeveloperUri; - public GetFromMarketDialog(Context context, int message, int buttontext, int market_uri) { + public GetFromMarketDialog(Context context, int message, int buttontext, int market_uri, int developer_uri) { super(context); mContext = context; mMarketUri = market_uri; + mDeveloperUri = developer_uri; //setTitle(context.getText(R.string.menu_edit_tags)); setMessage(mContext.getText(message)); @@ -33,7 +40,11 @@ public class GetFromMarketDialog extends AlertDialog implements OnClickListener Intent intent = new Intent(Intent.ACTION_VIEW); intent.setData(uri); - GetFromMarketDialog.startSaveActivity(mContext, intent); + + uri= Uri.parse(mContext.getString(mDeveloperUri)); + Intent intent2 = new Intent(Intent.ACTION_VIEW); + intent2.setData(uri); + startSaveActivity(mContext, intent, intent2); } } @@ -44,15 +55,21 @@ public class GetFromMarketDialog extends AlertDialog implements OnClickListener * * @param context * @param intent + * @param intent2 Alternative intent to call, if the first is not reachable */ - public static void startSaveActivity(Context context, Intent intent) { + public static void startSaveActivity(Context context, Intent intent, Intent intent2) { try { context.startActivity(intent); } catch (ActivityNotFoundException e) { - Toast.makeText(context, - RD.string.update_error, - Toast.LENGTH_SHORT).show(); Log.e(TAG, "Error starting activity.", e); + try { + context.startActivity(intent2); + } catch (ActivityNotFoundException e2) { + Toast.makeText(context, + RD.string.update_error, + Toast.LENGTH_SHORT).show(); + Log.e(TAG, "Error starting second activity.", e2); + } } } -} +} \ No newline at end of file diff --git a/src/org/openintents/distribution/RD.java b/src/org/openintents/distribution/RD.java index 0fb4891..ee9a44c 100644 --- a/src/org/openintents/distribution/RD.java +++ b/src/org/openintents/distribution/RD.java @@ -32,8 +32,10 @@ public class RD { public static final int update_box_text = R.string.update_box_text; public static final int update_check_now = R.string.update_check_now; public static final int update_app_url = R.string.update_app_url; + public static final int update_app_developer_url = R.string.update_app_developer_url; public static final int update_get_updater = R.string.update_get_updater; public static final int update_checker_url = R.string.update_checker_url; + public static final int update_checker_developer_url = R.string.update_checker_developer_url; public static final int update_error = R.string.update_error; /////////////////////////////////////// @@ -41,6 +43,8 @@ public class RD { public static final int aboutapp_not_available = R.string.aboutapp_not_available; public static final int aboutapp_get = R.string.aboutapp_get; public static final int aboutapp_market_uri = R.string.aboutapp_market_uri; + public static final int aboutapp_developer_uri = R.string.aboutapp_developer_uri; + } public class raw { diff --git a/src/org/openintents/distribution/UpdateMenu.java b/src/org/openintents/distribution/UpdateMenu.java index dd9ecb0..2dc86a1 100644 --- a/src/org/openintents/distribution/UpdateMenu.java +++ b/src/org/openintents/distribution/UpdateMenu.java @@ -16,8 +16,6 @@ package org.openintents.distribution; -// Version Nov 12, 2008 - import android.app.AlertDialog.Builder; import android.content.ActivityNotFoundException; import android.content.Context; @@ -32,11 +30,26 @@ import android.view.Menu; import android.view.MenuItem; import android.widget.Toast; +/** + * @version 2009-10-23: support Market and aTrackDog + * @version 2009-02-04 + * @author Peli + * + */ public class UpdateMenu { private static final String TAG = "UpdateMenu"; - public static final String UPDATE_CHECKER = "org.openintents.updatechecker"; + /** + * If any of the following applications is installed, + * there is no need for a manual "Update" menu entry. + */ + public static final String[] UPDATE_CHECKER = new String[] + { + "org.openintents.updatechecker", // OI Update + "com.android.vending", // Google's Android Market + "com.a0soft.gphone.aTrackDog" // aTrackDog + }; /** * Adds a menu item for update only if update checker is not installed. @@ -52,19 +65,26 @@ public class UpdateMenu { public static MenuItem addUpdateMenu(Context context, Menu menu, int groupId, int itemId, int order, int titleRes) { PackageInfo pi = null; - try { - pi = context.getPackageManager().getPackageInfo( - UPDATE_CHECKER, 0); - } catch (NameNotFoundException e) { - // ignore - } - if (pi == null) { - return menu.add(groupId, itemId, order, titleRes).setIcon( - android.R.drawable.ic_menu_info_details).setShortcut('9', - 'u'); - } else { - return null; + + // Test for existence of all known update checker applications. + for (int i = 0; i < UPDATE_CHECKER.length; i++) { + try { + pi = context.getPackageManager().getPackageInfo( + UPDATE_CHECKER[i], 0); + } catch (NameNotFoundException e) { + // ignore + } + if (pi != null) { + // At least one kind of update checker exists, + // so there is no need to add a menu item. + return null; + } } + + // If we reach this point, we add a menu item for manual update. + return menu.add(groupId, itemId, order, titleRes).setIcon( + android.R.drawable.ic_menu_info_details).setShortcut('9', + 'u'); } @@ -81,40 +101,25 @@ public class UpdateMenu { e.printStackTrace(); } final Intent intent = new Intent(Intent.ACTION_VIEW); + final Intent intent2 = new Intent(Intent.ACTION_VIEW); new Builder(context).setMessage(context.getString(RD.string.update_box_text, version)) .setPositiveButton(RD.string.update_check_now, new OnClickListener(){ public void onClick(DialogInterface arg0, int arg1) { intent.setData(Uri.parse(context.getString(RD.string.update_app_url))); - startSaveActivity(context, intent); + intent2.setData(Uri.parse(context.getString(RD.string.update_app_developer_url))); + GetFromMarketDialog.startSaveActivity(context, intent, intent2); } }).setNegativeButton(RD.string.update_get_updater, new OnClickListener(){ public void onClick(DialogInterface dialog, int which) { intent.setData(Uri.parse(context.getString(RD.string.update_checker_url))); - startSaveActivity(context, intent); + intent2.setData(Uri.parse(context.getString(RD.string.update_checker_developer_url))); + GetFromMarketDialog.startSaveActivity(context, intent, intent2); } }).show(); } - - /** - * Start an activity but prompt a toast if activity is not found - * (instead of crashing). - * - * @param context - * @param intent - */ - private static void startSaveActivity(Context context, Intent intent) { - try { - context.startActivity(intent); - } catch (ActivityNotFoundException e) { - Toast.makeText(context, - RD.string.update_error, - Toast.LENGTH_SHORT).show(); - Log.e(TAG, "Error starting activity.", e); - } - } } diff --git a/src/org/openintents/filemanager/DirectoryScanner.java b/src/org/openintents/filemanager/DirectoryScanner.java index 684a2ac..c269a90 100644 --- a/src/org/openintents/filemanager/DirectoryScanner.java +++ b/src/org/openintents/filemanager/DirectoryScanner.java @@ -6,6 +6,7 @@ import java.util.ArrayList; import java.util.Collections; import java.util.List; +import org.openintents.filemanager.util.FileUtils; import org.openintents.filemanager.util.MimeTypes; import android.content.Context; @@ -13,6 +14,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.drawable.Drawable; +import android.net.Uri; import android.os.Handler; import android.os.Message; import android.os.SystemClock; @@ -43,12 +45,13 @@ public class DirectoryScanner extends Thread { - DirectoryScanner(File directory, Context context, Handler handler, MimeTypes mimeTypes) { + DirectoryScanner(File directory, Context context, Handler handler, MimeTypes mimeTypes, String sdCardPath) { super("Directory Scanner"); currentDirectory = directory; this.context = context; this.handler = handler; this.mMimeTypes = mimeTypes; + this.mSdCardPath = sdCardPath; } private void clearData() { @@ -129,7 +132,7 @@ public class DirectoryScanner extends Thread { String mimetype = mMimeTypes.getMimeType(fileName); - currentIcon = getDrawableForMimetype(mimetype); + currentIcon = getDrawableForMimetype(currentFile, mimetype); if (currentIcon == null) { currentIcon = genericFileIcon; } @@ -204,17 +207,36 @@ public class DirectoryScanner extends Thread { * @param mimetype * @return */ - Drawable getDrawableForMimetype(String mimetype) { + Drawable getDrawableForMimetype(File file, String mimetype) { + if (mimetype == null) { + return null; + } + PackageManager pm = context.getPackageManager(); + Uri data = FileUtils.getUri(file); + Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setType(mimetype); + //intent.setType(mimetype); + // Let's probe the intent exactly in the same way as the VIEW action + // is performed in FileManagerActivity.openFile(..) + intent.setDataAndType(data, mimetype); + final List lri = pm.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); if (lri != null && lri.size() > 0) { + //Log.i(TAG, "lri.size()" + lri.size()); + // return first element - final ResolveInfo ri = lri.get(0); + int index = 0; + + // Actually first element should be "best match", + // but it seems that more recently installed applications + // could be even better match. + index = lri.size()-1; + + final ResolveInfo ri = lri.get(index); return ri.loadIcon(pm); } diff --git a/src/org/openintents/filemanager/FileManagerActivity.java b/src/org/openintents/filemanager/FileManagerActivity.java index 5edb499..4346591 100644 --- a/src/org/openintents/filemanager/FileManagerActivity.java +++ b/src/org/openintents/filemanager/FileManagerActivity.java @@ -626,7 +626,7 @@ public class FileManagerActivity extends ListActivity { mProgressBar.setVisibility(View.GONE); setListAdapter(null); - mDirectoryScanner = new DirectoryScanner(currentDirectory, this, currentHandler, mMimeTypes); + mDirectoryScanner = new DirectoryScanner(currentDirectory, this, currentHandler, mMimeTypes, mSdCardPath); mDirectoryScanner.start(); @@ -906,17 +906,23 @@ public class FileManagerActivity extends ListActivity { menu.add(0, MENU_RENAME, 0, R.string.menu_rename); menu.add(0, MENU_DELETE, 0, R.string.menu_delete); - Uri data = Uri.fromFile(file); - Intent intent = new Intent(null, data); - String type = mMimeTypes.getMimeType(file.getName()); + //if (!file.isDirectory()) { + Uri data = Uri.fromFile(file); + Intent intent = new Intent(null, data); + String type = mMimeTypes.getMimeType(file.getName()); - intent.setDataAndType(data, type); + intent.setDataAndType(data, type); + //intent.addCategory(Intent.CATEGORY_SELECTED_ALTERNATIVE); -// Log.v(TAG, "Data=" + data); -// Log.v(TAG, "Type=" + type); - - menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, - new ComponentName(this, FileManagerActivity.class), null, intent, 0, null); + Log.v(TAG, "Data=" + data); + Log.v(TAG, "Type=" + type); + + if (type != null) { + // Add additional options for the MIME type of the selected file. + menu.addIntentOptions(Menu.CATEGORY_ALTERNATIVE, 0, 0, + new ComponentName(this, FileManagerActivity.class), null, intent, 0, null); + } + //} } @Override -- 2.11.0