Refine WifiTetherSoftApManager and DataSaverBackend to avoid activity leaks

- Declare the service callback as static class and use WeakReference to avoid the callback link being occupied

- Use application context instead of fragment context to avoid context being occupied by external modules

Bug: 237273138
Test: manual test
make RunSettingsRoboTests ROBOTEST_FILTER=TetherSettingsTest
make RunSettingsRoboTests ROBOTEST_FILTER=WifiTetherPreferenceControllerTest

Change-Id: Icca145b8ef08b9949feafbbd4e761f8d50c99181
This commit is contained in:
Weng Su
2022-09-13 21:47:50 +08:00
parent aea2e7cd2e
commit 2f55ae15f1
3 changed files with 47 additions and 16 deletions

View File

@@ -27,6 +27,8 @@ import com.android.settings.overlay.FeatureFactory;
import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
import com.android.settingslib.utils.ThreadUtils;
import org.jetbrains.annotations.NotNull;
import java.util.ArrayList;
public class DataSaverBackend {
@@ -43,10 +45,11 @@ public class DataSaverBackend {
private boolean mDenylistInitialized;
// TODO: Staticize into only one.
public DataSaverBackend(Context context) {
mContext = context;
mMetricsFeatureProvider = FeatureFactory.getFactory(context).getMetricsFeatureProvider();
mPolicyManager = NetworkPolicyManager.from(context);
public DataSaverBackend(@NotNull Context context) {
// TODO(b/246537614):Use fragment context to DataSaverBackend class will caused memory leak
mContext = context.getApplicationContext();
mMetricsFeatureProvider = FeatureFactory.getFactory(mContext).getMetricsFeatureProvider();
mPolicyManager = NetworkPolicyManager.from(mContext);
}
public void addListener(Listener listener) {