Merge pull request #444 from robintown/wt-small

Adapt walkie-talkie layout to hide controls at small sizes
This commit is contained in:
Robin 2022-07-05 16:07:55 -04:00 committed by GitHub
commit 631e63a0b5
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 90 additions and 68 deletions

View file

@ -1,17 +1,28 @@
.pttButton { .pttButton {
width: 100vw; width: 100vw;
height: 100vh; aspect-ratio: 1;
max-height: 232px; max-height: min(232px, calc(100vh - 16px));
max-width: 232px; max-width: min(232px, calc(100vw - 16px));
border-radius: 116px; border-radius: 116px;
color: var(--primary-content); color: var(--primary-content);
border: 6px solid var(--accent); border: 6px solid var(--accent);
background-color: #21262c; background-color: #21262c;
position: relative; position: relative;
padding: 0; padding: 0;
margin: 4px;
cursor: pointer; cursor: pointer;
} }
.micIcon {
max-height: 50%;
}
.avatar {
/* Remove explicit size to allow avatar to scale with the button */
width: unset !important;
height: unset !important;
}
.talking { .talking {
background-color: var(--accent); background-color: var(--accent);
cursor: unset; cursor: unset;

View file

@ -41,6 +41,7 @@
.talkingInfo { .talkingInfo {
display: flex; display: flex;
flex-shrink: 0;
flex-direction: column; flex-direction: column;
align-items: center; align-items: center;
margin-bottom: 20px; margin-bottom: 20px;

View file

@ -113,6 +113,7 @@ export const PTTCallView: React.FC<Props> = ({
useModalTriggerState(); useModalTriggerState();
const [containerRef, bounds] = useMeasure({ polyfill: ResizeObserver }); const [containerRef, bounds] = useMeasure({ polyfill: ResizeObserver });
const facepileSize = bounds.width < 800 ? "sm" : "md"; const facepileSize = bounds.width < 800 ? "sm" : "md";
const showControls = bounds.height > 500;
const pttButtonSize = 232; const pttButtonSize = 232;
const { audioOutput } = useMediaHandler(); const { audioOutput } = useMediaHandler();
@ -172,6 +173,7 @@ export const PTTCallView: React.FC<Props> = ({
// https://github.com/vector-im/element-call/issues/328 // https://github.com/vector-im/element-call/issues/328
show={false} show={false}
/> />
{showControls && (
<Header className={styles.header}> <Header className={styles.header}>
<LeftNav> <LeftNav>
<RoomSetupHeaderInfo <RoomSetupHeaderInfo
@ -183,7 +185,10 @@ export const PTTCallView: React.FC<Props> = ({
</LeftNav> </LeftNav>
<RightNav /> <RightNav />
</Header> </Header>
)}
<div className={styles.center}> <div className={styles.center}>
{showControls && (
<>
<div className={styles.participants}> <div className={styles.participants}>
<p>{`${participants.length} ${ <p>{`${participants.length} ${
participants.length > 1 ? "people" : "person" participants.length > 1 ? "people" : "person"
@ -209,9 +214,12 @@ export const PTTCallView: React.FC<Props> = ({
{!isEmbedded && <HangupButton onPress={onLeave} />} {!isEmbedded && <HangupButton onPress={onLeave} />}
<InviteButton onPress={() => inviteModalState.open()} /> <InviteButton onPress={() => inviteModalState.open()} />
</div> </div>
</>
)}
<div className={styles.pttButtonContainer}> <div className={styles.pttButtonContainer}>
{activeSpeakerUserId ? ( {showControls &&
(activeSpeakerUserId ? (
<div className={styles.talkingInfo}> <div className={styles.talkingInfo}>
<h2> <h2>
{!activeSpeakerIsLocalUser && ( {!activeSpeakerIsLocalUser && (
@ -225,7 +233,7 @@ export const PTTCallView: React.FC<Props> = ({
</div> </div>
) : ( ) : (
<div className={styles.talkingInfo} /> <div className={styles.talkingInfo} />
)} ))}
<PTTButton <PTTButton
enabled={!feedbackModalState.isOpen} enabled={!feedbackModalState.isOpen}
showTalkOverError={showTalkOverError} showTalkOverError={showTalkOverError}
@ -241,6 +249,7 @@ export const PTTCallView: React.FC<Props> = ({
enqueueNetworkWaiting={enqueueTalkingExpected} enqueueNetworkWaiting={enqueueTalkingExpected}
setNetworkWaiting={setTalkingExpected} setNetworkWaiting={setTalkingExpected}
/> />
{showControls && (
<p className={styles.actionTip}> <p className={styles.actionTip}>
{getPromptText( {getPromptText(
networkWaiting, networkWaiting,
@ -253,6 +262,7 @@ export const PTTCallView: React.FC<Props> = ({
connected connected
)} )}
</p> </p>
)}
{userMediaFeeds.map((callFeed) => ( {userMediaFeeds.map((callFeed) => (
<PTTFeed <PTTFeed
key={callFeed.userId} key={callFeed.userId}
@ -260,7 +270,7 @@ export const PTTCallView: React.FC<Props> = ({
audioOutputDevice={audioOutput} audioOutputDevice={audioOutput}
/> />
))} ))}
{isAdmin && ( {isAdmin && showControls && (
<Toggle <Toggle
isSelected={talkOverEnabled} isSelected={talkOverEnabled}
onChange={setTalkOverEnabled} onChange={setTalkOverEnabled}
@ -271,7 +281,7 @@ export const PTTCallView: React.FC<Props> = ({
</div> </div>
</div> </div>
{inviteModalState.isOpen && ( {inviteModalState.isOpen && showControls && (
<InviteModal roomId={roomId} {...inviteModalProps} /> <InviteModal roomId={roomId} {...inviteModalProps} />
)} )}
</div> </div>