mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-18 14:07:30 +00:00
16ca97d2d3
* feat: Add emoji reacts support * Remove message multi-selection * Add emoji reaction model * Add emoji reaction panel * Blur reacts panel background * Show emoji keyboard * Add emoji sprites * Update reaction proto * Emoji database updates * Emoji database refactor * Emoji reaction persistence * Optimize reactions retrieval * Fix emoji group query * Display emojis * Fix emoji persistence * Cleanup * Persistence refactor * Add reactions bottom sheet * Cleanup * Ui tweaks * React with any emoji * Show emoji react notifications * Remove reaction * Show reactions modal on long press * Click to react (+1) with an emoji * Click to react with an emoji * Enable emoji expand/collapse * fix: some compile issues from merge conflicts * fix: compile issues merging quote and media message UI * fix: xml IDs and adding in legacy is selected for future inclusion * Fix view constraints * Fix merge issue * Add message selection option in conversation context menu * Add sogs emoji integration * Handle sogs emoji reactions * Enable sending/deleting sogs emojis * fix: improve the visible message layout * fix: add file IDs to request parameters for message send (#940) * Fix open group polling from seqno instead of last hash (#939) * fix: reset seqno to get recent messages from open groups * build: upgrade build numbers * fix: actually run the migration * Using StringBuilder to construct request url * Fix reaction filter * fix: is_mms added in second projection query * Update default emojis * fix: include legacy and new open groups in server ID tracking (#941) * feat: add hidden moderator and admin roles, separated as they may be used independently in future (#942) * Cleanup * Fix view constraints * Add reactions capability check * Fix reactions alignment * Ui fixes * Display reactions list * feat: add formatted count strings * fix: account for negatives and add tests * Migrate old official open group locations for polling and adding (#932) * feat: adding in first part of open group migrations and tests for migration logic / helpers * feat: test code and migration logic for open groups in the case of no conflicts * feat: add in extra test cases and refactor code for migrator * refactor: migrate open group join URLs and references to server in adding new open groups to catch legacy and re-write it * refactor: joining open groups using OpenGroupUrlParser.kt now * fix: add in compile issues for renamed OpenGroupApi.kt from OpenGroupV2 * fix: prevent duplicates of http/https for new open group DNS and prevent adding new groups based on public key * fix: room and server swapped parameters * fix: replace default server for config messages * fix: actually using public key to de-dupe didn't work for rooms * build: bump version code and name * Display reactions list on open groups for moderators * Ui tweaks * Ui tweaks for moderation * Refactor * fix: compile issue * fix: de-duping joined queries in the get X from cursor * Restore import * fix: colouring the reaction overlay scrubber * fix: highlight colour, show reaction count if 1 or above * Cleanup * fix: light mode accent * fix: light / dark mode themeing in reactions dialog fragment * Emoji notification blinded id check * fix: show reaction list correctly and pass isUserModerator to bind methods * fix: remove unnecessary places for the moderator * fix: X button for removing own react not showing up properly * feat: add clear all header view * fix: migrate the clear all to the correct location * fix: use display instead of base * Truncate emoji sender ids * feat: add notify thread function in thread db * Notify threads on reaction received * fix: design fixes for the reaction list * fix: emoji reactions bottom sheet dialog UI designs * feat: add unsupported emoji reaction * fix: crash and doing vector properly * Fix reaction database queries * Fix background open group adder job * Show new open group reactions * Fetch a maximum of 5 reactors * Handle open group reactions polling conflicts * Add count to user reaction * Show number of additional reactors * fix: unreads set same as the unread query * fix: design changes * fix: update dependency to improve flexboxlayout behaviour, design consistencies * Add select message icon and update long press menu items order and wording * Fix crash on reactors dialog * fix: colours and backgrounds to match designs * fix: add header in recipient item * fix: margins * fix: alignments and layout issues for emoji reactions view * feat: add overflow previews and logic for overflow * Dim action bar * Add emoji search * Search index fix * Set count for 1:1 and closed group reactions when inserting in local database * Use on screen toolbar to allow overlaying * Show/hide scroll to bottom button * feat: add extended properties so it doesn't collapse on re-bind * Cleanup * feat: prevent keeping extended on rebinding if we get a new message ID * fix: long press works on devices now, fix release lint issue and crash for emoji search DBs from emoji builds * Display message timestamp * Fix modal items alignment * fix: sort order and emoji count in compareTo * Scale down really large messages to fit * Prevent closed group crash * Fix reaction author Co-authored-by: charles <charles@oxen.io> Co-authored-by: jubb <hjubb@users.noreply.github.com>
291 lines
7.6 KiB
Protocol Buffer
291 lines
7.6 KiB
Protocol Buffer
syntax = "proto2";
|
|
|
|
package signalservice;
|
|
|
|
option java_package = "org.session.libsignal.protos";
|
|
option java_outer_classname = "SignalServiceProtos";
|
|
|
|
message Envelope {
|
|
|
|
enum Type {
|
|
SESSION_MESSAGE = 6;
|
|
CLOSED_GROUP_MESSAGE = 7;
|
|
}
|
|
|
|
// @required
|
|
required Type type = 1;
|
|
optional string source = 2;
|
|
optional uint32 sourceDevice = 7;
|
|
// @required
|
|
required uint64 timestamp = 5;
|
|
optional bytes content = 8;
|
|
optional uint64 serverTimestamp = 10;
|
|
}
|
|
|
|
message TypingMessage {
|
|
|
|
enum Action {
|
|
STARTED = 0;
|
|
STOPPED = 1;
|
|
}
|
|
|
|
// @required
|
|
required uint64 timestamp = 1;
|
|
// @required
|
|
required Action action = 2;
|
|
}
|
|
|
|
message UnsendRequest {
|
|
// @required
|
|
required uint64 timestamp = 1;
|
|
// @required
|
|
required string author = 2;
|
|
}
|
|
|
|
message Content {
|
|
optional DataMessage dataMessage = 1;
|
|
optional CallMessage callMessage = 3;
|
|
optional ReceiptMessage receiptMessage = 5;
|
|
optional TypingMessage typingMessage = 6;
|
|
optional ConfigurationMessage configurationMessage = 7;
|
|
optional DataExtractionNotification dataExtractionNotification = 8;
|
|
optional UnsendRequest unsendRequest = 9;
|
|
optional MessageRequestResponse messageRequestResponse = 10;
|
|
}
|
|
|
|
message KeyPair {
|
|
// @required
|
|
required bytes publicKey = 1;
|
|
// @required
|
|
required bytes privateKey = 2;
|
|
}
|
|
|
|
message DataExtractionNotification {
|
|
|
|
enum Type {
|
|
SCREENSHOT = 1;
|
|
MEDIA_SAVED = 2; // timestamp
|
|
}
|
|
|
|
// @required
|
|
required Type type = 1;
|
|
optional uint64 timestamp = 2;
|
|
}
|
|
|
|
message DataMessage {
|
|
|
|
enum Flags {
|
|
EXPIRATION_TIMER_UPDATE = 2;
|
|
}
|
|
|
|
message Quote {
|
|
|
|
message QuotedAttachment {
|
|
|
|
enum Flags {
|
|
VOICE_MESSAGE = 1;
|
|
}
|
|
|
|
optional string contentType = 1;
|
|
optional string fileName = 2;
|
|
optional AttachmentPointer thumbnail = 3;
|
|
optional uint32 flags = 4;
|
|
}
|
|
|
|
// @required
|
|
required uint64 id = 1;
|
|
// @required
|
|
required string author = 2;
|
|
optional string text = 3;
|
|
repeated QuotedAttachment attachments = 4;
|
|
}
|
|
|
|
message Preview {
|
|
// @required
|
|
required string url = 1;
|
|
optional string title = 2;
|
|
optional AttachmentPointer image = 3;
|
|
}
|
|
|
|
message LokiProfile {
|
|
optional string displayName = 1;
|
|
optional string profilePicture = 2;
|
|
}
|
|
|
|
message OpenGroupInvitation {
|
|
// @required
|
|
required string url = 1;
|
|
// @required
|
|
required string name = 3;
|
|
}
|
|
|
|
message ClosedGroupControlMessage {
|
|
|
|
enum Type {
|
|
NEW = 1; // publicKey, name, encryptionKeyPair, members, admins, expireTimer
|
|
ENCRYPTION_KEY_PAIR = 3; // publicKey, wrappers
|
|
NAME_CHANGE = 4; // name
|
|
MEMBERS_ADDED = 5; // members
|
|
MEMBERS_REMOVED = 6; // members
|
|
MEMBER_LEFT = 7;
|
|
}
|
|
|
|
message KeyPairWrapper {
|
|
// @required
|
|
required bytes publicKey = 1; // The public key of the user the key pair is meant for
|
|
// @required
|
|
required bytes encryptedKeyPair = 2; // The encrypted key pair
|
|
}
|
|
|
|
// @required
|
|
required Type type = 1;
|
|
optional bytes publicKey = 2;
|
|
optional string name = 3;
|
|
optional KeyPair encryptionKeyPair = 4;
|
|
repeated bytes members = 5;
|
|
repeated bytes admins = 6;
|
|
repeated KeyPairWrapper wrappers = 7;
|
|
optional uint32 expirationTimer = 8;
|
|
}
|
|
|
|
message Reaction {
|
|
enum Action {
|
|
REACT = 0;
|
|
REMOVE = 1;
|
|
}
|
|
// @required
|
|
required uint64 id = 1;
|
|
// @required
|
|
required string author = 2;
|
|
optional string emoji = 3;
|
|
// @required
|
|
required Action action = 4;
|
|
}
|
|
|
|
optional string body = 1;
|
|
repeated AttachmentPointer attachments = 2;
|
|
optional GroupContext group = 3;
|
|
optional uint32 flags = 4;
|
|
optional uint32 expireTimer = 5;
|
|
optional bytes profileKey = 6;
|
|
optional uint64 timestamp = 7;
|
|
optional Quote quote = 8;
|
|
repeated Preview preview = 10;
|
|
optional Reaction reaction = 11;
|
|
optional LokiProfile profile = 101;
|
|
optional OpenGroupInvitation openGroupInvitation = 102;
|
|
optional ClosedGroupControlMessage closedGroupControlMessage = 104;
|
|
optional string syncTarget = 105;
|
|
}
|
|
|
|
message CallMessage {
|
|
|
|
enum Type {
|
|
PRE_OFFER = 6;
|
|
OFFER = 1;
|
|
ANSWER = 2;
|
|
PROVISIONAL_ANSWER = 3;
|
|
ICE_CANDIDATES = 4;
|
|
END_CALL = 5;
|
|
}
|
|
|
|
// Multiple ICE candidates may be batched together for performance
|
|
|
|
// @required
|
|
required Type type = 1;
|
|
repeated string sdps = 2;
|
|
repeated uint32 sdpMLineIndexes = 3;
|
|
repeated string sdpMids = 4;
|
|
// @required
|
|
required string uuid = 5;
|
|
}
|
|
|
|
message ConfigurationMessage {
|
|
|
|
message ClosedGroup {
|
|
optional bytes publicKey = 1;
|
|
optional string name = 2;
|
|
optional KeyPair encryptionKeyPair = 3;
|
|
repeated bytes members = 4;
|
|
repeated bytes admins = 5;
|
|
optional uint32 expirationTimer = 6;
|
|
}
|
|
|
|
message Contact {
|
|
// @required
|
|
required bytes publicKey = 1;
|
|
// @required
|
|
required string name = 2;
|
|
optional string profilePicture = 3;
|
|
optional bytes profileKey = 4;
|
|
optional bool isApproved = 5;
|
|
optional bool isBlocked = 6;
|
|
optional bool didApproveMe = 7;
|
|
}
|
|
|
|
repeated ClosedGroup closedGroups = 1;
|
|
repeated string openGroups = 2;
|
|
optional string displayName = 3;
|
|
optional string profilePicture = 4;
|
|
optional bytes profileKey = 5;
|
|
repeated Contact contacts = 6;
|
|
}
|
|
|
|
message MessageRequestResponse {
|
|
// @required
|
|
required bool isApproved = 1; // Whether the request was approved
|
|
}
|
|
|
|
message ReceiptMessage {
|
|
|
|
enum Type {
|
|
DELIVERY = 0;
|
|
READ = 1;
|
|
}
|
|
|
|
// @required
|
|
required Type type = 1;
|
|
repeated uint64 timestamp = 2;
|
|
}
|
|
|
|
message AttachmentPointer {
|
|
|
|
enum Flags {
|
|
VOICE_MESSAGE = 1;
|
|
}
|
|
|
|
// @required
|
|
required fixed64 id = 1;
|
|
optional string contentType = 2;
|
|
optional bytes key = 3;
|
|
optional uint32 size = 4;
|
|
optional bytes thumbnail = 5;
|
|
optional bytes digest = 6;
|
|
optional string fileName = 7;
|
|
optional uint32 flags = 8;
|
|
optional uint32 width = 9;
|
|
optional uint32 height = 10;
|
|
optional string caption = 11;
|
|
optional string url = 101;
|
|
}
|
|
|
|
message GroupContext {
|
|
|
|
enum Type {
|
|
UNKNOWN = 0;
|
|
UPDATE = 1;
|
|
DELIVER = 2;
|
|
QUIT = 3;
|
|
REQUEST_INFO = 4;
|
|
}
|
|
|
|
// @required
|
|
optional bytes id = 1;
|
|
// @required
|
|
optional Type type = 2;
|
|
optional string name = 3;
|
|
repeated string members = 4;
|
|
optional AttachmentPointer avatar = 5;
|
|
repeated string admins = 6;
|
|
}
|