264 lines
11 KiB
TypeScript
264 lines
11 KiB
TypeScript
// Metro module 16281 (f16282).
|
|
import { NativeModules } from "react-native";
|
|
import JoinedThreadsStore from "../../threads/JoinedThreadsStore";
|
|
import AuthenticationStore from "../../../stores/AuthenticationStore";
|
|
import ChannelStore from "../../../stores/ChannelStore";
|
|
import UserGuildSettingsStore from "../../../stores/UserGuildSettingsStore";
|
|
import PushNotificationPermissionStore, { PermissionPromptType } from "../../../stores/native/PushNotificationPermissionStore";
|
|
import { EventActionLocation, NOTIFICATION_REACTIVATION_ACTIONSHEET_KEY } from "./components/notification/NotificationPermissionConstants";
|
|
import { AnalyticEvents, GuildFeatures, RelationshipTypes } from "../../../Constants";
|
|
import { NotificationAuthorizationStatus } from "../../native_permissions/NativePermissionConstants";
|
|
import ActionSheetActionCreators from "../../action_sheet/native/ActionSheetActionCreators";
|
|
import { ImpressionNames } from "../../../_bundle/Module503";
|
|
import Module3771 from "../../../_bundle/Module3771";
|
|
import { setPushPermissionReactivationSeen, updateNotificationAuthorizationStatus, setPushNotificationPermissionEligibleForPrompt } from "../../../actions/native/PushNotificationActionCreators";
|
|
import { allowInAppNotifications } from "../../notifications/NotificationTextUtils";
|
|
import AnalyticsUtils from "../../../utils/AnalyticsUtils";
|
|
import { isIOS } from "../../../utils/PlatformUtils";
|
|
import AutomaticLifecycleManager from "../../../lib/AutomaticLifecycleManager";
|
|
import ContextualOptInNudgeHoldoutExperiment from "./ContextualOptInNudgeHoldoutExperiment";
|
|
import { AppStates } from "../../../ConstantsIOS";
|
|
let c11699_17, shouldShowPrompt, shouldShowReactivationPrompt, c11699_23, showPrompt, _logNotificationPermissionStatus;
|
|
const haveNotSeenPromptSince = function haveNotSeenPromptSince(a0, a1) {
|
|
const r7 = PushNotificationPermissionStore.getState().promptLastSeen[a0];
|
|
return r7 == null || (c11699_17.includes(a0) ? Module3771().diff(r7, "days") >= 1 : void 0);
|
|
};
|
|
shouldShowPrompt = async function shouldShowPrompt(c28318_0) {
|
|
let c28318_2;
|
|
c28318_2 = void 0;
|
|
let c31014_0 = c28318_0;
|
|
let c31014_1 = await NativeModules.NativePermissionManager.getNotificationAuthorizationStatus();
|
|
return (c31014_1 === NotificationAuthorizationStatus.UNDETERMINED || c31014_1 === NotificationAuthorizationStatus.PROVISIONAL) && (0, haveNotSeenPromptSince)(c31014_0, 1);
|
|
};
|
|
shouldShowReactivationPrompt = async function shouldShowReactivationPrompt(c28319_0) {
|
|
let c28319_2;
|
|
c28319_2 = void 0;
|
|
let c31015_0 = c28319_0;
|
|
return await NativeModules.NativePermissionManager.getNotificationAuthorizationStatus() === NotificationAuthorizationStatus.DENIED && (0, haveNotSeenPromptSince)(c31015_0, 1);
|
|
};
|
|
showPrompt = function showPrompt(c22941_0, action_location, a2) {
|
|
if (c11699_23 != null) {
|
|
clearTimeout(c11699_23);
|
|
}
|
|
c11699_23 = setTimeout(() => {
|
|
setPushPermissionReactivationSeen(c22941_0);
|
|
ActionSheetActionCreators.openLazy(import("./components/notification/NotificationReactivationActionSheet"), NOTIFICATION_REACTIVATION_ACTIONSHEET_KEY, {
|
|
impressionName: ImpressionNames.PUSH_NOTIFICATION_REACTIVATION_PROMPT,
|
|
impressionProperties: {
|
|
action_location
|
|
},
|
|
location: action_location
|
|
});
|
|
}, a2);
|
|
};
|
|
_logNotificationPermissionStatus = async function _logNotificationPermissionStatus() {
|
|
let c28320_1;
|
|
c28320_1 = void 0;
|
|
let c31016_0 = await NativeModules.NativePermissionManager.getNotificationAuthorizationStatus();
|
|
let c31016_1 = allowInAppNotifications();
|
|
AnalyticsUtils.track(AnalyticEvents.NOTIFICATION_PERMISSION_STATUS, {
|
|
os_enabled: c31016_0 === NotificationAuthorizationStatus.AUTHORIZED,
|
|
foreground_app_enabled: c31016_1,
|
|
background_app_enabled: c31016_1,
|
|
notification_authorization_status: isIOS() ? c31016_0 : null
|
|
});
|
|
};
|
|
c11699_17 = [PermissionPromptType.FRIEND_REQUEST_SENT, PermissionPromptType.INVITE_ACCEPTED];
|
|
c11699_23 = null;
|
|
class NotificationPermissionManager extends AutomaticLifecycleManager {
|
|
constructor() {
|
|
let c22943_0;
|
|
let c22944_0;
|
|
let c22945_0;
|
|
let c22946_0;
|
|
let c22947_0, c22947_1;
|
|
super(...arguments);
|
|
const _this = this;
|
|
this.previousAppState = null;
|
|
this.actions = {
|
|
MESSAGE_CREATE: (a0) => {
|
|
_this.handleMessageCreate(a0);
|
|
_this.handleMessageCreateForNudge(a0);
|
|
},
|
|
MESSAGE_REACTION_ADD: (a0) => {
|
|
_this.handleReactionAddForNudge(a0);
|
|
},
|
|
INVITE_ACCEPT_SUCCESS: (a0) => {
|
|
_this.handleInviteAccept(a0);
|
|
},
|
|
RELATIONSHIP_ADD: (a0) => {
|
|
_this.handleSendFriendRequest(a0);
|
|
},
|
|
POST_CONNECTION_OPEN: () => {
|
|
_this.handleConnectionOpen();
|
|
},
|
|
APP_STATE_UPDATE: (a0) => {
|
|
_this.handleAppStateUpdate(a0);
|
|
}
|
|
};
|
|
c22943_0 = this;
|
|
this.handleConnectionOpen = async () => {
|
|
let c31017_0;
|
|
c31017_0 = void 0;
|
|
await _logNotificationPermissionStatus();
|
|
await c22943_0._handleNotificationAuthorizationStatusUpdate();
|
|
};
|
|
c22944_0 = void 0;
|
|
c22944_0 = async (c31018_0) => {
|
|
let c31018_2;
|
|
let c31808_0, c31808_1, c31808_2, c31808_3;
|
|
L23: {
|
|
c31018_2 = void 0;
|
|
c31808_0 = void 0;
|
|
c31808_1 = void 0;
|
|
c31808_2 = void 0;
|
|
c31808_3 = void 0;
|
|
c31808_0 = c31018_0.message;
|
|
c31808_1 = c31018_0.optimistic;
|
|
c31808_2 = c31018_0.isPushNotification;
|
|
c31808_3 = c31018_0.sendMessageOptions;
|
|
await void 0;
|
|
if (!(c31808_1 || c31808_2 || c31808_3 != null)) {
|
|
const r51 = c31808_0;
|
|
const r59 = (r51 == null ? void 0 : r51.author?.id) === AuthenticationStore.getId();
|
|
if (r59) {
|
|
if (!await (0, shouldShowPrompt)(PermissionPromptType.MESSAGE_SENT)) {
|
|
break L23;
|
|
}
|
|
} else if (!r59) {
|
|
break L23;
|
|
}
|
|
(0, showPrompt)(PermissionPromptType.MESSAGE_SENT, EventActionLocation.MESSAGE_SENT, 1000);
|
|
}
|
|
}
|
|
};
|
|
this.handleMessageCreate = function() {
|
|
return c22944_0.apply(this, arguments);
|
|
};
|
|
c22945_0 = void 0;
|
|
c22945_0 = async (c31019_0) => {
|
|
let features, c31019_3;
|
|
let c31809_0;
|
|
L23: {
|
|
c31019_3 = void 0;
|
|
c31809_0 = void 0;
|
|
c31809_0 = c31019_0.invite;
|
|
await void 0;
|
|
const features2 = c31809_0.guild?.features;
|
|
features = features2;
|
|
if (features2 == null) {
|
|
features = [];
|
|
}
|
|
if (!features.includes(GuildFeatures.COMMUNITY)) {
|
|
L17: {
|
|
let inHoldout = ContextualOptInNudgeHoldoutExperiment.getConfig({
|
|
location: "NotificationPermissionManager"
|
|
}).inHoldout;
|
|
if (inHoldout) {
|
|
const r88 = await (0, shouldShowPrompt)(PermissionPromptType.INVITE_ACCEPTED);
|
|
inHoldout = r88;
|
|
if (!r88) {
|
|
if (!await (0, shouldShowReactivationPrompt)(PermissionPromptType.INVITE_ACCEPTED)) {
|
|
break L23;
|
|
}
|
|
break L17;
|
|
}
|
|
}
|
|
if (!inHoldout) {
|
|
break L23;
|
|
}
|
|
}
|
|
(0, showPrompt)(PermissionPromptType.INVITE_ACCEPTED, EventActionLocation.INVITE_ACCEPTED, 1000);
|
|
}
|
|
}
|
|
};
|
|
this.handleInviteAccept = function() {
|
|
return c22945_0.apply(this, arguments);
|
|
};
|
|
c22946_0 = void 0;
|
|
c22946_0 = async (c31020_0) => {
|
|
let c31020_2;
|
|
let c31810_0;
|
|
L13: {
|
|
c31020_2 = void 0;
|
|
c31810_0 = void 0;
|
|
c31810_0 = c31020_0.relationship;
|
|
await void 0;
|
|
L12: {
|
|
let r50 = c31810_0.type === RelationshipTypes.PENDING_OUTGOING;
|
|
if (r50) {
|
|
const r72 = await (0, shouldShowPrompt)(PermissionPromptType.FRIEND_REQUEST_SENT);
|
|
r50 = r72;
|
|
if (!r72) {
|
|
if (!await (0, shouldShowReactivationPrompt)(PermissionPromptType.FRIEND_REQUEST_SENT)) {
|
|
break L13;
|
|
}
|
|
break L12;
|
|
}
|
|
}
|
|
if (!r50) {
|
|
break L13;
|
|
}
|
|
}
|
|
(0, showPrompt)(PermissionPromptType.FRIEND_REQUEST_SENT, EventActionLocation.FRIEND_REQUEST_SENT, 100);
|
|
}
|
|
};
|
|
this.handleSendFriendRequest = function() {
|
|
return c22946_0.apply(this, arguments);
|
|
};
|
|
c22947_0 = void 0;
|
|
c22947_1 = this;
|
|
c22947_0 = async (c31021_0) => {
|
|
let c31021_2;
|
|
c31021_2 = void 0;
|
|
let c31811_0 = c31021_0.state;
|
|
await void 0;
|
|
let c31811_1 = c22947_1.previousAppState === AppStates.BACKGROUND;
|
|
let c31811_2 = c31811_0 === AppStates.ACTIVE;
|
|
if (c31811_1 && c31811_2) {
|
|
await c22947_1._handleNotificationAuthorizationStatusUpdate();
|
|
}
|
|
if (c31811_0 === AppStates.ACTIVE) {
|
|
await (0, _logNotificationPermissionStatus)();
|
|
}
|
|
c22947_1.previousAppState = c31811_0;
|
|
};
|
|
this.handleAppStateUpdate = function() {
|
|
return c22947_0.apply(this, arguments);
|
|
};
|
|
this._handleNotificationAuthorizationStatusUpdate = async () => {
|
|
let c31022_1;
|
|
c31022_1 = void 0;
|
|
let c31812_0 = await NativeModules.NativePermissionManager.getNotificationAuthorizationStatus();
|
|
updateNotificationAuthorizationStatus(c31812_0);
|
|
};
|
|
}
|
|
handleMessageCreateForNudge({ channelId, message, optimistic, isPushNotification, sendMessageOptions }) {
|
|
if (!optimistic && !isPushNotification && sendMessageOptions == null) {
|
|
if ((message == null ? void 0 : message.author?.id) === AuthenticationStore.getId()) {
|
|
const channel = ChannelStore.getChannel(channelId);
|
|
if (channel != null) {
|
|
const guildId = channel.getGuildId();
|
|
if (!(channel.isThread() ? JoinedThreadsStore.isMuted(channel.id) : UserGuildSettingsStore.isChannelMuted(guildId, channel.id))) {
|
|
setPushNotificationPermissionEligibleForPrompt(PermissionPromptType.CHANNEL_BANNER);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
handleReactionAddForNudge(a0) {
|
|
const { channelId, userId } = a0;
|
|
if (!a0.optimistic && userId === AuthenticationStore.getId()) {
|
|
const channel = ChannelStore.getChannel(channelId);
|
|
if (channel != null) {
|
|
const guildId = channel.getGuildId();
|
|
if (!(channel.isThread() ? JoinedThreadsStore.isMuted(channel.id) : UserGuildSettingsStore.isChannelMuted(guildId, channel.id))) {
|
|
setPushNotificationPermissionEligibleForPrompt(PermissionPromptType.POST_REACTION_BANNER);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
const notificationPermissionManager = new NotificationPermissionManager();
|
|
export default notificationPermissionManager;
|