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

Commit cdbf22a6 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Automerger Merge Worker
Browse files

Merge "Correct rebind to DataLoader after crash/death." into sc-dev am: 2190aed8

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/13735878

MUST ONLY BE SUBMITTED BY AUTOMERGER

Change-Id: I96d12afaacb15ad3125ed5a7e208231463f8c944
parents 875ab2b3 2190aed8
Loading
Loading
Loading
Loading
+18 −10
Original line number Diff line number Diff line
@@ -207,35 +207,37 @@ public class DataLoaderManagerService extends SystemService {
        @Override
        public void onServiceDisconnected(ComponentName arg0) {
            Slog.i(TAG, "DataLoader " + mId + " disconnected, but will try to recover");
            callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED);
            destroy();
            unbindAndReportDestroyed();
        }

        @Override
        public void onBindingDied(ComponentName name) {
            Slog.i(TAG, "DataLoader " + mId + " died");
            callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED);
            destroy();
            unbindAndReportDestroyed();
        }

        @Override
        public void onNullBinding(ComponentName name) {
            Slog.i(TAG, "DataLoader " + mId + " failed to start");
            callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED);
            destroy();
            unbindAndReportDestroyed();
        }

        @Override
        public void binderDied() {
            Slog.i(TAG, "DataLoader " + mId + " died");
            callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED);
            destroy();
            unbindAndReportDestroyed();
        }

        IDataLoader getDataLoader() {
            return mDataLoader;
        }

        private void unbindAndReportDestroyed() {
            if (unbind()) {
                callListener(IDataLoaderStatusListener.DATA_LOADER_DESTROYED);
            }
        }

        void destroy() {
            if (mDataLoader != null) {
                try {
@@ -244,11 +246,15 @@ public class DataLoaderManagerService extends SystemService {
                }
                mDataLoader = null;
            }
            unbind();
        }

        boolean unbind() {
            try {
                mContext.unbindService(this);
            } catch (Exception ignored) {
            }
            remove();
            return remove();
        }

        private boolean append() {
@@ -266,12 +272,14 @@ public class DataLoaderManagerService extends SystemService {
            }
        }

        private void remove() {
        private boolean remove() {
            synchronized (mServiceConnections) {
                if (mServiceConnections.get(mId) == this) {
                    mServiceConnections.remove(mId);
                    return true;
                }
            }
            return false;
        }

        private void callListener(int status) {