@@ -25,7 +25,7 @@ public class Ejson {
2525 private static final String TAG = "RocketChat.Ejson" ;
2626 private static final String TOKEN_KEY = "reactnativemeteor_usertoken-" ;
2727
28- String host ;
28+ public String host ;
2929 String rid ;
3030 String type ;
3131 Sender sender ;
@@ -53,26 +53,13 @@ private MMKV getMMKV() {
5353 return MMKV .mmkvWithID ("default" , MMKV .SINGLE_PROCESS_MODE );
5454 }
5555
56- /**
57- * Helper method to build avatar URI from avatar path.
58- * Validates server URL and credentials, then constructs the full URI.
59- */
60- private String buildAvatarUri (String avatarPath , String errorContext ) {
56+ private String buildAvatarUri (String avatarPath , int sizePx ) {
6157 String server = serverURL ();
6258 if (server == null || server .isEmpty ()) {
63- Log .w (TAG , "Cannot generate " + errorContext + " avatar URI: serverURL is null" );
59+ Log .w (TAG , "Cannot generate avatar URI: serverURL is null" );
6460 return null ;
6561 }
66-
67- String userToken = token ();
68- String uid = userId ();
69-
70- String finalUri = server + avatarPath + "?format=png&size=100" ;
71- if (!userToken .isEmpty () && !uid .isEmpty ()) {
72- finalUri += "&rc_token=" + userToken + "&rc_uid=" + uid ;
73- }
74-
75- return finalUri ;
62+ return server + avatarPath + "?format=png&size=" + sizePx ;
7663 }
7764
7865 public String getAvatarUri () {
@@ -102,23 +89,45 @@ public String getAvatarUri() {
10289 }
10390 }
10491
105- return buildAvatarUri (avatarPath , "" );
92+ return buildAvatarUri (avatarPath , 100 );
10693 }
10794
10895 /**
109- * Generates avatar URI for video conference caller.
96+ * Factory for building caller avatar URIs from host + username (e.g. VoIP payload).
97+ * Caller is package-private, so this is the only way to get avatar URI from outside the package.
98+ */
99+ public static Ejson forCallerAvatar (String host , String username ) {
100+ if (host == null || host .isEmpty () || username == null || username .isEmpty ()) {
101+ return null ;
102+ }
103+ Ejson ejson = new Ejson ();
104+ ejson .host = host ;
105+ ejson .caller = new Caller ();
106+ ejson .caller .username = username ;
107+ return ejson ;
108+ }
109+
110+ /**
111+ * Generates avatar URI for video conference caller (default size 100).
110112 * Returns null if caller username is not available (username is required for avatar endpoint).
111113 */
112114 public String getCallerAvatarUri () {
113- // Check if caller exists and has username (required - /avatar/{userId} endpoint doesn't exist)
115+ return getCallerAvatarUri (100 );
116+ }
117+
118+ /**
119+ * Generates avatar URI for video conference caller with custom size.
120+ * Returns null if caller username is not available.
121+ */
122+ public String getCallerAvatarUri (int sizePx ) {
114123 if (caller == null || caller .username == null || caller .username .isEmpty ()) {
115124 Log .w (TAG , "Cannot generate caller avatar URI: caller or username is null" );
116125 return null ;
117126 }
118127
119128 try {
120129 String avatarPath = "/avatar/" + URLEncoder .encode (caller .username , "UTF-8" );
121- return buildAvatarUri (avatarPath , "caller" );
130+ return buildAvatarUri (avatarPath , sizePx );
122131 } catch (UnsupportedEncodingException e ) {
123132 Log .e (TAG , "Failed to encode caller username" , e );
124133 return null ;
@@ -242,4 +251,4 @@ static class Content {
242251 String kid ;
243252 String iv ;
244253 }
245- }
254+ }
0 commit comments