session-android/app/src/main/java/org/thoughtcrime/securesms/groups/GroupManager.java

98 lines
4.0 KiB
Java
Raw Normal View History

package org.thoughtcrime.securesms.groups;
import android.content.Context;
import android.graphics.Bitmap;
2020-11-23 06:59:44 +01:00
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
2021-05-18 08:11:38 +02:00
import org.session.libsession.utilities.Address;
2021-05-18 08:03:47 +02:00
import org.session.libsession.utilities.DistributionTypes;
2021-01-18 23:12:44 +01:00
import org.session.libsession.utilities.GroupUtil;
import org.session.libsession.utilities.TextSecurePreferences;
import org.session.libsession.utilities.recipients.Recipient;
import org.thoughtcrime.securesms.database.GroupDatabase;
import org.thoughtcrime.securesms.database.ThreadDatabase;
import org.thoughtcrime.securesms.dependencies.DatabaseComponent;
import org.thoughtcrime.securesms.util.BitmapUtil;
import java.util.HashSet;
import java.util.LinkedList;
2021-01-22 06:15:13 +01:00
import java.util.Objects;
import java.util.Set;
public class GroupManager {
2020-05-12 08:33:04 +02:00
public static long getOpenGroupThreadID(String id, @NonNull Context context) {
2021-01-29 01:08:48 +01:00
final String groupID = GroupUtil.getEncodedOpenGroupID(id.getBytes());
2020-05-12 08:33:04 +02:00
return getThreadIDFromGroupID(groupID, context);
2019-09-10 08:49:17 +02:00
}
2020-05-12 08:33:04 +02:00
public static long getThreadIDFromGroupID(String groupID, @NonNull Context context) {
2021-02-17 06:09:36 +01:00
final Recipient groupRecipient = Recipient.from(context, Address.fromSerialized(groupID), false);
return DatabaseComponent.get(context).threadDatabase().getThreadIdIfExistsFor(groupRecipient);
2019-09-10 08:49:17 +02:00
}
2020-05-22 01:53:04 +02:00
public static @NonNull GroupActionResult createOpenGroup(@NonNull String id,
@NonNull Context context,
@Nullable Bitmap avatar,
@Nullable String name)
{
2021-01-29 01:08:48 +01:00
final String groupID = GroupUtil.getEncodedOpenGroupID(id.getBytes());
2020-05-12 08:33:04 +02:00
return createLokiGroup(groupID, context, avatar, name);
}
2020-05-22 01:53:04 +02:00
private static @NonNull GroupActionResult createLokiGroup(@NonNull String groupId,
@NonNull Context context,
@Nullable Bitmap avatar,
@Nullable String name)
{
final byte[] avatarBytes = BitmapUtil.toByteArray(avatar);
final GroupDatabase groupDatabase = DatabaseComponent.get(context).groupDatabase();
2021-02-17 06:09:36 +01:00
final Recipient groupRecipient = Recipient.from(context, Address.fromSerialized(groupId), false);
final Set<Address> memberAddresses = new HashSet<>();
2021-02-17 06:09:36 +01:00
memberAddresses.add(Address.fromSerialized(Objects.requireNonNull(TextSecurePreferences.getLocalNumber(context))));
groupDatabase.create(groupId, name, new LinkedList<>(memberAddresses), null, null, new LinkedList<>(), System.currentTimeMillis());
2020-10-19 06:21:15 +02:00
groupDatabase.updateProfilePicture(groupId, avatarBytes);
long threadID = DatabaseComponent.get(context).threadDatabase().getOrCreateThreadIdFor(
2021-03-02 02:24:09 +01:00
groupRecipient, DistributionTypes.CONVERSATION);
2020-05-12 08:33:04 +02:00
return new GroupActionResult(groupRecipient, threadID);
}
2020-11-23 06:59:44 +01:00
public static boolean deleteGroup(@NonNull String groupId,
@NonNull Context context)
{
final GroupDatabase groupDatabase = DatabaseComponent.get(context).groupDatabase();
final ThreadDatabase threadDatabase = DatabaseComponent.get(context).threadDatabase();
2021-02-17 06:09:36 +01:00
final Recipient groupRecipient = Recipient.from(context, Address.fromSerialized(groupId), false);
long threadId = threadDatabase.getThreadIdIfExistsFor(groupRecipient);
if (threadId != -1L) {
threadDatabase.deleteConversation(threadId);
}
return groupDatabase.delete(groupId);
}
public static class GroupActionResult {
private Recipient groupRecipient;
private long threadId;
public GroupActionResult(Recipient groupRecipient, long threadId) {
this.groupRecipient = groupRecipient;
this.threadId = threadId;
}
public Recipient getGroupRecipient() {
return groupRecipient;
}
public long getThreadId() {
return threadId;
}
}
}