Skip to content

[APPFW] Implement Team Application C# Interface#7567

Merged
newb1e-kim merged 4 commits intoSamsung:mainfrom
newb1e-kim:main_TAM
Apr 17, 2026
Merged

[APPFW] Implement Team Application C# Interface#7567
newb1e-kim merged 4 commits intoSamsung:mainfrom
newb1e-kim:main_TAM

Conversation

@newb1e-kim
Copy link
Copy Markdown
Contributor

@newb1e-kim newb1e-kim commented Apr 15, 2026

[Tizen.Applications] Implement Team Application C# Interface

  • Implement Interop, Wrapper Class to implement C# Team Application
  • Add OnCreate Error Handling
  • When the application start, TeamManager will hold the application
    instance to guarantee the object alive until exit.
  • Implement TeamViewApplication

[NUI] Add Tizen.Application.Team into FriendAssembly

However, it does not inherit NUIApplication. Instead of inheriting
NUIApplcation, it use DALI native in backend. For developes to utilize
C# NUI object in TeamApplication, the backend should depend on NUI
deeply, require to be friend of the project.

@github-actions github-actions bot added the API14 Platform : Tizen 11.0 / TFM: net8.0-tizen11.0 label Apr 15, 2026
@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.
Added: 110, Removed: 0, Changed: 5

Internal API Changed

Added: 6, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedDataPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedTrustedPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonCache()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedTrusted()

Copy link
Copy Markdown
Member

@JoonghyunCho JoonghyunCho left a comment

Choose a reason for hiding this comment

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

🤖 [AI Review]

PR #7567 — [APPFW] Implement Team Application C# Interface


🔴 Bug: GSourceManager._tizenUIContext is dead code (logic error in Post())

In GSourceManager.cs, the Post() method always uses _tizenContext because context is unconditionally set to IntPtr.Zero and never reassigned:

public static void Post(Action action)
{
    IntPtr context = IntPtr.Zero;  // always Zero
    var sourceContext = context == IntPtr.Zero ? _tizenContext : _tizenUIContext;  // always _tizenContext
    sourceContext.Post(action, context, _wrapperHandler);
}

_tizenUIContext can never be selected. The same dead branch exists in Handler(). If the intent is to dispatch to either a Tizen main-loop context or a UI context depending on a parameter or current thread, the selection logic needs to be implemented. If only one context is needed, _tizenUIContext and the branching should be removed.


🟡 Suggestion: CultureInfoHelper._fileExists is computed once at class load time

private static bool _fileExists = File.Exists(_pathCultureInfoIni);

This static field is evaluated once when the class is first accessed. If the .ini file is created after the application starts, _fileExists will remain false for the process lifetime. Consider calling File.Exists inside GetCultureName on each call (or using lazy initialization) so that late-arriving files are handled correctly.


🟡 Suggestion: Missing newline at end of file

CultureInfoHelper.cs and GSourceManager.cs both lack a trailing newline. This causes noisy diffs and is inconsistent with the rest of the codebase.


🟡 Note: Duplicate PR

PR #7568 appears to contain identical content to this PR (same author, same date, same diff). One of the two should be closed to avoid duplicated review effort.

TeamApplication will create UI with NUI.

However, it does not inherit NUIApplication. Instead of inheriting
NUIApplcation, it use DALI native in backend. For developes to utilize
C# NUI object in TeamApplication, the backend should depend on NUI
deeply, require to be friend of the project.

Signed-off-by: Jihoi Kim <jihoi.kim@samsung.com>
@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.
Added: 110, Removed: 0, Changed: 5

Internal API Changed

Added: 6, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedDataPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedTrustedPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonCache()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedTrusted()

@JoonghyunCho
Copy link
Copy Markdown
Member

🤖 [AI Review] — Tizen.Applications.Team: New Package

Bug: _tizenUIContext is unreachable dead code in GSourceManager.cs

In GSourceManager.Post(), context is always hardcoded to IntPtr.Zero:

IntPtr context = IntPtr.Zero;
var sourceContext = context == IntPtr.Zero ? _tizenContext : _tizenUIContext;

The ternary condition is always true, so _tizenUIContext is never selected and is dead code. The dispatch logic in Handler() that checks userData == IntPtr.Zero also always resolves to _tizenContext. If the intent was to support posting to both the main context and the UI context, context must come from a parameter. Please either expose it (e.g., Post(Action action, IntPtr context = default)) or remove the unused _tizenUIContext field.


