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

Commit 8fcab358 authored by Jason Monk's avatar Jason Monk
Browse files

Fix weird case of multi cell icons

 - Don't auto-inflate cell icons
 - Move callback to better time (shouldn't get callbacks before
   setSubs)
 - Fix accidental callback in MobileSignalController constructor
 - Fix subscription listener to run on the right thread to avoid
   the thread issue allowing this bug

Bug: 21504138
Change-Id: Ie1adf8eb05e1042245eead5354b29b314a2e0aae
parent bee7245c
Loading
Loading
Loading
Loading
+7 −3
Original line number Original line Diff line number Diff line
@@ -224,7 +224,10 @@ public class SignalClusterView
    public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
    public void setMobileDataIndicators(IconState statusIcon, IconState qsIcon, int statusType,
            int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
            int qsType, boolean activityIn, boolean activityOut, String typeContentDescription,
            String description, boolean isWide, int subId) {
            String description, boolean isWide, int subId) {
        PhoneState state = getOrInflateState(subId);
        PhoneState state = getState(subId);
        if (state == null) {
            return;
        }
        state.mMobileVisible = statusIcon.visible && !mBlockMobile;
        state.mMobileVisible = statusIcon.visible && !mBlockMobile;
        state.mMobileStrengthId = statusIcon.icon;
        state.mMobileStrengthId = statusIcon.icon;
        state.mMobileTypeId = statusType;
        state.mMobileTypeId = statusType;
@@ -281,13 +284,14 @@ public class SignalClusterView
        return true;
        return true;
    }
    }


    private PhoneState getOrInflateState(int subId) {
    private PhoneState getState(int subId) {
        for (PhoneState state : mPhoneStates) {
        for (PhoneState state : mPhoneStates) {
            if (state.mSubId == subId) {
            if (state.mSubId == subId) {
                return state;
                return state;
            }
            }
        }
        }
        return inflatePhoneState(subId);
        Log.e(TAG, "Unexpected subscription " + subId);
        return null;
    }
    }


    private PhoneState inflatePhoneState(int subId) {
    private PhoneState inflatePhoneState(int subId) {
+1 −1
Original line number Original line Diff line number Diff line
@@ -291,6 +291,7 @@ public class MobileSignalController extends SignalController<
            notifyListenersIfNecessary();
            notifyListenersIfNecessary();
        } else if (action.equals(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)) {
        } else if (action.equals(TelephonyIntents.ACTION_DEFAULT_DATA_SUBSCRIPTION_CHANGED)) {
            updateDataSim();
            updateDataSim();
            notifyListenersIfNecessary();
        }
        }
    }
    }


@@ -308,7 +309,6 @@ public class MobileSignalController extends SignalController<
            // for long.
            // for long.
            mCurrentState.dataSim = true;
            mCurrentState.dataSim = true;
        }
        }
        notifyListenersIfNecessary();
    }
    }


    /**
    /**
+11 −5
Original line number Original line Diff line number Diff line
@@ -110,6 +110,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
    // The current user ID.
    // The current user ID.
    private int mCurrentUserId;
    private int mCurrentUserId;


    private OnSubscriptionsChangedListener mSubscriptionListener;

    // Handler that all broadcasts are received on.
    // Handler that all broadcasts are received on.
    private final Handler mReceiverHandler;
    private final Handler mReceiverHandler;
    // Handler that all callbacks are made on.
    // Handler that all callbacks are made on.
@@ -179,6 +181,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
        for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) {
        for (MobileSignalController mobileSignalController : mMobileSignalControllers.values()) {
            mobileSignalController.registerListener();
            mobileSignalController.registerListener();
        }
        }
        if (mSubscriptionListener == null) {
            mSubscriptionListener = new SubListener();
        }
        mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener);
        mSubscriptionManager.addOnSubscriptionsChangedListener(mSubscriptionListener);


        // broadcasts
        // broadcasts
@@ -422,7 +427,6 @@ public class NetworkControllerImpl extends BroadcastReceiver
                        : lhs.getSimSlotIndex() - rhs.getSimSlotIndex();
                        : lhs.getSimSlotIndex() - rhs.getSimSlotIndex();
            }
            }
        });
        });
        mCallbackHandler.setSubs(subscriptions);
        mCurrentSubscriptions = subscriptions;
        mCurrentSubscriptions = subscriptions;


        HashMap<Integer, MobileSignalController> cachedControllers =
        HashMap<Integer, MobileSignalController> cachedControllers =
@@ -455,6 +459,9 @@ public class NetworkControllerImpl extends BroadcastReceiver
                cachedControllers.get(key).unregisterListener();
                cachedControllers.get(key).unregisterListener();
            }
            }
        }
        }
        mCallbackHandler.setSubs(subscriptions);
        notifyAllListeners();

        // There may be new MobileSignalControllers around, make sure they get the current
        // There may be new MobileSignalControllers around, make sure they get the current
        // inet condition and airplane mode.
        // inet condition and airplane mode.
        pushConnectivityToSignals();
        pushConnectivityToSignals();
@@ -724,13 +731,12 @@ public class NetworkControllerImpl extends BroadcastReceiver
        return info;
        return info;
    }
    }


    private final OnSubscriptionsChangedListener mSubscriptionListener =
    private class SubListener extends OnSubscriptionsChangedListener {
            new OnSubscriptionsChangedListener() {
        @Override
        @Override
        public void onSubscriptionsChanged() {
        public void onSubscriptionsChanged() {
            updateMobileControllers();
            updateMobileControllers();
        };
        }
    };
    }


    /**
    /**
     * Used to register listeners from the BG Looper, this way the PhoneStateListeners that
     * Used to register listeners from the BG Looper, this way the PhoneStateListeners that