code-troopers / android-betterpickers

[NO LONGER MAINTAINED] Android library for better Picker DialogFragments
2.68k stars 566 forks source link

RadialTimePickerDialog crashing on Android 3.0 #96

Open mousewithjetpack opened 10 years ago

mousewithjetpack commented 10 years ago

The RadialTimePickerDialog crashes on Android 3.0 when attempting to select a new hour or minute.

Here is the logcat:

06-14 17:13:30.286: V/TLINE(360): new: android.text.TextLine@4112bec8
06-14 17:13:33.417: I/dalvikvm(360): Could not find method android.widget.TextView.onInitializeAccessibilityEvent, referenced from method com.doomonafireball.betterpickers.widget.AccessibleTextView.onInitializeAccessibilityEvent
06-14 17:13:33.417: W/dalvikvm(360): VFY: unable to resolve virtual method 8759: Landroid/widget/TextView;.onInitializeAccessibilityEvent (Landroid/view/accessibility/AccessibilityEvent;)V
06-14 17:13:33.417: D/dalvikvm(360): VFY: replacing opcode 0x6f at 0x0000
06-14 17:13:33.427: W/dalvikvm(360): VFY: unable to find class referenced in signature (Landroid/view/accessibility/AccessibilityNodeInfo;)
06-14 17:13:33.427: I/dalvikvm(360): Could not find method android.widget.TextView.onInitializeAccessibilityNodeInfo, referenced from method com.doomonafireball.betterpickers.widget.AccessibleTextView.onInitializeAccessibilityNodeInfo
06-14 17:13:33.427: W/dalvikvm(360): VFY: unable to resolve virtual method 8760: Landroid/widget/TextView;.onInitializeAccessibilityNodeInfo (Landroid/view/accessibility/AccessibilityNodeInfo;)V
06-14 17:13:33.427: D/dalvikvm(360): VFY: replacing opcode 0x6f at 0x0000
06-14 17:13:33.467: W/dalvikvm(360): VFY: unable to find class referenced in signature (Landroid/view/accessibility/AccessibilityNodeInfo;)
06-14 17:13:33.467: I/dalvikvm(360): Could not find method android.widget.FrameLayout.onInitializeAccessibilityNodeInfo, referenced from method com.doomonafireball.betterpickers.radialtimepicker.RadialPickerLayout.onInitializeAccessibilityNodeInfo
06-14 17:13:33.477: W/dalvikvm(360): VFY: unable to resolve virtual method 8482: Landroid/widget/FrameLayout;.onInitializeAccessibilityNodeInfo (Landroid/view/accessibility/AccessibilityNodeInfo;)V
06-14 17:13:33.477: D/dalvikvm(360): VFY: replacing opcode 0x6f at 0x0000
06-14 17:13:33.487: I/dalvikvm(360): Could not find method android.widget.FrameLayout.performAccessibilityAction, referenced from method com.doomonafireball.betterpickers.radialtimepicker.RadialPickerLayout.performAccessibilityAction
06-14 17:13:33.487: W/dalvikvm(360): VFY: unable to resolve virtual method 8487: Landroid/widget/FrameLayout;.performAccessibilityAction (ILandroid/os/Bundle;)Z
06-14 17:13:33.487: D/dalvikvm(360): VFY: replacing opcode 0x6f at 0x0002
06-14 17:13:33.547: I/dalvikvm(360): Could not find method android.view.View.setScrollX, referenced from method com.nineoldandroids.view.ViewHelper$Honeycomb.setScrollX
06-14 17:13:33.547: W/dalvikvm(360): VFY: unable to resolve virtual method 8057: Landroid/view/View;.setScrollX (I)V
06-14 17:13:33.547: D/dalvikvm(360): VFY: replacing opcode 0x6e at 0x0000
06-14 17:13:33.547: I/dalvikvm(360): Could not find method android.view.View.setScrollY, referenced from method com.nineoldandroids.view.ViewHelper$Honeycomb.setScrollY
06-14 17:13:33.547: W/dalvikvm(360): VFY: unable to resolve virtual method 8058: Landroid/view/View;.setScrollY (I)V
06-14 17:13:33.547: D/dalvikvm(360): VFY: replacing opcode 0x6e at 0x0000
06-14 17:13:33.558: I/dalvikvm(360): Could not find method android.view.View.announceForAccessibility, referenced from method com.doomonafireball.betterpickers.Utils.tryAccessibilityAnnounce
06-14 17:13:33.558: W/dalvikvm(360): VFY: unable to resolve virtual method 7908: Landroid/view/View;.announceForAccessibility (Ljava/lang/CharSequence;)V
06-14 17:13:33.558: D/dalvikvm(360): VFY: replacing opcode 0x6e at 0x000a
06-14 17:13:34.227: W/dalvikvm(360): Unable to match class for part: 'Landroid/view/accessibility/AccessibilityNodeInfo;)V'
06-14 17:13:34.260: E/PropertyValuesHolder(360): Couldn't find setter/getter for property scaleX with value type float
06-14 17:13:34.260: W/dalvikvm(360): Unable to match class for part: 'Landroid/view/accessibility/AccessibilityNodeInfo;)V'
06-14 17:13:34.260: E/PropertyValuesHolder(360): Couldn't find setter/getter for property scaleY with value type float
06-14 17:13:36.757: I/dalvikvm(360): Jit: resizing JitTable from 512 to 1024
06-14 17:13:36.890: E/RadialTextsView(360): RadialTextView was not ready for animation.
06-14 17:13:36.890: E/RadialSelectorView(360): RadialSelectorView was not ready for animation.
06-14 17:13:36.917: D/AndroidRuntime(360): Shutting down VM
06-14 17:13:36.917: W/dalvikvm(360): threadid=1: thread exiting with uncaught exception (group=0x40014760)
06-14 17:13:37.007: E/AndroidRuntime(360): FATAL EXCEPTION: main
06-14 17:13:37.007: E/AndroidRuntime(360): java.lang.IllegalStateException: Circular dependencies cannot exist in AnimatorSet
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.nineoldandroids.animation.AnimatorSet.sortNodes(AnimatorSet.java:818)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.nineoldandroids.animation.AnimatorSet.start(AnimatorSet.java:456)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.doomonafireball.betterpickers.radialtimepicker.RadialPickerLayout.setCurrentItemShowing(RadialPickerLayout.java:545)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.doomonafireball.betterpickers.radialtimepicker.RadialTimePickerDialog.setCurrentItemShowing(RadialTimePickerDialog.java:467)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.doomonafireball.betterpickers.radialtimepicker.RadialTimePickerDialog.onValueSelected(RadialTimePickerDialog.java:415)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.doomonafireball.betterpickers.radialtimepicker.RadialPickerLayout.onTouch(RadialPickerLayout.java:708)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.View.dispatchTouchEvent(View.java:4596)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1488)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1256)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:1494)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:1269)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.android.internal.policy.impl.PhoneWindow$DecorView.superDispatchTouchEvent(PhoneWindow.java:1700)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.android.internal.policy.impl.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1270)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.app.Dialog.dispatchTouchEvent(Dialog.java:689)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.android.internal.policy.impl.PhoneWindow$DecorView.dispatchTouchEvent(PhoneWindow.java:1680)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewRoot.deliverPointerEvent(ViewRoot.java:2272)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.view.ViewRoot.handleMessage(ViewRoot.java:1958)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.os.Handler.dispatchMessage(Handler.java:99)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.os.Looper.loop(Looper.java:126)
06-14 17:13:37.007: E/AndroidRuntime(360):  at android.app.ActivityThread.main(ActivityThread.java:3997)
06-14 17:13:37.007: E/AndroidRuntime(360):  at java.lang.reflect.Method.invokeNative(Native Method)
06-14 17:13:37.007: E/AndroidRuntime(360):  at java.lang.reflect.Method.invoke(Method.java:491)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:841)
06-14 17:13:37.007: E/AndroidRuntime(360):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
06-14 17:13:37.007: E/AndroidRuntime(360):  at dalvik.system.NativeStart.main(Native Method)
06-14 17:13:53.437: I/Process(360): Sending signal. PID: 360 SIG: 9
nirbo commented 9 years ago

