# Copyright 2016 The Chromium Authors
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# Every fragment must have an empty constructor, so it can be instantiated when
# restoring its activity's state.
-keep public class org.chromium.** extends androidx.fragment.app.Fragment {
  public <init>();
}

# Keep implementation classes needed for split compat. These will be accessed by
# reflection.
-keep,allowobfuscation,allowoptimization,allowaccessmodification public class ** extends org.chromium.chrome.browser.base.SplitCompat*$Impl {
  public <init>();
}

# To fix crbug.com/40654856. This is because AppBarLayout$ScrollingViewBehavior
# is instantiated via java.lang.reflect.Constructor in CoordinatorLayout.java.
# Note that AppBarLayout$Behavior is needed to keep the scrolling behavior.
-keep class com.google.android.material.appbar.AppBarLayout$Behavior {
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>();
}
-keep class com.google.android.material.appbar.AppBarLayout$ScrollingViewBehavior {
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>();
}

# @IdentifierNameString, but does not exist due to the module not having any
# Java code in it (this class is generated and then stripped as unused).
-dontwarn org.chromium.chrome.modules.stack_unwinder.StackUnwinderModuleContentsImpl

# TODO(crbug.com/430099860): Remove once OnDemandModuleEntryPointsImpl is not
# removed due to being unused.
-dontwarn org.chromium.chrome.modules.on_demand.OnDemandModuleEntryPointsImpl

# Test APK targets do not include the XR bundle code, but do include XrModule.java,
# which references XrModuleProvider via an @IdentifierNameString.
-dontwarn org.chromium.chrome.browser.xr.scenecore.XrModuleProviderImpl