136c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav/* 236c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * Copyright (C) 2015 The Android Open Source Project 336c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * 436c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * Licensed under the Apache License, Version 2.0 (the "License"); 536c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * you may not use this file except in compliance with the License. 636c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * You may obtain a copy of the License at 736c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * 836c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * http://www.apache.org/licenses/LICENSE-2.0 936c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * 1036c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * Unless required by applicable law or agreed to in writing, software 1136c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * distributed under the License is distributed on an "AS IS" BASIS, 1236c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1336c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * See the License for the specific language governing permissions and 1436c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav * limitations under the License. 1536c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav */ 1636c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav 1736c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslavpackage android.support.v4.app; 1836c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav 1936c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslavimport android.app.Activity; 200d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport android.app.SharedElementCallback; 210d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport android.content.Context; 220d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport android.graphics.Matrix; 230d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport android.graphics.RectF; 240d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport android.os.Parcelable; 250d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport android.view.View; 260d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 270d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport java.util.List; 280d5b0e011d7db522a576450593cf38170b997501Abhinav Baidimport java.util.Map; 2936c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav 3036c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslavclass ActivityCompatApi23 { 310d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public interface OnSharedElementsReadyListenerBridge { 320d5b0e011d7db522a576450593cf38170b997501Abhinav Baid void onSharedElementsReady(); 330d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 340d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 35e1e957f536c20ebe2a7e6c417ccb2fd8f7fa845bSvetoslav public interface RequestPermissionsRequestCodeValidator { 360d5b0e011d7db522a576450593cf38170b997501Abhinav Baid void validateRequestPermissionsRequestCode(int requestCode); 37e1e957f536c20ebe2a7e6c417ccb2fd8f7fa845bSvetoslav } 3836c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav 3936c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav public static void requestPermissions(Activity activity, String[] permissions, 4036c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav int requestCode) { 41e1e957f536c20ebe2a7e6c417ccb2fd8f7fa845bSvetoslav if (activity instanceof RequestPermissionsRequestCodeValidator) { 42e1e957f536c20ebe2a7e6c417ccb2fd8f7fa845bSvetoslav ((RequestPermissionsRequestCodeValidator) activity) 43e1e957f536c20ebe2a7e6c417ccb2fd8f7fa845bSvetoslav .validateRequestPermissionsRequestCode(requestCode); 44e1e957f536c20ebe2a7e6c417ccb2fd8f7fa845bSvetoslav } 4536c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav activity.requestPermissions(permissions, requestCode); 4636c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav } 4736c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav 4836c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav public static boolean shouldShowRequestPermissionRationale(Activity activity, 4936c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav String permission) { 5036c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav return activity.shouldShowRequestPermissionRationale(permission); 5136c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav } 520d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 530d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public static void setEnterSharedElementCallback(Activity activity, 540d5b0e011d7db522a576450593cf38170b997501Abhinav Baid SharedElementCallback23 callback) { 550d5b0e011d7db522a576450593cf38170b997501Abhinav Baid activity.setEnterSharedElementCallback(createCallback(callback)); 560d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 570d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 580d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public static void setExitSharedElementCallback(Activity activity, 590d5b0e011d7db522a576450593cf38170b997501Abhinav Baid SharedElementCallback23 callback) { 600d5b0e011d7db522a576450593cf38170b997501Abhinav Baid activity.setExitSharedElementCallback(createCallback(callback)); 610d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 620d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 630d5b0e011d7db522a576450593cf38170b997501Abhinav Baid private static SharedElementCallback createCallback(SharedElementCallback23 callback) { 640d5b0e011d7db522a576450593cf38170b997501Abhinav Baid SharedElementCallback newListener = null; 650d5b0e011d7db522a576450593cf38170b997501Abhinav Baid if (callback != null) { 660d5b0e011d7db522a576450593cf38170b997501Abhinav Baid newListener = new SharedElementCallbackImpl(callback); 670d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 680d5b0e011d7db522a576450593cf38170b997501Abhinav Baid return newListener; 690d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 700d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 710d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public abstract static class SharedElementCallback23 721194904b0540cb2043dd047206abf7592f31c2f4Alan Viverette extends ActivityCompatApi21.SharedElementCallback21 { 730d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public abstract void onSharedElementsArrived(List<String> sharedElementNames, 740d5b0e011d7db522a576450593cf38170b997501Abhinav Baid List<View> sharedElements, OnSharedElementsReadyListenerBridge listener); 750d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 760d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 770d5b0e011d7db522a576450593cf38170b997501Abhinav Baid private static class SharedElementCallbackImpl extends SharedElementCallback { 780d5b0e011d7db522a576450593cf38170b997501Abhinav Baid private SharedElementCallback23 mCallback; 790d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 800d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public SharedElementCallbackImpl(SharedElementCallback23 callback) { 810d5b0e011d7db522a576450593cf38170b997501Abhinav Baid mCallback = callback; 820d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 830d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 840d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 850d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public void onSharedElementStart(List<String> sharedElementNames, 860d5b0e011d7db522a576450593cf38170b997501Abhinav Baid List<View> sharedElements, List<View> sharedElementSnapshots) { 870d5b0e011d7db522a576450593cf38170b997501Abhinav Baid mCallback.onSharedElementStart(sharedElementNames, sharedElements, 880d5b0e011d7db522a576450593cf38170b997501Abhinav Baid sharedElementSnapshots); 890d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 900d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 910d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 920d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public void onSharedElementEnd(List<String> sharedElementNames, List<View> sharedElements, 930d5b0e011d7db522a576450593cf38170b997501Abhinav Baid List<View> sharedElementSnapshots) { 940d5b0e011d7db522a576450593cf38170b997501Abhinav Baid mCallback.onSharedElementEnd(sharedElementNames, sharedElements, 950d5b0e011d7db522a576450593cf38170b997501Abhinav Baid sharedElementSnapshots); 960d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 970d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 980d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 990d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public void onRejectSharedElements(List<View> rejectedSharedElements) { 1000d5b0e011d7db522a576450593cf38170b997501Abhinav Baid mCallback.onRejectSharedElements(rejectedSharedElements); 1010d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 1020d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 1030d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 1040d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public void onMapSharedElements(List<String> names, Map<String, View> sharedElements) { 1050d5b0e011d7db522a576450593cf38170b997501Abhinav Baid mCallback.onMapSharedElements(names, sharedElements); 1060d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 1070d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 1080d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 1090d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public Parcelable onCaptureSharedElementSnapshot(View sharedElement, 1100d5b0e011d7db522a576450593cf38170b997501Abhinav Baid Matrix viewToGlobalMatrix, RectF screenBounds) { 1110d5b0e011d7db522a576450593cf38170b997501Abhinav Baid return mCallback.onCaptureSharedElementSnapshot(sharedElement, viewToGlobalMatrix, 1120d5b0e011d7db522a576450593cf38170b997501Abhinav Baid screenBounds); 1130d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 1140d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 1150d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 1160d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public View onCreateSnapshotView(Context context, Parcelable snapshot) { 1170d5b0e011d7db522a576450593cf38170b997501Abhinav Baid return mCallback.onCreateSnapshotView(context, snapshot); 1180d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 1190d5b0e011d7db522a576450593cf38170b997501Abhinav Baid 1200d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 1210d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public void onSharedElementsArrived(List<String> sharedElementNames, 1220d5b0e011d7db522a576450593cf38170b997501Abhinav Baid List<View> sharedElements, final OnSharedElementsReadyListener listener) { 1230d5b0e011d7db522a576450593cf38170b997501Abhinav Baid mCallback.onSharedElementsArrived(sharedElementNames, sharedElements, 1240d5b0e011d7db522a576450593cf38170b997501Abhinav Baid new OnSharedElementsReadyListenerBridge() { 1250d5b0e011d7db522a576450593cf38170b997501Abhinav Baid @Override 1260d5b0e011d7db522a576450593cf38170b997501Abhinav Baid public void onSharedElementsReady() { 1270d5b0e011d7db522a576450593cf38170b997501Abhinav Baid listener.onSharedElementsReady(); 1280d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 1290d5b0e011d7db522a576450593cf38170b997501Abhinav Baid }); 1300d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 1310d5b0e011d7db522a576450593cf38170b997501Abhinav Baid } 13236c328cb8d2b86ce99c9e7c7382478b2b496bdd3Svetoslav} 133