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

Commit 02bd28ed authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix Settings creating too many threads unexpectedly"

parents e49ff7de 3e4c47db
Loading
Loading
Loading
Loading
+3 −6
Original line number Diff line number Diff line
@@ -37,12 +37,11 @@ import com.android.settings.homepage.contextualcards.logging.ContextualCardLogUt
import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.AsyncLoaderCompat;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -56,7 +55,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
    private static final String TAG = "ContextualCardLoader";
    private static final long ELIGIBILITY_CHECKER_TIMEOUT_MS = 250;

    private final ExecutorService mExecutorService;
    private final ContentObserver mObserver = new ContentObserver(
            new Handler(Looper.getMainLooper())) {
        @Override
@@ -76,7 +74,6 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
    ContextualCardLoader(Context context) {
        super(context);
        mContext = context.getApplicationContext();
        mExecutorService = Executors.newCachedThreadPool();
    }

    @Override
@@ -163,8 +160,8 @@ public class ContextualCardLoader extends AsyncLoaderCompat<List<ContextualCard>
        final List<Future<ContextualCard>> eligibleCards = new ArrayList<>();

        for (ContextualCard card : candidates) {
            final EligibleCardChecker future = new EligibleCardChecker(mContext, card);
            eligibleCards.add(mExecutorService.submit(future));
            final EligibleCardChecker checker = new EligibleCardChecker(mContext, card);
            eligibleCards.add(ThreadUtils.postOnBackgroundThread(checker));
        }
        // Collect future and eligible cards
        for (Future<ContextualCard> cardFuture : eligibleCards) {
+3 −6
Original line number Diff line number Diff line
@@ -23,13 +23,12 @@ import androidx.annotation.NonNull;
import androidx.annotation.VisibleForTesting;

import com.android.settings.homepage.contextualcards.ContextualCard;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -42,7 +41,6 @@ public class ConditionManager {

    private static final long DISPLAYABLE_CHECKER_TIMEOUT_MS = 20;

    private final ExecutorService mExecutorService;
    private final Context mAppContext;
    private final ConditionListener mListener;

@@ -50,7 +48,6 @@ public class ConditionManager {

    public ConditionManager(Context context, ConditionListener listener) {
        mAppContext = context.getApplicationContext();
        mExecutorService = Executors.newCachedThreadPool();
        mCardControllers = new ArrayList<>();
        mListener = listener;
        initCandidates();
@@ -64,8 +61,8 @@ public class ConditionManager {
        final List<Future<ContextualCard>> displayableCards = new ArrayList<>();
        // Check displayable future
        for (ConditionalCardController card : mCardControllers) {
            final DisplayableChecker future = new DisplayableChecker(getController(card.getId()));
            displayableCards.add(mExecutorService.submit(future));
            final DisplayableChecker checker = new DisplayableChecker(getController(card.getId()));
            displayableCards.add(ThreadUtils.postOnBackgroundThread(checker));
        }
        // Collect future and add displayable cards
        for (Future<ContextualCard> cardFuture : displayableCards) {
+3 −8
Original line number Diff line number Diff line
@@ -20,8 +20,6 @@ import static android.app.NotificationManager.IMPORTANCE_LOW;
import static android.app.NotificationManager.IMPORTANCE_NONE;
import static android.app.slice.Slice.EXTRA_TOGGLE_STATE;

import static com.android.settings.notification.ChannelListPreferenceController.ARG_FROM_SETTINGS;

import android.app.Application;
import android.app.NotificationChannel;
import android.app.NotificationChannelGroup;
@@ -62,13 +60,12 @@ import com.android.settings.slices.SliceBuilderUtils;
import com.android.settingslib.RestrictedLockUtils;
import com.android.settingslib.RestrictedLockUtilsInternal;
import com.android.settingslib.applications.ApplicationsState;
import com.android.settingslib.utils.ThreadUtils;

import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
@@ -135,7 +132,6 @@ public class NotificationChannelSlice implements CustomSliceable {
            };

    protected final Context mContext;
    private final ExecutorService mExecutorService;
    @VisibleForTesting
    NotificationBackend mNotificationBackend;
    private NotificationBackend.AppRow mAppRow;
@@ -145,7 +141,6 @@ public class NotificationChannelSlice implements CustomSliceable {
    public NotificationChannelSlice(Context context) {
        mContext = context;
        mNotificationBackend = new NotificationBackend();
        mExecutorService = Executors.newCachedThreadPool();
    }

    @Override
@@ -376,9 +371,9 @@ public class NotificationChannelSlice implements CustomSliceable {
        // Create tasks to get notification data for multi-channel packages.
        final List<Future<NotificationBackend.AppRow>> appRowTasks = new ArrayList<>();
        for (PackageInfo packageInfo : packageInfoList) {
            final NotificationMultiChannelAppRow future = new NotificationMultiChannelAppRow(
            final NotificationMultiChannelAppRow appRow = new NotificationMultiChannelAppRow(
                    mContext, mNotificationBackend, packageInfo);
            appRowTasks.add(mExecutorService.submit(future));
            appRowTasks.add(ThreadUtils.postOnBackgroundThread(appRow));
        }

        // Get the package which has sent at least ~10 notifications and not turn off channels.