Uninstalling a Hidden Channel

I just installed a channel that is defined as hidden (via a property in the manifest). For reference, here is the channel: https://owner.roku.com/add/blackness

My question is, once a hidden channel is installed on a Roku unit, how does one uninstall it? It does not appear on the home screen, so it can’t be selected there to uninstall. But it does appear in the screensaver list, and in the list of hidden channels (which can be viewed using this sequence):

[Home:3x] [Up:2x] [Left] [Right] [Left] [Right] [Left]

Delete from screen-savers menu with Options (“*”).

If it’s just hidden and not SS though… i think that’s tough predicament, like the “zombie” case

Blackness is a screensaver, not a hidden channel.

-JT

“renojim” wrote:
Blackness is a screensaver, not a hidden channel.
Didn’t it also set the hidden flag in the manifest though? As to not be shown in the lineup. I am very unclear on that, the documentation is lacking. Can you explain?

Nope; no “hidden” flag in the manifest:

title=Blackness
subtitle=Black screensaver
screensaver_title=Blackness
screensaver_private=0
major_version=1
minor_version=0
build_version=1

I don’t know where the OP got the idea that it was a hidden channel. I’ve never seen a channel flagged as hidden anywhere.

Screensavers never show up anywhere but under “Screensavers” as far as I know.

-JT

JT…my apologies. I wrongly assumed the channel had a hidden flag in the manifest because it does not appear on the homescreen (and that is what the hidden flag is for). May I ask how you managed to make it “hidden” without setting this flag? Is it just because the code lacks a RunUserInterface and Main function?

On a related note, would you be able to share what the “app id” is for this channel? I would like to be able to launch it via an external control call so that I can have a simple button on my phone which puts my TV in this “off” mode. But I can’t seem to find the app id because the app is not listed when I hit the page at http://192.168.0.159:8060/query/apps.

No apology necessary.

Just stumbled upon this. If there’s a “query apps”, there must be a “query screensavers”. :mrgreen:
Try http://192.168.0.159:8060/query/screensavers

The app id is 3696.

I think it’s the combination of the “screensaver” entries in the manifest and the lack of a RunUserInterface (or Main) that differentiate between an app and a screensaver, but I’m not positive. I have plenty of channels that have private screensavers, so they have the both the screensaver entries and a RunUserInterface/Main and they don’t show up in the “query screensavers”. There’s plenty of combinations of manifest entries and RunXxx (RunUserInterface/RunScreensaver) routines in the source code that I’ve never tried.

I don’t think I’ve ever tried to launch a screensaver directly. Seems like it should work. That would probably come in handy when developing one (although I suppose in that case you’d just be launching the “dev” id).

-JT

“renojim” wrote:
Just stumbled upon this. If there’s a “query apps”, there must be a “query screensavers”. :mrgreen:
Try http://192.168.0.159:8060/query/screensavers
wow.
[upload|Bzoa+IlyJnO1JSmNfBg6gg==]

I think it’s the combination of the “screensaver” entries in the manifest and the lack of a RunUserInterface (or Main) that differentiate between an app and a screensaver, but I’m not positive. I have plenty of channels that have private screensavers, so they have the both the screensaver entries and a RunUserInterface/Main and they don’t show up in the “query screensavers”. There’s plenty of combinations of manifest entries and RunXxx (RunUserInterface/RunScreensaver) routines in the source code that I’ve never tried.
I wish i knew the answer to that too (maybe it takes screensaver_private into account instead of RunUserInterface?) but considering the tEtanic effort it took to even get a doco page on screensavers, i’ll keep my fingers uncrossed.

Btw, in my /query/screensavers i notice , no name listed. It also shows as an empty line in Settings / Screensaver list. What could it its issue, maybe lacking screensaver_title manifestation? That’s CLOC (v2.2 2014-12-03) i believe.

Brilliant find JT. How you even thought to try that url is amazing.

So I tried launching your blackness screensaver via the External CP. Looks like it doesn’t work, because there is no Main() function. I think it would only work if you had something like this in the code:


