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

Commit fd744d49 authored by Jack Yu's avatar Jack Yu Committed by android-build-merger
Browse files

Added debug messages and watchdog

am: edc66a18

Change-Id: Idbab232cf1352dd77729d81fb44dce985701609d
parents cd71b7e4 edc66a18
Loading
Loading
Loading
Loading
+50 −7
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.internal.telephony.dataconnection;

import static android.text.format.DateUtils.MINUTE_IN_MILLIS;

import android.annotation.NonNull;
import android.app.AppOpsManager;
import android.content.BroadcastReceiver;
@@ -39,6 +41,7 @@ import android.os.ServiceManager;
import android.os.UserHandle;
import android.telephony.AccessNetworkConstants;
import android.telephony.AccessNetworkConstants.TransportType;
import android.telephony.AnomalyReporter;
import android.telephony.CarrierConfigManager;
import android.telephony.Rlog;
import android.telephony.data.DataCallResponse;
@@ -55,6 +58,7 @@ import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.ConcurrentHashMap;

/**
@@ -68,6 +72,10 @@ public class DataServiceManager extends Handler {

    private static final int EVENT_BIND_DATA_SERVICE = 1;

    private static final int EVENT_WATCHDOG_TIMEOUT = 2;

    private static final long REQUEST_UNRESPONDED_TIMEOUT = 10 * MINUTE_IN_MILLIS; // 10 mins

    private final Phone mPhone;

    private final String mTag;
@@ -171,18 +179,19 @@ public class DataServiceManager extends Handler {
                service.linkToDeath(mDeathRecipient, 0);
                mIDataService.createDataServiceProvider(mPhone.getPhoneId());
                mIDataService.registerForDataCallListChanged(mPhone.getPhoneId(),
                        new CellularDataServiceCallback());
                        new CellularDataServiceCallback("dataCallListChanged"));
            } catch (RemoteException e) {
                mDeathRecipient.binderDied();
                loge("Remote exception. " + e);
                return;
            }

            removeMessages(EVENT_WATCHDOG_TIMEOUT);
            mServiceBindingChangedRegistrants.notifyResult(true);
        }
        @Override
        public void onServiceDisconnected(ComponentName name) {
            if (DBG) log("onServiceDisconnected");
            removeMessages(EVENT_WATCHDOG_TIMEOUT);
            mIDataService.asBinder().unlinkToDeath(mDeathRecipient, 0);
            mIDataService = null;
            mBound = false;
@@ -192,6 +201,17 @@ public class DataServiceManager extends Handler {
    }

    private final class CellularDataServiceCallback extends IDataServiceCallback.Stub {

        private final String mTag;

        CellularDataServiceCallback(String tag) {
            mTag = tag;
        }

        public String getTag() {
            return mTag;
        }

        @Override
        public void onSetupDataCallComplete(@DataServiceCallback.ResultCode int resultCode,
                                            DataCallResponse response) {
@@ -199,6 +219,7 @@ public class DataServiceManager extends Handler {
                log("onSetupDataCallComplete. resultCode = " + resultCode + ", response = "
                        + response);
            }
            removeMessages(EVENT_WATCHDOG_TIMEOUT, CellularDataServiceCallback.this);
            Message msg = mMessageMap.remove(asBinder());
            if (msg != null) {
                msg.getData().putParcelable(DATA_CALL_RESPONSE, response);
@@ -211,6 +232,7 @@ public class DataServiceManager extends Handler {
        @Override
        public void onDeactivateDataCallComplete(@DataServiceCallback.ResultCode int resultCode) {
            if (DBG) log("onDeactivateDataCallComplete. resultCode = " + resultCode);
            removeMessages(EVENT_WATCHDOG_TIMEOUT, CellularDataServiceCallback.this);
            Message msg = mMessageMap.remove(asBinder());
            sendCompleteMessage(msg, resultCode);
        }
@@ -279,11 +301,25 @@ public class DataServiceManager extends Handler {
            case EVENT_BIND_DATA_SERVICE:
                bindDataService();
                break;
            case EVENT_WATCHDOG_TIMEOUT:
                handleRequestUnresponded((CellularDataServiceCallback) msg.obj);
                break;
            default:
                loge("Unhandled event " + msg.what);
        }
    }

    private void handleRequestUnresponded(CellularDataServiceCallback callback) {
        String message = "Request " + callback.getTag() + " unresponded on transport "
                + AccessNetworkConstants.transportTypeToString(mTransportType) + " in "
                + REQUEST_UNRESPONDED_TIMEOUT / 1000 + " seconds.";
        log(message);
        // Using fixed UUID to avoid duplicate bugreport notification
        AnomalyReporter.reportAnomaly(
                UUID.fromString("f5d5cbe6-9bd6-4009-b764-42b1b649b1de"),
                message);
    }

    private void bindDataService() {
        Intent intent = null;
        String packageName = getDataServicePackageName();
@@ -490,11 +526,13 @@ public class DataServiceManager extends Handler {
            return;
        }

        CellularDataServiceCallback callback = new CellularDataServiceCallback();
        CellularDataServiceCallback callback = new CellularDataServiceCallback("setupDataCall");
        if (onCompleteMessage != null) {
            mMessageMap.put(callback.asBinder(), onCompleteMessage);
        }
        try {
            sendMessageDelayed(obtainMessage(EVENT_WATCHDOG_TIMEOUT, callback),
                    REQUEST_UNRESPONDED_TIMEOUT);
            mIDataService.setupDataCall(mPhone.getPhoneId(), accessNetworkType, dataProfile,
                    isRoaming, allowRoaming, reason, linkProperties, callback);
        } catch (RemoteException e) {
@@ -525,11 +563,14 @@ public class DataServiceManager extends Handler {
            return;
        }

        CellularDataServiceCallback callback = new CellularDataServiceCallback();
        CellularDataServiceCallback callback =
                new CellularDataServiceCallback("deactivateDataCall");
        if (onCompleteMessage != null) {
            mMessageMap.put(callback.asBinder(), onCompleteMessage);
        }
        try {
            sendMessageDelayed(obtainMessage(EVENT_WATCHDOG_TIMEOUT, callback),
                    REQUEST_UNRESPONDED_TIMEOUT);
            mIDataService.deactivateDataCall(mPhone.getPhoneId(), cid, reason, callback);
        } catch (RemoteException e) {
            loge("Cannot invoke deactivateDataCall on data service.");
@@ -555,7 +596,8 @@ public class DataServiceManager extends Handler {
            return;
        }

        CellularDataServiceCallback callback = new CellularDataServiceCallback();
        CellularDataServiceCallback callback =
                new CellularDataServiceCallback("setInitialAttachApn");
        if (onCompleteMessage != null) {
            mMessageMap.put(callback.asBinder(), onCompleteMessage);
        }
@@ -588,7 +630,7 @@ public class DataServiceManager extends Handler {
            return;
        }

        CellularDataServiceCallback callback = new CellularDataServiceCallback();
        CellularDataServiceCallback callback = new CellularDataServiceCallback("setDataProfile");
        if (onCompleteMessage != null) {
            mMessageMap.put(callback.asBinder(), onCompleteMessage);
        }
@@ -615,7 +657,8 @@ public class DataServiceManager extends Handler {
            return;
        }

        CellularDataServiceCallback callback = new CellularDataServiceCallback();
        CellularDataServiceCallback callback =
                new CellularDataServiceCallback("requestDataCallList");
        if (onCompleteMessage != null) {
            mMessageMap.put(callback.asBinder(), onCompleteMessage);
        }