Testing the next release of MIT App Inventor (nb187)

We've updated ai2-test today with some additional items:

  • Fix an issue with compiled apps and dropdown blocks
  • Different preview styles when in "Device Default" theme (@Himani's GSOC project)
  • Fix a logical bug in the Ev3Gyro sensor (@BeksOmega)
  • Open all help items in new tabs (@pavi2410)

Regards,
Evan

8 Likes

6 posts were split to a new topic: Change The Design To Make It A Little Bit Modern

I found a small bug in the designer.
When we set the theme "Device default" the appearance of the switch component is correct.

When we set the "Classic" theme then the switch component looks like a checkbox.

5 Likes

It would be nice if you add a drop-down block to Any Components.
Like this-
image

In this image the Image block (Red color) should be kept manually. Can you please make it default so that the user should not need to connect it manually.

1 Like

Yes, that's a good point that the dropdown blocks should also appear in the generic component blocks.

4 Likes

Hello everyone,

ai2-test has been updated with the latest testing version. In addition to the items in the earlier post, this version includes the following changes:

Features:

  • Load tutorials over HTTPS when available (@pavi2410)
  • Implement a select all projects checkbox (@AnujSinghal12)
  • Add MoveToPoint method to ImageSprite (@joysyu)
  • Add UpdateDone event to CloudDB
  • Add TapThreshold property to Canvas to fine-tune touches vs drags (@Himanshu2107)
  • Load built-in templates via the repo URL parameter
  • Implement visual accessibility features for apps (@dunandmuri)
  • Add NumbersOnly property to the PasswordTextBox component (@preetvadaliya)
  • Add project name suggestion when collisions occur (@AKandAK)
  • Add new layouts for ListView items (@ankritisachan)
  • Improve the performance of ListView using the RecyclerView library (@27vinayvyas)
  • Implement scoped file storage needed for Android SDK 30 compatibility

Bug fixes:

  • Fix an issue with loading the Chinese and Brazilian Portuguese translations
  • Fix forum link to point to new community site (@pavi2410)
  • Fix an issue where order of global variables affected project loading
  • Fix an issue where browser extensions interfere with block PNG export
  • Fix a bug that prevents restoring multiple projects from the trash (@AnujSinghal12)
  • Fix an issue where editing a block's text would cancel if a parameter field moved under the cursor (@Siddharth1010)
  • Adjust some CloudDB timeouts for better performance
  • Make deprecation of blocks consistent across block types (@BeksOmega)
  • Make companion code entry textbox a single line only
  • Fix a bug where popping a value from CloudDB would result in a change of datatype
  • Fix a bug where dictionaries would erroneously convert associative lists to dictionaries (@AnujSinghal12)
  • Fix some spelling errors in the documentation (@AnujSinghal12, @HollowMan6, @AKandAK, @preetyvadaliya, @josmas)
  • Fix semantics of the text not equals block
  • Fix a bug where edited files would not be saved to the server correctly
  • Fix a bug where LineString would appear in the design when set to invisible (@Himanshu2107)
  • Fix an internal error when selecting the child of a map component when the map was invisible (@Himanshu2107)
  • Fix a bug where flydowns would not appear unless a variable name was edited first
  • Fix a bug where an internal exception prevented apps with extensions from building correctly
  • Update the Chinese Traditional translation
  • Fix bugs in the helper blocks identified during testing
  • Fix bugs in recyclerview identified during testing

Internal changes:

  • Fix a bug that prevented the companion app from building on Windows
  • Clean up some unused imports (@rupesh-kumar-lpu)
  • Add build tools helper (@pavi2410)
  • Add GitHub actions as an option for continuous integration (@Sander0542)
  • Add some additional metadata to CloudDB tokens
  • Implement a flag to control the use of whitespace in blocks XML
  • Remove vestigial code
  • Fix a locale bug in the development server login page (@HollowMan6)
  • Add buildserver hostname to vars page
  • Add stats collection for build pipeline
  • Add gitattributes to control line endings for unit tests
  • Made the allowed tutorial URLs list a server configuration
  • Add a service expiry notice for test servers
  • Add more unit tests for components (@preetvadaliya)
  • Address out of memory issues in unit tests
  • Change how project settings are managed on the server
  • Implement limited continuations in the component processor and code generator

Please help us test this release and give us feedback on any issues you encounter.

Regards,
Evan W. Patton, Ph.D.
Lead Software Engineer, MIT App Inventor

13 Likes

I did a first test (1-2 with the APK, Android 11):

  1. READ permission:

  1. I am still unable to list the assets.

  2. Companion now declares the following permissions in the Manifest:

Permissions
    <uses-feature android:name="android.hardware.bluetooth" android:required="false"/>
    <uses-feature android:name="android.hardware.location" android:required="false"/>
    <uses-feature android:name="android.hardware.telephony" android:required="false"/>
    <uses-feature android:name="android.hardware.location.network" android:required="false"/>
    <uses-feature android:name="android.hardware.location.gps" android:required="false"/>
    <uses-feature android:name="android.hardware.microphone" android:required="false"/>
    <uses-feature android:name="android.hardware.touchscreen" android:required="false"/>
    <uses-feature android:name="android.hardware.camera" android:required="false"/>
    <uses-feature android:name="android.hardware.camera.autofocus" android:required="false"/>
    <uses-feature android:name="android.hardware.wifi"/>
    <uses-permission android:name="android.permission.READ_CONTACTS"/>
    <uses-permission android:name="com.google.android.googleapps.permission.GOOGLE_AUTH"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
    <uses-permission android:name="android.permission.CALL_PHONE"/>
    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
    <uses-permission android:name="android.permission.NFC"/>
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
    <uses-permission android:name="android.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.VIBRATE"/>
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES"/>
    <uses-permission android:name="android.permission.INTERNET"/>
    <uses-permission android:name="android.permission.USE_CREDENTIALS"/>
    <uses-permission android:name="android.permission.READ_CALL_LOG"/>
    <uses-permission android:name="android.permission.ACCOUNT_MANAGER"/>
    <uses-permission android:name="com.google.android.apps.googlevoice.permission.RECEIVE_SMS"/>
    <uses-permission android:name="com.google.android.apps.googlevoice.permission.SEND_SMS"/>
    <uses-permission android:name="android.permission.CAMERA"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.BLUETOOTH"/>
    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
    <uses-permission android:name="android.permission.READ_LOGS"/>

So READ & WRITE permissions are now available for all Android versions (except WRITE on Android 11+).

   <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
   <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
  1. Listing the assets with Companion works.
3 Likes

As I know You Told That your going to add Google Sheets in Next Release

1 Like

hello I am using recyclerview extension on this test server it works fine in companion but after installing apk app always crashed on startup .
I think cardview and recyclyerview libraries are added on this release.

adb logcat info

> Blockquote
07-24 23:25:23.279  5311  5311 E AndroidRuntime: FATAL EXCEPTION: main
07-24 23:25:23.279  5311  5311 E AndroidRuntime: Process: appinventor.ai_himalayanxtiger.RecyclerView, PID: 5311
07-24 23:25:23.279  5311  5311 E AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Lio/kcz/CustomRecyclerView/Recycler$RecyclerAdapter;
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at java.lang.Class.getDeclaredFields(Native Method)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.addFields(ClassType.java:606)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.getFields(ClassType.java:506)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.hasOuterLink(ClassType.java:260)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.getDeclaredMethod(ClassType.java:880)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.addMethod(ClassType.java:667)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.addMethod(ClassType.java:698)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.addMethods(ClassType.java:1009)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.getDeclaredMethods(ClassType.java:725)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.bytecode.ClassType.getMethods(ClassType.java:809)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.kawa.reflect.ClassMethods.getMethods(ClassMethods.java:106)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.kawa.reflect.ClassMethods.apply(ClassMethods.java:229)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.kawa.reflect.Invoke.lookupMethods(Invoke.java:278)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.kawa.reflect.Invoke.applyN(Invoke.java:185)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at gnu.mapping.ProcedureN.apply2(ProcedureN.java:39)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at appinventor.ai_himalayanxtiger.RecyclerView.Screen1.$define(Screen1.yail:10259)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at com.google.appinventor.components.runtime.Form.onCreateFinish(Form.java:400)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at com.google.appinventor.components.runtime.Form.onCreate(Form.java:345)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at appinventor.ai_himalayanxtiger.RecyclerView.Screen1.onCreate(Screen1.yail:10005)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:8198)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.Activity.performCreate(Activity.java:8182)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1309)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3765)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3968)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:85)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2307)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:106)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:246)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8512)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
07-24 23:25:23.279  5311  5311 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: io.kcz.CustomRecyclerView.Recycler$RecyclerAdapter
07-24 23:25:23.279  5311  5311 E AndroidRuntime: 	... 34 more


