[Guide/MOD] Turning on Answering Machine [KK .230]

Search This thread

batrian

Senior Member
Feb 22, 2013
196
66
Toronto
I was going through phone and realized Answering Machine is hidden in the system. With this you can turn on the answering machine.

Requirments :

Simple knowledge of Compiling/ Decompiling.


How to:

1. Decompile Semcphone.apk ------> its in System / PRIV-App / Semcphone.apk

2. After Decompile > Go to > res > values > open bools

3. Search for the line:
<bool name="config_enable_answering_machine">false</bool>

4. Just change the false to true


5. Then go to res > xml > open somc_answering_machine_greetings_setting
in the line:
<PreferenceScreen android:persistent="false"
android:title="@string/phone_strings_ans_mach_greeting_record_new_txt" android:key="key_am_record_new_greeting">

6.Change the false to true

7. last one! Open somc_answering_machine_setting

in the lines:
<CheckBoxPreference android:title="@string/phone_strings_ans_mach_enable_answering_machine_title_txt" android:key="key_am_enabled" />
<Preference android:persistent="false" android:title="@string/phone_strings_ans_mach_auto_answer_time_title_txt" android:key="key_am_activation_sec" />
<CheckBoxPreference android:title="@string/phone_strings_ans_mach_roaming_title_txt" android:key="key_am_use_while_roaming" android:summary="@string/phone_strings_ans_mach_roaming_sub_txt" />
<PreferenceScreen android:persistent="false" android:title="@string/phone_strings_ans_mach_greetings_title_txt" android:key="key_am_greetings">
<intent android:targetPackage="com.android.phone" android:action="android.intent.action.MAIN" android:targetClass="com.android.phone.am.SomcAmGreetingsSetting" />
</PreferenceScreen>
<PreferenceScreen android:persistent="false" android:title="@string/phone_strings_ans_mach_incoming_message_title_txt" android:key="key_am_incoming_msg">
<intent android:targetPackage="com.android.phone" android:action="android.intent.action.MAIN" android:targetClass="com.android.phone.am.SomcAmIncomingMessageSetting" />
</PreferenceScreen>

8. change all the false to true

9. DONE! re-Compile the Semcphone.apk and sign it!


For turning "data disabled" notification :

Go to bools.xml again and look for:

Quote:
<bool name="data_connection_except_mms_show_icon_when_enabled">true</bool>
<bool name="data_connection_except_mms_show_icon_when_disabled">true</bool>

Just change the true to false.


Enjoy :)
PS: Just in case, I have uploaded my own moded Semcphone.apk with Answering Machine and Call Recording enabled.

UPDATE 1 : Found this BUG : the problem is when it goes on answering machine, the greetings plays on the receiver phone's ear speaker, not the one Calling.
For example, if 1 calls 2, the answering greeting plays on 2's phone ear speaker. not on the 1! That's very weird I need to look and see if I can find the solution.

I will update you guys again :)
 

Attachments

  • SemcPhone.apk
    12.2 MB · Views: 1,041
Last edited:

akshay999

Senior Member
Oct 23, 2012
79
23
Wow amazing work !! did you check if it plays the recorded message in a call? Please let me know. Thanks :D
 
  • Like
Reactions: batrian

batrian

Senior Member
Feb 22, 2013
196
66
Toronto
Now i'm getting the bug too!!. the problem is when it goes on answering machine, the greetings plays on the receiver phone's ear speaker, not the one Calling.

For example, if 1 calls 2, the answering greeting plays on 2's phone ear speaker. not on the 1! That's very weird I need to look and see if I can find the problem.

If any one can also help to work this problem out, I really appreciate it :eek:
 
  • Like
Reactions: Ruthx

davros93

Senior Member
Oct 27, 2013
81
23
verona
Now i'm getting the bug too!!. the problem is when it goes on answering machine, the greetings plays on the receiver phone's ear speaker, not the one Calling.

For example, if 1 calls 2, the answering greeting plays on 2's phone ear speaker. not on the 1! That's very weird I need to look and see if I can find the problem.

If any one can also help to work this problem out, I really appreciate it :eek:

Yes, this is the problem. I can't help you, i'm not a programmer. Good luck to find the solution. Anyway thank you to find that hidden function!
 

Ticklefish

Inactive Recognized Themer
Oct 27, 2011
6,773
8,633
Hampshire, UK
You beat me to it..I was about to start a thread about the same sort of thing. :laugh:

How would you like a screenshot?

V38uGQP.png


Y'know, there's more fun things you can do with the bools.xml file. You can turn off the 'data connection' notification as well... :D
 
Last edited:
  • Like
Reactions: batrian

batrian

Senior Member
Feb 22, 2013
196
66
Toronto
You beat me to it..I was about to start a thread about the same sort of thing. :laugh:

How would you like a screenshot?

V38uGQP.png


Y'know, there's more fun things you can do with the bools.xml file. You can turn off the 'data connection' notification as well... :D

Haha, Yeah there are lots of them and yes finally I could get rid of that stupid notification too :D

But Answering Machine is not working well yet. Im looking for the solution to make it fully operational.

