From 1ab81908278bbc7f82f22979ddf6722fece75388 Mon Sep 17 00:00:00 2001 From: tverona1 Date: Tue, 20 Aug 2019 23:41:09 -0700 Subject: [PATCH 1/5] Support to sort by most recent usage --- Assets/Plugins/Android/AndroidManifest.xml | 1 + Assets/Plugins/Android/AppInfo.java | 69 +- Assets/Scenes/QuestAppLauncher.unity | 1409 +++++++++++++++++++- Assets/Scripts/AppProcessor.cs | 18 +- Assets/Scripts/Config.cs | 7 + Assets/Scripts/GridPopulation.cs | 15 +- Assets/Scripts/SettingsHandler.cs | 84 ++ 7 files changed, 1540 insertions(+), 63 deletions(-) diff --git a/Assets/Plugins/Android/AndroidManifest.xml b/Assets/Plugins/Android/AndroidManifest.xml index a3cf07a7..7e473fe6 100644 --- a/Assets/Plugins/Android/AndroidManifest.xml +++ b/Assets/Plugins/Android/AndroidManifest.xml @@ -11,4 +11,5 @@ + \ No newline at end of file diff --git a/Assets/Plugins/Android/AppInfo.java b/Assets/Plugins/Android/AppInfo.java index e19c8f26..83b248a2 100644 --- a/Assets/Plugins/Android/AppInfo.java +++ b/Assets/Plugins/Android/AppInfo.java @@ -2,17 +2,25 @@ import com.unity3d.player.UnityPlayerActivity; import android.app.Activity; +import android.app.AppOpsManager; +import android.app.usage.UsageStats; +import android.app.usage.UsageStatsManager; +import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.content.pm.PackageInfo; import android.content.pm.FeatureInfo; import android.content.pm.ApplicationInfo; +import android.provider.Settings; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.util.Calendar; +import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; import android.os.Bundle; @@ -22,23 +30,30 @@ import java.util.List; import java.util.LinkedList; +class AppInfoInternal { + public ApplicationInfo app; + public long lastTimeUsed; +} + public class AppInfo extends UnityPlayerActivity { private static final String TAG = "AppInfo"; - private List installedApps; + private List installedApps; @Override protected void onStart() { super.onStart(); - installedApps = new LinkedList(); + installedApps = new LinkedList(); for(ApplicationInfo app : this.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA)) { if((app.flags & (ApplicationInfo.FLAG_UPDATED_SYSTEM_APP | ApplicationInfo.FLAG_SYSTEM)) > 0) { // Skip system app continue; } - installedApps.add(app); + AppInfoInternal appInfoInternal = new AppInfoInternal(); + appInfoInternal.app = app; + installedApps.add(appInfoInternal); } } @@ -47,11 +62,16 @@ public int getSize() { } public String getPackageName(int i) { - return this.installedApps.get(i).packageName; + return this.installedApps.get(i).app.packageName; } public String getAppName(int i) { - return (String)this.getPackageManager().getApplicationLabel(installedApps.get(i)); + return (String)this.getPackageManager().getApplicationLabel(installedApps.get(i).app); + } + + public long getLastTimeUsed(int i) + { + return this.installedApps.get(i).lastTimeUsed; } public boolean isQuestApp(int i) { @@ -73,7 +93,7 @@ public boolean isQuestApp(int i) { public boolean is2DApp(int i) { - ApplicationInfo app = this.installedApps.get(i); + ApplicationInfo app = this.installedApps.get(i).app; if (null == app.metaData) { return true; @@ -88,7 +108,7 @@ public boolean is2DApp(int i) } public byte[] getIcon(int i) { - BitmapDrawable icon = (BitmapDrawable)this.getPackageManager().getApplicationIcon(installedApps.get(i)); + BitmapDrawable icon = (BitmapDrawable)this.getPackageManager().getApplicationIcon(installedApps.get(i).app); Bitmap bmp = icon.getBitmap(); ByteArrayOutputStream stream = new ByteArrayOutputStream(); bmp.compress(Bitmap.CompressFormat.JPEG, 100, stream); @@ -96,6 +116,41 @@ public byte[] getIcon(int i) { return byteArray; } + public boolean hasUsageStatsPermissions() { + AppOpsManager appOps = (AppOpsManager) this.getSystemService(Context.APP_OPS_SERVICE); + final int mode = appOps.checkOpNoThrow(AppOpsManager.OPSTR_GET_USAGE_STATS, android.os.Process.myUid(), this.getPackageName()); + boolean granted = mode == AppOpsManager.MODE_DEFAULT ? + (this.checkCallingOrSelfPermission(android.Manifest.permission.PACKAGE_USAGE_STATS) == PackageManager.PERMISSION_GRANTED) + : (mode == AppOpsManager.MODE_ALLOWED); + return granted; + } + + public void grantUsageStatsPermission() { + startActivity(new Intent(Settings.ACTION_USAGE_ACCESS_SETTINGS)); + } + + public void processLastTimeUsed(int numDaysLookback) { + if (!hasUsageStatsPermissions()) { + Log.i(TAG, "PorcessLastTimeUsed: No permissions, so skipping"); + } + + UsageStatsManager usageStatsManager = (UsageStatsManager) this.getSystemService(Context.USAGE_STATS_SERVICE); + Calendar calendar = Calendar.getInstance(); + calendar.add(Calendar.DAY_OF_MONTH, -1 * numDaysLookback); + long start = calendar.getTimeInMillis(); + long end = System.currentTimeMillis(); + Map stats = usageStatsManager.queryAndAggregateUsageStats(start, end); + + for (int i = 0; i < this.installedApps.size(); i++) { + if (stats.containsKey(getPackageName(i))) { + AppInfoInternal app = this.installedApps.get(i); + app.lastTimeUsed = stats.get(getPackageName(i)).getLastTimeStamp(); + Log.v(TAG, "Package " + getPackageName(i) + " last time stamp = " + app.lastTimeUsed); + this.installedApps.set(i, app); + } + } + } + public static void unzip(String zipFileName, String targetPath) { File outDir = new File(targetPath); diff --git a/Assets/Scenes/QuestAppLauncher.unity b/Assets/Scenes/QuestAppLauncher.unity index e1a948e9..a35f8cbd 100644 --- a/Assets/Scenes/QuestAppLauncher.unity +++ b/Assets/Scenes/QuestAppLauncher.unity @@ -1453,6 +1453,163 @@ Transform: type: 3} m_PrefabInstance: {fileID: 174121771} m_PrefabAsset: {fileID: 0} +--- !u!1 &177729748 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 177729749} + - component: {fileID: 177729751} + - component: {fileID: 177729750} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &177729749 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 177729748} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 240885095} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 300, y: -75} + m_SizeDelta: {x: 600, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &177729750 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 177729748} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: Sort By + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 86 + m_fontSizeBase: 86 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 513 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 177729750} + characterCount: 7 + spriteCount: 0 + spaceCount: 1 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &177729751 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 177729748} + m_CullTransparentMesh: 0 --- !u!1 &210908719 GameObject: m_ObjectHideFlags: 0 @@ -1489,6 +1646,84 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &240885094 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 240885095} + - component: {fileID: 240885096} + - component: {fileID: 240885097} + m_Layer: 5 + m_Name: Sort_Setting + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &240885095 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240885094} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 177729749} + - {fileID: 1092056641} + - {fileID: 1829862260} + m_Father: {fileID: 883330324} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 150, y: -775} + m_SizeDelta: {x: 100, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &240885096 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240885094} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 0 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!114 &240885097 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 240885094} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 2fafe2cfe61f6974895a912c3755e8f1, type: 3} + m_Name: + m_EditorClassIdentifier: + m_AllowSwitchOff: 0 --- !u!1 &247836998 GameObject: m_ObjectHideFlags: 0 @@ -1760,11 +1995,11 @@ RectTransform: - {fileID: 987583755} - {fileID: 87081339} m_Father: {fileID: 883330324} - m_RootOrder: 2 + m_RootOrder: 3 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 500, y: -775} + m_AnchoredPosition: {x: 500, y: -1025} m_SizeDelta: {x: 800, y: 150} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &302656574 @@ -2736,7 +2971,7 @@ Transform: m_Father: {fileID: 0} m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &455930354 +--- !u!1 &455413003 GameObject: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} @@ -2744,76 +2979,152 @@ GameObject: m_PrefabAsset: {fileID: 0} serializedVersion: 6 m_Component: - - component: {fileID: 455930355} - - component: {fileID: 455930358} - - component: {fileID: 455930357} - - component: {fileID: 455930356} + - component: {fileID: 455413004} + - component: {fileID: 455413006} + - component: {fileID: 455413005} m_Layer: 5 - m_Name: Off + m_Name: Background m_TagString: Untagged m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 m_IsActive: 1 ---- !u!224 &455930355 +--- !u!224 &455413004 RectTransform: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455930354} + m_GameObject: {fileID: 455413003} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 0} m_LocalScale: {x: 1, y: 1, z: 1} m_Children: - - {fileID: 470013056} - - {fileID: 1107460992} - m_Father: {fileID: 1133097218} - m_RootOrder: 1 + - {fileID: 1629902000} + m_Father: {fileID: 1480305969} + m_RootOrder: 0 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 850, y: -75} - m_SizeDelta: {x: 500, y: 150} + m_AnchoredPosition: {x: 100, y: -75} + m_SizeDelta: {x: 200, y: 150} m_Pivot: {x: 0.5, y: 0.5} ---- !u!114 &455930356 +--- !u!114 &455413005 MonoBehaviour: m_ObjectHideFlags: 0 m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455930354} + m_GameObject: {fileID: 455413003} m_Enabled: 1 m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} m_Name: m_EditorClassIdentifier: - m_Padding: - m_Left: 0 - m_Right: 0 - m_Top: 0 - m_Bottom: 0 - m_ChildAlignment: 0 - m_Spacing: 50 - m_ChildForceExpandWidth: 1 - m_ChildForceExpandHeight: 1 - m_ChildControlWidth: 0 - m_ChildControlHeight: 0 - m_ChildScaleWidth: 0 - m_ChildScaleHeight: 0 ---- !u!65 &455930357 -BoxCollider: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 455930354} m_Material: {fileID: 0} - m_IsTrigger: 0 - m_Enabled: 1 - serializedVersion: 2 - m_Size: {x: 500, y: 150, z: 0.05} - m_Center: {x: 0, y: 0, z: 0} + m_Color: {r: 0.24313727, g: 0.427451, b: 0.6627451, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &455413006 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455413003} + m_CullTransparentMesh: 0 +--- !u!1 &455930354 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 455930355} + - component: {fileID: 455930358} + - component: {fileID: 455930357} + - component: {fileID: 455930356} + m_Layer: 5 + m_Name: Off + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &455930355 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455930354} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 470013056} + - {fileID: 1107460992} + m_Father: {fileID: 1133097218} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 850, y: -75} + m_SizeDelta: {x: 500, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &455930356 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455930354} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 50 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!65 &455930357 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 455930354} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 500, y: 150, z: 0.05} + m_Center: {x: 0, y: 0, z: 0} --- !u!114 &455930358 MonoBehaviour: m_ObjectHideFlags: 0 @@ -3270,11 +3581,11 @@ RectTransform: - {fileID: 1106898771} - {fileID: 129491542} m_Father: {fileID: 883330324} - m_RootOrder: 5 + m_RootOrder: 6 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 150, y: -1500} + m_AnchoredPosition: {x: 150, y: -1750} m_SizeDelta: {x: 100, y: 100} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &572537056 @@ -3526,11 +3837,11 @@ RectTransform: - {fileID: 4342933} - {fileID: 2063273159} m_Father: {fileID: 883330324} - m_RootOrder: 4 + m_RootOrder: 5 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 500, y: -1275} + m_AnchoredPosition: {x: 500, y: -1525} m_SizeDelta: {x: 800, y: 150} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &585330017 @@ -4953,6 +5264,7 @@ RectTransform: m_Children: - {fileID: 1133097218} - {fileID: 2027300713} + - {fileID: 240885095} - {fileID: 302656573} - {fileID: 949458750} - {fileID: 585330016} @@ -5060,6 +5372,9 @@ MonoBehaviour: tabsCustomTop: {fileID: 247837002} tabsCustomLeft: {fileID: 1462980089} tabsCustomRight: {fileID: 1158989063} + sortAZ: {fileID: 1092056644} + sortMostRecent: {fileID: 1480305972} + usageStatsPermText: {fileID: 907885703} --- !u!65 &883330329 BoxCollider: m_ObjectHideFlags: 0 @@ -5230,6 +5545,163 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 907338447} m_CullTransparentMesh: 0 +--- !u!1 &907885703 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 907885704} + - component: {fileID: 907885706} + - component: {fileID: 907885705} + m_Layer: 5 + m_Name: UsageStats_Permission_Text + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &907885704 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 907885703} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1829862260} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &907885705 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 907885703} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: Requires UsageStats permissions. Select to set. + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 40 + m_fontSizeBase: 40 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 257 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 1 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: 0 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 3.513392, y: 0, z: -1298.6443, w: 0} + m_textInfo: + textComponent: {fileID: 907885705} + characterCount: 47 + spriteCount: 0 + spaceCount: 5 + wordCount: 6 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &907885706 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 907885703} + m_CullTransparentMesh: 0 --- !u!1 &949458749 GameObject: m_ObjectHideFlags: 0 @@ -5263,11 +5735,11 @@ RectTransform: - {fileID: 1398590894} - {fileID: 604462432} m_Father: {fileID: 883330324} - m_RootOrder: 3 + m_RootOrder: 4 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 1} m_AnchorMax: {x: 0, y: 1} - m_AnchoredPosition: {x: 500, y: -1025} + m_AnchoredPosition: {x: 500, y: -1275} m_SizeDelta: {x: 800, y: 150} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &949458751 @@ -5445,7 +5917,321 @@ CanvasRenderer: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 987583754} + m_GameObject: {fileID: 987583754} + m_CullTransparentMesh: 0 +--- !u!1 &1004538039 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1004538040} + - component: {fileID: 1004538042} + - component: {fileID: 1004538041} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1004538040 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004538039} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1092056641} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 375, y: -75} + m_SizeDelta: {x: 250, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1004538041 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004538039} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: A - Z + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 86 + m_fontSizeBase: 86 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 513 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 1004538041} + characterCount: 5 + spriteCount: 0 + spaceCount: 2 + wordCount: 3 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1004538042 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1004538039} + m_CullTransparentMesh: 0 +--- !u!1 &1026875225 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1026875226} + - component: {fileID: 1026875228} + - component: {fileID: 1026875227} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1026875226 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026875225} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1480305969} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 475, y: -75} + m_SizeDelta: {x: 450, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1026875227 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026875225} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_text: Most Recent + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_sharedMaterial: {fileID: 2180264, guid: 8f586378b4e144a9851e7b34d9b748ee, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294967295 + m_fontColor: {r: 1, g: 1, b: 1, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_outlineColor: + serializedVersion: 2 + rgba: 4278190080 + m_fontSize: 86 + m_fontSizeBase: 86 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 18 + m_fontSizeMax: 72 + m_fontStyle: 0 + m_textAlignment: 513 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_firstOverflowCharacterIndex: -1 + m_linkedTextComponent: {fileID: 0} + m_isLinkedTextComponent: 0 + m_isTextTruncated: 0 + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_ignoreRectMaskCulling: 0 + m_ignoreCulling: 1 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_VertexBufferAutoSizeReduction: 1 + m_firstVisibleCharacter: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_textInfo: + textComponent: {fileID: 1026875227} + characterCount: 11 + spriteCount: 0 + spaceCount: 1 + wordCount: 2 + linkCount: 0 + lineCount: 1 + pageCount: 1 + materialCount: 1 + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_spriteAnimator: {fileID: 0} + m_hasFontAssetChanged: 0 + m_subTextObjects: + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + - {fileID: 0} + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &1026875228 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1026875225} m_CullTransparentMesh: 0 --- !u!1 &1051081550 GameObject: @@ -5867,6 +6653,133 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 0} m_SizeDelta: {x: -20, y: -20} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1092056640 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1092056641} + - component: {fileID: 1092056644} + - component: {fileID: 1092056643} + - component: {fileID: 1092056642} + m_Layer: 5 + m_Name: Alphabetically_Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1092056641 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092056640} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1181631556} + - {fileID: 1004538040} + m_Father: {fileID: 240885095} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 850, y: -75} + m_SizeDelta: {x: 500, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1092056642 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092056640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 0 + m_Spacing: 50 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!65 &1092056643 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092056640} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 500, y: 150, z: 0.05} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1092056644 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1092056640} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 1181631557} + toggleTransition: 1 + graphic: {fileID: 2017584416} + m_Group: {fileID: 240885097} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 1 --- !u!1 &1096116666 GameObject: m_ObjectHideFlags: 0 @@ -7306,6 +8219,82 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1175856089} m_CullTransparentMesh: 0 +--- !u!1 &1181631555 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1181631556} + - component: {fileID: 1181631558} + - component: {fileID: 1181631557} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1181631556 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1181631555} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 2017584415} + m_Father: {fileID: 1092056641} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 100, y: -75} + m_SizeDelta: {x: 200, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1181631557 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1181631555} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 0.24313727, g: 0.427451, b: 0.6627451, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1181631558 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1181631555} + m_CullTransparentMesh: 0 --- !u!4 &1192133537 stripped Transform: m_CorrespondingSourceObject: {fileID: 487254, guid: 126d619cf4daa52469682f85c1378b4a, @@ -9448,8 +10437,135 @@ CanvasRenderer: m_CorrespondingSourceObject: {fileID: 0} m_PrefabInstance: {fileID: 0} m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1471555291} - m_CullTransparentMesh: 0 + m_GameObject: {fileID: 1471555291} + m_CullTransparentMesh: 0 +--- !u!1 &1480305968 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1480305969} + - component: {fileID: 1480305972} + - component: {fileID: 1480305971} + - component: {fileID: 1480305970} + m_Layer: 5 + m_Name: MostRecent_Toggle + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1480305969 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480305968} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 455413004} + - {fileID: 1026875226} + m_Father: {fileID: 1829862260} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1480305970 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480305968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 30649d3a9faa99c48a7b1166b86bf2a0, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Padding: + m_Left: 0 + m_Right: 0 + m_Top: 0 + m_Bottom: 0 + m_ChildAlignment: 3 + m_Spacing: 50 + m_ChildForceExpandWidth: 1 + m_ChildForceExpandHeight: 1 + m_ChildControlWidth: 0 + m_ChildControlHeight: 0 + m_ChildScaleWidth: 0 + m_ChildScaleHeight: 0 +--- !u!65 &1480305971 +BoxCollider: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480305968} + m_Material: {fileID: 0} + m_IsTrigger: 0 + m_Enabled: 1 + serializedVersion: 2 + m_Size: {x: 600, y: 150, z: 0.05} + m_Center: {x: 0, y: 0, z: 0} +--- !u!114 &1480305972 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1480305968} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 455413005} + toggleTransition: 1 + graphic: {fileID: 1629902001} + m_Group: {fileID: 240885097} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, + Culture=neutral, PublicKeyToken=null + m_IsOn: 0 --- !u!1 &1550751410 GameObject: m_ObjectHideFlags: 0 @@ -10155,6 +11271,81 @@ MonoBehaviour: m_EditorClassIdentifier: content: {fileID: 858538435} trackingSpace: {fileID: 881994610} +--- !u!1 &1629901999 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1629902000} + - component: {fileID: 1629902002} + - component: {fileID: 1629902001} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1629902000 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629901999} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 455413004} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 150, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1629902001 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629901999} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 01674f533e98ba544a7bb592e2f52669, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &1629902002 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1629901999} + m_CullTransparentMesh: 0 --- !u!1 &1644097589 GameObject: m_ObjectHideFlags: 0 @@ -11260,6 +12451,43 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1823234009} m_CullTransparentMesh: 0 +--- !u!1 &1829862259 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1829862260} + m_Layer: 5 + m_Name: MostRecent + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1829862260 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1829862259} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1480305969} + - {fileID: 907885704} + m_Father: {fileID: 240885095} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 1} + m_AnchorMax: {x: 0, y: 1} + m_AnchoredPosition: {x: 1400, y: -75} + m_SizeDelta: {x: 600, y: 150} + m_Pivot: {x: 0.5, y: 0.5} --- !u!1 &1839702706 GameObject: m_ObjectHideFlags: 0 @@ -12478,6 +13706,81 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 2009369171} m_CullTransparentMesh: 0 +--- !u!1 &2017584414 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 2017584415} + - component: {fileID: 2017584417} + - component: {fileID: 2017584416} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &2017584415 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017584414} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1181631556} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.5, y: 0.5} + m_AnchorMax: {x: 0.5, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 150, y: 150} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &2017584416 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017584414} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI, + Version=1.0.0.0, Culture=neutral, PublicKeyToken=null + m_Sprite: {fileID: 21300000, guid: 01674f533e98ba544a7bb592e2f52669, type: 3} + m_Type: 0 + m_PreserveAspect: 0 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &2017584417 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 2017584414} + m_CullTransparentMesh: 0 --- !u!1 &2025011530 GameObject: m_ObjectHideFlags: 0 diff --git a/Assets/Scripts/AppProcessor.cs b/Assets/Scripts/AppProcessor.cs index 19948b11..dddf27cb 100644 --- a/Assets/Scripts/AppProcessor.cs +++ b/Assets/Scripts/AppProcessor.cs @@ -23,6 +23,7 @@ public class ProcessedApp public string Tab1Name; public string Tab2Name; public string IconPath; + public long LastTimeUsed; } public class AppProcessor @@ -60,6 +61,9 @@ class JsonAppNamesEntry public const string Tab_2D = "2D"; public const string Tab_All = "All"; + // LastUsage lookback days + const int LastUsedLookbackDays = 30; + public static readonly string[] Auto_Tabs = { Tab_Quest, Tab_Go, Tab_2D }; public static Dictionary ProcessApps(Config config) @@ -79,6 +83,14 @@ public static Dictionary ProcessApps(Config config) int numApps = currentActivity.Call("getSize"); Debug.Log("# installed apps: " + numApps); + var processedLastTimeUsed = false; + if (config.sortMode.Equals(Config.Sort_MostRecent, StringComparison.OrdinalIgnoreCase)) + { + // Process last time used for each app + currentActivity.Call("processLastTimeUsed", LastUsedLookbackDays); + processedLastTimeUsed = true; + } + // Add current package name to excludedPackageNames to filter it out excludedPackageNames.Add(currentActivity.Call("getPackageName")); @@ -102,6 +114,7 @@ public static Dictionary ProcessApps(Config config) { var packageName = currentActivity.Call("getPackageName", i); var appName = currentActivity.Call("getAppName", i); + var lastTimeUsed = processedLastTimeUsed ? currentActivity.Call("getLastTimeUsed", i) : 0; if (excludedPackageNames.Contains(packageName)) { @@ -132,7 +145,8 @@ public static Dictionary ProcessApps(Config config) tabName = Tab_Go; } - apps.Add(packageName, new ProcessedApp { PackageName = packageName, Index = i, AutoTabName = tabName, AppName = appName }); + apps.Add(packageName, new ProcessedApp { PackageName = packageName, Index = i, + AutoTabName = tabName, AppName = appName, LastTimeUsed = lastTimeUsed }); Debug.LogFormat("[{0}] package: {1}, name: {2}, auto tab: {3}", i, packageName, appName, tabName); } @@ -239,6 +253,7 @@ private static void ProcessAppNameOverrideJsonFile(Dictionary public class GridPopulation : MonoBehaviour { + public class AppComparer : IComparer + { + public int Compare(ProcessedApp x, ProcessedApp y) + { + // Order by last used and then alphabetical to break ties + return (x.LastTimeUsed != y.LastTimeUsed) ? + (y.LastTimeUsed - x.LastTimeUsed > 0 ? 1 : -1) : + string.Compare(x.AppName, y.AppName, true); + } + } + // Grid container game object public GameObject panelContainer; @@ -168,8 +179,8 @@ private async Task PopulatePanelContentAsync( } // Populate grid with app information (name & icon) - // Sort by app name - foreach (var app in apps.OrderBy(key => key.Value.AppName)) + // Sort by custom comparer + foreach (var app in apps.OrderBy(key => key.Value, new AppComparer())) { // Add to all tab await AddCellToGridAsync(app.Value, gridContents[AppProcessor.Tab_All].transform); diff --git a/Assets/Scripts/SettingsHandler.cs b/Assets/Scripts/SettingsHandler.cs index ada576a0..e7631f9d 100644 --- a/Assets/Scripts/SettingsHandler.cs +++ b/Assets/Scripts/SettingsHandler.cs @@ -33,6 +33,11 @@ public class SettingsHandler : MonoBehaviour public Toggle tabsCustomLeft; public Toggle tabsCustomRight; + public Toggle sortAZ; + public Toggle sortMostRecent; + + public GameObject usageStatsPermText; + private bool deletedHiddenAppsFile = false; private Config config = null; @@ -60,6 +65,9 @@ public void OpenSettings() var rowsText = this.gridRowsText.GetComponent(); rowsText.text = string.Format("{0} Rows", this.config.gridSize.rows); + // initialize sort mode + InitializeSortMode(); + // Set 2D toggle this.show2DToggle.GetComponent().SetIsOnWithoutNotify(this.config.show2D); @@ -144,6 +152,65 @@ public void UpdateGridRowText() rowsText.text = string.Format("{0} Rows", rows); } + private bool HasUsageStatsPermissions() + { + // Check if we have UsageStats permission + using (AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) + using (AndroidJavaObject currentActivity = unity.GetStatic("currentActivity")) + { + var hasUsageStatsPermissions = currentActivity.Call("hasUsageStatsPermissions"); + Debug.LogFormat("UsageStatsPermission: {0}", hasUsageStatsPermissions); + return hasUsageStatsPermissions; + } + } + + private void InitializeSortMode() + { + bool hasUsageStatsPermissions = HasUsageStatsPermissions(); + + // Indicate whether we need to get permission + this.usageStatsPermText.SetActive(!hasUsageStatsPermissions); + + if (hasUsageStatsPermissions && + this.config.sortMode.Equals(Config.Sort_MostRecent, StringComparison.OrdinalIgnoreCase)) + { + // Have UsageStats permission, so set it to on + this.sortMostRecent.isOn = true; + } + else + { + // Default is to sort by AZ + this.sortAZ.isOn = true; + } + + this.sortMostRecent.onValueChanged.AddListener((bool isOn) => { + if (isOn) + { + // Re-check permissions + bool hasPerms = HasUsageStatsPermissions(); + + // Indicate whether we need to get permission + this.usageStatsPermText.SetActive(!hasPerms); + + if (!hasPerms) + { + this.sortMostRecent.SetIsOnWithoutNotify(false); + this.sortAZ.SetIsOnWithoutNotify(true); + + // Ask for permissions + using (AndroidJavaClass unity = new AndroidJavaClass("com.unity3d.player.UnityPlayer")) + using (AndroidJavaObject currentActivity = unity.GetStatic("currentActivity")) + { + currentActivity.Call("grantUsageStatsPermission"); + + // Quest doesn't like multiple apps running - kill ourself + UnityEngine.Application.Quit(); + } + } + } + }); + } + private void PersistConfig() { bool saveConfig = false; @@ -160,6 +227,23 @@ private void PersistConfig() saveConfig = true; } + // Update sort mode + string sortMode; + if (this.sortMostRecent.isOn) + { + sortMode = Config.Sort_MostRecent; + } + else + { + sortMode = Config.Sort_AZ; + } + + if (!this.config.sortMode.Equals(sortMode, StringComparison.OrdinalIgnoreCase)) + { + this.config.sortMode = sortMode; + saveConfig = true; + } + // Update 2D toggle var show2D = this.show2DToggle.GetComponent().isOn; if (show2D != this.config.show2D) From 5c34ca935349cb7a2c5461f996cd7e7d5ad93082 Mon Sep 17 00:00:00 2001 From: tverona1 Date: Fri, 23 Aug 2019 21:21:05 -0700 Subject: [PATCH 2/5] Adding Go controller mesh --- .../OculusGoController_albedo.tga | Bin 0 -> 343799 bytes .../OculusGoController_albedo.tga.meta | 84 +++ Assets/Resources/OVRBuildConfig.asset | 2 +- Assets/Scenes/QuestAppLauncher.unity | 481 +++++++++++++++++- ProjectSettings/ProjectSettings.asset | 2 +- 5 files changed, 562 insertions(+), 7 deletions(-) create mode 100644 Assets/Oculus/VR/Textures/OculusGoController/OculusGoController_albedo.tga create mode 100644 Assets/Oculus/VR/Textures/OculusGoController/OculusGoController_albedo.tga.meta diff --git a/Assets/Oculus/VR/Textures/OculusGoController/OculusGoController_albedo.tga b/Assets/Oculus/VR/Textures/OculusGoController/OculusGoController_albedo.tga new file mode 100644 index 0000000000000000000000000000000000000000..394127ffe52847f7dd785bd262ab5c695037e76e GIT binary patch literal 343799 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 literal 0 HcmV?d00001 diff --git a/Assets/Oculus/VR/Textures/OculusGoController/OculusGoController_albedo.tga.meta b/Assets/Oculus/VR/Textures/OculusGoController/OculusGoController_albedo.tga.meta new file mode 100644 index 00000000..d6fd9a2c --- /dev/null +++ b/Assets/Oculus/VR/Textures/OculusGoController/OculusGoController_albedo.tga.meta @@ -0,0 +1,84 @@ +fileFormatVersion: 2 +guid: 6fd132ea4bdd3ec4298a583f001ed5ab +timeCreated: 1513127630 +licenseType: Store +TextureImporter: + fileIDToRecycleName: {} + serializedVersion: 4 + mipmaps: + mipMapMode: 0 + enableMipMap: 1 + sRGBTexture: 0 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapMode: -1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spritePixelsToUnits: 100 + alphaUsage: 1 + alphaIsTransparency: 0 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Standalone + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + - buildTarget: Android + maxTextureSize: 2048 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/OVRBuildConfig.asset b/Assets/Resources/OVRBuildConfig.asset index cf5cd6c5..f2d36f8a 100644 --- a/Assets/Resources/OVRBuildConfig.asset +++ b/Assets/Resources/OVRBuildConfig.asset @@ -12,6 +12,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 20553fac56ec59645857c0732b787431, type: 3} m_Name: OVRBuildConfig m_EditorClassIdentifier: - androidSDKPath: + androidSDKPath: C:\Users\tvero\AppData\Local\Android\Sdk gradlePath: jdkPath: diff --git a/Assets/Scenes/QuestAppLauncher.unity b/Assets/Scenes/QuestAppLauncher.unity index a35f8cbd..3b534fee 100644 --- a/Assets/Scenes/QuestAppLauncher.unity +++ b/Assets/Scenes/QuestAppLauncher.unity @@ -1413,7 +1413,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 4761956870075864, guid: 5c706126fee98a74ea509233e2a32a7f, type: 3} propertyPath: m_RootOrder - value: 2 + value: 1 objectReference: {fileID: 0} - target: {fileID: 114228874124863804, guid: 5c706126fee98a74ea509233e2a32a7f, type: 3} @@ -2277,7 +2277,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 1457050908} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &340813590 Animator: @@ -2776,6 +2776,39 @@ RectTransform: m_AnchoredPosition: {x: 0, y: 75} m_SizeDelta: {x: 0, y: 150} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &407379521 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 407379522} + m_Layer: 0 + m_Name: OculusGoController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &407379522 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 407379521} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 1225119221} + - {fileID: 696398113} + - {fileID: 1226067460} + m_Father: {fileID: 174121772} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &424758894 GameObject: m_ObjectHideFlags: 0 @@ -4133,7 +4166,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 174121772} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &647218112 Animator: @@ -4382,6 +4415,127 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 684313056} m_CullTransparentMesh: 0 +--- !u!1 &696398112 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 696398113} + - component: {fileID: 696398114} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &696398113 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696398112} + m_LocalRotation: {x: 0.46193978, y: 0.33141357, z: -0.19134171, w: 0.8001032} + m_LocalPosition: {x: 2, y: 2, z: 4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 407379522} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 60, y: 45, z: 0} +--- !u!108 &696398114 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696398112} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 +--- !u!1 &696687901 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 696687902} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &696687902 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 696687901} + m_LocalRotation: {x: -0.030843573, y: -0.7064338, z: 0.030843573, w: 0.7064338} + m_LocalPosition: {x: 0, y: 0.75, z: 4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1644749161} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 5} --- !u!1 &715250739 GameObject: m_ObjectHideFlags: 0 @@ -8542,6 +8696,115 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1215736345} m_CullTransparentMesh: 0 +--- !u!1 &1225119220 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1225119221} + m_Layer: 0 + m_Name: Camera + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1225119221 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1225119220} + m_LocalRotation: {x: -0.030843573, y: -0.7064338, z: 0.030843573, w: 0.7064338} + m_LocalPosition: {x: 0, y: 0.75, z: 4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 407379522} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: -90.00001, z: 5} +--- !u!1 &1226067459 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1226067460} + - component: {fileID: 1226067462} + - component: {fileID: 1226067461} + m_Layer: 0 + m_Name: Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1226067460 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1226067459} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 407379522} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1226067461 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1226067459} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4b64c74a165ab944995c86640c16457e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1226067462 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1226067459} + m_Mesh: {fileID: 4300000, guid: 2f2ef4c81a28b3d49a5b57f888743989, type: 3} --- !u!1 &1251844110 GameObject: m_ObjectHideFlags: 0 @@ -10566,6 +10829,97 @@ MonoBehaviour: m_TypeName: UnityEngine.UI.Toggle+ToggleEvent, UnityEngine.UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null m_IsOn: 0 +--- !u!1 &1524814165 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1524814166} + - component: {fileID: 1524814167} + m_Layer: 0 + m_Name: Directional Light + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1524814166 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1524814165} + m_LocalRotation: {x: 0.46193978, y: 0.33141357, z: -0.19134171, w: 0.8001032} + m_LocalPosition: {x: 2, y: 2, z: 4} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1644749161} + m_RootOrder: 1 + m_LocalEulerAnglesHint: {x: 60, y: 45, z: 0} +--- !u!108 &1524814167 +Light: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1524814165} + m_Enabled: 1 + serializedVersion: 9 + m_Type: 1 + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_Intensity: 1 + m_Range: 10 + m_SpotAngle: 30 + m_InnerSpotAngle: 21.80208 + m_CookieSize: 10 + m_Shadows: + m_Type: 0 + m_Resolution: -1 + m_CustomResolution: -1 + m_Strength: 1 + m_Bias: 0.05 + m_NormalBias: 0.4 + m_NearPlane: 0.2 + m_CullingMatrixOverride: + e00: 1 + e01: 0 + e02: 0 + e03: 0 + e10: 0 + e11: 1 + e12: 0 + e13: 0 + e20: 0 + e21: 0 + e22: 1 + e23: 0 + e30: 0 + e31: 0 + e32: 0 + e33: 1 + m_UseCullingMatrixOverride: 0 + m_Cookie: {fileID: 0} + m_DrawHalo: 0 + m_Flare: {fileID: 0} + m_RenderMode: 0 + m_CullingMask: + serializedVersion: 2 + m_Bits: 4294967295 + m_RenderingLayerMask: 1 + m_Lightmapping: 4 + m_LightShadowCasterMode: 0 + m_AreaSize: {x: 1, y: 1} + m_BounceIntensity: 1 + m_ColorTemperature: 6570 + m_UseColorTemperature: 0 + m_BoundingSphereOverride: {x: 0, y: 0, z: 0, w: 0} + m_UseBoundingSphereOverride: 0 + m_ShadowRadius: 0 + m_ShadowAngle: 0 --- !u!1 &1550751410 GameObject: m_ObjectHideFlags: 0 @@ -11503,6 +11857,39 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1644097589} m_CullTransparentMesh: 0 +--- !u!1 &1644749160 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1644749161} + m_Layer: 0 + m_Name: OculusGoController + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1644749161 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1644749160} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: + - {fileID: 696687902} + - {fileID: 1524814166} + - {fileID: 1803191904} + m_Father: {fileID: 1457050908} + m_RootOrder: 0 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &1659874981 GameObject: m_ObjectHideFlags: 0 @@ -11963,6 +12350,85 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1802709557} m_CullTransparentMesh: 0 +--- !u!1 &1803191903 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1803191904} + - component: {fileID: 1803191906} + - component: {fileID: 1803191905} + m_Layer: 0 + m_Name: Mesh + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!4 &1803191904 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1803191903} + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_Children: [] + m_Father: {fileID: 1644749161} + m_RootOrder: 2 + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!23 &1803191905 +MeshRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1803191903} + m_Enabled: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 + m_DynamicOccludee: 1 + m_MotionVectors: 1 + m_LightProbeUsage: 0 + m_ReflectionProbeUsage: 0 + m_RayTracingMode: 2 + m_RenderingLayerMask: 1 + m_RendererPriority: 0 + m_Materials: + - {fileID: 2100000, guid: 4b64c74a165ab944995c86640c16457e, type: 2} + m_StaticBatchInfo: + firstSubMesh: 0 + subMeshCount: 0 + m_StaticBatchRoot: {fileID: 0} + m_ProbeAnchor: {fileID: 0} + m_LightProbeVolumeOverride: {fileID: 0} + m_ScaleInLightmap: 1 + m_ReceiveGI: 1 + m_PreserveUVs: 0 + m_IgnoreNormalsForChartDetection: 0 + m_ImportantGI: 0 + m_StitchLightmapSeams: 1 + m_SelectedEditorRenderState: 3 + m_MinimumChartSize: 4 + m_AutoUVMaxDistance: 0.5 + m_AutoUVMaxAngle: 89 + m_LightmapParameters: {fileID: 0} + m_SortingLayerID: 0 + m_SortingLayer: 0 + m_SortingOrder: 0 +--- !u!33 &1803191906 +MeshFilter: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1803191903} + m_Mesh: {fileID: 4300000, guid: 2f2ef4c81a28b3d49a5b57f888743989, type: 3} --- !u!1 &1804537873 GameObject: m_ObjectHideFlags: 0 @@ -12815,7 +13281,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 1457050908} - m_RootOrder: 0 + m_RootOrder: 1 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &1875820934 Animator: @@ -13812,7 +14278,7 @@ Transform: m_LocalScale: {x: 1, y: 1, z: 1} m_Children: [] m_Father: {fileID: 174121772} - m_RootOrder: 1 + m_RootOrder: 2 m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!95 &2025011532 Animator: @@ -14422,6 +14888,11 @@ PrefabInstance: propertyPath: m_modelOculusTouchRiftRightController value: objectReference: {fileID: 0} + - target: {fileID: 114318095738077550, guid: 411c0b99f954d1d4884fa0d6256933cf, + type: 3} + propertyPath: m_modelOculusGoController + value: + objectReference: {fileID: 1644749160} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 411c0b99f954d1d4884fa0d6256933cf, type: 3} --- !u!1 &2057963232 diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index b11dae4b..f1190de9 100644 --- a/ProjectSettings/ProjectSettings.asset +++ b/ProjectSettings/ProjectSettings.asset @@ -120,7 +120,7 @@ PlayerSettings: 16:10: 1 16:9: 1 Others: 1 - bundleVersion: 0.6 + bundleVersion: 0.9 preloadedAssets: [] metroInputSource: 0 wsaTransparentSwapchain: 0 From 5a1db191852c68e352d1ce3e48cbae18de09c428 Mon Sep 17 00:00:00 2001 From: tverona1 Date: Fri, 23 Aug 2019 22:11:43 -0700 Subject: [PATCH 3/5] Only show auto tabs that are actually populated --- Assets/Resources/OVRBuildConfig.asset | 2 +- Assets/Scripts/GridPopulation.cs | 11 ++++++++--- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/Assets/Resources/OVRBuildConfig.asset b/Assets/Resources/OVRBuildConfig.asset index f2d36f8a..cf5cd6c5 100644 --- a/Assets/Resources/OVRBuildConfig.asset +++ b/Assets/Resources/OVRBuildConfig.asset @@ -12,6 +12,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 20553fac56ec59645857c0732b787431, type: 3} m_Name: OVRBuildConfig m_EditorClassIdentifier: - androidSDKPath: C:\Users\tvero\AppData\Local\Android\Sdk + androidSDKPath: gradlePath: jdkPath: diff --git a/Assets/Scripts/GridPopulation.cs b/Assets/Scripts/GridPopulation.cs index c0aeb6b1..65d3fa7f 100644 --- a/Assets/Scripts/GridPopulation.cs +++ b/Assets/Scripts/GridPopulation.cs @@ -125,17 +125,22 @@ private async Task PopulatePanelContentAsync( var rightTabs = new List(); // Set auto tabs + var autoTabs = AppProcessor.Auto_Tabs.Intersect( + apps.Where(x => null != x.Value.AutoTabName).Select(x => x.Value.AutoTabName) + .Distinct(StringComparer.CurrentCultureIgnoreCase).ToList(), + StringComparer.CurrentCultureIgnoreCase); + if (config.autoCategory.Equals(Config.Category_Top, StringComparison.OrdinalIgnoreCase)) { - topTabs.AddRange(AppProcessor.Auto_Tabs); + topTabs.AddRange(autoTabs); } else if (config.autoCategory.Equals(Config.Category_Left, StringComparison.OrdinalIgnoreCase)) { - leftTabs.AddRange(AppProcessor.Auto_Tabs); + leftTabs.AddRange(autoTabs); } else if (config.autoCategory.Equals(Config.Category_Right, StringComparison.OrdinalIgnoreCase)) { - rightTabs.AddRange(AppProcessor.Auto_Tabs); + rightTabs.AddRange(autoTabs); } // Set custom tabs, sorted alphabetically From 3b0201304ee93981e77b2b63941463575d1f3956 Mon Sep 17 00:00:00 2001 From: tverona1 Date: Sat, 24 Aug 2019 13:30:36 -0700 Subject: [PATCH 4/5] Fix tracking origin type Fixed tracking origin type (set it to Floor Level instead of Eye Level) --- Assets/Resources/OVRBuildConfig.asset | 2 +- Assets/Scenes/QuestAppLauncher.unity | 19 +++++++++++-------- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/Assets/Resources/OVRBuildConfig.asset b/Assets/Resources/OVRBuildConfig.asset index cf5cd6c5..f2d36f8a 100644 --- a/Assets/Resources/OVRBuildConfig.asset +++ b/Assets/Resources/OVRBuildConfig.asset @@ -12,6 +12,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 20553fac56ec59645857c0732b787431, type: 3} m_Name: OVRBuildConfig m_EditorClassIdentifier: - androidSDKPath: + androidSDKPath: C:\Users\tvero\AppData\Local\Android\Sdk gradlePath: jdkPath: diff --git a/Assets/Scenes/QuestAppLauncher.unity b/Assets/Scenes/QuestAppLauncher.unity index 3b534fee..32e3ddc8 100644 --- a/Assets/Scenes/QuestAppLauncher.unity +++ b/Assets/Scenes/QuestAppLauncher.unity @@ -2791,7 +2791,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &407379522 Transform: m_ObjectHideFlags: 0 @@ -7369,7 +7369,7 @@ RectTransform: m_GameObject: {fileID: 1113839878} m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} m_LocalPosition: {x: 0, y: 0, z: 7.3} - m_LocalScale: {x: 0.0024, y: 0.003, z: 1} + m_LocalScale: {x: 0.0025, y: 0.0028, z: 1} m_Children: - {fileID: 1950750522} - {fileID: 1213035640} @@ -7378,7 +7378,7 @@ RectTransform: m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0.5, y: 0.5} m_AnchorMax: {x: 0.5, y: 0.5} - m_AnchoredPosition: {x: 0, y: 3} + m_AnchoredPosition: {x: 0, y: 2.4} m_SizeDelta: {x: 0, y: 0} m_Pivot: {x: 0.5, y: 0.5} --- !u!114 &1113839881 @@ -11872,7 +11872,7 @@ GameObject: m_Icon: {fileID: 0} m_NavMeshLayer: 0 m_StaticEditorFlags: 0 - m_IsActive: 1 + m_IsActive: 0 --- !u!4 &1644749161 Transform: m_ObjectHideFlags: 0 @@ -12594,7 +12594,7 @@ PrefabInstance: objectReference: {fileID: 0} - target: {fileID: 400004, guid: 126d619cf4daa52469682f85c1378b4a, type: 3} propertyPath: m_LocalPosition.y - value: 1.44 + value: 1.75 objectReference: {fileID: 0} - target: {fileID: 400004, guid: 126d619cf4daa52469682f85c1378b4a, type: 3} propertyPath: m_LocalPosition.z @@ -12629,6 +12629,10 @@ PrefabInstance: propertyPath: m_Enabled value: 0 objectReference: {fileID: 0} + - target: {fileID: 11400000, guid: 126d619cf4daa52469682f85c1378b4a, type: 3} + propertyPath: _trackingOriginType + value: 1 + objectReference: {fileID: 0} m_RemovedComponents: - {fileID: 114473266101150724, guid: 126d619cf4daa52469682f85c1378b4a, type: 3} m_SourcePrefab: {fileID: 100100000, guid: 126d619cf4daa52469682f85c1378b4a, type: 3} @@ -13665,8 +13669,7 @@ LineRenderer: m_RayTracingMode: 0 m_RenderingLayerMask: 1 m_RendererPriority: 0 - m_Materials: - - {fileID: 2100000, guid: 3fac3b9744290eb4c89b0e4ffd5fe085, type: 2} + m_Materials: [] m_StaticBatchInfo: firstSubMesh: 0 subMeshCount: 0 @@ -14892,7 +14895,7 @@ PrefabInstance: type: 3} propertyPath: m_modelOculusGoController value: - objectReference: {fileID: 1644749160} + objectReference: {fileID: 0} m_RemovedComponents: [] m_SourcePrefab: {fileID: 100100000, guid: 411c0b99f954d1d4884fa0d6256933cf, type: 3} --- !u!1 &2057963232 From 5609338fb5b6103a6631c87a8c9070aaddd27eba Mon Sep 17 00:00:00 2001 From: tverona1 Date: Sat, 24 Aug 2019 17:49:30 -0700 Subject: [PATCH 5/5] Fix json deserialization issue - Fix json deserialization issue that resulted in duplicate repo entries in config - Download to temp filename and rename to destination (to handle scenario of file contains error body) --- Assets/Resources/OVRBuildConfig.asset | 2 +- Assets/Scripts/AssetsDownloader.cs | 35 ++++++++++++++++++++++++--- Assets/Scripts/Config.cs | 16 +++++++++--- 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/Assets/Resources/OVRBuildConfig.asset b/Assets/Resources/OVRBuildConfig.asset index f2d36f8a..cf5cd6c5 100644 --- a/Assets/Resources/OVRBuildConfig.asset +++ b/Assets/Resources/OVRBuildConfig.asset @@ -12,6 +12,6 @@ MonoBehaviour: m_Script: {fileID: 11500000, guid: 20553fac56ec59645857c0732b787431, type: 3} m_Name: OVRBuildConfig m_EditorClassIdentifier: - androidSDKPath: C:\Users\tvero\AppData\Local\Android\Sdk + androidSDKPath: gradlePath: jdkPath: diff --git a/Assets/Scripts/AssetsDownloader.cs b/Assets/Scripts/AssetsDownloader.cs index 65721358..8ca6adbb 100644 --- a/Assets/Scripts/AssetsDownloader.cs +++ b/Assets/Scripts/AssetsDownloader.cs @@ -25,6 +25,9 @@ public class AssetsDownloader // Manifest file to track what we've downloaded const string DownloadManifestFile = "download_manifest.json"; + // Temporary filename for download + const string TempDownloadFileExtention = ".tmp_download"; + // GitHub API url const string GithubApiUrl = @"http://api.github.com/repos/"; @@ -179,7 +182,9 @@ private async Task> DownloadAssetsMetadata( { // Get asset info from repos var assetsInfo = new Dictionary(StringComparer.OrdinalIgnoreCase); - var reposLoaded = new HashSet(); + + // Get the set of repo URIs (removing any duplicates) + var configRepos = new HashSet(); foreach (var item in config.downloadRepos) { if (null == item.type || !string.Equals(item.type, Config.DownloadRepo_Type_GitHub, StringComparison.OrdinalIgnoreCase)) @@ -188,11 +193,17 @@ private async Task> DownloadAssetsMetadata( continue; } + configRepos.Add(item.repoUri); + } + + var reposLoaded = new HashSet(); + foreach (var repoUri in configRepos) + { // Get assets from the GitHub repo - var repoLoaded = await GetAssetsInfoFromGithubRepoAsync(item.repoUri, assetsInfo, downloadProgress); + var repoLoaded = await GetAssetsInfoFromGithubRepoAsync(repoUri, assetsInfo, downloadProgress); if (repoLoaded) { - reposLoaded.Add(item.repoUri); + reposLoaded.Add(repoUri); } } @@ -368,6 +379,7 @@ private async Task DownloadAssetFromGitHubRepoAsync(string name, AssetInfo IDownloadProgress downloadProgress) { var filePath = Path.Combine(GetOrCreateDownloadPath(), name); + var tempFilePath = filePath + TempDownloadFileExtention; Debug.LogFormat("Downloading asset {0} from {1}", filePath, assetInfo.Url); try @@ -380,7 +392,7 @@ private async Task DownloadAssetFromGitHubRepoAsync(string name, AssetInfo { downloadProgress.OnDownloadStart(name); } - var downloadHandler = new DownloadHandlerFileWithProgress(filePath, downloadProgress.OnDownloadProgress); + var downloadHandler = new DownloadHandlerFileWithProgress(tempFilePath, downloadProgress.OnDownloadProgress); downloadHandler.removeFileOnAbort = true; req.downloadHandler = downloadHandler; await req.SendWebRequest(); @@ -394,9 +406,24 @@ private async Task DownloadAssetFromGitHubRepoAsync(string name, AssetInfo downloadProgress.OnError(string.Format("Error updating: {0} ({1})", req.error, assetInfo.Url)); } + + if (File.Exists(tempFilePath)) + { + File.Delete(tempFilePath); + } + return false; } + // Rename temp file to desination file to ensure that we are not downloading + // an error body message into the destination file. + if (File.Exists(filePath)) + { + File.Delete(filePath); + } + + File.Move(tempFilePath, filePath); + if (null != downloadProgress) { downloadProgress.OnDownloadFinish(); diff --git a/Assets/Scripts/Config.cs b/Assets/Scripts/Config.cs index 4597467b..08298cb5 100644 --- a/Assets/Scripts/Config.cs +++ b/Assets/Scripts/Config.cs @@ -67,10 +67,18 @@ public class DownloadRepo public bool autoUpdate = false; // Github download repos - public List downloadRepos = new List() + public List downloadRepos = new List(); + + public Config(bool initDefaults = false) { - new DownloadRepo { repoUri = DownloadRepo_Default, type = DownloadRepo_Type_GitHub } - }; + if (initDefaults) + { + // We must initialize any default collection values here. Otherwise, if we initialize them inline, + // we'll keep adding duplicate values whenever we persist via JSON.NET (since it invokes the default contructor as part + // of deserialization, which again adds the default value). + this.downloadRepos.Add(new DownloadRepo { repoUri = DownloadRepo_Default, type = DownloadRepo_Type_GitHub }); + } + } } /// @@ -109,7 +117,7 @@ static public Config LoadConfig() } // Return default config - return new Config(); + return new Config(true); } ///