Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

This library crashes the app when running in pseudolocale #502

Open
KarimFikani opened this issue Jan 8, 2021 · 2 comments
Open

This library crashes the app when running in pseudolocale #502

KarimFikani opened this issue Jan 8, 2021 · 2 comments

Comments

@KarimFikani
Copy link

When I turned on pseudolocale for my app and tried to open the calendar picker view I got this crash:

2021-01-07 20:18:55.204 22755-22755/com.tripactions.internal E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.tripactions.internal, PID: 22755
    android.view.InflateException: Binary XML file line #89 in com.tripactions.internal:layout/fragment_calendar_date_selector: Binary XML file line #89 in com.tripactions.internal:layout/fragment_calendar_date_selector: Error inflating class com.squareup.timessquare.CalendarPickerView
    Caused by: android.view.InflateException: Binary XML file line #89 in com.tripactions.internal:layout/fragment_calendar_date_selector: Error inflating class com.squareup.timessquare.CalendarPickerView
    Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Constructor.newInstance0(Native Method)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343)
        at android.view.LayoutInflater.createView(LayoutInflater.java:854)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006)
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961)
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123)
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682)
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534)
        at com.tripactions.alpha.calendar.fragments.CalendarDateSelectorFragment.onCreateView(CalendarDateSelectorFragment.kt:138)
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2699)
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1199)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368)
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446)
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509)
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447)
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2181)
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2004)
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1959)
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1861)
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:237)
        at android.app.ActivityThread.main(ActivityThread.java:8167)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)
     Caused by: java.lang.IllegalArgumentException: Illegal pattern character 'o'
        at java.text.SimpleDateFormat.compile(SimpleDateFormat.java:932)
        at java.text.SimpleDateFormat.initialize(SimpleDateFormat.java:718)
        at java.text.SimpleDateFormat.<init>(SimpleDateFormat.java:689)
        at com.squareup.timessquare.CalendarPickerView.<init>(CalendarPickerView.java:139)
        at java.lang.reflect.Constructor.newInstance0(Native Method) 
        at java.lang.reflect.Constructor.newInstance(Constructor.java:343) 
        at android.view.LayoutInflater.createView(LayoutInflater.java:854) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:1006) 
        at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:961) 
        at android.view.LayoutInflater.rInflate(LayoutInflater.java:1123) 
        at android.view.LayoutInflater.rInflateChildren(LayoutInflater.java:1084) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:682) 
        at android.view.LayoutInflater.inflate(LayoutInflater.java:534) 
        at com.tripactions.alpha.calendar.fragments.CalendarDateSelectorFragment.onCreateView(CalendarDateSelectorFragment.kt:138) 
        at androidx.fragment.app.Fragment.performCreateView(Fragment.java:2699) 
        at androidx.fragment.app.FragmentStateManager.createView(FragmentStateManager.java:320) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1199) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1368) 
        at androidx.fragment.app.FragmentManager.moveFragmentToExpectedState(FragmentManager.java:1446) 
        at androidx.fragment.app.FragmentManager.moveToState(FragmentManager.java:1509) 
        at androidx.fragment.app.BackStackRecord.executeOps(BackStackRecord.java:447) 
        at androidx.fragment.app.FragmentManager.executeOps(FragmentManager.java:2181) 
        at androidx.fragment.app.FragmentManager.executeOpsTogether(FragmentManager.java:2004) 
        at androidx.fragment.app.FragmentManager.removeRedundantOperationsAndExecute(FragmentManager.java:1959) 
        at androidx.fragment.app.FragmentManager.execPendingActions(FragmentManager.java:1861) 
        at androidx.fragment.app.FragmentManager$4.run(FragmentManager.java:413) 
        at android.os.Handler.handleCallback(Handler.java:883) 
        at android.os.Handler.dispatchMessage(Handler.java:100) 
        at android.os.Looper.loop(Looper.java:237) 
        at android.app.ActivityThread.main(ActivityThread.java:8167) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:496) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1100)

Solution is to set the date strings to not be translatable:

<string name="month_name_format" translatable="false">MMMM yyyy</string>
<string name="month_only_name_format" translatable="false">MMMM</string>
<string name="year_only_format" translatable="false">yyyy</string>
@edenman
Copy link
Collaborator

edenman commented Jan 8, 2021

yeah....except we do want those to be translatable, for instance in Korean the month_name_format is:
https://github.com/square/android-times-square/blob/master/library/src/main/res/values-ko/strings.xml

@KarimFikani
Copy link
Author

KarimFikani commented Jan 8, 2021

@edenman so "translatable=false" would only affect pseudolocale setting but if the locale on the device is Korean then Android will still pick up the string that you did override in values-ko. I already have similar examples in my project and works perfectly fine but couldn't override the ones from this library.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants
@edenman @KarimFikani and others