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

Commit fa97fcf7 authored by Ruchi Kandoi's avatar Ruchi Kandoi
Browse files

network: Adds the functionality to parse uid in netlink messages.



Netlink notifications about the state of the modem contains uid too.
This patch adds the functionality to add that. It also fixes the bug to
parse the timestamp in the message even in cases where the length is
greater than expected.

Bug: 28527904
Change-Id: I4643bff3eb5b1ffa2dc0b78f1c6947d60487e0d8
Signed-off-by: default avatarRuchi Kandoi <kandoiruchi@google.com>
parent 3b25fd08
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -90,7 +90,7 @@ interface IBatteryStats {
    void noteWakeUp(String reason, int reasonUid);
    void noteInteractive(boolean interactive);
    void noteConnectivityChanged(int type, String extra);
    void noteMobileRadioPowerState(int powerState, long timestampNs);
    void noteMobileRadioPowerState(int powerState, long timestampNs, int uid);
    void notePhoneOn();
    void notePhoneOff();
    void notePhoneSignalStrength(in SignalStrength signalStrength);
+1 −1
Original line number Diff line number Diff line
@@ -3538,7 +3538,7 @@ public class BatteryStatsImpl extends BatteryStats {
        mNumConnectivityChange++;
    }

    public void noteMobileRadioPowerState(int powerState, long timestampNs) {
    public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) {
        final long elapsedRealtime = mClocks.elapsedRealtime();
        final long uptime = mClocks.uptimeMillis();
        if (mMobileRadioPowerState != powerState) {
+11 −6
Original line number Diff line number Diff line
@@ -468,7 +468,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
     * Notify our observers of a change in the data activity state of the interface
     */
    private void notifyInterfaceClassActivity(int type, int powerState, long tsNanos,
            boolean fromRadio) {
            int uid, boolean fromRadio) {
        final boolean isMobile = ConnectivityManager.isNetworkTypeMobile(type);
        if (isMobile) {
            if (!fromRadio) {
@@ -484,7 +484,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
            if (mLastPowerStateFromRadio != powerState) {
                mLastPowerStateFromRadio = powerState;
                try {
                    getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos);
                    getBatteryStats().noteMobileRadioPowerState(powerState, tsNanos, uid);
                } catch (RemoteException e) {
                }
            }
@@ -845,9 +845,13 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                        throw new IllegalStateException(errorMessage);
                    }
                    long timestampNanos = 0;
                    if (cooked.length == 5) {
                    int processUid = -1;
                    if (cooked.length >= 5) {
                        try {
                            timestampNanos = Long.parseLong(cooked[4]);
                            if (cooked.length == 6) {
                                processUid = Integer.parseInt(cooked[5]);
                            }
                        } catch(NumberFormatException ne) {}
                    } else {
                        timestampNanos = SystemClock.elapsedRealtimeNanos();
@@ -855,7 +859,8 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                    boolean isActive = cooked[2].equals("active");
                    notifyInterfaceClassActivity(Integer.parseInt(cooked[3]),
                            isActive ? DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH
                            : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW, timestampNanos, false);
                            : DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
                            timestampNanos, processUid, false);
                    return true;
                    // break;
            case NetdResponseCode.InterfaceAddressChange:
@@ -1599,7 +1604,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                @Override public void run() {
                    notifyInterfaceClassActivity(type,
                            DataConnectionRealTimeInfo.DC_POWER_STATE_HIGH,
                            SystemClock.elapsedRealtimeNanos(), false);
                            SystemClock.elapsedRealtimeNanos(), -1, false);
                }
            });
        }
@@ -1628,7 +1633,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub
                @Override public void run() {
                    notifyInterfaceClassActivity(params.type,
                            DataConnectionRealTimeInfo.DC_POWER_STATE_LOW,
                            SystemClock.elapsedRealtimeNanos(), false);
                            SystemClock.elapsedRealtimeNanos(), -1, false);
                }
            });
        }
+2 −2
Original line number Diff line number Diff line
@@ -565,10 +565,10 @@ public final class BatteryStatsService extends IBatteryStats.Stub
        }
    }

    public void noteMobileRadioPowerState(int powerState, long timestampNs) {
    public void noteMobileRadioPowerState(int powerState, long timestampNs, int uid) {
        enforceCallingPermission();
        synchronized (mStats) {
            mStats.noteMobileRadioPowerState(powerState, timestampNs);
            mStats.noteMobileRadioPowerState(powerState, timestampNs, uid);
        }
    }