17bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki/*
27bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * Copyright (C) 2017 The Android Open Source Project
37bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki *
47bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * Licensed under the Apache License, Version 2.0 (the "License");
57bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * you may not use this file except in compliance with the License.
67bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * You may obtain a copy of the License at
77bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki *
87bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki *      http://www.apache.org/licenses/LICENSE-2.0
97bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki *
107bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * Unless required by applicable law or agreed to in writing, software
117bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * distributed under the License is distributed on an "AS IS" BASIS,
127bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * See the License for the specific language governing permissions and
147bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki * limitations under the License.
157bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki */
167bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
17ac5fe7c617c66850fff75a9fce9979c6e5674b0fAurimas Liutikaspackage androidx.transition;
187bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
197bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Arakiimport android.annotation.SuppressLint;
207bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Arakiimport android.util.Log;
217bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Arakiimport android.view.View;
227bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
234d1d6a17310a57807dabb3f404715cfe43a90ed0Aurimas Liutikasimport androidx.annotation.RequiresApi;
244d1d6a17310a57807dabb3f404715cfe43a90ed0Aurimas Liutikas
257bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Arakiimport java.lang.reflect.InvocationTargetException;
267bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Arakiimport java.lang.reflect.Method;
277bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
287bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki@RequiresApi(22)
297bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Arakiclass ViewUtilsApi22 extends ViewUtilsApi21 {
307bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
317bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    private static final String TAG = "ViewUtilsApi22";
327bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
337bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    private static Method sSetLeftTopRightBottomMethod;
347bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    private static boolean sSetLeftTopRightBottomMethodFetched;
357bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
367bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    @Override
377bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    public void setLeftTopRightBottom(View v, int left, int top, int right, int bottom) {
387bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki        fetchSetLeftTopRightBottomMethod();
397bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki        if (sSetLeftTopRightBottomMethod != null) {
407bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            try {
417bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki                sSetLeftTopRightBottomMethod.invoke(v, left, top, right, bottom);
427bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            } catch (IllegalAccessException e) {
437bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki                // Do nothing
447bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            } catch (InvocationTargetException e) {
457bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki                throw new RuntimeException(e.getCause());
467bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            }
477bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki        }
487bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    }
497bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
507bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    @SuppressLint("PrivateApi")
517bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    private void fetchSetLeftTopRightBottomMethod() {
527bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki        if (!sSetLeftTopRightBottomMethodFetched) {
537bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            try {
547bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki                sSetLeftTopRightBottomMethod = View.class.getDeclaredMethod("setLeftTopRightBottom",
557bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki                        int.class, int.class, int.class, int.class);
567bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki                sSetLeftTopRightBottomMethod.setAccessible(true);
577bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            } catch (NoSuchMethodException e) {
587bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki                Log.i(TAG, "Failed to retrieve setLeftTopRightBottom method", e);
597bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            }
607bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki            sSetLeftTopRightBottomMethodFetched = true;
617bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki        }
627bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki    }
637bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
647bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki}
657bd2fbcdcfeb9014c16fd78446c34a4eef489626Yuichi Araki
66