Skip to content

Commit

Permalink
Merge pull request #65 from rodit/bitmoji-presence
Browse files Browse the repository at this point in the history
Fix bitmoji presence/typing hiding.
  • Loading branch information
rodit authored Apr 27, 2022
2 parents 0cb4193 + a16d532 commit 5f2057f
Show file tree
Hide file tree
Showing 8 changed files with 100 additions and 37 deletions.
Binary file modified app/libs/snapmod.jar
Binary file not shown.
1 change: 0 additions & 1 deletion app/src/main/java/xyz/rodit/snapmod/SnapHooks.java
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;
import xyz.rodit.snapmod.features.FeatureContext;
import xyz.rodit.snapmod.features.FeatureManager;
import xyz.rodit.snapmod.mappings.MainActivity;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
import xyz.rodit.snapmod.features.conversations.MessageInterceptor;
import xyz.rodit.snapmod.features.conversations.PreventBitmojiPresence;
import xyz.rodit.snapmod.features.conversations.PreventReadReceipts;
import xyz.rodit.snapmod.features.conversations.PreventTypingNotifications;
import xyz.rodit.snapmod.features.conversations.SnapInteractionFilter;
import xyz.rodit.snapmod.features.conversations.SnapOverrides;
import xyz.rodit.snapmod.features.friendsfeed.FeedModifier;
Expand Down Expand Up @@ -43,6 +44,7 @@ public void load() {
add(MessageInterceptor::new);
add(PreventBitmojiPresence::new);
add(PreventReadReceipts::new);
add(PreventTypingNotifications::new);
add(SnapInteractionFilter::new);
add(SnapOverrides::new);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,42 +2,47 @@

import de.robv.android.xposed.XC_MethodHook;
import xyz.rodit.snapmod.features.FeatureContext;
import xyz.rodit.snapmod.mappings.Callback;
import xyz.rodit.snapmod.mappings.ConversationManager;
import xyz.rodit.snapmod.util.UUIDUtil;
import xyz.rodit.snapmod.mappings.ArroyoMessageListDataProvider;
import xyz.rodit.snapmod.mappings.ChatContext;
import xyz.rodit.snapmod.mappings.PresenceSession;

public class PreventBitmojiPresence extends StealthFeature {

private String currentConversationId;

public PreventBitmojiPresence(FeatureContext context) {
super(context);
}

@Override
protected void init() {
setClass(ConversationManager.getMapping());
setClass(PresenceSession.getMapping());

putFilters(ConversationManager.enterConversation,
putFilters(PresenceSession.activate,
p -> null,
p -> UUIDUtil.fromSnap(p.args[0]),
new NullFilter(context, "hide_enter_conversation"));
p -> currentConversationId,
new NullFilter(context, "hide_bitmoji_presence"));

putFilters(ConversationManager.exitConversation,
putFilters(PresenceSession.deactivate,
p -> null,
p -> UUIDUtil.fromSnap(p.args[0]),
new NullFilter(context, "hide_exit_conversation"));
p -> currentConversationId,
new NullFilter(context, "hide_bitmoji_presence"));

putFilters(ConversationManager.sendTypingNotification,
putFilters(PresenceSession.processTypingActivity,
p -> null,
p -> UUIDUtil.fromSnap(p.args[0]),
new NullFilter(context, "hide_typing"));
p -> currentConversationId,
new NullFilter(context, "hide_bitmoji_presence"));
}

@Override
protected void onPostHook(XC_MethodHook.MethodHookParam param) {
for (Object o : param.args) {
if (Callback.isInstance(o)) {
Callback.wrap(o).onSuccess();
protected void performHooks() {
super.performHooks();

ArroyoMessageListDataProvider.enterConversation.hook(new XC_MethodHook() {
@Override
protected void beforeHookedMethod(MethodHookParam param) {
currentConversationId = ChatContext.wrap(param.args[0]).getConversationId();
}
}
});
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
package xyz.rodit.snapmod.features.conversations;

import de.robv.android.xposed.XC_MethodHook;
import xyz.rodit.snapmod.features.FeatureContext;
import xyz.rodit.snapmod.mappings.Callback;
import xyz.rodit.snapmod.mappings.ConversationManager;
import xyz.rodit.snapmod.util.UUIDUtil;

public class PreventTypingNotifications extends StealthFeature {

public PreventTypingNotifications(FeatureContext context) {
super(context);
}

@Override
protected void init() {
setClass(ConversationManager.getMapping());

putFilters(ConversationManager.sendTypingNotification,
p -> null,
p -> UUIDUtil.fromSnap(p.args[0]),
new NullFilter(context, "hide_typing"));
}

@Override
protected void onPostHook(XC_MethodHook.MethodHookParam param) {
for (Object o : param.args) {
if (Callback.isInstance(o)) {
Callback.wrap(o).onSuccess();
}
}
}
}
10 changes: 4 additions & 6 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,8 @@
<string name="hide_screenshot_title">Hide Screenshot/Record Notifications</string>
<string name="hide_save_gallery_title">Hide Saved to Camera Roll</string>
<string name="hide_replay_title">Hide Replay Notifications</string>
<string name="hide_enter_conversation_title">🧪 Hide Enter Conversation (Bitmoji)</string>
<string name="hide_exit_conversation_title">🧪 Hide Exit Conversation (Bitmoji)</string>
<string name="hide_typing_title">Hide Typing Status (Bitmoji)</string>
<string name="hide_bitmoji_presence_title">Hide Bitmoji Presence</string>
<string name="hide_typing_title">Hide Typing Notifications</string>
<string name="save_any_title">Save Any Message</string>
<string name="dont_release_messages_title">🧪 Don\'t Release Messages</string>
<string name="disable_bitmojis_title">Disable Bitmojis</string>
Expand Down Expand Up @@ -66,9 +65,8 @@
<string name="hide_screenshot_description">Prevents screenshot notifications from being sent.</string>
<string name="hide_save_gallery_description">Prevents saved to camera roll messages from being sent.</string>
<string name="hide_replay_description">Prevents snap replay messages from being sent.</string>
<string name="hide_enter_conversation_description">Prevents other users from seeing your bitmoji enter a conversation.</string>
<string name="hide_exit_conversation_description">Prevents other users from seeing your bitmoji exit a conversation.</string>
<string name="hide_typing_description">Prevents other users from seeing if you are typing or not.</string>
<string name="hide_bitmoji_presence_description">Prevents other users from seeing your bitmoji on the chat screen.</string>
<string name="hide_typing_description">Prevents typing push notifications from being sent to other users.</string>
<string name="save_any_description">Allows any message type to be saved. This is sometimes required for saving snaps and audio notes.</string>
<string name="dont_release_description">Prevents messages from being \'released\'. This should prevent them from being deleted, although I am unsure.</string>
<string name="disable_bitmojis_description">Disables all Bitmojis throughout the app.</string>
Expand Down
18 changes: 6 additions & 12 deletions app/src/main/res/xml/root_preferences.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,12 @@
app:summary="@string/hide_save_gallery_description"
app:iconSpaceReserved="false" />

<SwitchPreferenceCompat
app:key="hide_bitmoji_presence"
app:title="@string/hide_bitmoji_presence_title"
app:summary="@string/hide_bitmoji_presence_description"
app:iconSpaceReserved="false" />

<SwitchPreferenceCompat
app:key="hide_typing"
app:title="@string/hide_typing_title"
Expand Down Expand Up @@ -89,18 +95,6 @@
app:summary="@string/hide_save_description"
app:iconSpaceReserved="false" />

<SwitchPreferenceCompat
app:key="hide_enter_conversation"
app:title="@string/hide_enter_conversation_title"
app:summary="@string/hide_enter_conversation_description"
app:iconSpaceReserved="false" />

<SwitchPreferenceCompat
app:key="hide_exit_conversation"
app:title="@string/hide_exit_conversation_title"
app:summary="@string/hide_exit_conversation_description"
app:iconSpaceReserved="false" />

<SwitchPreferenceCompat
app:key="dont_release"
app:title="@string/dont_release_messages_title"
Expand Down
32 changes: 32 additions & 0 deletions snap.ds
Original file line number Diff line number Diff line change
Expand Up @@ -120,6 +120,14 @@ class LocalMessageContent expects com.snapchat.client.messaging.LocalMessageCont
!ContentType $getContentType()
}

[certain]
class PresenceSession expects com.snapchat.talkcorev3.PresenceSession$CppProxy {

void $activate()
void $deactivate()
void $processTypingActivity(...)
}

[certain]
class NetworkApi expects com.snapchat.client.network_api.NetworkApi$CppProxy {

Expand Down Expand Up @@ -1357,4 +1365,28 @@ class DiscoverFeedSection {
boolean $equals(...) {
.string contains "DiscoverFeedSection";
}
}

[certain]
class ChatContext {

[discard] long feedId;
String conversationId;

String $toString() {
.string "ChatContext(feedId=";
.string contains "conversationId=";
}
}

[certain]
class ArroyoMessageListDataProvider {

void $<init>(...) {
.string "ArroyoMessageListDataProvider";
}

* enterConversation(!ChatContext, ...) {
.string "NativeSessionWrapper:enterConversation";
}
}

0 comments on commit 5f2057f

Please sign in to comment.