The problem of not saving the previous value when sending it from bluetooth
C has an "Exclusive Or" operator which is ^.  You can use that instead of | so that it toggles the bit rather than always setting it:

case 'A' :
    bt_leds_activated ^= 1;
    break; 


With ^ if you OR a 0 with a 1 you get a 1. If you OR a 0 with a 0 you get a 0. If you OR a 1 with a 1 you get a 0.

That means every time you send A bit one of bt_leds_activated will invert. If it's 0 it will become 1. If it's 1 it will be come 0.

Also you seem to have two sets of states - the button states, and the bluetooth states. Instead you only want one set of states, and both the buttons and the bluetooth toggle bits in that single state set.

Because of that if either of the methods of turning an LED on has turned the LED on then the other method will have no chance at all of turning the LED off.

So just drop bt_leds_activated completely and use ledstates:

case 'A':
    ledstates ^= 1;
    break;


Now both the button and the character through bluetooth will toggle the LED.