Skip to content

Commit 5a01bf2

Browse files
committed
✨ Address bar functionality
1 parent 05f8a45 commit 5a01bf2

File tree

14 files changed

+223
-52
lines changed

14 files changed

+223
-52
lines changed

.idea/deploymentTargetDropDown.xml

Lines changed: 17 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/misc.xml

Lines changed: 6 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

.idea/render.experimental.xml

Lines changed: 6 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,9 @@ android {
4040

4141
dependencies {
4242
def lifecycle_version = "2.2.0"
43+
def ff_version = "95.0"
44+
def gecko_version = "$ff_version.20211218203254"
45+
4346

4447
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$lifecycle_version"
4548
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$lifecycle_version"
@@ -51,7 +54,8 @@ dependencies {
5154
implementation 'androidx.appcompat:appcompat:1.4.0'
5255
implementation 'com.google.android.material:material:1.4.0'
5356
implementation 'androidx.constraintlayout:constraintlayout:2.1.2'
54-
implementation "org.mozilla.geckoview:geckoview:95.0.20211218203254"
57+
implementation "org.mozilla.geckoview:geckoview:$gecko_version"
58+
implementation "org.mozilla.components:browser-icons:$ff_version.0"
5559
implementation 'androidx.legacy:legacy-support-v4:1.0.0'
5660
testImplementation 'junit:junit:4.+'
5761
androidTestImplementation 'androidx.test.ext:junit:1.1.3'

app/src/main/java/co/dothq/browser/BrowserActivity.kt

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ import co.dothq.browser.subactivities.AddressBar
2121
class BrowserActivity : AppCompatActivity() {
2222
override fun onCreate(savedInstanceState: Bundle?) {
2323
super.onCreate(savedInstanceState);
24-
2524
this.initStatusbar();
2625

2726
ApplicationManager().init(applicationContext, this);
@@ -43,24 +42,25 @@ class BrowserActivity : AppCompatActivity() {
4342
session.navigationDelegate = BrowserDelegates().createNavigationDelegate("main", this, applicationContext);
4443
session.progressDelegate = BrowserDelegates().createProgressDelegate("main", this, applicationContext);
4544

45+
var addressBarLauncher = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
46+
if (result.resultCode == Activity.RESULT_OK) {
47+
// There are no request codes
48+
val data: Intent? = result.data
49+
50+
session.loadUri(data?.getStringExtra("targetURI").toString())
51+
}
52+
}
53+
4654

4755
val addressBar = findViewById<LinearLayout>(R.id.addressBarContainer);
4856

4957
addressBar.setOnClickListener {
5058
val addressBarIntent = Intent(this, AddressBar::class.java);
5159

5260
addressBarIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
53-
54-
var launchAddressBar = registerForActivityResult(ActivityResultContracts.StartActivityForResult()) { result ->
55-
if (result.resultCode == Activity.RESULT_OK) {
56-
val data: Intent? = result.data
57-
if (data != null) {
58-
session.loadUri(data.toString());
59-
}
60-
}
61-
}
62-
63-
launchAddressBar.launch(addressBarIntent)
61+
addressBarIntent.putExtra("currentURI", StorageManager().get(applicationContext, "currentUri", "appValues", "about:blank").toString())
62+
addressBarLauncher.launch(addressBarIntent)
63+
overridePendingTransition(0, 0);
6464
}
6565

6666
session.loadUri("https://ddg.gg")

app/src/main/java/co/dothq/browser/BrowserDelegates.kt

Lines changed: 24 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,12 @@ package co.dothq.browser
33
import android.app.Activity
44
import android.content.Context
55
import android.graphics.drawable.Drawable
6+
import android.net.Uri
67
import android.widget.ImageView
78
import android.widget.TextView
89
import android.widget.Toast
910
import androidx.core.content.ContextCompat
11+
import androidx.core.net.toUri
1012
import co.dothq.browser.managers.StorageManager
1113
import org.mozilla.geckoview.AllowOrDeny
1214
import org.mozilla.geckoview.GeckoResult
@@ -44,30 +46,33 @@ class BrowserDelegates {
4446
public fun createNavigationDelegate(area: String, context: Context, applicationCtx: Context): GeckoSession.NavigationDelegate {
4547
return object : GeckoSession.NavigationDelegate {
4648

47-
override fun onLoadRequest(session: GeckoSession, request: GeckoSession.NavigationDelegate.LoadRequest): GeckoResult<AllowOrDeny>? {
48-
StorageManager().set(applicationCtx, "dot.current.uri", request.uri.toString(), "appValues")
49-
val uri = request.uri;
50-
var uriNoProtocol = uri
51-
52-
if (uri.startsWith("https://")) uriNoProtocol = uriNoProtocol.replace("https://", "");
53-
if (uri.startsWith("http://")) uriNoProtocol = uriNoProtocol.replace("http://", "");
54-
55-
if (uriNoProtocol.startsWith("www.")) uriNoProtocol = uriNoProtocol.replace("www.", "");
49+
override fun onLocationChange(session: GeckoSession, url: String?) {
50+
super.onLocationChange(session, url)
51+
StorageManager().set(
52+
applicationCtx,
53+
"currentUri",
54+
url.toString(),
55+
"appValues"
56+
)
5657

57-
var uriSplitBySlash = uriNoProtocol.split("/");
58-
var uriJustHostname = uriSplitBySlash[0];
59-
var path = uriSplitBySlash.drop(1).joinToString("/");
58+
val uri: Uri = url.toString().toUri();
59+
val host = uri.host.toString();
60+
val path = url.toString().replace("${uri.scheme}://${uri.host}", "");
6061

6162
if (area == "main") {
6263
val activity: Activity = (context as Activity)
6364

64-
activity.findViewById<TextView>(R.id.addressBarDomain).text = uriJustHostname.toString();
65+
activity.findViewById<TextView>(R.id.addressBarDomain).text =
66+
host.toString();
6567

66-
if (path != "") activity.findViewById<TextView>(R.id.addressBarPath).text = "/${path.toString()}";
67-
if (path == "") activity.findViewById<TextView>(R.id.addressBarPath).text = path.toString()
68-
}
69-
return (GeckoResult.allow())
68+
if (path != "/") activity.findViewById<TextView>(R.id.addressBarPath).text = path
69+
if (path == "/") activity.findViewById<TextView>(R.id.addressBarPath).text = ""
70+
}
71+
}
72+
73+
override fun onLoadRequest(session: GeckoSession, request: GeckoSession.NavigationDelegate.LoadRequest): GeckoResult<AllowOrDeny>? {
74+
return (GeckoResult.allow())
75+
}
7076
}
7177
}
72-
}
73-
}
78+
}
Lines changed: 44 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,55 @@
11
package co.dothq.browser.subactivities
22

3-
import androidx.appcompat.app.AppCompatActivity
3+
import android.app.Activity
4+
import android.content.Intent
45
import android.os.Bundle
6+
import android.view.KeyEvent
7+
import android.view.View
8+
import android.widget.EditText
9+
import android.widget.Toast
10+
import androidx.appcompat.app.AppCompatActivity
511
import co.dothq.browser.R
12+
import co.dothq.browser.managers.StorageManager
13+
614

715
class AddressBar : AppCompatActivity() {
816
override fun onCreate(savedInstanceState: Bundle?) {
917
super.onCreate(savedInstanceState)
1018
setContentView(R.layout.activity_address_bar)
19+
val uri :String = intent.getStringExtra("currentURI").toString();
20+
21+
val editBox = findViewById<EditText>(R.id.urlEnterBox);
22+
editBox.setText(uri);
23+
24+
editBox.requestFocus();
25+
editBox.selectAll()
26+
27+
editBox.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
28+
if (keyCode == KeyEvent.KEYCODE_ENTER && event.action == KeyEvent.ACTION_UP) {
29+
30+
var text = editBox.text.toString();
31+
if (text.trim() == "") {
32+
setResult(Activity.RESULT_CANCELED)
33+
finish()
34+
overridePendingTransition(0, 0)
35+
} else {
36+
37+
val data = Intent()
38+
data.putExtra("targetURI", text.trim());
39+
// more handling here
40+
setResult(Activity.RESULT_OK, data);
41+
finish()
42+
overridePendingTransition(0, 0)
43+
}
44+
return@OnKeyListener true
45+
}
46+
false
47+
})
48+
49+
}
50+
51+
override fun onBackPressed() {
52+
super.onBackPressed()
53+
overridePendingTransition(0, 0)
1154
}
1255
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<?xml version="1.0" encoding="UTF-8"?>
22
<shape xmlns:android="http://schemas.android.com/apk/res/android">
33
<solid android:color="?colorPrimaryVariant"/>
4-
<stroke android:width="0dp" android:color="?colorPrimaryVariant" />
4+
<stroke android:width="0dp" android:color="?colorSecondary" />
55
<corners android:radius="10dp"/>
66
<padding android:left="0dp" android:top="0dp" android:right="0dp" android:bottom="0dp" />
77
</shape>
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<selector xmlns:android="http://schemas.android.com/apk/res/android">
3+
<item android:drawable="@drawable/invisible_button_pressed"
4+
android:state_pressed="true"/>
5+
<item android:drawable="@drawable/invisible_button_normal"
6+
android:state_enabled="false"/>
7+
</selector>
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
<?xml version="1.0" encoding="UTF-8"?>
2+
<shape xmlns:android="http://schemas.android.com/apk/res/android">
3+
<stroke android:width="0dp" android:color="@color/blue" />
4+
<corners android:radius="10dp"/>
5+
</shape>

0 commit comments

Comments
 (0)