Fix NullPointerException and bug in login menu navigation

This commit is contained in:
Gabriel Calero 2018-11-08 14:51:42 -03:00
parent ccd0d8299f
commit 1d059d9650
3 changed files with 70 additions and 52 deletions

View file

@ -76,7 +76,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
private static boolean inVrMode; private static boolean inVrMode;
private boolean nativeEnterBackgroundCallEnqueued = false; private boolean nativeEnterBackgroundCallEnqueued = false;
private SlidingDrawer webSlidingDrawer; private SlidingDrawer mWebSlidingDrawer;
// private GvrApi gvrApi; // private GvrApi gvrApi;
// Opaque native pointer to the Application C++ object. // Opaque native pointer to the Application C++ object.
// This object is owned by the InterfaceActivity instance and passed to the native methods. // 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 = //nativeGvrApi =
nativeOnCreate(this, assetManager /*, gvrApi.getNativeGvrContext()*/); 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); 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 // 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)); startActivity(new Intent(this, SplashActivity.class));
mVibrator = (Vibrator) this.getSystemService(VIBRATOR_SERVICE); 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(); headsetStateReceiver = new HeadsetStateReceiver();
} }
@ -295,14 +258,47 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
protected void onNewIntent(Intent intent) { protected void onNewIntent(Intent intent) {
super.onNewIntent(intent); super.onNewIntent(intent);
if (intent.hasExtra(DOMAIN_URL)) { if (intent.hasExtra(DOMAIN_URL)) {
webSlidingDrawer.setVisibility(View.GONE); hideWebDrawer();
nativeGotoUrl(intent.getStringExtra(DOMAIN_URL)); nativeGotoUrl(intent.getStringExtra(DOMAIN_URL));
} else if (intent.hasExtra(EXTRA_GOTO_USERNAME)) { } else if (intent.hasExtra(EXTRA_GOTO_USERNAME)) {
webSlidingDrawer.setVisibility(View.GONE); hideWebDrawer();
nativeGoToUser(intent.getStringExtra(EXTRA_GOTO_USERNAME)); 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) { public void openAndroidActivity(String activityName, boolean backToScene) {
openAndroidActivity(activityName, backToScene, null); openAndroidActivity(activityName, backToScene, null);
} }
@ -321,6 +317,7 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
nativeBeforeEnterBackground(); nativeBeforeEnterBackground();
Intent loginIntent = new Intent(this, LoginMenuActivity.class); Intent loginIntent = new Intent(this, LoginMenuActivity.class);
loginIntent.putExtra(LoginMenuActivity.EXTRA_BACK_TO_SCENE, backToScene); loginIntent.putExtra(LoginMenuActivity.EXTRA_BACK_TO_SCENE, backToScene);
loginIntent.putExtra(LoginMenuActivity.EXTRA_BACK_ON_SKIP, true);
if (args != null && args.containsKey(DOMAIN_URL)) { if (args != null && args.containsKey(DOMAIN_URL)) {
loginIntent.putExtra(LoginMenuActivity.EXTRA_DOMAIN_URL, (String) args.get(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; break;
case "WebView": case "WebView":
runOnUiThread(() -> { runOnUiThread(() -> {
webSlidingDrawer.setVisibility(View.VISIBLE); showWebDrawer();
if (!webSlidingDrawer.isOpened()) { if (!mWebSlidingDrawer.isOpened()) {
webSlidingDrawer.animateOpen(); mWebSlidingDrawer.animateOpen();
} }
if (args != null && args.containsKey(WebViewActivity.WEB_VIEW_ACTIVITY_EXTRA_URL)) { if (args != null && args.containsKey(WebViewActivity.WEB_VIEW_ACTIVITY_EXTRA_URL)) {
WebViewFragment webViewFragment = (WebViewFragment) getFragmentManager().findFragmentByTag("webViewFragment"); WebViewFragment webViewFragment = (WebViewFragment) getFragmentManager().findFragmentByTag("webViewFragment");
webViewFragment.loadUrl((String) args.get(WebViewActivity.WEB_VIEW_ACTIVITY_EXTRA_URL), true); webViewFragment.loadUrl((String) args.get(WebViewActivity.WEB_VIEW_ACTIVITY_EXTRA_URL), true);
webViewFragment.setToolbarVisible(true); webViewFragment.setToolbarVisible(true);
webViewFragment.setCloseAction(() -> { webViewFragment.setCloseAction(() -> {
if (webSlidingDrawer.isOpened()) { if (mWebSlidingDrawer.isOpened()) {
webSlidingDrawer.animateClose(); mWebSlidingDrawer.animateClose();
} }
webSlidingDrawer.setVisibility(View.GONE); hideWebDrawer();
}); });
} }
}); });

View file

@ -18,12 +18,26 @@ public class LoginMenuActivity extends AppCompatActivity
LoginFragment.OnLoginInteractionListener, LoginFragment.OnLoginInteractionListener,
SignupFragment.OnSignupInteractionListener { 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"; 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"; 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"; public static final String EXTRA_DOMAIN_URL = "url";
private boolean finishOnBack; private boolean finishOnBack;
private boolean backToScene; private boolean backToScene;
private boolean backOnSkip;
private String domainUrlToBack; private String domainUrlToBack;
@ -35,10 +49,12 @@ public class LoginMenuActivity extends AppCompatActivity
finishOnBack = getIntent().getBooleanExtra(EXTRA_FINISH_ON_BACK, false); finishOnBack = getIntent().getBooleanExtra(EXTRA_FINISH_ON_BACK, false);
backToScene = getIntent().getBooleanExtra(EXTRA_BACK_TO_SCENE, false); backToScene = getIntent().getBooleanExtra(EXTRA_BACK_TO_SCENE, false);
domainUrlToBack = getIntent().getStringExtra(EXTRA_DOMAIN_URL); domainUrlToBack = getIntent().getStringExtra(EXTRA_DOMAIN_URL);
backOnSkip = getIntent().getBooleanExtra(EXTRA_BACK_ON_SKIP, false);
if (savedInstanceState != null) { if (savedInstanceState != null) {
finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false); finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false);
backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false); backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false);
backOnSkip = savedInstanceState.getBoolean(EXTRA_BACK_ON_SKIP, false);
domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL); domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL);
} }
@ -58,6 +74,7 @@ public class LoginMenuActivity extends AppCompatActivity
super.onRestoreInstanceState(savedInstanceState); super.onRestoreInstanceState(savedInstanceState);
finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false); finishOnBack = savedInstanceState.getBoolean(EXTRA_FINISH_ON_BACK, false);
backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false); backToScene = savedInstanceState.getBoolean(EXTRA_BACK_TO_SCENE, false);
backOnSkip = savedInstanceState.getBoolean(EXTRA_BACK_ON_SKIP, false);
domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL); domainUrlToBack = savedInstanceState.getString(EXTRA_DOMAIN_URL);
} }
@ -97,7 +114,11 @@ public class LoginMenuActivity extends AppCompatActivity
@Override @Override
public void onSkipLoginClicked() { public void onSkipLoginClicked() {
loadMainActivity(); if (backOnSkip) {
onBackPressed();
} else {
loadMainActivity();
}
} }
@Override @Override
@ -176,10 +197,8 @@ public class LoginMenuActivity extends AppCompatActivity
FragmentManager.BackStackEntry backEntry = fm.getBackStackEntryAt(index); FragmentManager.BackStackEntry backEntry = fm.getBackStackEntryAt(index);
String tag = backEntry.getName(); String tag = backEntry.getName();
Fragment topFragment = getFragmentManager().findFragmentByTag(tag); Fragment topFragment = getFragmentManager().findFragmentByTag(tag);
if (topFragment instanceof OnBackPressedListener && if (!(topFragment instanceof OnBackPressedListener) ||
((OnBackPressedListener) topFragment).doBack()) { !((OnBackPressedListener) topFragment).doBack()) {
} else {
super.onBackPressed(); super.onBackPressed();
} }
} else if (finishOnBack){ } else if (finishOnBack){

View file

@ -145,7 +145,9 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
} }
private void startLoginMenuActivity() { 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() { private void loadPrivacyPolicyFragment() {