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

Commit c1e4cd27 authored by Ajay Panicker's avatar Ajay Panicker
Browse files

Change MAP to send one new message event upon storage unlock

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: I1c9e10125c9a754bf4f6c25718fc0422d79cf37e
(cherry picked from commit 8b02ffef2611c8f21d751e5a196bcb765a9e997e)
(cherry picked from commit ac3a80eed68e2374151abb59e66d95bb2e66cf61)
parent caa2aafe
Loading
Loading
Loading
Loading
+60 −1
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);

@@ -1182,7 +1190,7 @@ public class BluetoothMapContentObserver {
    private void initMsgList() throws RemoteException {
        if (V) Log.d(TAG, "initMsgList");
        UserManager manager = UserManager.get(mContext);
        if (manager == null || manager.isUserUnlocked()) return;
        if (manager == null || !manager.isUserUnlocked()) return;

        if (mEnableSmsMms) {
            HashMap<Long, Msg> msgListSms = new HashMap<Long, Msg>();
@@ -3193,6 +3201,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.
@@ -3403,6 +3457,11 @@ public class BluetoothMapContentObserver {
        if (mSmsBroadcastReceiver != null) {
            mSmsBroadcastReceiver.register();
        }

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

        registerPhoneServiceStateListener();
        mInitialized = true;
    }