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