aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2012-10-06 14:07:37 +0200
committerBananeweizen <bananeweizen@gmx.de>2012-10-06 14:07:37 +0200
commita3317a2922de92fc691265c30401a4b3848a038e (patch)
treeb14e411588dfbb7ca7978a1a16778eac9527427c
parent3dcad1e391deeeb6093b1ac34d8b252969664dfa (diff)
downloadcgeo-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.java59
-rw-r--r--main/src/cgeo/geocaching/files/GPXImporter.java2
-rw-r--r--main/src/cgeo/geocaching/ui/CustomProgressDialog.java44
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