mirror of
https://gitee.com/openharmony/applications_call
synced 2024-11-27 00:20:46 +00:00
Description: 修改支持来电振动和接近光功能
Sig: SIG_BscSoftSrv Feature or Bugfix: Feature Binary Source: callui.p7b Signed-off-by: gaobingqing <gaobingqing5@h-partners.com>
This commit is contained in:
parent
b5d03f539a
commit
7e8ed032c6
@ -16,7 +16,7 @@
|
|||||||
/**
|
/**
|
||||||
* @file: call manager service
|
* @file: call manager service
|
||||||
*/
|
*/
|
||||||
|
import CallServiceProxy from '../model/CallServiceProxy';
|
||||||
import TelephonyCall from './TelephonyApi';
|
import TelephonyCall from './TelephonyApi';
|
||||||
import commonEvent from '@ohos.commonEvent';
|
import commonEvent from '@ohos.commonEvent';
|
||||||
import LogUtils from "../common/utils/LogUtils";
|
import LogUtils from "../common/utils/LogUtils";
|
||||||
@ -94,6 +94,7 @@ export default class CallManagerService {
|
|||||||
|
|
||||||
if (res.event === events[2]) {
|
if (res.event === events[2]) {
|
||||||
VibrationAndProximityUtils.stopVibration();
|
VibrationAndProximityUtils.stopVibration();
|
||||||
|
CallServiceProxy.getInstance().muteRinger();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
LogUtils.i(TAG, "addSubscriber commonEvent.subscribe failed err :" + JSON.stringify(err))
|
LogUtils.i(TAG, "addSubscriber commonEvent.subscribe failed err :" + JSON.stringify(err))
|
||||||
@ -156,7 +157,7 @@ export default class CallManagerService {
|
|||||||
}
|
}
|
||||||
if (callState === CALL_STATUS_DIALING) {
|
if (callState === CALL_STATUS_DIALING) {
|
||||||
// add Proximity Listener
|
// add Proximity Listener
|
||||||
VibrationAndProximityUtils.addProximityListener();
|
VibrationAndProximityUtils.suspendScreen();
|
||||||
}
|
}
|
||||||
} else if (callState !== CALL_STATUS_DISCONNECTING) {
|
} else if (callState !== CALL_STATUS_DISCONNECTING) {
|
||||||
this.publishData(callData);
|
this.publishData(callData);
|
||||||
|
@ -219,7 +219,7 @@ export default struct IncomingCom {
|
|||||||
} else {
|
} else {
|
||||||
this.mCallServiceProxy.acceptCall(this.callData.callId);
|
this.mCallServiceProxy.acceptCall(this.callData.callId);
|
||||||
}
|
}
|
||||||
VibrationAndProximityUtils.addProximityListener();
|
VibrationAndProximityUtils.suspendScreen();
|
||||||
VibrationAndProximityUtils.stopVibration();
|
VibrationAndProximityUtils.stopVibration();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -135,19 +135,16 @@ export function queryAirPlaneMode(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let condition = new dataSharePredicates.DataSharePredicates();
|
let condition = new dataSharePredicates.DataSharePredicates();
|
||||||
|
condition.equalTo('KEYWORD', 'airplane_mode');
|
||||||
try {
|
try {
|
||||||
// ID, KEYWORD, VALUE
|
// ID, KEYWORD, VALUE
|
||||||
dataShareHelper.query(SETTING_AIRPLANE_MODE_URI, condition, null).then((data) => {
|
dataShareHelper.query(SETTING_AIRPLANE_MODE_URI, condition, null).then((data) => {
|
||||||
LogUtils.i(TAG, 'queryAirPlaneMode query succeed');
|
LogUtils.i(TAG, 'queryAirPlaneMode query succeed');
|
||||||
let hasNext = data.goToFirstRow();
|
if (data && data.goToFirstRow()) {
|
||||||
while (hasNext) {
|
|
||||||
if (data.getString(data.getColumnIndex('KEYWORD')) == QUERY_AIRPLANE_MODE_KEY) {
|
|
||||||
LogUtils.i(TAG, 'queryAirPlaneMode query succeed return key');
|
LogUtils.i(TAG, 'queryAirPlaneMode query succeed return key');
|
||||||
callback(data.getLong(data.getColumnIndex('VALUE')));
|
callback(data.getLong(data.getColumnIndex('VALUE')));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hasNext = data.goToNextRow();
|
|
||||||
}
|
|
||||||
callback(-1);
|
callback(-1);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
LogUtils.e(TAG, 'queryAirPlaneMode query in error: err: ' + JSON.stringify(err));
|
LogUtils.e(TAG, 'queryAirPlaneMode query in error: err: ' + JSON.stringify(err));
|
||||||
|
@ -25,14 +25,15 @@
|
|||||||
* 6. uniqueness.
|
* 6. uniqueness.
|
||||||
*/
|
*/
|
||||||
import audio from '@ohos.multimedia.audio';
|
import audio from '@ohos.multimedia.audio';
|
||||||
|
import CallServiceProxy from '../../model/CallServiceProxy';
|
||||||
import LogUtils from './LogUtils';
|
import LogUtils from './LogUtils';
|
||||||
import power from '@ohos.power';
|
import runningLock from '@ohos.runningLock';
|
||||||
import sensor from '@ohos.sensor';
|
import sensor from '@ohos.sensor';
|
||||||
import vibrator from '@ohos.vibrator';
|
import vibrator from '@ohos.vibrator';
|
||||||
|
|
||||||
const TAG = 'VibrationAndProximityUtils';
|
const TAG = 'VibrationAndProximityUtils';
|
||||||
const PROXIMITY_INTERVAL = 10000000;
|
const PROXIMITY_INTERVAL = 10000000;
|
||||||
const VIBRATION_DURATION = 100 * 1000;
|
const VIBRATION_COUNT = 20;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Vibration And Proximity tool class
|
* Vibration And Proximity tool class
|
||||||
@ -42,6 +43,7 @@ export class VibrationAndProximityUtils {
|
|||||||
startVibrationFlag = false;
|
startVibrationFlag = false;
|
||||||
addProximityListenerFlag = false;
|
addProximityListenerFlag = false;
|
||||||
recordDistance = -1;
|
recordDistance = -1;
|
||||||
|
recordLock = null;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* add Proximity Listener
|
* add Proximity Listener
|
||||||
@ -93,11 +95,23 @@ export class VibrationAndProximityUtils {
|
|||||||
* suspend Screen
|
* suspend Screen
|
||||||
*/
|
*/
|
||||||
public suspendScreen() {
|
public suspendScreen() {
|
||||||
|
if (this.recordLock) {
|
||||||
|
this.recordLock.hold(Number.MAX_VALUE);
|
||||||
|
LogUtils.i(TAG, 'suspendScreen hold');
|
||||||
|
} else {
|
||||||
|
let that = this;
|
||||||
|
runningLock.create('call_lock', runningLock.RunningLockType.PROXIMITY_SCREEN_CONTROL).then(lock => {
|
||||||
|
LogUtils.i(TAG, 'suspendScreen create running lock success');
|
||||||
try {
|
try {
|
||||||
power.suspend();
|
that.recordLock = lock;
|
||||||
LogUtils.i(TAG, 'suspendScreen suspend');
|
lock.hold(Number.MAX_VALUE);
|
||||||
|
LogUtils.i(TAG, 'suspendScreen hold');
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
LogUtils.e(TAG, 'suspendScreen suspend failed, err: ' + err);
|
LogUtils.e(TAG, 'suspendScreen hold running lock failed, err: ' + err);
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
LogUtils.e(TAG, 'suspendScreen create running lock failed, err: ' + err);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,11 +119,23 @@ export class VibrationAndProximityUtils {
|
|||||||
* wakeup Screen
|
* wakeup Screen
|
||||||
*/
|
*/
|
||||||
public wakeupScreen() {
|
public wakeupScreen() {
|
||||||
|
if (this.recordLock) {
|
||||||
|
this.recordLock.unhold();
|
||||||
|
LogUtils.i(TAG, 'wakeupScreen unhold');
|
||||||
|
} else {
|
||||||
|
let that = this;
|
||||||
|
runningLock.create('call_lock', runningLock.RunningLockType.PROXIMITY_SCREEN_CONTROL).then(lock => {
|
||||||
|
LogUtils.i(TAG, 'wakeupScreen create running lock success');
|
||||||
try {
|
try {
|
||||||
power.wakeup('wakeup_call');
|
that.recordLock = lock;
|
||||||
LogUtils.i(TAG, 'wakeupScreen wakeup');
|
lock.unhold();
|
||||||
|
LogUtils.i(TAG, 'wakeupScreen unhold');
|
||||||
} catch(err) {
|
} catch(err) {
|
||||||
LogUtils.e(TAG, 'wakeupScreen wakeup failed, err: ' + err);
|
LogUtils.e(TAG, 'wakeupScreen unhold running lock failed, err: ' + err);
|
||||||
|
}
|
||||||
|
}).catch(err => {
|
||||||
|
LogUtils.e(TAG, 'wakeupScreen create running lock failed, err: ' + err);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -124,8 +150,9 @@ export class VibrationAndProximityUtils {
|
|||||||
}
|
}
|
||||||
let that = this;
|
let that = this;
|
||||||
vibrator.startVibration({
|
vibrator.startVibration({
|
||||||
type: 'time',
|
type: 'preset',
|
||||||
duration: VIBRATION_DURATION,
|
effectId: 'haptic.ringtone.T-Mobile_Ring',
|
||||||
|
count: VIBRATION_COUNT
|
||||||
}, {
|
}, {
|
||||||
usage: 'ring'
|
usage: 'ring'
|
||||||
}, (error) => {
|
}, (error) => {
|
||||||
@ -151,7 +178,7 @@ export class VibrationAndProximityUtils {
|
|||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
let that = this;
|
let that = this;
|
||||||
vibrator.stopVibration(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_TIME, function (error) {
|
vibrator.stopVibration(vibrator.VibratorStopMode.VIBRATOR_STOP_MODE_PRESET, function (error) {
|
||||||
if (error) {
|
if (error) {
|
||||||
LogUtils.e(TAG, 'stopVibration error.code: ' + error.code + ', error.message: ' + error.message);
|
LogUtils.e(TAG, 'stopVibration error.code: ' + error.code + ', error.message: ' + error.message);
|
||||||
return;
|
return;
|
||||||
@ -171,6 +198,7 @@ export class VibrationAndProximityUtils {
|
|||||||
audio.getAudioManager().on('volumeChange', () => {
|
audio.getAudioManager().on('volumeChange', () => {
|
||||||
LogUtils.i(TAG, 'addVoiceObserver volumeChange');
|
LogUtils.i(TAG, 'addVoiceObserver volumeChange');
|
||||||
this.stopVibration();
|
this.stopVibration();
|
||||||
|
CallServiceProxy.getInstance().muteRinger();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -159,7 +159,7 @@ export default class CallDataManager {
|
|||||||
LogUtils.i(TAG, "calluiAbility terminateSelf");
|
LogUtils.i(TAG, "calluiAbility terminateSelf");
|
||||||
});
|
});
|
||||||
// remove Proximity Listener
|
// remove Proximity Listener
|
||||||
VibrationAndProximityUtils.removeProximityListener();
|
VibrationAndProximityUtils.wakeupScreen();
|
||||||
VibrationAndProximityUtils.stopVibration();
|
VibrationAndProximityUtils.stopVibration();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ import call from '@ohos.telephony.call';
|
|||||||
import CallStateConst from '../common/constant/CallStateConst';
|
import CallStateConst from '../common/constant/CallStateConst';
|
||||||
import DefaultCallData from '../common/struct/TypeUtils';
|
import DefaultCallData from '../common/struct/TypeUtils';
|
||||||
import CallListStruct from '../common/struct/CallListStruct';
|
import CallListStruct from '../common/struct/CallListStruct';
|
||||||
|
import VibrationAndProximityUtils from '../common/utils/VibrationAndProximityUtils';
|
||||||
|
|
||||||
const TAG = "CallManager";
|
const TAG = "CallManager";
|
||||||
const TIMING = 1000;
|
const TIMING = 1000;
|
||||||
@ -114,6 +115,9 @@ export default class CallManager {
|
|||||||
globalThis.calluiAbilityContext?.terminateSelf().then((data) => {
|
globalThis.calluiAbilityContext?.terminateSelf().then((data) => {
|
||||||
LogUtils.i(TAG, "calluiAbility terminateSelf because service disconnected");
|
LogUtils.i(TAG, "calluiAbility terminateSelf because service disconnected");
|
||||||
});
|
});
|
||||||
|
// remove Proximity Listener
|
||||||
|
VibrationAndProximityUtils.wakeupScreen();
|
||||||
|
VibrationAndProximityUtils.stopVibration();
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -60,6 +60,16 @@ export default class CallServiceProxy {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Stops the ringtone.
|
||||||
|
*/
|
||||||
|
public muteRinger() {
|
||||||
|
LogUtils.i(TAG, 'muteRinger')
|
||||||
|
call.muteRinger((err) => {
|
||||||
|
LogUtils.e(TAG, `muteRinger callback: err->${JSON.stringify(err)}`);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* accept call
|
* accept call
|
||||||
*
|
*
|
||||||
|
@ -42,7 +42,7 @@ export default struct ConfirmDialogEx {
|
|||||||
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
.textOverflow({ overflow: TextOverflow.Ellipsis })
|
||||||
.maxLines(2)
|
.maxLines(2)
|
||||||
}
|
}
|
||||||
.margin({ bottom: 10, top: 10 })
|
.margin({ bottom: 8, top: 10 })
|
||||||
|
|
||||||
Row() {
|
Row() {
|
||||||
Flex({
|
Flex({
|
||||||
|
@ -114,6 +114,10 @@
|
|||||||
{
|
{
|
||||||
"name": "ohos.permission.PLACE_CALL",
|
"name": "ohos.permission.PLACE_CALL",
|
||||||
"reason": "$string:PLACE_CALL"
|
"reason": "$string:PLACE_CALL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ohos.permission.RUNNING_LOCK",
|
||||||
|
"reason": "$string:RUNNING_LOCK"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -129,6 +129,10 @@
|
|||||||
{
|
{
|
||||||
"name": "ohos.permission.PLACE_CALL",
|
"name": "ohos.permission.PLACE_CALL",
|
||||||
"reason": "$string:PLACE_CALL"
|
"reason": "$string:PLACE_CALL"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "ohos.permission.RUNNING_LOCK",
|
||||||
|
"reason": "$string:RUNNING_LOCK"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -267,6 +267,10 @@
|
|||||||
{
|
{
|
||||||
"name": "PLACE_CALL",
|
"name": "PLACE_CALL",
|
||||||
"value": "place call"
|
"value": "place call"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "RUNNING_LOCK",
|
||||||
|
"value": "running lock"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -271,6 +271,10 @@
|
|||||||
{
|
{
|
||||||
"name": "PLACE_CALL",
|
"name": "PLACE_CALL",
|
||||||
"value": "拨打电话"
|
"value": "拨打电话"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"name": "RUNNING_LOCK",
|
||||||
|
"value": "屏幕运行锁"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
@ -80,19 +80,16 @@ export function queryAirPlaneMode(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let condition = new dataSharePredicates.DataSharePredicates();
|
let condition = new dataSharePredicates.DataSharePredicates();
|
||||||
|
condition.equalTo('KEYWORD', 'airplane_mode');
|
||||||
try {
|
try {
|
||||||
// ID, KEYWORD, VALUE
|
// ID, KEYWORD, VALUE
|
||||||
dataShareHelper.query(SETTING_AIRPLANE_MODE_URI, condition, null).then((data) => {
|
dataShareHelper.query(SETTING_AIRPLANE_MODE_URI, condition, null).then((data) => {
|
||||||
LogUtils.i(TAG, 'queryAirPlaneMode query succeed');
|
LogUtils.i(TAG, 'queryAirPlaneMode query succeed');
|
||||||
let hasNext = data.goToFirstRow();
|
if (data && data.goToFirstRow()) {
|
||||||
while (hasNext) {
|
|
||||||
if (data.getString(data.getColumnIndex('KEYWORD')) == QUERY_AIRPLANE_MODE_KEY) {
|
|
||||||
LogUtils.i(TAG, 'queryAirPlaneMode query succeed return key');
|
LogUtils.i(TAG, 'queryAirPlaneMode query succeed return key');
|
||||||
callback(data.getLong(data.getColumnIndex('VALUE')));
|
callback(data.getLong(data.getColumnIndex('VALUE')));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hasNext = data.goToNextRow();
|
|
||||||
}
|
|
||||||
callback(-1);
|
callback(-1);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
LogUtils.e(TAG, 'queryAirPlaneMode query in error: err: ' + JSON.stringify(err));
|
LogUtils.e(TAG, 'queryAirPlaneMode query in error: err: ' + JSON.stringify(err));
|
||||||
|
Binary file not shown.
@ -80,19 +80,16 @@ export function queryAirPlaneMode(callback) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
let condition = new dataSharePredicates.DataSharePredicates();
|
let condition = new dataSharePredicates.DataSharePredicates();
|
||||||
|
condition.equalTo('KEYWORD', 'airplane_mode');
|
||||||
try {
|
try {
|
||||||
// ID, KEYWORD, VALUE
|
// ID, KEYWORD, VALUE
|
||||||
dataShareHelper.query(SETTING_AIRPLANE_MODE_URI, condition, null).then((data) => {
|
dataShareHelper.query(SETTING_AIRPLANE_MODE_URI, condition, null).then((data) => {
|
||||||
LogUtils.i(TAG, 'queryAirPlaneMode query succeed');
|
LogUtils.i(TAG, 'queryAirPlaneMode query succeed');
|
||||||
let hasNext = data.goToFirstRow();
|
if (data && data.goToFirstRow()) {
|
||||||
while (hasNext) {
|
|
||||||
if (data.getString(data.getColumnIndex('KEYWORD')) == QUERY_AIRPLANE_MODE_KEY) {
|
|
||||||
LogUtils.i(TAG, 'queryAirPlaneMode query succeed return key');
|
LogUtils.i(TAG, 'queryAirPlaneMode query succeed return key');
|
||||||
callback(data.getLong(data.getColumnIndex('VALUE')));
|
callback(data.getLong(data.getColumnIndex('VALUE')));
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
hasNext = data.goToNextRow();
|
|
||||||
}
|
|
||||||
callback(-1);
|
callback(-1);
|
||||||
}).catch((err) => {
|
}).catch((err) => {
|
||||||
LogUtils.e(TAG, 'queryAirPlaneMode query in error: err: ' + JSON.stringify(err));
|
LogUtils.e(TAG, 'queryAirPlaneMode query in error: err: ' + JSON.stringify(err));
|
||||||
|
Loading…
Reference in New Issue
Block a user