Thanks for the Screenshot too!
 

boyq

Senior Member
Apr 20, 2012
565
115
Any idea why Sony disabled it?

Sent from my C6603 using XDA Premium 4 mobile app
 

AngelBob

Senior Member
Jun 23, 2013
275
628
The only change needed to enable Answering Machine is
Code:
<bool name="config_enable_answering_machine">ture</bool>

You can actually do this in the /system/vendor/overlay/SemcPhone-Overlay-285.apk
Just create bools.xml and add
Code:
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <bool name="enable_call_recording">true</bool>
    <bool name="config_enable_answering_machine">true</bool>
</resources>

This was it works on odex roms too.

(Still Audio is routed wrong though)

I also got this from logcat:
Code:
D/StatusBar.NetworkController( 1386): refreshViews: Data not connected!! Set no data type icon / Roaming

E/MediaPlayer-JNI( 1622): QCMediaPlayer mediaplayer NOT present

I/ExtendedUtils(  350): AV Sync late margin : Intended=40ms Using=0ms

D/AwesomePlayer(  350): Before reset_l

D/AwesomePlayer(  350): printFileName fd(37) -> /data/data/com.android.phone/files/am/greeting/2014-05-25-00-03-13.amr

D/ExtendedUtils(  350): extended extractor not needed, return default

W/Settings( 2849): Setting airplane_mode_on has moved from android.provider.Settings.System to android.provider.Settings.Global, returning read-only value.

E/AwesomePlayer(  350): LPAPlayer::Clip duration setting of less than 30sec not supported, defaulting to 60sec

E/AwesomePlayer(  350): LPAPlayer::Clip duration setting of less than 30sec not supported, defaulting to 60sec

E/AudioPolicyManagerALSA(  350): unknown stream type

E/AudioPolicyManagerALSA(  350): unknown stream type

E/AudioPolicyManagerALSA(  350): unknown stream type

E/AudioPolicyManagerALSA(  350): unknown stream type

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

E/AudioPolicyManagerALSA(  350): unknown stream type

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/ALSADevice(  350): route: devices 0x1 in mode 2

V/ALSADevice(  350): switchDevice: device 0x1 mode:2

V/ALSADevice(  350): callOutputRouting: 0x1

V/ALSADevice(  350): Routing to rx=Voice Earpiece EQ1

V/ALSADevice(  350): callInputRouting: 0x1

V/ALSADevice(  350): Routing to tx=DMIC Endfire

V/ALSADevice(  350): switchDevice,rxDev:Voice Earpiece EQ1, txDev:DMIC Endfire, curRxDev:Voice Earpiece EQ1, curTxDev:DMIC Endfire

D/alsa_ucm(  350): snd_use_case_set(): uc_mgr 0xb8e5f808 identifier _enadev value Voice Earpiece EQ1

D/alsa_ucm(  350): Set mixer controls for Voice Call enable 1

D/alsa_ucm(  350): Setting mixer control: STUB_RX Mixer Voice Stub, value: 1

D/alsa_ucm(  350): Setting mixer control: Voice Stub Tx Mixer STUB_TX_HL, value: 1

D/alsa_ucm(  350): Setting mixer control: Voice Stub Tx Mixer STUB_1_TX_HL, value: 1

D/alsa_ucm(  350): snd_use_case_set(): uc_mgr 0xb8e5f808 identifier _enadev value DMIC Endfire

D/alsa_ucm(  350): Set mixer controls for Voice Call enable 1

D/alsa_ucm(  350): Setting mixer control: STUB_RX Mixer Voice Stub, value: 1

D/alsa_ucm(  350): Setting mixer control: Voice Stub Tx Mixer STUB_TX_HL, value: 1

D/alsa_ucm(  350): Setting mixer control: Voice Stub Tx Mixer STUB_1_TX_HL, value: 1

D/ALSADevice(  350): switchDevice: mCurTxUCMDevivce DMIC Endfire mCurRxDevDevice Voice Earpiece EQ1

D/alsa_ucm(  350): snd_use_case_set(): uc_mgr 0xb8e5f808 identifier _enamod value Play Music

D/alsa_ucm(  350): Set mixer controls for Play Music enable 1

D/alsa_ucm(  350): Setting mixer control: SLIMBUS_0_RX Audio Mixer MultiMedia1, value: 1

D/ALSADevice(  350): close: handle 0xb8e58a00 h 0x0

D/ALSADevice(  350): open: handle 0xb8e58a00, format 0x2

V/ALSADevice(  350): Music case

D/ALSADevice(  350): Device value returned is hw:0,0

V/ALSADevice(  350): flags 0, devName hw:0,0

V/ALSADevice(  350): pcm_open returned fd 39

D/ALSADevice(  350): handle->format: 0x2

D/ALSADevice(  350): setHardwareParams: reqBuffSize 2048 channels 2 sampleRate 48000

D/ALSADevice(  350): setHardwareParams: buffer_size 16384, period_size 2048, period_cnt 8

E/MediaPlayer-JNI( 1622): QCMediaPlayer mediaplayer NOT present

