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

Commit 21e82315 authored by Jason Chiu's avatar Jason Chiu Committed by android-build-merger
Browse files

Fix Settings creating too many threads unexpectedly

am: 48a0ff43

Change-Id: I28068c2c68bffd0d97c1286df4f034a1f4a9825d
parents 1a71177b 48a0ff43
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.