Refactor how message send types are selected.

This commit is contained in:
Greyson Parrelli
2022-06-03 18:07:29 -04:00
committed by GitHub
parent bf90909496
commit 4da422fd3c
29 changed files with 591 additions and 808 deletions

View File

@@ -16,35 +16,13 @@
*/
package org.thoughtcrime.securesms.util;
import android.os.Parcel;
import android.os.Parcelable;
import androidx.annotation.NonNull;
public abstract class CharacterCalculator {
public abstract class CharacterCalculator implements Parcelable {
public abstract CharacterState calculateCharacters(String messageBody);
public static CharacterCalculator readFromParcel(@NonNull Parcel in) {
switch (in.readInt()) {
case 1: return new SmsCharacterCalculator();
case 2: return new MmsCharacterCalculator();
case 3: return new PushCharacterCalculator();
default: throw new IllegalArgumentException("Read an unsupported value for a calculator.");
}
}
public static void writeToParcel(@NonNull Parcel dest, @NonNull CharacterCalculator calculator) {
if (calculator instanceof SmsCharacterCalculator) {
dest.writeInt(1);
} else if (calculator instanceof MmsCharacterCalculator) {
dest.writeInt(2);
} else if (calculator instanceof PushCharacterCalculator) {
dest.writeInt(3);
} else {
throw new IllegalArgumentException("Tried to write an unsupported calculator to a parcel.");
}
}
public static class CharacterState {
public final int charactersRemaining;
public final int messagesSpent;

View File

@@ -1,5 +1,7 @@
package org.thoughtcrime.securesms.util;
import android.os.Parcel;
public class MmsCharacterCalculator extends CharacterCalculator {
private static final int MAX_SIZE = 5000;
@@ -8,4 +10,25 @@ public class MmsCharacterCalculator extends CharacterCalculator {
public CharacterState calculateCharacters(String messageBody) {
return new CharacterState(1, MAX_SIZE - messageBody.length(), MAX_SIZE, MAX_SIZE);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
public static final Creator<MmsCharacterCalculator> CREATOR = new Creator<MmsCharacterCalculator>() {
@Override
public MmsCharacterCalculator createFromParcel(Parcel in) {
return new MmsCharacterCalculator();
}
@Override
public MmsCharacterCalculator[] newArray(int size) {
return new MmsCharacterCalculator[size];
}
};
}

View File

@@ -16,6 +16,8 @@
*/
package org.thoughtcrime.securesms.util;
import android.os.Parcel;
public class PushCharacterCalculator extends CharacterCalculator {
private static final int MAX_TOTAL_SIZE = 64 * 1024;
private static final int MAX_PRIMARY_SIZE = 2000;
@@ -23,5 +25,26 @@ public class PushCharacterCalculator extends CharacterCalculator {
public CharacterState calculateCharacters(String messageBody) {
return new CharacterState(1, MAX_TOTAL_SIZE - messageBody.length(), MAX_TOTAL_SIZE, MAX_PRIMARY_SIZE);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
public static final Creator<PushCharacterCalculator> CREATOR = new Creator<PushCharacterCalculator>() {
@Override
public PushCharacterCalculator createFromParcel(Parcel in) {
return new PushCharacterCalculator();
}
@Override
public PushCharacterCalculator[] newArray(int size) {
return new PushCharacterCalculator[size];
}
};
}

View File

@@ -16,6 +16,7 @@
*/
package org.thoughtcrime.securesms.util;
import android.os.Parcel;
import android.telephony.SmsMessage;
import org.signal.core.util.logging.Log;
@@ -62,4 +63,25 @@ public class SmsCharacterCalculator extends CharacterCalculator {
return new CharacterState(messagesSpent, charactersRemaining, maxMessageSize, maxMessageSize);
}
@Override
public int describeContents() {
return 0;
}
@Override
public void writeToParcel(Parcel dest, int flags) {
}
public static final Creator<SmsCharacterCalculator> CREATOR = new Creator<SmsCharacterCalculator>() {
@Override
public SmsCharacterCalculator createFromParcel(Parcel in) {
return new SmsCharacterCalculator();
}
@Override
public SmsCharacterCalculator[] newArray(int size) {
return new SmsCharacterCalculator[size];
}
};
}