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

Commit 929d2cea authored by Aishwarya Mallampati's avatar Aishwarya Mallampati Committed by Android (Google) Code Review
Browse files

Merge "Change boolean to AtomicBoolean" into main

parents 363648c3 2808b12b
Loading
Loading
Loading
Loading
+49 −38
Original line number Diff line number Diff line
@@ -44,7 +44,6 @@ import android.text.TextUtils;
import android.util.Log;

import com.android.internal.R;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.os.SomeArgs;
import com.android.internal.telephony.flags.FeatureFlags;
@@ -67,33 +66,41 @@ public class PointingAppController extends Handler {
    private static final int REQUEST_START_POINTING_UI = 1;
    private static final int REQUEST_REMOVE_LISTENER_FOR_POINTING_UI = 2;

    /** All the variables initialized inside the constructor are declared here. */
    @NonNull
    private static PointingAppController sInstance;
    @NonNull private final Context mContext;
    @NonNull private final FeatureFlags mFeatureFlags;
    @NonNull private ActivityManager mActivityManager;
    @Nullable private PersistentLogger mPersistentLogger = null;

    /** All the variables initialized inside the constructor are declared here. */
    private AtomicBoolean mStartedSatelliteTransmissionUpdates = new AtomicBoolean(false);
    private AtomicBoolean mLastNeedFullScreenPointingUI = new AtomicBoolean(false);
    private AtomicBoolean mLastIsDemoMode = new AtomicBoolean(false);
    private AtomicBoolean mLastIsEmergency = new AtomicBoolean(false);
    private AtomicBoolean mListenerForPointingUIRegistered = new AtomicBoolean(false);

    private final Object mListenerForPointingUIRegisteredLock = new Object();
    @GuardedBy("mListenerForPointingUIRegisteredLock")
    private boolean mListenerForPointingUIRegistered;
    @NonNull private String mPointingUiPackageName = "";
    @NonNull private String mPointingUiClassName = "";
    @NonNull private ActivityManager mActivityManager;
    @NonNull public UidImportanceListener mUidImportanceListener = new UidImportanceListener();
    /**
     * Map key: subId, value: SatelliteTransmissionUpdateHandler to notify registrants.
     */
    private final ConcurrentHashMap<Integer, SatelliteTransmissionUpdateHandler>
            mSatelliteTransmissionUpdateHandlers = new ConcurrentHashMap<>();
    @Nullable private PersistentLogger mPersistentLogger = null;


    /**
     * All the variables declared here should only be accessed by methods that run inside the
     * handler thread.
     */
    @NonNull private String mPointingUiPackageName = "";
    @NonNull private String mPointingUiClassName = "";
    @NonNull public UidImportanceListener mUidImportanceListener = new UidImportanceListener();


    /**
     * @return The singleton instance of PointingAppController.
     */
    public static PointingAppController getInstance() {
    static PointingAppController getInstance() {
        if (sInstance == null) {
            loge("PointingAppController was not yet initialized.");
        }
@@ -106,7 +113,7 @@ public class PointingAppController extends Handler {
     * @param featureFlags The telephony feature flags.
     * @return The singleton instance of PointingAppController.
     */
    public static PointingAppController make(@NonNull Context context,
    static PointingAppController make(@NonNull Context context,
            @NonNull FeatureFlags featureFlags) {
        if (sInstance == null) {
            sInstance = new PointingAppController(context, featureFlags);
@@ -120,11 +127,11 @@ public class PointingAppController extends Handler {
     * @param context The Context for the PointingUIController.
     */
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    public PointingAppController(@NonNull Context context,
    protected PointingAppController(@NonNull Context context,
            @NonNull FeatureFlags featureFlags) {
        mContext = context;
        mFeatureFlags = featureFlags;
        mListenerForPointingUIRegistered = false;
        mListenerForPointingUIRegistered.set(false);
        mActivityManager = mContext.getSystemService(ActivityManager.class);
        mPersistentLogger = SatelliteServiceUtils.getPersistentLogger(context);
    }
@@ -162,8 +169,8 @@ public class PointingAppController extends Handler {
     * transmission updates
     * @param startedSatelliteTransmissionUpdates boolean to set the flag
     */
    @VisibleForTesting
    public void setStartedSatelliteTransmissionUpdates(
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void setStartedSatelliteTransmissionUpdates(
            boolean startedSatelliteTransmissionUpdates) {
        mStartedSatelliteTransmissionUpdates.set(startedSatelliteTransmissionUpdates);
    }
@@ -172,8 +179,8 @@ public class PointingAppController extends Handler {
     * Get the flag mStartedSatelliteTransmissionUpdates
     * @return returns mStartedSatelliteTransmissionUpdates
     */
    @VisibleForTesting
    public boolean getStartedSatelliteTransmissionUpdates() {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PRIVATE)
    protected boolean getStartedSatelliteTransmissionUpdates() {
        return mStartedSatelliteTransmissionUpdates.get();
    }

@@ -338,7 +345,8 @@ public class PointingAppController extends Handler {
     * @param subId The subId of the subscription to register for receiving the updates.
     * @param callback The callback to notify of satellite transmission updates.
     */
    public void registerForSatelliteTransmissionUpdates(int subId,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void registerForSatelliteTransmissionUpdates(int subId,
            ISatelliteTransmissionUpdateCallback callback) {
        subId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
        SatelliteTransmissionUpdateHandler handler =
@@ -367,7 +375,8 @@ public class PointingAppController extends Handler {
     * @param callback The callback that was passed to {@link
     * #registerForSatelliteTransmissionUpdates(int, ISatelliteTransmissionUpdateCallback)}.
     */
    public void unregisterForSatelliteTransmissionUpdates(int subId, Consumer<Integer> result,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void unregisterForSatelliteTransmissionUpdates(int subId, Consumer<Integer> result,
            ISatelliteTransmissionUpdateCallback callback) {
        subId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
        SatelliteTransmissionUpdateHandler handler =
@@ -394,7 +403,8 @@ public class PointingAppController extends Handler {
     * {@link android.telephony.satellite.SatelliteTransmissionUpdateCallback
     * #onSatellitePositionChanged(pointingInfo)}.
     */
    public void startSatelliteTransmissionUpdates(@NonNull Message message) {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void startSatelliteTransmissionUpdates(@NonNull Message message) {
        if (mStartedSatelliteTransmissionUpdates.get()) {
            plogd("startSatelliteTransmissionUpdates: already started");
            AsyncResult.forMessage(message, null, new SatelliteManager.SatelliteException(
@@ -411,7 +421,8 @@ public class PointingAppController extends Handler {
     * Reset the flag mStartedSatelliteTransmissionUpdates
     * This can be called by the pointing UI when the user stops pointing to the satellite.
     */
    public void stopSatelliteTransmissionUpdates(@NonNull Message message) {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void stopSatelliteTransmissionUpdates(@NonNull Message message) {
        setStartedSatelliteTransmissionUpdates(false);
        SatelliteModemInterface.getInstance().stopSendingSatellitePointingInfo(message);
    }
@@ -420,7 +431,8 @@ public class PointingAppController extends Handler {
     * Check if Pointing is needed and Launch Pointing UI
     * @param needFullScreenPointingUI if pointing UI has to be launchd with Full screen
     */
    public void startPointingUI(boolean needFullScreenPointingUI, boolean isDemoMode,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void startPointingUI(boolean needFullScreenPointingUI, boolean isDemoMode,
            boolean isEmergency) {
        if (mFeatureFlags.satelliteImproveMultiThreadDesign()) {
            SomeArgs args = SomeArgs.obtain();
@@ -462,13 +474,12 @@ public class PointingAppController extends Handler {
        launchIntent.putExtra("isEmergency", isEmergency);

        try {
            synchronized (mListenerForPointingUIRegisteredLock) {
                if (!mListenerForPointingUIRegistered) {
            if (!mListenerForPointingUIRegistered.get()) {
                mActivityManager.addOnUidImportanceListener(mUidImportanceListener,
                        IMPORTANCE_GONE);
                    mListenerForPointingUIRegistered = true;
                }
                mListenerForPointingUIRegistered.set(true);
            }

            mLastNeedFullScreenPointingUI.set(needFullScreenPointingUI);
            mLastIsDemoMode.set(isDemoMode);
            mLastIsEmergency.set(isEmergency);
@@ -482,7 +493,8 @@ public class PointingAppController extends Handler {
    /**
     * Remove the Importance Listener For Pointing UI App once the satellite is disabled
     */
    public void removeListenerForPointingUI() {
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void removeListenerForPointingUI() {
        if (mFeatureFlags.satelliteImproveMultiThreadDesign()) {
            sendMessage(obtainMessage(REQUEST_REMOVE_LISTENER_FOR_POINTING_UI));
            return;
@@ -493,15 +505,14 @@ public class PointingAppController extends Handler {

    private void handleRequestRemoveListenerForPointingUI() {
        plogd("handleRequestRemoveListenerForPointingUI");
        synchronized (mListenerForPointingUIRegisteredLock) {
            if (mListenerForPointingUIRegistered) {
        if (mListenerForPointingUIRegistered.get()) {
            mActivityManager.removeOnUidImportanceListener(mUidImportanceListener);
                mListenerForPointingUIRegistered = false;
            }
            mListenerForPointingUIRegistered.set(false);
        }
    }

    public void updateSendDatagramTransferState(int subId,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void updateSendDatagramTransferState(int subId,
            @SatelliteManager.DatagramType int datagramType,
            @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState,
            int sendPendingCount, int errorCode) {
@@ -525,8 +536,7 @@ public class PointingAppController extends Handler {
     * This API is used to notify PointingAppController that a send datagram has just been
     * requested.
     */
    public void onSendDatagramRequested(
            int subId, @SatelliteManager.DatagramType int datagramType) {
    void onSendDatagramRequested(int subId, @SatelliteManager.DatagramType int datagramType) {
        subId = SubscriptionManager.DEFAULT_SUBSCRIPTION_ID;
        SatelliteTransmissionUpdateHandler handler =
                mSatelliteTransmissionUpdateHandlers.get(subId);
@@ -540,7 +550,8 @@ public class PointingAppController extends Handler {
        }
    }

    public void updateReceiveDatagramTransferState(int subId,
    @VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
    protected void updateReceiveDatagramTransferState(int subId,
            @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState,
            int receivePendingCount, int errorCode) {
        DatagramTransferStateHandlerRequest request = new DatagramTransferStateHandlerRequest(
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ public class DatagramControllerTest extends TelephonyTest {

    @Mock private DatagramReceiverTest.TestDatagramReceiver mMockDatagramReceiver;
    @Mock private DatagramDispatcher mMockDatagramDispatcher;
    @Mock private PointingAppController mMockPointingAppController;
    @Mock private PointingAppControllerTest.TestPointingAppController mMockPointingAppController;
    @Mock private SatelliteSessionController mMockSatelliteSessionController;
    @Mock private SatelliteController mMockSatelliteController;

+74 −2
Original line number Diff line number Diff line
@@ -33,6 +33,8 @@ import static org.mockito.Mockito.never;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;

import android.annotation.NonNull;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.AsyncResult;
@@ -50,6 +52,7 @@ import android.util.Log;

import com.android.internal.R;
import com.android.internal.telephony.TelephonyTest;
import com.android.internal.telephony.flags.FeatureFlags;

import org.junit.After;
import org.junit.Before;
@@ -63,6 +66,7 @@ import org.mockito.MockitoAnnotations;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;
import java.util.function.Consumer;

@RunWith(AndroidTestingRunner.class)
@TestableLooper.RunWithLooper
@@ -80,7 +84,7 @@ public class PointingAppControllerTest extends TelephonyTest {
    private static final String KEY_IS_DEMO_MODE = "isDemoMode";
    private static final String KEY_IS_EMERGENCY = "isEmergency";

    private PointingAppController mPointingAppController;
    private TestPointingAppController mPointingAppController;
    InOrder mInOrder;
    InOrder mInOrderForPointingUi;

@@ -107,7 +111,7 @@ public class PointingAppControllerTest extends TelephonyTest {
        replaceInstance(SatelliteController.class, "sInstance", null,
                mMockSatelliteController);
        doReturn(true).when(mFeatureFlags).satelliteImproveMultiThreadDesign();
        mPointingAppController = new PointingAppController(mContext, mFeatureFlags);
        mPointingAppController = new TestPointingAppController(mContext, mFeatureFlags);
        mContextFixture.putResource(R.string.config_pointing_ui_package,
                KEY_POINTING_UI_PACKAGE_NAME);
        mContextFixture.putResource(R.string.config_pointing_ui_class,
@@ -454,4 +458,72 @@ public class PointingAppControllerTest extends TelephonyTest {
    private static void loge(String message) {
        Log.e(TAG, message);
    }

    public static class TestPointingAppController extends PointingAppController {
        public TestPointingAppController(@NonNull Context context,
                @NonNull FeatureFlags featureFlags) {
            super(context, featureFlags);
        }

        @Override
        protected void setStartedSatelliteTransmissionUpdates(
                boolean startedSatelliteTransmissionUpdates) {
            super.setStartedSatelliteTransmissionUpdates(startedSatelliteTransmissionUpdates);
        }

        @Override
        protected boolean getStartedSatelliteTransmissionUpdates() {
            return super.getStartedSatelliteTransmissionUpdates();
        }

        @Override
        protected void registerForSatelliteTransmissionUpdates(int subId,
                ISatelliteTransmissionUpdateCallback callback) {
            super.registerForSatelliteTransmissionUpdates(subId, callback);
        }

        @Override
        protected void unregisterForSatelliteTransmissionUpdates(int subId,
                Consumer<Integer> result, ISatelliteTransmissionUpdateCallback callback) {
            super.unregisterForSatelliteTransmissionUpdates(subId, result, callback);
        }

        @Override
        protected void startSatelliteTransmissionUpdates(@NonNull Message message) {
            super.startSatelliteTransmissionUpdates(message);
        }

        @Override
        protected void stopSatelliteTransmissionUpdates(@NonNull Message message) {
            super.stopSatelliteTransmissionUpdates(message);
        }

        @Override
        protected void startPointingUI(boolean needFullScreenPointingUI, boolean isDemoMode,
                boolean isEmergency) {
            super.startPointingUI(needFullScreenPointingUI, isDemoMode, isEmergency);
        }

        @Override
        protected void removeListenerForPointingUI() {
            super.removeListenerForPointingUI();
        }

        @Override
        protected void updateSendDatagramTransferState(int subId,
                @SatelliteManager.DatagramType int datagramType,
                @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState,
                int sendPendingCount, int errorCode) {
            super.updateSendDatagramTransferState(subId, datagramType, datagramTransferState,
                    sendPendingCount, errorCode);
        }

        @Override
        protected void updateReceiveDatagramTransferState(int subId,
                @SatelliteManager.SatelliteDatagramTransferState int datagramTransferState,
                int receivePendingCount, int errorCode) {
            super.updateReceiveDatagramTransferState(subId, datagramTransferState,
                    receivePendingCount, errorCode);
        }
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -266,7 +266,7 @@ public class SatelliteControllerTest extends TelephonyTest {
    @Mock private DatagramControllerTest.TestDatagramController mMockDatagramController;
    @Mock private SatelliteModemInterface mMockSatelliteModemInterface;
    @Mock private SatelliteSessionController mMockSatelliteSessionController;
    @Mock private PointingAppController mMockPointingAppController;
    @Mock private PointingAppControllerTest.TestPointingAppController mMockPointingAppController;
    @Mock private ControllerMetricsStats mMockControllerMetricsStats;
    @Mock private ProvisionMetricsStats mMockProvisionMetricsStats;
    @Mock private SessionMetricsStats mMockSessionMetricsStats;