# SPDX-FileCopyrightText: 2016 The CyanogenMod Project
# SPDX-FileCopyrightText: 2017-2020 The LineageOS Project
# SPDX-License-Identifier: Apache-2.0

# Keep all Fragments in this package, which are used by reflection.
-keep class org.lineageos.lineageparts.*Fragment
-keep class org.lineageos.lineageparts.*Picker
-keep class org.lineageos.lineageparts.*Settings

-keep class org.lineageos.lineageparts.contributors.*
-keep class org.lineageos.lineageparts.gestures.*
-keep class org.lineageos.lineageparts.hardware.*
-keep class org.lineageos.lineageparts.input.*
-keep class org.lineageos.lineageparts.lineagestats.*
-keep class org.lineageos.lineageparts.livedisplay.*
-keep class org.lineageos.lineageparts.notificationlight.*
-keep class org.lineageos.lineageparts.power.*
-keep class org.lineageos.lineageparts.privacyguard.*
-keep class org.lineageos.lineageparts.profiles.*
-keep class org.lineageos.lineageparts.sounds.*

# Keep keyhandler constructor
-keep public class * implements com.android.internal.os.DeviceKeyHandler {
   public <init>(android.content.Context);
}

# Keep click responders
-keepclassmembers class com.android.settings.inputmethod.UserDictionaryAddWordActivity {
  *** onClick*(...);
}

-keep public class * extends androidx.preference.* {
    public <init>(android.content.Context, android.util.AttributeSet);
}

# Keep specific fields used via reflection.
-keepclassmembers class * {
    public static ** SEARCH_INDEX_DATA_PROVIDER;
}
