The progress bar that never completes is a classic symptom of handleBrowseUri returning a promise that never resolves. Looking at your code, I can see a structural issue that would cause exactly this.
Your switch statement calls this.call_function_one() for the tester/selection_one case, then falls through to return the same navigation object regardless of which case matched. There are two problems here:
If call_function_one throws an error or is undefined, the exception prevents the return statement from ever being reached. The caller gets a promise that never resolves - hence the endless progress bar.
The navigation structure returned is the root menu in all cases. When the user taps “Item 1” (URI tester/selection_one), the UI expects a different navigation response for that sub-URI, not the same root listing again.
The standard pattern for handleBrowseUri is to return a different navigation object per URI level. Here is a corrected structure:
Each case returns its own resolved promise with the appropriate navigation for that URI level.
call_function_one() must itself return a libQ.resolve() with a valid navigation object (or whatever response is appropriate for what that function does). If it does not return a resolved promise, you will get the same progress bar symptom.
The default case rejects, which tells the UI the URI is not handled.
If call_function_one is meant to trigger playback rather than return a browsable list, the return value would be different - but it still must return a resolved or rejected promise. What does call_function_one do?