Fix case 18465: redirect to domain after login

This commit is contained in:
Gabriel Calero 2018-09-26 19:30:00 -03:00
parent c1dc0ff2ec
commit 3163ae5997
7 changed files with 39 additions and 18 deletions

View file

@ -156,7 +156,7 @@ JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeOnCrea
JavaVM* jvm; JavaVM* jvm;
env->GetJavaVM(&jvm); env->GetJavaVM(&jvm);
QObject::connect(&AndroidHelper::instance(), &AndroidHelper::androidActivityRequested, [jvm](const QString& a, const bool backToScene, QList<QString> args) { QObject::connect(&AndroidHelper::instance(), &AndroidHelper::androidActivityRequested, [jvm](const QString& a, const bool backToScene, QMap<QString, QString> args) {
JNIEnv* myNewEnv; JNIEnv* myNewEnv;
JavaVMAttachArgs jvmArgs; JavaVMAttachArgs jvmArgs;
jvmArgs.version = JNI_VERSION_1_6; // choose your JNI version jvmArgs.version = JNI_VERSION_1_6; // choose your JNI version
@ -182,9 +182,11 @@ JNIEXPORT void Java_io_highfidelity_hifiinterface_InterfaceActivity_nativeOnCrea
jmethodID mapClassConstructor = myNewEnv->GetMethodID(hashMapClass, "<init>", "()V"); jmethodID mapClassConstructor = myNewEnv->GetMethodID(hashMapClass, "<init>", "()V");
jobject hashmap = myNewEnv->NewObject(hashMapClass, mapClassConstructor); jobject hashmap = myNewEnv->NewObject(hashMapClass, mapClassConstructor);
jmethodID mapClassPut = myNewEnv->GetMethodID(hashMapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); jmethodID mapClassPut = myNewEnv->GetMethodID(hashMapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;");
for (const QString& arg: args) { QMap<QString, QString>::iterator i;
QAndroidJniObject jArg = QAndroidJniObject::fromString(arg); for (i = args.begin(); i != args.end(); ++i) {
myNewEnv->CallObjectMethod(hashmap, mapClassPut, QAndroidJniObject::fromString("url").object<jstring>(), jArg.object<jstring>()); QAndroidJniObject jKey = QAndroidJniObject::fromString(i.key());
QAndroidJniObject jValue = QAndroidJniObject::fromString(i.value());
myNewEnv->CallObjectMethod(hashmap, mapClassPut, jKey.object<jstring>(), jValue.object<jstring>());
} }
__interfaceActivity.callMethod<void>("openAndroidActivity", "(Ljava/lang/String;ZLjava/util/HashMap;)V", string.object<jstring>(), jBackToScene, hashmap); __interfaceActivity.callMethod<void>("openAndroidActivity", "(Ljava/lang/String;ZLjava/util/HashMap;)V", string.object<jstring>(), jBackToScene, hashmap);
if (attachedHere) { if (attachedHere) {

View file

@ -39,6 +39,7 @@ import java.lang.reflect.Field;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map;
import io.highfidelity.hifiinterface.fragment.WebViewFragment; import io.highfidelity.hifiinterface.fragment.WebViewFragment;
import io.highfidelity.hifiinterface.receiver.HeadsetStateReceiver; import io.highfidelity.hifiinterface.receiver.HeadsetStateReceiver;
@ -303,14 +304,22 @@ public class InterfaceActivity extends QtActivity implements WebViewFragment.OnW
switch (activityName) { switch (activityName) {
case "Home": case "Home":
case "Privacy Policy": case "Privacy Policy":
case "Login": {
nativeBeforeEnterBackground(); nativeBeforeEnterBackground();
Intent intent = new Intent(this, MainActivity.class); Intent intent = new Intent(this, MainActivity.class);
intent.putExtra(MainActivity.EXTRA_FRAGMENT, activityName); intent.putExtra(MainActivity.EXTRA_FRAGMENT, activityName);
intent.putExtra(MainActivity.EXTRA_BACK_TO_SCENE, backToScene); intent.putExtra(MainActivity.EXTRA_BACK_TO_SCENE, backToScene);
startActivity(intent); startActivity(intent);
break; break;
} case "Login":
nativeBeforeEnterBackground();
Intent loginIntent = new Intent(this, MainActivity.class);
loginIntent.putExtra(MainActivity.EXTRA_FRAGMENT, activityName);
loginIntent.putExtra(MainActivity.EXTRA_BACK_TO_SCENE, backToScene);
if (args != null && args.containsKey(DOMAIN_URL)) {
loginIntent.putExtra(DOMAIN_URL, (String) args.get(DOMAIN_URL));
}
startActivity(loginIntent);
break;
case "WebView": case "WebView":
runOnUiThread(() -> { runOnUiThread(() -> {
webSlidingDrawer.setVisibility(View.VISIBLE); webSlidingDrawer.setVisibility(View.VISIBLE);

View file

@ -29,6 +29,9 @@ import android.widget.TextView;
import com.squareup.picasso.Callback; import com.squareup.picasso.Callback;
import com.squareup.picasso.Picasso; import com.squareup.picasso.Picasso;
import java.util.HashMap;
import java.util.Map;
import io.highfidelity.hifiinterface.fragment.FriendsFragment; import io.highfidelity.hifiinterface.fragment.FriendsFragment;
import io.highfidelity.hifiinterface.fragment.HomeFragment; import io.highfidelity.hifiinterface.fragment.HomeFragment;
import io.highfidelity.hifiinterface.fragment.LoginFragment; import io.highfidelity.hifiinterface.fragment.LoginFragment;
@ -45,6 +48,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
public static final String DEFAULT_FRAGMENT = "Home"; public static final String DEFAULT_FRAGMENT = "Home";
public static final String EXTRA_FRAGMENT = "fragment"; public static final String EXTRA_FRAGMENT = "fragment";
public static final String EXTRA_BACK_TO_SCENE = "backToScene"; public static final String EXTRA_BACK_TO_SCENE = "backToScene";
public static final String EXTRA_BACK_TO_URL = "url";
private String TAG = "HighFidelity"; private String TAG = "HighFidelity";
@ -62,6 +66,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
private MenuItem mPeopleMenuItem; private MenuItem mPeopleMenuItem;
private boolean backToScene; private boolean backToScene;
private String backToUrl;
@Override @Override
protected void onCreate(Bundle savedInstanceState) { protected void onCreate(Bundle savedInstanceState) {
@ -105,9 +110,8 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
loadFragment(DEFAULT_FRAGMENT); loadFragment(DEFAULT_FRAGMENT);
} }
if (getIntent().hasExtra(EXTRA_BACK_TO_SCENE)) { backToScene = getIntent().getBooleanExtra(EXTRA_BACK_TO_SCENE, false);
backToScene = getIntent().getBooleanExtra(EXTRA_BACK_TO_SCENE, false); backToUrl = getIntent().getStringExtra(EXTRA_BACK_TO_URL);
}
} }
} }
@ -301,7 +305,7 @@ public class MainActivity extends AppCompatActivity implements NavigationView.On
} }
private void goToLastLocation() { private void goToLastLocation() {
goToDomain(""); goToDomain(backToUrl != null? backToUrl : "");
} }
private void goToDomain(String domainUrl) { private void goToDomain(String domainUrl) {

View file

@ -25,7 +25,7 @@ AndroidHelper::AndroidHelper() {
AndroidHelper::~AndroidHelper() { AndroidHelper::~AndroidHelper() {
} }
void AndroidHelper::requestActivity(const QString &activityName, const bool backToScene, QList<QString> args) { void AndroidHelper::requestActivity(const QString &activityName, const bool backToScene, QMap<QString, QString> args) {
emit androidActivityRequested(activityName, backToScene, args); emit androidActivityRequested(activityName, backToScene, args);
} }
@ -49,8 +49,10 @@ void AndroidHelper::performHapticFeedback(int duration) {
emit hapticFeedbackRequested(duration); emit hapticFeedbackRequested(duration);
} }
void AndroidHelper::showLoginDialog() { void AndroidHelper::showLoginDialog(QUrl url) {
emit androidActivityRequested("Login", true); QMap<QString, QString> args;
args["url"] = url.toString();
emit androidActivityRequested("Login", true, args);
} }
void AndroidHelper::processURL(const QString &url) { void AndroidHelper::processURL(const QString &url) {

View file

@ -13,6 +13,8 @@
#define hifi_Android_Helper_h #define hifi_Android_Helper_h
#include <QObject> #include <QObject>
#include <QMap>
#include <QUrl>
class AndroidHelper : public QObject { class AndroidHelper : public QObject {
Q_OBJECT Q_OBJECT
@ -21,7 +23,7 @@ public:
static AndroidHelper instance; static AndroidHelper instance;
return instance; return instance;
} }
void requestActivity(const QString &activityName, const bool backToScene, QList<QString> args = QList<QString>()); void requestActivity(const QString &activityName, const bool backToScene, QMap<QString, QString> args = QMap<QString, QString>());
void notifyLoadComplete(); void notifyLoadComplete();
void notifyEnterForeground(); void notifyEnterForeground();
void notifyBeforeEnterBackground(); void notifyBeforeEnterBackground();
@ -35,10 +37,10 @@ public:
void operator=(AndroidHelper const&) = delete; void operator=(AndroidHelper const&) = delete;
public slots: public slots:
void showLoginDialog(); void showLoginDialog(QUrl url);
signals: signals:
void androidActivityRequested(const QString &activityName, const bool backToScene, QList<QString> args = QList<QString>()); void androidActivityRequested(const QString &activityName, const bool backToScene, QMap<QString, QString> args = QMap<QString, QString>());
void qtAppLoadComplete(); void qtAppLoadComplete();
void enterForeground(); void enterForeground();
void beforeEnterBackground(); void beforeEnterBackground();

View file

@ -1236,7 +1236,8 @@ Application::Application(int& argc, char** argv, QElapsedTimer& startupTimer, bo
auto dialogsManager = DependencyManager::get<DialogsManager>(); auto dialogsManager = DependencyManager::get<DialogsManager>();
#if defined(Q_OS_ANDROID) #if defined(Q_OS_ANDROID)
connect(accountManager.data(), &AccountManager::authRequired, this, []() { connect(accountManager.data(), &AccountManager::authRequired, this, []() {
AndroidHelper::instance().showLoginDialog(); auto addressManager = DependencyManager::get<AddressManager>();
AndroidHelper::instance().showLoginDialog(addressManager->currentAddress());
}); });
#else #else
connect(accountManager.data(), &AccountManager::authRequired, dialogsManager.data(), &DialogsManager::showLoginDialog); connect(accountManager.data(), &AccountManager::authRequired, dialogsManager.data(), &DialogsManager::showLoginDialog);

View file

@ -134,7 +134,8 @@ void WindowScriptingInterface::openUrl(const QUrl& url) {
DependencyManager::get<AddressManager>()->handleLookupString(url.toString()); DependencyManager::get<AddressManager>()->handleLookupString(url.toString());
} else { } else {
#if defined(Q_OS_ANDROID) #if defined(Q_OS_ANDROID)
QList<QString> args = { url.toString() }; QMap<QString, QString> args;
args["url"] = url.toString();
AndroidHelper::instance().requestActivity("WebView", true, args); AndroidHelper::instance().requestActivity("WebView", true, args);
#else #else
// address manager did not handle - ask QDesktopServices to handle // address manager did not handle - ask QDesktopServices to handle