itvlab / tvapprepo Goto Github PK
View Code? Open in Web Editor NEWAn app repository of Android TV apps
License: Apache License 2.0
An app repository of Android TV apps
License: Apache License 2.0
What if I could generate shortcuts with a specific Intent to an activity in this app. This Intent would load a specific list of apps, much like a folder.
I don't know if this is the best place to get it from, but the latest version is available here:
https://download.apkpure.com/b/apk/Y29tLm1vdG9ncC52aWRlb3Bhc3NfNjhfZGZjNzFkMDQ?_fn=VmlkZW9QYXNzX3YxLjQuMTRfYXBrcHVyZS5jb20uYXBr&k=5349bce3d78c7eebd42cd7999ba8874458c5bfed&as=ade115402ab431545bc630c2aac9a6ca58c31d65&_p=Y29tLm1vdG9ncC52aWRlb3Bhc3M%3D&c=1%7CENTERTAINMENT
Apps like GPhotos have several APK variants for different device types. These should be supported. Probably have a JSON structure / key:value set. When this is found, we open up a dialog for users to pick the best one.
URL to APK: https://apkpure.com/optimum/com.optimum.unity.mobile
Banner(If Submitted):
Hi,
when I try to create a shortcut for FX File Explorer, I get Build failed.
Thanks
Requesting full file system access may seem scary, and is unnecessary. We should be using the scoped directory system to go Downloads
only.
I'm using your software on KIII PRO Android 7.1.2 by supercelerom and your app just doenst work when I try to use on DTV APP.
Please could you fix it?
DTV APP:
DTV_2017-07-25.zip
We know the installed version and we know our latest version. Compare each and offer updates if possible.
Crash log
Fatal Exception: java.lang.NullPointerException: Attempt to read from field 'java.lang.String android.content.pm.PackageInfo.packageName' on a null object reference
at news.androidtv.tvapprepo.utils.PackageInstallerUtils.uninstallApp(Unknown Source)
at news.androidtv.tvapprepo.fragments.AppDetailsFragment$ItemViewClickedListener.onItemClicked(Unknown Source)
at news.androidtv.tvapprepo.fragments.AppDetailsFragment$ItemViewClickedListener.onItemClicked(Unknown Source)
at android.support.v17.leanback.widget.DetailsOverviewRowPresenter$ActionsItemBridgeAdapter$1.onClick(DetailsOverviewRowPresenter.java:90)
at android.view.View.performClick(View.java:5198)
at android.view.View.onKeyUp(View.java:9879)
at android.widget.TextView.onKeyUp(TextView.java:6251)
at android.view.KeyEvent.dispatch(KeyEvent.java:2664)
at android.view.View.dispatchKeyEvent(View.java:9234)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.support.v17.leanback.widget.BaseGridView.dispatchKeyEvent(BaseGridView.java:843)
at android.support.v17.leanback.widget.HorizontalGridView.dispatchKeyEvent(HorizontalGridView.java:50)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.support.v17.leanback.widget.BaseGridView.dispatchKeyEvent(BaseGridView.java:843)
at android.support.v17.leanback.widget.VerticalGridView.dispatchKeyEvent(VerticalGridView.java:40)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at android.view.ViewGroup.dispatchKeyEvent(ViewGroup.java:1640)
at com.android.internal.policy.PhoneWindow$DecorView.superDispatchKeyEvent(PhoneWindow.java:2395)
at com.android.internal.policy.PhoneWindow.superDispatchKeyEvent(PhoneWindow.java:1727)
at android.app.Activity.dispatchKeyEvent(Activity.java:2725)
at com.android.internal.policy.PhoneWindow$DecorView.dispatchKeyEvent(PhoneWindow.java:2310)
at android.view.ViewRootImpl$ViewPostImeInputStage.processKeyEvent(ViewRootImpl.java:4273)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:4235)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3783)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3836)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3802)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3931)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3810)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:3988)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3783)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3836)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3802)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:3810)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:3783)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:3836)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:3802)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:3964)
at android.view.ViewRootImpl$ImeInputStage.onFinishedInputEvent(ViewRootImpl.java:4125)
at android.view.inputmethod.InputMethodManager$PendingEvent.run(InputMethodManager.java:2264)
at android.view.inputmethod.InputMethodManager.invokeFinishedInputEventCallback(InputMethodManager.java:1885)
at android.view.inputmethod.InputMethodManager.finishedInputEvent(InputMethodManager.java:1876)
at android.view.inputmethod.InputMethodManager$ImeInputEventSender.onInputEventFinished(InputMethodManager.java:2241)
at android.view.InputEventSender.dispatchInputEventFinished(InputEventSender.java:141)
at android.os.MessageQueue.nativePollOnce(MessageQueue.java)
at android.os.MessageQueue.next(MessageQueue.java:323)
at android.os.Looper.loop(Looper.java:135)
at android.app.ActivityThread.main(ActivityThread.java:5482)
at java.lang.reflect.Method.invoke(Method.java)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
I have Xiaomi Mi Box Android 6.0
I have installed your app from the play Store. It seems to be just what I was looking for. But I have a problem. The problem I am having it the app crashes every time I try to create a shortcut
URL to APK: edewde
Banner(If Submitted):
What if I could generate shortcut apps with banners that come from third-party apps, similar to icon packs?
If there is no set banner, the launcher can still use the app icon and app name to build a simple banner. Support that type. If no banner is found, we remove that line entirely.
I attempted to download the TV App Repo "Open Community" version 1.1.3 .apk file at:-
https://github.com/ITVlab/TvAppRepo/releases/download/1.1.3/app-opencommunity-release.apk
but what I appear to get instead is an old version that identifies as 1.0.6.
Play Store version of 1.1.3 appears to be OK.
Could we please fix the link and/or file?
StephenH
Use product flavors to create a version for the Play Store that only creates shortcuts (no separate store) and no internal updates.
Then keep an unmodified version for power users
Installed the OpenCommunity APK on a 2017 Shield TV with the latest 5.0.1 update and the application crashes immediately.
01-19 22:19:06.089 25012 25012 W System : ClassLoader referenced unknown path: /data/app/news.androidtv.tvapprepo-1/lib/arm64
01-19 22:19:06.103 25012 25012 D FirebaseApp: com.google.firebase.auth.FirebaseAuth is not linked. Skipping initialization.
01-19 22:19:06.107 25012 25012 D FirebaseApp: com.google.firebase.crash.FirebaseCrash is not linked. Skipping initialization.
01-19 22:19:06.111 25012 25012 I FA : App measurement is starting up, version: 10084
01-19 22:19:06.111 25012 25012 I FA : To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
01-19 22:19:06.115 25012 25012 I FA : To enable faster debug mode event logging run:
01-19 22:19:06.115 25012 25012 I FA : adb shell setprop debug.firebase.analytics.app news.androidtv.tvapprepo
01-19 22:19:06.122 25012 25012 I FirebaseInitProvider: FirebaseApp initialization successful
01-19 22:19:06.176 25012 25012 I CrashlyticsCore: Initializing Crashlytics 2.3.14.151
01-19 22:19:06.185 25012 25012 I MainFragment: onCreate
01-19 22:19:06.198 25012 25012 D MainFragment: Get RepoDatabase instance
01-19 22:19:06.206 25012 25042 D NetworkSecurityConfig: No Network Security Config specified, using platform default
01-19 22:19:06.209 25012 25012 I DynamiteModule: Considering local module com.google.android.gms.firebase_database:4 and remote module com.google.android.gms.firebase_database:4
01-19 22:19:06.209 25012 25012 I DynamiteModule: Selected remote version of com.google.android.gms.firebase_database, version >= 4
01-19 22:19:06.214 25012 25012 W System : ClassLoader referenced unknown path: /data/user/0/com.google.android.gms/app_chimera/m/00000006/n/arm64-v8a
01-19 22:19:06.223 25012 25012 D d : Create new instance
01-19 22:19:06.269 25012 25012 D MainFragment: [ResolveInfo{e523280 com.nvidia.shield.welcome/.WebViewer m=0x108000}, ResolveInfo{362b0b9 mobi.mgeek.TunnyBrowser/.BrowserActivity m=0x108000}, ResolveInfo{af3ccfe com.android.documentsui/.LauncherActivity m=0x108000}, ResolveInfo{cb7dc5f com.nvidia.blakepairing/.BlakePairingLoadingActivity m=0x108000}, ResolveInfo{fe7f6ac com.nvidia.inputviewer/.MainActivity m=0x108000}, ResolveInfo{7f49f75 com.plexapp.mediaserver.smb/com.plexapp.mediaserver.MainActivity m=0x108000}]
01-19 22:19:06.296 25012 25012 D MainFragment: Get RepoDatabase instance
01-19 22:19:06.344 25012 25012 D MainFragment: [ResolveInfo{b809672 com.nvidia.shield.welcome/.WebViewer m=0x108000}, ResolveInfo{1c2fac3 mobi.mgeek.TunnyBrowser/.BrowserActivity m=0x108000}, ResolveInfo{e3e5f40 com.android.documentsui/.LauncherActivity m=0x108000}, ResolveInfo{d143e79 com.nvidia.blakepairing/.BlakePairingLoadingActivity m=0x108000}, ResolveInfo{73da7be com.nvidia.inputviewer/.MainActivity m=0x108000}, ResolveInfo{950801f com.plexapp.mediaserver.smb/com.plexapp.mediaserver.MainActivity m=0x108000}]
01-19 22:19:06.368 25012 25012 D phs:ipc-binder-client: phs: RegisterClient(): transact returned 0, NO_ERROR=0
01-19 22:19:06.368 25012 25012 D phs:ipc-binder-client: phs: RegisterClient() timeout is 5000
01-19 22:19:06.371 759 774 D RSMouse : mFeatureEnabled=true mPackageEnabled=false
01-19 22:19:06.412 25012 25068 I OpenGLRenderer: Initialized EGL, version 1.4
01-19 22:19:06.412 25012 25068 D OpenGLRenderer: Swap behavior 2
01-19 22:19:06.417 25012 25012 D e : ResolveInfo{b809672 com.nvidia.shield.welcome/.WebViewer m=0x108000}
01-19 22:19:06.417 25012 25012 D e : com.nvidia.shield.welcome.WebViewer
01-19 22:19:06.417 25012 25012 D e : Device Help
01-19 22:19:06.420 25012 25012 D e : ResolveInfo{1c2fac3 mobi.mgeek.TunnyBrowser/.BrowserActivity m=0x108000}
01-19 22:19:06.420 25012 25012 D e : mobi.mgeek.TunnyBrowser.BrowserActivity
01-19 22:19:06.420 25012 25012 D e : Dolphin
01-19 22:19:06.422 25012 25012 D e : ResolveInfo{e3e5f40 com.android.documentsui/.LauncherActivity m=0x108000}
01-19 22:19:06.422 25012 25012 D e : com.android.documentsui.LauncherActivity
01-19 22:19:06.422 25012 25012 D e : Documents
01-19 22:19:06.425 25012 25012 D e : ResolveInfo{d143e79 com.nvidia.blakepairing/.BlakePairingLoadingActivity m=0x108000}
01-19 22:19:06.425 25012 25012 D e : com.nvidia.blakepairing.BlakePairingLoadingActivity
01-19 22:19:06.425 25012 25012 D e : SHIELD Controller
01-19 22:19:06.428 25012 25012 D e : ResolveInfo{73da7be com.nvidia.inputviewer/.MainActivity m=0x108000}
01-19 22:19:06.428 25012 25012 D e : com.nvidia.inputviewer.MainActivity
01-19 22:19:06.428 25012 25012 D e : Input Viewer
01-19 22:19:06.431 25012 25012 D e : ResolveInfo{950801f com.plexapp.mediaserver.smb/com.plexapp.mediaserver.MainActivity m=0x108000}
01-19 22:19:06.431 25012 25012 D e : com.plexapp.mediaserver.MainActivity
01-19 22:19:06.431 25012 25012 D e : Plex Media Server
01-19 22:19:06.566 693 1416 I WindowManager: Destroying surface Surface(name=com.google.android.leanbacklauncher/com.google.android.leanbacklauncher.MainActivity) called by com.android.server.wm.WindowStateAnimator.destroySurface:2016 com.android.server.wm.WindowStateAnimator.destroySurfaceLocked:881 com.android.server.wm.WindowState.destroyOrSaveSurface:2087 com.android.server.wm.WindowManagerService.tryStartExitingAnimation:3058 com.android.server.wm.WindowManagerService.relayoutWindow:2938 com.android.server.wm.Session.relayout:216 android.view.IWindowSession$Stub.onTransact:286 com.android.server.wm.Session.onTransact:137
01-19 22:19:06.664 693 713 I ActivityManager: Displayed news.androidtv.tvapprepo/.activities.MainActivity: +606ms
01-19 22:19:06.671 1568 1568 D ViewRootImpl[MainActivity]: changeCanvasOpacity: opaque=false
01-19 22:19:06.672 1568 1568 D ViewRootImpl[MainActivity]: changeCanvasOpacity: opaque=false
01-19 22:19:06.754 25012 25012 D AndroidRuntime: Shutting down VM
01-19 22:19:06.779 25012 25012 E AndroidRuntime: FATAL EXCEPTION: main
01-19 22:19:06.779 25012 25012 E AndroidRuntime: Process: news.androidtv.tvapprepo, PID: 25012
01-19 22:19:06.779 25012 25012 E AndroidRuntime: com.google.firebase.database.c: No properties to serialize found on class news.androidtv.tvapprepo.b.a
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.lk$a.<init>(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.lk.a(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.lk.e(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.lk.b(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.lk.a(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.firebase.database.a.a(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at news.androidtv.tvapprepo.b.d$1.a(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.hy.a(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.iz.b(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.google.android.gms.b.jd$1.run(Unknown Source)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at android.os.Handler.handleCallback(Handler.java:751)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at android.os.Handler.dispatchMessage(Handler.java:95)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at android.os.Looper.loop(Looper.java:154)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at android.app.ActivityThread.main(ActivityThread.java:6120)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at java.lang.reflect.Method.invoke(Native Method)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:865)
01-19 22:19:06.779 25012 25012 E AndroidRuntime: at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:755)
01-19 22:19:06.780 693 1529 W ActivityManager: Force finishing activity news.androidtv.tvapprepo/.activities.MainActivity```
Using metadata from apps, create a Live Channel that can display YouTube video trailers for the apps (assuming these videos exist). The app link would be an install card which would open up the app to that app's details page.
This would need each app to have some sort of videoUrl
link.
The app link can receive data stored in the InternalProviderData
for the program.
The Live Channel would need to be able to play YouTube videos
From Firebase I want to be able to obtain a list of APKs which need to be generated. Then my Python script will generate them. Then I upload these APKs.
URL to APK: yes
Banner(If Submitted): https://androidtv.news/download-tv-app-repo/
On Nougat, there's a weird bug where you can't install an app through an intent right after you download it. Like what TinyDL does, add a row for downloaded APK files so that users can at least see their files and pick one to download.
Pulling down the repo and then running on a 7.0 emulator produces this error
FATAL EXCEPTION: main Process: news.androidtv.tvapprepo, PID: 4377
java.lang.RuntimeException: Unable to start activity ComponentInfo{news.androidtv.tvapprepo/news.androidtv.tvapprepo.activities.MainActivity}: java.lang.NullPointerException: Attempt to invoke interface method 'boolean java.util.List.add(java.lang.Object)' on a null object reference
Which automatically closes the app upon launch
Using a Python script, copy from a base project, change some resource files for package name and banner, and then publish an APK using gradle tools.
Each apk datum should not contain a leanback shortcut property. The shortcut apk file does not change per-version. Instead, there should be another main leaf with something called 'leanbackShortcuts'. If that value is present based on the package name, then it downloads the shortcut.
If the package name is not there, we don't download it.
The value refers to the download URL from the apk uploaded to Firebase.
URL to APK: https://www.apkmirror.com/apk/gameloft/asphalt-xtreme/asphalt-xtreme-1-0-8a-release/asphalt-xtreme-1-0-8a-android-apk-download/
Banner(If Submitted):
URL to APK: http://tinyurl.com/grfr7m9
Banner(If Submitted): HBOGO
URL to APK: URL
Banner(If Submitted):
Starting a download works as intended, but then multiple install dialogs will appear for the app which is not intended.
With our video data, allow users to quickly open up a video player to watch the video.
Related to #8.
Some handheld apps force vertical orientation preventing a correct visualisation on TV, adding an option to force landscape orientation would enhance UX on TV.
If the banner or icon is not a PNG, issue an error and stop the process. This is causing the build process to fail down the line because I'm downloading a JPG but saying it's a PNG.
Come up with some assets:
For each of your apps, do we have a shortcut and you don't have it installed? If so, make this option present so the user can install it.
Can Firebase Cloud Messages be used?
Right now read = true
always because I can't figure out how to get the right permissions. This will require re-reading the docs
URL to APK: https://www.apk4fun.com/apps/co.liquidsky/
Banner(If Submitted):
URL to APK: https://play.google.com/store/apps/details?id=org.zwanoo.android.speedtest
Banner(If Submitted):
URL to APK: hyueuuu
Banner(If Submitted): tuxute5au
Please support Sling Player 3.0.9 on Android TV, preferably the FireTV version here:
https://www.dropbox.com/s/t1024yzl5yws3v4/SlingPlayer_3.0.9.apk?dl=0
Allow the most recently downloaded APKs to be present first for quick access
I'm not sure but I've tried creating shortcuts for non English apps and it keeps failing and get a build failed error. (Chinese and Korean characters for app name)
Is this due to language restrictions? Or the app isn't supported.
Thanks
Abstract some of the download mechanics
Use Palette to theme app cards and each app's page to make each one more colorful
What if I could read the launcher shortcuts from an XML file or dynamically on Android 7.1+ devices and make it easy to put those Intents into a shortcut on the homescreen?
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.