-
Notifications
You must be signed in to change notification settings - Fork 91
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
Showing
43 changed files
with
799 additions
and
387 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
9 changes: 3 additions & 6 deletions
9
Library/src/main/java/com/gcssloop/view/animation/Rotate3dAnimation.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
187 changes: 187 additions & 0 deletions
187
Library/src/main/java/com/gcssloop/view/helper/ApiHelper.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,187 @@ | ||
/* | ||
* Copyright 2016 GcsSloop | ||
* | ||
* 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. | ||
* | ||
* Last modified 2016-12-03 22:55:55 | ||
* | ||
*/ | ||
package com.gcssloop.view.helper; | ||
import android.app.admin.DevicePolicyManager; | ||
import android.content.ComponentName; | ||
import android.hardware.Camera; | ||
import android.os.Build; | ||
import android.provider.MediaStore.MediaColumns; | ||
import android.view.View; | ||
import android.view.WindowManager; | ||
import java.lang.reflect.Field; | ||
public class ApiHelper { | ||
public static interface VERSION_CODES { | ||
// These value are copied from Build.VERSION_CODES | ||
public static final int GINGERBREAD_MR1 = 10; | ||
public static final int HONEYCOMB = 11; | ||
public static final int HONEYCOMB_MR1 = 12; | ||
public static final int HONEYCOMB_MR2 = 13; | ||
public static final int ICE_CREAM_SANDWICH = 14; | ||
public static final int ICE_CREAM_SANDWICH_MR1 = 15; | ||
public static final int JELLY_BEAN = 16; | ||
public static final int JELLY_BEAN_MR1 = 17; | ||
public static final int JELLY_BEAN_MR2 = 18; | ||
} | ||
public static final boolean AT_LEAST_16 = Build.VERSION.SDK_INT >= 16; | ||
public static final boolean USE_888_PIXEL_FORMAT = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean ENABLE_PHOTO_EDITOR = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; | ||
public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_LAYOUT_STABLE = | ||
hasField(View.class, "SYSTEM_UI_FLAG_LAYOUT_STABLE"); | ||
public static final boolean HAS_VIEW_SYSTEM_UI_FLAG_HIDE_NAVIGATION = | ||
hasField(View.class, "SYSTEM_UI_FLAG_HIDE_NAVIGATION"); | ||
public static final boolean HAS_MEDIA_COLUMNS_WIDTH_AND_HEIGHT = | ||
hasField(MediaColumns.class, "WIDTH"); | ||
public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_REGION_DECODER = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_REUSING_BITMAP_IN_BITMAP_FACTORY = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_SET_BEAM_PUSH_URIS = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_SET_DEFALT_BUFFER_SIZE = hasMethod( | ||
"android.graphics.SurfaceTexture", "setDefaultBufferSize", | ||
int.class, int.class); | ||
public static final boolean HAS_RELEASE_SURFACE_TEXTURE = hasMethod( | ||
"android.graphics.SurfaceTexture", "release"); | ||
public static final boolean HAS_SURFACE_TEXTURE = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_MTP = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1; | ||
public static final boolean HAS_AUTO_FOCUS_MOVE_CALLBACK = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_REMOTE_VIEWS_SERVICE = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_INTENT_EXTRA_LOCAL_ONLY = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_SET_SYSTEM_UI_VISIBILITY = | ||
hasMethod(View.class, "setSystemUiVisibility", int.class); | ||
public static final boolean HAS_FACE_DETECTION; | ||
static { | ||
boolean hasFaceDetection = false; | ||
try { | ||
Class<?> listenerClass = Class.forName( | ||
"android.hardware.Camera$FaceDetectionListener"); | ||
hasFaceDetection = | ||
hasMethod(Camera.class, "setFaceDetectionListener", listenerClass) && | ||
hasMethod(Camera.class, "startFaceDetection") && | ||
hasMethod(Camera.class, "stopFaceDetection") && | ||
hasMethod(Camera.Parameters.class, "getMaxNumDetectedFaces"); | ||
} catch (Throwable t) { | ||
} | ||
HAS_FACE_DETECTION = hasFaceDetection; | ||
} | ||
public static final boolean HAS_GET_CAMERA_DISABLED = | ||
hasMethod(DevicePolicyManager.class, "getCameraDisabled", ComponentName.class); | ||
public static final boolean HAS_MEDIA_ACTION_SOUND = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_TIME_LAPSE_RECORDING = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_ZOOM_WHEN_RECORDING = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; | ||
public static final boolean HAS_CAMERA_FOCUS_AREA = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; | ||
public static final boolean HAS_CAMERA_METERING_AREA = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; | ||
public static final boolean HAS_MOTION_EVENT_TRANSFORM = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_EFFECTS_RECORDING = false; | ||
// "Background" filter does not have "context" input port in jelly bean. | ||
public static final boolean HAS_EFFECTS_RECORDING_CONTEXT_INPUT = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; | ||
public static final boolean HAS_GET_SUPPORTED_VIDEO_SIZE = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_SET_ICON_ATTRIBUTE = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_MEDIA_PROVIDER_FILES_TABLE = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_SURFACE_TEXTURE_RECORDING = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_ACTION_BAR = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
// Ex: View.setTranslationX. | ||
public static final boolean HAS_VIEW_TRANSFORM_PROPERTIES = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_CAMERA_HDR = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; | ||
public static final boolean HAS_OPTIONS_IN_MUTABLE = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean CAN_START_PREVIEW_IN_JPEG_CALLBACK = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.ICE_CREAM_SANDWICH; | ||
public static final boolean HAS_VIEW_PROPERTY_ANIMATOR = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB_MR1; | ||
public static final boolean HAS_POST_ON_ANIMATION = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_ANNOUNCE_FOR_ACCESSIBILITY = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_OBJECT_ANIMATION = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_GLES20_REQUIRED = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.HONEYCOMB; | ||
public static final boolean HAS_ROTATION_ANIMATION = | ||
hasField(WindowManager.LayoutParams.class, "rotationAnimation"); | ||
public static final boolean HAS_ORIENTATION_LOCK = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2; | ||
public static final boolean HAS_CANCELLATION_SIGNAL = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN; | ||
public static final boolean HAS_MEDIA_MUXER = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR2; | ||
public static final boolean HAS_DISPLAY_LISTENER = | ||
Build.VERSION.SDK_INT >= VERSION_CODES.JELLY_BEAN_MR1; | ||
|
||
public static int getIntFieldIfExists(Class<?> klass, String fieldName, | ||
Class<?> obj, int defaultVal) { | ||
try { | ||
Field f = klass.getDeclaredField(fieldName); | ||
return f.getInt(obj); | ||
} catch (Exception e) { | ||
return defaultVal; | ||
} | ||
} | ||
|
||
public static boolean hasField(Class<?> klass, String fieldName) { | ||
try { | ||
klass.getDeclaredField(fieldName); | ||
return true; | ||
} catch (NoSuchFieldException e) { | ||
return false; | ||
} | ||
} | ||
|
||
public static boolean hasMethod(String className, String methodName, | ||
Class<?>... parameterTypes) { | ||
try { | ||
Class<?> klass = Class.forName(className); | ||
klass.getDeclaredMethod(methodName, parameterTypes); | ||
return true; | ||
} catch (Throwable th) { | ||
return false; | ||
} | ||
} | ||
|
||
public static boolean hasMethod( | ||
Class<?> klass, String methodName, Class<?> ... paramTypes) { | ||
try { | ||
klass.getDeclaredMethod(methodName, paramTypes); | ||
return true; | ||
} catch (NoSuchMethodException e) { | ||
return false; | ||
} | ||
} | ||
} |
Oops, something went wrong.