Bug: Missing [UnmanagedFunctionPointer(CallingConvention.Cdecl)] on AppInfoResControlCallback in Interop.ApplicationManager.cs

Every other unmanaged delegate in this file has [UnmanagedFunctionPointer(CallingConvention.Cdecl)], but AppInfoResControlCallback does not. Without this attribute, the runtime may use the wrong calling convention when the native library invokes the callback, potentially causing stack corruption or crashes. Please add [UnmanagedFunctionPointer(CallingConvention.Cdecl)] to match all sibling delegates.


Suggestion: Cache the ini dictionary in CultureInfoHelper.cs

GetCultureName calls Interop.LibIniParser.Load and FreeDict on every invocation. Since CultureInfo.ini is a read-only system file, the parsed dictionary should be loaded once (lazily at first use) and reused across calls. The current implementation re-parses the entire ini file on every locale query.


Nit: Missing newline at end of file

Both CultureInfoHelper.cs and GSourceManager.cs end without a trailing newline. Please add one.

@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.
Added: 110, Removed: 0, Changed: 5

Internal API Changed

Added: 6, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedDataPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedTrustedPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonCache()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedTrusted()

1 similar comment
@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.
Added: 110, Removed: 0, Changed: 5

Internal API Changed

Added: 6, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedDataPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedTrustedPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonCache()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedTrusted()

@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.
Added: 110, Removed: 0, Changed: 5

Internal API Changed

Added: 6, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedDataPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedTrustedPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonCache()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedTrusted()

- Implement Interop, Wrapper Class to implement C# Team Application
- Add OnCreate Error Handling
- When the application start, TeamManager will hold the application
  instance to guarantee the object alive until exit.
- Implement TeamViewApplication

Signed-off-by: Jihoi Kim <jihoi.kim@samsung.com>
@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.
Added: 110, Removed: 0, Changed: 5

Internal API Changed

Added: 6, Removed: 0, Changed: 0

Added

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedDataPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamApplicationInfo::CommonSharedTrustedPath()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonCache()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedData()

+ /// <since_tizen>none</since_tizen
+ [EditorBrowsable(EditorBrowsableState.Never)]
+ System.String Tizen.Applications.TeamDirectoryInfo::CommonSharedTrusted()

- Add summary, param, returns, exception, remarks XML doc comments
  to public API surface of Tizen.Applications.Team module.
- Mark public types and members with [EditorBrowsable(EditorBrowsableState.Never)]
  and inhouse comment line until ACR is completed.

Co-authored-by: KimHyeonuk <hyeonuk.kim@samsung.com>
@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.

Added: 0, Removed: 5, Changed: 0

Removed

- /// <since_tizen>9</since_tizen
- Tizen.Applications.ResourceControl

- /// <since_tizen>9</since_tizen
- System.Boolean Tizen.Applications.ResourceControl::IsAutoClose()

- /// <since_tizen>9</since_tizen
- System.String Tizen.Applications.ResourceControl::MaxResourceVersion()

- /// <since_tizen>9</since_tizen
- System.String Tizen.Applications.ResourceControl::MinResourceVersion()

- /// <since_tizen>9</since_tizen
- System.String Tizen.Applications.ResourceControl::ResourceType()

Internal API Changed

Added: 121, Removed: 0, Changed: 0

Copy link
Copy Markdown
Contributor

@dongsug-song dongsug-song left a comment

Choose a reason for hiding this comment

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

approved

@TizenAPI-Bot
Copy link
Copy Markdown
Collaborator

Public API Changed

Please follow the ACR process for the changed API below.

Added: 0, Removed: 5, Changed: 0

Removed

- /// <since_tizen>9</since_tizen
- Tizen.Applications.ResourceControl

- /// <since_tizen>9</since_tizen
- System.Boolean Tizen.Applications.ResourceControl::IsAutoClose()

- /// <since_tizen>9</since_tizen
- System.String Tizen.Applications.ResourceControl::MaxResourceVersion()

- /// <since_tizen>9</since_tizen
- System.String Tizen.Applications.ResourceControl::MinResourceVersion()

- /// <since_tizen>9</since_tizen
- System.String Tizen.Applications.ResourceControl::ResourceType()

Internal API Changed

Added: 121, Removed: 0, Changed: 0

@newb1e-kim newb1e-kim merged commit e1b3511 into Samsung:main Apr 17, 2026
3 checks passed
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.

6 participants