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

Commit a4f89780 authored by Matt Pietal's avatar Matt Pietal Committed by Android (Google) Code Review
Browse files

Merge "Protect callbacks from NullPointerException" into main

parents 413065a5 e16594f6
Loading
Loading
Loading
Loading
+24 −18
Original line number Diff line number Diff line
@@ -31,6 +31,7 @@ import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.concurrent.Executor;
import java.util.function.Consumer;

import javax.inject.Inject;

@@ -63,19 +64,23 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {

    @Override
    public void addCallback(@NonNull Callback callback) {
        synchronized (mCallbacks) {
            mCallbacks.add(callback);
            if (mCallbacks.size() == 1) {
                setListening(true);
            }
            callback.onManagedProfileChanged();
        }
    }

    @Override
    public void removeCallback(@NonNull Callback callback) {
        synchronized (mCallbacks) {
            if (mCallbacks.remove(callback) && mCallbacks.size() == 0) {
                setListening(false);
            }
        }
    }

    public void setWorkModeEnabled(boolean enableWorkMode) {
        synchronized (mProfiles) {
@@ -109,10 +114,7 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
    }

    private void notifyManagedProfileRemoved() {
        ArrayList<Callback> copy = new ArrayList<>(mCallbacks);
        for (Callback callback : copy) {
            callback.onManagedProfileRemoved();
        }
        notifyCallbacks(Callback::onManagedProfileRemoved);
    }

    public boolean hasActiveProfile() {
@@ -136,6 +138,16 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
        }
    }

    private void notifyCallbacks(Consumer<Callback> method) {
        ArrayList<Callback> copy;
        synchronized (mCallbacks) {
            copy = new ArrayList<>(mCallbacks);
        }
        for (Callback callback : copy) {
            method.accept(callback);
        }
    }

    private void setListening(boolean listening) {
        if (mListening == listening) {
            return;
@@ -154,19 +166,13 @@ public class ManagedProfileControllerImpl implements ManagedProfileController {
        @Override
        public void onUserChanged(int newUser, @NonNull Context userContext) {
            reloadManagedProfiles();
            ArrayList<Callback> copy = new ArrayList<>(mCallbacks);
            for (Callback callback : copy) {
                callback.onManagedProfileChanged();
            }
            notifyCallbacks(Callback::onManagedProfileChanged);
        }

        @Override
        public void onProfilesChanged(@NonNull List<UserInfo> profiles) {
            reloadManagedProfiles();
            ArrayList<Callback> copy = new ArrayList<>(mCallbacks);
            for (Callback callback : copy) {
                callback.onManagedProfileChanged();
            }
            notifyCallbacks(Callback::onManagedProfileChanged);
        }
    }
}