Fix up inheritance so it works.
This commit is contained in:
parent
3efcb96735
commit
018c188299
41 changed files with 564 additions and 126 deletions
|
@ -1,8 +1,9 @@
|
|||
package com.discord.app;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexEdit
|
||||
@DexIgnore
|
||||
public class App {
|
||||
|
||||
|
||||
|
|
11
app/src/main/java/com/discord/app/AppComponent.java
Normal file
11
app/src/main/java/com/discord/app/AppComponent.java
Normal file
|
@ -0,0 +1,11 @@
|
|||
package com.discord.app;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import rx.subjects.Subject;
|
||||
|
||||
|
||||
@DexIgnore
|
||||
public interface AppComponent {
|
||||
@DexIgnore
|
||||
Subject<Void, Void> getUnsubscribeSignal();
|
||||
}
|
36
app/src/main/java/com/discord/app/AppFragment.java
Normal file
36
app/src/main/java/com/discord/app/AppFragment.java
Normal file
|
@ -0,0 +1,36 @@
|
|||
package com.discord.app;
|
||||
|
||||
import android.app.Fragment;
|
||||
|
||||
import com.miguelgaeta.media_picker.MediaPicker;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function0;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import rx.subjects.Subject;
|
||||
|
||||
@DexIgnore
|
||||
public class AppFragment extends Fragment implements AppComponent, AppPermissions.Requests, MediaPicker.Provider {
|
||||
|
||||
@DexIgnore
|
||||
public Subject<Void, Void> getUnsubscribeSignal() {
|
||||
return null;
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
public void requestMicrophone(Function0<Unit> function0) {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
public void requestVideoCallPermissions(Function0<Unit> function0) {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
public File getImageFile() {
|
||||
return null;
|
||||
}
|
||||
}
|
19
app/src/main/java/com/discord/app/AppPermissions.java
Normal file
19
app/src/main/java/com/discord/app/AppPermissions.java
Normal file
|
@ -0,0 +1,19 @@
|
|||
package com.discord.app;
|
||||
|
||||
import kotlin.Unit;
|
||||
import kotlin.jvm.functions.Function0;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public final class AppPermissions {
|
||||
|
||||
@DexIgnore
|
||||
public interface Requests {
|
||||
@DexIgnore
|
||||
void requestMicrophone(Function0<Unit> function0);
|
||||
|
||||
@DexIgnore
|
||||
void requestVideoCallPermissions(Function0<Unit> function0);
|
||||
}
|
||||
|
||||
}
|
25
app/src/main/java/com/discord/models/domain/Model.java
Normal file
25
app/src/main/java/com/discord/models/domain/Model.java
Normal file
|
@ -0,0 +1,25 @@
|
|||
package com.discord.models.domain;
|
||||
|
||||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface Model {
|
||||
|
||||
@DexIgnore
|
||||
public static class JsonReader implements Closeable {
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void close() throws IOException {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
void assignField(JsonReader jsonReader) throws IOException;
|
||||
|
||||
}
|
|
@ -1,7 +1,10 @@
|
|||
package com.discord.models.domain;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class ModelAllowedMentions {
|
||||
|
||||
}
|
||||
|
|
|
@ -1,7 +1,10 @@
|
|||
package com.discord.models.domain;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class ModelApplication {
|
||||
|
||||
}
|
||||
|
|
|
@ -1,9 +1,17 @@
|
|||
package com.discord.models.domain;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class ModelChannel {
|
||||
public class ModelChannel implements Model {
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void assignField(JsonReader jsonReader) throws IOException {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
public static class RecipientNick {
|
||||
|
|
|
@ -1,9 +1,17 @@
|
|||
package com.discord.models.domain;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class ModelGuildMember {
|
||||
public class ModelGuildMember implements Model {
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void assignField(JsonReader jsonReader) throws IOException {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
public static class Computed {
|
||||
|
|
|
@ -1,9 +1,17 @@
|
|||
package com.discord.models.domain;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class ModelMessage {
|
||||
public class ModelMessage implements Model {
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void assignField(JsonReader jsonReader) throws IOException {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
public static class MessageReference {
|
||||
|
|
|
@ -3,11 +3,14 @@ package com.discord.models.domain;
|
|||
import com.PatchConfig;
|
||||
import com.discordtest.BuildConfig;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
public class ModelMessageEmbed {
|
||||
public class ModelMessageEmbed implements Model {
|
||||
|
||||
// nospoiler patch
|
||||
|
||||
|
@ -21,4 +24,9 @@ public class ModelMessageEmbed {
|
|||
return false;
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void assignField(JsonReader jsonReader) throws IOException {
|
||||
|
||||
}
|
||||
}
|
||||
|
|
|
@ -3,6 +3,7 @@ package com.discord.models.domain;
|
|||
import com.PatchConfig;
|
||||
import com.discordtest.BuildConfig;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.Map;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
|
@ -10,7 +11,7 @@ import lanchon.dexpatcher.annotation.DexIgnore;
|
|||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
public class ModelUser {
|
||||
public class ModelUser implements Model {
|
||||
|
||||
// showtag patch
|
||||
|
||||
|
@ -31,4 +32,11 @@ public class ModelUser {
|
|||
return null;
|
||||
}
|
||||
|
||||
//end of showtag patch
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void assignField(JsonReader jsonReader) throws IOException {
|
||||
|
||||
}
|
||||
}
|
|
@ -1,7 +1,18 @@
|
|||
package com.discord.models.domain.activity;
|
||||
|
||||
import com.discord.models.domain.Model;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class ModelActivity {
|
||||
public class ModelActivity implements Model {
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void assignField(JsonReader jsonReader) throws IOException {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,8 @@
|
|||
package com.discord.simpleast.core.node;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class Node<R> {
|
||||
|
||||
}
|
|
@ -17,13 +17,15 @@ import lanchon.dexpatcher.annotation.DexEdit;
|
|||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
import rx.Observable;
|
||||
|
||||
|
||||
@DexEdit
|
||||
public final class StoreMessages {
|
||||
public final class StoreMessages extends Store {
|
||||
|
||||
// TODO extra patch that allows @ user selection window to appear when entering a slash command
|
||||
|
||||
// slashmessages patch
|
||||
|
||||
// Wrap edit function to check for commands
|
||||
@SuppressWarnings("InfiniteRecursion") // Wrapped method
|
||||
@DexWrap
|
||||
public final void editMessage(long j, long j2, String str) {
|
||||
if (!PatchConfig.SLASH_COMMANDS_ENABLED) {
|
||||
|
@ -37,6 +39,7 @@ public final class StoreMessages {
|
|||
}
|
||||
|
||||
// Wrap send function to check for commands
|
||||
@SuppressWarnings("InfiniteRecursion") // Wrapped method
|
||||
@DexWrap
|
||||
public final Observable<MessageResult> sendMessage(long j,
|
||||
ModelUser modelUser,
|
||||
|
@ -64,84 +67,105 @@ public final class StoreMessages {
|
|||
// Add in helper functions
|
||||
|
||||
@DexAdd
|
||||
public static final String interceptEditMessage(String str) {
|
||||
public static String interceptEditMessage(String str) {
|
||||
return str.startsWith("/") ? slashCommands(str) : str;
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static final String interceptSendMessage(String str) {
|
||||
public static String interceptSendMessage(String str) {
|
||||
StoreStream.getUserSettings().setImageSpoiler(false);
|
||||
return str.startsWith("/") ? slashCommands(str) : str;
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashCommands(String str) {
|
||||
String msg = str.trim();
|
||||
|
||||
public static final String slashCommands(String str) {
|
||||
String trim = str.trim();
|
||||
if (trim.startsWith("/upper ")) {
|
||||
trim = slashUpper(trim);
|
||||
} else if (trim.startsWith("/lower ")) {
|
||||
trim = slashLower(trim);
|
||||
} else if (trim.startsWith("/bold ")) {
|
||||
trim = slashBold(trim);
|
||||
} else if (trim.startsWith("/spoiler ")) {
|
||||
trim = slashSpoiler(trim);
|
||||
} else if (trim.startsWith("/me ")) {
|
||||
trim = slashMe(trim);
|
||||
} else if (trim.startsWith("/st ")) {
|
||||
trim = slashSt(trim);
|
||||
} else if (trim.startsWith("/lenny")) {
|
||||
trim = slashLenny(trim);
|
||||
} else if (trim.startsWith("/fw ")) {
|
||||
trim = slashFw(trim);
|
||||
} else if (trim.startsWith("/small ")) {
|
||||
trim = slashSmall(trim);
|
||||
} else if (trim.startsWith("/smaller ")) {
|
||||
trim = slashSmaller(trim);
|
||||
} else if (trim.startsWith("/flip ")) {
|
||||
trim = slashFlip(trim);
|
||||
} else if (trim.startsWith("/clap ")) {
|
||||
trim = slashClap(trim);
|
||||
} else if (trim.startsWith("/owo ")) {
|
||||
trim = slashOwo(trim);
|
||||
} else if (trim.startsWith("/morse ")) {
|
||||
trim = slashMorse(trim);
|
||||
} else if (trim.startsWith("/spoilerimg")) {
|
||||
trim = slashSpoilerImg(trim);
|
||||
} else if (trim.startsWith("/gordon ")) {
|
||||
trim = slashGordon(trim);
|
||||
String command = "";
|
||||
String remaining = "";
|
||||
|
||||
int spacePos = str.indexOf(" ");
|
||||
if (spacePos == -1) {
|
||||
// Assume entire input is command
|
||||
command = str.substring(1);
|
||||
} else {
|
||||
// Split command and remaining
|
||||
command = str.substring(0, spacePos);
|
||||
remaining = str.substring(spacePos + 1);
|
||||
}
|
||||
return trim.trim();
|
||||
|
||||
|
||||
if (msg.startsWith("/upper ")) {
|
||||
msg = slashUpper(remaining);
|
||||
} else if (msg.startsWith("/lower ")) {
|
||||
msg = slashLower(remaining);
|
||||
} else if (msg.startsWith("/bold ")) {
|
||||
msg = slashBold(remaining);
|
||||
} else if (msg.startsWith("/spoiler ")) {
|
||||
msg = slashSpoiler(remaining);
|
||||
} else if (msg.startsWith("/me ")) {
|
||||
msg = slashMe(remaining);
|
||||
} else if (msg.startsWith("/st ")) {
|
||||
msg = slashSt(remaining);
|
||||
} else if (msg.startsWith("/lenny")) {
|
||||
msg = slashLenny(remaining);
|
||||
} else if (msg.startsWith("/fw ")) {
|
||||
msg = slashFw(remaining);
|
||||
} else if (msg.startsWith("/small ")) {
|
||||
msg = slashSmall(remaining);
|
||||
} else if (msg.startsWith("/smaller ")) {
|
||||
msg = slashSmaller(remaining);
|
||||
} else if (msg.startsWith("/flip ")) {
|
||||
msg = slashFlip(remaining);
|
||||
} else if (msg.startsWith("/clap ")) {
|
||||
msg = slashClap(remaining);
|
||||
} else if (msg.startsWith("/owo ")) {
|
||||
msg = slashOwo(remaining);
|
||||
} else if (msg.startsWith("/morse ")) {
|
||||
msg = slashMorse(remaining);
|
||||
} else if (msg.startsWith("/spoilerimg")) {
|
||||
msg = slashSpoilerImg(remaining);
|
||||
} else if (msg.startsWith("/gordon ")) {
|
||||
msg = slashGordon(remaining);
|
||||
} else if (msg.startsWith("/slap ")) {
|
||||
msg = slashSlap(remaining);
|
||||
}
|
||||
return msg.trim();
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static final String slashBold(String str) {
|
||||
String substring = str.substring(6);
|
||||
return "**" + substring + "**";
|
||||
public static String slashSlap(String remaining) {
|
||||
return "*Slaps "+remaining+" around a bit with a large trout.*";
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static final String slashClap(String str) {
|
||||
return str.substring(6).replace(" ", " :clap: ");
|
||||
public static String slashBold(String remaining) {
|
||||
return "**" + remaining + "**";
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static final String slashCtc(String str) {
|
||||
String substring = str.substring(5);
|
||||
if (substring.startsWith("channelleak ")) {
|
||||
StoreStream.getUserSettings().setLeakChannels(substring.substring(12).startsWith("false"));
|
||||
public static String slashClap(String remaining) {
|
||||
return remaining.replace(" ", " :clap: ");
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashCtc(String remaining) {
|
||||
String subcommand = remaining.substring(5);
|
||||
|
||||
if (subcommand.startsWith("channelleak ")) {
|
||||
StoreStream.getUserSettings().setLeakChannels(subcommand.substring(12).startsWith("false"));
|
||||
return "CTC: Successfully set channelleak state.";
|
||||
} else if (substring.startsWith("showtyping ")) {
|
||||
StoreStream.getUserSettings().setShowTyping(substring.substring(11).startsWith("true"));
|
||||
} else if (subcommand.startsWith("showtyping ")) {
|
||||
StoreStream.getUserSettings().setShowTyping(subcommand.substring(11).startsWith("true"));
|
||||
return "CTC: Successfully set showtyping state.";
|
||||
} else if (substring.startsWith("token ")) {
|
||||
StoreStream.getUserSettings().setStoredToken(substring.substring(6));
|
||||
} else if (subcommand.startsWith("token ")) {
|
||||
StoreStream.getUserSettings().setStoredToken(subcommand.substring(6));
|
||||
return "CTC: Successfully changed token. Please restart application.";
|
||||
} else if (substring.startsWith("token")) {
|
||||
} else if (subcommand.startsWith("token")) {
|
||||
return StoreStream.getUserSettings().getStoredToken();
|
||||
} else {
|
||||
if (substring.startsWith("account ")) {
|
||||
String trim = substring.substring(8).trim();
|
||||
if (subcommand.startsWith("account ")) {
|
||||
String trim = subcommand.substring(8).trim();
|
||||
StoreUserSettings userSettings = StoreStream.getUserSettings();
|
||||
String accountToken = userSettings.getAccountToken(trim);
|
||||
if (accountToken.startsWith("none")) {
|
||||
|
@ -149,8 +173,8 @@ public final class StoreMessages {
|
|||
}
|
||||
userSettings.setStoredToken(accountToken);
|
||||
return "CTC: Successfully changed accounts. Please restart application.";
|
||||
} else if (substring.startsWith("addaccount ")) {
|
||||
String substring2 = substring.substring(11);
|
||||
} else if (subcommand.startsWith("addaccount ")) {
|
||||
String substring2 = subcommand.substring(11);
|
||||
String substring3 = substring2.substring(substring2.indexOf(" "));
|
||||
String trim2 = substring2.replace(substring3, "").trim();
|
||||
String trim3 = substring3.trim();
|
||||
|
@ -160,21 +184,21 @@ public final class StoreMessages {
|
|||
}
|
||||
userSettings2.setAccountToken(trim2, trim3);
|
||||
return "CTC: Added account.";
|
||||
} else if (substring.startsWith("nodelete ")) {
|
||||
StoreStream.getUserSettings().setNoDelete(substring.substring(9).startsWith("true"));
|
||||
} else if (subcommand.startsWith("nodelete ")) {
|
||||
StoreStream.getUserSettings().setNoDelete(subcommand.substring(9).startsWith("true"));
|
||||
return "CTC: Successfully set nodelete state.";
|
||||
} else if (!substring.startsWith("gifautoplay ")) {
|
||||
} else if (!subcommand.startsWith("gifautoplay ")) {
|
||||
return "CTC: No known command supplied. (available: token, showtyping, channelleak, addaccount, account, nodelete, gifautoplay. Everything except specified token needs to be lowercase)";
|
||||
} else {
|
||||
StoreStream.getUserSettings().setAutoplayGifs(substring.substring(12).startsWith("true"));
|
||||
StoreStream.getUserSettings().setAutoplayGifs(subcommand.substring(12).startsWith("true"));
|
||||
return "CTC: Successfully set gifautoplay state.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashFlip(String str) {
|
||||
StringBuilder sb = new StringBuilder(str.substring(6).toLowerCase());
|
||||
public static String slashFlip(String remaining) {
|
||||
StringBuilder sb = new StringBuilder(remaining.toLowerCase());
|
||||
sb.reverse();
|
||||
return sb.toString().replace("a", "ɐ")
|
||||
.replace("b", "q")
|
||||
|
@ -205,8 +229,8 @@ public final class StoreMessages {
|
|||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashFw(String str) {
|
||||
return str.substring(4).replace(" ", " ")
|
||||
public static String slashFw(String remaining) {
|
||||
return remaining.replace(" ", " ")
|
||||
.replace("!", "!")
|
||||
.replace("#", "#")
|
||||
.replace("$", "$")
|
||||
|
@ -302,8 +326,8 @@ public final class StoreMessages {
|
|||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashGordon(String str) {
|
||||
return str.substring(8).replace("a", "𝗮")
|
||||
public static String slashGordon(String remaining) {
|
||||
return remaining.replace("a", "𝗮")
|
||||
.replace("b", "𝗯")
|
||||
.replace("c", "𝗰")
|
||||
.replace("d", "𝗱")
|
||||
|
@ -368,24 +392,23 @@ public final class StoreMessages {
|
|||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashLenny(String str) {
|
||||
return str.substring(6) + " ( ͡° ͜ʖ ͡°)";
|
||||
public static String slashLenny(String remaining) {
|
||||
return remaining + " ( ͡° ͜ʖ ͡°)";
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashLower(String str) {
|
||||
return str.substring(7).toLowerCase();
|
||||
public static String slashLower(String remaining) {
|
||||
return remaining.toLowerCase();
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashMe(String str) {
|
||||
String substring = str.substring(4);
|
||||
return "*" + substring + "*";
|
||||
public static String slashMe(String remaining) {
|
||||
return "*" + remaining + "*";
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashMorse(String str) {
|
||||
return str.substring(7).toUpperCase().replace(" ", "/ ")
|
||||
public static String slashMorse(String remaining) {
|
||||
return remaining.toUpperCase().replace(" ", "/ ")
|
||||
.replace(".", ".-.-.- ")
|
||||
.replace(",", "--..-- ")
|
||||
.replace(":", "---... ")
|
||||
|
@ -434,8 +457,8 @@ public final class StoreMessages {
|
|||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashOwo(String str) {
|
||||
return str.substring(5).replaceAll("(?:r|l)", "w")
|
||||
public static String slashOwo(String remaining) {
|
||||
return remaining.replaceAll("(?:r|l)", "w")
|
||||
.replaceAll("(?:R|L)", "W")
|
||||
.replaceAll("n([aeiou])", "ny$1")
|
||||
.replaceAll("N([aeiou])", "Ny$1")
|
||||
|
@ -444,37 +467,34 @@ public final class StoreMessages {
|
|||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashSmall(String str) {
|
||||
return str.substring(7).toLowerCase().replace("a", "ᴀ").replace("b", "ʙ").replace("c", "ᴄ").replace("d", "ᴅ").replace("e", "ᴇ").replace("f", "ꜰ").replace("g", "ɢ").replace("h", "ʜ").replace("i", "ɪ").replace("j", "ᴊ").replace("k", "ᴋ").replace("l", "ʟ").replace("m", "ᴍ").replace("n", "ɴ").replace("o", "ᴏ").replace("p", "ᴘ").replace("q", "ǫ").replace("r", "ʀ").replace("s", "s").replace("t", "ᴛ").replace("u", "ᴜ").replace("v", "ᴠ").replace("w", "ᴡ").replace("y", "ʏ").replace("z", "ᴢ");
|
||||
public static String slashSmall(String remaining) {
|
||||
return remaining.toLowerCase().replace("a", "ᴀ").replace("b", "ʙ").replace("c", "ᴄ").replace("d", "ᴅ").replace("e", "ᴇ").replace("f", "ꜰ").replace("g", "ɢ").replace("h", "ʜ").replace("i", "ɪ").replace("j", "ᴊ").replace("k", "ᴋ").replace("l", "ʟ").replace("m", "ᴍ").replace("n", "ɴ").replace("o", "ᴏ").replace("p", "ᴘ").replace("q", "ǫ").replace("r", "ʀ").replace("s", "s").replace("t", "ᴛ").replace("u", "ᴜ").replace("v", "ᴠ").replace("w", "ᴡ").replace("y", "ʏ").replace("z", "ᴢ");
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashSmaller(String str) {
|
||||
return str.substring(9).toLowerCase().replace("a", "ᵃ").replace("b", "ᵇ").replace("c", "ᶜ").replace("d", "ᵈ").replace("e", "ᵉ").replace("f", "ᶠ").replace("g", "ᵍ").replace("h", "ʰ").replace("i", "ᶦ").replace("j", "ʲ").replace("k", "ᵏ").replace("l", "ˡ").replace("m", "ᵐ").replace("n", "ⁿ").replace("o", "ᵒ").replace("p", "ᵖ").replace("q", "ᑫ").replace("r", "ʳ").replace("s", "ˢ").replace("t", "ᵗ").replace("u", "ᵘ").replace("v", "ᵛ").replace("w", "ʷ").replace("x", "ˣ").replace("y", "ʸ").replace("z", "ᶻ");
|
||||
public static String slashSmaller(String remaining) {
|
||||
return remaining.toLowerCase().replace("a", "ᵃ").replace("b", "ᵇ").replace("c", "ᶜ").replace("d", "ᵈ").replace("e", "ᵉ").replace("f", "ᶠ").replace("g", "ᵍ").replace("h", "ʰ").replace("i", "ᶦ").replace("j", "ʲ").replace("k", "ᵏ").replace("l", "ˡ").replace("m", "ᵐ").replace("n", "ⁿ").replace("o", "ᵒ").replace("p", "ᵖ").replace("q", "ᑫ").replace("r", "ʳ").replace("s", "ˢ").replace("t", "ᵗ").replace("u", "ᵘ").replace("v", "ᵛ").replace("w", "ʷ").replace("x", "ˣ").replace("y", "ʸ").replace("z", "ᶻ");
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashSpoiler(String str) {
|
||||
String substring = str.substring(9);
|
||||
return "||" + substring + "||";
|
||||
public static String slashSpoiler(String remaining) {
|
||||
return "||" + remaining + "||";
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashSpoilerImg(String str) {
|
||||
String substring = str.substring(11);
|
||||
public static String slashSpoilerImg(String remaining) {
|
||||
StoreStream.getUserSettings().setImageSpoiler(true);
|
||||
return substring;
|
||||
return remaining;
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashSt(String str) {
|
||||
String substring = str.substring(4);
|
||||
return "~~" + substring + "~~";
|
||||
public static String slashSt(String remaining) {
|
||||
return "~~" + remaining + "~~";
|
||||
}
|
||||
|
||||
@DexAdd
|
||||
public static String slashUpper(String str) {
|
||||
return str.substring(7).toUpperCase();
|
||||
public static String slashUpper(String remaining) {
|
||||
return remaining.toUpperCase();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -1,6 +1,11 @@
|
|||
package com.discord.utilities.analytics;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.app.Application;
|
||||
import android.os.Bundle;
|
||||
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
|
||||
import com.PatchConfig;
|
||||
|
||||
|
@ -10,7 +15,7 @@ import lanchon.dexpatcher.annotation.DexReplace;
|
|||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
public class AdjustConfig {
|
||||
public final class AdjustConfig {
|
||||
|
||||
// notrack patches
|
||||
|
||||
|
@ -18,7 +23,7 @@ public class AdjustConfig {
|
|||
private static final String ADJUST_APP_TOKEN = "aaaaaaaaaaaa"; // TODO toggle
|
||||
|
||||
@DexEdit
|
||||
public static final class AdjustLifecycleListener {
|
||||
public static final class AdjustLifecycleListener implements Application.ActivityLifecycleCallbacks {
|
||||
|
||||
@DexWrap
|
||||
public void onActivityPaused(Activity activity) {
|
||||
|
@ -38,6 +43,35 @@ public class AdjustConfig {
|
|||
}
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void onActivityStopped(@NonNull Activity activity) {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void onActivitySaveInstanceState(@NonNull Activity activity, @NonNull Bundle outState) {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void onActivityDestroyed(@NonNull Activity activity) {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void onActivityCreated(@NonNull Activity activity, @Nullable Bundle savedInstanceState) {
|
||||
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void onActivityStarted(@NonNull Activity activity) {
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,12 +1,14 @@
|
|||
package com.discord.utilities.analytics;
|
||||
|
||||
import com.PatchConfig;
|
||||
import com.discord.simpleast.core.node.Node;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
import kotlin.Pair;
|
||||
import kotlin.jvm.functions.Function0;
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
|
@ -29,7 +31,7 @@ public class AnalyticsUtils {
|
|||
|
||||
@SuppressWarnings("UnnecessaryReturnStatement")
|
||||
@DexWrap
|
||||
public final synchronized void setTrackingData$default(Tracker tracker, String str, boolean z, int i, Object obj) {
|
||||
public static final synchronized void setTrackingData$default(Tracker tracker, String str, boolean z, int i, Object obj) {
|
||||
if (!PatchConfig.NOTRACK_ENABLED) {
|
||||
// Patch not enabled
|
||||
setTrackingData$default(tracker, str, z, i, obj);
|
||||
|
@ -39,7 +41,7 @@ public class AnalyticsUtils {
|
|||
|
||||
@SuppressWarnings("UnnecessaryReturnStatement")
|
||||
@DexWrap
|
||||
public final synchronized void track$default(Tracker tracker, String str, Map map, int i, Object obj) {
|
||||
public static final synchronized void track$default(Tracker tracker, String str, Map map, int i, Object obj) {
|
||||
if (!PatchConfig.NOTRACK_ENABLED) {
|
||||
// Patch not enabled
|
||||
track$default(tracker, str, map, i, obj);
|
||||
|
|
|
@ -1,16 +1,24 @@
|
|||
package com.discord.utilities.textprocessing;
|
||||
|
||||
import com.PatchConfig;
|
||||
import com.discordtest.BuildConfig;
|
||||
import com.discord.simpleast.core.node.Node;
|
||||
|
||||
import java.util.Collection;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
import lanchon.dexpatcher.annotation.DexReplace;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
public class MessagePreprocessor {
|
||||
public class MessagePreprocessor implements f.a.k.b.c.a {
|
||||
|
||||
// Interfaces
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void processNode(Node node) {
|
||||
|
||||
}
|
||||
// end of interfaces
|
||||
|
||||
// embedlinks patch
|
||||
@DexWrap
|
||||
|
|
|
@ -6,8 +6,9 @@ import java.util.regex.Pattern;
|
|||
|
||||
import lanchon.dexpatcher.annotation.DexAdd;
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexEdit
|
||||
@DexIgnore//TODO
|
||||
public class Rules {
|
||||
|
||||
// pseudonitro-viewer patch
|
||||
|
|
|
@ -7,7 +7,7 @@ import lanchon.dexpatcher.annotation.DexEdit;
|
|||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
@DexIgnore//TODO
|
||||
public class SpoilerNode {
|
||||
|
||||
// nospoiler patch
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
package com.discord.view.extensions;
|
||||
package com.discord.utilities.view.extensions;
|
||||
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
|
@ -1,17 +1,25 @@
|
|||
package com.discord.widgets.auth;
|
||||
|
||||
import com.PatchConfig;
|
||||
import com.discord.app.AppFragment;
|
||||
import com.discord.stores.StoreStream;
|
||||
import com.discord.view.extensions.ViewExtensions;
|
||||
import com.discord.utilities.view.extensions.ViewExtensions;
|
||||
import com.discord.views.phone.PhoneOrEmailInputView;
|
||||
import com.google.android.material.textfield.TextInputLayout;
|
||||
|
||||
import kotlin.properties.ReadOnlyProperty;
|
||||
import kotlin.reflect.KProperty;
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import lanchon.dexpatcher.annotation.DexReplace;
|
||||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
public class WidgetAuthLogin {
|
||||
@SuppressWarnings({"rawtypes", "unchecked", "ConstantConditions", "FinalPrivateMethod"})
|
||||
public class WidgetAuthLogin extends AppFragment {
|
||||
|
||||
@DexIgnore
|
||||
public WidgetAuthLogin() {}
|
||||
|
||||
@DexWrap
|
||||
private final void login(String str, boolean z) {
|
||||
|
@ -31,14 +39,27 @@ public class WidgetAuthLogin {
|
|||
login(str, z);
|
||||
}
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@DexIgnore
|
||||
public final PhoneOrEmailInputView getLoginWrap() {
|
||||
return null;
|
||||
private final ReadOnlyProperty loginWrap$delegate = null;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@DexIgnore
|
||||
private final ReadOnlyProperty passwordWrap$delegate = null;
|
||||
|
||||
@SuppressWarnings("rawtypes")
|
||||
@DexIgnore
|
||||
public static KProperty[] $$delegatedProperties;
|
||||
|
||||
|
||||
@DexReplace(target = "getLoginWrap")
|
||||
private final PhoneOrEmailInputView getLoginWrap() {
|
||||
return (PhoneOrEmailInputView) this.loginWrap$delegate.getValue(this, $$delegatedProperties[1]);
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
public final TextInputLayout getPasswordWrap() {
|
||||
return null;
|
||||
@DexReplace(target = "getPasswordWrap")
|
||||
private final TextInputLayout getPasswordWrap() {
|
||||
return (TextInputLayout) this.passwordWrap$delegate.getValue(this, $$delegatedProperties[2]);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -9,9 +9,10 @@ import java.util.ArrayList;
|
|||
import java.util.List;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexEdit;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit
|
||||
@DexIgnore//TODO
|
||||
public class EmojiPickerViewModel {
|
||||
|
||||
@DexEdit
|
||||
|
|
|
@ -10,12 +10,11 @@ import lanchon.dexpatcher.annotation.DexIgnore;
|
|||
import lanchon.dexpatcher.annotation.DexReplace;
|
||||
import lanchon.dexpatcher.annotation.DexWrap;
|
||||
|
||||
@DexEdit(target = "WidgetChatList$1")
|
||||
public class WidgetChatList$1 {
|
||||
// Lambda class made in WidgetChatList.createAdapter
|
||||
@DexEdit
|
||||
public class WidgetChatList$1 implements com.discord.widgets.chat.list.WidgetChatListAdapter.EventHandler {
|
||||
|
||||
// start of profilemention patch
|
||||
|
||||
// TODO verify patched correctly
|
||||
@DexWrap
|
||||
public void onMessageAuthorAvatarClicked(@NonNull ModelMessage modelMessage, long j) {
|
||||
if (!PatchConfig.PROFILEMENTION_ENABLED) {
|
||||
|
@ -27,11 +26,11 @@ public class WidgetChatList$1 {
|
|||
onMessageAuthorNameClicked(modelMessage, j);
|
||||
}
|
||||
|
||||
// end of profilemention patch
|
||||
|
||||
@DexIgnore
|
||||
public void onMessageAuthorNameClicked(@NonNull ModelMessage modelMessage, long j) {
|
||||
|
||||
}
|
||||
|
||||
// end of profilemention patch
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,13 @@
|
|||
package com.discord.widgets.chat.list;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class WidgetChatListAdapter {
|
||||
|
||||
@DexIgnore
|
||||
public interface EventHandler {
|
||||
|
||||
}
|
||||
|
||||
}
|
|
@ -4,6 +4,8 @@ import android.view.View;
|
|||
import android.widget.TextView;
|
||||
|
||||
import com.PatchConfig;
|
||||
import com.discord.app.AppFragment;
|
||||
import com.discord.widgets.tabs.OnTabSelectedListener;
|
||||
import com.discordtest.BuildConfig;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexAppend;
|
||||
|
@ -11,7 +13,7 @@ import lanchon.dexpatcher.annotation.DexEdit;
|
|||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexEdit
|
||||
public class WidgetSettings {
|
||||
public class WidgetSettings extends AppFragment implements OnTabSelectedListener {
|
||||
|
||||
// customversion patch
|
||||
|
||||
|
@ -34,4 +36,11 @@ public class WidgetSettings {
|
|||
return null;
|
||||
}
|
||||
|
||||
@DexIgnore
|
||||
@Override
|
||||
public void onTabSelected() {
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
package com.discord.widgets.tabs;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface OnTabSelectedListener {
|
||||
@DexIgnore
|
||||
void onTabSelected();
|
||||
}
|
|
@ -0,0 +1,25 @@
|
|||
package com.miguelgaeta.media_picker;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class MediaPicker {
|
||||
|
||||
@DexIgnore
|
||||
public interface Provider {
|
||||
@DexIgnore
|
||||
Context getContext();
|
||||
|
||||
@DexIgnore
|
||||
File getImageFile();
|
||||
|
||||
@DexIgnore
|
||||
void startActivityForResult(Intent intent, int i);
|
||||
}
|
||||
|
||||
}
|
13
app/src/main/java/f/a/k/b/c/a.java
Normal file
13
app/src/main/java/f/a/k/b/c/a.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package f.a.k.b.c;
|
||||
|
||||
import com.discord.simpleast.core.node.Node;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface a {
|
||||
|
||||
@DexIgnore
|
||||
void processNode(Node node);
|
||||
|
||||
}
|
15
app/src/main/java/g0/g.java
Normal file
15
app/src/main/java/g0/g.java
Normal file
|
@ -0,0 +1,15 @@
|
|||
package g0;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface g<T> {
|
||||
@DexIgnore
|
||||
void onCompleted();
|
||||
|
||||
@DexIgnore
|
||||
void onError(Throwable th);
|
||||
|
||||
@DexIgnore
|
||||
void onNext(T t);
|
||||
}
|
16
app/src/main/java/kotlin/Unit.java
Normal file
16
app/src/main/java/kotlin/Unit.java
Normal file
|
@ -0,0 +1,16 @@
|
|||
package kotlin;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public final class Unit {
|
||||
|
||||
@DexIgnore
|
||||
public static final Unit a = new Unit();
|
||||
|
||||
@DexIgnore
|
||||
public String toString() {
|
||||
return "kotlin.Unit";
|
||||
}
|
||||
|
||||
}
|
|
@ -3,5 +3,7 @@ package kotlin.jvm.functions;
|
|||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public class Function0 {
|
||||
public interface Function0<R> {
|
||||
@DexIgnore
|
||||
R invoke();
|
||||
}
|
||||
|
|
10
app/src/main/java/kotlin/properties/ReadOnlyProperty.java
Normal file
10
app/src/main/java/kotlin/properties/ReadOnlyProperty.java
Normal file
|
@ -0,0 +1,10 @@
|
|||
package kotlin.properties;
|
||||
|
||||
import kotlin.reflect.KProperty;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface ReadOnlyProperty<T, V> {
|
||||
@DexIgnore
|
||||
V getValue(T t, KProperty<?> kProperty);
|
||||
}
|
9
app/src/main/java/kotlin/reflect/KCallable.java
Normal file
9
app/src/main/java/kotlin/reflect/KCallable.java
Normal file
|
@ -0,0 +1,9 @@
|
|||
package kotlin.reflect;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import x.q.a;
|
||||
|
||||
@DexIgnore
|
||||
public interface KCallable<R> extends a {
|
||||
|
||||
}
|
13
app/src/main/java/kotlin/reflect/KProperty.java
Normal file
13
app/src/main/java/kotlin/reflect/KProperty.java
Normal file
|
@ -0,0 +1,13 @@
|
|||
package kotlin.reflect;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface KProperty<V> extends KCallable<V> {
|
||||
|
||||
@DexIgnore
|
||||
boolean isConst();
|
||||
|
||||
@DexIgnore
|
||||
boolean isLateinit();
|
||||
}
|
|
@ -1,8 +1,13 @@
|
|||
package rx;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import rx.functions.Action1;
|
||||
|
||||
@DexIgnore
|
||||
public class Observable<T> {
|
||||
|
||||
@DexIgnore
|
||||
public interface a<T> extends Action1<Subscriber<? super T>> {
|
||||
}
|
||||
|
||||
}
|
||||
|
|
9
app/src/main/java/rx/Subscriber.java
Normal file
9
app/src/main/java/rx/Subscriber.java
Normal file
|
@ -0,0 +1,9 @@
|
|||
package rx;
|
||||
|
||||
import g0.g;
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public abstract class Subscriber<T> implements g<T>, Subscription {
|
||||
|
||||
}
|
12
app/src/main/java/rx/Subscription.java
Normal file
12
app/src/main/java/rx/Subscription.java
Normal file
|
@ -0,0 +1,12 @@
|
|||
package rx;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface Subscription {
|
||||
@DexIgnore
|
||||
boolean isUnsubscribed();
|
||||
|
||||
@DexIgnore
|
||||
void unsubscribe();
|
||||
}
|
9
app/src/main/java/rx/functions/Action1.java
Normal file
9
app/src/main/java/rx/functions/Action1.java
Normal file
|
@ -0,0 +1,9 @@
|
|||
package rx.functions;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface Action1<T> {
|
||||
@DexIgnore
|
||||
void call(T t);
|
||||
}
|
14
app/src/main/java/rx/subjects/Subject.java
Normal file
14
app/src/main/java/rx/subjects/Subject.java
Normal file
|
@ -0,0 +1,14 @@
|
|||
package rx.subjects;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
import g0.g;
|
||||
import rx.Observable;
|
||||
|
||||
@DexIgnore
|
||||
public abstract class Subject<T, R> extends Observable<R> implements g<T> {
|
||||
|
||||
@DexIgnore
|
||||
public Subject(Observable.a<R> aVar) {
|
||||
}
|
||||
|
||||
}
|
12
app/src/main/java/x/q/a.java
Normal file
12
app/src/main/java/x/q/a.java
Normal file
|
@ -0,0 +1,12 @@
|
|||
package x.q;
|
||||
|
||||
import java.lang.annotation.Annotation;
|
||||
import java.util.List;
|
||||
|
||||
import lanchon.dexpatcher.annotation.DexIgnore;
|
||||
|
||||
@DexIgnore
|
||||
public interface a {
|
||||
@DexIgnore
|
||||
List<Annotation> getAnnotations();
|
||||
}
|
Loading…
Reference in a new issue