Android Question Substitute of Starter Service

Rubens Jr.

Member
Licensed User
Hi !
How can I make a service like the starter service (always runing) as described :
  • If you are using B4A v8.30+ then the starter service will not be killed until the whole process is killed.
  • You will see a message such as this one, 60 seconds after the app has moved to the background:
    ** Service (starter) Destroy (ignored)**
Reason :
My Tablet with Android 11 do not start my app if it has the starter Service !
It shoes a blank screen only.
With an very old other tablet (Android 8.1) This do not happen. My App starts ok every time. (This tablet is a very slow one, about 100 seconds to do a boot)
With another old tablet (Android 9) in 10 times 1 start with a blank screen, 9 ok. This is a not to slow one.
With this brand new ... in 20 times only one starts ok. Even when starts ok, if a touch Home button and start it again : blank screen.
In This same new tablet, an very old App made with B4A version 2.5 the App start ok.

In this new tablet I made a factory reset. Enable usb debug
In B4A (version 11.50) : Start a new project : File -> New -> b4xpages. No modification, just the example.
Compile and run : blank screen.
But, if I remove de Start service and compile and run : Ok ! No problem !! The Click button apears normal.

So .. Is there a way that I make a another service with another name of course than stay running like de start one ?
Thanks

(Sorry by bad english ..)
 

Rubens Jr.

Member
Licensed User
There is no reason for that. Create a B4XPages and run it. It should work. If not then something is misconfigured.
I Did it. I Created a new project -> b4xpages. Compiled and run ... blank screen
In this empty project if I remove de Start service it run normal : the click button apears ok.
 
Upvote 0

Rubens Jr.

Member
Licensed User
1. Which device are you using?
2. Post a screenshot.
3. Post the logs.
The log :
(pointer 0 down was I clicking several times in screeen just to find de relevant log !)

ointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=435.27454 y=370.63806
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=464.2263 y=375.63318
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=464.2263 y=374.63416
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=463.22794 y=374.63416
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=464.2263 y=374.63416
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=472.21295 y=377.63123
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=483.19467 y=378.63025
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=482.19632 y=377.63123
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=480.19965 y=375.63318
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=483.19467 y=375.63318
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=490.183 y=374.63416
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=470.21628 y=373.63513
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=459.2346 y=377.63123
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=445.2579 y=380.6283
pointer 0 down pointerIndex=0 trackingIndex=0
pointer 0 down x=257.5707 y=429.58047
START u0 {act=android.intent.action.MAIN cat=[android.intent.category.LAUNCHER] flg=0x10200000 cmp=b4a.example/.main bnds=[205,354][300,515]} from uid 10095
uid=10095(com.android.launcher3) identical 2 lines
current RecentsOrientedState: [this=RecentsOrientedState@8b2b974 mOrientationHandler=PortraitPagedViewHandler@c527e9d mDisplayRotation=0 mTouchRotation=0 mRecentsActivityRotation=0 isRecentsActivityRotationAllowed=true mSystemRotation=false mFlags=289]
Transition from ACTIVITY_FINISHED to INTENT_STARTED
start by-launcher
start_output_stream
disable backend pcm(directionCM_OUT)
Apply path: out-reset
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Apply path: media-single-speaker
select device(out)dev:OUT_SPK, path:media-single-speaker
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
+++++++++++++++ start_output_stream: pcm sample_rate: 48000,pcm fmt: 0x00000000,pcm channels: 2
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
oneway function results will be dropped but finished with status OK and parcel size 4
oneway function results will be dropped but finished with status OK and parcel size 4
Power setMode: LAUNCH to: 1
setLaunchValueAnimatorScale 0.55
setLaunchValueAnimatorScale return false
SessionDirect:ump: beginning usec: 1643093100329963
Session Direct (id=25)
Summary:
Description = /data/misc/iorapd/b4a.example/1/b4a.example.main/compiled_traces/compiled_trace.pb
Duration = 27ms
Total File Paths=7 (good: 100%)
Total Entries=114 (good: 100%)
Total Bytes=466944 (good: 100%)
cur-mode:LAUNCH
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Transition from INTENT_STARTED to ACTIVITY_LAUNCHED
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
mixer(0xf179d640) throttle end: throttle time(9)
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
uid=1041(audioserver) writer identical 1 line
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[AllocatorImpl] allocate
succeed to allocate buffers: bufferId:5628 name:com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher#0 width*height=(1024*600) layerCount:1 format:1 usage:2816 reservedSize:0
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[AllocatorImpl] allocate
succeed to allocate buffers: bufferId:5633 name:b4a.example/b4a.example.main#0 width*height=(600*1024) layerCount:1 format:1 usage:2304 reservedSize:0
[AllocatorImpl] allocate
succeed to allocate buffers: bufferId:5637 name:b4a.example/b4a.example.main#0 width*height=(1024*600) layerCount:1 format:1 usage:2816 reservedSize:0
[AllocatorImpl] allocate
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[AllocatorImpl] allocate
succeed to allocate buffers: bufferId:5647 name:com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher#0 width*height=(1024*600) layerCount:1 format:1 usage:2816 reservedSize:0
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Power setMode: LAUNCH to: 0
Transition from ACTIVITY_LAUNCHED to ACTIVITY_FINISHED
cur-mode:NORMAL
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
GoogleInputMethodService.onFinishInput():3400
succeed to allocate buffers: bufferId:5655 name:b4a.example/b4a.example.main#0 width*height=(600*1024) layerCount:1 format:1 usage:2304 reservedSize:0
GoogleInputMethodService.onStartInput():1972
[AllocatorImpl] allocate
succeed to allocate buffers: bufferId:5657 name:b4a.example/b4a.example.main#0 width*height=(600*1024) layerCount:1 format:1 usage:2304 reservedSize:0
[AllocatorImpl] allocate
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
/data/misc/iorapd/b4a.example/1/b4a.example.main/compiled_traces/compiled_trace.pb exists
/data/misc/iorapd/b4a.example/1/b4a.example.main/compiled_traces/compiled_trace.pb size is 1615
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
succeed to allocate buffers: bufferId:5661 name:com.android.launcher3/com.android.launcher3.uioverrides.QuickstepLauncher#0 width*height=(1024*600) layerCount:1 format:1 usage:2816 reservedSize:0
oneway function results will be dropped but finished with status OK and parcel size 4
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
uid=1041(audioserver) writer identical 5 lines
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[Surface(name=Task=10)/@0x728cef0 - animation-leash#0] No local sync point found
[Surface(name=Task=1)/@0x9f5e480 - animation-leash#0] No local sync point found
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
uid=1041(audioserver) writer identical 63 lines
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Create MediaDrmBridge with level L3 and origin 419B456946C227EFD8E8646DCBD0C86E
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Since android.hardware.drm@1.0::IDrmFactory/clearkey is not registered, trying to start it as a lazy HAL.
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Since android.hardware.drm@1.0::IDrmFactory/clearkey is not registered, trying to start it as a lazy HAL.
getService: Trying again for android.hardware.drm@1.0::IDrmFactory/clearkey...
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
uid=1041(audioserver) writer identical 7 lines
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Registering HAL: android.hardware.drm@1.3::IDrmFactory with name: clearkey
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Registered android.hardware.drm@1.3::IDrmFactory/clearkey (start delay of 211ms)
Removing namespace from process name android.hardware.drm@1.3-service-lazy.clearkey to drm@1.3-service-lazy.clearkey.
onLastStrongRef automatically unlinking death recipients
found android.hardware.drm@1.0::IDrmFactory clearkey
Registering HAL: android.hardware.drm@1.3::ICryptoFactory with name: clearkey
Since android.hardware.drm@1.0::IDrmFactory/widevine is not registered, trying to start it as a lazy HAL.
Since android.hardware.drm@1.0::IDrmFactory/widevine is not registered, trying to start it as a lazy HAL.
Registered android.hardware.drm@1.3::ICryptoFactory/clearkey (start delay of 221ms)
getService: Trying again for android.hardware.drm@1.0::IDrmFactory/widevine...
Removing namespace from process name android.hardware.drm@1.3-service-lazy.clearkey to drm@1.3-service-lazy.clearkey.
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
uid=1041(audioserver) writer identical 3 lines
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Registering HAL: android.hardware.drm@1.3::IDrmFactory with name: widevine
Registered android.hardware.drm@1.3::IDrmFactory/widevine (start delay of 115ms)
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Removing namespace from process name android.hardware.drm@1.3-service-lazy.widevine to drm@1.3-service-lazy.widevine.
found android.hardware.drm@1.0::IDrmFactory widevine
onLastStrongRef automatically unlinking death recipients
Registering HAL: android.hardware.drm@1.3::ICryptoFactory with name: widevine
Registered android.hardware.drm@1.3::ICryptoFactory/widevine (start delay of 121ms)
Removing namespace from process name android.hardware.drm@1.3-service-lazy.widevine to drm@1.3-service-lazy.widevine.
found android.hardware.drm@1.1::IDrmFactory clearkey
found android.hardware.drm@1.1::IDrmFactory widevine
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
found android.hardware.drm@1.2::IDrmFactory clearkey
found android.hardware.drm@1.2::IDrmFactory widevine
Notifying android.hardware.drm@1.3::IDrmFactory/clearkey they have clients: 1
found android.hardware.drm@1.3::IDrmFactory clearkey
Process has 1 (of 2 available) client(s) in use after notification android.hardware.drm@1.3::IDrmFactory has clients: 1
Notifying android.hardware.drm@1.3::IDrmFactory/widevine they have clients: 1
Process has 1 (of 2 available) client(s) in use after notification android.hardware.drm@1.3::IDrmFactory has clients: 1
found android.hardware.drm@1.3::IDrmFactory widevine
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
found android.hardware.drm@1.0::IDrmFactory clearkey
found android.hardware.drm@1.0::IDrmFactory widevine
found android.hardware.drm@1.1::IDrmFactory clearkey
found android.hardware.drm@1.1::IDrmFactory widevine
found android.hardware.drm@1.2::IDrmFactory clearkey
found android.hardware.drm@1.2::IDrmFactory widevine
found android.hardware.drm@1.3::IDrmFactory clearkey
found android.hardware.drm@1.3::IDrmFactory widevine
[app][com.android.chrome] calling virtual Return<void> wvdrm::hardware::drm::V1_3::widevine::WVDrmFactory::createPlugin(const hidl_array<uint8_t, 16> &, const android::hardware::hidl_string &, android::hardware::drm::V1_3::IDrmFactory::createPlugin_cb)
Instantiating CDM.
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[cdm_engine.cpp(515):QueryStatus] Querying status
[oemcrypto_adapter_dynamic.cpp(696):Initialize] Level 3 Build Info (v15): OEMCrypto Level3 Code 8158 May 8 2019 12:01:38
[(0):] Level3 Library 8158 May 8 2019 12:01:38
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[file_store.cpp(157):Open] File::Open: fopen failed: 2, No such file or directory
[file_store.cpp(157):Open] File::Open: fopen failed: 2, No such file or directory
[oemcrypto_adapter_dynamic.cpp(710):Initialize] L3 Initialized. Trying L1.
[oemcrypto_adapter_dynamic.cpp(722):Initialize] Could not load liboemcrypto.so. Falling back to L3. dlopen failed: library "liboemcrypto.so" not found
[crypto_session.cpp(313):Init] OEMCrypto version (default security level): 15.0
[crypto_session.cpp(322):Init] OEMCrypto version (L3 security level): 15.0
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[cdm_engine.cpp(515):QueryStatus] Querying status
[crypto_session.cpp(714):Open] Opening crypto session: requested_security_level = Default
[usage_table_header.cpp(159):Init] Initializing usage table header: security_level = 3
[device_files.cpp(1106):RetrieveHashedFile] File does not exist: path = /data/vendor/mediadrm/IDM1013/L3/usgtable.bin
[device_files.cpp(974):RetrieveUsageTableInfo] Unable to retrieve usage table file
[file_store.cpp(157):Open] File::Open: fopen failed: 2, No such file or directory
[file_store.cpp(157):Open] File::Open: fopen failed: 2, No such file or directory
[cdm_engine.cpp(112):OpenSession] Opening session
[crypto_session.cpp(714):Open] Opening crypto session: requested_security_level = Default
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[device_files.cpp(1106):RetrieveHashedFile] File does not exist: path = /data/vendor/mediadrm/IDM1013/L3/cert.bin
[device_files.cpp(141):RetrieveCertificate] Unable to retrieve certificate file
[cdm_engine.cpp(893):GetProvisioningRequest] Getting provisioning request
[crypto_session.cpp(714):Open] Opening crypto session: requested_security_level = Default
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
uid=1041(audioserver) writer identical 8 lines
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Provisioning origin ID 419B456946C227EFD8E8646DCBD0C86E
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
Drm event (1,0)
EventListener: No session for event 1.
Create MediaDrmBridge with level L1 and origin 419B456946C227EFD8E8646DCBD0C86E
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[(0):] L3 Terminate.
found android.hardware.drm@1.0::IDrmFactory clearkey
found android.hardware.drm@1.0::IDrmFactory widevine
found android.hardware.drm@1.1::IDrmFactory clearkey
found android.hardware.drm@1.1::IDrmFactory widevine
found android.hardware.drm@1.2::IDrmFactory clearkey
found android.hardware.drm@1.2::IDrmFactory widevine
found android.hardware.drm@1.3::IDrmFactory clearkey
found android.hardware.drm@1.3::IDrmFactory widevine
found android.hardware.drm@1.0::IDrmFactory clearkey
found android.hardware.drm@1.0::IDrmFactory widevine
found android.hardware.drm@1.1::IDrmFactory clearkey
found android.hardware.drm@1.1::IDrmFactory widevine
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
found android.hardware.drm@1.2::IDrmFactory clearkey
found android.hardware.drm@1.2::IDrmFactory widevine
found android.hardware.drm@1.3::IDrmFactory clearkey
found android.hardware.drm@1.3::IDrmFactory widevine
[app][com.android.chrome] calling virtual Return<void> wvdrm::hardware::drm::V1_3::widevine::WVDrmFactory::createPlugin(const hidl_array<uint8_t, 16> &, const android::hardware::hidl_string &, android::hardware::drm::V1_3::IDrmFactory::createPlugin_cb)
Instantiating CDM.
[cdm_engine.cpp(515):QueryStatus] Querying status
[oemcrypto_adapter_dynamic.cpp(696):Initialize] Level 3 Build Info (v15): OEMCrypto Level3 Code 8158 May 8 2019 12:01:38
[(0):] Level3 Library 8158 May 8 2019 12:01:38
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
[oemcrypto_adapter_dynamic.cpp(710):Initialize] L3 Initialized. Trying L1.
[oemcrypto_adapter_dynamic.cpp(722):Initialize] Could not load liboemcrypto.so. Falling back to L3. dlopen failed: library "liboemcrypto.so" not found
[crypto_session.cpp(313):Init] OEMCrypto version (default security level): 15.0
[crypto_session.cpp(322):Init] OEMCrypto version (L3 security level): 15.0
[cdm_engine.cpp(515):QueryStatus] Querying status
App requested L1 security on a non-L1 device.
Security level L1 not supported!
[WARNING:media_drm_origin_id_manager.cc(271)] Failed to provision origin ID
[(0):] L3 Terminate.
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
uid=1041(audioserver) writer identical 26 lines
mode(0),devices(0x2)latform device:OUT_SPK(0x3)
out_standby
oneway function results will be dropped but finished with status OK and parcel size 4
Notifying android.hardware.drm@1.3::IDrmFactory/clearkey they have clients: 0
Notifying android.hardware.drm@1.3::IDrmFactory/widevine they have clients: 0
Process has 0 (of 2 available) client(s) in use after notification android.hardware.drm@1.3::IDrmFactory has clients: 0
Trying to exit HAL. No clients in use for any service in process.
Process has 0 (of 2 available) client(s) in use after notification android.hardware.drm@1.3::IDrmFactory has clients: 0
Trying to exit HAL. No clients in use for any service in process.
onLastStrongRef automatically unlinking death recipients
uid=1000(system) hwservicemanage identical 2 lines
onLastStrongRef automatically unlinking death recipients
Unregistered all clients and exiting
onLastStrongRef automatically unlinking death recipients
Unregistered all clients and exiting
onLastStrongRef automatically unlinking death recipients
sendDevicePropertyChanged 20481
 
Upvote 0

Rubens Jr.

Member
Licensed User
1. Which device are you using?
2. Post a screenshot.
3. Post the logs.
When this hapens (no click button apears) the back key do not respond either. I Press the back key and the app do not close.
 
Upvote 0

Sagenut

Expert
Licensed User
Longtime User
Make sure to have a complete and correct clean install of ALL what is needed to run B4A:
- the IDE
- Java
- Android SDK + Resources
Follow exactly and carefully the steps illustrated here:
B4A Installation
Download all the needed files from the links provided in the steps.
Do not use other external sources.
 
Upvote 0

Rubens Jr.

Member
Licensed User
Ok.
I Formated My PC. Windows 10. None installed.
Installed exactly as in b4a instalation. All works Ok : B4A working good, but ...
Same result. With Starter service appear a blank screen with 'B4A Example' in top of screen and nothing more. The back key do not respond.
If I remove the Starter Service and recompile the example : start ok and Show 'MainPage' in top off screen and the Click button, and the back key close the app as expected.
If I do : Project -> Add new Module -> Service Module and name it Starter .. recompile ... the problem reapears.
I Removed (again) de starter Service, recompile and all ok ...
 
Upvote 0

Sagenut

Expert
Licensed User
Longtime User
It could be something related to the tablet/device software.
Not easy to diagnose.
 
Upvote 0

teddybear

Well-Known Member
Licensed User
I also encountered the similar issue, App is on backgroud after I click BACK-KEY, then I restart it, the screen is a blank ,the title is B4A Example not MainPage. perhaps B4xpages is not compatible with some tablets/TVsets, I will provide some logs for debugging.

1.It is a normal log for operatiing on phone

B4X:
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
** Activity (main) Resume **
** Activity (main) Pause event (activity is not paused). **  'Here I clicked Back KEY'
** Activity (main) Resume **    'I restart the APP'

2.Unnormal log , Activity (main) Resume is not called

B4X:
*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
** Activity (main) Resume **
** Activity (main) Pause event (activity is not paused). ** 'Here Click BACK KEY'
*** Service (starter) Create ***  'Restart APP'

3. I added B4XPage_CloseRequest event (null sub), after clicked BACK-KEY, an exception was thrown

B4X:
*** Service (starter) Create ***
** Service (starter) Start **,
** Activity (main) Create, isFirst = true **
Call B4XPages.GetManager.LogEvents = True to enable logging B4XPages events.
** Activity (main) Resume **
b4xpagesmanager$ResumableSub_HandleCloseRequestresume (java line: 640)
java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.Boolean.booleanValue()' on a null object reference
    at b4a.example.b4xpagesmanager$ResumableSub_HandleCloseRequest.resume(b4xpagesmanager.java:640)
    at anywheresoftware.b4a.BA.checkAndRunWaitForEvent(BA.java:267)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:207)
    at anywheresoftware.b4a.BA.raiseEvent(BA.java:193)
    at anywheresoftware.b4a.keywords.Common$14.run(Common.java:1770)
    at android.os.Handler.handleCallback(Handler.java:751)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:154)
    at android.app.ActivityThread.main(ActivityThread.java:6138)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:893)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:783)

Hope it is a clue for solving the issue
 
Upvote 0

jerry07

Member
Licensed User
Longtime User
Not that I'm expert in B4X but from my experience I would try to create simple project not using B4XPages.
I don't expect this project to behave any different versus B4XPages but this is easy way to quickly eliminate question if this is B4XPages related issue ?
 
Upvote 0

jerry07

Member
Licensed User
Longtime User
This is why I said:
  • 1. Not that I'm expert in B4X
  • 2. I don't expect this project to behave any different versus B4XPages
But in programing I learned to question everything, just because I been proven wrong many times.
Thank you for pointing out "B4XPages have nothing to do with the Starter." I agree with your statement and point taken.

However why removing Starter Service makes B4XPages appear normally? As we just said B4XPages have nothing to do with Starter.
So this is likely device issue with Starter service. Can we test this?
I think we can? Using simple Default Project with Form and Button, right?

If default project test fails too that will prove what we suspect... but just maybe this is one of these extreme edge cases and starter with default app will work on this guy device? Won't that be worth testing?


BTW
LucaMs, I'm big fan of yours and always read your posts as you are one of the most active members here and I think I learned to pick up your sense of humor in this forum.
 
Upvote 0
Cookies are required to use this site. You must accept them to continue using the site. Learn more…