Adding unhiding of message request banner when receiving a new convo request.

pull/2170/head
warrickct 4 years ago
parent 8eeec6b96c
commit bc6edd7774

@ -439,7 +439,7 @@
"messageRequests": "Message Requests", "messageRequests": "Message Requests",
"requestsSubtitle": "Pending Requests", "requestsSubtitle": "Pending Requests",
"requestsPlaceholder": "No requests", "requestsPlaceholder": "No requests",
"messageRequestsDescription": "Always show the Message Request inbox", "hideRequestBannerDescription": "Hide the Message Request banner until you receive a new message request.",
"incomingCallFrom": "Incoming call from '$name$'", "incomingCallFrom": "Incoming call from '$name$'",
"ringing": "Ringing...", "ringing": "Ringing...",
"establishingConnection": "Establishing connection...", "establishingConnection": "Establishing connection...",
@ -472,7 +472,7 @@
"messageRequestAcceptedOursNoName": "You have accepted the message request", "messageRequestAcceptedOursNoName": "You have accepted the message request",
"declineRequestMessage": "Are you sure you want to decline this message request?", "declineRequestMessage": "Are you sure you want to decline this message request?",
"respondingToRequestWarning": "Sending a message to this user will automatically accept their message request and reveal your Session ID.", "respondingToRequestWarning": "Sending a message to this user will automatically accept their message request and reveal your Session ID.",
"alwaysShowMessageRequests": "Always show Message Requests", "hideRequestBanner": "Hide Message Request Banner",
"openMessageRequestInbox": "View Message Requests", "openMessageRequestInbox": "View Message Requests",
"openMessageRequestInboxDescription": "View your Message Request inbox" "openMessageRequestInboxDescription": "View your Message Request inbox"
} }