Sub Main() 
    RunScreenSaver()
End Sub

However, if you did that, the channel would then appear on the home screen, unless you set the hidden flag in the manifest file.

Anyway, I just threw my own channel together to test all this. This is how I set the screen to black. Is that the same method you used?


s=CreateObject("roScreen")
bm=CreateObject("roBitmap", {width:1280, height: 720, alphaenable: false} )
bm.Clear(&h000000FF)  
s.DrawObject(0,0, bm)

I also noticed the following screensaver on my unit (which is a Hisense TV):

Power Saver

Trying to launch that app id via the External CP results in the same thing as when I try to run yours. So I guess it must have no Main() function either. That is a bummer, because that screensaver actually makes the backlight truly go dark, which is ultimately what I think we all want to accomplish.

“renojim” wrote:

I think it’s the combination of the “screensaver” entries in the manifest and the lack of a RunUserInterface (or Main) that differentiate between an app and a screensaver, but I’m not positive.

I thought the screensaver documentation was pretty clear on this (at least it was intended to be). Please let me know what is unclear about this description and I’ll fix it.

A screensaver is just a channel which has a function named RunScreenSaver. It may or may not also have a RunUserInterface (or Main) function like normal channels. If it does not, it is a “pure” screensaver and appears only in the list of screensavers and not on the Roku Home screen. If it has a RunUserInterface (or Main) function in addition to RunScreenSaver, then it will appear both in the list of screensavers and on the Home screen.

I’m pretty sure you can’t launch a screensaver via ECP. ECP launch calls the app’s Main function. You could, I suppose, write a normal channel that blanks the screen when it is run, and that would be launchable via ECP.

–Mark

Right Mark…I think just adding a Main() function which simply points to the RunScreenSaver() function is all that is needed to make the Screensaver externally callable.

“roquoonewbie” wrote:
Anyway, I just threw my own channel together to test all this. This is how I set the screen to black. Is that the same method you used? …
I image this works as well:

scr = CreateObject("roScreen")
scr.Clear(0) 'suspenders - just in case

And back to my question in the original post. If a channel is defined as hidden via the manifest, how do you ever uninstall it? Or is it stuck on the box permanently with no way to ever remove it?

“RokuMarkn” wrote:
I thought the screensaver documentation was pretty clear on this (at least it was intended to be). Please let me know what is unclear about this description and I’ll fix it.

A screensaver is just a channel which has a function named RunScreenSaver. It may or may not also have a RunUserInterface (or Main) function like normal channels. If it does not, it is a “pure” screensaver and appears only in the list of screensavers and not on the Roku Home screen. If it has a RunUserInterface (or Main) function in addition to RunScreenSaver, then it will appear both in the list of screensavers and on the Home screen.
On careful read, that part is quite clear! It lays the ground rules, i’d say.
The exceptions to that are not as clear though. I.e. when there is a “hidden” screensaver and/or a “hidden” channel. The “Private screensavers” section IMHO will benefit by mentioning how exactly can a SS be marked as private.

“RokuMarkn” wrote:
I thought the screensaver documentation was pretty clear on this (at least it was intended to be). Please let me know what is unclear about this description and I’ll fix it.
C’mon Mark, you know only EnTerr reads the documentation. :laughing: I wasn’t attempting to comment on the quality, or lack thereof, of the documentation on screensavers. Just giving my observations/remembrances. Sorry if I offended any Roku folks.

-JT

“roquoonewbie” wrote:
Anyway, I just threw my own channel together to test all this. This is how I set the screen to black. Is that the same method you used?


s=CreateObject("roScreen")
bm=CreateObject("roBitmap", {width:1280, height: 720, alphaenable: false} )
bm.Clear(&h000000FF)  
s.DrawObject(0,0, bm)

I use an image canvas. Here’s the whole RunScreenSaver:

