Clear activity views

This commit is contained in:
M66B
2022-04-15 21:29:00 +02:00
parent 1b0d80cc9b
commit 224fcdb2f4
4 changed files with 34 additions and 28 deletions

View File

@@ -23,6 +23,7 @@ import static android.os.Process.THREAD_PRIORITY_BACKGROUND;
import static androidx.browser.customtabs.CustomTabsService.ACTION_CUSTOM_TABS_CONNECTION;
import android.Manifest;
import android.animation.Animator;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.app.Activity;
@@ -108,6 +109,7 @@ import androidx.lifecycle.LifecycleObserver;
import androidx.lifecycle.LifecycleOwner;
import androidx.lifecycle.OnLifecycleEvent;
import androidx.preference.PreferenceManager;
import androidx.recyclerview.selection.SelectionTracker;
import androidx.recyclerview.widget.RecyclerView;
import com.google.android.material.bottomnavigation.BottomNavigationView;
@@ -1270,6 +1272,35 @@ public class Helper {
return fragment.getClass().getName() + ":result:" + who;
}
static void clearViews(Object instance) {
try {
for (Field field : instance.getClass().getDeclaredFields()) {
Class<?> type = field.getType();
if (View.class.isAssignableFrom(type) ||
Animator.class.isAssignableFrom(type) ||
Snackbar.class.isAssignableFrom(type) ||
SelectionTracker.class.isAssignableFrom(type) ||
SelectionTracker.SelectionPredicate.class.isAssignableFrom(type) ||
RecyclerView.Adapter.class.isAssignableFrom(type)) {
Log.i("Clearing " + instance.getClass().getSimpleName() + ":" + field.getName());
field.setAccessible(true);
if (Animator.class.isAssignableFrom(type))
((Animator) field.get(instance)).setTarget(null);
if (Snackbar.class.isAssignableFrom(type)) {
((Snackbar) field.get(instance)).setAction(null, null);
}
field.set(instance, null);
}
}
} catch (Throwable ex) {
Log.w(ex);
}
}
// Graphics
static int dp2pixels(Context context, int dp) {