Skip to content

Commit c74bbee

Browse files
change url mid session (#24)
1 parent eceafc8 commit c74bbee

File tree

3 files changed

+56
-18
lines changed

3 files changed

+56
-18
lines changed

OpacityCore/src/main/cpp/OpacityCore.cpp

Lines changed: 31 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,19 @@ extern "C" void android_present_webview(bool shouldIntercept) {
149149
env->CallVoidMethod(java_object, method, jshouldIntercept);
150150
}
151151

152+
extern "C" void android_webview_change_url(const char *url) {
153+
JNIEnv *env = GetJniEnv();
154+
// Get the Kotlin class
155+
jclass jOpacityCore = env->GetObjectClass(java_object);
156+
157+
// Get the method ID for the method you want to call
158+
jmethodID method = env->GetMethodID(jOpacityCore, "changeUrlInBrowser",
159+
"(Ljava/lang/String;)V");
160+
161+
jstring jurl = env->NewStringUTF(url);
162+
env->CallVoidMethod(java_object, method, jurl);
163+
}
164+
152165
extern "C" const char *get_ip_address() {
153166
struct ifaddrs *ifAddrStruct = nullptr;
154167
void *tmpAddrPtr = nullptr;
@@ -197,11 +210,11 @@ extern "C" bool android_is_app_foregrounded() {
197210
extern "C" const char *android_get_os_version() {
198211
JNIEnv *env = GetJniEnv();
199212
jclass jOpacityCore = env->GetObjectClass(java_object);
200-
jmethodID method = env->GetMethodID(jOpacityCore, "getOsVersion", "()Ljava/lang/String;");
213+
jmethodID method =
214+
env->GetMethodID(jOpacityCore, "getOsVersion", "()Ljava/lang/String;");
201215
auto res = (jstring)env->CallObjectMethod(java_object, method);
202216

203-
if (res == nullptr)
204-
{
217+
if (res == nullptr) {
205218
return "";
206219
}
207220

@@ -212,11 +225,11 @@ extern "C" const char *android_get_os_version() {
212225
extern "C" const char *android_get_device_manufacturer() {
213226
JNIEnv *env = GetJniEnv();
214227
jclass jOpacityCore = env->GetObjectClass(java_object);
215-
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceManufacturer", "()Ljava/lang/String;");
228+
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceManufacturer",
229+
"()Ljava/lang/String;");
216230
auto res = (jstring)env->CallObjectMethod(java_object, method);
217231

218-
if (res == nullptr)
219-
{
232+
if (res == nullptr) {
220233
return "";
221234
}
222235

@@ -227,11 +240,11 @@ extern "C" const char *android_get_device_manufacturer() {
227240
extern "C" const char *android_get_device_model() {
228241
JNIEnv *env = GetJniEnv();
229242
jclass jOpacityCore = env->GetObjectClass(java_object);
230-
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceModel", "()Ljava/lang/String;");
243+
jmethodID method =
244+
env->GetMethodID(jOpacityCore, "getDeviceModel", "()Ljava/lang/String;");
231245
auto res = (jstring)env->CallObjectMethod(java_object, method);
232246

233-
if (res == nullptr)
234-
{
247+
if (res == nullptr) {
235248
return "";
236249
}
237250

@@ -242,11 +255,11 @@ extern "C" const char *android_get_device_model() {
242255
extern "C" const char *android_get_device_locale() {
243256
JNIEnv *env = GetJniEnv();
244257
jclass jOpacityCore = env->GetObjectClass(java_object);
245-
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceLocale", "()Ljava/lang/String;");
258+
jmethodID method =
259+
env->GetMethodID(jOpacityCore, "getDeviceLocale", "()Ljava/lang/String;");
246260
auto res = (jstring)env->CallObjectMethod(java_object, method);
247261

248-
if (res == nullptr)
249-
{
262+
if (res == nullptr) {
250263
return "";
251264
}
252265

@@ -292,10 +305,10 @@ extern "C" int android_get_screen_dpi() {
292305
extern "C" const char *android_get_device_cpu() {
293306
JNIEnv *env = GetJniEnv();
294307
jclass jOpacityCore = env->GetObjectClass(java_object);
295-
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceCpu", "()Ljava/lang/String;");
308+
jmethodID method =
309+
env->GetMethodID(jOpacityCore, "getDeviceCpu", "()Ljava/lang/String;");
296310
jstring jCpu = (jstring)env->CallObjectMethod(java_object, method);
297-
if (jCpu == nullptr)
298-
{
311+
if (jCpu == nullptr) {
299312
return strdup("");
300313
}
301314
const char *cpu = env->GetStringUTFChars(jCpu, nullptr);
@@ -308,10 +321,10 @@ extern "C" const char *android_get_device_cpu() {
308321
extern "C" const char *android_get_device_codename() {
309322
JNIEnv *env = GetJniEnv();
310323
jclass jOpacityCore = env->GetObjectClass(java_object);
311-
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceCodename", "()Ljava/lang/String;");
324+
jmethodID method = env->GetMethodID(jOpacityCore, "getDeviceCodename",
325+
"()Ljava/lang/String;");
312326
jstring jCodename = (jstring)env->CallObjectMethod(java_object, method);
313-
if (jCodename == nullptr)
314-
{
327+
if (jCodename == nullptr) {
315328
return strdup("");
316329
}
317330
const char *codename = env->GetStringUTFChars(jCodename, nullptr);

OpacityCore/src/main/kotlin/com/opacitylabs/opacitycore/InAppBrowserActivity.kt

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -84,6 +84,20 @@ class InAppBrowserActivity : AppCompatActivity() {
8484
private val visitedUrls = mutableListOf<String>()
8585
private var interceptExtensionEnabled = false
8686

87+
private val changeUrlReceiver =
88+
object : BroadcastReceiver() {
89+
override fun onReceive(context: Context?, intent: Intent?) {
90+
if (intent?.action == "com.opacitylabs.opacitycore.CHANGE_URL") {
91+
currentUrl = intent.getStringExtra("url")!!
92+
if (geckoSession.isOpen) {
93+
geckoSession.loadUri(currentUrl)
94+
} else {
95+
Log.d("MainActivity", "Warning: Browser is not open.")
96+
}
97+
}
98+
}
99+
}
100+
87101
@SuppressLint("WrongThread")
88102
override fun onCreate(savedInstanceState: Bundle?) {
89103
super.onCreate(savedInstanceState)
@@ -115,6 +129,11 @@ class InAppBrowserActivity : AppCompatActivity() {
115129
IntentFilter("com.opacitylabs.opacitycore.GET_COOKIES_FOR_DOMAIN")
116130
)
117131

132+
localBroadcastManager.registerReceiver(
133+
changeUrlReceiver,
134+
IntentFilter("com.opacitylabs.opacitycore.CHANGE_URL")
135+
)
136+
118137
supportActionBar?.setDisplayShowTitleEnabled(false)
119138

120139
val closeButton =

OpacityCore/src/main/kotlin/com/opacitylabs/opacitycore/OpacityCore.kt

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,12 @@ object OpacityCore {
183183
LocalBroadcastManager.getInstance(appContext).sendBroadcast(closeIntent)
184184
}
185185

186+
fun changeUrlInBrowser(url: String) {
187+
val changeUrlIntent = Intent("com.opacitylabs.opacitycore.CHANGE_URL")
188+
changeUrlIntent.putExtra("url", url)
189+
LocalBroadcastManager.getInstance(appContext).sendBroadcast(changeUrlIntent)
190+
}
191+
186192
fun onBrowserDestroyed() {
187193
isBrowserActive = false
188194
}

0 commit comments

Comments
 (0)