Sub RunScreenSaver()
    color = RegGet("color","BlackSS")
    if color = invalid then color = "Black"

    ss = CreateObject("roImageCanvas")
    if color = "Black" then
        hexcolor = "#FF000000"
    else
        hexcolor = "#FF0000FF"
    end if
    ss.SetLayer(0, {Color:hexcolor, CompositionMode:"Source"})
    ss.Show()
    while true
        sleep(1000)
    end while
End Sub

-JT

“EnTerr” wrote:
Btw, in my /query/screensavers i notice
That’s weird. That is CLOC, but the title in the manifest is “LED Time & Weather” (don’t ask me why it’s not CLOC). In my screensaver query and in settings/screensavers on my Roku 3 it shows up properly. What device/firmware do you have?

By the way, I just tried the query/screensavers on my N1000 and it doesn’t work at all. I guess this was added to >3.x firmware.

-JT

“renojim” wrote:

“EnTerr” wrote:
Btw, in my /query/screensavers i notice
That’s weird. That is CLOC, but the title in the manifest is “LED Time & Weather” (don’t ask me why it’s not CLOC). In my screensaver query and in settings/screensavers on my Roku 3 it shows up properly. What device/firmware do you have?
It is beyond weird even - since after restart on a RokuTV i see not CLOC but another screensaver - 55545 (“Default screensaver”) lose its name and show an empty line in Settings/Screensavers - and no name in /query/screensavers.

I had a theory it must be the “&” in the “LED Time & Weather” name but the problem never happened for “LED Time & Weather (p)” channel you recommended separately. I don’t think this has anything to do with firmware versions since it has been happening for many months (possibly years).

Okay, i think i figured a sequence to reproduce:

  1. Restart the player (i do it from Settings > System [> Power] > System Restart). Do this first!

  2. Wait for the player to start. Continue before the screensaver kicks in.

  3. Check /query/screensavers, look for an entry with no name

  4. Using the remote, under Settings > Screensaver check the list, there should be an empty line - that’s the no-name SS

If you do “Preview” or “Custom settings” on the unnamed SS, that tends to fix the issue observed in (3) and (4). Which is the SS set as active does not seem to make a difference on which SS loses name. On a #3100 model i have 11 SS and 1861 has no name; on a #5000 the SS list has 12 entries (has the bonus “Power Saver”) and the invisible name is 55545 - so maybe the number of SS has something to do.

“renojim” wrote:

C’mon Mark, you know only EnTerr reads the documentation. :laughing: I wasn’t attempting to comment on the quality, or lack thereof, of the documentation on screensavers. Just giving my observations/remembrances. Sorry if I offended any Roku folks.

No offense taken. I was a little puzzled when EnTerr himself said he “wished he knew” the answer, which I thought was clearly documented. I’ll add some text to clarify the corner cases.

–Mark

“RokuMarkn” wrote:

“renojim” wrote:

C’mon Mark, you know only EnTerr reads the documentation. :laughing: I wasn’t attempting to comment on the quality, or lack thereof, of the documentation on screensavers. Just giving my observations/remembrances. Sorry if I offended any Roku folks.
No offense taken. I was a little puzzled when EnTerr himself said he “wished he knew” the answer, which I thought was clearly documented. I’ll add some text to clarify the corner cases.
I, errr… “mis-spoke” on that one, sorry! I agreed in followup msg, documentation is clear on what’s the criteria to recognize a screen-saver entry. I was rather thinking about the manifest attribute “hidden” and its relation to the screensavers, since that was the topic subject. Btw, please - anybody is welcome to tell me go RTFM when there is a “TFM”. I like having docs because my memory sucks (as demonstrated), unlike the endless memory of others :slightly_smiling_face:

@RokuMarkn - i like the way you write documentation, it’s concise! Reminds me of a refresher course on compilers i took @Coursera a few years ago, by Alex Aiken. Need to read carefully, sometimes re-read scrutinizing the assignments text. But you know when your read it you can “take it to the bank”, there is no imprecise language and sloppiness. Alas not all documentation is written by the same person and is not as exact (i even have a “least favorite” writer to watch out for).