That fuck shit the fascists are using
at master 95 lines 2.4 kB view raw
1package org.tm.archive.audio; 2 3import android.os.Parcel; 4import android.os.Parcelable; 5 6import androidx.annotation.NonNull; 7import androidx.annotation.Nullable; 8 9import org.tm.archive.database.model.databaseprotos.AudioWaveFormData; 10import org.tm.archive.util.ParcelUtil; 11import org.signal.core.util.Base64; 12 13import java.io.IOException; 14import java.util.Objects; 15 16/** 17 * An AudioHash is a compact string representation of the wave form and duration for an audio file. 18 */ 19public final class AudioHash implements Parcelable { 20 21 @NonNull private final String hash; 22 @NonNull private final AudioWaveFormData audioWaveForm; 23 24 private AudioHash(@NonNull String hash, @NonNull AudioWaveFormData audioWaveForm) { 25 this.hash = hash; 26 this.audioWaveForm = audioWaveForm; 27 } 28 29 public AudioHash(@NonNull AudioWaveFormData audioWaveForm) { 30 this(Base64.encodeWithPadding(audioWaveForm.encode()), audioWaveForm); 31 } 32 33 protected AudioHash(Parcel in) { 34 hash = Objects.requireNonNull(in.readString()); 35 36 try { 37 audioWaveForm = AudioWaveFormData.ADAPTER.decode(Objects.requireNonNull(ParcelUtil.readByteArray(in))); 38 } catch (IOException e) { 39 throw new AssertionError(); 40 } 41 } 42 43 @Override 44 public void writeToParcel(Parcel dest, int flags) { 45 dest.writeString(hash); 46 ParcelUtil.writeByteArray(dest, audioWaveForm.encode()); 47 } 48 49 @Override 50 public int describeContents() { 51 return 0; 52 } 53 54 public static final Creator<AudioHash> CREATOR = new Creator<>() { 55 @Override 56 public AudioHash createFromParcel(Parcel in) { 57 return new AudioHash(in); 58 } 59 60 @Override 61 public AudioHash[] newArray(int size) { 62 return new AudioHash[size]; 63 } 64 }; 65 66 public static @Nullable AudioHash parseOrNull(@Nullable String hash) { 67 if (hash == null) return null; 68 try { 69 return new AudioHash(hash, AudioWaveFormData.ADAPTER.decode(Base64.decode(hash))); 70 } catch (IOException e) { 71 return null; 72 } 73 } 74 75 @NonNull AudioWaveFormData getAudioWaveForm() { 76 return audioWaveForm; 77 } 78 79 @Override 80 public boolean equals(Object o) { 81 if (this == o) return true; 82 if (o == null || getClass() != o.getClass()) return false; 83 AudioHash other = (AudioHash) o; 84 return hash.equals(other.hash); 85 } 86 87 @Override 88 public int hashCode() { 89 return hash.hashCode(); 90 } 91 92 public @NonNull String getHash() { 93 return hash; 94 } 95}