2

I have a problem with the keyboard/softinput in my Android Automotive application. I am using the SearchTemplate, and when I click in the search field after typing some letters, the app crashes. It happens if I click the magnifier-icon, or the text-field, but not the x-button (which empties the field). This only happens if I have started typing some letters in the search field. If the search field is empty and I click it, the only thing that happens is that it is focused.

This is the error message:

D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc VFE...... .F...... 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
E/CarApp.Act: Connection lost
    android.os.DeadObjectException
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:571)
        at androidx.car.app.activity.renderer.IRendererCallback$Stub$Proxy.onCreateInputConnection(IRendererCallback.java:297)
        at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$1(BaseCarAppActivity.java:178)
        at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda6.invoke(Unknown Source:4)
        at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:116)
        at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176)
        at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4)
        at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160)
        at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928)
        at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858)
        at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210)
        at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213)
        at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7870)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
E/CarApp.Act: Remote exception (host render service)
    android.os.DeadObjectException
        at android.os.BinderProxy.transactNative(Native Method)
        at android.os.BinderProxy.transact(BinderProxy.java:571)
        at androidx.car.app.activity.renderer.surface.ISurfaceListener$Stub$Proxy.onSurfaceDestroyed(ISurfaceListener.java:181)
        at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.lambda$notifySurfaceDestroyed$2$androidx-car-app-activity-renderer-surface-SurfaceHolderListener(SurfaceHolderListener.java:103)
        at androidx.car.app.activity.renderer.surface.SurfaceHolderListener$$ExternalSyntheticLambda1.invoke(Unknown Source:4)
        at androidx.car.app.activity.ServiceDispatcher.lambda$dispatchNoFail$1(ServiceDispatcher.java:90)
        at androidx.car.app.activity.ServiceDispatcher$$ExternalSyntheticLambda1.invoke(Unknown Source:2)
        at androidx.car.app.activity.ServiceDispatcher.fetchNoFail(ServiceDispatcher.java:153)
        at androidx.car.app.activity.ServiceDispatcher.dispatchNoFail(ServiceDispatcher.java:89)
        at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.notifySurfaceDestroyed(SurfaceHolderListener.java:102)
        at androidx.car.app.activity.renderer.surface.SurfaceHolderListener.surfaceDestroyed(SurfaceHolderListener.java:78)
        at android.view.SurfaceView.notifySurfaceDestroyed(SurfaceView.java:1981)
        at android.view.SurfaceView.updateSurface(SurfaceView.java:1157)
        at android.view.SurfaceView.setVisibility(SurfaceView.java:345)
        at androidx.car.app.activity.BaseCarAppActivity.lambda$onStateChanged$3$androidx-car-app-activity-BaseCarAppActivity(BaseCarAppActivity.java:399)
        at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda3.run(Unknown Source:4)
        at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39)
        at androidx.car.app.activity.BaseCarAppActivity.onStateChanged(BaseCarAppActivity.java:385)
        at androidx.car.app.activity.BaseCarAppActivity.$r8$lambda$dw3rK9QfgsUWuk2bAICsaK01RZs(Unknown Source:0)
        at androidx.car.app.activity.BaseCarAppActivity$$ExternalSyntheticLambda5.onChanged(Unknown Source:4)
        at androidx.lifecycle.LiveData.considerNotify(LiveData.java:133)
        at androidx.lifecycle.LiveData.dispatchingValue(LiveData.java:151)
        at androidx.lifecycle.LiveData.setValue(LiveData.java:309)
        at androidx.lifecycle.MutableLiveData.setValue(MutableLiveData.java:50)
        at androidx.car.app.activity.CarAppViewModel.lambda$onError$0$androidx-car-app-activity-CarAppViewModel(CarAppViewModel.java:185)
        at androidx.car.app.activity.CarAppViewModel$$ExternalSyntheticLambda2.run(Unknown Source:4)
        at androidx.car.app.utils.ThreadUtils.runOnMain(ThreadUtils.java:39)
        at androidx.car.app.activity.CarAppViewModel.onError(CarAppViewModel.java:177)
        at androidx.car.app.activity.ServiceDispatcher.fetch(ServiceDispatcher.java:119)
        at androidx.car.app.activity.BaseCarAppActivity$2.lambda$registerRendererCallback$2$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:176)
        at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda4.onCreateInputConnection(Unknown Source:4)
        at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onCreateInputConnection(TemplateSurfaceView.java:160)
        at android.view.inputmethod.InputMethodManager.startInputInner(InputMethodManager.java:1928)
        at android.view.inputmethod.InputMethodManager.restartInput(InputMethodManager.java:1858)
        at androidx.car.app.activity.renderer.surface.TemplateSurfaceView.onStartInput(TemplateSurfaceView.java:210)
        at androidx.car.app.activity.BaseCarAppActivity$2.lambda$onStartInput$7$androidx-car-app-activity-BaseCarAppActivity$2(BaseCarAppActivity.java:213)
        at androidx.car.app.activity.BaseCarAppActivity$2$$ExternalSyntheticLambda8.run(Unknown Source:2)
        at android.os.Handler.handleCallback(Handler.java:938)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loopOnce(Looper.java:201)
        at android.os.Looper.loop(Looper.java:288)
        at android.app.ActivityThread.main(ActivityThread.java:7870)
