Avoid unregistering the same receiver more than once.

Bug: 231496005
Test: atest com.android.cts.net.HostsideRestrictBackgroundNetworkTests
Ignore-AOSP-First: This will cherry-picked to AOSP later.
Change-Id: Iba17daa70f14bdee1d1a7d32cb9dc64623ba1d24
This commit is contained in:
Sudheer Shanka 2022-05-04 18:17:38 -07:00
commit e652160c94
2 changed files with 20 additions and 11 deletions

View file

@ -23,6 +23,7 @@ android_test_helper_app {
defaults: ["cts_support_defaults"],
sdk_version: "test_current",
static_libs: [
"androidx.annotation_annotation",
"CtsHostsideNetworkTestsAidl",
"NetworkStackApiStableShims",
],

View file

@ -28,11 +28,14 @@ import android.os.Bundle;
import android.os.RemoteCallback;
import android.util.Log;
import androidx.annotation.GuardedBy;
/**
* Activity used to bring process to foreground.
*/
public class MyActivity extends Activity {
@GuardedBy("this")
private BroadcastReceiver finishCommandReceiver = null;
@Override
@ -43,8 +46,11 @@ public class MyActivity extends Activity {
@Override
public void finish() {
if (finishCommandReceiver != null) {
unregisterReceiver(finishCommandReceiver);
synchronized (this) {
if (finishCommandReceiver != null) {
unregisterReceiver(finishCommandReceiver);
finishCommandReceiver = null;
}
}
super.finish();
}
@ -67,15 +73,17 @@ public class MyActivity extends Activity {
super.onResume();
Log.d(TAG, "MyActivity.onResume(): " + getIntent());
Common.notifyNetworkStateObserver(this, getIntent(), TYPE_COMPONENT_ACTIVTY);
finishCommandReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Finishing MyActivity");
MyActivity.this.finish();
}
};
registerReceiver(finishCommandReceiver, new IntentFilter(ACTION_FINISH_ACTIVITY),
Context.RECEIVER_EXPORTED);
synchronized (this) {
finishCommandReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "Finishing MyActivity");
MyActivity.this.finish();
}
};
registerReceiver(finishCommandReceiver, new IntentFilter(ACTION_FINISH_ACTIVITY),
Context.RECEIVER_EXPORTED);
}
final RemoteCallback callback = getIntent().getParcelableExtra(
Intent.EXTRA_REMOTE_CALLBACK);
if (callback != null) {