From f9baeaf1513399236967a04a838f45ea6f9d0920 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Mon, 16 Jul 2018 12:28:44 -0300 Subject: [PATCH 1/9] Android - logs during startup - weirdly did not get stuck during tests --- .../hifiinterface/InterfaceActivity.java | 3 +++ .../hifiinterface/SplashActivity.java | 5 +++++ interface/src/Application.cpp | 15 ++++++++------- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java index 8fd8b9d0e6..90db3fe47f 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java @@ -83,6 +83,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW @Override public void onCreate(Bundle savedInstanceState) { + Log.d("[LOADSTUCK]", "InterfaceActivity::onCreate starting Interface Activity"); super.isLoading = true; Intent intent = getIntent(); if (intent.hasExtra(DOMAIN_URL) && !intent.getStringExtra(DOMAIN_URL).isEmpty()) { @@ -128,6 +129,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW getActionBar().hide(); } }); + Log.d("[LOADSTUCK]", "InterfaceActivity::onCreate starting Loading Screen"); startActivity(new Intent(this, SplashActivity.class)); mVibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE); @@ -149,6 +151,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW layoutParams.resolveLayoutDirection(View.LAYOUT_DIRECTION_RTL); qtLayout.addView(webSlidingDrawer, layoutParams); webSlidingDrawer.setVisibility(View.GONE); + Log.d("[LOADSTUCK]", "InterfaceActivity::onCreate done"); } @Override diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java index e0aa967aaa..cd12487688 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java @@ -1,9 +1,11 @@ package io.highfidelity.hifiinterface; import android.app.Activity; +import android.app.Application; import android.content.Intent; import android.os.Bundle; import android.os.Handler; +import android.util.Log; import android.view.View; public class SplashActivity extends Activity { @@ -12,9 +14,11 @@ public class SplashActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { + Log.d("[LOADSTUCK]", "SplashActivity::onCreate Creating loading screen"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); registerLoadCompleteListener(); + Log.d("[LOADSTUCK]", "SplashActivity::onCreate registered as loaded listener"); } @Override @@ -37,6 +41,7 @@ public class SplashActivity extends Activity { } public void onAppLoadedComplete() { + Log.d("[LOADSTUCK]", "SplashActivity::onAppLoadedComplete received"); startActivity(new Intent(this, MainActivity.class)); SplashActivity.this.finish(); } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 311c08b858..55265dcfeb 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1003,7 +1003,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _sampleSound(nullptr) { - + qDebug() << "[LOADSTUCK] Application::Application started constructor"; auto steamClient = PluginManager::getInstance()->getSteamClientPlugin(); setProperty(hifi::properties::STEAM, (steamClient && steamClient->isRunning())); setProperty(hifi::properties::CRASHED, _previousSessionCrashed); @@ -1643,7 +1643,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } } }); - + qDebug() << "[LOADSTUCK] Application::Application 20 user input mapper stuff done"; _applicationStateDevice = userInputMapper->getStateDevice(); _applicationStateDevice->setInputVariant(STATE_IN_HMD, []() -> float { @@ -1711,7 +1711,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo updateHeartbeat(); loadSettings(); - + qDebug() << "[LOADSTUCK] Application::Application 30 settings loaded"; updateVerboseLogging(); // Now that we've loaded the menu and thus switched to the previous display plugin @@ -1763,7 +1763,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(audioIO.data(), &AudioClient::inputReceived, audioScriptingInterface.data(), &AudioScriptingInterface::inputReceived); this->installEventFilter(this); - + qDebug() << "[LOADSTUCK] Application::Application 40 event filter installed"; #ifdef HAVE_DDE auto ddeTracker = DependencyManager::get(); ddeTracker->init(); @@ -1897,7 +1897,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } return false; }); - + qDebug() << "[LOADSTUCK] Application::Application 50 entity tree stuff done"; // Keyboard focus handling for Web overlays. auto overlays = &(qApp->getOverlays()); connect(overlays, &Overlays::overlayDeleted, [=](const OverlayID& overlayID) { @@ -2156,7 +2156,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Make sure we don't time out during slow operations at startup updateHeartbeat(); - + qDebug() << "[LOADSTUCK] Application::Application 60 heartbeat updated"; OctreeEditPacketSender* packetSender = entityScriptingInterface->getPacketSender(); EntityEditPacketSender* entityPacketSender = static_cast(packetSender); entityPacketSender->setMyAvatar(myAvatar.get()); @@ -2217,7 +2217,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo updateSystemTabletMode(); connect(&_myCamera, &Camera::modeUpdated, this, &Application::cameraModeChanged); - + qDebug() << "[LOADSTUCK] Application::Application 70 camera mode changed connected"; DependencyManager::get()->setShouldPickHUDOperator([&]() { return DependencyManager::get()->isHMDMode(); }); DependencyManager::get()->setCalculatePos2DFromHUDOperator([&](const glm::vec3& intersection) { const glm::vec2 MARGIN(25.0f); @@ -2261,6 +2261,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(&AndroidHelper::instance(), &AndroidHelper::beforeEnterBackground, this, &Application::beforeEnterBackground); connect(&AndroidHelper::instance(), &AndroidHelper::enterBackground, this, &Application::enterBackground); connect(&AndroidHelper::instance(), &AndroidHelper::enterForeground, this, &Application::enterForeground); + qDebug() << "[LOADSTUCK] Application::Application before calling notifyLoadComplete()"; AndroidHelper::instance().notifyLoadComplete(); #endif } From c664ce767175076030c5210136bd41eb22bd755a Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Tue, 17 Jul 2018 15:05:56 -0300 Subject: [PATCH 2/9] Android - bypass settings reset dialog with cli option --- interface/src/main.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/interface/src/main.cpp b/interface/src/main.cpp index 85a83d88d1..c1ba6f0535 100644 --- a/interface/src/main.cpp +++ b/interface/src/main.cpp @@ -262,6 +262,9 @@ int main(int argc, const char* argv[]) { // Extend argv to enable WebGL rendering std::vector argvExtended(&argv[0], &argv[argc]); argvExtended.push_back("--ignore-gpu-blacklist"); +#ifdef Q_OS_ANDROID + argvExtended.push_back("--suppress-settings-reset"); +#endif int argcExtended = (int)argvExtended.size(); PROFILE_SYNC_END(startup, "main startup", ""); From 6577a93cc99c9dc8dcfe284da54c5c81f09bb18b Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Wed, 18 Jul 2018 12:43:13 -0300 Subject: [PATCH 3/9] Android Qt - Update QtActivity after change avoiding recursive loop android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java --- .../java/org/qtproject/qt5/android/bindings/QtActivity.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java b/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java index 4a460ff9e7..5b12cd45c0 100644 --- a/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java @@ -103,7 +103,7 @@ public class QtActivity extends Activity { } public boolean super_dispatchPopulateAccessibilityEvent(AccessibilityEvent event) { - return super_dispatchPopulateAccessibilityEvent(event); + return super.dispatchPopulateAccessibilityEvent(event); } //--------------------------------------------------------------------------- From 19146ef73c179477f377c69a21d7f3ea7c100917 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Thu, 19 Jul 2018 20:31:32 -0300 Subject: [PATCH 4/9] Android - avoid the QtNative.m_qtThread.exit(); call --- .../qt5/android/bindings/QtActivity.java | 22 ++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java b/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java index 5b12cd45c0..93ae2bc227 100644 --- a/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java +++ b/android/app/src/main/java/org/qtproject/qt5/android/bindings/QtActivity.java @@ -60,6 +60,8 @@ import android.view.View; import android.view.WindowManager.LayoutParams; import android.view.accessibility.AccessibilityEvent; +import org.qtproject.qt5.android.QtNative; + @SuppressWarnings("unused") public class QtActivity extends Activity { public String APPLICATION_PARAMETERS = null; @@ -362,7 +364,25 @@ public class QtActivity extends Activity { @Override protected void onDestroy() { super.onDestroy(); - QtApplication.invokeDelegate(); + /* + cduarte https://highfidelity.manuscript.com/f/cases/16712/App-freezes-on-opening-randomly + After Qt upgrade to 5.11 we had a black screen crash after closing the application with + the hardware button "Back" and trying to start the app again. It could only be fixed after + totally closing the app swiping it in the list of running apps. + This problem did not happen with the previous Qt version. + After analysing changes we came up with this case and change: + https://codereview.qt-project.org/#/c/218882/ + In summary they've moved libs loading to the same thread as main() and as a matter of correctness + in the onDestroy method in QtActivityDelegate, they exit that thread with `QtNative.m_qtThread.exit();` + That exit call is the main reason of this problem. + + In this fix we just replace the `QtApplication.invokeDelegate();` call that may end using the + entire onDestroy method including that thread exit line for other three lines that purposely + terminate qt (borrowed from QtActivityDelegate::onDestroy as well). + */ + QtNative.terminateQt(); + QtNative.setActivity(null, null); + System.exit(0); } //--------------------------------------------------------------------------- From 6d239f40fb0765c647dfe71c41080c12ced01f84 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Thu, 19 Jul 2018 20:47:05 -0300 Subject: [PATCH 5/9] Android - Freeze at startup problem - remove logs --- .../io/highfidelity/hifiinterface/InterfaceActivity.java | 3 --- .../io/highfidelity/hifiinterface/SplashActivity.java | 3 --- interface/src/Application.cpp | 8 -------- 3 files changed, 14 deletions(-) diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java index 90db3fe47f..8fd8b9d0e6 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java @@ -83,7 +83,6 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW @Override public void onCreate(Bundle savedInstanceState) { - Log.d("[LOADSTUCK]", "InterfaceActivity::onCreate starting Interface Activity"); super.isLoading = true; Intent intent = getIntent(); if (intent.hasExtra(DOMAIN_URL) && !intent.getStringExtra(DOMAIN_URL).isEmpty()) { @@ -129,7 +128,6 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW getActionBar().hide(); } }); - Log.d("[LOADSTUCK]", "InterfaceActivity::onCreate starting Loading Screen"); startActivity(new Intent(this, SplashActivity.class)); mVibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE); @@ -151,7 +149,6 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW layoutParams.resolveLayoutDirection(View.LAYOUT_DIRECTION_RTL); qtLayout.addView(webSlidingDrawer, layoutParams); webSlidingDrawer.setVisibility(View.GONE); - Log.d("[LOADSTUCK]", "InterfaceActivity::onCreate done"); } @Override diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java index cd12487688..f8c9d0538f 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java @@ -14,11 +14,9 @@ public class SplashActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { - Log.d("[LOADSTUCK]", "SplashActivity::onCreate Creating loading screen"); super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); registerLoadCompleteListener(); - Log.d("[LOADSTUCK]", "SplashActivity::onCreate registered as loaded listener"); } @Override @@ -41,7 +39,6 @@ public class SplashActivity extends Activity { } public void onAppLoadedComplete() { - Log.d("[LOADSTUCK]", "SplashActivity::onAppLoadedComplete received"); startActivity(new Intent(this, MainActivity.class)); SplashActivity.this.finish(); } diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 55265dcfeb..31a0c2bc25 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1003,7 +1003,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _sampleSound(nullptr) { - qDebug() << "[LOADSTUCK] Application::Application started constructor"; auto steamClient = PluginManager::getInstance()->getSteamClientPlugin(); setProperty(hifi::properties::STEAM, (steamClient && steamClient->isRunning())); setProperty(hifi::properties::CRASHED, _previousSessionCrashed); @@ -1643,7 +1642,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } } }); - qDebug() << "[LOADSTUCK] Application::Application 20 user input mapper stuff done"; _applicationStateDevice = userInputMapper->getStateDevice(); _applicationStateDevice->setInputVariant(STATE_IN_HMD, []() -> float { @@ -1711,7 +1709,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo updateHeartbeat(); loadSettings(); - qDebug() << "[LOADSTUCK] Application::Application 30 settings loaded"; updateVerboseLogging(); // Now that we've loaded the menu and thus switched to the previous display plugin @@ -1763,7 +1760,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(audioIO.data(), &AudioClient::inputReceived, audioScriptingInterface.data(), &AudioScriptingInterface::inputReceived); this->installEventFilter(this); - qDebug() << "[LOADSTUCK] Application::Application 40 event filter installed"; #ifdef HAVE_DDE auto ddeTracker = DependencyManager::get(); ddeTracker->init(); @@ -1897,7 +1893,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } return false; }); - qDebug() << "[LOADSTUCK] Application::Application 50 entity tree stuff done"; // Keyboard focus handling for Web overlays. auto overlays = &(qApp->getOverlays()); connect(overlays, &Overlays::overlayDeleted, [=](const OverlayID& overlayID) { @@ -2156,7 +2151,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Make sure we don't time out during slow operations at startup updateHeartbeat(); - qDebug() << "[LOADSTUCK] Application::Application 60 heartbeat updated"; OctreeEditPacketSender* packetSender = entityScriptingInterface->getPacketSender(); EntityEditPacketSender* entityPacketSender = static_cast(packetSender); entityPacketSender->setMyAvatar(myAvatar.get()); @@ -2217,7 +2211,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo updateSystemTabletMode(); connect(&_myCamera, &Camera::modeUpdated, this, &Application::cameraModeChanged); - qDebug() << "[LOADSTUCK] Application::Application 70 camera mode changed connected"; DependencyManager::get()->setShouldPickHUDOperator([&]() { return DependencyManager::get()->isHMDMode(); }); DependencyManager::get()->setCalculatePos2DFromHUDOperator([&](const glm::vec3& intersection) { const glm::vec2 MARGIN(25.0f); @@ -2261,7 +2254,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(&AndroidHelper::instance(), &AndroidHelper::beforeEnterBackground, this, &Application::beforeEnterBackground); connect(&AndroidHelper::instance(), &AndroidHelper::enterBackground, this, &Application::enterBackground); connect(&AndroidHelper::instance(), &AndroidHelper::enterForeground, this, &Application::enterForeground); - qDebug() << "[LOADSTUCK] Application::Application before calling notifyLoadComplete()"; AndroidHelper::instance().notifyLoadComplete(); #endif } From c5ffdbfe0a55a774943baf228412fb74949ede48 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Thu, 19 Jul 2018 21:19:18 -0300 Subject: [PATCH 6/9] Android - add a faster to load splash screen (LaunchScreen in Android terminology) and a progress indicator in our loading screen (SplashActivity), to reduce the 'frozen' nature of the app startup --- android/app/src/main/AndroidManifest.xml | 3 ++- .../highfidelity/hifiinterface/PermissionChecker.java | 10 ++++++++++ android/app/src/main/res/drawable/launch_screen.xml | 11 +++++++++++ android/app/src/main/res/layout/activity_splash.xml | 8 ++++++++ android/app/src/main/res/values/colors.xml | 1 + android/app/src/main/res/values/styles.xml | 6 ++++++ 6 files changed, 38 insertions(+), 1 deletion(-) create mode 100644 android/app/src/main/res/drawable/launch_screen.xml diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index aa70d88c52..7255e1f295 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -22,7 +22,8 @@ android:icon="@drawable/ic_launcher" android:launchMode="singleTop" android:roundIcon="@drawable/ic_launcher"> - + diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/PermissionChecker.java b/android/app/src/main/java/io/highfidelity/hifiinterface/PermissionChecker.java index 10cfd85b50..78a6421746 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/PermissionChecker.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/PermissionChecker.java @@ -8,6 +8,7 @@ import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.util.Log; +import android.view.View; import org.json.JSONException; import org.json.JSONObject; @@ -135,4 +136,13 @@ public class PermissionChecker extends Activity { launchActivityWithPermissions(); } } + + @Override + protected void onResume() { + super.onResume(); + View decorView = getWindow().getDecorView(); + // Hide the status bar. + int uiOptions = View.SYSTEM_UI_FLAG_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN; + decorView.setSystemUiVisibility(uiOptions); + } } diff --git a/android/app/src/main/res/drawable/launch_screen.xml b/android/app/src/main/res/drawable/launch_screen.xml new file mode 100644 index 0000000000..0693094ffa --- /dev/null +++ b/android/app/src/main/res/drawable/launch_screen.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/android/app/src/main/res/layout/activity_splash.xml b/android/app/src/main/res/layout/activity_splash.xml index ed25797917..8bb7cbffb6 100644 --- a/android/app/src/main/res/layout/activity_splash.xml +++ b/android/app/src/main/res/layout/activity_splash.xml @@ -7,9 +7,17 @@ android:layout_height="match_parent" android:background="@android:color/black"> + diff --git a/android/app/src/main/res/values/colors.xml b/android/app/src/main/res/values/colors.xml index 15895e4355..7e6cf52d36 100644 --- a/android/app/src/main/res/values/colors.xml +++ b/android/app/src/main/res/values/colors.xml @@ -17,4 +17,5 @@ #FF7171 #99000000 #292929 + #23B2E7 diff --git a/android/app/src/main/res/values/styles.xml b/android/app/src/main/res/values/styles.xml index 308c438fa6..25823214cd 100644 --- a/android/app/src/main/res/values/styles.xml +++ b/android/app/src/main/res/values/styles.xml @@ -19,6 +19,9 @@ false true + + From eb5cc00fff839f4e2799ff4a1c9a31878a1d25c4 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Thu, 19 Jul 2018 21:24:29 -0300 Subject: [PATCH 7/9] newlines --- interface/src/Application.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 31a0c2bc25..311c08b858 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -1003,6 +1003,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo _sampleSound(nullptr) { + auto steamClient = PluginManager::getInstance()->getSteamClientPlugin(); setProperty(hifi::properties::STEAM, (steamClient && steamClient->isRunning())); setProperty(hifi::properties::CRASHED, _previousSessionCrashed); @@ -1642,6 +1643,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } } }); + _applicationStateDevice = userInputMapper->getStateDevice(); _applicationStateDevice->setInputVariant(STATE_IN_HMD, []() -> float { @@ -1709,6 +1711,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo updateHeartbeat(); loadSettings(); + updateVerboseLogging(); // Now that we've loaded the menu and thus switched to the previous display plugin @@ -1760,6 +1763,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo connect(audioIO.data(), &AudioClient::inputReceived, audioScriptingInterface.data(), &AudioScriptingInterface::inputReceived); this->installEventFilter(this); + #ifdef HAVE_DDE auto ddeTracker = DependencyManager::get(); ddeTracker->init(); @@ -1893,6 +1897,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo } return false; }); + // Keyboard focus handling for Web overlays. auto overlays = &(qApp->getOverlays()); connect(overlays, &Overlays::overlayDeleted, [=](const OverlayID& overlayID) { @@ -2151,6 +2156,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo // Make sure we don't time out during slow operations at startup updateHeartbeat(); + OctreeEditPacketSender* packetSender = entityScriptingInterface->getPacketSender(); EntityEditPacketSender* entityPacketSender = static_cast(packetSender); entityPacketSender->setMyAvatar(myAvatar.get()); @@ -2211,6 +2217,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo updateSystemTabletMode(); connect(&_myCamera, &Camera::modeUpdated, this, &Application::cameraModeChanged); + DependencyManager::get()->setShouldPickHUDOperator([&]() { return DependencyManager::get()->isHMDMode(); }); DependencyManager::get()->setCalculatePos2DFromHUDOperator([&](const glm::vec3& intersection) { const glm::vec2 MARGIN(25.0f); From 021905be9bebc70ee705a049f288e8ea2301a0c2 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Thu, 19 Jul 2018 21:27:10 -0300 Subject: [PATCH 8/9] remove unneeded import --- .../main/java/io/highfidelity/hifiinterface/SplashActivity.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java index f8c9d0538f..e0aa967aaa 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/SplashActivity.java @@ -1,11 +1,9 @@ package io.highfidelity.hifiinterface; import android.app.Activity; -import android.app.Application; import android.content.Intent; import android.os.Bundle; import android.os.Handler; -import android.util.Log; import android.view.View; public class SplashActivity extends Activity { From 2dd09c140a79b0e00f810fb3a8c42714a3010fc0 Mon Sep 17 00:00:00 2001 From: Cristian Luis Duarte Date: Thu, 19 Jul 2018 23:20:51 -0300 Subject: [PATCH 9/9] Android - Show a loading indicator while loading domains (same that appears when refreshing with a swipe-down gesture) --- .../io/highfidelity/hifiinterface/fragment/HomeFragment.java | 1 + 1 file changed, 1 insertion(+) diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/HomeFragment.java b/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/HomeFragment.java index 9ca6c7c4cc..7bd373cf1d 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/HomeFragment.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/fragment/HomeFragment.java @@ -66,6 +66,7 @@ public class HomeFragment extends Fragment { GridLayoutManager gridLayoutMgr = new GridLayoutManager(getContext(), numberOfColumns); mDomainsView.setLayoutManager(gridLayoutMgr); mDomainAdapter = new DomainAdapter(getContext(), HifiUtils.getInstance().protocolVersionSignature(), nativeGetLastLocation()); + mSwipeRefreshLayout.setRefreshing(true); mDomainAdapter.setClickListener((view, position, domain) -> { new Handler(getActivity().getMainLooper()).postDelayed(() -> { if (mListener != null) {