diff options
| author | Yi Jin <jinyithu@google.com> | 2018-01-26 13:42:43 -0800 |
|---|---|---|
| committer | Yi Jin <jinyithu@google.com> | 2018-01-29 21:01:09 -0800 |
| commit | 3ec5cc792e932dc668bf9fb2cf5e6c6288a7f9b4 (patch) | |
| tree | 9ce5b163e4d6f7e03cac2b0f8d6489047755eff0 /core/java | |
| parent | 8a972cf38091f36e98a522743216998c4915d24e (diff) | |
Modify SystemApi so it can be used by CTS to trigger incident report
Bug: 72502621
Test: Cts/Gts tests covered, see the cls from the same topic
Change-Id: Id0c1cc0fc0054e620de1349dab66513e554b1caa
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/os/IncidentManager.java | 42 | ||||
| -rw-r--r-- | core/java/android/os/IncidentReportArgs.java | 13 |
2 files changed, 47 insertions, 8 deletions
diff --git a/core/java/android/os/IncidentManager.java b/core/java/android/os/IncidentManager.java index 1336c66b7133..9b6d6e56407a 100644 --- a/core/java/android/os/IncidentManager.java +++ b/core/java/android/os/IncidentManager.java @@ -33,10 +33,12 @@ import android.util.Slog; @TestApi @SystemService(Context.INCIDENT_SERVICE) public class IncidentManager { - private static final String TAG = "incident"; + private static final String TAG = "IncidentManager"; private final Context mContext; + private IIncidentManager mService; + /** * @hide */ @@ -96,19 +98,45 @@ public class IncidentManager { reportIncidentInternal(args); } - private void reportIncidentInternal(IncidentReportArgs args) { - final IIncidentManager service = IIncidentManager.Stub.asInterface( - ServiceManager.getService(Context.INCIDENT_SERVICE)); - if (service == null) { - Slog.e(TAG, "reportIncident can't find incident binder service"); - return; + private class IncidentdDeathRecipient implements IBinder.DeathRecipient { + @Override + public void binderDied() { + synchronized (this) { + mService = null; + } } + } + private void reportIncidentInternal(IncidentReportArgs args) { try { + final IIncidentManager service = getIIncidentManagerLocked(); + if (service == null) { + Slog.e(TAG, "reportIncident can't find incident binder service"); + return; + } service.reportIncident(args); } catch (RemoteException ex) { Slog.e(TAG, "reportIncident failed", ex); } } + + private IIncidentManager getIIncidentManagerLocked() throws RemoteException { + if (mService != null) { + return mService; + } + + synchronized (this) { + if (mService != null) { + return mService; + } + mService = IIncidentManager.Stub.asInterface( + ServiceManager.getService(Context.INCIDENT_SERVICE)); + if (mService != null) { + mService.asBinder().linkToDeath(new IncidentdDeathRecipient(), 0); + } + return mService; + } + } + } diff --git a/core/java/android/os/IncidentReportArgs.java b/core/java/android/os/IncidentReportArgs.java index fd0ebcfea080..9fa129cb98b4 100644 --- a/core/java/android/os/IncidentReportArgs.java +++ b/core/java/android/os/IncidentReportArgs.java @@ -32,6 +32,9 @@ import java.util.ArrayList; @TestApi public final class IncidentReportArgs implements Parcelable { + private static final int DEST_EXPLICIT = 100; + private static final int DEST_AUTO = 200; + private final IntArray mSections = new IntArray(); private final ArrayList<byte[]> mHeaders = new ArrayList<byte[]>(); private boolean mAll; @@ -41,6 +44,7 @@ public final class IncidentReportArgs implements Parcelable { * Construct an incident report args with no fields. */ public IncidentReportArgs() { + mDest = DEST_AUTO; } /** @@ -143,7 +147,14 @@ public final class IncidentReportArgs implements Parcelable { * @hide */ public void setPrivacyPolicy(int dest) { - mDest = dest; + switch (dest) { + case DEST_EXPLICIT: + case DEST_AUTO: + mDest = dest; + break; + default: + mDest = DEST_AUTO; + } } /** |
