UPDATE 1:
I forgot to mention that I have defined
<string translatable="false" name="config_tvRemoteServicePackage">com.google.android.tv.remote.service</string>
in frameworks/base/core/res/res/values/config.xml overlay and I have file system/etc/permissions/custom-privapp-permissions.xml with content:
<?xml version="1.0" encoding="utf-8"?>
<permissions>
<privapp-permissions package="com.google.android.tv.remote.service">
<permission name="android.permission.ACCESS_COARSE_LOCATION"/>
<permission name="android.permission.BLUETOOTH_PRIVILEGED"/>
<permission name="android.permission.CAPTURE_AUDIO_OUTPUT"/>
<permission name="android.permission.CHANGE_COMPONENT_ENABLED_STATE"/>
<permission name="android.permission.DUMP"/>
<permission name="android.permission.HDMI_CEC"/>
<permission name="android.permission.LOCAL_MAC_ADDRESS"/>
<permission name="android.permission.MODIFY_AUDIO_ROUTING"/>
<permission name="android.permission.READ_EXTERNAL_STORAGE"/>
<permission name="android.permission.READ_LOGS"/>
<permission name="android.permission.TV_VIRTUAL_REMOTE_CONTROLLER"/>
<permission name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<permission name="android.permission.WRITE_SECURE_SETTINGS"/>
</privapp-permissions>
</permissions>
on device.
ORIGINAL ISSUE:
I'm having issues with adding AtvRemoteProviderService package (Android TV Package) to AOSP build. I did found out if I want to include this package to my build I also need com.android.media.tv.remoteprovider and com.android.media.tv.remoteprovider.xml packages.
This configuration as I described above works to extend that I can see my device in Android TV Remote Control app on my phone and I can connect to it. This is point where problem occurs.
Remote app can't communicate with device. From logcat I can see error when box is booting (service starts):
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: unable to openRemoteInputBridge() for virtual-search
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: java.lang.NullPointerException: Attempt to invoke interface method 'void android.media.tv.ITvRemoteServiceInput.openInputBridge(android.os.IBinder, java.lang.String, int, int, int)' on a null object reference
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.android.media.tv.remoteprovider.TvRemoteProvider.openRemoteInputBridge(TvRemoteProvider.java:129)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.google.android.tv.remote.service.ap.<init>(SF:7)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.google.android.tv.remote.service.AtvRemoteProviderService.a(SF:22)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.google.android.tv.remote.service.RemoteService.a(SF:395)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.google.android.tv.remote.service.RemoteService.k(SF:414)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.google.android.tv.remote.service.RemoteService.i(SF:479)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.google.android.tv.remote.service.ah.onServiceConnected(SF:6)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at android.app.LoadedApk$ServiceDispatcher.doConnected(LoadedApk.java:1730)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at android.app.LoadedApk$ServiceDispatcher$RunConnection.run(LoadedApk.java:1762)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at android.os.Handler.handleCallback(Handler.java:873)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at android.os.Handler.dispatchMessage(Handler.java:99)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at android.os.Looper.loop(Looper.java:193)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at android.app.ActivityThread.main(ActivityThread.java:6669)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at java.lang.reflect.Method.invoke(Native Method)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
04-12 17:32:16.947 4549 4549 E AtvRemoteProviderService: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
then when I connect with phone to device:
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: unable to openRemoteInputBridge() for virtual-remote#88817
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: java.lang.NullPointerException: Attempt to invoke interface method 'void android.media.tv.ITvRemoteServiceInput.openInputBridge(android.os.IBinder, java.lang.String, int, int, int)' on a null object reference
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.android.media.tv.remoteprovider.TvRemoteProvider.openRemoteInputBridge(TvRemoteProvider.java:129)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.ap.<init>(SF:7)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.AtvRemoteProviderService.a(SF:22)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.RemoteService.a(SF:395)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.RemoteService.a(SF:266)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.RemoteService.a(SF:450)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.ac.a(SF:278)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.b.a.h.a(SF:73)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.ad.a(SF:26)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.ar.b(SF:28)
04-12 17:33:01.085 4549 5728 E AtvRemoteProviderService: at com.google.android.tv.remote.service.h.b.run(SF:9)
04-12 17:33:01.085 4549 5728 D RemoteService: openInputBridge() remote bridge null
and each virtual press on phone's virtual dpad results in line in log:
04-12 17:33:21.109 4549 5739 E RemoteService: configured successfully but input bridge not initialized
Any ideas?