The best way to explain the Activity Index is that it is the base class for classes such as Email and Phone Call.
The activity pointer encapsulates the basic attributes of any activity, so if you create a user activity, it will also propagate to the activity pointer.
It follows that the activity indicator contains the status and state values of all actions, but it also makes sense that it cannot be accessed from SetStateRequest.
I assume that the actual state of Open, Closed, Scheduled, Canceled activity is applicable to all types of activities, but the status is individual for each type of activity.
Eg. the task can be opened, but the reason for its status can also be opened. While the email can also be opened, but the reason for its status is "Waiting for sending"
Due to this differentiation, SetStateRequest will probably not allow you to run it on an ActivityPointer, but it will be for each individual activity object.
In terms of what you intended to do, the supported method would be to get all the related actions separately, and then execute the given status request.
You can do everything right away, however you want, but include a bit of “unsupportability” in that you may have to do this directly in the database. However, when setting the status to “End state”, the reason should also reflect the status related to this state. Otherwise, I believe that the actions will be erroneous.
So, unfortunately, I do not see the way around this in an elegant way, but please update if you find it!