mirror of
https://github.com/overte-org/overte.git
synced 2025-04-14 07:27:04 +02:00
Fix case 18465: redirect to domain after login
This commit is contained in:
parent
c1dc0ff2ec
commit
3163ae5997
7 changed files with 39 additions and 18 deletions
|
@ -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) {
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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();
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue