public void rotateSignedPreKey()
            throws CorruptedOmemoKeyException, SmackException.NotLoggedInException, XMPPException.XMPPErrorException,
            SmackException.NotConnectedException, InterruptedException, SmackException.NoResponseException {
        synchronized (LOCK) {
            if (!connection().isAuthenticated()) {
                throw new SmackException.NotLoggedInException();
            }

            // generate key
            getOmemoService().getOmemoStoreBackend().changeSignedPreKey(getOwnDevice());

            // publish
            OmemoBundleElement bundle = getOmemoService().getOmemoStoreBackend().packOmemoBundle(getOwnDevice());
            OmemoService.publishBundle(connection(), getOwnDevice(), bundle);
        }
    }
public void rotateSignedPreKey ( ) throws CorruptedOmemoKeyException , SmackException . NotLoggedInException , XMPPException . XMPPErrorException , SmackException . NotConnectedException , InterruptedException , SmackException . NoResponseException { synchronized ( LOCK ) { if ( ! connection ( ) . isAuthenticated ( ) ) { throw new SmackException . NotLoggedInException ( ) ; } getOmemoService ( ) . getOmemoStoreBackend ( ) . changeSignedPreKey ( getOwnDevice ( ) ) ; OmemoBundleElement bundle = getOmemoService ( ) . getOmemoStoreBackend ( ) . packOmemoBundle ( getOwnDevice ( ) ) ; OmemoService . publishBundle ( connection ( ) , getOwnDevice ( ) , bundle ) ; } }
Rotate the signedPreKey published in our OmemoBundle and republish it. This should be done every now and
then (7-14 days). The old signedPreKey should be kept for some more time (a month or so) to enable decryption
of messages that have been sent since the key was changed.

@throws CorruptedOmemoKeyException When the IdentityKeyPair is damaged.
@throws InterruptedException XMPP error
@throws XMPPException.XMPPErrorException XMPP error
@throws SmackException.NotConnectedException XMPP error
@throws SmackException.NoResponseException XMPP error
@throws SmackException.NotLoggedInException