Compare commits
35 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf44cf9432 | ||
|
|
d7e4e679f7 | ||
|
|
f4debfca32 | ||
|
|
b270433188 | ||
|
|
ef98228aab | ||
|
|
7135691a01 | ||
|
|
7c50d183f3 | ||
|
|
72b3f4212c | ||
|
|
6c3d5543b3 | ||
|
|
07b3b9ec40 | ||
|
|
59caa0e6dc | ||
|
|
0429d18c1d | ||
|
|
0027452b92 | ||
|
|
62c3569aef | ||
|
|
82421eb690 | ||
|
|
64c243fb2a | ||
|
|
14e44e456a | ||
|
|
bd39092926 | ||
|
|
83b9844fa7 | ||
|
|
95c1f824ca | ||
|
|
24632b9342 | ||
|
|
d172c2446b | ||
|
|
4563d42668 | ||
|
|
9076e52a30 | ||
|
|
667d69ff79 | ||
|
|
833701faeb | ||
|
|
97aa3b9fdb | ||
|
|
4a1d666855 | ||
|
|
a2c0ec0747 | ||
|
|
72b499d08d | ||
|
|
6cb04f2574 | ||
|
|
2d5d73c90a | ||
|
|
d4bc25c8cd | ||
|
|
a8b4bcd17c | ||
| a9247df300 |
16
.github/workflows/build.yml
vendored
16
.github/workflows/build.yml
vendored
@@ -2,9 +2,9 @@ name: Build
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push:
|
push:
|
||||||
branches: [ "master" ]
|
branches: [ "dev" ]
|
||||||
pull_request:
|
pull_request:
|
||||||
branches: [ "master" ]
|
branches: [ "dev" ]
|
||||||
workflow_dispatch: {}
|
workflow_dispatch: {}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
@@ -33,6 +33,7 @@ jobs:
|
|||||||
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
|
UNITY_LICENSE: ${{ secrets.UNITY_LICENSE }}
|
||||||
with:
|
with:
|
||||||
githubToken: ${{ secrets.GITHUB_TOKEN }}
|
githubToken: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
if: ${{ github.ref_name == 'master' }}
|
||||||
|
|
||||||
# Build
|
# Build
|
||||||
- name: Build project
|
- name: Build project
|
||||||
@@ -44,11 +45,20 @@ jobs:
|
|||||||
with:
|
with:
|
||||||
targetPlatform: Android
|
targetPlatform: Android
|
||||||
allowDirtyBuild: true
|
allowDirtyBuild: true
|
||||||
|
buildName: "HooverHighQuestAppLauncher-DEV"
|
||||||
|
|
||||||
# Output
|
# Output
|
||||||
|
- name: Upload build
|
||||||
|
uses: softprops/action-gh-release@v1
|
||||||
|
with:
|
||||||
|
files: build/Android/*.apk
|
||||||
|
token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
tag_name: "1.0.0-dev"
|
||||||
|
|
||||||
|
# Upload dir
|
||||||
- uses: actions/upload-artifact@v2
|
- uses: actions/upload-artifact@v2
|
||||||
with:
|
with:
|
||||||
name: Build
|
name: Build-dev
|
||||||
path: build
|
path: build
|
||||||
|
|
||||||
# Return License
|
# Return License
|
||||||
|
|||||||
@@ -10,6 +10,7 @@
|
|||||||
</intent-filter>
|
</intent-filter>
|
||||||
</activity>
|
</activity>
|
||||||
</application>
|
</application>
|
||||||
|
<uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" />
|
||||||
<uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1" />
|
<uses-feature android:name="android.hardware.vr.headtracking" android:required="false" android:version="1" />
|
||||||
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
|
<uses-permission android:name="android.permission.PACKAGE_USAGE_STATS" />
|
||||||
</manifest>
|
</manifest>
|
||||||
|
|||||||
@@ -20857,7 +20857,7 @@ GameObject:
|
|||||||
m_Icon: {fileID: 0}
|
m_Icon: {fileID: 0}
|
||||||
m_NavMeshLayer: 0
|
m_NavMeshLayer: 0
|
||||||
m_StaticEditorFlags: 0
|
m_StaticEditorFlags: 0
|
||||||
m_IsActive: 1
|
m_IsActive: 0
|
||||||
--- !u!224 &2124784240
|
--- !u!224 &2124784240
|
||||||
RectTransform:
|
RectTransform:
|
||||||
m_ObjectHideFlags: 0
|
m_ObjectHideFlags: 0
|
||||||
@@ -20934,7 +20934,7 @@ MonoBehaviour:
|
|||||||
m_PersistentCalls:
|
m_PersistentCalls:
|
||||||
m_Calls:
|
m_Calls:
|
||||||
- m_Target: {fileID: 883330328}
|
- m_Target: {fileID: 883330328}
|
||||||
m_MethodName: OpenSettings
|
m_MethodName: ""
|
||||||
m_Mode: 1
|
m_Mode: 1
|
||||||
m_Arguments:
|
m_Arguments:
|
||||||
m_ObjectArgument: {fileID: 0}
|
m_ObjectArgument: {fileID: 0}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@@ -14,6 +14,55 @@ using Newtonsoft.Json.Linq;
|
|||||||
|
|
||||||
namespace QuestAppLauncher
|
namespace QuestAppLauncher
|
||||||
{
|
{
|
||||||
|
public class InstallAPK
|
||||||
|
{
|
||||||
|
private bool installApp(string apkPath)
|
||||||
|
{
|
||||||
|
bool success = true;
|
||||||
|
//GameObject.Find("TextDebug").GetComponent<Text>().text = "Installing App";
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//Get Activity then Context
|
||||||
|
AndroidJavaClass unityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer");
|
||||||
|
AndroidJavaObject currentActivity = unityPlayer.GetStatic<AndroidJavaObject>("currentActivity");
|
||||||
|
AndroidJavaObject unityContext = currentActivity.Call<AndroidJavaObject>("getApplicationContext");
|
||||||
|
|
||||||
|
//Get the package Name
|
||||||
|
string packageName = unityContext.Call<string>("getPackageName");
|
||||||
|
string authority = packageName + ".fileprovider";
|
||||||
|
|
||||||
|
AndroidJavaClass intentObj = new AndroidJavaClass("android.content.Intent");
|
||||||
|
string ACTION_VIEW = intentObj.GetStatic<string>("ACTION_VIEW");
|
||||||
|
AndroidJavaObject intent = new AndroidJavaObject("android.content.Intent", ACTION_VIEW);
|
||||||
|
|
||||||
|
|
||||||
|
int FLAG_ACTIVITY_NEW_TASK = intentObj.GetStatic<int>("FLAG_ACTIVITY_NEW_TASK");
|
||||||
|
int FLAG_GRANT_READ_URI_PERMISSION = intentObj.GetStatic<int>("FLAG_GRANT_READ_URI_PERMISSION");
|
||||||
|
|
||||||
|
//File fileObj = new File(String pathname);
|
||||||
|
AndroidJavaObject fileObj = new AndroidJavaObject("java.io.File", apkPath);
|
||||||
|
//FileProvider object that will be used to call it static function
|
||||||
|
AndroidJavaClass fileProvider = new AndroidJavaClass("android.support.v4.content.FileProvider");
|
||||||
|
//getUriForFile(Context context, String authority, File file)
|
||||||
|
AndroidJavaObject uri = fileProvider.CallStatic<AndroidJavaObject>("getUriForFile", unityContext, authority, fileObj);
|
||||||
|
|
||||||
|
intent.Call<AndroidJavaObject>("setDataAndType", uri, "application/vnd.android.package-archive");
|
||||||
|
intent.Call<AndroidJavaObject>("addFlags", FLAG_ACTIVITY_NEW_TASK);
|
||||||
|
intent.Call<AndroidJavaObject>("addFlags", FLAG_GRANT_READ_URI_PERMISSION);
|
||||||
|
currentActivity.Call("startActivity", intent);
|
||||||
|
|
||||||
|
//GameObject.Find("TextDebug").GetComponent<Text>().text = "Success";
|
||||||
|
}
|
||||||
|
catch (System.Exception e)
|
||||||
|
{
|
||||||
|
//GameObject.Find("TextDebug").GetComponent<Text>().text = "Error: " + e.Message;
|
||||||
|
success = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return success;
|
||||||
|
}
|
||||||
|
}
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Downloads assets (app icons packs and names files) from configured repos.
|
/// Downloads assets (app icons packs and names files) from configured repos.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -29,7 +78,12 @@ namespace QuestAppLauncher
|
|||||||
const string TempDownloadFileExtention = ".tmp_download";
|
const string TempDownloadFileExtention = ".tmp_download";
|
||||||
|
|
||||||
// GitHub API url
|
// GitHub API url
|
||||||
const string GithubApiUrl = @"http://api.github.com/repos/";
|
const string GithubApiUrl = @"http://api.github.com/";
|
||||||
|
|
||||||
|
// If Github account is a org set this to true
|
||||||
|
public bool isorg = true;
|
||||||
|
|
||||||
|
public string GithubUrl = "";
|
||||||
|
|
||||||
// Rate limit in minutes
|
// Rate limit in minutes
|
||||||
const int RateLimitInMins = 5;
|
const int RateLimitInMins = 5;
|
||||||
@@ -187,9 +241,9 @@ namespace QuestAppLauncher
|
|||||||
var configRepos = new HashSet<string>();
|
var configRepos = new HashSet<string>();
|
||||||
foreach (var item in config.downloadRepos)
|
foreach (var item in config.downloadRepos)
|
||||||
{
|
{
|
||||||
if (null == item.type || !string.Equals(item.type, Config.DownloadRepo_Type_GitHub, StringComparison.OrdinalIgnoreCase))
|
if (null == item.type || !string.Equals(item.type, Config.DownloadRepo_Type_GitHub, StringComparison.OrdinalIgnoreCase) || !string.Equals(item.type, Config.DownloadRepo_Type_PrivUrl, StringComparison.OrdinalIgnoreCase))
|
||||||
{
|
{
|
||||||
// For now, we only support GitHub repos
|
// For now, we only support GitHub repos, or our private update url
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -294,7 +348,12 @@ namespace QuestAppLauncher
|
|||||||
private async Task<bool> GetAssetsInfoFromGithubRepoAsync(string repoUri,
|
private async Task<bool> GetAssetsInfoFromGithubRepoAsync(string repoUri,
|
||||||
Dictionary<string, AssetInfo> assetsInfo, IDownloadProgress downloadProgress = null)
|
Dictionary<string, AssetInfo> assetsInfo, IDownloadProgress downloadProgress = null)
|
||||||
{
|
{
|
||||||
var requestUrl = GithubApiUrl + repoUri;
|
if (isorg == true) {
|
||||||
|
GithubUrl = GithubApiUrl + "orgs/";
|
||||||
|
} else {
|
||||||
|
GithubUrl = GithubApiUrl;
|
||||||
|
}
|
||||||
|
var requestUrl = GithubUrl + repoUri;
|
||||||
Debug.LogFormat("Reading assets from {0}", requestUrl);
|
Debug.LogFormat("Reading assets from {0}", requestUrl);
|
||||||
|
|
||||||
try
|
try
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections;
|
using System.Collections;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
@@ -26,10 +26,11 @@ namespace QuestAppLauncher
|
|||||||
|
|
||||||
// Download repos
|
// Download repos
|
||||||
public const string DownloadRepo_Type_GitHub = "github";
|
public const string DownloadRepo_Type_GitHub = "github";
|
||||||
|
public const string DownloadRepo_Type_PrivUrl = "hhsupserver";
|
||||||
public const string DownloadRepo_Default = @"hooverhigh/QuestAppLauncher_Assets/releases/latest";
|
public const string DownloadRepo_Default = @"hooverhigh/QuestAppLauncher_Assets/releases/latest";
|
||||||
|
|
||||||
// Background
|
// Background
|
||||||
public const string Background_Default = "default";
|
public const string Background_Default = "background.jpg";
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Grid size
|
/// Grid size
|
||||||
@@ -37,8 +38,8 @@ namespace QuestAppLauncher
|
|||||||
[Serializable]
|
[Serializable]
|
||||||
public class GridSize
|
public class GridSize
|
||||||
{
|
{
|
||||||
public int rows = 3;
|
public int rows = 4;
|
||||||
public int cols = 3;
|
public int cols = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -61,7 +62,7 @@ namespace QuestAppLauncher
|
|||||||
public bool show2D = true;
|
public bool show2D = true;
|
||||||
|
|
||||||
// Auto Category: Apps are automatically categorized into 3 tabs - Quest, Go/GearVr, 2D
|
// Auto Category: Apps are automatically categorized into 3 tabs - Quest, Go/GearVr, 2D
|
||||||
public string autoCategory = Category_Top;
|
public string autoCategory = Category_Off;
|
||||||
|
|
||||||
// Custom Category: Apps are categorized according to appnames.txt file
|
// Custom Category: Apps are categorized according to appnames.txt file
|
||||||
public string customCategory = Category_Right;
|
public string customCategory = Category_Right;
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 70 KiB After Width: | Height: | Size: 80 KiB |
BIN
Assets/Sprites/background.jpg
Normal file
BIN
Assets/Sprites/background.jpg
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 73 KiB |
@@ -12,8 +12,8 @@ PlayerSettings:
|
|||||||
targetDevice: 2
|
targetDevice: 2
|
||||||
useOnDemandResources: 0
|
useOnDemandResources: 0
|
||||||
accelerometerFrequency: 60
|
accelerometerFrequency: 60
|
||||||
companyName: AAA
|
companyName: hooverhigh
|
||||||
productName: .Quest App Launcher
|
productName: Quest App Launcher
|
||||||
defaultCursor: {fileID: 0}
|
defaultCursor: {fileID: 0}
|
||||||
cursorHotspot: {x: 0, y: 0}
|
cursorHotspot: {x: 0, y: 0}
|
||||||
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
|
m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}
|
||||||
@@ -165,8 +165,8 @@ PlayerSettings:
|
|||||||
androidSupportedAspectRatio: 1
|
androidSupportedAspectRatio: 1
|
||||||
androidMaxAspectRatio: 2.1
|
androidMaxAspectRatio: 2.1
|
||||||
applicationIdentifier:
|
applicationIdentifier:
|
||||||
Android: aaa.QuestAppLauncher.App
|
Android: HooverHigh.QuestAppLauncher
|
||||||
Standalone: com.DefaultCompany.QuestAppLauncher
|
Standalone: com.HooverHigh.QuestAppLauncher
|
||||||
buildNumber: {}
|
buildNumber: {}
|
||||||
AndroidBundleVersionCode: 1
|
AndroidBundleVersionCode: 1
|
||||||
AndroidMinSdkVersion: 25
|
AndroidMinSdkVersion: 25
|
||||||
|
|||||||
175
README.md
175
README.md
@@ -1,174 +1,8 @@
|
|||||||
# Quest App Launcher
|
# Quest App Launcher
|
||||||
[Latest download](https://sidequestvr.com/#/app/199) | [Patreon](https://www.patreon.com/questapplauncher) | [PayPal](https://www.paypal.com/cgi-bin/webscr?cmd=_donations&business=FYFMN7N3PTCJE¤cy_code=USD&source=url)
|
|
||||||
|
|
||||||
An app launcher for Oculus Quest implemented in Unity.
|
[](https://github.com/HooverHigh/QuestAppLauncher/actions/workflows/build.yml)
|
||||||
|
|
||||||
## Features
|
An app launcher for hoover high Oculus Quests, implemented in Unity.
|
||||||
* Supports launching both 3D and 2D apps
|
|
||||||
* Auto-categorizes apps as Quest, Go / GearVR or 2D
|
|
||||||
* Support for custom categorization
|
|
||||||
* Support for custom app icons and names (by default, uses app name and icon from the app's apk)
|
|
||||||
* Support for resizable grid
|
|
||||||
* Support for downloading app icons and names, including auto-updating
|
|
||||||
* Support for sorting alphabetically or by most recently used
|
|
||||||
* Support for renaming apps
|
|
||||||
* Support for custom 360/cubemap 3D backgrounds
|
|
||||||
* Supports hand tracking
|
|
||||||
|
|
||||||
## Settings
|
|
||||||
There are various options available in Settings. These are:
|
|
||||||
* Automatic Tabs: By default, the launcher will display automatic tabs (Quest, Go/GrearVr and 2D). This setting allows you to specify the position of these tabs (left, top, right or off).
|
|
||||||
* Custom Tabs: Custom tabs allow for arbitrary categorization (like genre etc). See below for how to configure these. This setting, like the above, allows you to specify the position of these tabs (left, top, right or off).
|
|
||||||
* Sort By: Whether to sort alphabetically or most recent.
|
|
||||||
* Show 2D: Whether to show 2D apps.
|
|
||||||
* Grid Size: How many columns & rows to display.
|
|
||||||
* Background: Pick a custom 3D background (see below).
|
|
||||||
* Auto Update & Update Now: Whether to auto-update app icons & names and whether to update these now -- see above.
|
|
||||||
* Reset Hidden Apps: This setting un-hides any hidden apps. See below regarding hiding apps.
|
|
||||||
* Reset Renamed Apps: This setting changes app names back to their default. See below regarding renaming apps.
|
|
||||||
|
|
||||||
## Other Features
|
|
||||||
### Auto-update / Downloading app icons and names
|
|
||||||
By default, the launcher uses the built-in app name and icon (from the installed apps). Oculus Store apps, however, sometimes do not contain correct names or icons. To address this, download these assets by going to Settings and choosing "Update Now". If "Auto-Update" is enabled, this will automatically download new app names and icons as they become available.
|
|
||||||
|
|
||||||
Note: Auto-update is enabled by default.
|
|
||||||
|
|
||||||
Note: Default repository for app icons and names is [https://github.com/tverona1/QuestAppLauncher_assets]. This can be configured in config.json (see below).
|
|
||||||
|
|
||||||
### Custom 3D Backgrounds
|
|
||||||
Custom 3D background images are supported. Both equirectangular (360 degree) and cubemap (6-side) images are supported. This is automatically detected based on aspect ratio (with cubemap having a 6:1 aspect ratio).
|
|
||||||
|
|
||||||
To set up custom 3D backgrounds:
|
|
||||||
1. Copy your background images (either jpg or png) to the following location on your Quest: **Android/data/aaa.QuestAppLauncher.App/files/backgrounds**
|
|
||||||
2. In "Settings", select the custom background.
|
|
||||||
|
|
||||||
#### Equirectangular (360 degree) images
|
|
||||||
For equirectangular (360 degree) images, here's a good source for free images: http://photopin.com/free-photos/equirectangular
|
|
||||||
|
|
||||||
#### Cubemap (6-sided) images
|
|
||||||
For cubemap (6-sides) images, it must be a single image that represents the 6-sided cube with the following horizontal layout:
|
|
||||||
[ +x ] [ -x ] [ +y ] [ -y ] [ +z ] [ -z ]
|
|
||||||
|
|
||||||
Here's a good source for free cubemap images: http://humus.name/index.php?page=Textures
|
|
||||||
|
|
||||||
To set up the cubemap image, download an image (zip) file from the above site and extract the 6 individual images. Then use ImageMagick (https://imagemagick.org) to stitch together the six images into a single image with the following command:
|
|
||||||
```
|
|
||||||
magick montage posx.jpg negx.jpg posy.jpg negy.jpg posz.jpg negz.jpg -tile 6x1 -geometry "1x1+0+0<" -background none out.jpg
|
|
||||||
```
|
|
||||||
|
|
||||||
### Hiding Apps
|
|
||||||
If there is an app that you would like to hide, highlight the app and press either the B or Y button on your controller. You can reset any hidden apps in Settings.
|
|
||||||
|
|
||||||
### Renaming Apps
|
|
||||||
To rename an app (i.e. to pick a different app name / icon for it), highlight the app and press either A or X on the controller. This will show a list of apps from you can choose an alternate app name / icon. You can reset these changes back to default in Settings.
|
|
||||||
|
|
||||||
Note: It is recommended that you download the app names / icon packs first (see above) in order to populate a full list of app to choose from.
|
|
||||||
|
|
||||||
## Manually configuring the launcher (for advanced users only)
|
|
||||||
The below sections described ways to manually configure the launcher. This is intended for advanced users only and is typically not necessary, as everything is supported via the Settings UI within the app.
|
|
||||||
|
|
||||||
### Manually overriding app icons and names
|
|
||||||
It is possible to manually configure app icons and names rather than automatically downloading them. This section describes how.
|
|
||||||
|
|
||||||
#### Override app names
|
|
||||||
Create a file called **appnames.json**. Add an entry with package-id as key and the desired name. Example:
|
|
||||||
```
|
|
||||||
"com.company.myapp":{"name": "My Application"}
|
|
||||||
"com.othercompany.myapp":{"name": "Other Application"}
|
|
||||||
```
|
|
||||||
|
|
||||||
Copy this file (appnames.json) to the following location on your Quest: **Android/data/aaa.QuestAppLauncher.App/files**
|
|
||||||
|
|
||||||
Note: Multiple appnames*.json files are supported. If multiple files are present, they are applied in sorted order of the filenames. This allows for a single "master" appnames.json file and then additional files to override it (like appnames_custom.json).
|
|
||||||
|
|
||||||
Note: Text format is also supported. See below.
|
|
||||||
|
|
||||||
#### Appnames.json syntax
|
|
||||||
This section describes the syntax for appnames.json. The syntax for these entries are as follows:
|
|
||||||
|
|
||||||
"com.mycompany.myapp":{"name": "My Application"}
|
|
||||||
|
|
||||||
#### Custom Categories (Tabs)
|
|
||||||
The launcher supports custom categories (tabs). This can be specified in the **appnames.json** file by adding up to two custom categories per entry. The syntax is:
|
|
||||||
"com.mycompany.myapp":{"name": "My Application", "category": "Action", "category2" : "Puzzle"}
|
|
||||||
|
|
||||||
The above example will categorize the two entries below in Action and Puzzle tabs:
|
|
||||||
|
|
||||||
#### Appnames.txt syntax
|
|
||||||
Alternatively, txt format is also supported for appnames instead of json. The syntax is:
|
|
||||||
packageName,appName[,category1[, category2]]
|
|
||||||
|
|
||||||
Comments can be added to appnames.txt by prepending "#".
|
|
||||||
|
|
||||||
#### Override app icons
|
|
||||||
Create an iconpack.zip file that contains a jpg file per app with the package-id as the filename. Example:
|
|
||||||
com.mycompany.myapp.jpg
|
|
||||||
com.thirdcompany.yetanotherapp.jpg
|
|
||||||
|
|
||||||
Copy the iconpack.zip to the following location on your Quest: **Android/data/aaa.QuestAppLauncher.App/files**
|
|
||||||
|
|
||||||
Note: Multiple iconpack*.zip files are supported. If multiple files are present, they are applied in sorted order of the filenames. This allows for a single "master" iconpack.zip file and then additional files to override it (like iconpack_custom.zip).
|
|
||||||
|
|
||||||
Note: Individual jpg files are also supported at the /Android/data/aaa.QuestAppLauncher.app/files path. These override any corresponding jpgs in iconpack*.zip files.
|
|
||||||
|
|
||||||
### config.json: Configuration file
|
|
||||||
The launcher can be customized by creating a **config.json** file and copying it to the following location on your Quest: Android/data/aaa.QuestAppLauncher.App/files. Note: These configuration options are accessible via the Settings UI, so typically you would not need to manually configure this file.
|
|
||||||
|
|
||||||
#### Format of config.json
|
|
||||||
Here's an example config.json:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"gridSize": {
|
|
||||||
"rows": 3,
|
|
||||||
"cols": 4
|
|
||||||
},
|
|
||||||
"sortMode": "mostRecent",
|
|
||||||
"show2D": true,
|
|
||||||
"autoCategory": "top",
|
|
||||||
"customCategory": "right"
|
|
||||||
"autoUpdate": true,
|
|
||||||
"background": "backgrounds/my_background_360.jpg",
|
|
||||||
"downloadRepos": [
|
|
||||||
{
|
|
||||||
"repoUri": "tverona1/QuestAppLauncher_Assets/releases/latest",
|
|
||||||
"type": "github"
|
|
||||||
}
|
|
||||||
]
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### gridSize: Setting Grid Size
|
|
||||||
The default grid size is 3x3 cells. The grid size can be customized by specifying grid rows and columns as in the following example:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
"gridSize": {
|
|
||||||
"rows": 2,
|
|
||||||
"cols": 4
|
|
||||||
}
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
|
||||||
#### sortMode: Sorting order
|
|
||||||
Whether to sort apps alphabetically or by most recently used. Key is "sortMode" and valid values are "az" (default) or "mostRecent".
|
|
||||||
|
|
||||||
#### show2D: Showing / Hiding 2D apps
|
|
||||||
To show or hide 2D apps, set the "show2D" field to true (default) or false.
|
|
||||||
|
|
||||||
#### autoCategory and customCategory
|
|
||||||
By default, the launcher will display automatic tabs (Quest, Go/GrearVr and 2D) and any custom tabs specified in appnames.txt file. These can be overridden with two fields - "autoCategory" and "customCategory". Both fields support the following values:
|
|
||||||
|
|
||||||
"off": No not display the categories
|
|
||||||
"top": Display categories on top
|
|
||||||
"left": Display categories on left-side
|
|
||||||
"right": Display categories on right-side
|
|
||||||
|
|
||||||
#### autoUpdate and downloadRepos
|
|
||||||
To enable automatic updating of new app icons and names, set autoUpdate to true. downloadRepos lists the repos from which to download. FOr now, we only support github repos.
|
|
||||||
|
|
||||||
#### background
|
|
||||||
The "background" field specifies a relative path to use as a custom 3D background. See earlier section on custom backgrounds.
|
|
||||||
|
|
||||||
## Source structure:
|
## Source structure:
|
||||||
- Assets/Scenes/QuestAppLauncher.unity: The main scene
|
- Assets/Scenes/QuestAppLauncher.unity: The main scene
|
||||||
@@ -176,6 +10,9 @@ The "background" field specifies a relative path to use as a custom 3D backgroun
|
|||||||
- Assets/Scripts: Main set of C# scripts for grid population, scroll handling etc.
|
- Assets/Scripts: Main set of C# scripts for grid population, scroll handling etc.
|
||||||
|
|
||||||
## Credits
|
## Credits
|
||||||
|
|
||||||
|
Thank you to tverona1 [https://github.com/tverona1] for creating this,
|
||||||
|
|
||||||
A huge thank you to fecheva [https://github.com/fecheva] for creating / maintaining the app names & icon packs!
|
A huge thank you to fecheva [https://github.com/fecheva] for creating / maintaining the app names & icon packs!
|
||||||
|
|
||||||
Also thank you to noxx for creating the app's icon!
|
Also thank you to noxx for creating the app's original icon!
|
||||||
|
|||||||
Reference in New Issue
Block a user