/*
 * Copyright 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package androidx.camera.viewfinder.internal.quirk;

import android.os.Build;

import androidx.annotation.RequiresApi;

/**
 * A quirk where SurfaceView is stretched.
 *
 * <p>QuirkSummary
 *     Bug Id: 129403806
 *     Description: On certain Samsung devices, transform APIs (e.g. View#setScaleX) do not work
 *                  as intended.
 *     Device(s): SAMSUNG F2Q Q2Q
 */
@RequiresApi(21) // TODO(b/200306659): Remove and replace with annotation on package-info.java
public class SurfaceViewStretchedQuirk implements Quirk {

    // Samsung Galaxy Z Fold2 b/129403806
    private static final String SAMSUNG = "SAMSUNG";
    private static final String GALAXY_Z_FOLD_2 = "F2Q";
    private static final String GALAXY_Z_FOLD_3 = "Q2Q";

    static boolean load() {
        return SAMSUNG.equalsIgnoreCase(Build.MANUFACTURER) && isFold2OrFold3();
    }

    static boolean isFold2OrFold3() {
        return GALAXY_Z_FOLD_2.equalsIgnoreCase(Build.DEVICE)
                || GALAXY_Z_FOLD_3.equalsIgnoreCase(Build.DEVICE);
    }
}

@@ -976,22 +976,65 @@
 ): S
-AMSUNG F2Q Q2Q
+amsung Fold2 F2Q, Samsung Fold3 Q2Q, Oppo Find N OP4E75L1
 %0A */
@@ -1401,114 +1401,198 @@
 Q%22;%0A
-%0A    static boolean load() %7B%0A        return SAMSUNG.equalsIgnoreCase(Build.MANUFACTURER) && isFold2OrFold3
+    private static final String OPPO = %22OPPO%22;%0A    private static final String OPPO_FIND_N = %22OP4E75L1%22;%0A%0A    static boolean load() %7B%0A        return isSamsungFold2OrFold3() %7C%7C isOppoFoldable
 ();%0A
@@ -1598,24 +1598,32 @@
 %0A    %7D%0A%0A    
+private 
 static boole
@@ -1627,16 +1627,23 @@
 olean is
+Samsung
 Fold2OrF
@@ -1666,16 +1666,81 @@
  return 
+SAMSUNG.equalsIgnoreCase(Build.MANUFACTURER)%0A                && (
 GALAXY_Z
@@ -1843,16 +1843,190 @@
 .DEVICE)
+);%0A    %7D%0A%0A    private static boolean isOppoFoldable() %7B%0A        return OPPO.equalsIgnoreCase(Build.MANUFACTURER)%0A                && OPPO_FIND_N.equalsIgnoreCase(Build.DEVICE)
 ;%0A    %7D%0A

Fix preview stretch on Oppo Find N