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

Commit 3672c8d8 authored by Willy Hu's avatar Willy Hu
Browse files

[ImsService] trigger bugreport when IMS service crash

- Ignore the update package case

Bug: 171800024
Test: 1. build pass.
      2. Manual install CarrierService.apk,
         it will not trigger bugreport due to system update package.
      3. Trigger bugreport when kill process case.
      4. atest FrameworksTelephonyTests
Change-Id: I6b250a5c756c672ad8ee57919acb970f434d746d
Merged-In: I6b250a5c756c672ad8ee57919acb970f434d746d
parent e51504e7
Loading
Loading
Loading
Loading
+33 −3
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.content.pm.ChangedPackages;
import android.content.pm.PackageManager;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
@@ -69,6 +71,9 @@ import java.util.stream.Collectors;
 */
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 {
        // Track the status of whether or not the Service has died in case we need to permanently
        // unbind (see onNullBinding below).
@@ -118,9 +123,7 @@ public class ImsServiceController {
            mLocalLog.log("onServiceDisconnected");
            Log.w(LOG_TAG, "ImsService(" + name + "): onServiceDisconnected. Waiting...");
            // Service disconnected, but we are still technically bound. Waiting for reconnect.

            String message = "IMS Service Crashed";
            AnomalyReporter.reportAnomaly(mAnomalyUUID, message);
            checkAndReportAnomaly(name);
        }

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

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

    @VisibleForTesting
@@ -820,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
    public String toString() {
        synchronized (mLock) {