E/CarApp.Act:     at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:548)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1003)
I/CarApp.Act: Unbinding from ComponentInfo
E/CarApp.Act: InputConnectionListener has not been received yet. Canceling the input
D/InputMethodManager: showSoftInput() view=androidx.car.app.activity.renderer.surface.TemplateSurfaceView{f2a6fbc GFE...... ......I. 0,0-1024,768 #7f0900ae app:id/template_view_surface aid=1073741824} flags=0 reason=SHOW_SOFT_INPUT
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: getTextAfterCursor on inactive InputConnection
D/EGL_emulation: app_time_stats: avg=73260.20ms min=85.08ms max=219285.45ms count=3
W/IInputConnectionWrapper: getSelectedText on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: beginBatchEdit on inactive InputConnection
W/IInputConnectionWrapper: getTextBeforeCursor on inactive InputConnection
W/IInputConnectionWrapper: endBatchEdit on inactive InputConnection

Code in onGetTemplate() function:

 return SearchTemplate.Builder(
            object : SearchCallback {
                override fun onSearchTextChanged(searchText: String) {
                    if(searchText.isNotEmpty()){
                        searchCompleted()
                        getAddressFromName(searchText)
                        doSearch(searchText)
                    }
                }
                override fun onSearchSubmitted(searchTerm: String) {
                    mIsSearchComplete = true
                    searchCompleted()
                    doSearch(searchTerm)
                    
                }
            })
            .setShowKeyboardByDefault(true)
            .setItemList(mItemList!!)
            .build()

doSearch function:

    fun doSearch(searchText: String) {
        val builder = ItemList.Builder()
        places.clear()

        if (searchText.isEmpty()) {
            mItemList = withNoResults(builder)?.build();
        }
        if (!isInternetConnection) {
            CarToast.makeText(
                carContext,
                "Ingen internett tilgang",
                CarToast.LENGTH_LONG
            )
                .show()
            return
        }

        val destinations = getAddressFromName(searchText)

        if(destinations.isNotEmpty()){
            destinations.forEach{
                val addressLine = it.getAddressLine(0)
                builder.addItem(
                    Row.Builder()
                        .setTitle(addressLine)
                        .setOnClickListener { onClickSearch(it) }
                        .build())
            }
            mItemList = builder.build()
            invalidate()
            return
        }
    }

I have tried to remove the body of the onSearchTextChanged and onSearchSubmitted functions, to see if there is anything there that makes the app crash, but the app still crashes.

This is what the app looks like when it happens:

Typing one letter in the searchfield:

Typing one letter in the searchfield

Then clicking the search field, and the app crashes:

Then clicking the search field, and the app crashes

I have tried to debug the issue and google it, but I can't find anything.

Ank
  • 71
  • 6

0 Answers0