and another project logcat

>07-25 00:04:13.405 22634 22634 E AndroidRuntime: FATAL EXCEPTION: main
07-25 00:04:13.405 22634 22634 E AndroidRuntime: Process: appinventor.ai_himalayanxtiger.TestRecView, PID: 22634
07-25 00:04:13.405 22634 22634 E AndroidRuntime: java.lang.NoClassDefFoundError: Failed resolution of: Landroidx/cardview/R$attr;
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.cardview.widget.CardView.<init>(CardView.java:117)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.cardview.widget.CardView.<init>(CardView.java:113)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at io.csapps.recyclerview.view.Card.<init>(Unknown Source:1)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at io.csapps.recyclerview.widget.CardView.build(Unknown Source:10)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at io.csapps.recyclerview.ListAdapter.onCreateViewHolder(Unknown Source:6)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at io.csapps.recyclerview.ListAdapter.onCreateViewHolder(Unknown Source:0)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.RecyclerView$Adapter.createViewHolder(RecyclerView.java:6794)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.RecyclerView$Recycler.tryGetViewHolderForPositionByDeadline(RecyclerView.java:5975)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5858)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.RecyclerView$Recycler.getViewForPosition(RecyclerView.java:5854)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.LinearLayoutManager$LayoutState.next(LinearLayoutManager.java:2230)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.GridLayoutManager.layoutChunk(GridLayoutManager.java:557)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.LinearLayoutManager.fill(LinearLayoutManager.java:1517)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.LinearLayoutManager.onLayoutChildren(LinearLayoutManager.java:612)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.GridLayoutManager.onLayoutChildren(GridLayoutManager.java:171)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.RecyclerView.dispatchLayoutStep2(RecyclerView.java:3924)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.RecyclerView.dispatchLayout(RecyclerView.java:3641)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.recyclerview.widget.RecyclerView.onLayout(RecyclerView.java:4194)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at com.google.appinventor.components.runtime.ScaledFrameLayout.onLayout(ScaledFrameLayout.java:193)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at androidx.appcompat.widget.ActionBarOverlayLayout.onLayout(ActionBarOverlayLayout.java:444)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.setChildFrame(LinearLayout.java:1829)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.layoutVertical(LinearLayout.java:1673)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.LinearLayout.onLayout(LinearLayout.java:1582)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.layoutChildren(FrameLayout.java:332)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.widget.FrameLayout.onLayout(FrameLayout.java:270)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at com.android.internal.policy.DecorView.onLayout(DecorView.java:1225)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.View.layout(View.java:24475)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewGroup.layout(ViewGroup.java:7383)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewRootImpl.performLayout(ViewRootImpl.java:4273)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewRootImpl.performTraversals(ViewRootImpl.java:3708)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewRootImpl.doTraversal(ViewRootImpl.java:2631)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.ViewRootImpl$TraversalRunnable.run(ViewRootImpl.java:9984)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1010)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.Choreographer.doCallbacks(Choreographer.java:809)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.Choreographer.doFrame(Choreographer.java:744)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:995)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.os.Handler.handleCallback(Handler.java:938)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.os.Handler.dispatchMessage(Handler.java:99)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.os.Looper.loop(Looper.java:246)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at android.app.ActivityThread.main(ActivityThread.java:8512)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at java.lang.reflect.Method.invoke(Native Method)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:602)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1130)
07-25 00:04:13.405 22634 22634 E AndroidRuntime: Caused by: java.lang.ClassNotFoundException: androidx.cardview.R$attr
07-25 00:04:13.405 22634 22634 E AndroidRuntime: 	... 82 more
2 Likes