I/ExtendedUtils(  350): AV Sync late margin : Intended=40ms Using=0ms

D/AwesomePlayer(  350): Before reset_l

D/AwesomePlayer(  350): printFileName fd(41) -> /data/data/com.android.phone/files/am/greeting/2014-05-25-00-03-13.amr

D/ExtendedUtils(  350): extended extractor not needed, return default

E/AwesomePlayer(  350): LPAPlayer::Clip duration setting of less than 30sec not supported, defaulting to 60sec

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb8f623a8 successful

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb8f622f0 successful

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb8fb8ac0 successful

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb8fb8970 successful

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb8fbf320 successful

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb8fbf1e0 successful

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb9108ac0 successful

I/OMXNodeInstance(  350): OMX_FreeBuffer for buffer header 0xb91088b0 successful

E/MediaPlayer( 1622): Should have subtitle controller already set

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

W/MediaPlayer( 1622): mediaplayer went away with unhandled events

W/MediaPlayer( 1622): mediaplayer went away with unhandled events

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266

D/AudioTrack(  350): latency() mLatency = 266, newLatency = 266
 
Last edited:
  • Like
Reactions: shoey63 and batrian

AngelBob

Senior Member
Jun 23, 2013
275
628
After further investigation, to get audio routed correctly will require framework changes.
Sony added a custom Audio Route to the z2
Code:
STREAM_INCALL_MUSIC
This and all relevant code is missing from the yuga framework
 

Top Liked Posts

  • There are no posts matching your filters.
  • 8
    I was going through phone and realized Answering Machine is hidden in the system. With this you can turn on the answering machine.

    Requirments :

    Simple knowledge of Compiling/ Decompiling.


    How to:

    1. Decompile Semcphone.apk ------> its in System / PRIV-App / Semcphone.apk

    2. After Decompile > Go to > res > values > open bools

    3. Search for the line:
    <bool name="config_enable_answering_machine">false</bool>

    4. Just change the false to true


    5. Then go to res > xml > open somc_answering_machine_greetings_setting
    in the line:
    <PreferenceScreen android:persistent="false"
    android:title="@string/phone_strings_ans_mach_greeting_record_new_txt" android:key="key_am_record_new_greeting">

    6.Change the false to true

    7. last one! Open somc_answering_machine_setting

    in the lines:
    <CheckBoxPreference android:title="@string/phone_strings_ans_mach_enable_answering_machine_title_txt" android:key="key_am_enabled" />
    <Preference android:persistent="false" android:title="@string/phone_strings_ans_mach_auto_answer_time_title_txt" android:key="key_am_activation_sec" />
    <CheckBoxPreference android:title="@string/phone_strings_ans_mach_roaming_title_txt" android:key="key_am_use_while_roaming" android:summary="@string/phone_strings_ans_mach_roaming_sub_txt" />
    <PreferenceScreen android:persistent="false" android:title="@string/phone_strings_ans_mach_greetings_title_txt" android:key="key_am_greetings">
    <intent android:targetPackage="com.android.phone" android:action="android.intent.action.MAIN" android:targetClass="com.android.phone.am.SomcAmGreetingsSetting" />
    </PreferenceScreen>
    <PreferenceScreen android:persistent="false" android:title="@string/phone_strings_ans_mach_incoming_message_title_txt" android:key="key_am_incoming_msg">
    <intent android:targetPackage="com.android.phone" android:action="android.intent.action.MAIN" android:targetClass="com.android.phone.am.SomcAmIncomingMessageSetting" />
    </PreferenceScreen>

    8. change all the false to true

    9. DONE! re-Compile the Semcphone.apk and sign it!


    For turning "data disabled" notification :

    Go to bools.xml again and look for:

    Quote:
    <bool name="data_connection_except_mms_show_icon_when_enabled">true</bool>
    <bool name="data_connection_except_mms_show_icon_when_disabled">true</bool>

    Just change the true to false.


    Enjoy :)
    PS: Just in case, I have uploaded my own moded Semcphone.apk with Answering Machine and Call Recording enabled.

    UPDATE 1 : Found this BUG : the problem is when it goes on answering machine, the greetings plays on the receiver phone's ear speaker, not the one Calling.
    For example, if 1 calls 2, the answering greeting plays on 2's phone ear speaker. not on the 1! That's very weird I need to look and see if I can find the solution.

    I will update you guys again :)
    7
    Here's another way of enabling the call recording & answering machine flags

    I made a small xposed module
    These are switchable via the module settings
    3
    So, is this solved or not?

    Sent from my C6603 using XDA Premium 4 mobile app

    Code:
    STREAM_INCALL_MUSIC

    Audio route method is missing from our framework and audio lib's. so for now this can not be solved.
    Adding the info to the framework is quite easy, but adding it to the libs isn't possible (for me anyhow)
    2
    So this makes the opposite person hear the recorded msg ?

    No not yet, still same problems.
    Though using an xposed module will allow hooking into tx and rx channels and hopefully allow correct redirection

    Sent from my C6603 using Tapatalk
    2
    Full source of my xposed module is now on github: https://github.com/CamberCreak/YugaSemcPhone/