Loading services/core/java/com/android/server/am/AppErrorDialog.java +14 −13 Original line number Diff line number Diff line Loading @@ -148,18 +148,7 @@ final class AppErrorDialog extends BaseErrorDialog implements View.OnClickListen private final Handler mHandler = new Handler() { public void handleMessage(Message msg) { final int result = msg.what; synchronized (mService) { if (mProc != null && mProc.crashDialog == AppErrorDialog.this) { mProc.crashDialog = null; } } mResult.set(result); // Make sure we don't have time timeout still hanging around. removeMessages(TIMEOUT); setResult(msg.what); dismiss(); } }; Loading @@ -168,11 +157,23 @@ final class AppErrorDialog extends BaseErrorDialog implements View.OnClickListen public void dismiss() { if (!mResult.mHasResult) { // We are dismissing and the result has not been set...go ahead and set. mResult.set(FORCE_QUIT); setResult(FORCE_QUIT); } super.dismiss(); } private void setResult(int result) { synchronized (mService) { if (mProc != null && mProc.crashDialog == AppErrorDialog.this) { mProc.crashDialog = null; } } mResult.set(result); // Make sure we don't have time timeout still hanging around. mHandler.removeMessages(TIMEOUT); } @Override public void onClick(View v) { switch (v.getId()) { Loading services/tests/servicestests/src/com/android/server/am/AppErrorDialogTest.java 0 → 100644 +76 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.am; import android.content.Context; import android.os.Handler; import android.support.test.InstrumentationRegistry; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import com.android.server.AppOpsService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.io.File; /** * runtest -c com.android.server.am.AppErrorDialogTest frameworks-services */ @RunWith(AndroidJUnit4.class) @SmallTest public class AppErrorDialogTest { private Context mContext; private ActivityManagerService mService; @Before public void setUp() throws Exception { mContext = InstrumentationRegistry.getTargetContext(); mService = new ActivityManagerService(new ActivityManagerService.Injector() { @Override public AppOpsService getAppOpsService(File file, Handler handler) { return null; } @Override public Handler getUiHandler(ActivityManagerService service) { return null; } @Override public boolean isNetworkRestrictedForUid(int uid) { return false; } }); } @Test @UiThreadTest public void testCreateWorks() throws Exception { AppErrorDialog.Data data = new AppErrorDialog.Data(); data.proc = new ProcessRecord(null, mContext.getApplicationInfo(), "name", 12345); data.result = new AppErrorResult(); AppErrorDialog dialog = new AppErrorDialog(mContext, mService, data); dialog.create(); } } Loading
services/core/java/com/android/server/am/AppErrorDialog.java +14 −13 Original line number Diff line number Diff line Loading @@ -148,18 +148,7 @@ final class AppErrorDialog extends BaseErrorDialog implements View.OnClickListen private final Handler mHandler = new Handler() { public void handleMessage(Message msg) { final int result = msg.what; synchronized (mService) { if (mProc != null && mProc.crashDialog == AppErrorDialog.this) { mProc.crashDialog = null; } } mResult.set(result); // Make sure we don't have time timeout still hanging around. removeMessages(TIMEOUT); setResult(msg.what); dismiss(); } }; Loading @@ -168,11 +157,23 @@ final class AppErrorDialog extends BaseErrorDialog implements View.OnClickListen public void dismiss() { if (!mResult.mHasResult) { // We are dismissing and the result has not been set...go ahead and set. mResult.set(FORCE_QUIT); setResult(FORCE_QUIT); } super.dismiss(); } private void setResult(int result) { synchronized (mService) { if (mProc != null && mProc.crashDialog == AppErrorDialog.this) { mProc.crashDialog = null; } } mResult.set(result); // Make sure we don't have time timeout still hanging around. mHandler.removeMessages(TIMEOUT); } @Override public void onClick(View v) { switch (v.getId()) { Loading
services/tests/servicestests/src/com/android/server/am/AppErrorDialogTest.java 0 → 100644 +76 −0 Original line number Diff line number Diff line /* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.am; import android.content.Context; import android.os.Handler; import android.support.test.InstrumentationRegistry; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.SmallTest; import android.support.test.runner.AndroidJUnit4; import com.android.server.AppOpsService; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import java.io.File; /** * runtest -c com.android.server.am.AppErrorDialogTest frameworks-services */ @RunWith(AndroidJUnit4.class) @SmallTest public class AppErrorDialogTest { private Context mContext; private ActivityManagerService mService; @Before public void setUp() throws Exception { mContext = InstrumentationRegistry.getTargetContext(); mService = new ActivityManagerService(new ActivityManagerService.Injector() { @Override public AppOpsService getAppOpsService(File file, Handler handler) { return null; } @Override public Handler getUiHandler(ActivityManagerService service) { return null; } @Override public boolean isNetworkRestrictedForUid(int uid) { return false; } }); } @Test @UiThreadTest public void testCreateWorks() throws Exception { AppErrorDialog.Data data = new AppErrorDialog.Data(); data.proc = new ProcessRecord(null, mContext.getApplicationInfo(), "name", 12345); data.result = new AppErrorResult(); AppErrorDialog dialog = new AppErrorDialog(mContext, mService, data); dialog.create(); } }