Submit your project for testing.

1 Like

Hello,
I would like to make a proposal:
I would set as default the device default theme instead of classic, because I think it gives a more professional look to the apps.
Thank you very much

image

1 Like

Thank you but i cant share project because it contains paid extensions.

I found the solution cardview and recyclerview libraries are only added if we use listview component.
and using defualt listview as invisiable it works .

3 Likes

So make a sample project with no paid extensions that will produce the same error.
Unless you think the problem is with two recyclerview libraries in your project? Perhaps extension developers will have to adapt their extensions to the new ai2.

2 Likes

This class was not found at runtime.

No way extensions can use resource files, as of now.

1 Like

Yes but i tested with decompiling 2 apps ,
One black project and one with listview component

  1. There is no cardview and recyclerview libraries inside androidx folder in blank project
  2. Another one have both files

So i think if any external extension uses cardview and recyclerview we must use defualt listview as dummy

1 Like

New Listview component. When clicking in the "second" textbox you have to click twice to be able to edit the textbox. It is difficult to see in the gif but when you click the first time you can see a cursor appear and then disappear. You have to click a second time so you can edit the textbox. This goes for both textboxes. If you start with Detail Text the problem is with Main Text and vice versa.

When you go back to all ready entered items you always have to click twice in the textbox to edit the text.

5 Likes

Simple example of ListView.

nuevo_visorlista.aia (31.4 KB)

The separating line between two elements is not clear.

4 Likes

Hi! Thanks for testing out the new helper blocks :smiley: I looked into all this stuff, and I think it's behaving as intended.

Left red bubble: That block represents a value ReadExternalStorage of type enum Permission, so I think that's correct.

Right bubble: As stated above, it is of type enum Permission, not string. This was a design decision. Basically unless we need to coerce an enum to it's underlying value (in this case string) we don't. That keeps the blocks more type-safe and less error prone.

Blue Bubble: Hmm that's a bit tricky. The thing is, the "underlying value" is "READ_EXTERNAL_STORAGE" (see here), so those two things are not equal. I'm not sure how to resolve this (or if the core team wants it resolved) but hopefully that explains the weird behavior.

Thanks again for trying it out. I can't speak to your other issues, but hopefully someone else can!

Best wishes,
Beka

5 Likes

Thanks for the explanation.

1 Like

I uploaded 2 complicated projects I've been working on. They both work on the current server but crash when trying to open after installing the apks built from the test server. They also crash when running from the companion on the test server.

Both show this error in the companion:

invoke: no method named `GetValue' in class java.lang.Boolean
Note: You will not see another error reported for 5 seconds.

I assumed this refers to dictionaries or tinydb, even though dictionaries and tinydb seem to work on the test server when building from scratch.

I also get an error when trying to use the taifun tools extension to keep the screen on.

I attached the less complicated app if it helps. It is still quite involved though. I can't replicate the errors when building a simpler app on the test server.

1 Like