@ -6,7 +6,7 @@ import { SessionTheme } from '../../state/ducks/SessionTheme';
import { getLeftPaneLists } from '../../state/selectors/conversations'; import { getLeftPaneLists } from '../../state/selectors/conversations';
import { getQuery, getSearchResults, isSearching } from '../../state/selectors/search'; import { getQuery, getSearchResults, isSearching } from '../../state/selectors/search';
import { getFocusedSection, getOverlayMode } from '../../state/selectors/section'; import { getFocusedSection, getOverlayMode } from '../../state/selectors/section';
import { getIsMessageRequestsEnabled } from '../../state/selectors/userConfig'; import { getHideMessageRequestBanner } from '../../state/selectors/userConfig';
import { ActionsPanel } from './ActionsPanel'; import { ActionsPanel } from './ActionsPanel';
import { LeftPaneContactSection } from './LeftPaneContactSection'; import { LeftPaneContactSection } from './LeftPaneContactSection';
import { LeftPaneMessageSection } from './LeftPaneMessageSection'; import { LeftPaneMessageSection } from './LeftPaneMessageSection';
@ -29,7 +29,7 @@ const InnerLeftPaneMessageSection = () => {
const searchResults = showSearch ? useSelector(getSearchResults) : undefined; const searchResults = showSearch ? useSelector(getSearchResults) : undefined;
const lists = showSearch ? undefined : useSelector(getLeftPaneLists); const lists = showSearch ? undefined : useSelector(getLeftPaneLists);
const messageRequestsEnabled = useSelector(getIsMessageRequestsEnabled); const messageRequestsEnabled = useSelector(getHideMessageRequestBanner);
const overlayMode = useSelector(getOverlayMode); const overlayMode = useSelector(getOverlayMode);
return ( return (

@ -2,7 +2,7 @@ import React from 'react';
import { useSelector } from 'react-redux'; import { useSelector } from 'react-redux';
import styled from 'styled-components'; import styled from 'styled-components';
import { getConversationRequests } from '../../state/selectors/conversations'; import { getConversationRequests } from '../../state/selectors/conversations';
import { getIsMessageRequestsEnabled } from '../../state/selectors/userConfig'; import { getHideMessageRequestBanner } from '../../state/selectors/userConfig';
import { SessionIcon, SessionIconSize, SessionIconType } from '../icon'; import { SessionIcon, SessionIconSize, SessionIconType } from '../icon';
const StyledMessageRequestBanner = styled.div` const StyledMessageRequestBanner = styled.div`
@ -85,9 +85,9 @@ export const CirclularIcon = (props: { iconType: SessionIconType; iconSize: Sess
export const MessageRequestsBanner = (props: { handleOnClick: () => any }) => { export const MessageRequestsBanner = (props: { handleOnClick: () => any }) => {
const { handleOnClick } = props; const { handleOnClick } = props;
const conversationRequests = useSelector(getConversationRequests); const conversationRequests = useSelector(getConversationRequests);
const showRequestBannerEnabled = useSelector(getIsMessageRequestsEnabled); const hideRequestBanner = useSelector(getHideMessageRequestBanner);
if (!conversationRequests.length || !showRequestBannerEnabled) { if (!conversationRequests.length || hideRequestBanner) {
return null; return null;
} }

@ -11,7 +11,6 @@ import { setOverlayMode } from '../../../state/ducks/section';
import { getConversationController } from '../../../session/conversations'; import { getConversationController } from '../../../session/conversations';
import { forceSyncConfigurationNowIfNeeded } from '../../../session/utils/syncUtils'; import { forceSyncConfigurationNowIfNeeded } from '../../../session/utils/syncUtils';
import { BlockedNumberController } from '../../../util'; import { BlockedNumberController } from '../../../util';
import { getIsMessageRequestsEnabled } from '../../../state/selectors/userConfig';
import useKey from 'react-use/lib/useKey'; import useKey from 'react-use/lib/useKey';
/** /**
@ -59,8 +58,6 @@ export const OverlayMessageRequest = () => {
dispatch(setOverlayMode(undefined)); dispatch(setOverlayMode(undefined));
} }
const messageRequestSetting = useSelector(getIsMessageRequestsEnabled);
const buttonText = window.i18n('clearAll'); const buttonText = window.i18n('clearAll');
return ( return (
@ -73,7 +70,7 @@ export const OverlayMessageRequest = () => {
buttonType={SessionButtonType.BrandOutline} buttonType={SessionButtonType.BrandOutline}
text={buttonText} text={buttonText}
onClick={() => { onClick={() => {
void handleBlockAllRequestsClick(messageRequestSetting); void handleBlockAllRequestsClick();
}} }}
/> />
</div> </div>

@ -5,7 +5,6 @@ import { useDispatch, useSelector } from 'react-redux';
import useUpdate from 'react-use/lib/useUpdate'; import useUpdate from 'react-use/lib/useUpdate';
import { import {
createOrUpdateItem, createOrUpdateItem,
fillWithTestData,
hasLinkPreviewPopupBeenDisplayed, hasLinkPreviewPopupBeenDisplayed,
} from '../../../data/data'; } from '../../../data/data';
import { ToastUtils } from '../../../session/utils'; import { ToastUtils } from '../../../session/utils';

@ -7,7 +7,7 @@ import { CallManager } from '../../../session/utils';
import { sessionPassword, updateConfirmModal } from '../../../state/ducks/modalDialog'; import { sessionPassword, updateConfirmModal } from '../../../state/ducks/modalDialog';
import { SectionType, setOverlayMode, showLeftPaneSection } from '../../../state/ducks/section'; import { SectionType, setOverlayMode, showLeftPaneSection } from '../../../state/ducks/section';
import { toggleMessageRequests } from '../../../state/ducks/userConfig'; import { toggleMessageRequests } from '../../../state/ducks/userConfig';
import { getIsMessageRequestsEnabled } from '../../../state/selectors/userConfig'; import { getHideMessageRequestBanner } from '../../../state/selectors/userConfig';
import { SessionButtonColor } from '../../basic/SessionButton'; import { SessionButtonColor } from '../../basic/SessionButton';
import { PasswordAction } from '../../dialog/SessionPasswordDialog'; import { PasswordAction } from '../../dialog/SessionPasswordDialog';
@ -115,9 +115,9 @@ export const SettingsCategoryPrivacy = (props: {
onClickToggle={() => { onClickToggle={() => {
dispatch(toggleMessageRequests()); dispatch(toggleMessageRequests());
}} }}
title={window.i18n('alwaysShowMessageRequests')} title={window.i18n('hideRequestBanner')}
description={window.i18n('messageRequestsDescription')} description={window.i18n('hideRequestBannerDescription')}
active={useSelector(getIsMessageRequestsEnabled)} active={useSelector(getHideMessageRequestBanner)}
/> />
<SessionSettingButtonItem <SessionSettingButtonItem
title={window.i18n('openMessageRequestInbox')} title={window.i18n('openMessageRequestInbox')}

@ -4,7 +4,7 @@ import { getMessageQueue } from '../session';
import { getConversationController } from '../session/conversations'; import { getConversationController } from '../session/conversations';
import { ClosedGroupVisibleMessage } from '../session/messages/outgoing/visibleMessage/ClosedGroupVisibleMessage'; import { ClosedGroupVisibleMessage } from '../session/messages/outgoing/visibleMessage/ClosedGroupVisibleMessage';
import { PubKey } from '../session/types'; import { PubKey } from '../session/types';
import { ToastUtils, UserUtils } from '../session/utils'; import { UserUtils } from '../session/utils';
import { BlockedNumberController } from '../util'; import { BlockedNumberController } from '../util';
import { leaveClosedGroup } from '../session/group/closed-group'; import { leaveClosedGroup } from '../session/group/closed-group';
import { SignalService } from '../protobuf'; import { SignalService } from '../protobuf';
@ -19,7 +19,7 @@ import {
saveMessages, saveMessages,
updateConversation, updateConversation,
} from '../../ts/data/data'; } from '../../ts/data/data';
import { fromHexToArray, toHex } from '../session/utils/String'; import { toHex } from '../session/utils/String';
import { import {
actions as conversationActions, actions as conversationActions,
conversationChanged, conversationChanged,

@ -19,6 +19,8 @@ import { perfEnd, perfStart } from '../session/utils/Performance';
import { getAllCachedECKeyPair } from './closedGroups'; import { getAllCachedECKeyPair } from './closedGroups';
import { handleCallMessage } from './callMessage'; import { handleCallMessage } from './callMessage';
import { SettingsKey } from '../data/settings-key'; import { SettingsKey } from '../data/settings-key';
import { showMessageRequestBanner } from '../state/ducks/userConfig';
import { useUpdate } from 'react-use';
export async function handleContentMessage(envelope: EnvelopePlus, messageHash: string) { export async function handleContentMessage(envelope: EnvelopePlus, messageHash: string) {
try { try {
@ -345,11 +347,19 @@ export async function innerHandleContentMessage(
} }
} }
await getConversationController().getOrCreateAndWait( const newConvo = await getConversationController().getOrCreateAndWait(
envelope.source, envelope.source,
ConversationTypeEnum.PRIVATE ConversationTypeEnum.PRIVATE
); );
if (
newConvo.isPrivate() &&
!newConvo.isApproved() &&
window.inboxStore?.getState().userConfig.hideMessageRequests
) {
window.inboxStore?.dispatch(showMessageRequestBanner());
}
if (content.dataMessage) { if (content.dataMessage) {
if (content.dataMessage.profileKey && content.dataMessage.profileKey.length === 0) { if (content.dataMessage.profileKey && content.dataMessage.profileKey.length === 0) {
content.dataMessage.profileKey = null; content.dataMessage.profileKey = null;
@ -532,7 +542,6 @@ async function handleMessageRequestResponse(
messageRequestResponse: SignalService.MessageRequestResponse messageRequestResponse: SignalService.MessageRequestResponse
) { ) {
const { isApproved } = messageRequestResponse; const { isApproved } = messageRequestResponse;
if (!messageRequestResponse) { if (!messageRequestResponse) {
window?.log?.error('handleMessageRequestResponse: Invalid parameters -- dropping message.'); window?.log?.error('handleMessageRequestResponse: Invalid parameters -- dropping message.');
await removeFromCache(envelope); await removeFromCache(envelope);
@ -540,12 +549,7 @@ async function handleMessageRequestResponse(
} }
const convoId = envelope.source; const convoId = envelope.source;
// TODO: commenting out, including in one larger function for now
// await updateConversationDidApproveMe(toHex(publicKey), isApproved);
const conversationToApprove = getConversationController().get(convoId); const conversationToApprove = getConversationController().get(convoId);
if (!conversationToApprove || conversationToApprove.didApproveMe() === isApproved) { if (!conversationToApprove || conversationToApprove.didApproveMe() === isApproved) {
window?.log?.info( window?.log?.info(
'Conversation already contains the correct value for the didApproveMe field.' 'Conversation already contains the correct value for the didApproveMe field.'
@ -553,7 +557,6 @@ async function handleMessageRequestResponse(
return; return;
} }
// TODO: Maybe move this to conversation interactions
await conversationToApprove.setIsApproved(isApproved); await conversationToApprove.setIsApproved(isApproved);
await conversationToApprove.setDidApproveMe(isApproved); await conversationToApprove.setDidApproveMe(isApproved);
if (isApproved === true) { if (isApproved === true) {

@ -35,7 +35,7 @@ export const persistConfig = {
const persistedReducer = persistReducer(persistConfig, rootReducer); const persistedReducer = persistReducer(persistConfig, rootReducer);
// Exclude logger if we're in production mode // Exclude logger if we're in production mode
const disableLogging = true; //; env === 'production' || true; // ALWAYS TURNED OFF const disableLogging = false; //; env === 'production' || true; // ALWAYS TURNED OFF
const middlewareList = disableLogging ? [promiseMiddleware] : [logger, promiseMiddleware]; const middlewareList = disableLogging ? [promiseMiddleware] : [logger, promiseMiddleware];
export const createStore = (initialState: any) => export const createStore = (initialState: any) =>

@ -7,13 +7,13 @@ import { createSlice } from '@reduxjs/toolkit';
export interface UserConfigState { export interface UserConfigState {
audioAutoplay: boolean; audioAutoplay: boolean;
showRecoveryPhrasePrompt: boolean; showRecoveryPhrasePrompt: boolean;
messageRequests: boolean; hideMessageRequests: boolean;
} }
export const initialUserConfigState = { export const initialUserConfigState = {
audioAutoplay: false, audioAutoplay: false,
showRecoveryPhrasePrompt: true, showRecoveryPhrasePrompt: true,
messageRequests: false, hideMessageRequests: false,
}; };
const userConfigSlice = createSlice({ const userConfigSlice = createSlice({
@ -27,11 +27,19 @@ const userConfigSlice = createSlice({
state.showRecoveryPhrasePrompt = false; state.showRecoveryPhrasePrompt = false;
}, },
toggleMessageRequests: state => { toggleMessageRequests: state => {
state.messageRequests = !state.messageRequests; state.hideMessageRequests = !state.hideMessageRequests;
},
showMessageRequestBanner: state => {
state.hideMessageRequests = false;
}, },
}, },
}); });
const { actions, reducer } = userConfigSlice; const { actions, reducer } = userConfigSlice;
export const { toggleAudioAutoplay, disableRecoveryPhrasePrompt, toggleMessageRequests } = actions; export const {
toggleAudioAutoplay,
disableRecoveryPhrasePrompt,
toggleMessageRequests,
showMessageRequestBanner,
} = actions;
export const userConfigReducer = reducer; export const userConfigReducer = reducer;

@ -18,7 +18,7 @@ import { ConversationTypeEnum } from '../../models/conversation';
import { LocalizerType } from '../../types/Util'; import { LocalizerType } from '../../types/Util';
import { ConversationHeaderTitleProps } from '../../components/conversation/ConversationHeader'; import { ConversationHeaderTitleProps } from '../../components/conversation/ConversationHeader';
import _ from 'lodash'; import _ from 'lodash';
import { getIsMessageRequestsEnabled } from './userConfig'; import { getHideMessageRequestBanner } from './userConfig';
import { ReplyingToMessageProps } from '../../components/conversation/composition/CompositionBox'; import { ReplyingToMessageProps } from '../../components/conversation/composition/CompositionBox';
import { MessageAttachmentSelectorProps } from '../../components/conversation/message/message-content/MessageAttachment'; import { MessageAttachmentSelectorProps } from '../../components/conversation/message/message-content/MessageAttachment';
import { MessageAuthorSelectorProps } from '../../components/conversation/message/message-content/MessageAuthorText'; import { MessageAuthorSelectorProps } from '../../components/conversation/message/message-content/MessageAuthorText';
@ -444,7 +444,7 @@ const _getConversationRequests = (
export const getConversationRequests = createSelector( export const getConversationRequests = createSelector(
getSortedConversations, getSortedConversations,
getIsMessageRequestsEnabled, getHideMessageRequestBanner,
_getConversationRequests _getConversationRequests
); );
@ -473,15 +473,10 @@ const _getPrivateContactsPubkeys = (
*/ */
export const getPrivateContactsPubkeys = createSelector( export const getPrivateContactsPubkeys = createSelector(
getSortedConversations, getSortedConversations,
getIsMessageRequestsEnabled,
_getPrivateContactsPubkeys _getPrivateContactsPubkeys
); );
export const getLeftPaneLists = createSelector( export const getLeftPaneLists = createSelector(getSortedConversations, _getLeftPaneLists);
getSortedConversations,
getIsMessageRequestsEnabled,
_getLeftPaneLists
);
export const getMe = createSelector( export const getMe = createSelector(
[getConversationLookup, getOurNumber], [getConversationLookup, getOurNumber],

@ -14,7 +14,7 @@ export const getShowRecoveryPhrasePrompt = createSelector(
(state: UserConfigState): boolean => state.showRecoveryPhrasePrompt (state: UserConfigState): boolean => state.showRecoveryPhrasePrompt
); );
export const getIsMessageRequestsEnabled = createSelector( export const getHideMessageRequestBanner = createSelector(
getUserConfig, getUserConfig,
(state: UserConfigState): boolean => state.messageRequests (state: UserConfigState): boolean => state.hideMessageRequests
); );

@ -50,7 +50,7 @@ export type LocalizerKeys =
| 'viewMenuToggleDevTools' | 'viewMenuToggleDevTools'
| 'fileSizeWarning' | 'fileSizeWarning'
| 'openGroupURL' | 'openGroupURL'
| 'messageRequestsDescription' | 'hideRequestBannerDescription'
| 'hideMenuBarDescription' | 'hideMenuBarDescription'
| 'search' | 'search'
| 'pickClosedGroupMember' | 'pickClosedGroupMember'
@ -473,5 +473,5 @@ export type LocalizerKeys =
| 'declineRequestMessage' | 'declineRequestMessage'
| 'openMessageRequestInbox' | 'openMessageRequestInbox'
| 'openMessageRequestInboxDescription' | 'openMessageRequestInboxDescription'
| 'alwaysShowMessageRequests' | 'hideRequestBanner'
| 'reportIssue'; | 'reportIssue';

Loading…
Cancel
Save