diff --git a/src/api-impl-jni/generated_headers/android_widget_ProgressBar.h b/src/api-impl-jni/generated_headers/android_widget_ProgressBar.h index 95b3012d..b494a023 100644 --- a/src/api-impl-jni/generated_headers/android_widget_ProgressBar.h +++ b/src/api-impl-jni/generated_headers/android_widget_ProgressBar.h @@ -215,6 +215,14 @@ JNIEXPORT jlong JNICALL Java_android_widget_ProgressBar_native_1constructor JNIEXPORT void JNICALL Java_android_widget_ProgressBar_native_1setProgress (JNIEnv *, jobject, jlong, jfloat); +/* + * Class: android_widget_ProgressBar + * Method: setIndeterminate + * Signature: (Z)V + */ +JNIEXPORT void JNICALL Java_android_widget_ProgressBar_setIndeterminate + (JNIEnv *, jobject, jboolean); + #ifdef __cplusplus } #endif diff --git a/src/api-impl-jni/widgets/android_widget_Progressbar.c b/src/api-impl-jni/widgets/android_widget_Progressbar.c index 7ce0b777..993fcfb8 100644 --- a/src/api-impl-jni/widgets/android_widget_Progressbar.c +++ b/src/api-impl-jni/widgets/android_widget_Progressbar.c @@ -11,14 +11,31 @@ JNIEXPORT jlong JNICALL Java_android_widget_ProgressBar_native_1constructor(JNIEnv *env, jobject this, jobject context, jobject attrs) { GtkWidget *wrapper = g_object_ref(wrapper_widget_new()); + GtkWidget *box = gtk_box_new(GTK_ORIENTATION_VERTICAL, 0); GtkWidget *progress_bar = gtk_progress_bar_new(); - wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), progress_bar); - gtk_widget_set_name(progress_bar, "ProgressBar"); - return _INTPTR(progress_bar); + GtkWidget *spinner = gtk_spinner_new(); + wrapper_widget_set_child(WRAPPER_WIDGET(wrapper), box); + gtk_box_append(GTK_BOX(box), progress_bar); + gtk_box_append(GTK_BOX(box), spinner); + gtk_widget_set_name(box, "ProgressBar"); + gtk_widget_set_visible(spinner, FALSE); + return _INTPTR(box); } JNIEXPORT void JNICALL Java_android_widget_ProgressBar_native_1setProgress(JNIEnv *env, jobject this, jlong widget_ptr, jfloat progress) { - GtkProgressBar *progress_bar = GTK_PROGRESS_BAR(_PTR(widget_ptr)); + GtkWidget *box = GTK_WIDGET(_PTR(widget_ptr)); + GtkProgressBar *progress_bar = GTK_PROGRESS_BAR(gtk_widget_get_first_child(box)); gtk_progress_bar_set_fraction(progress_bar, progress); } + +JNIEXPORT void JNICALL Java_android_widget_ProgressBar_setIndeterminate(JNIEnv *env, jobject this, jboolean indeterminate) +{ + GtkWidget *box = GTK_WIDGET(_PTR(_GET_LONG_FIELD(this, "widget"))); + GtkProgressBar *progress_bar = GTK_PROGRESS_BAR(gtk_widget_get_first_child(box)); + GtkSpinner *spinner = GTK_SPINNER(gtk_widget_get_last_child(box)); + + gtk_spinner_set_spinning(spinner, indeterminate); + gtk_widget_set_visible(GTK_WIDGET(progress_bar), !indeterminate); + gtk_widget_set_visible(GTK_WIDGET(spinner), indeterminate); +} diff --git a/src/api-impl/android/widget/ProgressBar.java b/src/api-impl/android/widget/ProgressBar.java index 51dcb5d8..19c634ff 100644 --- a/src/api-impl/android/widget/ProgressBar.java +++ b/src/api-impl/android/widget/ProgressBar.java @@ -1,6 +1,7 @@ package android.widget; import android.content.Context; +import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.util.AttributeSet; @@ -14,6 +15,9 @@ public class ProgressBar extends View { public ProgressBar(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); haveComplexMeasure = true; + TypedArray a = context.obtainStyledAttributes(attrs, com.android.internal.R.styleable.ProgressBar, defStyle, 0); + setIndeterminate(a.getBoolean(com.android.internal.R.styleable.ProgressBar_indeterminate, false)); + a.recycle(); } public ProgressBar(Context context, AttributeSet attrs) { @@ -28,7 +32,7 @@ public class ProgressBar extends View { protected native long native_constructor(Context context, AttributeSet attrs); private native void native_setProgress(long widget, float fraction); - public synchronized void setIndeterminate(boolean indeterminate) {} + public native void setIndeterminate(boolean indeterminate); public Drawable getProgressDrawable() { return new Drawable() {