# ctors of subclasses of CameraPreference are called with Java reflection.
-keep class * extends com.android.camera.CameraPreference {
  <init>(...);
}

-keep class com.android.camera.ActivityBase {
  public int getResultCode();
  public android.content.Intent getResultData();
}

-keep class com.android.camera.VideoCamera {
  public boolean isRecording();
  public void onCancelBgTraining(...);
  public void onProtectiveCurtainClick(...);
}

-keep class * extends android.app.Activity {
  @com.android.camera.OnClickAttr <methods>;
}
