X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?p=staging%2Fsoundmanager.git;a=blobdiff_plain;f=sample%2Fphone%2Fapp%2FDialer.qml;fp=sample%2Fphone%2Fapp%2FDialer.qml;h=131482604525c160bf69124b14180d686948991d;hp=0000000000000000000000000000000000000000;hb=fde77416ce98487a0bb50f5e049e7cb640ffa079;hpb=2e602801b372b0b68111316b89f567213e3ea378 diff --git a/sample/phone/app/Dialer.qml b/sample/phone/app/Dialer.qml new file mode 100644 index 0000000..1314826 --- /dev/null +++ b/sample/phone/app/Dialer.qml @@ -0,0 +1,280 @@ +/* + * Copyright (C) 2016 The Qt Company Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import QtQuick 2.6 +import QtQuick.Layouts 1.1 +import QtQuick.Controls 2.0 +import QtMultimedia 5.5 +import AGL.Demo.Controls 1.0 +import 'models' +import 'api' as API + +Item { + id: root + + function getTime() { + return new Date().getTime() + } + + // Elapsed time in hh:mm:ss format + function getElapsedTimeString(startTime) { + var seconds = Math.floor((getTime() - startTime) / 1000); + var time = new Date(null); + time.setSeconds(seconds); + return time.toISOString().substr(11, 8); + } + + Timer { + id: callTimer + interval: 1000 + repeat: true + property var startTime + onTriggered: callStatusLabel.text = getElapsedTimeString(startTime) + } + + API.Telephony { + id: telephony + url: bindingAddress + property string callStatus: "disconnected" + property string callClipColp: "" + + onCallStatusChanged: { + if (callStatus == "incoming") { + soundmgr.connect("calling") + //ringtone.active = true + //rejectButton.active = true + //callStatusLabel.text = "Incoming call from " + callClipColp + } else if (callStatus == "dialing") { + callStatusLabel.text = "Dialing " + callClipColp + } else if (callStatus == "active") { + rejectButton.active = false + callTimer.startTime = getTime() + callTimer.restart() + } else if (callStatus == "disconnected") { + ringtone.active = false + rejectButton.active = false + callButton.checked = false + callTimer.stop() + callStatusLabel.text = "" + soundmgr.disconnect() + } + } + } + API.BindingSoundManager { + id: soundmgr + onApproved: { + console.log("Sound Right Approved") + switch(telephony.callStatus){ + case "dialing": + case "active": + case "disconnected": + telephony.dial(number.text) + break; // WARNING! these cases are not tested excluding incomming + case "incoming": + ringtone.active = true + rejectButton.active = true + callStatusLabel.text = "Incoming call from " + telephony.callClipColp + + break; + default: + break; + } + } + onDenied: { + console.log("Sound Right Denyed due to emergency") + } + onPaused:{ + console.log("paused") // this doesn't come maybe + } + } + + Loader { + id: ringtone + active: false + sourceComponent: Component { + SoundEffect { + loops: SoundEffect.Infinite + source: './Phone.wav' + category: 'phone' + Component.onCompleted: play() + } + } + } + + signal showContacts + function call(contact) { + name.text = contact.name + number.text = contact.number + callButton.checked = true + } + + ImageButton { + anchors.left: parent.left + anchors.top: parent.top + anchors.margins: 60 + width: 172 + height: 172 + offImage: './images/HMI_Phone_Contacts-01.svg' + onClicked: root.showContacts() + } + + ColumnLayout { + anchors.fill: parent + anchors.topMargin: 50 + anchors.bottomMargin: 50 + spacing: 20 + ColumnLayout { + Layout.alignment: Qt.AlignHCenter + Label { + id: name + font.pixelSize: 40 + color: '#59FF7F' + } + TextField { + id: number + readOnly: true + + ImageButton { + anchors.right: parent.right + anchors.verticalCenter: parent.verticalCenter + offImage: './images/HMI_Phone_Back_Icon.svg' + onClicked: { + if (number.text.length > 0) + number.text = number.text.substring(0, number.text.length - 1) + } + } + } + } + + GridLayout { + Layout.alignment: Qt.AlignHCenter + columns: 3 + columnSpacing: 30 + rowSpacing: 30 + Repeater { + model: ListModel { + ListElement { value: '1'; image: '1' } + ListElement { value: '2'; image: '2' } + ListElement { value: '3'; image: '3' } + ListElement { value: '4'; image: '4' } + ListElement { value: '5'; image: '5' } + ListElement { value: '6'; image: '6' } + ListElement { value: '7'; image: '7' } + ListElement { value: '8'; image: '8' } + ListElement { value: '9'; image: '9' } + ListElement { value: '*'; image: 'asterisk' } + ListElement { value: '0'; image: '0' } + ListElement { value: '#'; image: 'NumberSign' } + } + ImageButton { + onImage: './images/HMI_Phone_Button_%1_Active-01.svg'.arg(model.image) + offImage: './images/HMI_Phone_Button_%1_Inactive-01.svg'.arg(model.image) + onClicked: { + number.text += model.value + } + } + } + } + + Label { + id: callStatusLabel + Layout.alignment: Qt.AlignHCenter + text: "" + } + + ToggleButton { + id: callButton + Layout.alignment: Qt.AlignHCenter + onImage: './images/HMI_Phone_Hangup.svg' + offImage: './images/HMI_Phone_Call.svg' + property var active: (number.text.length > 0) || (telephony.callStatus == "incoming") || (telephony.callStatus == "active") + opacity: active ? 1 : 0.25 + + onCheckedChanged: { + if (checked) { + if (!active) { + callButton.checked = false + return + } + + var contact = {'name': name.text, 'number': number.text} + if (contact.name === '') + contact.name = 'Unknown' + history.insert(0, contact) + if (telephony.callStatus == "incoming") { + telephony.answer() + ringtone.active = false; + } else { + soundmgr.connect() + //telephony.dial(number.text) + } + } else { + name.text = '' + number.text = '' + telephony.hangup() + soundmgr.disconnect() + } + } + } + + Loader { + id: rejectButton + Layout.alignment: Qt.AlignHCenter + active: false + sourceComponent: ImageButton { + offImage: './images/HMI_Phone_Hangup.svg' + onClicked: { + telephony.hangup() + soundmgr.disconnect() + } + } + } + + ListView { + Layout.fillWidth: true + Layout.preferredHeight: 130 + orientation: Qt.Horizontal + clip: true + model: CallHistoryModel { id: history } + + delegate: MouseArea { + width: root.width / 2.5 + height: ListView.view.height + RowLayout { + anchors.fill: parent + spacing: 20 + Image { + source: './images/HMI_Phone_Contact_BlankPhoto.svg' + } + ColumnLayout { + Label { + Layout.fillWidth: true + color: '#59FF7F' + text: model.name + } + + Label { + Layout.fillWidth: true + font.pixelSize: 30 + text: model.number + } + } + } + onClicked: root.call(model) + } + } + } +}