diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2012-10-06 14:07:37 +0200 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2012-10-06 14:07:37 +0200 |
| commit | a3317a2922de92fc691265c30401a4b3848a038e (patch) | |
| tree | b14e411588dfbb7ca7978a1a16778eac9527427c | |
| parent | 3dcad1e391deeeb6093b1ac34d8b252969664dfa (diff) | |
| download | cgeo-a3317a2922de92fc691265c30401a4b3848a038e.zip cgeo-a3317a2922de92fc691265c30401a4b3848a038e.tar.gz cgeo-a3317a2922de92fc691265c30401a4b3848a038e.tar.bz2 | |
fix #1312: Strange progress indicator on GPX-import
| -rw-r--r-- | main/src/cgeo/geocaching/activity/Progress.java | 59 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/files/GPXImporter.java | 2 | ||||
| -rw-r--r-- | main/src/cgeo/geocaching/ui/CustomProgressDialog.java | 44 |
3 files changed, 82 insertions, 23 deletions
diff --git a/main/src/cgeo/geocaching/activity/Progress.java b/main/src/cgeo/geocaching/activity/Progress.java index 7a1995d..1aa1942 100644 --- a/main/src/cgeo/geocaching/activity/Progress.java +++ b/main/src/cgeo/geocaching/activity/Progress.java @@ -1,5 +1,7 @@ package cgeo.geocaching.activity; +import cgeo.geocaching.ui.CustomProgressDialog; + import android.app.ProgressDialog; import android.content.Context; import android.content.DialogInterface; @@ -14,6 +16,15 @@ public class Progress { private ProgressDialog dialog; private int progress = 0; private int progressDivider = 1; + private boolean hideAbsolute = false; + + public Progress(boolean hideAbsolute) { + this.hideAbsolute = hideAbsolute; + } + + public Progress() { + this(false); + } public synchronized void dismiss() { if (dialog != null && dialog.isShowing()) { @@ -24,38 +35,42 @@ public class Progress { public synchronized void show(final Context context, final String title, final String message, final boolean indeterminate, final Message cancelMessage) { if (dialog == null) { - dialog = ProgressDialog.show(context, title, message, indeterminate, cancelMessage != null); - dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); - dialog.setProgress(0); - dialog.setCanceledOnTouchOutside(false); - this.progress = 0; - if (cancelMessage != null) { - dialog.setCancelMessage(cancelMessage); - } + createProgressDialog(context, title, message, cancelMessage); + dialog.setIndeterminate(indeterminate); + dialog.show(); } } public synchronized void show(final Context context, final String title, final String message, final int style, final Message cancelMessage) { if (dialog == null) { - dialog = new ProgressDialog(context); - dialog.setProgress(0); - dialog.setCanceledOnTouchOutside(false); - this.progress = 0; - dialog.setTitle(title); - dialog.setMessage(message); + createProgressDialog(context, title, message, cancelMessage); dialog.setProgressStyle(style); - if (cancelMessage != null) { - dialog.setCancelable(true); - dialog.setCancelMessage(cancelMessage); - dialog.setButton(DialogInterface.BUTTON_NEGATIVE, context.getResources().getString(android.R.string.cancel), cancelMessage); - } else { - dialog.setCancelable(false); - } - dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); dialog.show(); } } + private void createProgressDialog(Context context, String title, String message, Message cancelMessage) { + if (hideAbsolute) { + dialog = new CustomProgressDialog(context); + } + else { + dialog = new ProgressDialog(context); + } + dialog.setTitle(title); + dialog.setMessage(message); + if (cancelMessage != null) { + dialog.setCancelable(true); + dialog.setCancelMessage(cancelMessage); + dialog.setButton(DialogInterface.BUTTON_NEGATIVE, context.getResources().getString(android.R.string.cancel), cancelMessage); + } else { + dialog.setCancelable(false); + } + dialog.setProgress(0); + dialog.setCanceledOnTouchOutside(false); + dialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON); + this.progress = 0; + } + public synchronized void setMessage(final String message) { if (dialog != null && dialog.isShowing()) { dialog.setMessage(message); diff --git a/main/src/cgeo/geocaching/files/GPXImporter.java b/main/src/cgeo/geocaching/files/GPXImporter.java index 279f03f..1bb3c3f 100644 --- a/main/src/cgeo/geocaching/files/GPXImporter.java +++ b/main/src/cgeo/geocaching/files/GPXImporter.java @@ -58,7 +58,7 @@ public class GPXImporter { private static final List<String> GPX_MIME_TYPES = Arrays.asList("text/xml", "application/xml");
private static final List<String> ZIP_MIME_TYPES = Arrays.asList("application/zip", "application/x-compressed", "application/x-zip-compressed", "application/x-zip", "application/octet-stream");
- private Progress progress = new Progress();
+ private Progress progress = new Progress(true);
private Resources res;
private int listId;
diff --git a/main/src/cgeo/geocaching/ui/CustomProgressDialog.java b/main/src/cgeo/geocaching/ui/CustomProgressDialog.java new file mode 100644 index 0000000..f7772be --- /dev/null +++ b/main/src/cgeo/geocaching/ui/CustomProgressDialog.java @@ -0,0 +1,44 @@ +package cgeo.geocaching.ui; + +import cgeo.geocaching.utils.Log; + +import android.app.ProgressDialog; +import android.content.Context; +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; + +import java.lang.reflect.Field; +import java.lang.reflect.Method; + +/** + * Modified progress dialog class which allows hiding the absolute numbers + * + */ +public class CustomProgressDialog extends ProgressDialog { + + public CustomProgressDialog(Context context) { + super(context); + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + try { + Method method = TextView.class.getMethod("setVisibility", Integer.TYPE); + + Field[] fields = this.getClass().getSuperclass().getDeclaredFields(); + + for (Field field : fields) { + if (field.getName().equalsIgnoreCase("mProgressNumber")) { + field.setAccessible(true); + TextView textView = (TextView) field.get(this); + method.invoke(textView, View.GONE); + } + } + } catch (Exception e) { + Log.e("Failed to invoke the progressDialog method 'setVisibility' and set 'mProgressNumber' to GONE.", e); + } + } +}
\ No newline at end of file |
