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 7db158a100..674dabc949 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/InterfaceActivity.java @@ -76,7 +76,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW private static boolean inVrMode; private boolean nativeEnterBackgroundCallEnqueued = false; - private SlidingDrawer webSlidingDrawer; + private SlidingDrawer mWebSlidingDrawer; // private GvrApi gvrApi; // Opaque native pointer to the Application C++ object. // This object is owned by the InterfaceActivity instance and passed to the native methods. @@ -116,17 +116,6 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW //nativeGvrApi = nativeOnCreate(this, assetManager /*, gvrApi.getNativeGvrContext()*/); - Point size = new Point(); - getWindowManager().getDefaultDisplay().getRealSize(size); - - try { - PackageInfo pInfo = this.getPackageManager().getPackageInfo(getPackageName(), 0); - String version = pInfo.versionName; -// setAppVersion(version); - } catch (PackageManager.NameNotFoundException e) { - Log.e("GVR", "Error getting application version", e); - } - final View rootView = getWindow().getDecorView().findViewById(android.R.id.content); // This is a workaround to hide the menu bar when the virtual keyboard is shown from Qt @@ -137,32 +126,6 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW }); startActivity(new Intent(this, SplashActivity.class)); mVibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE); - - FrameLayout mainLayout = findViewById(android.R.id.content); - LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); - webSlidingDrawer = (SlidingDrawer) inflater.inflate(R.layout.web_drawer, mainLayout, false); - QtLayout qtLayout = (QtLayout) mainLayout.getChildAt(0); - if (qtLayout == null) { - Log.d("[QTLAYOUT-NULL]" , "Mainlayout children: " + mainLayout.getChildCount()); - for (int i=0; i< mainLayout.getChildCount(); i++) { - Log.d("[QTLAYOUT-NULL]" , "Child " + i + ": " + mainLayout.getChildAt(i)); - } - } - QtLayout.LayoutParams layoutParams = new QtLayout.LayoutParams(webSlidingDrawer.getLayoutParams()); - webSlidingDrawer.setOnDrawerCloseListener(() -> { - WebViewFragment webViewFragment = (WebViewFragment) getFragmentManager().findFragmentByTag("webViewFragment"); - webViewFragment.close(); - }); - int widthPx = Math.max(size.x, size.y); - int heightPx = Math.min(size.x, size.y); - - layoutParams.x = (int) (widthPx - WEB_DRAWER_RIGHT_MARGIN * getResources().getDisplayMetrics().xdpi / NORMAL_DPI); - layoutParams.y = (int) (heightPx - WEB_DRAWER_BOTTOM_MARGIN * getResources().getDisplayMetrics().ydpi / NORMAL_DPI); - - layoutParams.resolveLayoutDirection(View.LAYOUT_DIRECTION_RTL); - qtLayout.addView(webSlidingDrawer, layoutParams); - webSlidingDrawer.setVisibility(View.GONE); - headsetStateReceiver = new HeadsetStateReceiver(); } @@ -295,14 +258,47 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW protected void onNewIntent(Intent intent) { super.onNewIntent(intent); if (intent.hasExtra(DOMAIN_URL)) { - webSlidingDrawer.setVisibility(View.GONE); + hideWebDrawer(); nativeGotoUrl(intent.getStringExtra(DOMAIN_URL)); } else if (intent.hasExtra(EXTRA_GOTO_USERNAME)) { - webSlidingDrawer.setVisibility(View.GONE); + hideWebDrawer(); nativeGoToUser(intent.getStringExtra(EXTRA_GOTO_USERNAME)); } } + private void hideWebDrawer() { + if (mWebSlidingDrawer != null) { + mWebSlidingDrawer.setVisibility(View.GONE); + } + } + + public void showWebDrawer() { + if (mWebSlidingDrawer == null) { + FrameLayout mainLayout = findViewById(android.R.id.content); + LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); + QtLayout qtLayout = (QtLayout) mainLayout.getChildAt(0); + mWebSlidingDrawer = (SlidingDrawer) inflater.inflate(R.layout.web_drawer, mainLayout, false); + + QtLayout.LayoutParams layoutParams = new QtLayout.LayoutParams(mWebSlidingDrawer.getLayoutParams()); + mWebSlidingDrawer.setOnDrawerCloseListener(() -> { + WebViewFragment webViewFragment = (WebViewFragment) getFragmentManager().findFragmentByTag("webViewFragment"); + webViewFragment.close(); + }); + + Point size = new Point(); + getWindowManager().getDefaultDisplay().getRealSize(size); + int widthPx = Math.max(size.x, size.y); + int heightPx = Math.min(size.x, size.y); + + layoutParams.x = (int) (widthPx - WEB_DRAWER_RIGHT_MARGIN * getResources().getDisplayMetrics().xdpi / NORMAL_DPI); + layoutParams.y = (int) (heightPx - WEB_DRAWER_BOTTOM_MARGIN * getResources().getDisplayMetrics().ydpi / NORMAL_DPI); + + layoutParams.resolveLayoutDirection(View.LAYOUT_DIRECTION_RTL); + qtLayout.addView(mWebSlidingDrawer, layoutParams); + mWebSlidingDrawer.setVisibility(View.VISIBLE); + } + } + public void openAndroidActivity(String activityName, boolean backToScene) { openAndroidActivity(activityName, backToScene, null); } @@ -321,6 +317,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW nativeBeforeEnterBackground(); Intent loginIntent = new Intent(this, LoginMenuActivity.class); loginIntent.putExtra(LoginMenuActivity.EXTRA_BACK_TO_SCENE, backToScene); + loginIntent.putExtra(LoginMenuActivity.EXTRA_BACK_ON_SKIP, true); if (args != null && args.containsKey(DOMAIN_URL)) { loginIntent.putExtra(LoginMenuActivity.EXTRA_DOMAIN_URL, (String) args.get(DOMAIN_URL)); } @@ -328,19 +325,19 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW break; case "WebView": runOnUiThread(() -> { - webSlidingDrawer.setVisibility(View.VISIBLE); - if (!webSlidingDrawer.isOpened()) { - webSlidingDrawer.animateOpen(); + showWebDrawer(); + if (!mWebSlidingDrawer.isOpened()) { + mWebSlidingDrawer.animateOpen(); } if (args != null && args.containsKey(WebViewActivity.WEB_VIEW_ACTIVITY_EXTRA_URL)) { WebViewFragment webViewFragment = (WebViewFragment) getFragmentManager().findFragmentByTag("webViewFragment"); webViewFragment.loadUrl((String) args.get(WebViewActivity.WEB_VIEW_ACTIVITY_EXTRA_URL), true); webViewFragment.setToolbarVisible(true); webViewFragment.setCloseAction(() -> { - if (webSlidingDrawer.isOpened()) { - webSlidingDrawer.animateClose(); + if (mWebSlidingDrawer.isOpened()) { + mWebSlidingDrawer.animateClose(); } - webSlidingDrawer.setVisibility(View.GONE); + hideWebDrawer(); }); } }); diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/LoginMenuActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/LoginMenuActivity.java index 63f74ac3e2..5cb196249d 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/LoginMenuActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/LoginMenuActivity.java @@ -18,12 +18,26 @@ public class LoginMenuActivity extends AppCompatActivity LoginFragment.OnLoginInteractionListener, SignupFragment.OnSignupInteractionListener { + /** + * Set EXTRA_FINISH_ON_BACK to finish the app when back button is pressed + */ public static final String EXTRA_FINISH_ON_BACK = "finishOnBack"; + + /** + * Set EXTRA_BACK_TO_SCENE to back to the scene + */ public static final String EXTRA_BACK_TO_SCENE = "backToScene"; + + /** + * Set EXTRA_BACK_ON_SKIP to finish this activity when skip button is pressed + */ + public static final String EXTRA_BACK_ON_SKIP = "backOnSkip"; + public static final String EXTRA_DOMAIN_URL = "url"; private boolean finishOnBack; private boolean backToScene; + private boolean backOnSkip; private String domainUrlToBack; @@ -35,10 +49,12 @@ public class LoginMenuActivity extends AppCompatActivity finishOnBack = getIntent().getBooleanExtra(EXTRA_FINISH_ON_BACK, false); backToScene = getIntent().getBooleanExtra(EXTRA_BACK_TO_SCENE, false); domainUrlToBack = getIntent().getStringExtra(EXTRA_DOMAIN_URL); + backOnSkip = getIntent().getBooleanExtra(EXTRA_BACK_ON_SKIP, false); if (savedInstanceState != null) { finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false); backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false); + backOnSkip = savedInstanceState.getBoolean(EXTRA_BACK_ON_SKIP, false); domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL); } @@ -58,6 +74,7 @@ public class LoginMenuActivity extends AppCompatActivity super.onRestoreInstanceState(savedInstanceState); finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false); backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false); + backOnSkip = savedInstanceState.getBoolean(EXTRA_BACK_ON_SKIP, false); domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL); } @@ -97,7 +114,11 @@ public class LoginMenuActivity extends AppCompatActivity @Override public void onSkipLoginClicked() { - loadMainActivity(); + if (backOnSkip) { + onBackPressed(); + } else { + loadMainActivity(); + } } @Override @@ -176,10 +197,8 @@ public class LoginMenuActivity extends AppCompatActivity FragmentManager.BackStackEntry backEntry = fm.getBackStackEntryAt(index); String tag = backEntry.getName(); Fragment topFragment = getFragmentManager().findFragmentByTag(tag); - if (topFragment instanceof OnBackPressedListener && - ((OnBackPressedListener) topFragment).doBack()) { - - } else { + if (!(topFragment instanceof OnBackPressedListener) || + !((OnBackPressedListener) topFragment).doBack()) { super.onBackPressed(); } } else if (finishOnBack){ diff --git a/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java b/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java index d0e00867b8..e17b530f1c 100644 --- a/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java +++ b/android/app/src/main/java/io/highfidelity/hifiinterface/MainActivity.java @@ -145,7 +145,9 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On } private void startLoginMenuActivity() { - startActivity(new Intent(this, LoginMenuActivity.class)); + Intent intent = new Intent(this, LoginMenuActivity.class); + intent.putExtra(LoginMenuActivity.EXTRA_BACK_ON_SKIP, true); + startActivity(intent); } private void loadPrivacyPolicyFragment() {