up
This commit is contained in:
8
Assets/3rd/NativeCamera.meta
Normal file
8
Assets/3rd/NativeCamera.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1c7a308d4b0404c13b070242a6b57fa6
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeCamera/Plugins.meta
Normal file
8
Assets/3rd/NativeCamera/Plugins.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1bb6a665b7d9041bab99a6efdbc705ca
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0a607dcda26e7614f86300c6ca717295
|
||||
guid: 5fc918beb0f7cfe49a7f596d5b6b8768
|
||||
folderAsset: yes
|
||||
timeCreated: 1498722617
|
||||
licenseType: Store
|
||||
timeCreated: 1525098661
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
31
Assets/3rd/NativeCamera/Plugins/Android/NCCallbackHelper.cs
Normal file
31
Assets/3rd/NativeCamera/Plugins/Android/NCCallbackHelper.cs
Normal file
@@ -0,0 +1,31 @@
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
using UnityEngine;
|
||||
|
||||
namespace NativeCameraNamespace
|
||||
{
|
||||
public class NCCallbackHelper : MonoBehaviour
|
||||
{
|
||||
private System.Action mainThreadAction = null;
|
||||
|
||||
private void Awake()
|
||||
{
|
||||
DontDestroyOnLoad( gameObject );
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if( mainThreadAction != null )
|
||||
{
|
||||
System.Action temp = mainThreadAction;
|
||||
mainThreadAction = null;
|
||||
temp();
|
||||
}
|
||||
}
|
||||
|
||||
public void CallOnMainThread( System.Action function )
|
||||
{
|
||||
mainThreadAction = function;
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b2bbe0051e738ea4585119c46d863f19
|
||||
timeCreated: 1545147258
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,39 @@
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
using UnityEngine;
|
||||
|
||||
namespace NativeCameraNamespace
|
||||
{
|
||||
public class NCCameraCallbackAndroid : AndroidJavaProxy
|
||||
{
|
||||
private readonly NativeCamera.CameraCallback callback;
|
||||
private readonly NCCallbackHelper callbackHelper;
|
||||
|
||||
public NCCameraCallbackAndroid( NativeCamera.CameraCallback callback ) : base( "com.yasirkula.unity.NativeCameraMediaReceiver" )
|
||||
{
|
||||
this.callback = callback;
|
||||
callbackHelper = new GameObject( "NCCallbackHelper" ).AddComponent<NCCallbackHelper>();
|
||||
}
|
||||
|
||||
public void OnMediaReceived( string path )
|
||||
{
|
||||
callbackHelper.CallOnMainThread( () => MediaReceiveCallback( path ) );
|
||||
}
|
||||
|
||||
private void MediaReceiveCallback( string path )
|
||||
{
|
||||
if( string.IsNullOrEmpty( path ) )
|
||||
path = null;
|
||||
|
||||
try
|
||||
{
|
||||
if( callback != null )
|
||||
callback( path );
|
||||
}
|
||||
finally
|
||||
{
|
||||
Object.Destroy( callbackHelper );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3cc8df584d2a4344b929a4f13a53723a
|
||||
timeCreated: 1519060539
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,29 @@
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
using System.Threading;
|
||||
using UnityEngine;
|
||||
|
||||
namespace NativeCameraNamespace
|
||||
{
|
||||
public class NCPermissionCallbackAndroid : AndroidJavaProxy
|
||||
{
|
||||
private object threadLock;
|
||||
public int Result { get; private set; }
|
||||
|
||||
public NCPermissionCallbackAndroid( object threadLock ) : base( "com.yasirkula.unity.NativeCameraPermissionReceiver" )
|
||||
{
|
||||
Result = -1;
|
||||
this.threadLock = threadLock;
|
||||
}
|
||||
|
||||
public void OnPermissionResult( int result )
|
||||
{
|
||||
Result = result;
|
||||
|
||||
lock( threadLock )
|
||||
{
|
||||
Monitor.Pulse( threadLock );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: bafa24bbc8c455f44a2b98dcbe6451bd
|
||||
timeCreated: 1519060539
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
BIN
Assets/3rd/NativeCamera/Plugins/Android/NativeCamera.aar
Normal file
BIN
Assets/3rd/NativeCamera/Plugins/Android/NativeCamera.aar
Normal file
Binary file not shown.
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 284037eba2526f54d9cf51b5d9bffcfa
|
||||
timeCreated: 1569764737
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
data:
|
||||
first:
|
||||
Android: Android
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 19fc6b8ce781591438a952d8aa9104f8
|
||||
guid: 16fe39fd709533a4eba946790a8e3123
|
||||
folderAsset: yes
|
||||
timeCreated: 1521452097
|
||||
licenseType: Store
|
||||
licenseType: Free
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
66
Assets/3rd/NativeCamera/Plugins/Editor/NCPostProcessBuild.cs
Normal file
66
Assets/3rd/NativeCamera/Plugins/Editor/NCPostProcessBuild.cs
Normal file
@@ -0,0 +1,66 @@
|
||||
using System.IO;
|
||||
using UnityEditor;
|
||||
using UnityEngine;
|
||||
#if UNITY_IOS
|
||||
using UnityEditor.Callbacks;
|
||||
using UnityEditor.iOS.Xcode;
|
||||
#endif
|
||||
|
||||
public class NCPostProcessBuild
|
||||
{
|
||||
private const bool ENABLED = true;
|
||||
|
||||
private const string CAMERA_USAGE_DESCRIPTION = "Capture media with camera";
|
||||
private const string MICROPHONE_USAGE_DESCRIPTION = "Capture microphone input in videos";
|
||||
|
||||
[InitializeOnLoadMethod]
|
||||
public static void ValidatePlugin()
|
||||
{
|
||||
string jarPath = "Assets/Plugins/NativeCamera/Android/NativeCamera.jar";
|
||||
if( File.Exists( jarPath ) )
|
||||
{
|
||||
Debug.Log( "Deleting obsolete " + jarPath );
|
||||
AssetDatabase.DeleteAsset( jarPath );
|
||||
}
|
||||
}
|
||||
|
||||
#if UNITY_IOS
|
||||
#pragma warning disable 0162
|
||||
[PostProcessBuild]
|
||||
public static void OnPostprocessBuild( BuildTarget target, string buildPath )
|
||||
{
|
||||
if( !ENABLED )
|
||||
return;
|
||||
|
||||
if( target == BuildTarget.iOS )
|
||||
{
|
||||
string pbxProjectPath = PBXProject.GetPBXProjectPath( buildPath );
|
||||
string plistPath = Path.Combine( buildPath, "Info.plist" );
|
||||
|
||||
PBXProject pbxProject = new PBXProject();
|
||||
pbxProject.ReadFromFile( pbxProjectPath );
|
||||
|
||||
#if UNITY_2019_3_OR_NEWER
|
||||
string targetGUID = pbxProject.GetUnityFrameworkTargetGuid();
|
||||
#else
|
||||
string targetGUID = pbxProject.TargetGuidByName( PBXProject.GetUnityTargetName() );
|
||||
#endif
|
||||
|
||||
pbxProject.AddBuildProperty( targetGUID, "OTHER_LDFLAGS", "-framework MobileCoreServices" );
|
||||
pbxProject.AddBuildProperty( targetGUID, "OTHER_LDFLAGS", "-framework ImageIO" );
|
||||
|
||||
File.WriteAllText( pbxProjectPath, pbxProject.WriteToString() );
|
||||
|
||||
PlistDocument plist = new PlistDocument();
|
||||
plist.ReadFromString( File.ReadAllText( plistPath ) );
|
||||
|
||||
PlistElementDict rootDict = plist.root;
|
||||
rootDict.SetString( "NSCameraUsageDescription", CAMERA_USAGE_DESCRIPTION );
|
||||
rootDict.SetString( "NSMicrophoneUsageDescription", MICROPHONE_USAGE_DESCRIPTION );
|
||||
|
||||
File.WriteAllText( plistPath, plist.WriteToString() );
|
||||
}
|
||||
}
|
||||
#pragma warning restore 0162
|
||||
#endif
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: fa3b57e342928704cb910789ae4dde20
|
||||
timeCreated: 1521452119
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "NativeCamera.Editor",
|
||||
"references": [],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 31117d0234af0084b91a7e53b3d9e0a3
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"name": "NativeCamera.Runtime"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b107fd1956cb3e04985108f5ee29e115
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
442
Assets/3rd/NativeCamera/Plugins/NativeCamera.cs
Normal file
442
Assets/3rd/NativeCamera/Plugins/NativeCamera.cs
Normal file
@@ -0,0 +1,442 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
using UnityEngine;
|
||||
using Object = UnityEngine.Object;
|
||||
#if !UNITY_EDITOR && ( UNITY_ANDROID || UNITY_IOS )
|
||||
using NativeCameraNamespace;
|
||||
#endif
|
||||
|
||||
public static class NativeCamera
|
||||
{
|
||||
public struct ImageProperties
|
||||
{
|
||||
public readonly int width;
|
||||
public readonly int height;
|
||||
public readonly string mimeType;
|
||||
public readonly ImageOrientation orientation;
|
||||
|
||||
public ImageProperties( int width, int height, string mimeType, ImageOrientation orientation )
|
||||
{
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.mimeType = mimeType;
|
||||
this.orientation = orientation;
|
||||
}
|
||||
}
|
||||
|
||||
public struct VideoProperties
|
||||
{
|
||||
public readonly int width;
|
||||
public readonly int height;
|
||||
public readonly long duration;
|
||||
public readonly float rotation;
|
||||
|
||||
public VideoProperties( int width, int height, long duration, float rotation )
|
||||
{
|
||||
this.width = width;
|
||||
this.height = height;
|
||||
this.duration = duration;
|
||||
this.rotation = rotation;
|
||||
}
|
||||
}
|
||||
|
||||
public enum Permission { Denied = 0, Granted = 1, ShouldAsk = 2 };
|
||||
public enum Quality { Default = -1, Low = 0, Medium = 1, High = 2 };
|
||||
public enum PreferredCamera { Default = -1, Rear = 0, Front = 1 }
|
||||
|
||||
// EXIF orientation: http://sylvana.net/jpegcrop/exif_orientation.html (indices are reordered)
|
||||
public enum ImageOrientation { Unknown = -1, Normal = 0, Rotate90 = 1, Rotate180 = 2, Rotate270 = 3, FlipHorizontal = 4, Transpose = 5, FlipVertical = 6, Transverse = 7 };
|
||||
|
||||
public delegate void CameraCallback( string path );
|
||||
|
||||
#region Platform Specific Elements
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
private static AndroidJavaClass m_ajc = null;
|
||||
private static AndroidJavaClass AJC
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_ajc == null )
|
||||
m_ajc = new AndroidJavaClass( "com.yasirkula.unity.NativeCamera" );
|
||||
|
||||
return m_ajc;
|
||||
}
|
||||
}
|
||||
|
||||
private static AndroidJavaObject m_context = null;
|
||||
private static AndroidJavaObject Context
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_context == null )
|
||||
{
|
||||
using( AndroidJavaObject unityClass = new AndroidJavaClass( "com.unity3d.player.UnityPlayer" ) )
|
||||
{
|
||||
m_context = unityClass.GetStatic<AndroidJavaObject>( "currentActivity" );
|
||||
}
|
||||
}
|
||||
|
||||
return m_context;
|
||||
}
|
||||
}
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern int _NativeCamera_CheckPermission();
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern int _NativeCamera_RequestPermission();
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern int _NativeCamera_CanOpenSettings();
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern void _NativeCamera_OpenSettings();
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern int _NativeCamera_HasCamera();
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern void _NativeCamera_TakePicture( string imageSavePath, int maxSize, int preferredCamera );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern void _NativeCamera_RecordVideo( int quality, int maxDuration, int preferredCamera );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeCamera_GetImageProperties( string path );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeCamera_GetVideoProperties( string path );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeCamera_GetVideoThumbnail( string path, string thumbnailSavePath, int maxSize, double captureTimeInSeconds );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeCamera_LoadImageAtPath( string path, string temporaryFilePath, int maxSize );
|
||||
#endif
|
||||
|
||||
#if !UNITY_EDITOR && ( UNITY_ANDROID || UNITY_IOS )
|
||||
private static string m_temporaryImagePath = null;
|
||||
private static string TemporaryImagePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_temporaryImagePath == null )
|
||||
{
|
||||
m_temporaryImagePath = Path.Combine( Application.temporaryCachePath, "tmpImg" );
|
||||
Directory.CreateDirectory( Application.temporaryCachePath );
|
||||
}
|
||||
|
||||
return m_temporaryImagePath;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_IOS
|
||||
private static string m_iOSSelectedImagePath = null;
|
||||
private static string IOSSelectedImagePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_iOSSelectedImagePath == null )
|
||||
{
|
||||
m_iOSSelectedImagePath = Path.Combine( Application.temporaryCachePath, "CameraImg" );
|
||||
Directory.CreateDirectory( Application.temporaryCachePath );
|
||||
}
|
||||
|
||||
return m_iOSSelectedImagePath;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
#endregion
|
||||
|
||||
#region Runtime Permissions
|
||||
public static Permission CheckPermission()
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
Permission result = (Permission) AJC.CallStatic<int>( "CheckPermission", Context );
|
||||
if( result == Permission.Denied && (Permission) PlayerPrefs.GetInt( "NativeCameraPermission", (int) Permission.ShouldAsk ) == Permission.ShouldAsk )
|
||||
result = Permission.ShouldAsk;
|
||||
|
||||
return result;
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
return (Permission) _NativeCamera_CheckPermission();
|
||||
#else
|
||||
return Permission.Granted;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static Permission RequestPermission()
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
object threadLock = new object();
|
||||
lock( threadLock )
|
||||
{
|
||||
NCPermissionCallbackAndroid nativeCallback = new NCPermissionCallbackAndroid( threadLock );
|
||||
|
||||
AJC.CallStatic( "RequestPermission", Context, nativeCallback, PlayerPrefs.GetInt( "NativeCameraPermission", (int) Permission.ShouldAsk ) );
|
||||
|
||||
if( nativeCallback.Result == -1 )
|
||||
System.Threading.Monitor.Wait( threadLock );
|
||||
|
||||
if( (Permission) nativeCallback.Result != Permission.ShouldAsk && PlayerPrefs.GetInt( "NativeCameraPermission", -1 ) != nativeCallback.Result )
|
||||
{
|
||||
PlayerPrefs.SetInt( "NativeCameraPermission", nativeCallback.Result );
|
||||
PlayerPrefs.Save();
|
||||
}
|
||||
|
||||
return (Permission) nativeCallback.Result;
|
||||
}
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
return (Permission) _NativeCamera_RequestPermission();
|
||||
#else
|
||||
return Permission.Granted;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static bool CanOpenSettings()
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_IOS
|
||||
return _NativeCamera_CanOpenSettings() == 1;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static void OpenSettings()
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
AJC.CallStatic( "OpenSettings", Context );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
_NativeCamera_OpenSettings();
|
||||
#endif
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Camera Functions
|
||||
public static Permission TakePicture( CameraCallback callback, int maxSize = -1, bool saveAsJPEG = true, PreferredCamera preferredCamera = PreferredCamera.Default )
|
||||
{
|
||||
Permission result = RequestPermission();
|
||||
if( result == Permission.Granted && !IsCameraBusy() )
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
AJC.CallStatic( "TakePicture", Context, new NCCameraCallbackAndroid( callback ), (int) preferredCamera );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
if( maxSize <= 0 )
|
||||
maxSize = SystemInfo.maxTextureSize;
|
||||
|
||||
NCCameraCallbackiOS.Initialize( callback );
|
||||
_NativeCamera_TakePicture( IOSSelectedImagePath + ( saveAsJPEG ? ".jpeg" : ".png" ), maxSize, (int) preferredCamera );
|
||||
#else
|
||||
if( callback != null )
|
||||
callback( null );
|
||||
#endif
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Permission RecordVideo( CameraCallback callback, Quality quality = Quality.Default, int maxDuration = 0, long maxSizeBytes = 0L, PreferredCamera preferredCamera = PreferredCamera.Default )
|
||||
{
|
||||
Permission result = RequestPermission();
|
||||
if( result == Permission.Granted && !IsCameraBusy() )
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
AJC.CallStatic( "RecordVideo", Context, new NCCameraCallbackAndroid( callback ), (int) preferredCamera, (int) quality, maxDuration, maxSizeBytes );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
NCCameraCallbackiOS.Initialize( callback );
|
||||
_NativeCamera_RecordVideo( (int) quality, maxDuration, (int) preferredCamera );
|
||||
#else
|
||||
if( callback != null )
|
||||
callback( null );
|
||||
#endif
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static bool DeviceHasCamera()
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
return AJC.CallStatic<bool>( "HasCamera", Context );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
return _NativeCamera_HasCamera() == 1;
|
||||
#else
|
||||
return true;
|
||||
#endif
|
||||
}
|
||||
|
||||
public static bool IsCameraBusy()
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_IOS
|
||||
return NCCameraCallbackiOS.IsBusy;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
#endregion
|
||||
|
||||
#region Utility Functions
|
||||
public static Texture2D LoadImageAtPath( string imagePath, int maxSize = -1, bool markTextureNonReadable = true,
|
||||
bool generateMipmaps = true, bool linearColorSpace = false )
|
||||
{
|
||||
if( string.IsNullOrEmpty( imagePath ) )
|
||||
throw new ArgumentException( "Parameter 'imagePath' is null or empty!" );
|
||||
|
||||
if( !File.Exists( imagePath ) )
|
||||
throw new FileNotFoundException( "File not found at " + imagePath );
|
||||
|
||||
if( maxSize <= 0 )
|
||||
maxSize = SystemInfo.maxTextureSize;
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
string loadPath = AJC.CallStatic<string>( "LoadImageAtPath", Context, imagePath, TemporaryImagePath, maxSize );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
string loadPath = _NativeCamera_LoadImageAtPath( imagePath, TemporaryImagePath, maxSize );
|
||||
#else
|
||||
string loadPath = imagePath;
|
||||
#endif
|
||||
|
||||
String extension = Path.GetExtension( imagePath ).ToLowerInvariant();
|
||||
TextureFormat format = ( extension == ".jpg" || extension == ".jpeg" ) ? TextureFormat.RGB24 : TextureFormat.RGBA32;
|
||||
|
||||
Texture2D result = new Texture2D( 2, 2, format, generateMipmaps, linearColorSpace );
|
||||
|
||||
try
|
||||
{
|
||||
if( !result.LoadImage( File.ReadAllBytes( loadPath ), markTextureNonReadable ) )
|
||||
{
|
||||
Object.DestroyImmediate( result );
|
||||
return null;
|
||||
}
|
||||
}
|
||||
catch( Exception e )
|
||||
{
|
||||
Debug.LogException( e );
|
||||
|
||||
Object.DestroyImmediate( result );
|
||||
return null;
|
||||
}
|
||||
finally
|
||||
{
|
||||
if( loadPath != imagePath )
|
||||
{
|
||||
try
|
||||
{
|
||||
File.Delete( loadPath );
|
||||
}
|
||||
catch { }
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Texture2D GetVideoThumbnail( string videoPath, int maxSize = -1, double captureTimeInSeconds = -1.0 )
|
||||
{
|
||||
if( maxSize <= 0 )
|
||||
maxSize = SystemInfo.maxTextureSize;
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
string thumbnailPath = AJC.CallStatic<string>( "GetVideoThumbnail", Context, videoPath, TemporaryImagePath + ".png", false, maxSize, captureTimeInSeconds );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
string thumbnailPath = _NativeCamera_GetVideoThumbnail( videoPath, TemporaryImagePath + ".png", maxSize, captureTimeInSeconds );
|
||||
#else
|
||||
string thumbnailPath = null;
|
||||
#endif
|
||||
|
||||
if( !string.IsNullOrEmpty( thumbnailPath ) )
|
||||
return LoadImageAtPath( thumbnailPath, maxSize );
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ImageProperties GetImageProperties( string imagePath )
|
||||
{
|
||||
if( !File.Exists( imagePath ) )
|
||||
throw new FileNotFoundException( "File not found at " + imagePath );
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
string value = AJC.CallStatic<string>( "GetImageProperties", Context, imagePath );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
string value = _NativeCamera_GetImageProperties( imagePath );
|
||||
#else
|
||||
string value = null;
|
||||
#endif
|
||||
|
||||
int width = 0, height = 0;
|
||||
string mimeType = null;
|
||||
ImageOrientation orientation = ImageOrientation.Unknown;
|
||||
if( !string.IsNullOrEmpty( value ) )
|
||||
{
|
||||
string[] properties = value.Split( '>' );
|
||||
if( properties != null && properties.Length >= 4 )
|
||||
{
|
||||
if( !int.TryParse( properties[0].Trim(), out width ) )
|
||||
width = 0;
|
||||
if( !int.TryParse( properties[1].Trim(), out height ) )
|
||||
height = 0;
|
||||
|
||||
mimeType = properties[2].Trim();
|
||||
if( mimeType.Length == 0 )
|
||||
{
|
||||
String extension = Path.GetExtension( imagePath ).ToLowerInvariant();
|
||||
if( extension == ".png" )
|
||||
mimeType = "image/png";
|
||||
else if( extension == ".jpg" || extension == ".jpeg" )
|
||||
mimeType = "image/jpeg";
|
||||
else if( extension == ".gif" )
|
||||
mimeType = "image/gif";
|
||||
else if( extension == ".bmp" )
|
||||
mimeType = "image/bmp";
|
||||
else
|
||||
mimeType = null;
|
||||
}
|
||||
|
||||
int orientationInt;
|
||||
if( int.TryParse( properties[3].Trim(), out orientationInt ) )
|
||||
orientation = (ImageOrientation) orientationInt;
|
||||
}
|
||||
}
|
||||
|
||||
return new ImageProperties( width, height, mimeType, orientation );
|
||||
}
|
||||
|
||||
public static VideoProperties GetVideoProperties( string videoPath )
|
||||
{
|
||||
if( !File.Exists( videoPath ) )
|
||||
throw new FileNotFoundException( "File not found at " + videoPath );
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
string value = AJC.CallStatic<string>( "GetVideoProperties", Context, videoPath );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
string value = _NativeCamera_GetVideoProperties( videoPath );
|
||||
#else
|
||||
string value = null;
|
||||
#endif
|
||||
|
||||
int width = 0, height = 0;
|
||||
long duration = 0L;
|
||||
float rotation = 0f;
|
||||
if( !string.IsNullOrEmpty( value ) )
|
||||
{
|
||||
string[] properties = value.Split( '>' );
|
||||
if( properties != null && properties.Length >= 4 )
|
||||
{
|
||||
if( !int.TryParse( properties[0].Trim(), out width ) )
|
||||
width = 0;
|
||||
if( !int.TryParse( properties[1].Trim(), out height ) )
|
||||
height = 0;
|
||||
if( !long.TryParse( properties[2].Trim(), out duration ) )
|
||||
duration = 0L;
|
||||
if( !float.TryParse( properties[3].Trim(), out rotation ) )
|
||||
rotation = 0f;
|
||||
}
|
||||
}
|
||||
|
||||
if( rotation == -90f )
|
||||
rotation = 270f;
|
||||
|
||||
return new VideoProperties( width, height, duration, rotation );
|
||||
}
|
||||
#endregion
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ce1403606c3629046a0147d3e705f7cc
|
||||
guid: ff758a73b21d4a04aa6f95679b3da605
|
||||
timeCreated: 1498722610
|
||||
licenseType: Store
|
||||
licenseType: Pro
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
90
Assets/3rd/NativeCamera/Plugins/README.txt
Normal file
90
Assets/3rd/NativeCamera/Plugins/README.txt
Normal file
@@ -0,0 +1,90 @@
|
||||
= Native Camera for Android & iOS =
|
||||
|
||||
Online documentation & example code available at: https://github.com/yasirkula/UnityNativeCamera
|
||||
E-mail: yasirkula@gmail.com
|
||||
|
||||
1. ABOUT
|
||||
This plugin helps you take pictures/record videos natively with your device's camera on Android & iOS.
|
||||
|
||||
2. HOW TO
|
||||
NativeCamera no longer requires any manual setup on Android. If you were using an older version of the plugin, you need to remove NativeCamera's "<provider ... />" from your AndroidManifest.xml.
|
||||
|
||||
For reference, the legacy documentation is available at: https://github.com/yasirkula/UnityNativeCamera/wiki/Manual-Setup-for-Android
|
||||
|
||||
2.2. iOS Setup
|
||||
There are two ways to set up the plugin on iOS:
|
||||
|
||||
2.2.a. Automated Setup for iOS
|
||||
- (optional) change the value of CAMERA_USAGE_DESCRIPTION in Plugins/NativeCamera/Editor/NCPostProcessBuild.cs
|
||||
|
||||
2.2.b. Manual Setup for iOS
|
||||
- set the value of ENABLED to false in NCPostProcessBuild.cs
|
||||
- build your project
|
||||
- enter a Camera Usage Description to Info.plist in Xcode
|
||||
- insert "-framework MobileCoreServices -framework ImageIO" to the "Other Linker Flags" of Unity-iPhone Target
|
||||
|
||||
3. FAQ
|
||||
- Can't use the camera, it says "Can't find ContentProvider, camera is inaccessible!" in Logcat
|
||||
After building your project, verify that NativeCamera's "<provider ... />" tag is inserted in-between the "<application>...</application>" tags of PROJECT_PATH/Temp/StagingArea/AndroidManifest.xml. If not, please contact me.
|
||||
|
||||
- Can't use the camera, it says "java.lang.ClassNotFoundException: com.yasirkula.unity.NativeCamera" in Logcat
|
||||
If your project uses ProGuard, try adding the following line to ProGuard filters: -keep class com.yasirkula.unity.* { *; }
|
||||
|
||||
4. SCRIPTING API
|
||||
Please see the online documentation for a more in-depth documentation of the Scripting API: https://github.com/yasirkula/UnityNativeCamera
|
||||
|
||||
enum NativeCamera.Permission { Denied = 0, Granted = 1, ShouldAsk = 2 };
|
||||
enum NativeCamera.Quality { Default = -1, Low = 0, Medium = 1, High = 2 };
|
||||
enum NativeCamera.ImageOrientation { Unknown = -1, Normal = 0, Rotate90 = 1, Rotate180 = 2, Rotate270 = 3, FlipHorizontal = 4, Transpose = 5, FlipVertical = 6, Transverse = 7 }; // EXIF orientation: http://sylvana.net/jpegcrop/exif_orientation.html (indices are reordered)
|
||||
|
||||
delegate void CameraCallback( string path );
|
||||
|
||||
//// Accessing Camera ////
|
||||
|
||||
// This operation is asynchronous! After user takes a picture or cancels the operation, the callback is called (on main thread)
|
||||
// CameraCallback takes a string parameter which stores the path of the captured image, or null if the operation is canceled
|
||||
// maxSize: determines the maximum size of the returned image in pixels on iOS. A larger image will be down-scaled for better performance. If untouched, its value will be set to SystemInfo.maxTextureSize. Has no effect on Android
|
||||
// saveAsJPEG: determines whether the image is saved as JPEG or PNG. Has no effect on Android
|
||||
// preferredCamera: determines whether the rear camera or the front camera should be opened by default
|
||||
NativeCamera.Permission NativeCamera.TakePicture( CameraCallback callback, int maxSize = -1, bool saveAsJPEG = true, PreferredCamera preferredCamera = PreferredCamera.Default );
|
||||
|
||||
// quality: determines the quality of the recorded video
|
||||
// maxDuration: determines the maximum duration, in seconds, for the recorded video. If untouched, there will be no limit. Please note that the functionality of this parameter depends on whether the device vendor has added this capability to the camera or not. So, this parameter may not have any effect on some devices
|
||||
// maxSizeBytes: determines the maximum size, in bytes, for the recorded video. If untouched, there will be no limit. This parameter has no effect on iOS. Please note that the functionality of this parameter depends on whether the device vendor has added this capability to the camera or not. So, this parameter may not have any effect on some devices
|
||||
NativeCamera.Permission NativeCamera.RecordVideo( CameraCallback callback, Quality quality = Quality.Default, int maxDuration = 0, long maxSizeBytes = 0L, PreferredCamera preferredCamera = PreferredCamera.Default );
|
||||
|
||||
bool NativeCamera.DeviceHasCamera(); // returns false if the device doesn't have a camera. In this case, TakePicture and RecordVideo functions will not execute
|
||||
|
||||
bool NativeCamera.IsCameraBusy(); // returns true if the camera is currently open. In that case, another TakePicture or RecordVideo request will simply be ignored
|
||||
|
||||
|
||||
//// Runtime Permissions ////
|
||||
|
||||
// Accessing camera is only possible when permission state is Permission.Granted. TakePicture and RecordVideo functions request permission internally (and return the result) but you can also check/request the permissions manually
|
||||
NativeCamera.Permission NativeCamera.CheckPermission();
|
||||
NativeCamera.Permission NativeCamera.RequestPermission();
|
||||
|
||||
// If permission state is Permission.Denied, user must grant the necessary permission(s) manually from the Settings (Android requires Storage and, if declared in AndroidManifest, Camera permissions; iOS requires Camera permission). These functions help you open the Settings directly from within the app
|
||||
void NativeCamera.OpenSettings();
|
||||
bool NativeCamera.CanOpenSettings();
|
||||
|
||||
|
||||
//// Utility Functions ////
|
||||
|
||||
// Creates a Texture2D from the specified image file in correct orientation and returns it. Returns null, if something goes wrong
|
||||
// maxSize: determines the maximum size of the returned Texture2D in pixels. Larger textures will be down-scaled. If untouched, its value will be set to SystemInfo.maxTextureSize. It is recommended to set a proper maxSize for better performance
|
||||
// markTextureNonReadable: marks the generated texture as non-readable for better memory usage. If you plan to modify the texture later (e.g. GetPixels/SetPixels), set its value to false
|
||||
// generateMipmaps: determines whether texture should have mipmaps or not
|
||||
// linearColorSpace: determines whether texture should be in linear color space or sRGB color space
|
||||
Texture2D NativeCamera.LoadImageAtPath( string imagePath, int maxSize = -1, bool markTextureNonReadable = true, bool generateMipmaps = true, bool linearColorSpace = false );
|
||||
|
||||
// Creates a Texture2D thumbnail from a video file and returns it. Returns null, if something goes wrong
|
||||
// maxSize: determines the maximum size of the returned Texture2D in pixels. Larger thumbnails will be down-scaled. If untouched, its value will be set to SystemInfo.maxTextureSize. It is recommended to set a proper maxSize for better performance
|
||||
// captureTimeInSeconds: determines the frame of the video that the thumbnail is captured from. If untouched, OS will decide this value
|
||||
Texture2D NativeCamera.GetVideoThumbnail( string videoPath, int maxSize = -1, double captureTimeInSeconds = -1.0 );
|
||||
|
||||
// Returns an ImageProperties instance that holds the width, height and mime type information of an image file without creating a Texture2D object. Mime type will be null, if it can't be determined
|
||||
NativeCamera.ImageProperties NativeCamera.GetImageProperties( string imagePath );
|
||||
|
||||
// Returns a VideoProperties instance that holds the width, height, duration (in milliseconds) and rotation information of a video file. To play a video in correct orientation, you should rotate it by rotation degrees clockwise. For a 90-degree or 270-degree rotated video, values of width and height should be swapped to get the display size of the video
|
||||
NativeCamera.VideoProperties NativeCamera.GetVideoProperties( string videoPath );
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: e5d70289d6cc2ac4294d703db236f8d0
|
||||
timeCreated: 1520539180
|
||||
licenseType: Store
|
||||
guid: 5a88d1b1b9d7b904b862304c20ed4db4
|
||||
timeCreated: 1563308465
|
||||
licenseType: Free
|
||||
TextScriptImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
@@ -1,8 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c623599351a41a4c84c20f73c9d8976
|
||||
guid: 5576acd2a06eb72409e6ec4b7f204a4e
|
||||
folderAsset: yes
|
||||
timeCreated: 1498722622
|
||||
licenseType: Store
|
||||
licenseType: Pro
|
||||
DefaultImporter:
|
||||
userData:
|
||||
assetBundleName:
|
||||
72
Assets/3rd/NativeCamera/Plugins/iOS/NCCameraCallbackiOS.cs
Normal file
72
Assets/3rd/NativeCamera/Plugins/iOS/NCCameraCallbackiOS.cs
Normal file
@@ -0,0 +1,72 @@
|
||||
#if !UNITY_EDITOR && UNITY_IOS
|
||||
using UnityEngine;
|
||||
|
||||
namespace NativeCameraNamespace
|
||||
{
|
||||
public class NCCameraCallbackiOS : MonoBehaviour
|
||||
{
|
||||
private static NCCameraCallbackiOS instance;
|
||||
private NativeCamera.CameraCallback callback;
|
||||
|
||||
private float nextBusyCheckTime;
|
||||
|
||||
public static bool IsBusy { get; private set; }
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern int _NativeCamera_IsCameraBusy();
|
||||
|
||||
public static void Initialize( NativeCamera.CameraCallback callback )
|
||||
{
|
||||
if( IsBusy )
|
||||
return;
|
||||
|
||||
if( instance == null )
|
||||
{
|
||||
instance = new GameObject( "NCCameraCallbackiOS" ).AddComponent<NCCameraCallbackiOS>();
|
||||
DontDestroyOnLoad( instance.gameObject );
|
||||
}
|
||||
|
||||
instance.callback = callback;
|
||||
|
||||
instance.nextBusyCheckTime = Time.realtimeSinceStartup + 1f;
|
||||
IsBusy = true;
|
||||
}
|
||||
|
||||
private void Update()
|
||||
{
|
||||
if( IsBusy )
|
||||
{
|
||||
if( Time.realtimeSinceStartup >= nextBusyCheckTime )
|
||||
{
|
||||
nextBusyCheckTime = Time.realtimeSinceStartup + 1f;
|
||||
|
||||
if( _NativeCamera_IsCameraBusy() == 0 )
|
||||
{
|
||||
IsBusy = false;
|
||||
|
||||
if( callback != null )
|
||||
{
|
||||
callback( null );
|
||||
callback = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public void OnMediaReceived( string path )
|
||||
{
|
||||
IsBusy = false;
|
||||
|
||||
if( string.IsNullOrEmpty( path ) )
|
||||
path = null;
|
||||
|
||||
if( callback != null )
|
||||
{
|
||||
callback( path );
|
||||
callback = null;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,12 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d8f19d5713752dc41bd377562677d8ee
|
||||
timeCreated: 1519060539
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
507
Assets/3rd/NativeCamera/Plugins/iOS/NativeCamera.mm
Normal file
507
Assets/3rd/NativeCamera/Plugins/iOS/NativeCamera.mm
Normal file
@@ -0,0 +1,507 @@
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <MobileCoreServices/UTCoreTypes.h>
|
||||
#import <ImageIO/ImageIO.h>
|
||||
#import <AVFoundation/AVFoundation.h>
|
||||
#import <UIKit/UIKit.h>
|
||||
|
||||
#ifdef UNITY_4_0 || UNITY_5_0
|
||||
#import "iPhone_View.h"
|
||||
#else
|
||||
extern UIViewController* UnityGetGLViewController();
|
||||
#endif
|
||||
|
||||
@interface UNativeCamera:NSObject
|
||||
+ (int)checkPermission;
|
||||
+ (int)requestPermission;
|
||||
+ (int)canOpenSettings;
|
||||
+ (void)openSettings;
|
||||
+ (int)hasCamera;
|
||||
+ (void)openCamera:(BOOL)imageMode defaultCamera:(int)defaultCamera savePath:(NSString *)imageSavePath maxImageSize:(int)maxImageSize videoQuality:(int)videoQuality maxVideoDuration:(int)maxVideoDuration;
|
||||
+ (int)isCameraBusy;
|
||||
+ (char *)getImageProperties:(NSString *)path;
|
||||
+ (char *)getVideoProperties:(NSString *)path;
|
||||
+ (char *)getVideoThumbnail:(NSString *)path savePath:(NSString *)savePath maximumSize:(int)maximumSize captureTime:(double)captureTime;
|
||||
+ (char *)loadImageAtPath:(NSString *)path tempFilePath:(NSString *)tempFilePath maximumSize:(int)maximumSize;
|
||||
@end
|
||||
|
||||
@implementation UNativeCamera
|
||||
|
||||
static NSString *pickedMediaSavePath;
|
||||
static UIImagePickerController *imagePicker;
|
||||
static int cameraMaxImageSize = -1;
|
||||
static int imagePickerState = 0; // 0 -> none, 1 -> showing, 2 -> finished
|
||||
|
||||
// Credit: https://stackoverflow.com/a/20464727/2373034
|
||||
+ (int)checkPermission {
|
||||
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
|
||||
{
|
||||
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
|
||||
if (status == AVAuthorizationStatusAuthorized)
|
||||
return 1;
|
||||
else if (status == AVAuthorizationStatusNotDetermined )
|
||||
return 2;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/20464727/2373034
|
||||
+ (int)requestPermission {
|
||||
if ([[[UIDevice currentDevice] systemVersion] compare:@"7.0" options:NSNumericSearch] != NSOrderedAscending)
|
||||
{
|
||||
AVAuthorizationStatus status = [AVCaptureDevice authorizationStatusForMediaType:AVMediaTypeVideo];
|
||||
if (status == AVAuthorizationStatusAuthorized)
|
||||
return 1;
|
||||
|
||||
if (status == AVAuthorizationStatusNotDetermined) {
|
||||
__block BOOL authorized = NO;
|
||||
|
||||
dispatch_semaphore_t sema = dispatch_semaphore_create(0);
|
||||
[AVCaptureDevice requestAccessForMediaType:AVMediaTypeVideo completionHandler:^(BOOL granted) {
|
||||
authorized = granted;
|
||||
dispatch_semaphore_signal(sema);
|
||||
}];
|
||||
dispatch_semaphore_wait(sema, DISPATCH_TIME_FOREVER);
|
||||
|
||||
if (authorized)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/25453667/2373034
|
||||
+ (int)canOpenSettings {
|
||||
if (&UIApplicationOpenSettingsURLString != NULL)
|
||||
return 1;
|
||||
else
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/25453667/2373034
|
||||
+ (void)openSettings {
|
||||
if (&UIApplicationOpenSettingsURLString != NULL)
|
||||
[[UIApplication sharedApplication] openURL:[NSURL URLWithString:UIApplicationOpenSettingsURLString]];
|
||||
}
|
||||
|
||||
+ (int)hasCamera {
|
||||
if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/10531752/2373034
|
||||
+ (void)openCamera:(BOOL)imageMode defaultCamera:(int)defaultCamera savePath:(NSString *)imageSavePath maxImageSize:(int)maxImageSize videoQuality:(int)videoQuality maxVideoDuration:(int)maxVideoDuration {
|
||||
if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
|
||||
{
|
||||
NSLog(@"Device has no registered cameras!");
|
||||
|
||||
UnitySendMessage("NCCameraCallbackiOS", "OnMediaReceived", "");
|
||||
return;
|
||||
}
|
||||
|
||||
if ((imageMode && ![[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera] containsObject:(NSString*)kUTTypeImage]) ||
|
||||
(!imageMode && ![[UIImagePickerController availableMediaTypesForSourceType:UIImagePickerControllerSourceTypeCamera] containsObject:(NSString*)kUTTypeMovie]))
|
||||
{
|
||||
NSLog(@"Camera does not support this operation!");
|
||||
|
||||
UnitySendMessage("NCCameraCallbackiOS", "OnMediaReceived", "");
|
||||
return;
|
||||
}
|
||||
|
||||
imagePicker = [[UIImagePickerController alloc] init];
|
||||
imagePicker.delegate = self;
|
||||
imagePicker.allowsEditing = NO;
|
||||
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
|
||||
|
||||
if (imageMode)
|
||||
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];
|
||||
else
|
||||
{
|
||||
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeMovie];
|
||||
|
||||
if (maxVideoDuration > 0)
|
||||
imagePicker.videoMaximumDuration = maxVideoDuration;
|
||||
|
||||
if (videoQuality == 0)
|
||||
imagePicker.videoQuality = UIImagePickerControllerQualityTypeLow;
|
||||
else if (videoQuality == 1)
|
||||
imagePicker.videoQuality = UIImagePickerControllerQualityTypeMedium;
|
||||
else if (videoQuality == 2)
|
||||
imagePicker.videoQuality = UIImagePickerControllerQualityTypeHigh;
|
||||
}
|
||||
|
||||
if (defaultCamera == 0 && [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceRear])
|
||||
imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceRear;
|
||||
else if (defaultCamera == 1 && [UIImagePickerController isCameraDeviceAvailable:UIImagePickerControllerCameraDeviceFront])
|
||||
imagePicker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
|
||||
|
||||
pickedMediaSavePath = imageSavePath;
|
||||
cameraMaxImageSize = maxImageSize;
|
||||
|
||||
imagePickerState = 1;
|
||||
[UnityGetGLViewController() presentViewController:imagePicker animated:YES completion:^{ imagePickerState = 0; }];
|
||||
}
|
||||
|
||||
+ (int)isCameraBusy {
|
||||
if (imagePickerState == 2)
|
||||
return 1;
|
||||
|
||||
if (imagePicker != nil) {
|
||||
if (imagePickerState == 1 || [imagePicker presentingViewController] == UnityGetGLViewController())
|
||||
return 1;
|
||||
|
||||
imagePicker = nil;
|
||||
return 0;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/4170099/2373034
|
||||
+ (NSArray *)getImageMetadata:(NSString *)path {
|
||||
int width = 0;
|
||||
int height = 0;
|
||||
int orientation = -1;
|
||||
|
||||
CGImageSourceRef imageSource = CGImageSourceCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:path], nil);
|
||||
if (imageSource != nil) {
|
||||
NSDictionary *options = [NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO] forKey:(__bridge NSString *)kCGImageSourceShouldCache];
|
||||
CFDictionaryRef imageProperties = CGImageSourceCopyPropertiesAtIndex(imageSource, 0, (__bridge CFDictionaryRef)options);
|
||||
CFRelease(imageSource);
|
||||
|
||||
CGFloat widthF = 0.0f, heightF = 0.0f;
|
||||
if (imageProperties != nil) {
|
||||
if (CFDictionaryContainsKey(imageProperties, kCGImagePropertyPixelWidth))
|
||||
CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelWidth), kCFNumberCGFloatType, &widthF);
|
||||
|
||||
if (CFDictionaryContainsKey(imageProperties, kCGImagePropertyPixelHeight))
|
||||
CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(imageProperties, kCGImagePropertyPixelHeight), kCFNumberCGFloatType, &heightF);
|
||||
|
||||
if (CFDictionaryContainsKey(imageProperties, kCGImagePropertyOrientation)) {
|
||||
CFNumberGetValue((CFNumberRef)CFDictionaryGetValue(imageProperties, kCGImagePropertyOrientation), kCFNumberIntType, &orientation);
|
||||
|
||||
if (orientation > 4) { // landscape image
|
||||
CGFloat temp = widthF;
|
||||
widthF = heightF;
|
||||
heightF = temp;
|
||||
}
|
||||
}
|
||||
|
||||
CFRelease(imageProperties);
|
||||
}
|
||||
|
||||
width = (int)roundf(widthF);
|
||||
height = (int)roundf(heightF);
|
||||
}
|
||||
|
||||
return [[NSArray alloc] initWithObjects:[NSNumber numberWithInt:width], [NSNumber numberWithInt:height], [NSNumber numberWithInt:orientation], nil];
|
||||
}
|
||||
|
||||
+ (char *)getImageProperties:(NSString *)path {
|
||||
NSArray *metadata = [self getImageMetadata:path];
|
||||
|
||||
int orientationUnity;
|
||||
int orientation = [metadata[2] intValue];
|
||||
|
||||
// To understand the magic numbers, see ImageOrientation enum in NativeCamera.cs
|
||||
// and http://sylvana.net/jpegcrop/exif_orientation.html
|
||||
if (orientation == 1)
|
||||
orientationUnity = 0;
|
||||
else if (orientation == 2)
|
||||
orientationUnity = 4;
|
||||
else if (orientation == 3)
|
||||
orientationUnity = 2;
|
||||
else if (orientation == 4)
|
||||
orientationUnity = 6;
|
||||
else if (orientation == 5)
|
||||
orientationUnity = 5;
|
||||
else if (orientation == 6)
|
||||
orientationUnity = 1;
|
||||
else if (orientation == 7)
|
||||
orientationUnity = 7;
|
||||
else if (orientation == 8)
|
||||
orientationUnity = 3;
|
||||
else
|
||||
orientationUnity = -1;
|
||||
|
||||
return [self getCString:[NSString stringWithFormat:@"%d>%d> >%d", [metadata[0] intValue], [metadata[1] intValue], orientationUnity]];
|
||||
}
|
||||
|
||||
+ (char *)getVideoProperties:(NSString *)path {
|
||||
CGSize size = CGSizeZero;
|
||||
float rotation = 0;
|
||||
long long duration = 0;
|
||||
|
||||
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:path] options:nil];
|
||||
if (asset != nil) {
|
||||
duration = (long long) round(CMTimeGetSeconds([asset duration]) * 1000);
|
||||
CGAffineTransform transform = [asset preferredTransform];
|
||||
NSArray<AVAssetTrack *>* videoTracks = [asset tracksWithMediaType:AVMediaTypeVideo];
|
||||
if (videoTracks != nil && [videoTracks count] > 0) {
|
||||
size = [[videoTracks objectAtIndex:0] naturalSize];
|
||||
transform = [[videoTracks objectAtIndex:0] preferredTransform];
|
||||
}
|
||||
|
||||
rotation = atan2(transform.b, transform.a) * (180.0 / M_PI);
|
||||
}
|
||||
|
||||
return [self getCString:[NSString stringWithFormat:@"%d>%d>%lld>%f", (int)roundf(size.width), (int)roundf(size.height), duration, rotation]];
|
||||
}
|
||||
|
||||
+ (char *)getVideoThumbnail:(NSString *)path savePath:(NSString *)savePath maximumSize:(int)maximumSize captureTime:(double)captureTime {
|
||||
AVAssetImageGenerator *thumbnailGenerator = [[AVAssetImageGenerator alloc] initWithAsset:[[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:path] options:nil]];
|
||||
thumbnailGenerator.appliesPreferredTrackTransform = YES;
|
||||
thumbnailGenerator.maximumSize = CGSizeMake((CGFloat) maximumSize, (CGFloat) maximumSize);
|
||||
thumbnailGenerator.requestedTimeToleranceBefore = kCMTimeZero;
|
||||
thumbnailGenerator.requestedTimeToleranceAfter = kCMTimeZero;
|
||||
|
||||
if (captureTime < 0.0)
|
||||
captureTime = 0.0;
|
||||
else {
|
||||
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:path] options:nil];
|
||||
if (asset != nil) {
|
||||
double videoDuration = CMTimeGetSeconds([asset duration]);
|
||||
if (videoDuration > 0.0 && captureTime >= videoDuration - 0.1) {
|
||||
if (captureTime > videoDuration)
|
||||
captureTime = videoDuration;
|
||||
|
||||
thumbnailGenerator.requestedTimeToleranceBefore = CMTimeMakeWithSeconds(1.0, 600);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NSError *error = nil;
|
||||
CGImageRef image = [thumbnailGenerator copyCGImageAtTime:CMTimeMakeWithSeconds(captureTime, 600) actualTime:nil error:&error];
|
||||
if (image == nil) {
|
||||
if (error != nil)
|
||||
NSLog(@"Error generating video thumbnail: %@", error);
|
||||
else
|
||||
NSLog(@"Error generating video thumbnail...");
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
UIImage *thumbnail = [[UIImage alloc] initWithCGImage:image];
|
||||
CGImageRelease(image);
|
||||
|
||||
if (![UIImagePNGRepresentation(thumbnail) writeToFile:savePath atomically:YES]) {
|
||||
NSLog(@"Error saving thumbnail image");
|
||||
return "";
|
||||
}
|
||||
|
||||
return [self getCString:savePath];
|
||||
}
|
||||
|
||||
+ (UIImage *)scaleImage:(UIImage *)image maxSize:(int)maxSize {
|
||||
CGFloat width = image.size.width;
|
||||
CGFloat height = image.size.height;
|
||||
|
||||
UIImageOrientation orientation = image.imageOrientation;
|
||||
if (width <= maxSize && height <= maxSize && orientation != UIImageOrientationDown &&
|
||||
orientation != UIImageOrientationLeft && orientation != UIImageOrientationRight &&
|
||||
orientation != UIImageOrientationLeftMirrored && orientation != UIImageOrientationRightMirrored &&
|
||||
orientation != UIImageOrientationUpMirrored && orientation != UIImageOrientationDownMirrored)
|
||||
return image;
|
||||
|
||||
CGFloat scaleX = 1.0f;
|
||||
CGFloat scaleY = 1.0f;
|
||||
if (width > maxSize)
|
||||
scaleX = maxSize / width;
|
||||
if (height > maxSize)
|
||||
scaleY = maxSize / height;
|
||||
|
||||
// Credit: https://github.com/mbcharbonneau/UIImage-Categories/blob/master/UIImage%2BAlpha.m
|
||||
CGImageAlphaInfo alpha = CGImageGetAlphaInfo(image.CGImage);
|
||||
BOOL hasAlpha = alpha == kCGImageAlphaFirst || alpha == kCGImageAlphaLast || alpha == kCGImageAlphaPremultipliedFirst || alpha == kCGImageAlphaPremultipliedLast;
|
||||
|
||||
CGFloat scaleRatio = scaleX < scaleY ? scaleX : scaleY;
|
||||
CGRect imageRect = CGRectMake(0, 0, width * scaleRatio, height * scaleRatio);
|
||||
UIGraphicsBeginImageContextWithOptions(imageRect.size, !hasAlpha, image.scale);
|
||||
[image drawInRect:imageRect];
|
||||
image = UIGraphicsGetImageFromCurrentImageContext();
|
||||
UIGraphicsEndImageContext();
|
||||
|
||||
return image;
|
||||
}
|
||||
|
||||
+ (char *)loadImageAtPath:(NSString *)path tempFilePath:(NSString *)tempFilePath maximumSize:(int)maximumSize {
|
||||
// Check if the image can be loaded by Unity without requiring a conversion to PNG
|
||||
// Credit: https://stackoverflow.com/a/12048937/2373034
|
||||
NSString *extension = [path pathExtension];
|
||||
BOOL conversionNeeded = [extension caseInsensitiveCompare:@"jpg"] != NSOrderedSame && [extension caseInsensitiveCompare:@"jpeg"] != NSOrderedSame && [extension caseInsensitiveCompare:@"png"] != NSOrderedSame;
|
||||
|
||||
if (!conversionNeeded) {
|
||||
// Check if the image needs to be processed at all
|
||||
NSArray *metadata = [self getImageMetadata:path];
|
||||
int orientationInt = [metadata[2] intValue]; // 1: correct orientation, [1,8]: valid orientation range
|
||||
if (orientationInt == 1 && [metadata[0] intValue] <= maximumSize && [metadata[1] intValue] <= maximumSize)
|
||||
return [self getCString:path];
|
||||
}
|
||||
|
||||
UIImage *image = [UIImage imageWithContentsOfFile:path];
|
||||
if (image == nil)
|
||||
return [self getCString:path];
|
||||
|
||||
UIImage *scaledImage = [self scaleImage:image maxSize:maximumSize];
|
||||
if (conversionNeeded || scaledImage != image) {
|
||||
if (![UIImagePNGRepresentation(scaledImage) writeToFile:tempFilePath atomically:YES]) {
|
||||
NSLog(@"Error creating scaled image");
|
||||
return [self getCString:path];
|
||||
}
|
||||
|
||||
return [self getCString:tempFilePath];
|
||||
}
|
||||
else
|
||||
return [self getCString:path];
|
||||
}
|
||||
|
||||
+ (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
|
||||
NSString *path = nil;
|
||||
if ([info[UIImagePickerControllerMediaType] isEqualToString:(NSString *)kUTTypeImage]) { // took picture
|
||||
// Temporarily save image as PNG
|
||||
UIImage *image = info[UIImagePickerControllerEditedImage] ?: info[UIImagePickerControllerOriginalImage];
|
||||
if (image == nil)
|
||||
path = nil;
|
||||
else {
|
||||
NSString *extension = [pickedMediaSavePath pathExtension];
|
||||
BOOL saveAsJPEG = [extension caseInsensitiveCompare:@"jpg"] == NSOrderedSame || [extension caseInsensitiveCompare:@"jpeg"] == NSOrderedSame;
|
||||
|
||||
// Try to save the image with metadata
|
||||
// CANCELED: a number of users reported that this method results in 90-degree rotated images, uncomment at your own risk
|
||||
// Credit: https://stackoverflow.com/a/15858955
|
||||
/*NSDictionary *metadata = [info objectForKey:UIImagePickerControllerMediaMetadata];
|
||||
NSMutableDictionary *mutableMetadata = nil;
|
||||
CFDictionaryRef metadataRef;
|
||||
CFStringRef imageType;
|
||||
|
||||
if (saveAsJPEG) {
|
||||
mutableMetadata = [metadata mutableCopy];
|
||||
[mutableMetadata setObject:@(1.0) forKey:(__bridge NSString *)kCGImageDestinationLossyCompressionQuality];
|
||||
|
||||
metadataRef = (__bridge CFDictionaryRef)mutableMetadata;
|
||||
imageType = kUTTypeJPEG;
|
||||
}
|
||||
else {
|
||||
metadataRef = (__bridge CFDictionaryRef)metadata;
|
||||
imageType = kUTTypePNG;
|
||||
}
|
||||
|
||||
CGImageDestinationRef imageDestination = CGImageDestinationCreateWithURL((__bridge CFURLRef)[NSURL fileURLWithPath:pickedMediaSavePath], imageType , 1, NULL);
|
||||
if (imageDestination == NULL )
|
||||
NSLog(@"Failed to create image destination");
|
||||
else {
|
||||
CGImageDestinationAddImage(imageDestination, image.CGImage, metadataRef);
|
||||
if (CGImageDestinationFinalize(imageDestination))
|
||||
path = pickedMediaSavePath;
|
||||
else
|
||||
NSLog(@"Failed to finalize the image");
|
||||
|
||||
CFRelease(imageDestination);
|
||||
}*/
|
||||
|
||||
if (path == nil) {
|
||||
//NSLog(@"Attempting to save the image without metadata as fallback");
|
||||
|
||||
if ((saveAsJPEG && [UIImageJPEGRepresentation([self scaleImage:image maxSize:cameraMaxImageSize], 1.0) writeToFile:pickedMediaSavePath atomically:YES]) ||
|
||||
(!saveAsJPEG && [UIImagePNGRepresentation([self scaleImage:image maxSize:cameraMaxImageSize]) writeToFile:pickedMediaSavePath atomically:YES]) )
|
||||
path = pickedMediaSavePath;
|
||||
else {
|
||||
NSLog(@"Error saving image without metadata");
|
||||
path = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else { // recorded video
|
||||
NSURL *mediaUrl = info[UIImagePickerControllerMediaURL] ?: info[UIImagePickerControllerReferenceURL];
|
||||
if (mediaUrl == nil)
|
||||
path = nil;
|
||||
else
|
||||
path = [mediaUrl path];
|
||||
}
|
||||
|
||||
imagePicker = nil;
|
||||
imagePickerState = 2;
|
||||
UnitySendMessage("NCCameraCallbackiOS", "OnMediaReceived", [self getCString:path]);
|
||||
|
||||
[picker dismissViewControllerAnimated:NO completion:nil];
|
||||
}
|
||||
|
||||
+ (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
|
||||
{
|
||||
imagePicker = nil;
|
||||
UnitySendMessage("NCCameraCallbackiOS", "OnMediaReceived", "");
|
||||
|
||||
[picker dismissViewControllerAnimated:YES completion:nil];
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/37052118/2373034
|
||||
+ (char *)getCString:(NSString *)source {
|
||||
if (source == nil)
|
||||
source = @"";
|
||||
|
||||
const char *sourceUTF8 = [source UTF8String];
|
||||
char *result = (char*) malloc(strlen(sourceUTF8) + 1);
|
||||
strcpy(result, sourceUTF8);
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@end
|
||||
|
||||
extern "C" int _NativeCamera_CheckPermission() {
|
||||
return [UNativeCamera checkPermission];
|
||||
}
|
||||
|
||||
extern "C" int _NativeCamera_RequestPermission() {
|
||||
return [UNativeCamera requestPermission];
|
||||
}
|
||||
|
||||
extern "C" int _NativeCamera_CanOpenSettings() {
|
||||
return [UNativeCamera canOpenSettings];
|
||||
}
|
||||
|
||||
extern "C" void _NativeCamera_OpenSettings() {
|
||||
[UNativeCamera openSettings];
|
||||
}
|
||||
|
||||
extern "C" int _NativeCamera_HasCamera() {
|
||||
return [UNativeCamera hasCamera];
|
||||
}
|
||||
|
||||
extern "C" void _NativeCamera_TakePicture(const char* imageSavePath, int maxSize, int preferredCamera) {
|
||||
[UNativeCamera openCamera:YES defaultCamera:preferredCamera savePath:[NSString stringWithUTF8String:imageSavePath] maxImageSize:maxSize videoQuality:-1 maxVideoDuration:-1];
|
||||
}
|
||||
|
||||
extern "C" void _NativeCamera_RecordVideo(int quality, int maxDuration, int preferredCamera) {
|
||||
[UNativeCamera openCamera:NO defaultCamera:preferredCamera savePath:nil maxImageSize:4096 videoQuality:quality maxVideoDuration:maxDuration];
|
||||
}
|
||||
|
||||
extern "C" int _NativeCamera_IsCameraBusy() {
|
||||
return [UNativeCamera isCameraBusy];
|
||||
}
|
||||
|
||||
extern "C" char* _NativeCamera_GetImageProperties(const char* path) {
|
||||
return [UNativeCamera getImageProperties:[NSString stringWithUTF8String:path]];
|
||||
}
|
||||
|
||||
extern "C" char* _NativeCamera_GetVideoProperties(const char* path) {
|
||||
return [UNativeCamera getVideoProperties:[NSString stringWithUTF8String:path]];
|
||||
}
|
||||
|
||||
extern "C" char* _NativeCamera_GetVideoThumbnail(const char* path, const char* thumbnailSavePath, int maxSize, double captureTimeInSeconds) {
|
||||
return [UNativeCamera getVideoThumbnail:[NSString stringWithUTF8String:path] savePath:[NSString stringWithUTF8String:thumbnailSavePath] maximumSize:maxSize captureTime:captureTimeInSeconds];
|
||||
}
|
||||
|
||||
extern "C" char* _NativeCamera_LoadImageAtPath(const char* path, const char* temporaryFilePath, int maxSize) {
|
||||
return [UNativeCamera loadImageAtPath:[NSString stringWithUTF8String:path] tempFilePath:[NSString stringWithUTF8String:temporaryFilePath] maximumSize:maxSize];
|
||||
}
|
||||
33
Assets/3rd/NativeCamera/Plugins/iOS/NativeCamera.mm.meta
Normal file
33
Assets/3rd/NativeCamera/Plugins/iOS/NativeCamera.mm.meta
Normal file
@@ -0,0 +1,33 @@
|
||||
fileFormatVersion: 2
|
||||
guid: f71ce2f3d3a5dbd46af575e628ed9d6e
|
||||
timeCreated: 1498722774
|
||||
licenseType: Pro
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
executionOrder: {}
|
||||
isPreloaded: 0
|
||||
isOverridable: 0
|
||||
platformData:
|
||||
data:
|
||||
first:
|
||||
Any:
|
||||
second:
|
||||
enabled: 0
|
||||
settings: {}
|
||||
data:
|
||||
first:
|
||||
Editor: Editor
|
||||
second:
|
||||
enabled: 0
|
||||
settings:
|
||||
DefaultValueInitialized: true
|
||||
data:
|
||||
first:
|
||||
iPhone: iOS
|
||||
second:
|
||||
enabled: 1
|
||||
settings: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Binary file not shown.
@@ -1,79 +0,0 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Coolape;
|
||||
|
||||
public class NativeGalleryUtl
|
||||
{
|
||||
public static IEnumerator TakeScreenshotAndSave(string album, string fileName)
|
||||
{
|
||||
yield return new WaitForEndOfFrame();
|
||||
|
||||
Texture2D ss = new Texture2D(Screen.width, Screen.height, TextureFormat.RGB24, false);
|
||||
ss.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
|
||||
ss.Apply();
|
||||
|
||||
// Save the screenshot to Gallery/Photos
|
||||
Debug.Log("Permission result: " + NativeGallery.SaveImageToGallery(ss, album, fileName));
|
||||
|
||||
// To avoid memory leaks
|
||||
Object.Destroy(ss);
|
||||
}
|
||||
|
||||
public static void PickImage(object callback, int maxSize = -1)
|
||||
{
|
||||
NativeGallery.Permission permission = NativeGallery.GetImageFromGallery((path) =>
|
||||
{
|
||||
Debug.Log("Image path: " + path);
|
||||
if (path != null)
|
||||
{
|
||||
// Create Texture from selected image
|
||||
Texture2D texture = NativeGallery.LoadImageAtPath(path, maxSize);
|
||||
if (texture == null)
|
||||
{
|
||||
Debug.Log("Couldn't load texture from " + path);
|
||||
return;
|
||||
}
|
||||
Utl.doCallback(callback, texture);
|
||||
|
||||
/*
|
||||
// Assign texture to a temporary quad and destroy it after 5 seconds
|
||||
GameObject quad = GameObject.CreatePrimitive(PrimitiveType.Quad);
|
||||
quad.transform.position = Camera.main.transform.position + Camera.main.transform.forward * 2.5f;
|
||||
quad.transform.forward = Camera.main.transform.forward;
|
||||
quad.transform.localScale = new Vector3(1f, texture.height / (float)texture.width, 1f);
|
||||
|
||||
Material material = quad.GetComponent<Renderer>().material;
|
||||
if (!material.shader.isSupported) // happens when Standard shader is not included in the build
|
||||
material.shader = Shader.Find("Legacy Shaders/Diffuse");
|
||||
|
||||
material.mainTexture = texture;
|
||||
|
||||
Destroy(quad, 5f);
|
||||
|
||||
// If a procedural texture is not destroyed manually,
|
||||
// it will only be freed after a scene change
|
||||
Destroy(texture, 5f);
|
||||
*/
|
||||
|
||||
}
|
||||
}, "Select a PNG image", "image/png");
|
||||
|
||||
Debug.Log("Permission result: " + permission);
|
||||
}
|
||||
|
||||
public static void PickVideo()
|
||||
{
|
||||
NativeGallery.Permission permission = NativeGallery.GetVideoFromGallery((path) =>
|
||||
{
|
||||
Debug.Log("Video path: " + path);
|
||||
if (path != null)
|
||||
{
|
||||
// Play the selected video
|
||||
Handheld.PlayFullScreenMovie("file://" + path);
|
||||
}
|
||||
}, "Select a video");
|
||||
|
||||
Debug.Log("Permission result: " + permission);
|
||||
}
|
||||
}
|
||||
8
Assets/3rd/NativeGallery/Plugins.meta
Normal file
8
Assets/3rd/NativeGallery/Plugins.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a032e025a802f4707bf50d1d51778b1f
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeGallery/Plugins/Android.meta
Normal file
8
Assets/3rd/NativeGallery/Plugins/Android.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 880df38a865ba4f91981f0af6cafd817
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 2d517fd0f2f85f24698df2775bee58e9
|
||||
timeCreated: 1544889149
|
||||
licenseType: Store
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 4c18d702b07a63945968db47201b95c9
|
||||
timeCreated: 1519060539
|
||||
licenseType: Store
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: a07afac614af1294d8e72a3c083be028
|
||||
timeCreated: 1519060539
|
||||
licenseType: Store
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
BIN
Assets/3rd/NativeGallery/Plugins/Android/NativeGallery.jar
Normal file
BIN
Assets/3rd/NativeGallery/Plugins/Android/NativeGallery.jar
Normal file
Binary file not shown.
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 07368f3d2020fe6439475cfaa8578fd8
|
||||
timeCreated: 1544891451
|
||||
licenseType: Store
|
||||
guid: 8ed2b1cd685da484194ba437e57d1e49
|
||||
timeCreated: 1570374101
|
||||
licenseType: Free
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
8
Assets/3rd/NativeGallery/Plugins/Editor.meta
Normal file
8
Assets/3rd/NativeGallery/Plugins/Editor.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: d8aa34e33afa341a180dea50b2bdad62
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -28,13 +28,21 @@ public class NGPostProcessBuild
|
||||
PBXProject pbxProject = new PBXProject();
|
||||
pbxProject.ReadFromFile( pbxProjectPath );
|
||||
|
||||
#if UNITY_2019_3_OR_NEWER
|
||||
string targetGUID = pbxProject.GetUnityFrameworkTargetGuid();
|
||||
#else
|
||||
string targetGUID = pbxProject.TargetGuidByName( PBXProject.GetUnityTargetName() );
|
||||
#endif
|
||||
|
||||
// Minimum supported iOS version on Unity 2018.1 and later is 8.0
|
||||
#if !UNITY_2018_1_OR_NEWER
|
||||
if( MINIMUM_TARGET_8_OR_ABOVE )
|
||||
{
|
||||
#endif
|
||||
pbxProject.AddBuildProperty( targetGUID, "OTHER_LDFLAGS", "-framework Photos" );
|
||||
pbxProject.AddBuildProperty( targetGUID, "OTHER_LDFLAGS", "-framework MobileCoreServices" );
|
||||
pbxProject.AddBuildProperty( targetGUID, "OTHER_LDFLAGS", "-framework ImageIO" );
|
||||
#if !UNITY_2018_1_OR_NEWER
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -43,6 +51,7 @@ public class NGPostProcessBuild
|
||||
pbxProject.AddBuildProperty( targetGUID, "OTHER_LDFLAGS", "-framework MobileCoreServices" );
|
||||
pbxProject.AddBuildProperty( targetGUID, "OTHER_LDFLAGS", "-framework ImageIO" );
|
||||
}
|
||||
#endif
|
||||
|
||||
pbxProject.RemoveFrameworkFromProject( targetGUID, "Photos.framework" );
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: dff1540cf22bfb749a2422f445cf9427
|
||||
timeCreated: 1521452119
|
||||
licenseType: Store
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
@@ -0,0 +1,15 @@
|
||||
{
|
||||
"name": "NativeGallery.Editor",
|
||||
"references": [],
|
||||
"includePlatforms": [
|
||||
"Editor"
|
||||
],
|
||||
"excludePlatforms": [],
|
||||
"allowUnsafeCode": false,
|
||||
"overrideReferences": false,
|
||||
"precompiledReferences": [],
|
||||
"autoReferenced": true,
|
||||
"defineConstraints": [],
|
||||
"versionDefines": [],
|
||||
"noEngineReferences": false
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3dffc8e654f00c545a82d0a5274d51eb
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"name": "NativeGallery.Runtime"
|
||||
}
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 777e6aa34fa63442d979fd3ac881b77b
|
||||
AssemblyDefinitionImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -41,6 +41,7 @@ public static class NativeGallery
|
||||
}
|
||||
|
||||
public enum Permission { Denied = 0, Granted = 1, ShouldAsk = 2 };
|
||||
private enum MediaType { Image = 0, Video = 1, Audio = 2 };
|
||||
|
||||
// EXIF orientation: http://sylvana.net/jpegcrop/exif_orientation.html (indices are reordered)
|
||||
public enum ImageOrientation { Unknown = -1, Normal = 0, Rotate90 = 1, Rotate180 = 2, Rotate270 = 3, FlipHorizontal = 4, Transpose = 5, FlipVertical = 6, Transverse = 7 };
|
||||
@@ -99,10 +100,10 @@ public static class NativeGallery
|
||||
private static extern void _NativeGallery_VideoWriteToAlbum( string path, string album );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern void _NativeGallery_PickImage( string imageSavePath, int maxSize );
|
||||
private static extern void _NativeGallery_PickImage( string imageSavePath );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern void _NativeGallery_PickVideo();
|
||||
private static extern void _NativeGallery_PickVideo( string videoSavePath );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeGallery_GetImageProperties( string path );
|
||||
@@ -110,6 +111,9 @@ public static class NativeGallery
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeGallery_GetVideoProperties( string path );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeGallery_GetVideoThumbnail( string path, string thumbnailSavePath, int maxSize, double captureTimeInSeconds );
|
||||
|
||||
[System.Runtime.InteropServices.DllImport( "__Internal" )]
|
||||
private static extern string _NativeGallery_LoadImageAtPath( string path, string temporaryFilePath, int maxSize );
|
||||
#endif
|
||||
@@ -122,28 +126,56 @@ public static class NativeGallery
|
||||
{
|
||||
if( m_temporaryImagePath == null )
|
||||
{
|
||||
m_temporaryImagePath = Path.Combine( Application.temporaryCachePath, "__tmpImG" );
|
||||
m_temporaryImagePath = Path.Combine( Application.temporaryCachePath, "tmpImg" );
|
||||
Directory.CreateDirectory( Application.temporaryCachePath );
|
||||
}
|
||||
|
||||
return m_temporaryImagePath;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_IOS
|
||||
private static string m_iOSSelectedImagePath = null;
|
||||
private static string IOSSelectedImagePath
|
||||
private static string m_selectedImagePath = null;
|
||||
private static string SelectedImagePath
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_iOSSelectedImagePath == null )
|
||||
if( m_selectedImagePath == null )
|
||||
{
|
||||
m_iOSSelectedImagePath = Path.Combine( Application.temporaryCachePath, "tmp.png" );
|
||||
m_selectedImagePath = Path.Combine( Application.temporaryCachePath, "pickedImg" );
|
||||
Directory.CreateDirectory( Application.temporaryCachePath );
|
||||
}
|
||||
|
||||
return m_iOSSelectedImagePath;
|
||||
return m_selectedImagePath;
|
||||
}
|
||||
}
|
||||
|
||||
private static string m_selectedVideoPath = null;
|
||||
private static string SelectedVideoPath
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_selectedVideoPath == null )
|
||||
{
|
||||
m_selectedVideoPath = Path.Combine( Application.temporaryCachePath, "pickedVideo" );
|
||||
Directory.CreateDirectory( Application.temporaryCachePath );
|
||||
}
|
||||
|
||||
return m_selectedVideoPath;
|
||||
}
|
||||
}
|
||||
|
||||
private static string m_selectedAudioPath = null;
|
||||
private static string SelectedAudioPath
|
||||
{
|
||||
get
|
||||
{
|
||||
if( m_selectedAudioPath == null )
|
||||
{
|
||||
m_selectedAudioPath = Path.Combine( Application.temporaryCachePath, "pickedAudio" );
|
||||
Directory.CreateDirectory( Application.temporaryCachePath );
|
||||
}
|
||||
|
||||
return m_selectedAudioPath;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
@@ -213,37 +245,47 @@ public static class NativeGallery
|
||||
#endregion
|
||||
|
||||
#region Save Functions
|
||||
public static Permission SaveImageToGallery( byte[] mediaBytes, string album, string filenameFormatted, MediaSaveCallback callback = null )
|
||||
public static Permission SaveImageToGallery( byte[] mediaBytes, string album, string filename, MediaSaveCallback callback = null )
|
||||
{
|
||||
return SaveToGallery( mediaBytes, album, filenameFormatted, true, callback );
|
||||
return SaveToGallery( mediaBytes, album, filename, MediaType.Image, callback );
|
||||
}
|
||||
|
||||
public static Permission SaveImageToGallery( string existingMediaPath, string album, string filenameFormatted, MediaSaveCallback callback = null )
|
||||
public static Permission SaveImageToGallery( string existingMediaPath, string album, string filename, MediaSaveCallback callback = null )
|
||||
{
|
||||
return SaveToGallery( existingMediaPath, album, filenameFormatted, true, callback );
|
||||
return SaveToGallery( existingMediaPath, album, filename, MediaType.Image, callback );
|
||||
}
|
||||
|
||||
public static Permission SaveImageToGallery( Texture2D image, string album, string filenameFormatted, MediaSaveCallback callback = null )
|
||||
public static Permission SaveImageToGallery( Texture2D image, string album, string filename, MediaSaveCallback callback = null )
|
||||
{
|
||||
if( image == null )
|
||||
throw new ArgumentException( "Parameter 'image' is null!" );
|
||||
|
||||
if( filenameFormatted.EndsWith( ".jpeg" ) || filenameFormatted.EndsWith( ".jpg" ) )
|
||||
return SaveToGallery( GetTextureBytes( image, true ), album, filenameFormatted, true, callback );
|
||||
else if( filenameFormatted.EndsWith( ".png" ) )
|
||||
return SaveToGallery( GetTextureBytes( image, false ), album, filenameFormatted, true, callback );
|
||||
if( filename.EndsWith( ".jpeg" ) || filename.EndsWith( ".jpg" ) )
|
||||
return SaveToGallery( GetTextureBytes( image, true ), album, filename, MediaType.Image, callback );
|
||||
else if( filename.EndsWith( ".png" ) )
|
||||
return SaveToGallery( GetTextureBytes( image, false ), album, filename, MediaType.Image, callback );
|
||||
else
|
||||
return SaveToGallery( GetTextureBytes( image, false ), album, filenameFormatted + ".png", true, callback );
|
||||
return SaveToGallery( GetTextureBytes( image, false ), album, filename + ".png", MediaType.Image, callback );
|
||||
}
|
||||
|
||||
public static Permission SaveVideoToGallery( byte[] mediaBytes, string album, string filenameFormatted, MediaSaveCallback callback = null )
|
||||
public static Permission SaveVideoToGallery( byte[] mediaBytes, string album, string filename, MediaSaveCallback callback = null )
|
||||
{
|
||||
return SaveToGallery( mediaBytes, album, filenameFormatted, false, callback );
|
||||
return SaveToGallery( mediaBytes, album, filename, MediaType.Video, callback );
|
||||
}
|
||||
|
||||
public static Permission SaveVideoToGallery( string existingMediaPath, string album, string filenameFormatted, MediaSaveCallback callback = null )
|
||||
public static Permission SaveVideoToGallery( string existingMediaPath, string album, string filename, MediaSaveCallback callback = null )
|
||||
{
|
||||
return SaveToGallery( existingMediaPath, album, filenameFormatted, false, callback );
|
||||
return SaveToGallery( existingMediaPath, album, filename, MediaType.Video, callback );
|
||||
}
|
||||
|
||||
private static Permission SaveAudioToGallery( byte[] mediaBytes, string album, string filename, MediaSaveCallback callback = null )
|
||||
{
|
||||
return SaveToGallery( mediaBytes, album, filename, MediaType.Audio, callback );
|
||||
}
|
||||
|
||||
private static Permission SaveAudioToGallery( string existingMediaPath, string album, string filename, MediaSaveCallback callback = null )
|
||||
{
|
||||
return SaveToGallery( existingMediaPath, album, filename, MediaType.Audio, callback );
|
||||
}
|
||||
#endregion
|
||||
|
||||
@@ -257,24 +299,34 @@ public static class NativeGallery
|
||||
#endif
|
||||
}
|
||||
|
||||
public static Permission GetImageFromGallery( MediaPickCallback callback, string title = "", string mime = "image/*", int maxSize = -1 )
|
||||
public static Permission GetImageFromGallery( MediaPickCallback callback, string title = "", string mime = "image/*" )
|
||||
{
|
||||
return GetMediaFromGallery( callback, true, mime, title, maxSize );
|
||||
return GetMediaFromGallery( callback, MediaType.Image, mime, title );
|
||||
}
|
||||
|
||||
public static Permission GetVideoFromGallery( MediaPickCallback callback, string title = "", string mime = "video/*" )
|
||||
{
|
||||
return GetMediaFromGallery( callback, false, mime, title, -1 );
|
||||
return GetMediaFromGallery( callback, MediaType.Video, mime, title );
|
||||
}
|
||||
|
||||
public static Permission GetImagesFromGallery( MediaPickMultipleCallback callback, string title = "", string mime = "image/*", int maxSize = -1 )
|
||||
private static Permission GetAudioFromGallery( MediaPickCallback callback, string title = "", string mime = "audio/*" )
|
||||
{
|
||||
return GetMultipleMediaFromGallery( callback, true, mime, title, maxSize );
|
||||
return GetMediaFromGallery( callback, MediaType.Audio, mime, title );
|
||||
}
|
||||
|
||||
public static Permission GetImagesFromGallery( MediaPickMultipleCallback callback, string title = "", string mime = "image/*" )
|
||||
{
|
||||
return GetMultipleMediaFromGallery( callback, MediaType.Image, mime, title );
|
||||
}
|
||||
|
||||
public static Permission GetVideosFromGallery( MediaPickMultipleCallback callback, string title = "", string mime = "video/*" )
|
||||
{
|
||||
return GetMultipleMediaFromGallery( callback, false, mime, title, -1 );
|
||||
return GetMultipleMediaFromGallery( callback, MediaType.Video, mime, title );
|
||||
}
|
||||
|
||||
private static Permission GetAudiosFromGallery( MediaPickMultipleCallback callback, string title = "", string mime = "audio/*" )
|
||||
{
|
||||
return GetMultipleMediaFromGallery( callback, MediaType.Audio, mime, title );
|
||||
}
|
||||
|
||||
public static bool IsMediaPickerBusy()
|
||||
@@ -288,7 +340,7 @@ public static class NativeGallery
|
||||
#endregion
|
||||
|
||||
#region Internal Functions
|
||||
private static Permission SaveToGallery( byte[] mediaBytes, string album, string filenameFormatted, bool isImage, MediaSaveCallback callback )
|
||||
private static Permission SaveToGallery( byte[] mediaBytes, string album, string filename, MediaType mediaType, MediaSaveCallback callback )
|
||||
{
|
||||
Permission result = RequestPermission( false );
|
||||
if( result == Permission.Granted )
|
||||
@@ -299,20 +351,26 @@ public static class NativeGallery
|
||||
if( album == null || album.Length == 0 )
|
||||
throw new ArgumentException( "Parameter 'album' is null or empty!" );
|
||||
|
||||
if( filenameFormatted == null || filenameFormatted.Length == 0 )
|
||||
throw new ArgumentException( "Parameter 'filenameFormatted' is null or empty!" );
|
||||
if( filename == null || filename.Length == 0 )
|
||||
throw new ArgumentException( "Parameter 'filename' is null or empty!" );
|
||||
|
||||
string path = GetSavePath( album, filenameFormatted );
|
||||
if( string.IsNullOrEmpty( Path.GetExtension( filename ) ) )
|
||||
Debug.LogWarning( "'filename' doesn't have an extension, this might result in unexpected behaviour!" );
|
||||
|
||||
string path = GetTemporarySavePath( filename );
|
||||
#if UNITY_EDITOR
|
||||
Debug.Log( "SaveToGallery called successfully in the Editor" );
|
||||
#else
|
||||
File.WriteAllBytes( path, mediaBytes );
|
||||
#endif
|
||||
|
||||
SaveToGalleryInternal( path, album, isImage, callback );
|
||||
SaveToGalleryInternal( path, album, mediaType, callback );
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Permission SaveToGallery( string existingMediaPath, string album, string filenameFormatted, bool isImage, MediaSaveCallback callback )
|
||||
private static Permission SaveToGallery( string existingMediaPath, string album, string filename, MediaType mediaType, MediaSaveCallback callback )
|
||||
{
|
||||
Permission result = RequestPermission( false );
|
||||
if( result == Permission.Granted )
|
||||
@@ -323,98 +381,115 @@ public static class NativeGallery
|
||||
if( album == null || album.Length == 0 )
|
||||
throw new ArgumentException( "Parameter 'album' is null or empty!" );
|
||||
|
||||
if( filenameFormatted == null || filenameFormatted.Length == 0 )
|
||||
throw new ArgumentException( "Parameter 'filenameFormatted' is null or empty!" );
|
||||
if( filename == null || filename.Length == 0 )
|
||||
throw new ArgumentException( "Parameter 'filename' is null or empty!" );
|
||||
|
||||
string path = GetSavePath( album, filenameFormatted );
|
||||
if( string.IsNullOrEmpty( Path.GetExtension( filename ) ) )
|
||||
{
|
||||
string originalExtension = Path.GetExtension( existingMediaPath );
|
||||
if( string.IsNullOrEmpty( originalExtension ) )
|
||||
Debug.LogWarning( "'filename' doesn't have an extension, this might result in unexpected behaviour!" );
|
||||
else
|
||||
filename += originalExtension;
|
||||
}
|
||||
|
||||
string path = GetTemporarySavePath( filename );
|
||||
#if UNITY_EDITOR
|
||||
Debug.Log( "SaveToGallery called successfully in the Editor" );
|
||||
#else
|
||||
File.Copy( existingMediaPath, path, true );
|
||||
#endif
|
||||
|
||||
SaveToGalleryInternal( path, album, isImage, callback );
|
||||
SaveToGalleryInternal( path, album, mediaType, callback );
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
private static void SaveToGalleryInternal( string path, string album, bool isImage, MediaSaveCallback callback )
|
||||
private static void SaveToGalleryInternal( string path, string album, MediaType mediaType, MediaSaveCallback callback )
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
AJC.CallStatic( "MediaScanFile", Context, path );
|
||||
AJC.CallStatic( "SaveMedia", Context, (int) mediaType, path, album );
|
||||
|
||||
File.Delete( path );
|
||||
|
||||
if( callback != null )
|
||||
callback( null );
|
||||
|
||||
Debug.Log( "Saving to gallery: " + path );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
NGMediaSaveCallbackiOS.Initialize( callback );
|
||||
if( isImage )
|
||||
_NativeGallery_ImageWriteToAlbum( path, album );
|
||||
else
|
||||
_NativeGallery_VideoWriteToAlbum( path, album );
|
||||
if( mediaType == MediaType.Audio )
|
||||
{
|
||||
if( callback != null )
|
||||
callback( "Saving audio files is not supported on iOS" );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
Debug.Log( "Saving to Pictures: " + Path.GetFileName( path ) );
|
||||
|
||||
NGMediaSaveCallbackiOS.Initialize( callback );
|
||||
if( mediaType == MediaType.Image )
|
||||
_NativeGallery_ImageWriteToAlbum( path, album );
|
||||
else if( mediaType == MediaType.Video )
|
||||
_NativeGallery_VideoWriteToAlbum( path, album );
|
||||
#else
|
||||
if( callback != null )
|
||||
callback( null );
|
||||
#endif
|
||||
}
|
||||
|
||||
private static string GetSavePath( string album, string filenameFormatted )
|
||||
private static string GetTemporarySavePath( string filename )
|
||||
{
|
||||
string saveDir;
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
saveDir = AJC.CallStatic<string>( "GetMediaPath", album );
|
||||
#else
|
||||
saveDir = Application.persistentDataPath;
|
||||
#endif
|
||||
|
||||
if( filenameFormatted.Contains( "{0}" ) )
|
||||
{
|
||||
int fileIndex = 0;
|
||||
string path;
|
||||
do
|
||||
{
|
||||
path = Path.Combine( saveDir, string.Format( filenameFormatted, ++fileIndex ) );
|
||||
} while( File.Exists( path ) );
|
||||
|
||||
return path;
|
||||
}
|
||||
|
||||
saveDir = Path.Combine( saveDir, filenameFormatted );
|
||||
string saveDir = Path.Combine( Application.persistentDataPath, "NGallery" );
|
||||
Directory.CreateDirectory( saveDir );
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_IOS
|
||||
// Ensure a unique temporary filename on iOS:
|
||||
// iOS internally copies images/videos to Photos directory of the system,
|
||||
// but the process is async. The redundant file is deleted by objective-c code
|
||||
// automatically after the media is saved but while it is being saved, the file
|
||||
// should NOT be overwritten. Therefore, always ensure a unique filename on iOS
|
||||
if( File.Exists( saveDir ) )
|
||||
string path = Path.Combine( saveDir, filename );
|
||||
if( File.Exists( path ) )
|
||||
{
|
||||
return GetSavePath( album,
|
||||
Path.GetFileNameWithoutExtension( filenameFormatted ) + " {0}" + Path.GetExtension( filenameFormatted ) );
|
||||
}
|
||||
#endif
|
||||
int fileIndex = 0;
|
||||
string filenameWithoutExtension = Path.GetFileNameWithoutExtension( filename );
|
||||
string extension = Path.GetExtension( filename );
|
||||
|
||||
return saveDir;
|
||||
do
|
||||
{
|
||||
path = Path.Combine( saveDir, string.Concat( filenameWithoutExtension, ++fileIndex, extension ) );
|
||||
} while( File.Exists( path ) );
|
||||
}
|
||||
|
||||
return path;
|
||||
#else
|
||||
return Path.Combine( saveDir, filename );
|
||||
#endif
|
||||
}
|
||||
|
||||
private static Permission GetMediaFromGallery( MediaPickCallback callback, bool imageMode, string mime, string title, int maxSize )
|
||||
private static Permission GetMediaFromGallery( MediaPickCallback callback, MediaType mediaType, string mime, string title )
|
||||
{
|
||||
Permission result = RequestPermission( true );
|
||||
if( result == Permission.Granted && !IsMediaPickerBusy() )
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
AJC.CallStatic( "PickMedia", Context, new NGMediaReceiveCallbackAndroid( callback, null ), imageMode, false, mime, title );
|
||||
string savePath;
|
||||
if( mediaType == MediaType.Image )
|
||||
savePath = SelectedImagePath;
|
||||
else if( mediaType == MediaType.Video )
|
||||
savePath = SelectedVideoPath;
|
||||
else
|
||||
savePath = SelectedAudioPath;
|
||||
|
||||
AJC.CallStatic( "PickMedia", Context, new NGMediaReceiveCallbackAndroid( callback, null ), (int) mediaType, false, savePath, mime, title );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
NGMediaReceiveCallbackiOS.Initialize( callback );
|
||||
if( imageMode )
|
||||
{
|
||||
if( maxSize <= 0 )
|
||||
maxSize = SystemInfo.maxTextureSize;
|
||||
|
||||
_NativeGallery_PickImage( IOSSelectedImagePath, maxSize );
|
||||
}
|
||||
else
|
||||
_NativeGallery_PickVideo();
|
||||
if( mediaType == MediaType.Image )
|
||||
_NativeGallery_PickImage( SelectedImagePath );
|
||||
else if( mediaType == MediaType.Video )
|
||||
_NativeGallery_PickVideo( SelectedVideoPath );
|
||||
else if( callback != null ) // Selecting audio files is not supported on iOS
|
||||
callback( null );
|
||||
#else
|
||||
if( callback != null )
|
||||
callback( null );
|
||||
@@ -424,7 +499,7 @@ public static class NativeGallery
|
||||
return result;
|
||||
}
|
||||
|
||||
private static Permission GetMultipleMediaFromGallery( MediaPickMultipleCallback callback, bool imageMode, string mime, string title, int maxSize )
|
||||
private static Permission GetMultipleMediaFromGallery( MediaPickMultipleCallback callback, MediaType mediaType, string mime, string title )
|
||||
{
|
||||
Permission result = RequestPermission( true );
|
||||
if( result == Permission.Granted && !IsMediaPickerBusy() )
|
||||
@@ -432,7 +507,15 @@ public static class NativeGallery
|
||||
if( CanSelectMultipleFilesFromGallery() )
|
||||
{
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
AJC.CallStatic( "PickMedia", Context, new NGMediaReceiveCallbackAndroid( null, callback ), imageMode, true, mime, title );
|
||||
string savePath;
|
||||
if( mediaType == MediaType.Image )
|
||||
savePath = SelectedImagePath;
|
||||
else if( mediaType == MediaType.Video )
|
||||
savePath = SelectedVideoPath;
|
||||
else
|
||||
savePath = SelectedAudioPath;
|
||||
|
||||
AJC.CallStatic( "PickMedia", Context, new NGMediaReceiveCallbackAndroid( null, callback ), (int) mediaType, true, savePath, mime, title );
|
||||
#else
|
||||
if( callback != null )
|
||||
callback( null );
|
||||
@@ -568,6 +651,25 @@ public static class NativeGallery
|
||||
return result;
|
||||
}
|
||||
|
||||
public static Texture2D GetVideoThumbnail( string videoPath, int maxSize = -1, double captureTimeInSeconds = -1.0 )
|
||||
{
|
||||
if( maxSize <= 0 )
|
||||
maxSize = SystemInfo.maxTextureSize;
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_ANDROID
|
||||
string thumbnailPath = AJC.CallStatic<string>( "GetVideoThumbnail", Context, videoPath, TemporaryImagePath + ".png", false, maxSize, captureTimeInSeconds );
|
||||
#elif !UNITY_EDITOR && UNITY_IOS
|
||||
string thumbnailPath = _NativeGallery_GetVideoThumbnail( videoPath, TemporaryImagePath + ".png", maxSize, captureTimeInSeconds );
|
||||
#else
|
||||
string thumbnailPath = null;
|
||||
#endif
|
||||
|
||||
if( !string.IsNullOrEmpty( thumbnailPath ) )
|
||||
return LoadImageAtPath( thumbnailPath, maxSize );
|
||||
else
|
||||
return null;
|
||||
}
|
||||
|
||||
public static ImageProperties GetImageProperties( string imagePath )
|
||||
{
|
||||
if( !File.Exists( imagePath ) )
|
||||
@@ -613,11 +715,6 @@ public static class NativeGallery
|
||||
int orientationInt;
|
||||
if( int.TryParse( properties[3].Trim(), out orientationInt ) )
|
||||
orientation = (ImageOrientation) orientationInt;
|
||||
|
||||
#if !UNITY_EDITOR && UNITY_IOS
|
||||
if( orientation == ImageOrientation.Unknown ) // selected media is saved in correct orientation on iOS
|
||||
orientation = ImageOrientation.Normal;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
11
Assets/3rd/NativeGallery/Plugins/NativeGallery.cs.meta
Normal file
11
Assets/3rd/NativeGallery/Plugins/NativeGallery.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 89147d0c91efd4310bf3b6ab773df35b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -3,16 +3,18 @@
|
||||
Online documentation & example code available at: https://github.com/yasirkula/UnityNativeGallery
|
||||
E-mail: yasirkula@gmail.com
|
||||
|
||||
|
||||
1. ABOUT
|
||||
This plugin helps you interact with Gallery/Photos on Android & iOS.
|
||||
|
||||
|
||||
2. HOW TO
|
||||
for Android: set "Write Permission" to "External (SDCard)" in Player Settings
|
||||
for iOS: there are two ways to set up the plugin on iOS:
|
||||
|
||||
a. Automated Setup for iOS
|
||||
- change the value of PHOTO_LIBRARY_USAGE_DESCRIPTION in Plugins/NativeGallery/Editor/NGPostProcessBuild.cs (optional)
|
||||
- if your minimum Deployment Target (iOS Version) is at least 8.0, set the value of MINIMUM_TARGET_8_OR_ABOVE to true in NGPostProcessBuild.cs
|
||||
- (optional) change the value of PHOTO_LIBRARY_USAGE_DESCRIPTION in Plugins/NativeGallery/Editor/NGPostProcessBuild.cs
|
||||
- (Unity 2017.4 or earlier) if your minimum Deployment Target (iOS Version) is at least 8.0, set the value of MINIMUM_TARGET_8_OR_ABOVE to true in NGPostProcessBuild.cs
|
||||
|
||||
b. Manual Setup for iOS
|
||||
- set the value of ENABLED to false in NGPostProcessBuild.cs
|
||||
@@ -22,7 +24,22 @@ b. Manual Setup for iOS
|
||||
- insert "-weak_framework Photos -framework AssetsLibrary -framework MobileCoreServices -framework ImageIO" to the "Other Linker Flags" of Unity-iPhone Target (if your Deployment Target is at least 8.0, it is sufficient to insert "-framework Photos -framework MobileCoreServices -framework ImageIO")
|
||||
- lastly, remove Photos.framework from Link Binary With Libraries of Unity-iPhone Target in Build Phases, if exists
|
||||
|
||||
3. SCRIPTING API
|
||||
|
||||
3. FAQ
|
||||
- How can I fetch the path of the saved image or the original path of the picked image?
|
||||
You can't. On iOS, these files are stored in an internal directory that we have no access to (I don't think there is even a way to fetch that internal path). On Android, with Storage Access Framework, the absolute path is hidden behind the SAF-layer. There are some tricks here and there to convert SAF-path to absolute path but they don't work in all cases (most of the snippets that can be found on Stackoverflow can't return the absolute path if the file is stored on external SD card).
|
||||
|
||||
- Can't access the Gallery, it says "java.lang.ClassNotFoundException: com.yasirkula.unity.NativeGallery" in Logcat
|
||||
If your project uses ProGuard, try adding the following line to ProGuard filters: -keep class com.yasirkula.unity.* { *; }
|
||||
|
||||
- Nothing happens when I try to access the Gallery on Android
|
||||
Make sure that you've set the "Write Permission" to "External (SDCard)" in Player Settings.
|
||||
|
||||
- Saving image/video doesn't work properly
|
||||
Make sure that the "filename" parameter of the Save function includes the file's extension, as well
|
||||
|
||||
|
||||
4. SCRIPTING API
|
||||
Please see the online documentation for a more in-depth documentation of the Scripting API: https://github.com/yasirkula/UnityNativeGallery
|
||||
|
||||
enum NativeGallery.Permission { Denied = 0, Granted = 1, ShouldAsk = 2 };
|
||||
@@ -34,14 +51,15 @@ delegate void MediaPickMultipleCallback( string[] paths );
|
||||
|
||||
//// Saving Media To Gallery/Photos ////
|
||||
|
||||
// On Android, your images are saved at DCIM/album/filenameFormatted. On iOS, the image will be saved in the corresponding album
|
||||
// filenameFormatted is string.Format'ed to avoid overwriting the same file on Android, if desired. If, for example, you want your images to be saved in a format like "My img 1.png", "My img 2.png" and etc., you can set the filenameFormatted as "My img {0}.png". {0} here is replaced with a unique number to avoid overwriting an existing file. If you don't use a {0} in your filenameFormatted parameter and a file with the same name does exist at that path, the file will be overwritten. On the other hand, a saved image is never overwritten on iOS
|
||||
// On Android, your images are saved at DCIM/album/filename. On iOS, the image will be saved in the corresponding album.
|
||||
// NOTE: Make sure that the filename parameter includes the file's extension, as well
|
||||
// IMPORTANT: NativeGallery will never overwrite existing media on the Gallery. If there is a name conflict, NativeGallery will ensure a unique filename. So don't put '{0}' in filename anymore (for new users, putting {0} in filename was recommended in order to ensure unique filenames in earlier versions, this is no longer necessary).
|
||||
// MediaSaveCallback takes a string parameter which stores an error string if something goes wrong while saving the image/video, or null if it is saved successfully
|
||||
NativeGallery.Permission NativeGallery.SaveImageToGallery( byte[] mediaBytes, string album, string filenameFormatted, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveImageToGallery( string existingMediaPath, string album, string filenameFormatted, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveImageToGallery( Texture2D image, string album, string filenameFormatted, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveVideoToGallery( byte[] mediaBytes, string album, string filenameFormatted, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveVideoToGallery( string existingMediaPath, string album, string filenameFormatted, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveImageToGallery( byte[] mediaBytes, string album, string filename, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveImageToGallery( string existingMediaPath, string album, string filename, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveImageToGallery( Texture2D image, string album, string filename, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveVideoToGallery( byte[] mediaBytes, string album, string filename, MediaSaveCallback callback = null );
|
||||
NativeGallery.Permission NativeGallery.SaveVideoToGallery( string existingMediaPath, string album, string filename, MediaSaveCallback callback = null );
|
||||
|
||||
|
||||
//// Retrieving Media From Gallery/Photos ////
|
||||
@@ -50,11 +68,10 @@ NativeGallery.Permission NativeGallery.SaveVideoToGallery( string existingMediaP
|
||||
// MediaPickCallback takes a string parameter which stores the path of the selected image/video, or null if nothing is selected
|
||||
// MediaPickMultipleCallback takes a string[] parameter which stores the path(s) of the selected image(s)/video(s), or null if nothing is selected
|
||||
// title: determines the title of the image picker dialog on Android. Has no effect on iOS
|
||||
// mime: filters the available images/videos on Android. For example, to request a JPEG image from the user, mime can be set as "image/jpeg". Setting multiple mime types is not possible (in that case, you should leave mime as is). On iOS, selected images will always be in PNG format and thus, this parameter has no effect on iOS
|
||||
// maxSize: determines the maximum size of the returned image in pixels on iOS. A larger image will be down-scaled for better performance. If untouched, its value will be set to SystemInfo.maxTextureSize. Has no effect on Android
|
||||
NativeGallery.Permission NativeGallery.GetImageFromGallery( MediaPickCallback callback, string title = "", string mime = "image/*", int maxSize = -1 );
|
||||
// mime: filters the available images/videos on Android. For example, to request a JPEG image from the user, mime can be set as "image/jpeg". Setting multiple mime types is not possible (in that case, you should leave mime as is). Has no effect on iOS
|
||||
NativeGallery.Permission NativeGallery.GetImageFromGallery( MediaPickCallback callback, string title = "", string mime = "image/*" );
|
||||
NativeGallery.Permission NativeGallery.GetVideoFromGallery( MediaPickCallback callback, string title = "", string mime = "video/*" );
|
||||
NativeGallery.Permission NativeGallery.GetImagesFromGallery( MediaPickMultipleCallback callback, string title = "", string mime = "image/*", int maxSize = -1 );
|
||||
NativeGallery.Permission NativeGallery.GetImagesFromGallery( MediaPickMultipleCallback callback, string title = "", string mime = "image/*" );
|
||||
NativeGallery.Permission NativeGallery.GetVideosFromGallery( MediaPickMultipleCallback callback, string title = "", string mime = "video/*" );
|
||||
|
||||
// Returns true if selecting multiple images/videos from Gallery/Photos is possible on this device (only available on Android 18 and later; iOS not supported)
|
||||
@@ -77,11 +94,20 @@ bool NativeGallery.CanOpenSettings();
|
||||
|
||||
//// Utility Functions ////
|
||||
|
||||
// Creates a Texture2D from the specified image file in correct orientation and returns it. Returns null, if something goes wrong
|
||||
// maxSize: determines the maximum size of the returned Texture2D in pixels. Larger textures will be down-scaled. If untouched, its value will be set to SystemInfo.maxTextureSize. It is recommended to set a proper maxSize for better performance
|
||||
// markTextureNonReadable: marks the generated texture as non-readable for better memory usage. If you plan to modify the texture later (e.g. GetPixels/SetPixels), set its value to false
|
||||
// generateMipmaps: determines whether texture should have mipmaps or not
|
||||
// linearColorSpace: determines whether texture should be in linear color space or sRGB color space
|
||||
Texture2D NativeGallery.LoadImageAtPath( string imagePath, int maxSize = -1, bool markTextureNonReadable = true, bool generateMipmaps = true, bool linearColorSpace = false ): creates a Texture2D from the specified image file in correct orientation and returns it. Returns null, if something goes wrong
|
||||
Texture2D NativeGallery.LoadImageAtPath( string imagePath, int maxSize = -1, bool markTextureNonReadable = true, bool generateMipmaps = true, bool linearColorSpace = false );
|
||||
|
||||
NativeGallery.ImageProperties NativeGallery.GetImageProperties( string imagePath ): returns an ImageProperties instance that holds the width, height and mime type information of an image file without creating a Texture2D object. Mime type will be null, if it can't be determined
|
||||
NativeGallery.VideoProperties NativeGallery.GetVideoProperties( string videoPath ): returns a VideoProperties instance that holds the width, height, duration (in milliseconds) and rotation information of a video file
|
||||
// Creates a Texture2D thumbnail from a video file and returns it. Returns null, if something goes wrong
|
||||
// maxSize: determines the maximum size of the returned Texture2D in pixels. Larger thumbnails will be down-scaled. If untouched, its value will be set to SystemInfo.maxTextureSize. It is recommended to set a proper maxSize for better performance
|
||||
// captureTimeInSeconds: determines the frame of the video that the thumbnail is captured from. If untouched, OS will decide this value
|
||||
Texture2D NativeGallery.GetVideoThumbnail( string videoPath, int maxSize = -1, double captureTimeInSeconds = -1.0 );
|
||||
|
||||
// Returns an ImageProperties instance that holds the width, height and mime type information of an image file without creating a Texture2D object. Mime type will be null, if it can't be determined
|
||||
NativeGallery.ImageProperties NativeGallery.GetImageProperties( string imagePath );
|
||||
|
||||
// Returns a VideoProperties instance that holds the width, height, duration (in milliseconds) and rotation information of a video file. To play a video in correct orientation, you should rotate it by rotation degrees clockwise. For a 90-degree or 270-degree rotated video, values of width and height should be swapped to get the display size of the video
|
||||
NativeGallery.VideoProperties NativeGallery.GetVideoProperties( string videoPath );
|
||||
7
Assets/3rd/NativeGallery/Plugins/README.txt.meta
Normal file
7
Assets/3rd/NativeGallery/Plugins/README.txt.meta
Normal file
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 1852f26c8592c453f8f7423bf2a283d7
|
||||
TextScriptImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
8
Assets/3rd/NativeGallery/Plugins/iOS.meta
Normal file
8
Assets/3rd/NativeGallery/Plugins/iOS.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: c8af1e45d8c954cd0a87623adcbc246d
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -42,13 +42,13 @@ namespace NativeGalleryNamespace
|
||||
|
||||
if( _NativeGallery_IsMediaPickerBusy() == 0 )
|
||||
{
|
||||
IsBusy = false;
|
||||
|
||||
if( callback != null )
|
||||
{
|
||||
callback( null );
|
||||
callback = null;
|
||||
}
|
||||
|
||||
IsBusy = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -56,6 +56,8 @@ namespace NativeGalleryNamespace
|
||||
|
||||
public void OnMediaReceived( string path )
|
||||
{
|
||||
IsBusy = false;
|
||||
|
||||
if( string.IsNullOrEmpty( path ) )
|
||||
path = null;
|
||||
|
||||
@@ -64,8 +66,6 @@ namespace NativeGalleryNamespace
|
||||
callback( path );
|
||||
callback = null;
|
||||
}
|
||||
|
||||
IsBusy = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 71fb861c149c2d1428544c601e52a33c
|
||||
timeCreated: 1519060539
|
||||
licenseType: Store
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9cbb865d0913a0d47bb6d2eb3ad04c4f
|
||||
timeCreated: 1519060539
|
||||
licenseType: Store
|
||||
licenseType: Free
|
||||
MonoImporter:
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
@@ -18,20 +18,20 @@ + (int)requestPermission;
|
||||
+ (int)canOpenSettings;
|
||||
+ (void)openSettings;
|
||||
+ (void)saveMedia:(NSString *)path albumName:(NSString *)album isImg:(BOOL)isImg;
|
||||
+ (void)pickMedia:(BOOL)imageMode savePath:(NSString *)imageSavePath;
|
||||
+ (void)pickMediaSetMaxSize:(int)maxSize;
|
||||
+ (void)pickMedia:(BOOL)imageMode savePath:(NSString *)mediaSavePath;
|
||||
+ (int)isMediaPickerBusy;
|
||||
+ (char *)getImageProperties:(NSString *)path;
|
||||
+ (char *)getVideoProperties:(NSString *)path;
|
||||
+ (char *)getVideoThumbnail:(NSString *)path savePath:(NSString *)savePath maximumSize:(int)maximumSize captureTime:(double)captureTime;
|
||||
+ (char *)loadImageAtPath:(NSString *)path tempFilePath:(NSString *)tempFilePath maximumSize:(int)maximumSize;
|
||||
@end
|
||||
|
||||
@implementation UNativeGallery
|
||||
|
||||
static NSString *pickedMediaSavePath;
|
||||
static NSString *resultPath;
|
||||
static UIPopoverController *popup;
|
||||
static UIImagePickerController *imagePicker;
|
||||
static int pickMediaMaxSize = -1;
|
||||
static int imagePickerState = 0; // 0 -> none, 1 -> showing (always in this state on iPad), 2 -> finished
|
||||
|
||||
#pragma clang diagnostic push
|
||||
@@ -229,11 +229,11 @@ + (void)saveMediaOld:(NSString *)path albumName:(NSString *)album isImage:(BOOL)
|
||||
[library addAssetsGroupAlbumWithName:album resultBlock:^(ALAssetsGroup *group) {
|
||||
saveBlock(group);
|
||||
}
|
||||
failureBlock:^(NSError *error) {
|
||||
NSLog(@"Error creating album: %@", error);
|
||||
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
|
||||
UnitySendMessage("NGMediaSaveCallbackiOS", "OnMediaSaveFailed", [self getCString:[error localizedDescription]]);
|
||||
}];
|
||||
failureBlock:^(NSError *error) {
|
||||
NSLog(@"Error creating album: %@", error);
|
||||
[[NSFileManager defaultManager] removeItemAtPath:path error:nil];
|
||||
UnitySendMessage("NGMediaSaveCallbackiOS", "OnMediaSaveFailed", [self getCString:[error localizedDescription]]);
|
||||
}];
|
||||
}
|
||||
} failureBlock:^(NSError* error) {
|
||||
NSLog(@"Error listing albums: %@", error);
|
||||
@@ -300,7 +300,7 @@ + (void)saveMediaNew:(NSString *)path albumName:(NSString *)album isImage:(BOOL)
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/10531752/2373034
|
||||
+ (void)pickMedia:(BOOL)imageMode savePath:(NSString *)imageSavePath {
|
||||
+ (void)pickMedia:(BOOL)imageMode savePath:(NSString *)mediaSavePath {
|
||||
imagePicker = [[UIImagePickerController alloc] init];
|
||||
imagePicker.delegate = self;
|
||||
imagePicker.allowsEditing = NO;
|
||||
@@ -309,9 +309,17 @@ + (void)pickMedia:(BOOL)imageMode savePath:(NSString *)imageSavePath {
|
||||
if (imageMode)
|
||||
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];
|
||||
else
|
||||
{
|
||||
imagePicker.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeMovie, (NSString *)kUTTypeVideo, nil];
|
||||
|
||||
pickedMediaSavePath = imageSavePath;
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
|
||||
// Don't compress the picked video if possible
|
||||
if ([[[UIDevice currentDevice] systemVersion] compare:@"11.0" options:NSNumericSearch] != NSOrderedAscending)
|
||||
imagePicker.videoExportPreset = AVAssetExportPresetPassthrough;
|
||||
#endif
|
||||
}
|
||||
|
||||
pickedMediaSavePath = mediaSavePath;
|
||||
|
||||
imagePickerState = 1;
|
||||
UIViewController *rootViewController = UnityGetGLViewController();
|
||||
@@ -320,14 +328,10 @@ + (void)pickMedia:(BOOL)imageMode savePath:(NSString *)imageSavePath {
|
||||
else { // iPad
|
||||
popup = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
|
||||
popup.delegate = self;
|
||||
[popup presentPopoverFromRect:CGRectMake( rootViewController.view.frame.size.width / 2, rootViewController.view.frame.size.height / 4, 0, 0 ) inView:rootViewController.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
|
||||
[popup presentPopoverFromRect:CGRectMake( rootViewController.view.frame.size.width / 2, rootViewController.view.frame.size.height / 2, 1, 1 ) inView:rootViewController.view permittedArrowDirections:0 animated:YES];
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)pickMediaSetMaxSize:(int)maxSize {
|
||||
pickMediaMaxSize = maxSize;
|
||||
}
|
||||
|
||||
+ (int)isMediaPickerBusy {
|
||||
if (imagePickerState == 2)
|
||||
return 1;
|
||||
@@ -435,6 +439,50 @@ + (char *)getVideoProperties:(NSString *)path {
|
||||
return [self getCString:[NSString stringWithFormat:@"%d>%d>%lld>%f", (int)roundf(size.width), (int)roundf(size.height), duration, rotation]];
|
||||
}
|
||||
|
||||
+ (char *)getVideoThumbnail:(NSString *)path savePath:(NSString *)savePath maximumSize:(int)maximumSize captureTime:(double)captureTime {
|
||||
AVAssetImageGenerator *thumbnailGenerator = [[AVAssetImageGenerator alloc] initWithAsset:[[AVURLAsset alloc] initWithURL:[NSURL fileURLWithPath:path] options:nil]];
|
||||
thumbnailGenerator.appliesPreferredTrackTransform = YES;
|
||||
thumbnailGenerator.maximumSize = CGSizeMake((CGFloat) maximumSize, (CGFloat) maximumSize);
|
||||
thumbnailGenerator.requestedTimeToleranceBefore = kCMTimeZero;
|
||||
thumbnailGenerator.requestedTimeToleranceAfter = kCMTimeZero;
|
||||
|
||||
if (captureTime < 0.0)
|
||||
captureTime = 0.0;
|
||||
else {
|
||||
AVURLAsset *asset = [AVURLAsset URLAssetWithURL:[NSURL fileURLWithPath:path] options:nil];
|
||||
if (asset != nil) {
|
||||
double videoDuration = CMTimeGetSeconds([asset duration]);
|
||||
if (videoDuration > 0.0 && captureTime >= videoDuration - 0.1) {
|
||||
if (captureTime > videoDuration)
|
||||
captureTime = videoDuration;
|
||||
|
||||
thumbnailGenerator.requestedTimeToleranceBefore = CMTimeMakeWithSeconds(1.0, 600);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
NSError *error = nil;
|
||||
CGImageRef image = [thumbnailGenerator copyCGImageAtTime:CMTimeMakeWithSeconds(captureTime, 600) actualTime:nil error:&error];
|
||||
if (image == nil) {
|
||||
if (error != nil)
|
||||
NSLog(@"Error generating video thumbnail: %@", error);
|
||||
else
|
||||
NSLog(@"Error generating video thumbnail...");
|
||||
|
||||
return "";
|
||||
}
|
||||
|
||||
UIImage *thumbnail = [[UIImage alloc] initWithCGImage:image];
|
||||
CGImageRelease(image);
|
||||
|
||||
if (![UIImagePNGRepresentation(thumbnail) writeToFile:savePath atomically:YES]) {
|
||||
NSLog(@"Error saving thumbnail image");
|
||||
return "";
|
||||
}
|
||||
|
||||
return [self getCString:savePath];
|
||||
}
|
||||
|
||||
+ (UIImage *)scaleImage:(UIImage *)image maxSize:(int)maxSize {
|
||||
CGFloat width = image.size.width;
|
||||
CGFloat height = image.size.height;
|
||||
@@ -468,51 +516,158 @@ + (UIImage *)scaleImage:(UIImage *)image maxSize:(int)maxSize {
|
||||
}
|
||||
|
||||
+ (char *)loadImageAtPath:(NSString *)path tempFilePath:(NSString *)tempFilePath maximumSize:(int)maximumSize {
|
||||
NSArray *metadata = [self getImageMetadata:path];
|
||||
int orientationInt = [metadata[2] intValue]; // 1: correct orientation, [1,8]: valid orientation range
|
||||
if (( orientationInt <= 1 || orientationInt > 8 ) && [metadata[0] intValue] <= maximumSize && [metadata[1] intValue] <= maximumSize)
|
||||
return [self getCString:path];
|
||||
// Check if the image can be loaded by Unity without requiring a conversion to PNG
|
||||
// Credit: https://stackoverflow.com/a/12048937/2373034
|
||||
NSString *extension = [path pathExtension];
|
||||
BOOL conversionNeeded = [extension caseInsensitiveCompare:@"jpg"] != NSOrderedSame && [extension caseInsensitiveCompare:@"jpeg"] != NSOrderedSame && [extension caseInsensitiveCompare:@"png"] != NSOrderedSame;
|
||||
|
||||
if (!conversionNeeded) {
|
||||
// Check if the image needs to be processed at all
|
||||
NSArray *metadata = [self getImageMetadata:path];
|
||||
int orientationInt = [metadata[2] intValue]; // 1: correct orientation, [1,8]: valid orientation range
|
||||
if (orientationInt == 1 && [metadata[0] intValue] <= maximumSize && [metadata[1] intValue] <= maximumSize)
|
||||
return [self getCString:path];
|
||||
}
|
||||
|
||||
UIImage *image = [UIImage imageWithContentsOfFile:path];
|
||||
if (image == nil)
|
||||
return [self getCString:path];
|
||||
|
||||
UIImage *scaledImage = [self scaleImage:image maxSize:maximumSize];
|
||||
if (scaledImage != image) {
|
||||
[UIImagePNGRepresentation(scaledImage) writeToFile:tempFilePath atomically:YES];
|
||||
if (conversionNeeded || scaledImage != image) {
|
||||
if (![UIImagePNGRepresentation(scaledImage) writeToFile:tempFilePath atomically:YES]) {
|
||||
NSLog(@"Error creating scaled image");
|
||||
return [self getCString:path];
|
||||
}
|
||||
|
||||
return [self getCString:tempFilePath];
|
||||
}
|
||||
else
|
||||
return [self getCString:path];
|
||||
}
|
||||
|
||||
#pragma clang diagnostic push
|
||||
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
|
||||
+ (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info {
|
||||
NSString *path;
|
||||
resultPath = nil;
|
||||
|
||||
if ([info[UIImagePickerControllerMediaType] isEqualToString:(NSString *)kUTTypeImage]) { // image picked
|
||||
// Temporarily save image as PNG
|
||||
UIImage *image = info[UIImagePickerControllerOriginalImage];
|
||||
if (image == nil)
|
||||
path = nil;
|
||||
else {
|
||||
[UIImagePNGRepresentation([self scaleImage:image maxSize:pickMediaMaxSize]) writeToFile:pickedMediaSavePath atomically:YES];
|
||||
path = pickedMediaSavePath;
|
||||
// On iOS 8.0 or later, try to obtain the raw data of the image (which allows picking gifs properly or preserving metadata)
|
||||
if ([[[UIDevice currentDevice] systemVersion] compare:@"8.0" options:NSNumericSearch] != NSOrderedAscending) {
|
||||
PHAsset *asset = nil;
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 110000
|
||||
if ([[[UIDevice currentDevice] systemVersion] compare:@"11.0" options:NSNumericSearch] != NSOrderedAscending) {
|
||||
// Try fetching the source image via UIImagePickerControllerImageURL
|
||||
NSURL *mediaUrl = info[UIImagePickerControllerImageURL];
|
||||
if (mediaUrl != nil) {
|
||||
NSString *imagePath = [mediaUrl path];
|
||||
if (imagePath != nil && [[NSFileManager defaultManager] fileExistsAtPath:imagePath]) {
|
||||
NSError *error;
|
||||
NSString *newPath = [pickedMediaSavePath stringByAppendingPathExtension:[imagePath pathExtension]];
|
||||
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:newPath] || [[NSFileManager defaultManager] removeItemAtPath:newPath error:&error]) {
|
||||
if ([[NSFileManager defaultManager] copyItemAtPath:imagePath toPath:newPath error:&error]) {
|
||||
resultPath = newPath;
|
||||
NSLog(@"Copied source image from UIImagePickerControllerImageURL");
|
||||
}
|
||||
else
|
||||
NSLog(@"Error copying image: %@", error);
|
||||
}
|
||||
else
|
||||
NSLog(@"Error deleting existing image: %@", error);
|
||||
}
|
||||
}
|
||||
|
||||
if (resultPath == nil)
|
||||
asset = info[UIImagePickerControllerPHAsset];
|
||||
}
|
||||
#endif
|
||||
|
||||
if (resultPath == nil) {
|
||||
if (asset == nil) {
|
||||
NSURL *mediaUrl = info[UIImagePickerControllerReferenceURL] ?: info[UIImagePickerControllerMediaURL];
|
||||
if (mediaUrl != nil)
|
||||
asset = [[PHAsset fetchAssetsWithALAssetURLs:[NSArray arrayWithObject:mediaUrl] options:nil] firstObject];
|
||||
}
|
||||
|
||||
if (asset != nil) {
|
||||
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
|
||||
options.synchronous = YES;
|
||||
options.version = PHImageRequestOptionsVersionCurrent;
|
||||
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
|
||||
if ([[[UIDevice currentDevice] systemVersion] compare:@"13.0" options:NSNumericSearch] != NSOrderedAscending) {
|
||||
[[PHImageManager defaultManager] requestImageDataAndOrientationForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, CGImagePropertyOrientation orientation, NSDictionary *imageInfo) {
|
||||
if (imageData != nil)
|
||||
[self trySaveSourceImage:imageData withInfo:imageInfo];
|
||||
else
|
||||
NSLog(@"Couldn't fetch raw image data");
|
||||
}];
|
||||
}
|
||||
else {
|
||||
#endif
|
||||
[[PHImageManager defaultManager] requestImageDataForAsset:asset options:options resultHandler:^(NSData *imageData, NSString *dataUTI, UIImageOrientation orientation, NSDictionary *imageInfo) {
|
||||
if (imageData != nil)
|
||||
[self trySaveSourceImage:imageData withInfo:imageInfo];
|
||||
else
|
||||
NSLog(@"Couldn't fetch raw image data");
|
||||
}];
|
||||
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= 130000
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (resultPath == nil) {
|
||||
// Temporarily save image as PNG
|
||||
UIImage *image = info[UIImagePickerControllerOriginalImage];
|
||||
if (image != nil) {
|
||||
resultPath = [pickedMediaSavePath stringByAppendingPathExtension:@"png"];
|
||||
if (![UIImagePNGRepresentation(image) writeToFile:resultPath atomically:YES]) {
|
||||
NSLog(@"Error creating PNG image");
|
||||
resultPath = nil;
|
||||
}
|
||||
}
|
||||
else
|
||||
NSLog(@"Error fetching original image from picker");
|
||||
}
|
||||
}
|
||||
else { // video picked
|
||||
NSURL *mediaUrl = info[UIImagePickerControllerMediaURL] ?: info[UIImagePickerControllerReferenceURL];
|
||||
if (mediaUrl == nil)
|
||||
path = nil;
|
||||
else
|
||||
path = [mediaUrl path];
|
||||
if (mediaUrl != nil) {
|
||||
resultPath = [mediaUrl path];
|
||||
|
||||
// On iOS 13, picked file becomes unreachable as soon as the UIImagePickerController disappears,
|
||||
// in that case, copy the video to a temporary location
|
||||
if ([[[UIDevice currentDevice] systemVersion] compare:@"13.0" options:NSNumericSearch] != NSOrderedAscending) {
|
||||
NSError *error;
|
||||
NSString *newPath = [pickedMediaSavePath stringByAppendingPathExtension:[resultPath pathExtension]];
|
||||
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:newPath] || [[NSFileManager defaultManager] removeItemAtPath:newPath error:&error]) {
|
||||
if ([[NSFileManager defaultManager] copyItemAtPath:resultPath toPath:newPath error:&error])
|
||||
resultPath = newPath;
|
||||
else {
|
||||
NSLog(@"Error copying video: %@", error);
|
||||
resultPath = nil;
|
||||
}
|
||||
}
|
||||
else {
|
||||
NSLog(@"Error deleting existing video: %@", error);
|
||||
resultPath = nil;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
popup = nil;
|
||||
imagePicker = nil;
|
||||
imagePickerState = 2;
|
||||
UnitySendMessage("NGMediaReceiveCallbackiOS", "OnMediaReceived", [self getCString:path]);
|
||||
UnitySendMessage("NGMediaReceiveCallbackiOS", "OnMediaReceived", [self getCString:resultPath]);
|
||||
|
||||
[picker dismissViewControllerAnimated:NO completion:nil];
|
||||
}
|
||||
#pragma clang diagnostic pop
|
||||
|
||||
+ (void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
|
||||
{
|
||||
@@ -529,6 +684,36 @@ + (void)popoverControllerDidDismissPopover:(UIPopoverController *)popoverControl
|
||||
UnitySendMessage("NGMediaReceiveCallbackiOS", "OnMediaReceived", "");
|
||||
}
|
||||
|
||||
+ (void)trySaveSourceImage:(NSData *)imageData withInfo:(NSDictionary *)info {
|
||||
NSString *filePath = info[@"PHImageFileURLKey"];
|
||||
if (filePath != nil) // filePath can actually be an NSURL, convert it to NSString
|
||||
filePath = [NSString stringWithFormat:@"%@", filePath];
|
||||
|
||||
if (filePath == nil || [filePath length] == 0)
|
||||
{
|
||||
filePath = info[@"PHImageFileUTIKey"];
|
||||
if (filePath != nil)
|
||||
filePath = [NSString stringWithFormat:@"%@", filePath];
|
||||
}
|
||||
|
||||
if (filePath == nil || [filePath length] == 0)
|
||||
resultPath = pickedMediaSavePath;
|
||||
else
|
||||
resultPath = [pickedMediaSavePath stringByAppendingPathExtension:[filePath pathExtension]];
|
||||
|
||||
NSError *error;
|
||||
if (![[NSFileManager defaultManager] fileExistsAtPath:resultPath] || [[NSFileManager defaultManager] removeItemAtPath:resultPath error:&error]) {
|
||||
if (![imageData writeToFile:resultPath atomically:YES]) {
|
||||
NSLog(@"Error copying source image to file");
|
||||
resultPath = nil;
|
||||
}
|
||||
}
|
||||
else {
|
||||
NSLog(@"Error deleting existing image: %@", error);
|
||||
resultPath = nil;
|
||||
}
|
||||
}
|
||||
|
||||
// Credit: https://stackoverflow.com/a/37052118/2373034
|
||||
+ (char *)getCString:(NSString *)source {
|
||||
if (source == nil)
|
||||
@@ -567,13 +752,12 @@ + (char *)getCString:(NSString *)source {
|
||||
[UNativeGallery saveMedia:[NSString stringWithUTF8String:path] albumName:[NSString stringWithUTF8String:album] isImg:NO];
|
||||
}
|
||||
|
||||
extern "C" void _NativeGallery_PickImage(const char* imageSavePath, int maxSize) {
|
||||
[UNativeGallery pickMediaSetMaxSize:maxSize];
|
||||
extern "C" void _NativeGallery_PickImage(const char* imageSavePath) {
|
||||
[UNativeGallery pickMedia:YES savePath:[NSString stringWithUTF8String:imageSavePath]];
|
||||
}
|
||||
|
||||
extern "C" void _NativeGallery_PickVideo() {
|
||||
[UNativeGallery pickMedia:NO savePath:nil];
|
||||
extern "C" void _NativeGallery_PickVideo(const char* videoSavePath) {
|
||||
[UNativeGallery pickMedia:NO savePath:[NSString stringWithUTF8String:videoSavePath]];
|
||||
}
|
||||
|
||||
extern "C" int _NativeGallery_IsMediaPickerBusy() {
|
||||
@@ -588,6 +772,10 @@ + (char *)getCString:(NSString *)source {
|
||||
return [UNativeGallery getVideoProperties:[NSString stringWithUTF8String:path]];
|
||||
}
|
||||
|
||||
extern "C" char* _NativeGallery_GetVideoThumbnail(const char* path, const char* thumbnailSavePath, int maxSize, double captureTimeInSeconds) {
|
||||
return [UNativeGallery getVideoThumbnail:[NSString stringWithUTF8String:path] savePath:[NSString stringWithUTF8String:thumbnailSavePath] maximumSize:maxSize captureTime:captureTimeInSeconds];
|
||||
}
|
||||
|
||||
extern "C" char* _NativeGallery_LoadImageAtPath(const char* path, const char* temporaryFilePath, int maxSize) {
|
||||
return [UNativeGallery loadImageAtPath:[NSString stringWithUTF8String:path] tempFilePath:[NSString stringWithUTF8String:temporaryFilePath] maximumSize:maxSize];
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 953e0b740eb03144883db35f72cad8a6
|
||||
timeCreated: 1498722774
|
||||
licenseType: Store
|
||||
licenseType: Pro
|
||||
PluginImporter:
|
||||
serializedVersion: 2
|
||||
iconMap: {}
|
||||
8
Assets/3rd/Scripts.meta
Normal file
8
Assets/3rd/Scripts.meta
Normal file
@@ -0,0 +1,8 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 3e47fe566f99c4c4bb3667394434195a
|
||||
folderAsset: yes
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
61
Assets/3rd/Scripts/MyCamera.cs
Normal file
61
Assets/3rd/Scripts/MyCamera.cs
Normal file
@@ -0,0 +1,61 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Coolape;
|
||||
|
||||
public static class MyCamera
|
||||
{
|
||||
|
||||
public static NativeCamera.Permission getImage(object callback, int maxSize = -1)
|
||||
{
|
||||
NativeCamera.Permission pm;
|
||||
pm = NativeCamera.CheckPermission();
|
||||
if (pm == NativeCamera.Permission.Granted)
|
||||
{
|
||||
NativeCamera.TakePicture((path) =>
|
||||
{
|
||||
Utl.doCallback(callback, path);
|
||||
}, maxSize, true, NativeCamera.PreferredCamera.Default);
|
||||
}
|
||||
return pm;
|
||||
}
|
||||
|
||||
public static NativeCamera.Permission getImageFacing(object callback, int maxSize = -1)
|
||||
{
|
||||
NativeCamera.Permission pm;
|
||||
pm = NativeCamera.CheckPermission();
|
||||
if (pm == NativeCamera.Permission.Granted)
|
||||
{
|
||||
NativeCamera.TakePicture((path) =>
|
||||
{
|
||||
Utl.doCallback(callback, path);
|
||||
}, maxSize, true, NativeCamera.PreferredCamera.Front);
|
||||
}
|
||||
return pm;
|
||||
}
|
||||
|
||||
public static NativeCamera.Permission getVideo(object callback)
|
||||
{
|
||||
NativeCamera.Permission pm;
|
||||
pm = NativeCamera.CheckPermission();
|
||||
if (pm == NativeCamera.Permission.Granted)
|
||||
{
|
||||
NativeCamera.RecordVideo((path) =>
|
||||
{
|
||||
Utl.doCallback(callback, path);
|
||||
});
|
||||
}
|
||||
return pm;
|
||||
}
|
||||
|
||||
public static bool openSetting()
|
||||
{
|
||||
if (NativeCamera.CanOpenSettings())
|
||||
{
|
||||
NativeCamera.OpenSettings();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,5 +1,5 @@
|
||||
fileFormatVersion: 2
|
||||
guid: ddbd1086fc9d14bf6814614e75efda21
|
||||
guid: 27474c449f2934a59b021704591ab111
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
47
Assets/3rd/Scripts/MyGallery.cs
Normal file
47
Assets/3rd/Scripts/MyGallery.cs
Normal file
@@ -0,0 +1,47 @@
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using UnityEngine;
|
||||
using Coolape;
|
||||
|
||||
public static class MyGallery
|
||||
{
|
||||
|
||||
public static NativeGallery.Permission getImage(object callback)
|
||||
{
|
||||
NativeGallery.Permission pm;
|
||||
pm = NativeGallery.CheckPermission();
|
||||
if (pm == NativeGallery.Permission.Granted)
|
||||
{
|
||||
NativeGallery.GetImageFromGallery((path) =>
|
||||
{
|
||||
Utl.doCallback(callback, path);
|
||||
});
|
||||
}
|
||||
return pm;
|
||||
}
|
||||
|
||||
public static NativeGallery.Permission getMultImages(object callback)
|
||||
{
|
||||
NativeGallery.Permission pm;
|
||||
pm = NativeGallery.CheckPermission();
|
||||
if (pm == NativeGallery.Permission.Granted)
|
||||
{
|
||||
NativeGallery.GetImagesFromGallery((pathList) =>
|
||||
{
|
||||
Utl.doCallback(callback, pathList);
|
||||
});
|
||||
}
|
||||
return pm;
|
||||
}
|
||||
|
||||
public static bool openSetting()
|
||||
{
|
||||
if (NativeGallery.CanOpenSettings())
|
||||
{
|
||||
NativeGallery.OpenSettings();
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
11
Assets/3rd/Scripts/MyGallery.cs.meta
Normal file
11
Assets/3rd/Scripts/MyGallery.cs.meta
Normal file
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 64663a08f69c441d19f0d7a50eae5465
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -498,6 +498,7 @@ public class UIInput : MonoBehaviour
|
||||
|
||||
protected virtual void OnSelect (bool isSelected)
|
||||
{
|
||||
if (!enabled) return; // add by chenbin
|
||||
if (isSelected)
|
||||
{
|
||||
#if !MOBILE
|
||||
|
||||
@@ -1,12 +1,21 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using Coolape;
|
||||
using System.Collections.Generic;
|
||||
|
||||
[RequireComponent (typeof(UIPopupList))]
|
||||
public class CLUIElementPopList : UIEventListener
|
||||
{
|
||||
UIPopupList _poplist;
|
||||
public List<EventDelegate> onSelect = new List<EventDelegate>();
|
||||
|
||||
protected void ExecuteOnChange()
|
||||
{
|
||||
if (EventDelegate.IsValid(onSelect))
|
||||
{
|
||||
EventDelegate.Execute(onSelect, gameObject); // modify by chenbin
|
||||
}
|
||||
}
|
||||
public UIPopupList poplist {
|
||||
get {
|
||||
if (_poplist == null) {
|
||||
@@ -31,5 +40,6 @@ public class CLUIElementPopList : UIEventListener
|
||||
{
|
||||
string val = orgs [1].ToString ();
|
||||
poplist.value = val;
|
||||
ExecuteOnChange();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1 +1 @@
|
||||
tBchannelMapr?generalp'FmBuildLocation@iosBuildDmProductNameD添添办公CisThirdExitJmBundleVersionCode
|
||||
tBchannelMapr?generalp'FmBuildLocation@iosBuildDmProductNameD添添办公CisThirdExitJmBundleVersionCode
|
||||
File diff suppressed because it is too large
Load Diff
Binary file not shown.
@@ -138,7 +138,7 @@ trCRM/upgradeRes4Publish/priority/lua/bio/BioUtl.lua,f64afdd9ccdf943f5d4ba2fc3c3
|
||||
trCRM/upgradeRes4Publish/priority/lua/cfg/DBCfg.lua,3d0e60dbcdaa61b8553eee17f4d68b32
|
||||
trCRM/upgradeRes4Publish/priority/lua/cfg/DBCfgTool.lua,a6760e05dcc5f91202e3659179a464e7
|
||||
trCRM/upgradeRes4Publish/priority/lua/city/CLLCity.lua,b7ee9fffacb28d09ab08728a49dedc8e
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBCust.lua,f5d617f7342053a0236bb93b9d1a1e46
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBCust.lua,731d340cf928509a7459dfea0d34f3a5
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBMessage.lua,a80d8448cfdaebb072b3d7ec5f40bb60
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBOrder.lua,076cfb6761ed5c0568690aa273d8ee37
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBRoot.lua,c89d42f4c6ebe72da436e07ee70f69ad
|
||||
@@ -149,9 +149,9 @@ trCRM/upgradeRes4Publish/priority/lua/json/rpc.lua,28c2f09ceb729d01052d8408eed0b
|
||||
trCRM/upgradeRes4Publish/priority/lua/json/rpcserver.lua,48b8f5e53a1141652c38f8a5a8a77928
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/CLLNet.lua,947abdf2c019f44a26211acf6f31e2dd
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/CLLNetSerialize.lua,30c24f11d46d7b887bf32177acb92c81
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/NetProto.lua,434601ac6cfd2ce441a0009f109f0757
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/NetProto.lua,45fa84a08829940b752de51f3e244d2e
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/NetProtoUsermgrClient.lua,f65df462666ca9fca7f16c2954984527
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLInclude.lua,476b749169d54c4b08e8749743983d92
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLInclude.lua,acd2930ce707586398f07b9586363436
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLIncludeBase.lua,87bcfc58c6d99be6fe89102d7323c95e
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLPool.lua,3e6a97eb07cfdff7c399eb3e956ba77c
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLPrefs.lua,1719d57c97fe0d8f2c9d1596cb6e2ac8
|
||||
@@ -163,7 +163,7 @@ trCRM/upgradeRes4Publish/priority/lua/toolkit/CLLPrintEx.lua,86d891ec4d8bfa55337
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/CLLUpdateUpgrader.lua,bfff3548aa7cd983c3de46e5defae423
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/CLLVerManager.lua,39b154e796d60c2c40ebcc427a5c05e8
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/KKLogListener.lua,85784ec79aefde29be3ef308e7b5203b
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/LuaUtl.lua,96b4f88eea21e061eff2e3f76fbb623b
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/LuaUtl.lua,cde8ec272382f95abe0320714201b387
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/MyUtl.lua,0fc6aaf236b8ee14c9660ddb68f63b1d
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/curve-families.png,d0b6b9b8a623a188aeae2fb688a8a0e5
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/curve.lua,f97735ed6c39accb55cdae44b62b5b38
|
||||
@@ -184,8 +184,9 @@ trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustList.lua,121935e641c34f4
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustProc.lua,3f9f33de3630a03463952058ba795128
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustStar.lua,ed39330cf68d1e1e062bc8311d1e8d44
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellExtendField.lua,1b18f9bdb869156c26bc4f1131a2dd6c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellExtendFieldRoot.lua,39703716cb222091e69ae0eefbf54f5f
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellExtendFieldRoot.lua,e2a1a87681380484a6e5ba27f2ca5c03
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellGuidPage.lua,7b3c3f567c3e0d92065913101b08ddd0
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellImage.lua,22bbf5d8704540ab66e713b768dd6ef2
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellMessageGroup.lua,14a960604f49e2b34e0c115561bb45a3
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellPopCheckbox.lua,25adbf58789186d43c15cfe65d2e8501
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellProductList.lua,b2827429c70df8b7aa8e87451a96bf67
|
||||
@@ -204,19 +205,19 @@ trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPLoginCoolape.lua,5873be60edc8
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPPopList.lua,896c4b35a6cd0d4f86ed5c0ba532ea00
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPSceneManager.lua,b1b848791df37e59bdf7d5acf9cb9273
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPSplash.lua,8ce0b645f948233e6328b20a07a5999c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPStart.lua,4bf6daac6cc6e35679ca2bad64b0c18e
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPStart.lua,756c08832a0f69ec66e386da4fd35ca7
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPWWWProgress.lua,b713ddf9f0af8602ec48f71162181d6d
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPWebView.lua,093deec807e28be04df4d593bcff9e38
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPMain.lua,24f616b9384dc0eefa9955fabb1d05f1
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPMine.lua,8ef3b142a4375bdb311d15f962a3a9f2
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPMsg.lua,f72d285313cb63ff775722473af9a5f9
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPTasks.lua,1cd7b0d9c92e9fce1eb3b99195fea068
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPTasks.lua,ad3d36656af6d646814046ff9059ab72
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRBasePanel.lua,dc088058987b435c998a9709297a88e6
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPConfirm2.lua,bd0ea9f50708dedd598b517c1dfc739f
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPConnect.lua,e6c7e0aafd60eb1de8bf0ab7758bac11
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCusFilter.lua,f0452e3d6cfa59244dc7b9dd8f5a475d
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustDetail.lua,3fc6451c6f494803506287fc7a51e755
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustFilter.lua,0725109e55276b5158f6ce642d28dfa6
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustFilter.lua,450e7e75ebfe83bb65d59beb3ce60782
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustList.lua,473a578d9811d494d8cf58c7fc6a45b9
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustListProc.lua,1973dc8d949ed85e01b09aff328d1033
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPEditPrice.lua,ceb906ae12222324b9a61f4b83ec7e58
|
||||
@@ -225,8 +226,8 @@ trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPLogin.lua,e18549cd43b8e476b5c2
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPModifyFiled.lua,99b250c386ce8dad9c10c8f4fe9874f1
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPMoreProc4Cust.lua,cc11fe3b2530891e91e2c649762d06f8
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewCust.lua,48fffb94cf7ab94e6c0b2e542bf2d08e
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewFollow.lua,ef981e78f783343271b8c655f358084c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewOrder.lua,cc63f363eb32dda89ab4e4b4956c0014
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewFollow.lua,336ea3b9be70d8d1fff12f59c101193a
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewOrder.lua,fd9e0f654d9fc598d78f14299505fe7d
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPPlaySoundRecord.lua,ded1f35f04bd0d84bfa8fd74ddf926aa
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPPopCheckBoxs.lua,508171a924c113573b01a396e8217cc2
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPResetPasswordStep1.lua,def4741f89df3925682e53df01bb70cc
|
||||
@@ -240,11 +241,11 @@ trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPSysMsgList.lua,518461e7bf8f3b3
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/AlertRoot.unity3d,c30044a6e7bf14ddb7a87c4f51d1f073
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/Frame1.unity3d,622d3ea7e4f9aa1d11f6492cabffa445
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/Frame2.unity3d,d057ea60bdf5dd821705a9f7e67e5171
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputCheckboxs.unity3d,eecf93435d855908ef5d364f5dcbaffd
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputDate.unity3d,126902c484a19b9f09e7bae17655611a
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputMultText.unity3d,cd2ced3b17c33b4750ddcade27f6b98f
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputPoplist.unity3d,7af548695c754297fbf27cfedeb54a14
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputText.unity3d,d27c231bd910b5d72c90a86efda2a660
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputCheckboxs.unity3d,a929e8a7fd7ba3bc89bdda0686b6d7dd
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputDate.unity3d,2a350eede0835511478be0acab26101c
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputMultText.unity3d,e07d80bb7138625773b65173d2d9680e
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputPoplist.unity3d,e40080e427014e2c3897f4a85414b1a8
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputText.unity3d,c013e2e5d6cf85b427db0330d5765b87
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/reportform1.unity3d,5d061e9c5511ae3b978dbfe2be87f35e
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/reportform2.unity3d,de5097255fc8126d368e9693106347dc
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/reportform3.unity3d,f0a5622c709a4d4ec6ac76c0c1e8abb5
|
||||
@@ -260,7 +261,7 @@ trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustListProc.unity3d,b2d
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelEditPrice.unity3d,baa0e7f3e00e62b0d5cb5263d7583000
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelGuid.unity3d,d58c2f53bba85cb8e969e744ff706f3a
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelHotWheel.unity3d,7a3ae06303e65f59f15af5b906b7a471
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelLogin.unity3d,01e2d641bf61652b730108d269a56d6b
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelLogin.unity3d,5cac11a5557933d49c37a554c76a730f
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelLoginCoolape.unity3d,efb09b206c444d66d10720371645049b
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMain.unity3d,a56567b78909e1992695a97cb19d3e1c
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMask4Panel.unity3d,ed5e0d7cc2ba83e33435bddc760b5f9d
|
||||
@@ -270,7 +271,7 @@ trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMoreProc4Cust.unity3d,0a
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMsg.unity3d,e0d5c4eb46bc7c1734c79206bd0962e0
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewCust.unity3d,e1b7e9cecfa7c0104e475a8d84cc28db
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewFollow.unity3d,3ee9577410d709f08bf37e7c9a2b19a1
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewOrder.unity3d,c4a2f36dec38a689f49f356f05a62d88
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewOrder.unity3d,a36eb5726ffa300ee44ffe16b48312dd
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPlaySoundRecord.unity3d,14e1a1da65735a1ac9a4256be49a4e40
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPopCheckBoxs.unity3d,ac475eab72569cc86cc098951c114716
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPopList.unity3d,a0ba753b0deecff9a85c8cd2b60013dd
|
||||
@@ -285,8 +286,8 @@ trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSplash.unity3d,2691ddc66
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelStart.unity3d,50cfab21f360ee339c94b1111be09fef
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSysMsgDetail.unity3d,91e06baebc3ec7e9b2a5c108ced50b52
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSysMsgList.unity3d,b48b08a37217bb43ef7a94566f79fec0
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelTasks.unity3d,82aaf6542a4ad8546a55f66997d61f66
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelTasks.unity3d,003d70126d4efbaf73eb9bc83e4ba142
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelWWWProgress.unity3d,d9cbe9d08670eedbee77ba97330f4118
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelWebView.unity3d,e5372cdacc520ff8ba318ce09b681772
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/ToastRoot.unity3d,28e85a4963ed89f85f2451670a154f04
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/ToastRoot.unity3d,412c3557a187689acaa1d79d7d555836
|
||||
trCRM/upgradeRes4Publish/priority/www/baidumap.html,d210e48796dd96343f9c17bc1d230136
|
||||
|
||||
@@ -1,295 +1,312 @@
|
||||
trCRM/upgradeRes/other/uiAtlas/logo/Android/logo.unity3d,849e7b3d08491890c6e021896c8ec39c
|
||||
trCRM/upgradeRes/priority/lua/json/rpcserver.lua,48b8f5e53a1141652c38f8a5a8a77928
|
||||
trCRM/upgradeRes/priority/lua/public/CLLPool.lua,3e6a97eb07cfdff7c399eb3e956ba77c
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_check.unity3d,19ab7fd3e0e61658db44cb333c6fad0e
|
||||
trCRM/upgradeRes/priority/lua/public/CLLQueue.lua,065303c980678b25b11854bfec1690f3
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/button.unity3d,efe93bdf676ef2d5195d52abe42ab833
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLFrame2.lua,e25ce84ca55cd643d527d09cedd6228a
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/order.unity3d,0b796b27d351f49010fb3c3921f1a843
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellMessageGroup.lua,14a960604f49e2b34e0c115561bb45a3
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/_empty.unity3d,69ddb5d00f576f414974eaff196cb6cc
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/add.unity3d,ceb10233c0fc59270d66e1cb5c93bb49
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSetting.unity3d,e28ed051439e06abe8ffc14ebf9cf1d2
|
||||
trCRM/upgradeRes/priority/lua/db/DBCust.lua,f5d617f7342053a0236bb93b9d1a1e46
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/radio_full.unity3d,299e73e63c854e9d88dc63f1c19a45f9
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/cus_tel.unity3d,692b010c775fb99d05d342f5ad0272fa
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPSceneManager.lua,b1b848791df37e59bdf7d5acf9cb9273
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_wait.unity3d,4171ead446231d4429305811f6e91fbc
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/input.unity3d,44e1403bbf15c7313dff8cad78d39287
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelWWWProgress.unity3d,d9cbe9d08670eedbee77ba97330f4118
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPStart.lua,4bf6daac6cc6e35679ca2bad64b0c18e
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/get.unity3d,04bf77dfe50c327c85966f9fdd1350c6
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputMultText.unity3d,cd2ced3b17c33b4750ddcade27f6b98f
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPGuid.lua,ee29c8c2537cd4c445afe1397450cdae
|
||||
trCRM/upgradeRes/priority/lua/toolkit/CLLVerManager.lua,39b154e796d60c2c40ebcc427a5c05e8
|
||||
trCRM/upgradeRes/priority/lua/CLLMainLua.lua,c0cae0cd02eba21111cf005f6c608901
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMsg.unity3d,e0d5c4eb46bc7c1734c79206bd0962e0
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/play.unity3d,ae412dff53c914bcfcd0ca92255bb33e
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_order.unity3d,26bc3076031940af6069ef5a9143fb5a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRBasePanel.lua,dc088058987b435c998a9709297a88e6
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/right.unity3d,b991891eb2939a880c223d677605faf4
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPWebView.lua,093deec807e28be04df4d593bcff9e38
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellReportform3.lua,f83300f176e1c35d62e00e69539998f3
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSelectCompany.lua,28ca57d169af022ec621dece879bdcfc
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_bg_noshadow.unity3d,4aee082b48104519ba82bad6aac83cf3
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_4.unity3d,67187ab01b7b863b2a7f37b430212a3d
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_password2.unity3d,5dc8eaeca2eeedb771451233e5d8bf98
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelWebView.unity3d,e5372cdacc520ff8ba318ce09b681772
|
||||
trCRM/upgradeRes/priority/lua/cfg/DBCfgTool.lua,a6760e05dcc5f91202e3659179a464e7
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/system.unity3d,570fa72b2d385d604cc7c9f7516965da
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/suc.unity3d,0ec570e88b0dfc2b82a4f8e5bb84edc0
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelPlaySoundRecord.unity3d,14e1a1da65735a1ac9a4256be49a4e40
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellRecord.lua,ca94ed9775ca9f03569e49d4ad1f3e14
|
||||
trCRM/upgradeRes/priority/lua/db/DBRoot.lua,c89d42f4c6ebe72da436e07ee70f69ad
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMoreProc4Cust.unity3d,0a1669987fdd4ce81f5b7cba8ce77876
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/pause.unity3d,f67cbbc84b61bc281f486e4e18fb177f
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_set.unity3d,c53cddeef8f62d67a2a4110447466536
|
||||
trCRM/upgradeRes/priority/lua/json/json.lua,a2914572290611d3da35f4a7eec92022
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/full_star.unity3d,6f6aa242a0a793b6eea6edc8c8de437d
|
||||
trCRM/upgradeRes/other/uiAtlas/hotwheel/Android/loading.unity3d,2f74f17f1282c12ab63108377b4798e0
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPBackplate.lua,ae946f1cec5baad680f4e8a0f7e71223
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/check.unity3d,aa21836aaae62d8f719a930aefe37ea7
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSelectProduct.lua,59750609585193c66d08adfa8544d946
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCompany.lua,b145bc086a8b1657a314622614dcb70a
|
||||
trCRM/upgradeRes/priority/lua/toolkit/CLLPrintEx.lua,86d891ec4d8bfa5533704c142fc97235
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPConfirm.lua,e652190d378dc120a0805230692f0fc9
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMine.unity3d,1ec2853e1a8660c4cadcace8f333f5af
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_color.unity3d,043e8a3cdee29da6e5c909432f25d6f8
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/close.unity3d,1b49cc4db64de50d13ee029447a3d49d
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCalender.unity3d,acf45d3619beb2deb72cce95732c68c4
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_me.unity3d,b6060c4f6b1cf669b21b5d4f8b23efbe
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/radio.unity3d,4f2c80de666b97ea02084f059d2a5ed0
|
||||
trCRM/upgradeRes/priority/lua/bio/BioType.lua,4667e9def8191cbf2b9dc25e928bc23f
|
||||
trCRM/upgradeRes/other/uiAtlas/hotwheel/Android/hotWheel_prog.unity3d,0c507387d1167154fe67f1719c3531bd
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/task.unity3d,737ce6fdd55d7642f690531d9410ff6a
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_news.unity3d,3a1afa79dbc710c3ddd6f65cf62f4a19
|
||||
trCRM/upgradeRes/priority/lua/public/CLLIncludeBase.lua,87bcfc58c6d99be6fe89102d7323c95e
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelResetPasswordStep1.unity3d,150f48b7b68e00e8b3e513ec2b75333a
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustStar.lua,ed39330cf68d1e1e062bc8311d1e8d44
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellExtendFieldRoot.lua,39703716cb222091e69ae0eefbf54f5f
|
||||
trCRM/upgradeRes/other/uiAtlas/hotwheel/Android/hotWheel_bg.unity3d,b5d2bc7180f9d280014726814ec8b9fe
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPMine.lua,8ef3b142a4375bdb311d15f962a3a9f2
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_5.unity3d,7edfb781be444c18d010e53386334015
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSysMsgDetail.unity3d,91e06baebc3ec7e9b2a5c108ced50b52
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_me2.unity3d,6efa661cb74e62dfdc75bdbeaeeceb39
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelResetPasswordStep3.unity3d,2f18b6d6198b1678ba10a72dcdd1fbaa
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSysMsgDetail.lua,6266494c653deda1b5a391cc7f38a06a
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_3.unity3d,5f130cc66d813a2b339757e8a31cee8c
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPPopList.lua,896c4b35a6cd0d4f86ed5c0ba532ea00
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellPopCheckbox.lua,25adbf58789186d43c15cfe65d2e8501
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/border.unity3d,bf2cd1f2bdb27efc9c2e27943dcb8974
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_about.unity3d,3da9c9416127c69bc20c281f44520f6e
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_peo.unity3d,9c9562e576e93bacb7f2a0d0f08523ee
|
||||
trCRM/upgradeRes/priority/lua/toolkit/MyUtl.lua,0fc6aaf236b8ee14c9660ddb68f63b1d
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/input.unity3d,b3ad3f57c51c02ff798a50a37d6c9cab
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/choose.unity3d,e31379a28ab86046414db1fb23cd2bf6
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_time.unity3d,16ca1ec9a44b8633ca032c3c8cdf1a9b
|
||||
trCRM/upgradeRes/priority/lua/toolkit/CLLUpdateUpgrader.lua,bfff3548aa7cd983c3de46e5defae423
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustFilter.lua,2fb22f9248e4af86ab42482151a5b141
|
||||
trCRM/upgradeRes/priority/ui/other/Android/reportform2.unity3d,de5097255fc8126d368e9693106347dc
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewCust.lua,48fffb94cf7ab94e6c0b2e542bf2d08e
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewFollow.unity3d,3ee9577410d709f08bf37e7c9a2b19a1
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/record.unity3d,afd45ba065ba86f138b8c92b9794c722
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPConnect.lua,e6c7e0aafd60eb1de8bf0ab7758bac11
|
||||
trCRM/upgradeRes/priority/ui/other/Android/Frame1.unity3d,622d3ea7e4f9aa1d11f6492cabffa445
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_fingerprint.unity3d,de777211a380a09ea82e1092a9fba414
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustProc.lua,3f9f33de3630a03463952058ba795128
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CSCellBottomBtn.lua,afbf445995d42e012635f3d355ce6d9e
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_4.unity3d,8c7beff66dc0cfe9f44082bdacc8007c
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellSysMessageList.lua,1ce46f4b3a1a8b728e447c12e7df1831
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_invisible.unity3d,e1a5814af01e17e83e9939c9f1839524
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/del.unity3d,453d38d3af66e108db0d2bb827426bd7
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/funnel.unity3d,cb6f2a2b14c53ed86c122a4da2c3984b
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_people.unity3d,7ff36c94c74e4a8e09e1896978c13381
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/remove.unity3d,b460d3a275be876e0cfa0ca96777260f
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustDetail.lua,3fc6451c6f494803506287fc7a51e755
|
||||
trCRM/upgradeRes/priority/lua/bio/BioOutputStream.lua,84fd65eb0d1a166e77447f61254d62b5
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/play2.unity3d,0b6ede536ea7b5084a1de22265b04840
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPResetPasswordStep2.lua,af8af3fde5f3526b36c48517a5da89d0
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_bg_shadow.unity3d,10087f2ab389bdfd71cfce8a6c466038
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSplash.unity3d,2691ddc66dff5da22fda3ffe11c897dd
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputCheckboxs.unity3d,eecf93435d855908ef5d364f5dcbaffd
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustList.lua,121935e641c34f4e3f9293381d7ff359
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelLogin.unity3d,5cac11a5557933d49c37a554c76a730f
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/msg.unity3d,7f98a936769044c856c6082beb3559e3
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelBackplate.unity3d,861c2420c86f0da27dd58a6f73dfb942
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_notice.unity3d,8ccab8900911e68fc8e0b46f6c1e0372
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMask4Panel.unity3d,ed5e0d7cc2ba83e33435bddc760b5f9d
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/check.unity3d,d11f6d5b126c6a0fbf34ced5734cb66f
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/ToastRoot.unity3d,28e85a4963ed89f85f2451670a154f04
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_ranking.unity3d,9a0b0f94d60e9ff144193c83915b21fa
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_work.unity3d,8a889dc1fe3b56bff4435f441ce5580e
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPMain.lua,24f616b9384dc0eefa9955fabb1d05f1
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustListProc.unity3d,b2dd2f01b5ffbfc4db73c670c2eb4646
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_2.unity3d,3bcd13c7b2003a1bcf92aaa4d2dbf6fe
|
||||
trCRM/upgradeRes/priority/lua/net/NetProtoUsermgrClient.lua,f65df462666ca9fca7f16c2954984527
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/search.unity3d,7420a0a7cc725ff494761009ebe811d7
|
||||
trCRM/upgradeRes/priority/lua/db/DBUser.lua,f5151070816fc7da19ae939c9533bbf9
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_head_bg.unity3d,20f535a454df3fff37230bbcc3bc8244
|
||||
trCRM/upgradeRes/other/uiAtlas/icon/Android/company_1.unity3d,8ba9f20b736fb17e2f6ee414df072492
|
||||
trCRM/upgradeRes/priority/lua/db/DBOrder.lua,076cfb6761ed5c0568690aa273d8ee37
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_3.unity3d,651d81480c5ea1ff8aa4ccdf7e0a6058
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelPopCheckBoxs.unity3d,ac475eab72569cc86cc098951c114716
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellGuidPage.lua,7b3c3f567c3e0d92065913101b08ddd0
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelHotWheel.unity3d,7a3ae06303e65f59f15af5b906b7a471
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelServers.unity3d,1613390ef03ce766ec3680f99949122b
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellReportform2.lua,47ac1164b1ffb27397953ccb032fd2d7
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/company_bg.unity3d,2153c725242937cf5fce727da9626dad
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_unread.unity3d,f1b29d8592cdd49f3a526be6b524ad9f
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellReportform1.lua,d31b42aa50089defb22bde59b5c0474d
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewOrder.lua,cc63f363eb32dda89ab4e4b4956c0014
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelModifyFiled.unity3d,331f7d063411e0c231eaeccee4df73d1
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_1.unity3d,51120d82352e936df826b05696b89b19
|
||||
trCRM/upgradeRes/priority/ui/other/Android/Frame2.unity3d,d057ea60bdf5dd821705a9f7e67e5171
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_enterprise.unity3d,59d7dae785dea4fa88b52f40a8d167cf
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPResetPasswordStep1.lua,def4741f89df3925682e53df01bb70cc
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/cus_task.unity3d,a4f148630912414f1d5e94d5a6a02e2d
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelConfirm.unity3d,4526242a599f63c0bac766360a515e23
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPPopCheckBoxs.lua,508171a924c113573b01a396e8217cc2
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelResetPasswordStep2.unity3d,c3e2e353bd7e604e384a3e9e35d37893
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_data.unity3d,70dd24370cd051acb45bab65464459ee
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSetting.lua,45f706ba538ab2b39364826b8fc7e214
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/follow.unity3d,fffb80792073e4f2849c743d061d685a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPConfirm2.lua,bd0ea9f50708dedd598b517c1dfc739f
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPMsg.lua,f72d285313cb63ff775722473af9a5f9
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputToggles.unity3d,847a6d2cbf79b767094155404ef708b1
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/check_full.unity3d,282038ef4b24e802b0c936877871200c
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLCellServer.lua,1e9de9f0b4bbc703296808c1ba179c29
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_check.unity3d,d9092d78af855e769abff1223f650a9d
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/icon_bg.unity3d,60926842e889a8a621443f4f646aa9e2
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustList.lua,473a578d9811d494d8cf58c7fc6a45b9
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_bg.unity3d,a7398f0f48b3b469e31bea6dac45457e
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLUICalenderDay.lua,6e7400e2dd535ced93960c1e18fa2458
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_bg.unity3d,b13e253b3a1689bf665ea7c3edecc519
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellExtendField.lua,1b18f9bdb869156c26bc4f1131a2dd6c
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_bg.unity3d,3b42ecd8d30203eb5dcc65cb3a0ad815
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustFilter.unity3d,90d589021f3db8641b14920daf93f1dc
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_4.unity3d,d1cf8069716943cc112a2946b22efddd
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_2.unity3d,3ce2779b6bfbaef177e0446661ec2f82
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputDate.unity3d,126902c484a19b9f09e7bae17655611a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPPlaySoundRecord.lua,ded1f35f04bd0d84bfa8fd74ddf926aa
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelPopList.unity3d,a0ba753b0deecff9a85c8cd2b60013dd
|
||||
trCRM/upgradeRes/priority/lua/public/CLLPrefs.lua,1719d57c97fe0d8f2c9d1596cb6e2ac8
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellProductSelected.lua,e7f4b1e06a54d5fa52cf9a4ed00f5233
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSysMsgList.unity3d,b48b08a37217bb43ef7a94566f79fec0
|
||||
trCRM/upgradeRes/other/uiAtlas/guid/Android/2.unity3d,6b83b2d5a2dfc1f08744077e669c3ed0
|
||||
trCRM/upgradeRes/priority/lua/net/CLLNetSerialize.lua,30c24f11d46d7b887bf32177acb92c81
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/screen.unity3d,b488e337b72f2cd07dadd1e08640243d
|
||||
trCRM/upgradeRes/priority/lua/db/DBStatistics.lua,e64ad532dabb2cb70c4053e223770969
|
||||
trCRM/upgradeRes/priority/lua/toolkit/BitUtl.lua,82e46240625342d5afe8ea68a609c9cb
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputToggle.unity3d,4b8616c8acc8691a4b8510fdc103ec75
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelConnect.unity3d,f80a29df002dc606e21fd69fbea40021
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMain.unity3d,a56567b78909e1992695a97cb19d3e1c
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPModifyFiled.lua,99b250c386ce8dad9c10c8f4fe9874f1
|
||||
trCRM/upgradeRes/priority/lua/public/class.lua,cc0f201cc55c59f8bc8f623853382b9c
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellProductList.lua,b2827429c70df8b7aa8e87451a96bf67
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewOrder.unity3d,c4a2f36dec38a689f49f356f05a62d88
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_visible.unity3d,884f69f0dd0c2a58af5ad891f23e985e
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/name.unity3d,f5b44185a57a97ce6971f20a4054d990
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/shut.unity3d,7a13d4859459f052143028b0656aef43
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputPoplist.unity3d,7af548695c754297fbf27cfedeb54a14
|
||||
trCRM/upgradeRes/other/uiAtlas/logo/Android/logo2.unity3d,1bddae3d3fe67d91fc6b5c6f9dbb0bea
|
||||
trCRM/upgradeRes/priority/lua/cfg/DBCfg.lua,3d0e60dbcdaa61b8553eee17f4d68b32
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/limt.unity3d,d48f498211748b192a7b10a932aec8be
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/write.unity3d,cbf2cca163ccc6839cf9154547edd6f8
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/important.unity3d,17f0d1ab4133e3a6542404d8e5fb0b7d
|
||||
trCRM/upgradeRes/other/uiAtlas/guid/Android/3.unity3d,6fafc74e9a154b5b3c19accabd3e11b0
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCusFilter.lua,f0452e3d6cfa59244dc7b9dd8f5a475d
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLToastRoot.lua,5809bbdd4b059a64e8129c55b146b514
|
||||
trCRM/upgradeRes/priority/ui/other/Android/reportform3.unity3d,f0a5622c709a4d4ec6ac76c0c1e8abb5
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPLoginCoolape.lua,5873be60edc8f1407dc9fb53ec567ebf
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPEditPrice.lua,ceb906ae12222324b9a61f4b83ec7e58
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_password.unity3d,6a41f099b79cda5941cf720c1452b5a5
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/add.unity3d,bf6728a3e41783ee7d63c130107a16e1
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSysMsgList.lua,518461e7bf8f3b3420fa9377a23db86a
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/upload.unity3d,a7cb722ecba5f405105f0cfda4695e74
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_news2.unity3d,a35e85b68569bf1adc16bdee3a609fdd
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSelectProduct.unity3d,d54579853bc1e958ced6fa6e3d928d2b
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustFilter.lua,0725109e55276b5158f6ce642d28dfa6
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustFilterGroup.lua,93cdb67f51a62110b38e133b065f8f85
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPWWWProgress.lua,b713ddf9f0af8602ec48f71162181d6d
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelEditPrice.unity3d,baa0e7f3e00e62b0d5cb5263d7583000
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_work2.unity3d,eca0bd19a59ce72be19d7cdcbf9c5dac
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelTasks.unity3d,003d70126d4efbaf73eb9bc83e4ba142
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/phone.unity3d,36e34519b910a11de3531994f607a140
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelConfirm2.unity3d,d199779b559cef259ebbfe686ba42703
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/peo.unity3d,939edcb747217aa4b0deb1d9a34f16b8
|
||||
trCRM/upgradeRes/priority/ui/other/Android/AlertRoot.unity3d,c30044a6e7bf14ddb7a87c4f51d1f073
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustList.unity3d,95f9affe3cc17545ceca81ac7124c322
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/more.unity3d,f05eafb34336f1fcb5d614ad30217011
|
||||
trCRM/upgradeRes/priority/lua/db/DBMessage.lua,a80d8448cfdaebb072b3d7ec5f40bb60
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/on_off_bg.unity3d,96fcd3ce2ee9ffa2941973cefea6511d
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPSplash.lua,8ce0b645f948233e6328b20a07a5999c
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/ipt_bg.unity3d,89541a2aaed40069c1f0ce363c5a8e2a
|
||||
trCRM/upgradeRes/other/uiAtlas/guid/Android/1.unity3d,7654268e7c4bc7cea47f584d306f503d
|
||||
trCRM/upgradeRes/priority/lua/toolkit/KKLogListener.lua,85784ec79aefde29be3ef308e7b5203b
|
||||
trCRM/upgradeRes/priority/lua/bio/BioUtl.lua,f64afdd9ccdf943f5d4ba2fc3c3241ef
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLUICellPoplist.lua,18d47301d459fd66ed63b902546e8619
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_1.unity3d,aca2dfb1fbece45c7333447195bc7efe
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewFollow.lua,ef981e78f783343271b8c655f358084c
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_password.unity3d,04bebaa914245dd4d2376f9ded0ad15f
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPLogin.lua,f2ba83d01af3371bee83945f470facd5
|
||||
trCRM/upgradeRes/priority/lua/net/CLLNet.lua,947abdf2c019f44a26211acf6f31e2dd
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPHotWheel.lua,1760aa9933da4b421f1c6093d802cb4f
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelLoginCoolape.unity3d,efb09b206c444d66d10720371645049b
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_1.unity3d,41ae133fd4da0f2bf01316f91cf67fb8
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelStart.unity3d,50cfab21f360ee339c94b1111be09fef
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/log_bg.unity3d,fd1470749300ec31bcbe7f59686152d7
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_remind.unity3d,99a50a17b34f464693ac84d1c6f38966
|
||||
trCRM/upgradeRes/priority/www/baidumap.html,d210e48796dd96343f9c17bc1d230136
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSelectCompany.unity3d,2aa019a477ea5b160780ded080dc82ec
|
||||
trCRM/upgradeRes/priority/lua/toolkit/LuaUtl.lua,96b4f88eea21e061eff2e3f76fbb623b
|
||||
trCRM/upgradeRes/priority/lua/city/CLLCity.lua,b7ee9fffacb28d09ab08728a49dedc8e
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_bg_num2.unity3d,bfdbfc9e1fd1f91de555c0801d278d25
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLCellWWWProgress.lua,ec0258e77f76c8b681d0f02e7a5ff342
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPCalender.lua,232cf2b7f74f088e8b44c4c47cda5e95
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputText.unity3d,d27c231bd910b5d72c90a86efda2a660
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustListProc.lua,1973dc8d949ed85e01b09aff328d1033
|
||||
trCRM/upgradeRes/other/uiAtlas/icon/Android/icon_26_no.unity3d,c16242cb394b0720d1c2e1e0289c1c4a
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/position.unity3d,e60132eb1d8cfbc71046611111fd3099
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/time.unity3d,38bf54e9fbf1c1d8af2cead294d1b61e
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/bg.unity3d,37a58d5a79d3691b2c32a74422721ee7
|
||||
trCRM/upgradeRes/priority/lua/public/CLLInclude.lua,476b749169d54c4b08e8749743983d92
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/380bg.unity3d,0634e3823e2492d32424733dd05779af
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLUICalenderMonth.lua,16af9ed096ad6b902a156f6e0a20021f
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_3.unity3d,2834e3cc399b70e7621065ad4ddaedf6
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/oean.unity3d,3cea16f73014b0b19797a3213467af0a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPTasks.lua,ad3d36656af6d646814046ff9059ab72
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPLogin.lua,e18549cd43b8e476b5c2d1414594c592
|
||||
trCRM/upgradeRes/priority/lua/public/CLLStack.lua,579069654d88a15e43c818a6b8079b15
|
||||
trCRM/upgradeRes/priority/atlas/Android/atlasAllReal.unity3d,6b50b4e4afbdc66704ed49d4b15135f9
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewCust.unity3d,e1b7e9cecfa7c0104e475a8d84cc28db
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/button2.unity3d,1a48080b1d43367921fc09b430fffaf5
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPResetPasswordStep3.lua,0d3be662e0a236b709d8f1f9d6b3321e
|
||||
trCRM/upgradeRes/priority/lua/net/NetProto.lua,434601ac6cfd2ce441a0009f109f0757
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_set2.unity3d,e528f24899ef583c113ca69bbb510ebd
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_opinion.unity3d,1935579d226c7400323115d8be90421d
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/user.unity3d,dc5411391ea0beae4ecc9a4541f1cb21
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLFrame1.lua,1fd4e80adb13bd0d3cb0d7449922667b
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustDetail.unity3d,7049ee32087377d48468ccee634e67c7
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelGuid.unity3d,d58c2f53bba85cb8e969e744ff706f3a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPMoreProc4Cust.lua,cc11fe3b2530891e91e2c649762d06f8
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_bg_num1.unity3d,2ed88c277f983b8d1a3dedf73d735239
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSceneManager.unity3d,c83769673e1c0793d88547c05d20a82e
|
||||
trCRM/upgradeRes/priority/localization/Chinese.txt,08ac586b625d0a126a610344a1846e8f
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_sms.unity3d,8677ba455b4c85e5f1230986ff1032cf
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/star.unity3d,f9684ea4b4e3a4206fc898bc6e4651ab
|
||||
trCRM/upgradeRes/priority/lua/toolkit/curve.lua,f97735ed6c39accb55cdae44b62b5b38
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_customer.unity3d,5676922ef1749c311285d1a207b8397b
|
||||
trCRM/upgradeRes/priority/lua/bio/BioInputStream.lua,b3f94b1017db307427c6e39a8ee4d60e
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/ipt.unity3d,68e98b41456c62324871a1c86caefafc
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_bg_20.unity3d,8e81d4a650273e24b7f129d1f814f5fa
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_no.unity3d,2ee604556b4fff6186f2bad067ed8695
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/cus_followup.unity3d,a722ae8374cf3aa0fd87fc6d74ddabfd
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/kuang.unity3d,a6ce8e74b0631e79ce2e03f2fed3baea
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_2.unity3d,802f5fec3b39fb208b1bd8a400801081
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_remind.unity3d,04a96d237c5e80ab044a54e7c063e368
|
||||
trCRM/upgradeRes/priority/ui/other/Android/reportform1.unity3d,5d061e9c5511ae3b978dbfe2be87f35e
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/button.unity3d,ff51e79201ecbd61247f8db792009aff
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellExtendField.lua,be687e94841bf222fa7b0c6a7a591156
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/on_off.unity3d,69b1b8dfdfc0afecdd9fdd9dbd5fb98a
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/logo.unity3d,c712e48e071a87fb6668333774da19a6
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLCellToast.lua,6e350721fca8167bd621df86ad982326
|
||||
trCRM/upgradeRes/priority/lua/json/rpc.lua,28c2f09ceb729d01052d8408eed0b57a
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_clean_up.unity3d,51e9fd3012fca7d448c3578c281bd15e
|
||||
trCRM/upgradeRes/priority/lua/toolkit/curve-families.png,d0b6b9b8a623a188aeae2fb688a8a0e5
|
||||
trCRM/upgradeRes/other/uiAtlas/icon/Android/icon_26_no.unity3d,c16242cb394b0720d1c2e1e0289c1c4a
|
||||
trCRM/upgradeRes/other/uiAtlas/logo/Android/logo.unity3d,849e7b3d08491890c6e021896c8ec39c
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_2.unity3d,3ce2779b6bfbaef177e0446661ec2f82
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/add.unity3d,bf6728a3e41783ee7d63c130107a16e1
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPMine.lua,2dd00dde001dd24d01df96a841ce2f91
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_5.unity3d,7edfb781be444c18d010e53386334015
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/limt.unity3d,d48f498211748b192a7b10a932aec8be
|
||||
trCRM/upgradeRes/priority/lua/toolkit/BitUtl.lua,82e46240625342d5afe8ea68a609c9cb
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustFilterGroup.lua,93cdb67f51a62110b38e133b065f8f85
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelConfirm.unity3d,cc945b5bffde4fec044e5660d2a5fe82
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/oean.unity3d,3cea16f73014b0b19797a3213467af0a
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellRecord.lua,ca94ed9775ca9f03569e49d4ad1f3e14
|
||||
trCRM/upgradeRes/priority/atlas/Android/atlasAllReal.unity3d,ea072d32d1080c13d24c10eb53dc010e
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputMultText.unity3d,e4554fe97f92473cff5bfd8f1443b8a7
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelResetPasswordStep2.unity3d,c3e2e353bd7e604e384a3e9e35d37893
|
||||
trCRM/upgradeRes/priority/ui/other/Android/EmptySpace.unity3d,b9f173d21c2bc1854fb84e50f11dbed8
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_people.unity3d,7ff36c94c74e4a8e09e1896978c13381
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelOrderList.unity3d,ce405f9722a7c2ab354a4091d49faa62
|
||||
trCRM/upgradeRes/priority/lua/db/DBRoot.lua,2de10366932579d84506e9ca7aff0971
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/choose.unity3d,e31379a28ab86046414db1fb23cd2bf6
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/position.unity3d,e60132eb1d8cfbc71046611111fd3099
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/bg.unity3d,37a58d5a79d3691b2c32a74422721ee7
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMsg.unity3d,e0d5c4eb46bc7c1734c79206bd0962e0
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLToastRoot.lua,5809bbdd4b059a64e8129c55b146b514
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPResetPasswordStep2.lua,af8af3fde5f3526b36c48517a5da89d0
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/close.unity3d,1b49cc4db64de50d13ee029447a3d49d
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPCalender.lua,232cf2b7f74f088e8b44c4c47cda5e95
|
||||
trCRM/upgradeRes/other/uiAtlas/guid/Android/1.unity3d,7654268e7c4bc7cea47f584d306f503d
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_1.unity3d,aca2dfb1fbece45c7333447195bc7efe
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_visible.unity3d,884f69f0dd0c2a58af5ad891f23e985e
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustProc.lua,3f9f33de3630a03463952058ba795128
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelGuid.unity3d,d58c2f53bba85cb8e969e744ff706f3a
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_password2.unity3d,5dc8eaeca2eeedb771451233e5d8bf98
|
||||
trCRM/upgradeRes/priority/lua/net/NetProtoUsermgrClient.lua,f65df462666ca9fca7f16c2954984527
|
||||
trCRM/upgradeRes/priority/lua/toolkit/CLLVerManager.lua,39b154e796d60c2c40ebcc427a5c05e8
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/button.unity3d,efe93bdf676ef2d5195d52abe42ab833
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputToggles.unity3d,847a6d2cbf79b767094155404ef708b1
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/radio_full.unity3d,299e73e63c854e9d88dc63f1c19a45f9
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLCellWWWProgress.lua,ec0258e77f76c8b681d0f02e7a5ff342
|
||||
trCRM/upgradeRes/priority/lua/public/CLLPool.lua,3e6a97eb07cfdff7c399eb3e956ba77c
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/msg.unity3d,7f98a936769044c856c6082beb3559e3
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_bg_20.unity3d,8e81d4a650273e24b7f129d1f814f5fa
|
||||
trCRM/upgradeRes/priority/ui/other/Android/Frame1.unity3d,622d3ea7e4f9aa1d11f6492cabffa445
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_check.unity3d,d9092d78af855e769abff1223f650a9d
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPMyInfor.lua,6f9a3135448a4746c463a41295275c57
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/record.unity3d,afd45ba065ba86f138b8c92b9794c722
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSetting.lua,45f706ba538ab2b39364826b8fc7e214
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_news2.unity3d,a35e85b68569bf1adc16bdee3a609fdd
|
||||
trCRM/upgradeRes/priority/ui/other/Android/AlertRoot.unity3d,c30044a6e7bf14ddb7a87c4f51d1f073
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputDate.unity3d,b9645fe9ff5972788d341acc70b7be30
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPGuid.lua,ee29c8c2537cd4c445afe1397450cdae
|
||||
trCRM/upgradeRes/other/uiAtlas/guid/Android/3.unity3d,6fafc74e9a154b5b3c19accabd3e11b0
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/password.unity3d,ae473953dbd84c6f9a4e736f5101f4a2
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_4.unity3d,67187ab01b7b863b2a7f37b430212a3d
|
||||
trCRM/upgradeRes/priority/lua/bio/BioType.lua,4667e9def8191cbf2b9dc25e928bc23f
|
||||
trCRM/upgradeRes/priority/localization/Chinese.txt,08ac586b625d0a126a610344a1846e8f
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_check.unity3d,19ab7fd3e0e61658db44cb333c6fad0e
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputToggle.unity3d,4b8616c8acc8691a4b8510fdc103ec75
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/important.unity3d,17f0d1ab4133e3a6542404d8e5fb0b7d
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelWebView.unity3d,e5372cdacc520ff8ba318ce09b681772
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPConfirm2.lua,bd0ea9f50708dedd598b517c1dfc739f
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_4.unity3d,d1cf8069716943cc112a2946b22efddd
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/suc.unity3d,0ec570e88b0dfc2b82a4f8e5bb84edc0
|
||||
trCRM/upgradeRes/other/uiAtlas/hotwheel/Android/loading.unity3d,2f74f17f1282c12ab63108377b4798e0
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelLogin.unity3d,5cac11a5557933d49c37a554c76a730f
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/cus_followup.unity3d,a722ae8374cf3aa0fd87fc6d74ddabfd
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewCust.lua,c3f8563afb97d79992a35de8c3ee9ba6
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_invisible.unity3d,e1a5814af01e17e83e9939c9f1839524
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_sms.unity3d,8677ba455b4c85e5f1230986ff1032cf
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPConnect.lua,e6c7e0aafd60eb1de8bf0ab7758bac11
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPStart.lua,756c08832a0f69ec66e386da4fd35ca7
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_bg_shadow.unity3d,10087f2ab389bdfd71cfce8a6c466038
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_bg_noshadow.unity3d,4aee082b48104519ba82bad6aac83cf3
|
||||
trCRM/upgradeRes/other/uiAtlas/icon/Android/company_1.unity3d,8ba9f20b736fb17e2f6ee414df072492
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustDetail.unity3d,b22b74b2ee1d57cccbaa92c6971dd9df
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_notice.unity3d,8ccab8900911e68fc8e0b46f6c1e0372
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_ranking.unity3d,9a0b0f94d60e9ff144193c83915b21fa
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_password.unity3d,04bebaa914245dd4d2376f9ded0ad15f
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_work2.unity3d,eca0bd19a59ce72be19d7cdcbf9c5dac
|
||||
trCRM/upgradeRes/priority/ui/other/Android/reportform2.unity3d,de5097255fc8126d368e9693106347dc
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPSceneManager.lua,b1b848791df37e59bdf7d5acf9cb9273
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/full_star.unity3d,6f6aa242a0a793b6eea6edc8c8de437d
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_time.unity3d,16ca1ec9a44b8633ca032c3c8cdf1a9b
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewFollowSimple.unity3d,d0f73f4324743d77717668fdcda14680
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/ToastRoot.unity3d,412c3557a187689acaa1d79d7d555836
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelResetPasswordStep1.unity3d,150f48b7b68e00e8b3e513ec2b75333a
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLUICalenderMonth.lua,16af9ed096ad6b902a156f6e0a20021f
|
||||
trCRM/upgradeRes/priority/lua/db/DBTextures.lua,fd2b6a27eee4bcec69b1fd1b4bec92ba
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/icon_bg.unity3d,60926842e889a8a621443f4f646aa9e2
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputPoplist.unity3d,99670420a41bf33b055763d28c547a26
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_bg.unity3d,3b42ecd8d30203eb5dcc65cb3a0ad815
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustListProc.lua,1973dc8d949ed85e01b09aff328d1033
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/name.unity3d,f5b44185a57a97ce6971f20a4054d990
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/time.unity3d,38bf54e9fbf1c1d8af2cead294d1b61e
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelLoginCoolape.unity3d,efb09b206c444d66d10720371645049b
|
||||
trCRM/upgradeRes/priority/lua/toolkit/CLLPrintEx.lua,86d891ec4d8bfa5533704c142fc97235
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPResetPasswordStep1.lua,def4741f89df3925682e53df01bb70cc
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/kuang.unity3d,a6ce8e74b0631e79ce2e03f2fed3baea
|
||||
trCRM/upgradeRes/other/uiAtlas/logo/Android/logo2.unity3d,1bddae3d3fe67d91fc6b5c6f9dbb0bea
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_me.unity3d,b6060c4f6b1cf669b21b5d4f8b23efbe
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelPlaySoundRecord.unity3d,14e1a1da65735a1ac9a4256be49a4e40
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/phone.unity3d,36e34519b910a11de3531994f607a140
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/input.unity3d,44e1403bbf15c7313dff8cad78d39287
|
||||
trCRM/upgradeRes/priority/lua/db/DBCust.lua,8a34500a2252a4b7780c5d3aacabb1ee
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMoreProc4Cust.unity3d,0a1669987fdd4ce81f5b7cba8ce77876
|
||||
trCRM/upgradeRes/priority/ui/other/Android/reportform3.unity3d,f0a5622c709a4d4ec6ac76c0c1e8abb5
|
||||
trCRM/upgradeRes/priority/lua/toolkit/LuaUtl.lua,cde8ec272382f95abe0320714201b387
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPLogin.lua,f2ba83d01af3371bee83945f470facd5
|
||||
trCRM/upgradeRes/priority/ui/other/Android/reportform1.unity3d,5d061e9c5511ae3b978dbfe2be87f35e
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellProductList.lua,b2827429c70df8b7aa8e87451a96bf67
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_enterprise.unity3d,59d7dae785dea4fa88b52f40a8d167cf
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/_empty.unity3d,69ddb5d00f576f414974eaff196cb6cc
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_me2.unity3d,6efa661cb74e62dfdc75bdbeaeeceb39
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelStart.unity3d,50cfab21f360ee339c94b1111be09fef
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/write.unity3d,cbf2cca163ccc6839cf9154547edd6f8
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/star.unity3d,f9684ea4b4e3a4206fc898bc6e4651ab
|
||||
trCRM/upgradeRes/priority/lua/toolkit/curve-families.png,d0b6b9b8a623a188aeae2fb688a8a0e5
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/play.unity3d,ae412dff53c914bcfcd0ca92255bb33e
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelWWWProgress.unity3d,d9cbe9d08670eedbee77ba97330f4118
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/ipt.unity3d,68e98b41456c62324871a1c86caefafc
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellReportform3.lua,f83300f176e1c35d62e00e69539998f3
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelPopList.unity3d,a0ba753b0deecff9a85c8cd2b60013dd
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPMain.lua,24f616b9384dc0eefa9955fabb1d05f1
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelConnect.unity3d,f80a29df002dc606e21fd69fbea40021
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellPopCheckbox.lua,25adbf58789186d43c15cfe65d2e8501
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_bg.unity3d,b13e253b3a1689bf665ea7c3edecc519
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustFilter.lua,2fb22f9248e4af86ab42482151a5b141
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/input.unity3d,b3ad3f57c51c02ff798a50a37d6c9cab
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewOrder.unity3d,068f97e365e79ae11418ff16a1cf2f89
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/right.unity3d,b991891eb2939a880c223d677605faf4
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/follow.unity3d,fffb80792073e4f2849c743d061d685a
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_2.unity3d,3bcd13c7b2003a1bcf92aaa4d2dbf6fe
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewFollowSimple.lua,720f3ff97d9b71a9108fd949bf779b30
|
||||
trCRM/upgradeRes/priority/lua/public/CLLQueue.lua,065303c980678b25b11854bfec1690f3
|
||||
trCRM/upgradeRes/priority/ui/other/Android/Frame2.unity3d,d057ea60bdf5dd821705a9f7e67e5171
|
||||
trCRM/upgradeRes/other/uiAtlas/hotwheel/Android/hotWheel_bg.unity3d,b5d2bc7180f9d280014726814ec8b9fe
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellMessageGroup.lua,14a960604f49e2b34e0c115561bb45a3
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelFollowList.unity3d,74006579cdb0ea8b4e120e1b52dd5c55
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_set.unity3d,c53cddeef8f62d67a2a4110447466536
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelPopCheckBoxs.unity3d,d3a8693784b6cc7ff00ee50fc8625f69
|
||||
trCRM/upgradeRes/priority/lua/city/CLLCity.lua,b7ee9fffacb28d09ab08728a49dedc8e
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPFollowList.lua,42de16eb98a338177801da06f8fc5895
|
||||
trCRM/upgradeRes/priority/lua/public/CLLStack.lua,579069654d88a15e43c818a6b8079b15
|
||||
trCRM/upgradeRes/priority/lua/db/DBOrder.lua,076cfb6761ed5c0568690aa273d8ee37
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPMsg.lua,f72d285313cb63ff775722473af9a5f9
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_head_bg.unity3d,20f535a454df3fff37230bbcc3bc8244
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPLogin.lua,e18549cd43b8e476b5c2d1414594c592
|
||||
trCRM/upgradeRes/priority/lua/cfg/DBCfgTool.lua,a6760e05dcc5f91202e3659179a464e7
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputCheckboxs.unity3d,a929e8a7fd7ba3bc89bdda0686b6d7dd
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellGuidPage.lua,7b3c3f567c3e0d92065913101b08ddd0
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewOrder.lua,38a15680b2d8765d9ba614c9a81c641d
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPLoginCoolape.lua,5873be60edc8f1407dc9fb53ec567ebf
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPAbout.lua,ded7b5021b8837a537e426614cc2171e
|
||||
trCRM/upgradeRes/priority/lua/bio/BioOutputStream.lua,84fd65eb0d1a166e77447f61254d62b5
|
||||
trCRM/upgradeRes/priority/lua/db/DBMessage.lua,a80d8448cfdaebb072b3d7ec5f40bb60
|
||||
trCRM/upgradeRes/priority/lua/db/DBStatistics.lua,e64ad532dabb2cb70c4053e223770969
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCusFilter.lua,f0452e3d6cfa59244dc7b9dd8f5a475d
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/company_bg.unity3d,2153c725242937cf5fce727da9626dad
|
||||
trCRM/upgradeRes/priority/lua/public/CLLPrefs.lua,1719d57c97fe0d8f2c9d1596cb6e2ac8
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelModifyFiled.unity3d,331f7d063411e0c231eaeccee4df73d1
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMyInfor.unity3d,94f1b88c66705acd7f798affef48c540
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPResetPasswordStep3.lua,0d3be662e0a236b709d8f1f9d6b3321e
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelConfirm2.unity3d,d199779b559cef259ebbfe686ba42703
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_peo.unity3d,9c9562e576e93bacb7f2a0d0f08523ee
|
||||
trCRM/upgradeRes/priority/lua/bio/BioUtl.lua,f64afdd9ccdf943f5d4ba2fc3c3241ef
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSysMsgDetail.unity3d,91e06baebc3ec7e9b2a5c108ced50b52
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMask4Panel.unity3d,ed5e0d7cc2ba83e33435bddc760b5f9d
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellExtendFieldRoot.lua,c38ffa7d9111dc4bedeaba97a6d5a661
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustList.unity3d,40fb760b32740191d3b4fa3f84de1720
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_remind.unity3d,04a96d237c5e80ab044a54e7c063e368
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSysMsgList.unity3d,b48b08a37217bb43ef7a94566f79fec0
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/remove.unity3d,b460d3a275be876e0cfa0ca96777260f
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMain.unity3d,a56567b78909e1992695a97cb19d3e1c
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/cus_tel.unity3d,692b010c775fb99d05d342f5ad0272fa
|
||||
trCRM/upgradeRes/priority/lua/db/DBUser.lua,f5151070816fc7da19ae939c9533bbf9
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRBasePanel.lua,dc088058987b435c998a9709297a88e6
|
||||
trCRM/upgradeRes/priority/lua/public/class.lua,cc0f201cc55c59f8bc8f623853382b9c
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_bg.unity3d,a7398f0f48b3b469e31bea6dac45457e
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/peo.unity3d,939edcb747217aa4b0deb1d9a34f16b8
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_2.unity3d,802f5fec3b39fb208b1bd8a400801081
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/upload.unity3d,a7cb722ecba5f405105f0cfda4695e74
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/screen.unity3d,b488e337b72f2cd07dadd1e08640243d
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_about.unity3d,3da9c9416127c69bc20c281f44520f6e
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustStar.lua,ed39330cf68d1e1e062bc8311d1e8d44
|
||||
trCRM/upgradeRes/other/uiAtlas/logo/Android/512.unity3d,c51445206c8f94af0fcbbe4befa8ae05
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPSplash.lua,8ce0b645f948233e6328b20a07a5999c
|
||||
trCRM/upgradeRes/priority/www/baidumap.html,d210e48796dd96343f9c17bc1d230136
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPHotWheel.lua,1760aa9933da4b421f1c6093d802cb4f
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustFilter.unity3d,90d589021f3db8641b14920daf93f1dc
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_work.unity3d,8a889dc1fe3b56bff4435f441ce5580e
|
||||
trCRM/upgradeRes/other/uiAtlas/guid/Android/2.unity3d,6b83b2d5a2dfc1f08744077e669c3ed0
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_order.unity3d,26bc3076031940af6069ef5a9143fb5a
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLFrame1.lua,1fd4e80adb13bd0d3cb0d7449922667b
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/task.unity3d,737ce6fdd55d7642f690531d9410ff6a
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_unread.unity3d,f1b29d8592cdd49f3a526be6b524ad9f
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/on_off_bg.unity3d,96fcd3ce2ee9ffa2941973cefea6511d
|
||||
trCRM/upgradeRes/priority/lua/toolkit/MyUtl.lua,44306fc53f8711f95e0698e2613563cf
|
||||
trCRM/upgradeRes/priority/lua/net/CLLNetSerialize.lua,30c24f11d46d7b887bf32177acb92c81
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/button.unity3d,ff51e79201ecbd61247f8db792009aff
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellEmptySpace.lua,42b2a61f171153603c9adda32bf7cb7d
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_3.unity3d,5f130cc66d813a2b339757e8a31cee8c
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSetting.unity3d,e28ed051439e06abe8ffc14ebf9cf1d2
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_remind.unity3d,99a50a17b34f464693ac84d1c6f38966
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewFollow.lua,336ea3b9be70d8d1fff12f59c101193a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSysMsgList.lua,518461e7bf8f3b3420fa9377a23db86a
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_3.unity3d,651d81480c5ea1ff8aa4ccdf7e0a6058
|
||||
trCRM/upgradeRes/priority/lua/bio/BioInputStream.lua,b3f94b1017db307427c6e39a8ee4d60e
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelResetPasswordStep3.unity3d,2f18b6d6198b1678ba10a72dcdd1fbaa
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CSCellBottomBtn.lua,afbf445995d42e012635f3d355ce6d9e
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/user.unity3d,dc5411391ea0beae4ecc9a4541f1cb21
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellReportform1.lua,d31b42aa50089defb22bde59b5c0474d
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_color.unity3d,043e8a3cdee29da6e5c909432f25d6f8
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/order.unity3d,0b796b27d351f49010fb3c3921f1a843
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CSPTasks.lua,778f0d663544d0b2379e87b50ea49031
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLUICellPoplist.lua,18d47301d459fd66ed63b902546e8619
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPNewFollowTask.lua,7fe7010d91b43edf001169feb70ce395
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSceneManager.unity3d,c83769673e1c0793d88547c05d20a82e
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/funnel.unity3d,cb6f2a2b14c53ed86c122a4da2c3984b
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelAbout.unity3d,2c583d1e0c0eabc9e831a40c2be189e8
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_fingerprint.unity3d,de777211a380a09ea82e1092a9fba414
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_opinion.unity3d,1935579d226c7400323115d8be90421d
|
||||
trCRM/upgradeRes/priority/lua/CLLMainLua.lua,c0cae0cd02eba21111cf005f6c608901
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_no.unity3d,2ee604556b4fff6186f2bad067ed8695
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustFilter.lua,450e7e75ebfe83bb65d59beb3ce60782
|
||||
trCRM/upgradeRes/priority/lua/public/CLLInclude.lua,acd2930ce707586398f07b9586363436
|
||||
trCRM/upgradeRes/priority/lua/toolkit/KKLogListener.lua,85784ec79aefde29be3ef308e7b5203b
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSplash.unity3d,2691ddc66dff5da22fda3ffe11c897dd
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLFrame2.lua,e25ce84ca55cd643d527d09cedd6228a
|
||||
trCRM/upgradeRes/other/uiAtlas/main/Android/icon_news.unity3d,3a1afa79dbc710c3ddd6f65cf62f4a19
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSelectCompany.lua,28ca57d169af022ec621dece879bdcfc
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/border.unity3d,bf2cd1f2bdb27efc9c2e27943dcb8974
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_bg_num2.unity3d,bfdbfc9e1fd1f91de555c0801d278d25
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_set2.unity3d,e528f24899ef583c113ca69bbb510ebd
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPConfirm.lua,e652190d378dc120a0805230692f0fc9
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/radio.unity3d,4f2c80de666b97ea02084f059d2a5ed0
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/button2.unity3d,1a48080b1d43367921fc09b430fffaf5
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/play2.unity3d,0b6ede536ea7b5084a1de22265b04840
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/check.unity3d,aa21836aaae62d8f719a930aefe37ea7
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellSysMessageList.lua,1ce46f4b3a1a8b728e447c12e7df1831
|
||||
trCRM/upgradeRes/priority/lua/json/rpc.lua,28c2f09ceb729d01052d8408eed0b57a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPPopList.lua,896c4b35a6cd0d4f86ed5c0ba532ea00
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellReportform2.lua,47ac1164b1ffb27397953ccb032fd2d7
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelTasks.unity3d,2739446b89e4fb5c449abb46ff406785
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/me_customer.unity3d,5676922ef1749c311285d1a207b8397b
|
||||
trCRM/upgradeRes/priority/lua/net/NetProto.lua,3493f7ceb04a0b147ce63d323e3553af
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/tips_3.unity3d,2834e3cc399b70e7621065ad4ddaedf6
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_clean_up.unity3d,51e9fd3012fca7d448c3578c281bd15e
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLCellToast.lua,6e350721fca8167bd621df86ad982326
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/myset_data.unity3d,70dd24370cd051acb45bab65464459ee
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewFollowTask.unity3d,00abbad1fdb08fdf2dcdcd6f2a70f95c
|
||||
trCRM/upgradeRes/priority/lua/toolkit/CLLUpdateUpgrader.lua,bfff3548aa7cd983c3de46e5defae423
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_1.unity3d,51120d82352e936df826b05696b89b19
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/add.unity3d,ceb10233c0fc59270d66e1cb5c93bb49
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellProductSelected.lua,e7f4b1e06a54d5fa52cf9a4ed00f5233
|
||||
trCRM/upgradeRes/priority/lua/public/CLLIncludeBase.lua,87bcfc58c6d99be6fe89102d7323c95e
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustList.lua,473a578d9811d494d8cf58c7fc6a45b9
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelMine.unity3d,11da82174234ef319918c3e06f3775d6
|
||||
trCRM/upgradeRes/priority/lua/cfg/DBCfg.lua,3d0e60dbcdaa61b8553eee17f4d68b32
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/ipt_bg.unity3d,89541a2aaed40069c1f0ce363c5a8e2a
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/system.unity3d,570fa72b2d385d604cc7c9f7516965da
|
||||
trCRM/upgradeRes/other/uiAtlas/login/Android/log_password.unity3d,6a41f099b79cda5941cf720c1452b5a5
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewFollow.unity3d,3ee9577410d709f08bf37e7c9a2b19a1
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/pause.unity3d,f67cbbc84b61bc281f486e4e18fb177f
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPWWWProgress.lua,b713ddf9f0af8602ec48f71162181d6d
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLCellServer.lua,1e9de9f0b4bbc703296808c1ba179c29
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPModifyFiled.lua,99b250c386ce8dad9c10c8f4fe9874f1
|
||||
trCRM/upgradeRes/priority/ui/other/Android/InputText.unity3d,7b419ca2ec17017ed14ac42561ab0a01
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/new2_wait.unity3d,4171ead446231d4429305811f6e91fbc
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelNewCust.unity3d,059a6d8bc6830d6eea05685f17829c14
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelServers.unity3d,1613390ef03ce766ec3680f99949122b
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPCustDetail.lua,e32c3b520335c1b2966d8a503518275c
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCalender.unity3d,56aa22c08fd4a18488f213a650f67ff1
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/del.unity3d,453d38d3af66e108db0d2bb827426bd7
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPWebView.lua,093deec807e28be04df4d593bcff9e38
|
||||
trCRM/upgradeRes/priority/lua/json/json.lua,a2914572290611d3da35f4a7eec92022
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSysMsgDetail.lua,6266494c653deda1b5a391cc7f38a06a
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPSelectProduct.lua,59750609585193c66d08adfa8544d946
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/get.unity3d,04bf77dfe50c327c85966f9fdd1350c6
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/more.unity3d,f05eafb34336f1fcb5d614ad30217011
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelCustListProc.unity3d,5d32d590b8c5383f6c523b06132fb12f
|
||||
trCRM/upgradeRes/other/uiAtlas/hotwheel/Android/hotWheel_prog.unity3d,0c507387d1167154fe67f1719c3531bd
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/search.unity3d,7420a0a7cc725ff494761009ebe811d7
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_4.unity3d,8c7beff66dc0cfe9f44082bdacc8007c
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPMoreProc4Cust.lua,cc11fe3b2530891e91e2c649762d06f8
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSelectCompany.unity3d,2aa019a477ea5b160780ded080dc82ec
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelBackplate.unity3d,861c2420c86f0da27dd58a6f73dfb942
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelHotWheel.unity3d,7a3ae06303e65f59f15af5b906b7a471
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPPlaySoundRecord.lua,ded1f35f04bd0d84bfa8fd74ddf926aa
|
||||
trCRM/upgradeRes/other/uiAtlas/mine/Android/log_bg.unity3d,fd1470749300ec31bcbe7f59686152d7
|
||||
trCRM/upgradeRes/priority/lua/json/rpcserver.lua,48b8f5e53a1141652c38f8a5a8a77928
|
||||
trCRM/upgradeRes/priority/lua/net/CLLNet.lua,947abdf2c019f44a26211acf6f31e2dd
|
||||
trCRM/upgradeRes/other/uiAtlas/coolape/Android/logo.unity3d,c712e48e071a87fb6668333774da19a6
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/CLLUICalenderDay.lua,6e7400e2dd535ced93960c1e18fa2458
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCustList.lua,21f43d920caab4d30c9ce7f9a1255603
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPPopCheckBoxs.lua,508171a924c113573b01a396e8217cc2
|
||||
trCRM/upgradeRes/other/uiAtlas/news/Android/news_bg_num1.unity3d,2ed88c277f983b8d1a3dedf73d735239
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/check.unity3d,d11f6d5b126c6a0fbf34ced5734cb66f
|
||||
trCRM/upgradeRes/other/uiAtlas/public/Android/check_full.unity3d,282038ef4b24e802b0c936877871200c
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/380bg.unity3d,0634e3823e2492d32424733dd05779af
|
||||
trCRM/upgradeRes/other/uiAtlas/cust/Android/cus_task.unity3d,a4f148630912414f1d5e94d5a6a02e2d
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/CLLPBackplate.lua,ae946f1cec5baad680f4e8a0f7e71223
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelSelectProduct.unity3d,d54579853bc1e958ced6fa6e3d928d2b
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPOrderList.lua,3655882d094b886c89c7e48099136a46
|
||||
trCRM/upgradeRes/priority/lua/ui/panel/TRPEditPrice.lua,ceb906ae12222324b9a61f4b83ec7e58
|
||||
trCRM/upgradeRes/other/uiAtlas/work/Android/work_icon_1.unity3d,41ae133fd4da0f2bf01316f91cf67fb8
|
||||
trCRM/upgradeRes/other/uiAtlas/order/Android/shut.unity3d,7a13d4859459f052143028b0656aef43
|
||||
trCRM/upgradeRes/priority/lua/toolkit/curve.lua,f97735ed6c39accb55cdae44b62b5b38
|
||||
trCRM/upgradeRes/priority/ui/panel/Android/PanelEditPrice.unity3d,baa0e7f3e00e62b0d5cb5263d7583000
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellCompany.lua,b145bc086a8b1657a314622614dcb70a
|
||||
trCRM/upgradeRes/priority/lua/ui/cell/TRCellImage.lua,604691a3a96bbdb9cf88f20e2adf027c
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -1,6 +1,6 @@
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/logo/Android/logo.unity3d,849e7b3d08491890c6e021896c8ec39c
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/hotwheel/Android/hotWheel_prog.unity3d,0c507387d1167154fe67f1719c3531bd
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/LuaUtl.lua,96b4f88eea21e061eff2e3f76fbb623b
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/LuaUtl.lua,cde8ec272382f95abe0320714201b387
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/me_check.unity3d,19ab7fd3e0e61658db44cb333c6fad0e
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLQueue.lua,065303c980678b25b11854bfec1690f3
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/coolape/Android/button.unity3d,efe93bdf676ef2d5195d52abe42ab833
|
||||
@@ -10,9 +10,10 @@ trCRM/upgradeRes4Publish/other/uiAtlas/main/Android/icon_work2.unity3d,eca0bd19a
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/_empty.unity3d,69ddb5d00f576f414974eaff196cb6cc
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/add.unity3d,ceb10233c0fc59270d66e1cb5c93bb49
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSetting.unity3d,e28ed051439e06abe8ffc14ebf9cf1d2
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/CLLUpdateUpgrader.lua,bfff3548aa7cd983c3de46e5defae423
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBCust.lua,8a34500a2252a4b7780c5d3aacabb1ee
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/radio_full.unity3d,299e73e63c854e9d88dc63f1c19a45f9
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPGuid.lua,ee29c8c2537cd4c445afe1397450cdae
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPLogin.lua,f2ba83d01af3371bee83945f470facd5
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPSceneManager.lua,b1b848791df37e59bdf7d5acf9cb9273
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/CLLUICellPoplist.lua,18d47301d459fd66ed63b902546e8619
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/input.unity3d,44e1403bbf15c7313dff8cad78d39287
|
||||
@@ -20,32 +21,31 @@ trCRM/upgradeRes4Publish/priority/lua/net/NetProtoUsermgrClient.lua,f65df462666c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCusFilter.lua,f0452e3d6cfa59244dc7b9dd8f5a475d
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelWWWProgress.unity3d,d9cbe9d08670eedbee77ba97330f4118
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSysMsgList.unity3d,b48b08a37217bb43ef7a94566f79fec0
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPStart.lua,4bf6daac6cc6e35679ca2bad64b0c18e
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPStart.lua,756c08832a0f69ec66e386da4fd35ca7
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/get.unity3d,04bf77dfe50c327c85966f9fdd1350c6
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputMultText.unity3d,cd2ced3b17c33b4750ddcade27f6b98f
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputMultText.unity3d,e4554fe97f92473cff5bfd8f1443b8a7
|
||||
trCRM/upgradeRes4Publish/priority/lua/json/rpcserver.lua,48b8f5e53a1141652c38f8a5a8a77928
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPConfirm2.lua,bd0ea9f50708dedd598b517c1dfc739f
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPopList.unity3d,a0ba753b0deecff9a85c8cd2b60013dd
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/CLLVerManager.lua,39b154e796d60c2c40ebcc427a5c05e8
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSceneManager.unity3d,c83769673e1c0793d88547c05d20a82e
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewFollowTask.unity3d,00abbad1fdb08fdf2dcdcd6f2a70f95c
|
||||
trCRM/upgradeRes4Publish/priority/lua/CLLMainLua.lua,c0cae0cd02eba21111cf005f6c608901
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMsg.unity3d,e0d5c4eb46bc7c1734c79206bd0962e0
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/play.unity3d,ae412dff53c914bcfcd0ca92255bb33e
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/me_order.unity3d,26bc3076031940af6069ef5a9143fb5a
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRBasePanel.lua,dc088058987b435c998a9709297a88e6
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewFollowTask.lua,7fe7010d91b43edf001169feb70ce395
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/right.unity3d,b991891eb2939a880c223d677605faf4
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/company_bg.unity3d,2153c725242937cf5fce727da9626dad
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellReportform3.lua,f83300f176e1c35d62e00e69539998f3
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPSelectCompany.lua,28ca57d169af022ec621dece879bdcfc
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_bg_noshadow.unity3d,4aee082b48104519ba82bad6aac83cf3
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewOrder.unity3d,c4a2f36dec38a689f49f356f05a62d88
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewOrder.unity3d,068f97e365e79ae11418ff16a1cf2f89
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/myset_password2.unity3d,5dc8eaeca2eeedb771451233e5d8bf98
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/record.unity3d,afd45ba065ba86f138b8c92b9794c722
|
||||
trCRM/upgradeRes4Publish/priority/lua/cfg/DBCfgTool.lua,a6760e05dcc5f91202e3659179a464e7
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/suc.unity3d,0ec570e88b0dfc2b82a4f8e5bb84edc0
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/CLLPrintEx.lua,86d891ec4d8bfa5533704c142fc97235
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellRecord.lua,ca94ed9775ca9f03569e49d4ad1f3e14
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/main/Android/icon_work.unity3d,8a889dc1fe3b56bff4435f441ce5580e
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/follow.unity3d,fffb80792073e4f2849c743d061d685a
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/Frame2.unity3d,d057ea60bdf5dd821705a9f7e67e5171
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/pause.unity3d,f67cbbc84b61bc281f486e4e18fb177f
|
||||
@@ -58,7 +58,8 @@ trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/news_bg_num1.unity3d,2ed88c2
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/me_set2.unity3d,e528f24899ef583c113ca69bbb510ebd
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/new2_wait.unity3d,4171ead446231d4429305811f6e91fbc
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_color.unity3d,043e8a3cdee29da6e5c909432f25d6f8
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCalender.unity3d,acf45d3619beb2deb72cce95732c68c4
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCalender.unity3d,56aa22c08fd4a18488f213a650f67ff1
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelAbout.unity3d,2c583d1e0c0eabc9e831a40c2be189e8
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/main/Android/icon_me.unity3d,b6060c4f6b1cf669b21b5d4f8b23efbe
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/radio.unity3d,4f2c80de666b97ea02084f059d2a5ed0
|
||||
trCRM/upgradeRes4Publish/priority/lua/bio/BioType.lua,4667e9def8191cbf2b9dc25e928bc23f
|
||||
@@ -67,36 +68,37 @@ trCRM/upgradeRes4Publish/other/uiAtlas/main/Android/icon_news.unity3d,3a1afa79db
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLIncludeBase.lua,87bcfc58c6d99be6fe89102d7323c95e
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelResetPasswordStep1.unity3d,150f48b7b68e00e8b3e513ec2b75333a
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustStar.lua,ed39330cf68d1e1e062bc8311d1e8d44
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellExtendFieldRoot.lua,39703716cb222091e69ae0eefbf54f5f
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellExtendFieldRoot.lua,c38ffa7d9111dc4bedeaba97a6d5a661
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/hotwheel/Android/hotWheel_bg.unity3d,b5d2bc7180f9d280014726814ec8b9fe
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPMine.lua,8ef3b142a4375bdb311d15f962a3a9f2
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPMine.lua,2dd00dde001dd24d01df96a841ce2f91
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_icon_5.unity3d,7edfb781be444c18d010e53386334015
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSysMsgDetail.unity3d,91e06baebc3ec7e9b2a5c108ced50b52
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/main/Android/icon_me2.unity3d,6efa661cb74e62dfdc75bdbeaeeceb39
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellReportform1.lua,d31b42aa50089defb22bde59b5c0474d
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewFollow.lua,ef981e78f783343271b8c655f358084c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewFollow.lua,336ea3b9be70d8d1fff12f59c101193a
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/news_3.unity3d,5f130cc66d813a2b339757e8a31cee8c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPPopList.lua,896c4b35a6cd0d4f86ed5c0ba532ea00
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/CLLFrame2.lua,e25ce84ca55cd643d527d09cedd6228a
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/border.unity3d,bf2cd1f2bdb27efc9c2e27943dcb8974
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/me_about.unity3d,3da9c9416127c69bc20c281f44520f6e
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/new2_peo.unity3d,9c9562e576e93bacb7f2a0d0f08523ee
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/MyUtl.lua,0fc6aaf236b8ee14c9660ddb68f63b1d
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/MyUtl.lua,44306fc53f8711f95e0698e2613563cf
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/coolape/Android/input.unity3d,b3ad3f57c51c02ff798a50a37d6c9cab
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellSysMessageList.lua,1ce46f4b3a1a8b728e447c12e7df1831
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/news_bg.unity3d,b13e253b3a1689bf665ea7c3edecc519
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBRoot.lua,c89d42f4c6ebe72da436e07ee70f69ad
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBRoot.lua,2de10366932579d84506e9ca7aff0971
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/login/Android/log_sms.unity3d,8677ba455b4c85e5f1230986ff1032cf
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPSetting.lua,45f706ba538ab2b39364826b8fc7e214
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustFilter.lua,2fb22f9248e4af86ab42482151a5b141
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/guid/Android/1.unity3d,7654268e7c4bc7cea47f584d306f503d
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewFollow.unity3d,3ee9577410d709f08bf37e7c9a2b19a1
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPopList.unity3d,a0ba753b0deecff9a85c8cd2b60013dd
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellProductList.lua,b2827429c70df8b7aa8e87451a96bf67
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPConnect.lua,e6c7e0aafd60eb1de8bf0ab7758bac11
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputCheckboxs.unity3d,eecf93435d855908ef5d364f5dcbaffd
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputCheckboxs.unity3d,a929e8a7fd7ba3bc89bdda0686b6d7dd
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSceneManager.unity3d,c83769673e1c0793d88547c05d20a82e
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/Frame1.unity3d,622d3ea7e4f9aa1d11f6492cabffa445
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/ToastRoot.unity3d,28e85a4963ed89f85f2451670a154f04
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputText.unity3d,d27c231bd910b5d72c90a86efda2a660
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/ToastRoot.unity3d,412c3557a187689acaa1d79d7d555836
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPAbout.lua,ded7b5021b8837a537e426614cc2171e
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustProc.lua,3f9f33de3630a03463952058ba795128
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/CSCellBottomBtn.lua,afbf445995d42e012635f3d355ce6d9e
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBStatistics.lua,e64ad532dabb2cb70c4053e223770969
|
||||
@@ -110,6 +112,7 @@ trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPSysMsgDetail.lua,6266494c653de
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/funnel.unity3d,cb6f2a2b14c53ed86c122a4da2c3984b
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/login/Android/log_people.unity3d,7ff36c94c74e4a8e09e1896978c13381
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/remove.unity3d,b460d3a275be876e0cfa0ca96777260f
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelLoginCoolape.unity3d,efb09b206c444d66d10720371645049b
|
||||
trCRM/upgradeRes4Publish/priority/lua/bio/BioOutputStream.lua,84fd65eb0d1a166e77447f61254d62b5
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/play2.unity3d,0b6ede536ea7b5084a1de22265b04840
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPResetPasswordStep2.lua,af8af3fde5f3526b36c48517a5da89d0
|
||||
@@ -123,13 +126,17 @@ trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelLogin.unity3d,5cac11a555
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/msg.unity3d,7f98a936769044c856c6082beb3559e3
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/on_off.unity3d,69b1b8dfdfc0afecdd9fdd9dbd5fb98a
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellPopCheckbox.lua,25adbf58789186d43c15cfe65d2e8501
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPOrderList.lua,3655882d094b886c89c7e48099136a46
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/new2_notice.unity3d,8ccab8900911e68fc8e0b46f6c1e0372
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMask4Panel.unity3d,ed5e0d7cc2ba83e33435bddc760b5f9d
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMine.unity3d,1ec2853e1a8660c4cadcace8f333f5af
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMine.unity3d,11da82174234ef319918c3e06f3775d6
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPlaySoundRecord.unity3d,14e1a1da65735a1ac9a4256be49a4e40
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/reportform2.unity3d,de5097255fc8126d368e9693106347dc
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBCust.lua,f5d617f7342053a0236bb93b9d1a1e46
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelOrderList.unity3d,ce405f9722a7c2ab354a4091d49faa62
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/main/Android/icon_work.unity3d,8a889dc1fe3b56bff4435f441ce5580e
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPMain.lua,24f616b9384dc0eefa9955fabb1d05f1
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustListProc.unity3d,b2dd2f01b5ffbfc4db73c670c2eb4646
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustListProc.unity3d,5d32d590b8c5383f6c523b06132fb12f
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPFollowList.lua,42de16eb98a338177801da06f8fc5895
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPBackplate.lua,ae946f1cec5baad680f4e8a0f7e71223
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/new2_time.unity3d,16ca1ec9a44b8633ca032c3c8cdf1a9b
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/search.unity3d,7420a0a7cc725ff494761009ebe811d7
|
||||
@@ -138,21 +145,22 @@ trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_head_bg.unity3d,20f535a
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/icon/Android/company_1.unity3d,8ba9f20b736fb17e2f6ee414df072492
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBOrder.lua,076cfb6761ed5c0568690aa273d8ee37
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_icon_3.unity3d,651d81480c5ea1ff8aa4ccdf7e0a6058
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPopCheckBoxs.unity3d,ac475eab72569cc86cc098951c114716
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPopCheckBoxs.unity3d,d3a8693784b6cc7ff00ee50fc8625f69
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellGuidPage.lua,7b3c3f567c3e0d92065913101b08ddd0
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustFilter.unity3d,90d589021f3db8641b14920daf93f1dc
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelHotWheel.unity3d,7a3ae06303e65f59f15af5b906b7a471
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/myset_check.unity3d,d9092d78af855e769abff1223f650a9d
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellReportform2.lua,47ac1164b1ffb27397953ccb032fd2d7
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/new2_unread.unity3d,f1b29d8592cdd49f3a526be6b524ad9f
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewOrder.lua,cc63f363eb32dda89ab4e4b4956c0014
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewOrder.lua,38a15680b2d8765d9ba614c9a81c641d
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelModifyFiled.unity3d,331f7d063411e0c231eaeccee4df73d1
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewFollowSimple.unity3d,d0f73f4324743d77717668fdcda14680
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/news_1.unity3d,51120d82352e936df826b05696b89b19
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPCalender.lua,232cf2b7f74f088e8b44c4c47cda5e95
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/me_enterprise.unity3d,59d7dae785dea4fa88b52f40a8d167cf
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPResetPasswordStep1.lua,def4741f89df3925682e53df01bb70cc
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/cus_task.unity3d,a4f148630912414f1d5e94d5a6a02e2d
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelConfirm.unity3d,4526242a599f63c0bac766360a515e23
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelConfirm.unity3d,cc945b5bffde4fec044e5660d2a5fe82
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPPopCheckBoxs.lua,508171a924c113573b01a396e8217cc2
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelResetPasswordStep2.unity3d,c3e2e353bd7e604e384a3e9e35d37893
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/news_bg_num2.unity3d,bfdbfc9e1fd1f91de555c0801d278d25
|
||||
@@ -169,20 +177,23 @@ trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustList.lua,473a578d9811d494d
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/login/Android/log_bg.unity3d,a7398f0f48b3b469e31bea6dac45457e
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/CLLUICalenderDay.lua,6e7400e2dd535ced93960c1e18fa2458
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/guid/Android/2.unity3d,6b83b2d5a2dfc1f08744077e669c3ed0
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellExtendField.lua,1b18f9bdb869156c26bc4f1131a2dd6c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellExtendField.lua,be687e94841bf222fa7b0c6a7a591156
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_bg.unity3d,3b42ecd8d30203eb5dcc65cb3a0ad815
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/coolape/Android/name.unity3d,f5b44185a57a97ce6971f20a4054d990
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPMyInfor.lua,6f9a3135448a4746c463a41295275c57
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMoreProc4Cust.unity3d,0a1669987fdd4ce81f5b7cba8ce77876
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_icon_4.unity3d,d1cf8069716943cc112a2946b22efddd
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelLoginCoolape.unity3d,efb09b206c444d66d10720371645049b
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBTextures.lua,fd2b6a27eee4bcec69b1fd1b4bec92ba
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/tips_2.unity3d,3ce2779b6bfbaef177e0446661ec2f82
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputDate.unity3d,126902c484a19b9f09e7bae17655611a
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputDate.unity3d,b9645fe9ff5972788d341acc70b7be30
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelFollowList.unity3d,74006579cdb0ea8b4e120e1b52dd5c55
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/hotwheel/Android/loading.unity3d,2f74f17f1282c12ab63108377b4798e0
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/CLCellToast.lua,6e350721fca8167bd621df86ad982326
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSelectProduct.unity3d,d54579853bc1e958ced6fa6e3d928d2b
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelResetPasswordStep3.unity3d,2f18b6d6198b1678ba10a72dcdd1fbaa
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellProductSelected.lua,e7f4b1e06a54d5fa52cf9a4ed00f5233
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/write.unity3d,cbf2cca163ccc6839cf9154547edd6f8
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelStart.unity3d,50cfab21f360ee339c94b1111be09fef
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/button2.unity3d,1a48080b1d43367921fc09b430fffaf5
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/CLLNetSerialize.lua,30c24f11d46d7b887bf32177acb92c81
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/order/Android/shut.unity3d,7a13d4859459f052143028b0656aef43
|
||||
@@ -191,13 +202,13 @@ trCRM/upgradeRes4Publish/priority/lua/ui/cell/CLLFrame1.lua,1fd4e80adb13bd0d3cb0
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPSplash.lua,8ce0b645f948233e6328b20a07a5999c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPModifyFiled.lua,99b250c386ce8dad9c10c8f4fe9874f1
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/class.lua,cc0f201cc55c59f8bc8f623853382b9c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPTasks.lua,ad3d36656af6d646814046ff9059ab72
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CSPTasks.lua,778f0d663544d0b2379e87b50ea49031
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/new2_remind.unity3d,04a96d237c5e80ab044a54e7c063e368
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPResetPasswordStep3.lua,0d3be662e0a236b709d8f1f9d6b3321e
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/login/Android/log_visible.unity3d,884f69f0dd0c2a58af5ad891f23e985e
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/myset_remind.unity3d,99a50a17b34f464693ac84d1c6f38966
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/check.unity3d,d11f6d5b126c6a0fbf34ced5734cb66f
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputPoplist.unity3d,7af548695c754297fbf27cfedeb54a14
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputPoplist.unity3d,99670420a41bf33b055763d28c547a26
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/logo/Android/logo2.unity3d,1bddae3d3fe67d91fc6b5c6f9dbb0bea
|
||||
trCRM/upgradeRes4Publish/priority/lua/cfg/DBCfg.lua,3d0e60dbcdaa61b8553eee17f4d68b32
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/limt.unity3d,d48f498211748b192a7b10a932aec8be
|
||||
@@ -212,35 +223,39 @@ trCRM/upgradeRes4Publish/other/uiAtlas/login/Android/log_password.unity3d,6a41f0
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/order/Android/add.unity3d,bf6728a3e41783ee7d63c130107a16e1
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPSysMsgList.lua,518461e7bf8f3b3420fa9377a23db86a
|
||||
trCRM/upgradeRes4Publish/priority/www/baidumap.html,d210e48796dd96343f9c17bc1d230136
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/EmptySpace.unity3d,b9f173d21c2bc1854fb84e50f11dbed8
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/order/Android/upload.unity3d,a7cb722ecba5f405105f0cfda4695e74
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/main/Android/icon_news2.unity3d,a35e85b68569bf1adc16bdee3a609fdd
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLPool.lua,3e6a97eb07cfdff7c399eb3e956ba77c
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustFilter.lua,0725109e55276b5158f6ce642d28dfa6
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustFilter.lua,450e7e75ebfe83bb65d59beb3ce60782
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPWWWProgress.lua,b713ddf9f0af8602ec48f71162181d6d
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelEditPrice.unity3d,baa0e7f3e00e62b0d5cb5263d7583000
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLStack.lua,579069654d88a15e43c818a6b8079b15
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelTasks.unity3d,003d70126d4efbaf73eb9bc83e4ba142
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelTasks.unity3d,2739446b89e4fb5c449abb46ff406785
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/phone.unity3d,36e34519b910a11de3531994f607a140
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelConfirm2.unity3d,d199779b559cef259ebbfe686ba42703
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/peo.unity3d,939edcb747217aa4b0deb1d9a34f16b8
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/AlertRoot.unity3d,c30044a6e7bf14ddb7a87c4f51d1f073
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustList.unity3d,95f9affe3cc17545ceca81ac7124c322
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustList.unity3d,40fb760b32740191d3b4fa3f84de1720
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/CLLUpdateUpgrader.lua,bfff3548aa7cd983c3de46e5defae423
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/more.unity3d,f05eafb34336f1fcb5d614ad30217011
|
||||
trCRM/upgradeRes4Publish/priority/lua/db/DBMessage.lua,a80d8448cfdaebb072b3d7ec5f40bb60
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/on_off_bg.unity3d,96fcd3ce2ee9ffa2941973cefea6511d
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/InputText.unity3d,7b419ca2ec17017ed14ac42561ab0a01
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/me_set.unity3d,c53cddeef8f62d67a2a4110447466536
|
||||
trCRM/upgradeRes4Publish/priority/lua/toolkit/KKLogListener.lua,85784ec79aefde29be3ef308e7b5203b
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewFollowSimple.lua,720f3ff97d9b71a9108fd949bf779b30
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/380bg.unity3d,0634e3823e2492d32424733dd05779af
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/tips_1.unity3d,aca2dfb1fbece45c7333447195bc7efe
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustListProc.lua,1973dc8d949ed85e01b09aff328d1033
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPLogin.lua,f2ba83d01af3371bee83945f470facd5
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/logo/Android/512.unity3d,c51445206c8f94af0fcbbe4befa8ae05
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/CLLNet.lua,947abdf2c019f44a26211acf6f31e2dd
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_icon_2.unity3d,3bcd13c7b2003a1bcf92aaa4d2dbf6fe
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/CLLUICalenderMonth.lua,16af9ed096ad6b902a156f6e0a20021f
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewCust.lua,48fffb94cf7ab94e6c0b2e542bf2d08e
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelPlaySoundRecord.unity3d,14e1a1da65735a1ac9a4256be49a4e40
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPNewCust.lua,c3f8563afb97d79992a35de8c3ee9ba6
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelMyInfor.unity3d,94f1b88c66705acd7f798affef48c540
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_icon_1.unity3d,41ae133fd4da0f2bf01316f91cf67fb8
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelStart.unity3d,50cfab21f360ee339c94b1111be09fef
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellEmptySpace.lua,42b2a61f171153603c9adda32bf7cb7d
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/log_bg.unity3d,fd1470749300ec31bcbe7f59686152d7
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/work/Android/work_ranking.unity3d,9a0b0f94d60e9ff144193c83915b21fa
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSelectCompany.unity3d,2aa019a477ea5b160780ded080dc82ec
|
||||
@@ -255,7 +270,7 @@ trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelGuid.unity3d,d58c2f53bba
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/check_full.unity3d,282038ef4b24e802b0c936877871200c
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/time.unity3d,38bf54e9fbf1c1d8af2cead294d1b61e
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/bg.unity3d,37a58d5a79d3691b2c32a74422721ee7
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLInclude.lua,476b749169d54c4b08e8749743983d92
|
||||
trCRM/upgradeRes4Publish/priority/lua/public/CLLInclude.lua,acd2930ce707586398f07b9586363436
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelSplash.unity3d,2691ddc66dff5da22fda3ffe11c897dd
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/order/Android/ipt_bg.unity3d,89541a2aaed40069c1f0ce363c5a8e2a
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/kuang.unity3d,a6ce8e74b0631e79ce2e03f2fed3baea
|
||||
@@ -264,13 +279,13 @@ trCRM/upgradeRes4Publish/other/uiAtlas/login/Android/log_no.unity3d,2ee604556b4f
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellMessageGroup.lua,14a960604f49e2b34e0c115561bb45a3
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPLogin.lua,e18549cd43b8e476b5c2d1414594c592
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/new2_bg_20.unity3d,8e81d4a650273e24b7f129d1f814f5fa
|
||||
trCRM/upgradeRes4Publish/priority/atlas/Android/atlasAllReal.unity3d,6b50b4e4afbdc66704ed49d4b15135f9
|
||||
trCRM/upgradeRes4Publish/priority/atlas/Android/atlasAllReal.unity3d,ea072d32d1080c13d24c10eb53dc010e
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/star.unity3d,f9684ea4b4e3a4206fc898bc6e4651ab
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/CLLPHotWheel.lua,1760aa9933da4b421f1c6093d802cb4f
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/NetProto.lua,434601ac6cfd2ce441a0009f109f0757
|
||||
trCRM/upgradeRes4Publish/priority/lua/net/NetProto.lua,3493f7ceb04a0b147ce63d323e3553af
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/me_opinion.unity3d,1935579d226c7400323115d8be90421d
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustDetail.lua,3fc6451c6f494803506287fc7a51e755
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustDetail.unity3d,7049ee32087377d48468ccee634e67c7
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPCustDetail.lua,e32c3b520335c1b2966d8a503518275c
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelCustDetail.unity3d,b22b74b2ee1d57cccbaa92c6971dd9df
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/public/Android/choose.unity3d,e31379a28ab86046414db1fb23cd2bf6
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/panel/TRPMoreProc4Cust.lua,cc11fe3b2530891e91e2c649762d06f8
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/myset_data.unity3d,70dd24370cd051acb45bab65464459ee
|
||||
@@ -284,8 +299,9 @@ trCRM/upgradeRes4Publish/other/uiAtlas/cust/Android/cus_tel.unity3d,692b010c775f
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/news/Android/news_2.unity3d,802f5fec3b39fb208b1bd8a400801081
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/myset_fingerprint.unity3d,de777211a380a09ea82e1092a9fba414
|
||||
trCRM/upgradeRes4Publish/priority/ui/other/Android/reportform1.unity3d,5d061e9c5511ae3b978dbfe2be87f35e
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustList.lua,121935e641c34f4e3f9293381d7ff359
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewCust.unity3d,e1b7e9cecfa7c0104e475a8d84cc28db
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellCustList.lua,21f43d920caab4d30c9ce7f9a1255603
|
||||
trCRM/upgradeRes4Publish/priority/lua/ui/cell/TRCellImage.lua,604691a3a96bbdb9cf88f20e2adf027c
|
||||
trCRM/upgradeRes4Publish/priority/ui/panel/Android/PanelNewCust.unity3d,059a6d8bc6830d6eea05685f17829c14
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/order/Android/system.unity3d,570fa72b2d385d604cc7c9f7516965da
|
||||
trCRM/upgradeRes4Publish/priority/lua/json/rpc.lua,28c2f09ceb729d01052d8408eed0b57a
|
||||
trCRM/upgradeRes4Publish/other/uiAtlas/mine/Android/myset_clean_up.unity3d,51e9fd3012fca7d448c3578c281bd15e
|
||||
|
||||
@@ -180,11 +180,11 @@ public static class XluaGenCodeConfig
|
||||
typeof(CLUIElement),
|
||||
typeof(CLUIElementDate),
|
||||
typeof(CLUIElementPopList),
|
||||
typeof(InvokeEx),
|
||||
//==========================
|
||||
typeof(MyMain),
|
||||
typeof(MyCfg),
|
||||
typeof(NativeGallery),
|
||||
typeof(NativeGalleryUtl),
|
||||
typeof(LBSUtl),
|
||||
typeof(MyWWWTexture),
|
||||
typeof(MyLocation),
|
||||
@@ -200,6 +200,9 @@ public static class XluaGenCodeConfig
|
||||
typeof(CLUIPopListPanel),
|
||||
typeof(CLUIScrollViewWithEvent),
|
||||
typeof(Client4Stomp),
|
||||
typeof(MyGallery),
|
||||
typeof(NativeCamera),
|
||||
typeof(MyCamera),
|
||||
};
|
||||
|
||||
//C#静态调用Lua的配置(包括事件的原型),仅可以配delegate,interface
|
||||
|
||||
@@ -539,7 +539,7 @@ MonoBehaviour:
|
||||
autoResizeBoxCollider: 1
|
||||
hideIfOffScreen: 0
|
||||
keepAspectRatio: 0
|
||||
aspectRatio: 1.3333334
|
||||
aspectRatio: 0.48828125
|
||||
--- !u!65 &447471687
|
||||
BoxCollider:
|
||||
m_ObjectHideFlags: 0
|
||||
@@ -1143,7 +1143,7 @@ MonoBehaviour:
|
||||
autoResizeBoxCollider: 0
|
||||
hideIfOffScreen: 0
|
||||
keepAspectRatio: 0
|
||||
aspectRatio: 12
|
||||
aspectRatio: 12.2
|
||||
keepCrispWhenShrunk: 1
|
||||
mTrueTypeFont: {fileID: 0}
|
||||
mFont: {fileID: 7005176185871406937, guid: 7d76ebfe2dca9412195ae21f35d1b138, type: 3}
|
||||
|
||||
BIN
Assets/trCRM/upgradeRes4Dev/other/uiAtlas/logo/512.png
Normal file
BIN
Assets/trCRM/upgradeRes4Dev/other/uiAtlas/logo/512.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 119 KiB |
110
Assets/trCRM/upgradeRes4Dev/other/uiAtlas/logo/512.png.meta
Normal file
110
Assets/trCRM/upgradeRes4Dev/other/uiAtlas/logo/512.png.meta
Normal file
@@ -0,0 +1,110 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 6600cae924a2e47d1afe4667c36c4cf1
|
||||
TextureImporter:
|
||||
fileIDToRecycleName: {}
|
||||
externalObjects: {}
|
||||
serializedVersion: 9
|
||||
mipmaps:
|
||||
mipMapMode: 0
|
||||
enableMipMap: 0
|
||||
sRGBTexture: 1
|
||||
linearTexture: 0
|
||||
fadeOut: 0
|
||||
borderMipMap: 0
|
||||
mipMapsPreserveCoverage: 0
|
||||
alphaTestReferenceValue: 0.5
|
||||
mipMapFadeDistanceStart: 1
|
||||
mipMapFadeDistanceEnd: 3
|
||||
bumpmap:
|
||||
convertToNormalMap: 0
|
||||
externalNormalMap: 0
|
||||
heightScale: 0.25
|
||||
normalMapFilter: 0
|
||||
isReadable: 0
|
||||
streamingMipmaps: 0
|
||||
streamingMipmapsPriority: 0
|
||||
grayScaleToAlpha: 0
|
||||
generateCubemap: 6
|
||||
cubemapConvolution: 0
|
||||
seamlessCubemap: 0
|
||||
textureFormat: 1
|
||||
maxTextureSize: 2048
|
||||
textureSettings:
|
||||
serializedVersion: 2
|
||||
filterMode: 2
|
||||
aniso: 1
|
||||
mipBias: -100
|
||||
wrapU: 1
|
||||
wrapV: 1
|
||||
wrapW: 1
|
||||
nPOTScale: 0
|
||||
lightmap: 0
|
||||
compressionQuality: 50
|
||||
spriteMode: 1
|
||||
spriteExtrude: 1
|
||||
spriteMeshType: 1
|
||||
alignment: 0
|
||||
spritePivot: {x: 0.5, y: 0.5}
|
||||
spritePixelsToUnits: 100
|
||||
spriteBorder: {x: 0, y: 0, z: 0, w: 0}
|
||||
spriteGenerateFallbackPhysicsShape: 1
|
||||
alphaUsage: 1
|
||||
alphaIsTransparency: 1
|
||||
spriteTessellationDetail: -1
|
||||
textureType: 2
|
||||
textureShape: 1
|
||||
singleChannelComponent: 0
|
||||
maxTextureSizeSet: 0
|
||||
compressionQualitySet: 0
|
||||
textureFormatSet: 0
|
||||
platformSettings:
|
||||
- serializedVersion: 2
|
||||
buildTarget: DefaultTexturePlatform
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: Standalone
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: -1
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 0
|
||||
androidETC2FallbackOverride: 0
|
||||
- serializedVersion: 2
|
||||
buildTarget: Android
|
||||
maxTextureSize: 2048
|
||||
resizeAlgorithm: 0
|
||||
textureFormat: 4
|
||||
textureCompression: 1
|
||||
compressionQuality: 50
|
||||
crunchedCompression: 0
|
||||
allowsAlphaSplitting: 0
|
||||
overridden: 1
|
||||
androidETC2FallbackOverride: 0
|
||||
spriteSheet:
|
||||
serializedVersion: 2
|
||||
sprites: []
|
||||
outline: []
|
||||
physicsShape: []
|
||||
bones: []
|
||||
spriteID: 5e97eb03825dee720800000000000000
|
||||
vertices: []
|
||||
indices:
|
||||
edges: []
|
||||
weights: []
|
||||
spritePackingTag:
|
||||
pSDRemoveMatte: 0
|
||||
pSDShowRemoveMatteOption: 0
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1809,6 +1809,20 @@ MonoBehaviour:
|
||||
paddingTop: 0
|
||||
paddingBottom: 0
|
||||
path: trCRM/upgradeRes4Dev/other/uiAtlas/order/system.png
|
||||
- name: logo_512
|
||||
x: 0
|
||||
y: 0
|
||||
width: 512
|
||||
height: 512
|
||||
borderLeft: 0
|
||||
borderRight: 0
|
||||
borderTop: 0
|
||||
borderBottom: 0
|
||||
paddingLeft: 0
|
||||
paddingRight: 0
|
||||
paddingTop: 0
|
||||
paddingBottom: 0
|
||||
path: trCRM/upgradeRes4Dev/other/uiAtlas/logo/512.png
|
||||
mPixelSize: 1
|
||||
mReplacement: {fileID: 0}
|
||||
mCoordinates: 0
|
||||
|
||||
@@ -27,7 +27,8 @@ DBCust.FilterGroup = {
|
||||
custTypeList = "custTypeList", -- list 客户类型
|
||||
dealFlagList = "dealFlagList", -- list 客户状态
|
||||
loginNoList = "loginNoList", -- list 归属工号
|
||||
taskList = "taskList" -- list 任务名称
|
||||
taskList = "taskList", -- list 任务名称
|
||||
followUpTypeList = "followUpTypeList" -- 跟进类型
|
||||
}
|
||||
|
||||
DBCust.FieldType = {
|
||||
@@ -37,7 +38,16 @@ DBCust.FieldType = {
|
||||
number = "数字文本框",
|
||||
dateTime = "时间文本框",
|
||||
text = "普通文本框",
|
||||
phone = "电话号码框"
|
||||
phone = "电话号码框",
|
||||
empty ="empty"
|
||||
}
|
||||
---@class _FieldMode
|
||||
_FieldMode = {
|
||||
inputOnly = 0, -- 纯输入
|
||||
showOnly = 1, -- 纯展示模式
|
||||
modifyOnly = 2, -- 修改模式
|
||||
showAndModify = 3, -- 展示械式,同时也可以modify
|
||||
button = 4, -- 类似按钮的功能
|
||||
}
|
||||
|
||||
DBCust.onGetFilter = function(data)
|
||||
|
||||
@@ -4,12 +4,14 @@ require "db.DBCust"
|
||||
require "db.DBStatistics"
|
||||
require "db.DBUser"
|
||||
require "db.DBOrder"
|
||||
require "db.DBTextures"
|
||||
|
||||
---@class DBRoot
|
||||
DBRoot = {}
|
||||
DBRoot.db = {}
|
||||
DBRoot.init = function()
|
||||
DBMessage.init()
|
||||
DBTextures.init()
|
||||
NetProto.setReceiveCMDCallback(DBRoot.onReceiveData)
|
||||
end
|
||||
|
||||
@@ -18,6 +20,7 @@ DBRoot.clean = function()
|
||||
DBMessage.clean()
|
||||
DBCust.clean()
|
||||
DBStatistics.clean()
|
||||
DBTextures.clean()
|
||||
end
|
||||
|
||||
DBRoot.funcs = {
|
||||
|
||||
53
Assets/trCRM/upgradeRes4Dev/priority/lua/db/DBTextures.lua
Normal file
53
Assets/trCRM/upgradeRes4Dev/priority/lua/db/DBTextures.lua
Normal file
@@ -0,0 +1,53 @@
|
||||
DBTextures = {}
|
||||
local db = {}
|
||||
|
||||
function DBTextures.init()
|
||||
InvokeEx.cancelInvoke(DBTextures.releaseTimeout)
|
||||
InvokeEx.invoke(DBTextures.releaseTimeout, 60)
|
||||
end
|
||||
|
||||
function DBTextures.clean()
|
||||
InvokeEx.cancelInvoke(DBTextures.releaseTimeout)
|
||||
for k, v in ipairs(db) do
|
||||
GameObject.DestroyImmediate(v)
|
||||
end
|
||||
db = {}
|
||||
end
|
||||
|
||||
function DBTextures.releaseTimeout()
|
||||
for k, v in ipairs(db) do
|
||||
if DateEx.nowMS - v.lastUseTime > 300000 then
|
||||
GameObject.DestroyImmediate(v.texture)
|
||||
db[k] = nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
---@return UnityEngine.UnityWebRequest
|
||||
function DBTextures.getByUrl(url, callback, orgs)
|
||||
local tt = db[url]
|
||||
if tt then
|
||||
tt.lastUseTime = DateEx.nowMS
|
||||
db[url] = tt
|
||||
Utl.doCallback(callback, tt.texture, orgs)
|
||||
return nil
|
||||
end
|
||||
|
||||
local request =
|
||||
WWWEx.get(
|
||||
url,
|
||||
nil,
|
||||
CLAssetType.texture,
|
||||
function(content)
|
||||
db[url] = {texture = content, lastUseTime = DateEx.nowMS}
|
||||
Utl.doCallback(callback, content, orgs)
|
||||
end,
|
||||
nil,
|
||||
orgs,
|
||||
true,
|
||||
1
|
||||
)
|
||||
return request
|
||||
end
|
||||
|
||||
return DBTextures
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 0c5a5751e2f924a6abdab89e00841a0f
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -241,6 +241,7 @@ NetProto.cmds = {
|
||||
load_wfTicket_Settings = "load_WfTicket_Settings", -- 工单配置信息
|
||||
selectProductInfo = "selectProductInfo", -- 商品列表
|
||||
createWfInfo = "createWfInfo", -- 创建订单
|
||||
create_followUp_task = "create_followUp_task", -- 创建跟进预约
|
||||
}
|
||||
---------------------------------------------------------------------------------------
|
||||
---------------------------------------------------------------------------------------
|
||||
@@ -566,5 +567,12 @@ NetProto.send.createWfInfo = function(workFlowInfo, callback, timeOutSec)
|
||||
NetProto.sendSocket(content, callback, timeOutSec)
|
||||
end
|
||||
|
||||
NetProto.send.create_followUp_task = function(followUpTaskJson, callback, timeOutSec)
|
||||
local content = {}
|
||||
content.action = NetProto.cmds.create_followUp_task
|
||||
content.followUpTaskJson = followUpTaskJson
|
||||
content.followUpTaskJson.groupId = NetProto.groupId
|
||||
NetProto.sendSocket(content, callback, timeOutSec)
|
||||
end
|
||||
------------------------------------------------------
|
||||
return NetProto
|
||||
|
||||
@@ -261,7 +261,13 @@ Mp3PlayerByUrl = CS.Mp3PlayerByUrl
|
||||
CLUICheckbox = CS.CLUICheckbox
|
||||
---@type CLUIPopListPanel
|
||||
CLUIPopListPanel = CS.CLUIPopListPanel
|
||||
CLUIScrollViewWithEvent= CS.CLUIScrollViewWithEvent
|
||||
CLUIScrollViewWithEvent = CS.CLUIScrollViewWithEvent
|
||||
---@type MyGallery
|
||||
MyGallery = CS.MyGallery
|
||||
---@type NativeCamera
|
||||
NativeCamera = CS.NativeCamera
|
||||
---@type MyCamera
|
||||
MyCamera = CS.MyCamera
|
||||
-------------------------------------------------------
|
||||
json = require("json.json")
|
||||
|
||||
|
||||
@@ -317,11 +317,13 @@ function hideTopPanel(p)
|
||||
end
|
||||
end
|
||||
|
||||
---@param go UnityEngine.GameObject
|
||||
function SetActive(go, isActive)
|
||||
if (go == nil) then
|
||||
return
|
||||
end
|
||||
NGUITools.SetActive(go, isActive)
|
||||
-- NGUITools.SetActive(go, isActive)
|
||||
go:SetActive(isActive)
|
||||
end
|
||||
|
||||
function getCC(transform, path, com)
|
||||
|
||||
@@ -85,7 +85,7 @@ MyUtl.doCall = function(custId, phoneNo, cust)
|
||||
hideHotWheel()
|
||||
if content.success then
|
||||
MyUtl.toastS("拨号成功!")
|
||||
getPanelAsy("PanelNewFollow", onLoadedPanelTT, cust)
|
||||
getPanelAsy("PanelNewFollowSimple", onLoadedPanelTT, cust)
|
||||
end
|
||||
end
|
||||
)
|
||||
|
||||
@@ -67,6 +67,7 @@ function _cell.uiEventDelegate(go)
|
||||
local goName = go.name
|
||||
if goName == "ButtonFollow" then
|
||||
elseif goName == "ButtonTask" then
|
||||
getPanelAsy("PanelNewFollowTask", onLoadedPanelTT, mData)
|
||||
elseif goName == "ButtonContact" then
|
||||
MyUtl.callCust(mData)
|
||||
end
|
||||
|
||||
@@ -0,0 +1,30 @@
|
||||
-- xx单元
|
||||
local _cell = {}
|
||||
---@type Coolape.CLCellLua
|
||||
local csSelf = nil
|
||||
local transform = nil
|
||||
local mData = nil
|
||||
local uiobjs = {}
|
||||
|
||||
-- 初始化,只调用一次
|
||||
function _cell.init(csObj)
|
||||
csSelf = csObj
|
||||
transform = csSelf.transform
|
||||
---@type UIWidget
|
||||
uiobjs.widget = csSelf:GetComponent("UIWidget")
|
||||
end
|
||||
|
||||
-- 显示,
|
||||
-- 注意,c#侧不会在调用show时,调用refresh
|
||||
function _cell.show(go, data)
|
||||
mData = data
|
||||
uiobjs.widget.height = mData.height or 40
|
||||
end
|
||||
|
||||
-- 取得数据
|
||||
function _cell.getData()
|
||||
return mData
|
||||
end
|
||||
|
||||
--------------------------------------------
|
||||
return _cell
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 60ac659ac409f43f6b5e7ec6133bf1cd
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -1,17 +1,20 @@
|
||||
---@class _ParamFieldAttr
|
||||
---@field id
|
||||
---@field attrType
|
||||
---@field ifMust boolean 1:true
|
||||
---@field ifTime boolean 1:true
|
||||
---@field cannotEdit
|
||||
---@field attrName
|
||||
---@field attrValue
|
||||
---@field id
|
||||
---@field checkMin
|
||||
---@field checkMax
|
||||
---@field popOptions
|
||||
---@field popValues
|
||||
---@field donotJoinKey boolean 是否要拼接key
|
||||
---@field height numb 高度,只有在emptyspace有用
|
||||
|
||||
---@class _ParamCellExtendFiled
|
||||
---@field isEditMode boolean
|
||||
---@field showMode _FieldMode
|
||||
---@field attr _ParamFieldAttr
|
||||
---@field onSelect function 当选择了poplist
|
||||
---@field onClick function 当点击了输入框
|
||||
@@ -39,10 +42,6 @@ function _cell.init(csObj)
|
||||
uiobjs.spriteBg = getCC(transform, "Background", "UISprite")
|
||||
end
|
||||
|
||||
-- if uiobjs.spriteBg then
|
||||
-- uiobjs.spriteBg.width = NumEx.getIntPart(CSPMain.contentRect.z)
|
||||
-- end
|
||||
|
||||
uiobjs.boxCollider = csSelf:GetComponent("BoxCollider")
|
||||
---@type UIInput
|
||||
uiobjs.input = csSelf:GetComponent("UIInput")
|
||||
@@ -67,35 +66,6 @@ function _cell.show(go, data)
|
||||
attr = mData.attr
|
||||
attr.ifMust = attr.ifMust or 0
|
||||
|
||||
if data.isEditMode then
|
||||
_cell.enabeldObj(uiobjs.boxCollider, true)
|
||||
if uiobjs.Label then
|
||||
uiobjs.Label.text = uiobjs.inputLabel
|
||||
end
|
||||
if uiobjs.input then
|
||||
uiobjs.input.defaultText = uiobjs.inputLabel
|
||||
end
|
||||
_cell.enabeldObj(uiobjs.Label4, true)
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, true)
|
||||
if uiobjs.ButtonReset then
|
||||
uiobjs.ButtonReset.disabled = false
|
||||
end
|
||||
else
|
||||
_cell.enabeldObj(uiobjs.boxCollider, false)
|
||||
if uiobjs.Label then
|
||||
uiobjs.Label.text = ""
|
||||
end
|
||||
if uiobjs.input then
|
||||
uiobjs.input.defaultText = ""
|
||||
end
|
||||
_cell.enabeldObj(uiobjs.Label4, false)
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, false)
|
||||
|
||||
if uiobjs.ButtonReset then
|
||||
uiobjs.ButtonReset.disabled = true
|
||||
end
|
||||
end
|
||||
|
||||
local jsonKey
|
||||
if attr.donotJoinKey then
|
||||
jsonKey = attr.id
|
||||
@@ -114,7 +84,6 @@ function _cell.show(go, data)
|
||||
uiobjs.checkbox.labeName.text = attr.attrName
|
||||
end
|
||||
|
||||
_cell.enabeldObj(uiobjs.input, true)
|
||||
if attr.attrType == DBCust.FieldType.text then
|
||||
uiobjs.input.keyboardType = UIInput.KeyboardType.Default
|
||||
elseif attr.attrType == DBCust.FieldType.number then
|
||||
@@ -126,14 +95,15 @@ function _cell.show(go, data)
|
||||
elseif attr.attrType == DBCust.FieldType.multext then
|
||||
uiobjs.input.keyboardType = UIInput.KeyboardType.Default
|
||||
elseif attr.attrType == DBCust.FieldType.dateTime then
|
||||
_cell.enabeldObj(uiobjs.input, false)
|
||||
local elementDate = csSelf:GetComponent("CLUIElementDate")
|
||||
if elementDate then
|
||||
elementDate.isSetTime = ((attr.ifTime and attr.ifTime == 1) and true or false)
|
||||
end
|
||||
elseif attr.attrType == DBCust.FieldType.checkbox then
|
||||
_cell.enabeldObj(uiobjs.input, false)
|
||||
local max = tonumber(attr.checkMax) or 0
|
||||
uiobjs.checkbox.isMultMode = (max > 1) or (max == 0)
|
||||
uiobjs.checkbox:init(attr)
|
||||
elseif attr.attrType == DBCust.FieldType.popuplist then
|
||||
_cell.enabeldObj(uiobjs.input, false)
|
||||
if attr.popOptions then
|
||||
uiobjs.popList:refreshItems(attr.popOptions, attr.popValues)
|
||||
else
|
||||
@@ -146,6 +116,9 @@ function _cell.show(go, data)
|
||||
uiobjs.popList:refreshItems(array, array)
|
||||
end
|
||||
end
|
||||
|
||||
-- 设置展示的模式
|
||||
_cell.setElementMode(mData.showMode or _FieldMode.inputOnly)
|
||||
end
|
||||
|
||||
function _cell.enabeldObj(obj, val)
|
||||
@@ -154,6 +127,123 @@ function _cell.enabeldObj(obj, val)
|
||||
end
|
||||
end
|
||||
|
||||
function _cell.setElementMode(mode)
|
||||
local isPopList = uiobjs.popList
|
||||
local isPopCheckbox = uiobjs.checkbox
|
||||
---@type UIInput
|
||||
local input = uiobjs.input
|
||||
local inputOnGUI = csSelf:GetComponent("UIInputOnGUI")
|
||||
local boxcollider = uiobjs.boxCollider
|
||||
local ButtonReset = uiobjs.ButtonReset
|
||||
|
||||
if mode == _FieldMode.inputOnly then
|
||||
_cell.enabeldObj(boxcollider, true)
|
||||
_cell.enabeldObj(inputOnGUI, true)
|
||||
_cell.enabeldObj(input, true)
|
||||
if uiobjs.Label2 then
|
||||
uiobjs.Label2.color = ColorEx.getColor(0xff999999)
|
||||
end
|
||||
if uiobjs.ButtonReset then
|
||||
uiobjs.ButtonReset.disabled = false
|
||||
end
|
||||
if uiobjs.Label then
|
||||
uiobjs.Label.text = uiobjs.inputLabel
|
||||
end
|
||||
if uiobjs.input then
|
||||
uiobjs.input.defaultText = uiobjs.inputLabel
|
||||
end
|
||||
_cell.enabeldObj(uiobjs.Label4, true) -- multext
|
||||
if
|
||||
attr.attrType == DBCust.FieldType.dateTime or attr.attrType == DBCust.FieldType.checkbox or
|
||||
attr.attrType == DBCust.FieldType.popuplist
|
||||
then
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, true)
|
||||
else
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, false)
|
||||
end
|
||||
elseif mode == _FieldMode.showOnly then
|
||||
_cell.enabeldObj(boxcollider, false)
|
||||
_cell.enabeldObj(inputOnGUI, false)
|
||||
_cell.enabeldObj(input, false)
|
||||
if uiobjs.Label2 then
|
||||
uiobjs.Label2.color = ColorEx.getColor(0xff999999)
|
||||
end
|
||||
if uiobjs.ButtonReset then
|
||||
uiobjs.ButtonReset.disabled = true
|
||||
end
|
||||
if uiobjs.Label then
|
||||
uiobjs.Label.text = ""
|
||||
end
|
||||
if uiobjs.input then
|
||||
uiobjs.input.defaultText = ""
|
||||
end
|
||||
_cell.enabeldObj(uiobjs.Label4, false)
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, false)
|
||||
elseif mode == _FieldMode.modifyOnly then
|
||||
_cell.enabeldObj(boxcollider, true)
|
||||
_cell.enabeldObj(inputOnGUI, false)
|
||||
_cell.enabeldObj(input, false)
|
||||
if uiobjs.Label2 then
|
||||
uiobjs.Label2.color = ColorEx.getColor(0xff999999)
|
||||
end
|
||||
if uiobjs.ButtonReset then
|
||||
uiobjs.ButtonReset.disabled = true
|
||||
end
|
||||
if uiobjs.Label then
|
||||
uiobjs.Label.text = uiobjs.inputLabel
|
||||
end
|
||||
if uiobjs.input then
|
||||
uiobjs.input.defaultText = uiobjs.inputLabel
|
||||
end
|
||||
_cell.enabeldObj(uiobjs.Label4, true)
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, true)
|
||||
elseif mode == _FieldMode.showAndModify then
|
||||
_cell.enabeldObj(boxcollider, true)
|
||||
_cell.enabeldObj(inputOnGUI, false)
|
||||
_cell.enabeldObj(input, false)
|
||||
if uiobjs.Label2 then
|
||||
uiobjs.Label2.color = ColorEx.getColor(0xff999999)
|
||||
end
|
||||
if uiobjs.ButtonReset then
|
||||
uiobjs.ButtonReset.disabled = true
|
||||
end
|
||||
if uiobjs.Label then
|
||||
uiobjs.Label.text = ""
|
||||
end
|
||||
if uiobjs.input then
|
||||
uiobjs.input.defaultText = ""
|
||||
end
|
||||
_cell.enabeldObj(uiobjs.Label4, false)
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, true)
|
||||
elseif mode == _FieldMode.button then
|
||||
_cell.enabeldObj(boxcollider, true)
|
||||
_cell.enabeldObj(inputOnGUI, false)
|
||||
_cell.enabeldObj(input, false)
|
||||
if uiobjs.Label2 then
|
||||
uiobjs.Label2.color = ColorEx.getColor(0xff363636)
|
||||
end
|
||||
if uiobjs.ButtonReset then
|
||||
uiobjs.ButtonReset.disabled = true
|
||||
end
|
||||
if uiobjs.Label then
|
||||
uiobjs.Label.text = ""
|
||||
end
|
||||
if uiobjs.input then
|
||||
uiobjs.input.defaultText = ""
|
||||
end
|
||||
_cell.enabeldObj(uiobjs.Label4, false)
|
||||
_cell.enabeldObj(uiobjs.SpriteRight, true)
|
||||
end
|
||||
|
||||
-- 再次修正input
|
||||
if
|
||||
attr.attrType == DBCust.FieldType.dateTime or attr.attrType == DBCust.FieldType.checkbox or
|
||||
attr.attrType == DBCust.FieldType.popuplist
|
||||
then
|
||||
_cell.enabeldObj(input, false)
|
||||
end
|
||||
end
|
||||
|
||||
-- 取得数据
|
||||
function _cell.getData()
|
||||
return mData
|
||||
@@ -164,12 +254,12 @@ function _cell.uiEventDelegate(go)
|
||||
-- 说明大文本框改变了
|
||||
NGUITools.AddWidgetCollider(csSelf.gameObject, false)
|
||||
uiobjs.Label4.enabled = (uiobjs.element.value == "" and true or false)
|
||||
Utl.doCallback(mData.onMultTextInputChg, csSelf.gameObject)
|
||||
Utl.doCallback(mData.onMultTextInputChg, uiobjs.element)
|
||||
elseif
|
||||
attr.attrType == DBCust.FieldType.number or attr.attrType == DBCust.FieldType.phone or
|
||||
attr.attrType == DBCust.FieldType.text
|
||||
then
|
||||
Utl.doCallback(mData.onInputChange, csSelf.gameObject)
|
||||
Utl.doCallback(mData.onInputChange, uiobjs.element)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -178,9 +268,9 @@ function _cell.onNotifyLua(go)
|
||||
attr.attrType == DBCust.FieldType.popuplist or attr.attrType == DBCust.FieldType.checkbox or
|
||||
attr.attrType == DBCust.FieldType.dateTime
|
||||
then
|
||||
Utl.doCallback(mData.onSelect, csSelf.gameObject)
|
||||
Utl.doCallback(mData.onSelect, uiobjs.element)
|
||||
else
|
||||
Utl.doCallback(mData.onClick, csSelf.gameObject)
|
||||
Utl.doCallback(mData.onClick, uiobjs.element)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -15,6 +15,7 @@ local uiobjs = {}
|
||||
local fieldsObjs = {}
|
||||
local queue = CLLQueue.new()
|
||||
local isLoading = false
|
||||
local count = 0
|
||||
|
||||
-- 初始化,只调用一次
|
||||
function _cell.init(csObj)
|
||||
@@ -36,18 +37,6 @@ function _cell.show(go, data)
|
||||
end
|
||||
|
||||
function _cell.refresh()
|
||||
--[[
|
||||
local taskId = tostring(cust.taskId)
|
||||
if (not isFieldLoading) or taskId ~= oldtaskId then
|
||||
isFieldLoading = true
|
||||
oldtaskId = taskId
|
||||
fields = DBCust.getFieldsByTask(taskId)
|
||||
if fields and #fields > 0 then
|
||||
showHotWheel()
|
||||
_cell.initField(1, taskId)
|
||||
end
|
||||
end
|
||||
]]
|
||||
if queue:size() == 0 then
|
||||
return
|
||||
end
|
||||
@@ -56,7 +45,9 @@ function _cell.refresh()
|
||||
mData = queue:deQueue()
|
||||
if mData.fields and #(mData.fields) > 0 then
|
||||
showHotWheel()
|
||||
_cell.initField(1)
|
||||
for i, v in ipairs(mData.fields) do
|
||||
_cell.initField(i)
|
||||
end
|
||||
else
|
||||
_cell.onFinisInitFields()
|
||||
end
|
||||
@@ -73,6 +64,8 @@ function _cell.initField(index)
|
||||
name = "InputMultText"
|
||||
elseif fileAttr.attrType == DBCust.FieldType.checkbox then
|
||||
name = "InputCheckboxs"
|
||||
elseif fileAttr.attrType == DBCust.FieldType.empty then
|
||||
name = "EmptySpace"
|
||||
else
|
||||
name = "InputText"
|
||||
end
|
||||
@@ -82,36 +75,45 @@ end
|
||||
---@param go UnityEngine.GameObject
|
||||
function _cell.onLoadField(name, go, orgs)
|
||||
local index = orgs
|
||||
go.transform.parent = transform
|
||||
go.transform.localScale = Vector3.one
|
||||
go.transform.localEulerAngles = Vector3.zero
|
||||
---@type _ParamCellExtendFiled
|
||||
local param = mData.fields[index]
|
||||
local cell = go:GetComponent("CLCellLua")
|
||||
SetActive(go, true)
|
||||
if param.attr.attrType == DBCust.FieldType.multext then
|
||||
-- 要设置一次
|
||||
param.orgOnMultTextInputChg = param.onMultTextInputChg
|
||||
param.onMultTextInputChg = _cell.onMultTextInputChg
|
||||
end
|
||||
cell:init(param, nil)
|
||||
table.insert(fieldsObjs, cell)
|
||||
uiobjs.Table:Reposition()
|
||||
fieldsObjs[index] = cell
|
||||
count = count + 1
|
||||
Utl.doCallback(mData.onLoadOneField, cell)
|
||||
if index == #(mData.fields) then
|
||||
if count == #(mData.fields) then
|
||||
_cell.onFinisInitFields()
|
||||
else
|
||||
_cell.initField(index + 1)
|
||||
end
|
||||
end
|
||||
|
||||
function _cell.onFinisInitFields()
|
||||
isLoading = false
|
||||
uiobjs.Table:Reposition()
|
||||
for i, cell in ipairs(fieldsObjs) do
|
||||
-- 在完成的时候时候再处理,是为了保证加进去的顺序不变
|
||||
cell.transform.parent = transform
|
||||
cell.transform.localScale = Vector3.one
|
||||
cell.transform.localEulerAngles = Vector3.zero
|
||||
SetActive(cell.gameObject, true)
|
||||
uiobjs.Table:Reposition()
|
||||
end
|
||||
uiobjs.formRoot:setValue(mData.data)
|
||||
uiobjs.Table.repositionNow = true
|
||||
hideHotWheel()
|
||||
Utl.doCallback(mData.onFinish, csSelf.gameObject)
|
||||
_cell.refresh()
|
||||
|
||||
csSelf:invoke4Lua(
|
||||
function()
|
||||
Utl.doCallback(mData.onFinish, csSelf.gameObject)
|
||||
isLoading = false
|
||||
-- 再次处理
|
||||
_cell.refresh()
|
||||
end,
|
||||
0.1
|
||||
)
|
||||
end
|
||||
|
||||
function _cell.release()
|
||||
@@ -120,6 +122,7 @@ function _cell.release()
|
||||
CLUIOtherObjPool.returnObj(v.gameObject)
|
||||
end
|
||||
fieldsObjs = {}
|
||||
count = 0
|
||||
end
|
||||
|
||||
function _cell.onMultTextInputChg(go)
|
||||
@@ -139,5 +142,11 @@ function _cell.getData()
|
||||
return mData
|
||||
end
|
||||
|
||||
|
||||
function _cell.OnDisable()
|
||||
if #(fieldsObjs) > 0 then
|
||||
printe("动态加载的字段没有释放")
|
||||
end
|
||||
end
|
||||
--------------------------------------------
|
||||
return _cell
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
---@class _ParamCellImage
|
||||
---@field path string
|
||||
---@field onDelete function
|
||||
|
||||
-- xx单元
|
||||
local _cell = {}
|
||||
---@type Coolape.CLCellLua
|
||||
local csSelf = nil
|
||||
local transform = nil
|
||||
---@type _ParamCellImage
|
||||
local mData = nil
|
||||
local uiobjs = {}
|
||||
|
||||
-- 初始化,只调用一次
|
||||
function _cell.init(csObj)
|
||||
csSelf = csObj
|
||||
transform = csSelf.transform
|
||||
---@type UITexture
|
||||
uiobjs.texture = csSelf:GetComponent("UITexture")
|
||||
end
|
||||
|
||||
-- 显示,
|
||||
-- 注意,c#侧不会在调用show时,调用refresh
|
||||
function _cell.show(go, data)
|
||||
mData = data
|
||||
local url
|
||||
if startswith(mData.path, "/") then
|
||||
url = joinStr("file://", mData.path)
|
||||
else
|
||||
url = mData.path
|
||||
end
|
||||
print(url)
|
||||
if uiobjs.texture.mainTexture and uiobjs.texture.mainTexture.name == mData.path then
|
||||
else
|
||||
_cell.release()
|
||||
DBTextures.getByUrl(url, _cell.onGetTextue, mData.path)
|
||||
end
|
||||
end
|
||||
|
||||
function _cell.onGetTextue(content, orgs)
|
||||
if mData.path ~= orgs then
|
||||
GameObject.DestroyImmediate(content)
|
||||
content = nil
|
||||
return
|
||||
end
|
||||
_cell.release()
|
||||
content.name = orgs
|
||||
uiobjs.texture.mainTexture = content
|
||||
end
|
||||
|
||||
function _cell.release()
|
||||
if uiobjs.texture.mainTexture ~= nil then
|
||||
uiobjs.texture.mainTexture = nil
|
||||
end
|
||||
end
|
||||
|
||||
-- 取得数据
|
||||
function _cell.getData()
|
||||
return mData
|
||||
end
|
||||
|
||||
function _cell.uiEventDelegate(go)
|
||||
if go.name == "ButtonDel" then
|
||||
Utl.doCallback(mData.onDelete, mData)
|
||||
end
|
||||
end
|
||||
|
||||
--------------------------------------------
|
||||
return _cell
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: b0b74c6ac6d214694bf232a299e48b6b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -43,7 +43,7 @@ function CLLPStart.setLuasAtBegainning()
|
||||
-- 日志监听
|
||||
if ReporterMessageReceiver.self and ReporterMessageReceiver.self.gameObject then
|
||||
-- if KKWhiteList.isWhiteName() then
|
||||
ReporterMessageReceiver.self.gameObject:SetActive(false)
|
||||
ReporterMessageReceiver.self.gameObject:SetActive(true)
|
||||
-- else
|
||||
-- ReporterMessageReceiver.self.gameObject:SetActive(false)
|
||||
-- end
|
||||
|
||||
@@ -80,6 +80,10 @@ function CSPMine.uiEventDelegate(go)
|
||||
MyLocation.self:getMyLocation(CSPMine.onGetLocation)
|
||||
elseif goName == "ButtonSetting" or goName == "ButtonMySetting" then
|
||||
getPanelAsy("PanelSetting", onLoadedPanelTT)
|
||||
elseif goName == "SpriteTopBg" then
|
||||
getPanelAsy("PanelMyInfor", onLoadedPanelTT)
|
||||
elseif goName == "ButtonAbout" then
|
||||
getPanelAsy("PanelAbout", onLoadedPanelTT)
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
@@ -154,9 +154,14 @@ function CSPTasks.setEventDelegate()
|
||||
getPanelAsy("PanelCustList", onLoadedPanelTT)
|
||||
end,
|
||||
ButtonRecord = function()
|
||||
getPanelAsy("PanelFollowList", onLoadedPanelTT)
|
||||
end,
|
||||
ButtonCustOcean = function()
|
||||
end
|
||||
end,
|
||||
ButtonOrder = function()
|
||||
getPanelAsy("PanelOrderList", onLoadedPanelTT)
|
||||
end,
|
||||
|
||||
}
|
||||
end
|
||||
-- 处理ui上的事件,例如点击等
|
||||
|
||||
136
Assets/trCRM/upgradeRes4Dev/priority/lua/ui/panel/TRPAbout.lua
Normal file
136
Assets/trCRM/upgradeRes4Dev/priority/lua/ui/panel/TRPAbout.lua
Normal file
@@ -0,0 +1,136 @@
|
||||
---@type IDBasePanel
|
||||
local TRBasePanel = require("ui.panel.TRBasePanel")
|
||||
---@class TRPAbout:TRBasePanel 邮件列表
|
||||
local TRPAbout = class("TRPAbout", TRBasePanel)
|
||||
|
||||
local uiobjs = {}
|
||||
-- 初始化,只会调用一次
|
||||
function TRPAbout:init(csObj)
|
||||
TRPAbout.super.init(self, csObj)
|
||||
self:initFiledsAttr()
|
||||
self:setEventDelegate()
|
||||
|
||||
MyUtl.setContentView(getChild(self.transform, "PanelContent"), 132 + 500, 0)
|
||||
---@type UIScrollView
|
||||
uiobjs.scrollView = getCC(self.transform, "PanelContent", "UIScrollView")
|
||||
---@type UITable
|
||||
uiobjs.Table = getCC(uiobjs.scrollView.transform, "Table", "UITable")
|
||||
---@type CLUIFormRoot
|
||||
uiobjs.TableForm = uiobjs.Table:GetComponent("CLUIFormRoot")
|
||||
---@type Coolape.CLCellLua
|
||||
uiobjs.TableLua = uiobjs.Table:GetComponent("CLCellLua")
|
||||
end
|
||||
|
||||
function TRPAbout:initFiledsAttr()
|
||||
---@type _ParamFieldAttr
|
||||
local attr
|
||||
self.baseFiledsAttr = {}
|
||||
attr = {}
|
||||
attr.attrName = "更新动态"
|
||||
attr.id = "upgrade"
|
||||
attr.attrType = DBCust.FieldType.text
|
||||
attr.ifMust = 0
|
||||
attr.donotJoinKey = true
|
||||
table.insert(self.baseFiledsAttr, attr)
|
||||
|
||||
attr = {}
|
||||
attr.attrName = "服务协议"
|
||||
attr.id = "serviceAgreement"
|
||||
attr.attrType = DBCust.FieldType.text
|
||||
attr.ifMust = 0
|
||||
attr.donotJoinKey = true
|
||||
table.insert(self.baseFiledsAttr, attr)
|
||||
|
||||
attr = {}
|
||||
attr.attrName = "发布评价"
|
||||
attr.id = "assess"
|
||||
attr.attrType = DBCust.FieldType.text
|
||||
attr.ifMust = 0
|
||||
attr.donotJoinKey = true
|
||||
table.insert(self.baseFiledsAttr, attr)
|
||||
end
|
||||
|
||||
-- 设置数据
|
||||
---@param paras _ParamTRPAbout
|
||||
function TRPAbout:setData(paras)
|
||||
self.mdata = {}
|
||||
end
|
||||
|
||||
-- 显示,在c#中。show为调用refresh,show和refresh的区别在于,当页面已经显示了的情况,当页面再次出现在最上层时,只会调用refresh
|
||||
function TRPAbout:show()
|
||||
---@type _ParamCellExtendFiledRoot
|
||||
local fieldRootInfor = {}
|
||||
fieldRootInfor.fields = {}
|
||||
fieldRootInfor.data = self.mdata
|
||||
fieldRootInfor.onFinish = self:wrapFunc(self.reposition)
|
||||
for i, v in ipairs(self.baseFiledsAttr) do
|
||||
---@type _ParamCellExtendFiled
|
||||
local d = {}
|
||||
d.attr = v
|
||||
d.showMode = _FieldMode.button
|
||||
d.onClick = self:wrapFunc(self.onClickField)
|
||||
d.onSelect = self:wrapFunc(self.onSelectField)
|
||||
table.insert(fieldRootInfor.fields, d)
|
||||
end
|
||||
|
||||
uiobjs.TableLua:init(fieldRootInfor, nil)
|
||||
end
|
||||
|
||||
---@param el CLUIElement
|
||||
function TRPAbout:onClickField(el)
|
||||
if el.jsonKey == "upgrade" then
|
||||
-- 更新
|
||||
elseif el.jsonKey == "serviceAgreement" then
|
||||
-- 显示协议
|
||||
elseif el.jsonKey == "assess" then
|
||||
-- 评价(这个做起来麻烦)
|
||||
end
|
||||
end
|
||||
|
||||
function TRPAbout:onSelectField(go)
|
||||
end
|
||||
|
||||
function TRPAbout:reposition()
|
||||
uiobjs.Table:Reposition()
|
||||
uiobjs.Table.repositionNow = true
|
||||
uiobjs.scrollView:ResetPosition()
|
||||
end
|
||||
|
||||
-- 刷新
|
||||
function TRPAbout:refresh()
|
||||
uiobjs.TableLua.luaTable.release()
|
||||
end
|
||||
|
||||
-- 关闭页面
|
||||
function TRPAbout:hide()
|
||||
uiobjs.TableLua.luaTable.release()
|
||||
end
|
||||
|
||||
-- 网络请求的回调;cmd:指命,succ:成功失败,msg:消息;paras:服务器下行数据
|
||||
function TRPAbout:procNetwork(cmd, succ, msg, paras)
|
||||
if (succ == NetSuccess) then
|
||||
--[[
|
||||
if cmd == xx then
|
||||
end
|
||||
]]
|
||||
end
|
||||
end
|
||||
|
||||
function TRPAbout:setEventDelegate()
|
||||
self.EventDelegate = {}
|
||||
end
|
||||
|
||||
-- 处理ui上的事件,例如点击等
|
||||
function TRPAbout:uiEventDelegate(go)
|
||||
local func = self.EventDelegate[go.name]
|
||||
if func then
|
||||
func(go)
|
||||
end
|
||||
end
|
||||
|
||||
-- 当顶层页面发生变化时回调
|
||||
function TRPAbout:onTopPanelChange(topPanel)
|
||||
end
|
||||
|
||||
--------------------------------------------
|
||||
return TRPAbout
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 77275b0fc303540009ae226937adc14b
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -246,6 +246,7 @@ function TRPCustDetail:setEventDelegate()
|
||||
ButtonNewFollow = function()
|
||||
end,
|
||||
ButtonNewTask = function()
|
||||
getPanelAsy("PanelNewFollowTask", onLoadedPanelTT, self.mdata)
|
||||
end,
|
||||
ButtonCall = function()
|
||||
MyUtl.callCust(self.mdata)
|
||||
|
||||
@@ -75,7 +75,7 @@ function TRPCustFilter:setData(paras)
|
||||
end
|
||||
|
||||
d = {}
|
||||
d.title = "任务类型"
|
||||
d.title = "客户类型"
|
||||
d.key = DBCust.FilterGroup.custTypeList
|
||||
d.key2 = "custType"
|
||||
d.list = DBCust.getFilter(DBCust.FilterGroup.custTypeList)
|
||||
|
||||
@@ -0,0 +1,223 @@
|
||||
---@type IDBasePanel
|
||||
local TRBasePanel = require("ui.panel.TRBasePanel")
|
||||
---@class TRPFollowList:TRBasePanel 邮件列表
|
||||
local TRPFollowList = class("TRPFollowList", TRBasePanel)
|
||||
|
||||
local uiobjs = {}
|
||||
-- 初始化,只会调用一次
|
||||
function TRPFollowList:init(csObj)
|
||||
TRPFollowList.super.init(self, csObj)
|
||||
self:setEventDelegate()
|
||||
MyUtl.setContentView(getChild(self.transform, "PanelContent"), 132 + 132 + 40, 0)
|
||||
uiobjs.InputSeachKey = getCC(self.transform, "Top/InputSeachKey", "UIInput")
|
||||
uiobjs.ButtonFilterSp = getCC(self.transform, "Top/ButtonFilter", "UISprite")
|
||||
uiobjs.ButtonFilterLb = getCC(uiobjs.ButtonFilterSp.transform, "Label", "UILabel")
|
||||
---@type CLUIScrollViewWithEvent
|
||||
uiobjs.scrollView = getCC(self.transform, "PanelContent", "CLUIScrollViewWithEvent")
|
||||
uiobjs.scrollView:init(
|
||||
self:wrapFunc(self.onShowRefreshFlg),
|
||||
self:wrapFunc(self.onhideRefreshFlg),
|
||||
self:wrapFunc(self.refreshList)
|
||||
)
|
||||
---@type Coolape.CLUILoopGrid
|
||||
uiobjs.Grid = getCC(uiobjs.scrollView.transform, "Grid", "CLUILoopGrid")
|
||||
uiobjs.ButtonEndList = getChild(uiobjs.Grid.transform, "ButtonEndList")
|
||||
uiobjs.ButtonEndListLb = getCC(uiobjs.ButtonEndList, "Label", "UILabel")
|
||||
uiobjs.ButtonHeadList = getChild(uiobjs.Grid.transform, "ButtonHeadList")
|
||||
end
|
||||
|
||||
-- 设置数据
|
||||
---@param paras _ParamTRPFollowList
|
||||
function TRPFollowList:setData(paras)
|
||||
self.mdata = paras
|
||||
end
|
||||
|
||||
-- 显示,在c#中。show为调用refresh,show和refresh的区别在于,当页面已经显示了的情况,当页面再次出现在最上层时,只会调用refresh
|
||||
function TRPFollowList:show()
|
||||
uiobjs.InputSeachKey.value = ""
|
||||
self:refreshFilterBtnStatus()
|
||||
self:showList({})
|
||||
showHotWheel()
|
||||
NetProto.send.list_customers(self.filterValue, "", 1)
|
||||
end
|
||||
|
||||
function TRPFollowList:showList(list)
|
||||
SetActive(uiobjs.ButtonHeadList.gameObject, false)
|
||||
SetActive(uiobjs.ButtonEndList.gameObject, false)
|
||||
uiobjs.Grid:setList(
|
||||
list or {},
|
||||
self:wrapFunc(self.initCell),
|
||||
self:wrapFunc(self.onHeadList),
|
||||
self:wrapFunc(self.onEndList)
|
||||
)
|
||||
uiobjs.scrollView:ResetPosition()
|
||||
end
|
||||
|
||||
function TRPFollowList:appList(list)
|
||||
SetActive(uiobjs.ButtonEndList.gameObject, false)
|
||||
uiobjs.Grid:appendList(list)
|
||||
end
|
||||
|
||||
function TRPFollowList:onShowRefreshFlg()
|
||||
-- printe("TRPFollowList:onShowRefreshFlg")
|
||||
uiobjs.ButtonHeadList.transform.localPosition = Vector3(0, 395, 0)
|
||||
SetActive(uiobjs.ButtonHeadList.gameObject, true)
|
||||
end
|
||||
function TRPFollowList:onhideRefreshFlg()
|
||||
-- printe("TRPFollowList:onhideRefreshFlg")
|
||||
SetActive(uiobjs.ButtonHeadList.gameObject, false)
|
||||
end
|
||||
function TRPFollowList:refreshList()
|
||||
local queryKey = uiobjs.InputSeachKey.value
|
||||
showHotWheel()
|
||||
NetProto.send.list_customers(self.filterValue, queryKey, 1)
|
||||
end
|
||||
|
||||
function TRPFollowList:onHeadList(head)
|
||||
printw("到最顶端了")
|
||||
-- uiobjs.ButtonHeadList.transform.localPosition = Vector3(0, 250, 0)
|
||||
-- SetActive(uiobjs.ButtonHeadList.gameObject, true)
|
||||
end
|
||||
|
||||
function TRPFollowList:onEndList(tail)
|
||||
printw("到最后了==" .. tail.name)
|
||||
if self.pageInfo and self.pageInfo.current_page < self.pageInfo.total_pages then
|
||||
local queryKey = uiobjs.InputSeachKey.value
|
||||
showHotWheel()
|
||||
-- 取得下一页
|
||||
NetProto.send.list_customers(self.filterValue, queryKey, self.pageInfo.current_page + 1)
|
||||
else
|
||||
uiobjs.ButtonEndList.localPosition = tail.transform.localPosition + Vector3.up * -335
|
||||
SetActive(uiobjs.ButtonEndList.gameObject, true)
|
||||
end
|
||||
end
|
||||
|
||||
function TRPFollowList:initCell(cell, data)
|
||||
cell:init(data, self:wrapFunc(self.onClickCell))
|
||||
end
|
||||
|
||||
function TRPFollowList:onClickCell(cell, data)
|
||||
getPanelAsy("PanelCustDetail", onLoadedPanelTT, data)
|
||||
end
|
||||
|
||||
function TRPFollowList:refreshFilterBtnStatus()
|
||||
if self:hadFilterVal() then
|
||||
uiobjs.ButtonFilterLb.color = ColorEx.getColor(0xff2990dc)
|
||||
uiobjs.ButtonFilterSp.color = ColorEx.getColor(0xff2990dc)
|
||||
uiobjs.ButtonFilterSp.spriteName = "cust_funnel"
|
||||
else
|
||||
uiobjs.ButtonFilterLb.color = ColorEx.getColor(0xff999999)
|
||||
uiobjs.ButtonFilterSp.color = ColorEx.getColor(0xff999999)
|
||||
uiobjs.ButtonFilterSp.spriteName = "cust_screen"
|
||||
end
|
||||
end
|
||||
|
||||
function TRPFollowList:hadFilterVal()
|
||||
for i, v in ipairs(self.filters or {}) do
|
||||
for j, f in ipairs(v.list) do
|
||||
if f.selected then
|
||||
return true
|
||||
end
|
||||
end
|
||||
end
|
||||
return false
|
||||
end
|
||||
-- 刷新
|
||||
function TRPFollowList:refresh()
|
||||
end
|
||||
|
||||
-- 关闭页面
|
||||
function TRPFollowList:hide()
|
||||
self.filterValue = nil
|
||||
end
|
||||
|
||||
-- 网络请求的回调;cmd:指命,succ:成功失败,msg:消息;paras:服务器下行数据
|
||||
function TRPFollowList:procNetwork(cmd, succ, msg, paras)
|
||||
if (succ == NetSuccess) then
|
||||
if cmd == NetProto.cmds.list_customers then
|
||||
local result = paras.result or {}
|
||||
self.pageInfo = result.meta
|
||||
if self.pageInfo and self.pageInfo.current_page > 1 then
|
||||
self:appList(result.data)
|
||||
else
|
||||
self:showList(result.data)
|
||||
end
|
||||
hideHotWheel()
|
||||
elseif cmd == NetProto.cmds.update_customer then
|
||||
uiobjs.Grid:refreshContentOnly()
|
||||
elseif cmd == NetProto.cmds.save_customer then
|
||||
self:refreshList()
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
function TRPFollowList:setEventDelegate()
|
||||
self.EventDelegate = {
|
||||
ButtonAddCust = function()
|
||||
getPanelAsy("PanelNewCust", onLoadedPanelTT)
|
||||
end,
|
||||
ButtonFilter = function()
|
||||
getPanelAsy(
|
||||
"PanelCustFilter",
|
||||
onLoadedPanelTT,
|
||||
{
|
||||
callback = self:wrapFunc(self.onSetFilter),
|
||||
queryKey = uiobjs.InputSeachKey.value,
|
||||
defautFilter = self.filters
|
||||
}
|
||||
)
|
||||
end,
|
||||
InputSeachKey = function()
|
||||
local queryKey = uiobjs.InputSeachKey.value
|
||||
NetProto.send.list_customers(self.filterValue, queryKey, 1)
|
||||
end
|
||||
}
|
||||
end
|
||||
|
||||
function TRPFollowList:getFilterStr()
|
||||
if not self.filters then
|
||||
return ""
|
||||
end
|
||||
local ret = {}
|
||||
for i, g in ipairs(self.filters) do
|
||||
local list = {}
|
||||
for j, f in ipairs(g.list) do
|
||||
if f.selected and f.value ~= -1 then
|
||||
table.insert(list, f.value)
|
||||
end
|
||||
end
|
||||
ret[g.key2] = table.concat(list, ",")
|
||||
end
|
||||
return ret
|
||||
end
|
||||
|
||||
function TRPFollowList:onSetFilter(filters, queryKey)
|
||||
local oldqueryKey = uiobjs.InputSeachKey.value
|
||||
uiobjs.InputSeachKey.value = queryKey
|
||||
self.filters = filters
|
||||
self:refreshFilterBtnStatus()
|
||||
local queryKey = uiobjs.InputSeachKey.value
|
||||
queryKey = trim(queryKey)
|
||||
showHotWheel()
|
||||
self.filterValue = self:getFilterStr()
|
||||
if oldqueryKey == queryKey then
|
||||
NetProto.send.list_customers(self.filterValue, queryKey, 1)
|
||||
else
|
||||
-- 会触发input的onChange事件
|
||||
end
|
||||
end
|
||||
|
||||
-- 处理ui上的事件,例如点击等
|
||||
function TRPFollowList:uiEventDelegate(go)
|
||||
local func = self.EventDelegate[go.name]
|
||||
if func then
|
||||
func()
|
||||
end
|
||||
end
|
||||
|
||||
-- 当顶层页面发生变化时回调
|
||||
function TRPFollowList:onTopPanelChange(topPanel)
|
||||
end
|
||||
|
||||
--------------------------------------------
|
||||
return TRPFollowList
|
||||
@@ -0,0 +1,7 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 9c4440fd5b0834ec99547d54ad460778
|
||||
DefaultImporter:
|
||||
externalObjects: {}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user