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

Commit baacfd79 authored by Makoto Onuki's avatar Makoto Onuki
Browse files

Use different exceptions for different crash reasons

Always throwing RemoteServiceException would make it impossible to
tell the cause of a crash without the string message.

Let's use a different exception type so developers can cluster crashes
without the exception message.

Bug: 124137635
Test: Treehugger
Change-Id: Ibae57bdb1b8965241c41249a89c728d224e4e995
parent c0cca5c4
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -79,18 +79,20 @@ public final class PasswordUtils extends com.android.settingslib.Utils {
    }

    /** Crashes the calling application and provides it with {@code message}. */
    public static void crashCallingApplication(IBinder activityToken, String message) {
    public static void crashCallingApplication(IBinder activityToken, String message,
            int exceptionTypeId) {
        IActivityManager am = ActivityManager.getService();
        try {
            int uid = am.getLaunchedFromUid(activityToken);
            int userId = UserHandle.getUserId(uid);
            am.crashApplication(
            am.crashApplicationWithType(
                    uid,
                    /* initialPid= */ -1,
                    getCallingAppPackageName(activityToken),
                    userId,
                    message,
                    false);
                    false,
                    exceptionTypeId);
        } catch (RemoteException e) {
            Log.v(TAG, "Could not talk to activity manager.", e);
        }
+3 −1
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_I
import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;

import android.app.Activity;
import android.app.RemoteServiceException.MissingRequestPasswordComplexityPermissionException;
import android.app.admin.DevicePolicyManager;
import android.app.admin.DevicePolicyManager.PasswordComplexity;
import android.app.admin.PasswordMetrics;
@@ -101,7 +102,8 @@ public class SetNewPasswordActivity extends Activity implements SetNewPasswordCo
                PasswordUtils.crashCallingApplication(activityToken,
                        "Must have permission "
                                + REQUEST_PASSWORD_COMPLEXITY + " to use extra "
                                + EXTRA_PASSWORD_COMPLEXITY);
                                + EXTRA_PASSWORD_COMPLEXITY,
                        MissingRequestPasswordComplexityPermissionException.TYPE_ID);
                finish();
                return;
            }
+3 −1
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import static android.app.admin.DevicePolicyManager.EXTRA_PASSWORD_COMPLEXITY;

import static com.android.settings.password.ChooseLockSettingsHelper.EXTRA_KEY_REQUESTED_MIN_COMPLEXITY;

import android.app.RemoteServiceException.MissingRequestPasswordComplexityPermissionException;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
@@ -79,7 +80,8 @@ public class SetupChooseLockGeneric extends ChooseLockGeneric {
            if (!hasPermission) {
                PasswordUtils.crashCallingApplication(activityToken,
                        "Must have permission " + REQUEST_PASSWORD_COMPLEXITY
                                + " to use extra " + EXTRA_PASSWORD_COMPLEXITY);
                                + " to use extra " + EXTRA_PASSWORD_COMPLEXITY,
                        MissingRequestPasswordComplexityPermissionException.TYPE_ID);
                finish();
                return;
            }