Skip to content

Commit

Permalink
refactor AshmenHolder to AshmenWrapper
Browse files Browse the repository at this point in the history
  • Loading branch information
imndx committed Apr 17, 2024
1 parent 87b4ada commit a6a02ef
Show file tree
Hide file tree
Showing 5 changed files with 32 additions and 35 deletions.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
// AshmenHolder.aidl
package cn.wildfirechat.ashmen;

parcelable AshmenHolder;
parcelable AshmenWrapper;
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ import cn.wildfirechat.model.Socks5ProxyInfo;
import java.util.List;
import java.util.Map;

import cn.wildfirechat.ashmen.AshmenHolder;
import cn.wildfirechat.ashmen.AshmenWrapper;

// Declare any non-default types here with import statements

Expand Down Expand Up @@ -323,7 +323,7 @@ interface IRemoteClient {
BurnMessageInfo getBurnMessageInfo(in long messageId);
byte[] decodeSecretChatData(in String targetid, in byte[] mediaData);

oneway void decodeSecretChatDataAsync(in String targetId, in AshmenHolder ashmenHolder, in int length, in IGeneralCallbackInt callback);
oneway void decodeSecretChatDataAsync(in String targetId, in AshmenWrapper ashmenWrapper, in int length, in IGeneralCallbackInt callback);

oneway void setDefaultPortraitProviderClass(in String clazz);
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,32 +22,38 @@
import cn.wildfirechat.utils.MemoryFileUtil;

@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
public class AshmenHolder implements Parcelable {
public SharedMemory sm;
public class AshmenWrapper implements Parcelable {
private SharedMemory sm;

// 跨进程时,不传输MemoryFile
private MemoryFile mf;
public ParcelFileDescriptor pfd;
private ParcelFileDescriptor pfd;
private int length;

public static AshmenHolder create(String name, int length) {
AshmenHolder ashmenHolder = new AshmenHolder();
ashmenHolder.length = length;
private AshmenWrapper() {

}

public static AshmenWrapper create(String name, int length) {
AshmenWrapper ashmenWrapper = new AshmenWrapper();
ashmenWrapper.length = length;
if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
try {
ashmenHolder.sm = SharedMemory.create(name, length);
ashmenWrapper.sm = SharedMemory.create(name, length);
} catch (ErrnoException e) {
throw new RuntimeException(e);
}
} else {
try {
MemoryFile memoryFile = new MemoryFile(name, length);
FileDescriptor fileDescriptor = MemoryFileUtil.getFileDescriptor(memoryFile);
ashmenHolder.pfd = ParcelFileDescriptor.dup(fileDescriptor);
ashmenHolder.mf = memoryFile;
ashmenWrapper.pfd = ParcelFileDescriptor.dup(fileDescriptor);
ashmenWrapper.mf = memoryFile;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
return ashmenHolder;
return ashmenWrapper;
}

public void writeBytes(byte[] src, int offset, int count) {
Expand Down Expand Up @@ -122,10 +128,7 @@ public void readFromParcel(Parcel source) {
}
}

public AshmenHolder() {
}

protected AshmenHolder(Parcel in) {
protected AshmenWrapper(Parcel in) {
this.length = in.readInt();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O_MR1) {
this.sm = in.readParcelable(SharedMemory.class.getClassLoader());
Expand All @@ -135,15 +138,15 @@ protected AshmenHolder(Parcel in) {
}
}

public static final Creator<AshmenHolder> CREATOR = new Creator<AshmenHolder>() {
public static final Creator<AshmenWrapper> CREATOR = new Creator<AshmenWrapper>() {
@Override
public AshmenHolder createFromParcel(Parcel source) {
return new AshmenHolder(source);
public AshmenWrapper createFromParcel(Parcel source) {
return new AshmenWrapper(source);
}

@Override
public AshmenHolder[] newArray(int size) {
return new AshmenHolder[size];
public AshmenWrapper[] newArray(int size) {
return new AshmenWrapper[size];
}
};
}
10 changes: 2 additions & 8 deletions client/src/main/java/cn/wildfirechat/client/ClientService.java
Original file line number Diff line number Diff line change
Expand Up @@ -23,15 +23,11 @@
import android.os.IInterface;
import android.os.LocaleList;
import android.os.Looper;
import android.os.MemoryFile;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
import android.os.Parcelable;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.SharedMemory;
import android.preference.PreferenceManager;
import android.system.ErrnoException;
import android.text.TextUtils;
import android.webkit.MimeTypeMap;

Expand All @@ -56,7 +52,6 @@
import java.io.IOException;
import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
Expand All @@ -67,7 +62,7 @@
import java.util.concurrent.TimeUnit;

import cn.wildfirechat.ErrorCode;
import cn.wildfirechat.ashmen.AshmenHolder;
import cn.wildfirechat.ashmen.AshmenWrapper;
import cn.wildfirechat.message.CompositeMessageContent;
import cn.wildfirechat.message.MarkUnreadMessageContent;
import cn.wildfirechat.message.MediaMessageContent;
Expand Down Expand Up @@ -133,7 +128,6 @@
import cn.wildfirechat.remote.DefaultPortraitProvider;
import cn.wildfirechat.remote.RecoverReceiver;
import cn.wildfirechat.remote.UploadMediaCallback;
import cn.wildfirechat.utils.MemoryFileHelper;
import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.MediaType;
Expand Down Expand Up @@ -3584,7 +3578,7 @@ public byte[] decodeSecretChatData(String targetId, byte[] mediaData) throws Rem
}

@Override
public void decodeSecretChatDataAsync(String targetId, AshmenHolder ashmenHolder, int length, IGeneralCallbackInt callback) throws RemoteException {
public void decodeSecretChatDataAsync(String targetId, AshmenWrapper ashmenHolder, int length, IGeneralCallbackInt callback) throws RemoteException {
try {
byte[] data = new byte[length];
ashmenHolder.readBytes(data, 0, length);
Expand Down
10 changes: 5 additions & 5 deletions client/src/main/java/cn/wildfirechat/remote/ChatManager.java
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,7 @@

import cn.wildfirechat.ErrorCode;
import cn.wildfirechat.UserSource;
import cn.wildfirechat.ashmen.AshmenHolder;
import cn.wildfirechat.ashmen.AshmenWrapper;
import cn.wildfirechat.client.ClientService;
import cn.wildfirechat.client.ConnectionStatus;
import cn.wildfirechat.client.ICreateChannelCallback;
Expand Down Expand Up @@ -8629,10 +8629,10 @@ public void decodeSecretDataAsync(String targetId, byte[] mediaData, GeneralCall
return;
}
try {
AshmenHolder ashmenHolder = AshmenHolder.create(targetId, mediaData.length);
ashmenHolder.writeBytes(mediaData, 0, mediaData.length);
AshmenHolder finalAshmenHolder = ashmenHolder;
mClient.decodeSecretChatDataAsync(targetId, ashmenHolder, mediaData.length, new IGeneralCallbackInt.Stub() {
AshmenWrapper ashmenWrapper = AshmenWrapper.create(targetId, mediaData.length);
ashmenWrapper.writeBytes(mediaData, 0, mediaData.length);
AshmenWrapper finalAshmenHolder = ashmenWrapper;
mClient.decodeSecretChatDataAsync(targetId, ashmenWrapper, mediaData.length, new IGeneralCallbackInt.Stub() {
@Override
public void onSuccess(int length) throws RemoteException {
if (callback != null) {
Expand Down

0 comments on commit a6a02ef

Please sign in to comment.