This is still happening in API 14 (ICS 4.0).

CedricGatay commented 8 years ago

Is this still relevant with last version ?

nirbo commented 8 years ago

Hey, I have not used it in a while now so I've no idea. Maybe the original poster of this issue would know.

AlessandroLucchet commented 8 years ago

I found a fix for that. you had to add this check in the setCurrentItemShowing function of RadialPickerLayout: if(anims[0]!=null&&anims[1]!=null&&anims[2]!=null&&anims[3]!=null)

here is the code:

if(anims[0]!=null&&anims[1]!=null&&anims[2]!=null&&anims[3]!=null) {
    if (mTransition != null && mTransition.isRunning()) {
        mTransition.end();
    }
    mTransition = new AnimatorSet();
    mTransition.playTogether(anims);
    mTransition.start();
}else{
    int hourAlpha = (index == HOUR_INDEX) ? 1 : 0;
    int minuteAlpha = (index == MINUTE_INDEX) ? 1 : 0;
    mHourRadialTextsView.setAlpha(hourAlpha);
    mHourRadialSelectorView.setAlpha(hourAlpha);
    mMinuteRadialTextsView.setAlpha(minuteAlpha);
    mMinuteRadialSelectorView.setAlpha(minuteAlpha);
}

it looks like in some device (Android 3.x and 4.0),mMinuteRadialTextsView and mMinuteRadialSelectorView are drawn only after getReappearAnimator() is called. With this check, I fixed it

fchauveau commented 8 years ago

Hey,

Thanks @Hyperion777 for this fix, I will test it asap