Skip to content

[TCSACR-655][ACR-1952] Make Session API partially public - #7832

Open
mbloch1 wants to merge 1 commit into
Samsung:API14from
mbloch1:public-api-2026-06
Open

mbloch1 wants to merge 1 commit into
Samsung:API14from
mbloch1:public-api-2026-06

Conversation

@mbloch1

@mbloch1 mbloch1 commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

Expose parts of the Tizen.System.Session API to public.

The session API lets applications know about the state of subsessions, which are Tizen's light-weight alternative for Unix users. Specifically, the API contains listeners for "subsession changed" events and a handful of getters for the current state. The API does not allow any control over subsessions, which is exercised by platform services only. The API already existed for platform and is just being exposed to public here.

@github-actions github-actions Bot added the API14 Platform : Tizen 11.0 / TFM: net8.0-tizen11.0 label Sep 11, 2026
@TizenAPI-Bot

Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.

Added: 24, Removed: 0, Changed: 0

Added

+ /// <since_tizen>14</since_tizen
+ Tizen.System.AddUserEventArgs

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.AddUserEventArgs::UserName()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.RemoveUserEventArgs

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.RemoveUserEventArgs::UserName()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.Session

+ /// <since_tizen>14</since_tizen
+ static System.Int32 Tizen.System.Session::MaxUserLength

+ /// <since_tizen>14</since_tizen
+ static System.String Tizen.System.Session::EmptyUser

+ /// <since_tizen>14</since_tizen
+ System.Int32 Tizen.System.Session::SessionUID()

+ /// <since_tizen>14</since_tizen
+ System.Collections.Generic.IReadOnlyList`1<System.String> Tizen.System.Session::GetUsers()

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.Session::GetCurrentUser()

+ /// <since_tizen>14</since_tizen
+ System.Void Tizen.System.Session::SubsessionEventMarkAsDone(Tizen.System.SubsessionEventArgs)

+ /// <since_tizen>14</since_tizen
+ static Tizen.System.Session Tizen.System.Session::GetInstance(System.Int32)

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.AddUserEventArgs> Tizen.System.Session::AddUserWait

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.RemoveUserEventArgs> Tizen.System.Session::RemoveUserWait

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.SwitchUserCompletionEventArgs> Tizen.System.Session::SwitchUserCompleted

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.SwitchUserWaitEventArgs> Tizen.System.Session::SwitchUserWait

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SubsessionEventArgs

+ /// <since_tizen>14</since_tizen
+ System.Int32 Tizen.System.SubsessionEventArgs::SessionUID()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SwitchUserCompletionEventArgs

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SwitchUserEventArgs

+ /// <since_tizen>14</since_tizen
+ System.Int64 Tizen.System.SwitchUserEventArgs::SwitchID()

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.SwitchUserEventArgs::UserNameNext()

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.SwitchUserEventArgs::UserNamePrev()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SwitchUserWaitEventArgs

Internal API Changed

Added: 0, Removed: 24, Changed: 0

Removed

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.AddUserEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.AddUserEventArgs::UserName()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.RemoveUserEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.RemoveUserEventArgs::UserName()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.Session

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- static System.Int32 Tizen.System.Session::MaxUserLength

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- static System.String Tizen.System.Session::EmptyUser

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Int32 Tizen.System.Session::SessionUID()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Collections.Generic.IReadOnlyList`1<System.String> Tizen.System.Session::GetUsers()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.Session::GetCurrentUser()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Void Tizen.System.Session::SubsessionEventMarkAsDone(Tizen.System.SubsessionEventArgs)

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- static Tizen.System.Session Tizen.System.Session::GetInstance(System.Int32)

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.AddUserEventArgs> Tizen.System.Session::AddUserWait

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.RemoveUserEventArgs> Tizen.System.Session::RemoveUserWait

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.SwitchUserCompletionEventArgs> Tizen.System.Session::SwitchUserCompleted

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.SwitchUserWaitEventArgs> Tizen.System.Session::SwitchUserWait

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SubsessionEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Int32 Tizen.System.SubsessionEventArgs::SessionUID()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SwitchUserCompletionEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SwitchUserEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Int64 Tizen.System.SwitchUserEventArgs::SwitchID()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.SwitchUserEventArgs::UserNameNext()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.SwitchUserEventArgs::UserNamePrev()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SwitchUserWaitEventArgs

@JoonghyunCho

Copy link
Copy Markdown
Member

🤖 [AI Review]

Reviewed — no findings.

Scope checked:

  • Fetched both full files at the PR head (not just the diff) and verified doc completeness of all 24 newly-official public members: each has <summary> and <since_tizen>14</since_tizen>; GetInstance documents <param> and <returns>; GetUsers and GetCurrentUser gained previously missing <returns> tags; SubsessionEventMarkAsDone documents its parameter and thrown exceptions.
  • since_tizen level 14 is consistent with the API14 target branch.
  • Partial exposure is internally consistent: CurrentUID and the three Subsession*Async control methods keep [EditorBrowsable(EditorBrowsableState.Never)], matching the stated scope of exposing state observation only, without subsession control.
  • No behavioral changes: the diff only swaps hiding attributes for doc tags and fixes doc typos ("for in in" → "for it in"); all method, property, and event accessor bodies are untouched.

