Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6f983287 authored by Ajay Panicker's avatar Ajay Panicker Committed by Andre Eisenbach
Browse files

Change MAP to send one new message event when encrypted storage is unlocked

The MAP service will now send one new message event for all messages
when device storage is unlocked instead of sending an event per message.

Bug: 30809925
Change-Id: Iec902c414c3c229043aa089d19871d80d62f557f
parent 3bd5e837
Loading
Loading
Loading
Loading
+59 −0
Original line number Diff line number Diff line
@@ -173,7 +173,9 @@ public class BluetoothMapContentObserver {
    public static final String EXTRA_MESSAGE_SENT_TIMESTAMP = "timestamp";

    private SmsBroadcastReceiver mSmsBroadcastReceiver = new SmsBroadcastReceiver();
    private CeBroadcastReceiver mCeBroadcastReceiver = new CeBroadcastReceiver();

    private boolean mStorageUnlocked = false;
    private boolean mInitialized = false;


@@ -481,6 +483,12 @@ public class BluetoothMapContentObserver {
                Log.w(TAG, "onChange() with URI == null - not handled.");
                return;
            }

            if (!mStorageUnlocked) {
                Log.v(TAG, "Ignore events until storage is completely unlocked");
                return;
            }

            if (V) Log.d(TAG, "onChange on thread: " + Thread.currentThread().getId()
                    + " Uri: " + uri.toString() + " selfchange: " + selfChange);

@@ -3201,6 +3209,52 @@ public class BluetoothMapContentObserver {
        }
    }

    private class CeBroadcastReceiver extends BroadcastReceiver {
        public void register() {
            UserManager manager = UserManager.get(mContext);
            if (manager == null || manager.isUserUnlocked()) {
                mStorageUnlocked = true;
                return;
            }

            Handler handler = new Handler(Looper.getMainLooper());
            IntentFilter intentFilter = new IntentFilter();
            intentFilter.addAction(Intent.ACTION_BOOT_COMPLETED);
            mContext.registerReceiver(this, intentFilter, null, handler);
        }

        public void unregister() {
            try {
                mContext.unregisterReceiver(this);
            } catch (IllegalArgumentException e) {
                /* do nothing */
            }
        }

        public void onReceive(Context context, Intent intent) {
            String action = intent.getAction();
            Log.d(TAG, "onReceive: action"  + action);

            if (action.equals(Intent.ACTION_BOOT_COMPLETED)) {
                try {
                    initMsgList();
                } catch (RemoteException e) {
                    Log.e(TAG, "Error initializing SMS/MMS message lists.");
                }

                for (String folder : FOLDER_SMS_MAP.values()) {
                    Event evt = new Event(EVENT_TYPE_NEW, -1, folder, mSmsType);
                    sendEvent(evt);
                }
                mStorageUnlocked = true;
                /* After unlock this BroadcastReceiver is never needed */
                unregister();
            } else {
                Log.d(TAG, "onReceive: Unknown action " + action);
            }
        }
    }

    /**
     * Handle MMS sent intents in disconnected(MNS) state, where we do not need to send any
     * notifications.
@@ -3411,6 +3465,11 @@ public class BluetoothMapContentObserver {
        if (mSmsBroadcastReceiver != null) {
            mSmsBroadcastReceiver.register();
        }

        if (mCeBroadcastReceiver != null) {
            mCeBroadcastReceiver.register();
        }

        registerPhoneServiceStateListener();
        mInitialized = true;
    }