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

Commit c12472b4 authored by Treehugger Robot's avatar Treehugger Robot Committed by Gerrit Code Review
Browse files

Merge changes from topic "ims-crash-detector"

* changes:
  [ImsService] trigger bugreport when IMS service crash
  [ImsService] Support to trigger bugreport when IMS service crash
parents 4a938d32 3672c8d8
Loading
Loading
Loading
Loading
+36 −1
Original line number Original line Diff line number Diff line
@@ -20,6 +20,8 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Context;
import android.content.Intent;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.ServiceConnection;
import android.content.pm.ChangedPackages;
import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.IBinder;
@@ -27,6 +29,7 @@ import android.os.IInterface;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserHandle;
import android.permission.PermissionManager;
import android.permission.PermissionManager;
import android.telephony.AnomalyReporter;
import android.telephony.ims.ImsService;
import android.telephony.ims.ImsService;
import android.telephony.ims.aidl.IImsConfig;
import android.telephony.ims.aidl.IImsConfig;
import android.telephony.ims.aidl.IImsRegistration;
import android.telephony.ims.aidl.IImsRegistration;
@@ -48,6 +51,7 @@ import java.io.PrintWriter;
import java.util.HashSet;
import java.util.HashSet;
import java.util.List;
import java.util.List;
import java.util.Set;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CountDownLatch;
import java.util.stream.Collectors;
import java.util.stream.Collectors;


@@ -66,7 +70,10 @@ import java.util.stream.Collectors;
 * called for each feature that is created/removed.
 * called for each feature that is created/removed.
 */
 */
public class ImsServiceController {
public class ImsServiceController {

    private final UUID mAnomalyUUID = UUID.fromString("e93b05e4-6d0a-4755-a6da-a2d2dbfb10d6");
    private int mLastSequenceNumber = 0;
    private ChangedPackages mChangedPackages;
    private PackageManager mPackageManager;
    class ImsServiceConnection implements ServiceConnection {
    class ImsServiceConnection implements ServiceConnection {
        // Track the status of whether or not the Service has died in case we need to permanently
        // Track the status of whether or not the Service has died in case we need to permanently
        // unbind (see onNullBinding below).
        // unbind (see onNullBinding below).
@@ -116,6 +123,7 @@ public class ImsServiceController {
            mLocalLog.log("onServiceDisconnected");
            mLocalLog.log("onServiceDisconnected");
            Log.w(LOG_TAG, "ImsService(" + name + "): onServiceDisconnected. Waiting...");
            Log.w(LOG_TAG, "ImsService(" + name + "): onServiceDisconnected. Waiting...");
            // Service disconnected, but we are still technically bound. Waiting for reconnect.
            // Service disconnected, but we are still technically bound. Waiting for reconnect.
            checkAndReportAnomaly(name);
        }
        }


        @Override
        @Override
@@ -316,6 +324,14 @@ public class ImsServiceController {
        mPermissionManager =
        mPermissionManager =
                (PermissionManager) mContext.getSystemService(Context.PERMISSION_SERVICE);
                (PermissionManager) mContext.getSystemService(Context.PERMISSION_SERVICE);
        mRepo = repo;
        mRepo = repo;

        mPackageManager = mContext.getPackageManager();
        if (mPackageManager != null) {
            mChangedPackages = mPackageManager.getChangedPackages(mLastSequenceNumber);
            if (mChangedPackages != null) {
                mLastSequenceNumber = mChangedPackages.getSequenceNumber();
            }
        }
    }
    }


    @VisibleForTesting
    @VisibleForTesting
@@ -815,6 +831,25 @@ public class ImsServiceController {
        }
        }
    }
    }


    private void checkAndReportAnomaly(ComponentName name) {
        if (mPackageManager == null) {
            Log.w(LOG_TAG, "mPackageManager null");
            return;
        }
        ChangedPackages curChangedPackages =
                            mPackageManager.getChangedPackages(mLastSequenceNumber);
        if (curChangedPackages != null) {
            mLastSequenceNumber = curChangedPackages.getSequenceNumber();
            List<String> packagesNames = curChangedPackages.getPackageNames();
            if (packagesNames.contains(name.getPackageName())) {
                Log.d(LOG_TAG, "Ignore due to updated, package: " + name.getPackageName());
                return;
            }
        }
        String message = "IMS Service Crashed";
        AnomalyReporter.reportAnomaly(mAnomalyUUID, message);
    }

    @Override
    @Override
    public String toString() {
    public String toString() {
        synchronized (mLock) {
        synchronized (mLock) {