No 🔴 critical issues, no 🟡 suggestions to flag.


Automated review — final merge decision rests with human reviewers.

@mbloch1 mbloch1 changed the title [ACR-1952] Make Session API partially public [TCSACR-655][ACR-1952] Make Session API partially public Sep 24, 2026
@mbloch1
mbloch1 force-pushed the public-api-2026-06 branch from c231b37 to 2320bd3 Compare October 5, 2026 14:24
@@ -137,6 +138,7 @@ public IReadOnlyList<string> GetUsers()
/// <exception cref="IOException">Internal error</exception>
/// <exception cref="UnauthorizedAccessException">Not permitted</exception>
/// <exception cref="NotSupportedException">Not supported</exception>
/// <returns>The currently active subsession user ID, or "" (EmptyUser) when no subsession is enabled.</returns>

@mbloch1 mbloch1 Oct 5, 2026 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

GetCurrent and GetUsers are purposefully not exposed to the public API, because this is how it also looks like for the native C API. As far as I can tell this is because the use case is for things that only care about changes to sessions (think a "session changed from X to Y!" popup; or an installer that applies something to newly added sessions and performs cleanup for removed ones) without caring much about the current session or the list, such that the event listeners are sufficient.

@TizenAPI-Bot

Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.

Added: 22, Removed: 0, Changed: 0

Added

+ /// <since_tizen>14</since_tizen
+ Tizen.System.AddUserEventArgs

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.AddUserEventArgs::UserName()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.RemoveUserEventArgs

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.RemoveUserEventArgs::UserName()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.Session

+ /// <since_tizen>14</since_tizen
+ static System.Int32 Tizen.System.Session::MaxUserLength

+ /// <since_tizen>14</since_tizen
+ static System.String Tizen.System.Session::EmptyUser

+ /// <since_tizen>14</since_tizen
+ System.Int32 Tizen.System.Session::SessionUID()

+ /// <since_tizen>14</since_tizen
+ System.Void Tizen.System.Session::SubsessionEventMarkAsDone(Tizen.System.SubsessionEventArgs)

+ /// <since_tizen>14</since_tizen
+ static Tizen.System.Session Tizen.System.Session::GetInstance(System.Int32)

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.AddUserEventArgs> Tizen.System.Session::AddUserWait

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.RemoveUserEventArgs> Tizen.System.Session::RemoveUserWait

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.SwitchUserCompletionEventArgs> Tizen.System.Session::SwitchUserCompleted

+ /// <since_tizen>14</since_tizen
+ System.EventHandler`1<Tizen.System.SwitchUserWaitEventArgs> Tizen.System.Session::SwitchUserWait

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SubsessionEventArgs

+ /// <since_tizen>14</since_tizen
+ System.Int32 Tizen.System.SubsessionEventArgs::SessionUID()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SwitchUserCompletionEventArgs

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SwitchUserEventArgs

+ /// <since_tizen>14</since_tizen
+ System.Int64 Tizen.System.SwitchUserEventArgs::SwitchID()

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.SwitchUserEventArgs::UserNameNext()

+ /// <since_tizen>14</since_tizen
+ System.String Tizen.System.SwitchUserEventArgs::UserNamePrev()

+ /// <since_tizen>14</since_tizen
+ Tizen.System.SwitchUserWaitEventArgs

Internal API Changed

Added: 0, Removed: 22, Changed: 0

Removed

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.AddUserEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.AddUserEventArgs::UserName()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.RemoveUserEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.RemoveUserEventArgs::UserName()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.Session

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- static System.Int32 Tizen.System.Session::MaxUserLength

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- static System.String Tizen.System.Session::EmptyUser

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Int32 Tizen.System.Session::SessionUID()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Void Tizen.System.Session::SubsessionEventMarkAsDone(Tizen.System.SubsessionEventArgs)

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- static Tizen.System.Session Tizen.System.Session::GetInstance(System.Int32)

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.AddUserEventArgs> Tizen.System.Session::AddUserWait

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.RemoveUserEventArgs> Tizen.System.Session::RemoveUserWait

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.SwitchUserCompletionEventArgs> Tizen.System.Session::SwitchUserCompleted

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.EventHandler`1<Tizen.System.SwitchUserWaitEventArgs> Tizen.System.Session::SwitchUserWait

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SubsessionEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Int32 Tizen.System.SubsessionEventArgs::SessionUID()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SwitchUserCompletionEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SwitchUserEventArgs

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.Int64 Tizen.System.SwitchUserEventArgs::SwitchID()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.SwitchUserEventArgs::UserNameNext()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- System.String Tizen.System.SwitchUserEventArgs::UserNamePrev()

- /// <since_tizen>none</since_tizen
- [EditorBrowsable(EditorBrowsableState.Never)]
- Tizen.System.SwitchUserWaitEventArgs

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ACR Required API14 Platform : Tizen 11.0 / TFM: net8.0-tizen11.0 Internal API Changed

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants