session-android/app/src/main/java/org/thoughtcrime/securesms/util/ScreenDensity.java
ceokot 16ca97d2d3
Add emoji reacts support (#889)
* 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>
2022-09-04 21:03:32 +10:00

86 lines
2.2 KiB
Java

package org.thoughtcrime.securesms.util;
import android.content.Context;
import android.util.DisplayMetrics;
import androidx.annotation.NonNull;
import org.session.libsession.messaging.MessagingModuleConfiguration;
import org.thoughtcrime.securesms.ApplicationContext;
import java.util.LinkedHashMap;
import java.util.Map;
/**
* Helper class to get density information about a device's display
*/
public final class ScreenDensity {
private static final String UNKNOWN = "unknown";
private static final float XHDPI_TO_LDPI = 0.25f;
private static final float XHDPI_TO_MDPI = 0.5f;
private static final float XHDPI_TO_HDPI = 0.75f;
private static final LinkedHashMap<Integer, String> LEVELS = new LinkedHashMap<Integer, String>() {{
put(DisplayMetrics.DENSITY_LOW, "ldpi");
put(DisplayMetrics.DENSITY_MEDIUM, "mdpi");
put(DisplayMetrics.DENSITY_HIGH, "hdpi");
put(DisplayMetrics.DENSITY_XHIGH, "xhdpi");
put(DisplayMetrics.DENSITY_XXHIGH, "xxhdpi");
put(DisplayMetrics.DENSITY_XXXHIGH, "xxxhdpi");
}};
private final String bucket;
private final int density;
public ScreenDensity(String bucket, int density) {
this.bucket = bucket;
this.density = density;
}
public static @NonNull ScreenDensity get(@NonNull Context context) {
int density = context.getResources().getDisplayMetrics().densityDpi;
String bucket = UNKNOWN;
for (Map.Entry<Integer, String> entry : LEVELS.entrySet()) {
bucket = entry.getValue();
if (entry.getKey() > density) {
break;
}
}
return new ScreenDensity(bucket, density);
}
public String getBucket() {
return bucket;
}
public boolean isKnownDensity() {
return !bucket.equals(UNKNOWN);
}
@Override
public @NonNull String toString() {
return bucket + " (" + density + ")";
}
public static float xhdpiRelativeDensityScaleFactor(@NonNull String density) {
switch (density) {
case "ldpi":
return XHDPI_TO_LDPI;
case "mdpi":
return XHDPI_TO_MDPI;
case "hdpi":
return XHDPI_TO_HDPI;
case "xhdpi":
return 1f;
default:
throw new IllegalStateException("Unsupported density: " + density);
}
}
}