diff --git a/app/build.gradle b/app/build.gradle
index bb99247..5982f77 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -8,8 +8,8 @@ android {
applicationId "org.eu.octt.browserocto"
minSdkVersion 1
targetSdkVersion 30
- versionCode 1
- versionName "1.0.1"
+ versionCode 999
+ versionName "999.999.999"
}
buildTypes {
release {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 4fd5ac9..6779beb 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -31,5 +31,9 @@
android:label="@string/app_name"
android:exported="true">
+
+
-
\ No newline at end of file
+
diff --git a/app/src/main/java/org/eu/octt/browserocto/BrowserActivity.java b/app/src/main/java/org/eu/octt/browserocto/BrowserActivity.java
new file mode 100644
index 0000000..e99f4ab
--- /dev/null
+++ b/app/src/main/java/org/eu/octt/browserocto/BrowserActivity.java
@@ -0,0 +1,272 @@
+package org.eu.octt.browserocto;
+import android.app.*;
+import android.os.*;
+import android.widget.*;
+import android.view.*;
+import android.webkit.*;
+import android.widget.AbsoluteLayout.*;
+import android.graphics.drawable.*;
+import android.widget.PopupMenu.*;
+import android.util.*;
+import java.util.*;
+import android.content.*;
+import android.text.*;
+
+public class BrowserActivity extends Activity
+{
+ Boolean WasPopOptOpen = new Boolean(false);
+ /*public Boolean GetWasPopOptOpen(){
+ return WasPopOptOpen;
+ };
+ public void SetWasPopOptOpen(Boolean Open){
+ WasPopOptOpen = true;
+ };*/
+ SiteSettings CurSiteSettings, DefSiteSettings;
+ public SiteSettings GetDefSiteSettings(){
+ return DefSiteSettings;
+ }
+ public void SetCurSiteSettings(SiteSettings Settings){
+ CurSiteSettings = Settings;
+ }
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState)
+ {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.browser);
+ final Bundle Extra = getIntent().getExtras();
+ final LinearLayout LayMain = findViewById(R.id.LayMain);
+ //requestWindowFeature(Window.FEATURE_NO_TITLE);
+ getActionBar().hide();
+ TypedValue ThemeBackgroundValue = new TypedValue();
+ getTheme().resolveAttribute(android.R.attr.windowBackground, ThemeBackgroundValue, true);
+ Drawable ThemeBackgroundDrawable = getResources().getDrawable(ThemeBackgroundValue.resourceId);
+
+ final LinearLayout LayOmni = new LinearLayout(this);
+ LayOmni.setOrientation(LinearLayout.HORIZONTAL);
+ LayMain.addView(LayOmni);
+
+ final EditText EditOmnibar = new EditText(this);
+ EditOmnibar.setInputType(InputType.TYPE_CLASS_TEXT);
+ EditOmnibar.setMaxLines(1);
+ EditOmnibar.setLayoutParams(new TableRow.LayoutParams(0, LayoutParams.WRAP_CONTENT, 1.0f));
+ EditOmnibar.setText("https://example.com");
+ LayOmni.addView(EditOmnibar);
+
+ final WebView Weber = new WebView(this);
+ LayMain.addView(Weber);
+
+ EditOmnibar.setOnKeyListener(new OnKeyListener() {
+ @Override
+ public boolean onKey(View v, int keyCode, KeyEvent event) {
+ if (event.getAction() == KeyEvent.ACTION_DOWN && keyCode == KeyEvent.KEYCODE_ENTER) {
+ Weber.loadUrl(EditOmnibar.getText().toString());
+ };
+ return false;
+ };
+ });
+
+ final Button BtnOpt = new Button(this);
+ registerForContextMenu(BtnOpt);
+ LayOmni.addView(BtnOpt);
+
+ final ScrollView _LayOpt = new ScrollView(this);
+ final LinearLayout LayOpt = new LinearLayout(this);
+ LayOpt.setOrientation(LinearLayout.VERTICAL);
+ _LayOpt.addView(LayOpt);
+
+ //HashMap NavActions = new HashMap();
+ //NavActions.put("Tabs", new HashMap().put("Type", "Button"));
+ //NavActions.put("History", new HashMap().put("Type", "Button"));
+ //NavActions.put("Favourites", new HashMap().put("Type", "Button"));
+ //NavActions.put("Reload/Stop", new HashMap().put("Type", "Button"));
+ //NavActions.put("Tabs", new HashMap().put("Type", "Button"));
+
+ //BrowserNavigationButtons NavButtons = new BrowserNavigationButtons(this);
+
+ HashMap SiteSettingsCollection = new HashMap();
+ final SiteSettings DefSiteSettings = new SiteSettings();
+ DefSiteSettings.Viewformat = "Auto"; //new RadioValue("Auto");
+ DefSiteSettings.Useragent = "Auto";
+ DefSiteSettings.BlockBadware = true;
+ DefSiteSettings.SuppressBanners = true;
+ DefSiteSettings.AllowJs = true;
+ DefSiteSettings.AllowCss = true;
+ DefSiteSettings.AllowStorage = true;
+ DefSiteSettings.Autofill = true;
+ DefSiteSettings.ForceCache = false;
+ DefSiteSettings.Sitetweaks = true;
+ DefSiteSettings.PolyfillJs = false;
+ DefSiteSettings.PolyfillCss = false;
+ DefSiteSettings.Devtools = false;
+ SiteSettingsCollection.put("Default", DefSiteSettings);
+ SetCurSiteSettings(GetDefSiteSettings());
+
+ /*final TextView ITest = new TextView(this);
+ ITest.setText("Test");
+ ITest.setPadding(8,8,8,8);
+ ITest.setClickable(true);
+ ITest.setFocusable(true);
+ TypedValue typedValue = new TypedValue();
+ getTheme().resolveAttribute(android.R.attr.selectableItemBackground, typedValue, true);
+ ITest.setBackgroundResource(typedValue.resourceId); // getResources().getDrawable(android.R.attr.selectableItemBackground)); //Drawable(getResources().getDrawable(getResources().getIdentifier("?android:attr/selectableItemBackground", "drawable", getPackageName())));
+ LayOpt.addView(ITest);*/
+
+ final Button BtnOptTabs = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Tabs"), LayOpt);
+ final Button BtnOptHistory = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "History"), LayOpt);
+ final Button BtnOptBookmarks = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Bookmarks"), LayOpt);
+ final Button BtnOptLoad = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Reload/Stop"), LayOpt);
+ final Button BtnOptPrev = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Prev"), LayOpt);
+ final Button BtnOptNext = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Next"), LayOpt);
+
+ final RadioGroup RadioOptSettingsNamespace = (RadioGroup)_Util.AddLayoutChild(new RadioGroup(this), LayOpt);
+ RadioOptSettingsNamespace.setOrientation(RadioGroup.HORIZONTAL);
+ RadioOptSettingsNamespace.addView(_Util.MakeTextView(this, "Set: "));
+ final RadioButton RadioOptSettingsNamespaceDefault = (RadioButton)_Util.AddLayoutChild(_Util.MakeRadioButton(this, false, "Default"), RadioOptSettingsNamespace);
+ final RadioButton RadioOptSettingsNamespaceSite = (RadioButton)_Util.AddLayoutChild(_Util.MakeRadioButton(this, true, "Site"), RadioOptSettingsNamespace);
+ RadioOptSettingsNamespaceDefault.setOnClickListener(new OnClickListener(){
+ @Override
+ public void onClick(View v){
+ //RadioOptSettingsNamespaceDefault.setChecked(true);
+ RadioOptSettingsNamespaceSite.setChecked(false);
+ RadioOptSettingsNamespaceDefault.setChecked(true);
+ SetCurSiteSettings(GetDefSiteSettings());
+ };
+ });
+ RadioOptSettingsNamespaceSite.setOnClickListener(new OnClickListener(){
+ @Override
+ public void onClick(View v){
+ RadioOptSettingsNamespaceDefault.setChecked(false);
+ RadioOptSettingsNamespaceSite.setChecked(true);
+ //RadioOptSettingsNamespaceSite.setChecked(true);
+ };
+ });
+
+ final CheckBox CheckOptBlockBadware = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.BlockBadware, "Block Badware"), LayOpt);
+ final CheckBox CheckOptSuppressBanners = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.SuppressBanners, "Suppress Cookie Banners"), LayOpt);
+ final CheckBox CheckOptAllowJs = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.AllowJs, "Allow JavaScript/WASM"), LayOpt);
+ final CheckBox CheckOptAllowCss = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.AllowCss, "Allow Styles"), LayOpt);
+ final CheckBox CheckOptAllowStorage = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.AllowStorage, "Allow Site Storage"), LayOpt);
+ final CheckBox CheckOptAutofill = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.Autofill, "Fields Autofill"), LayOpt);
+ final CheckBox CheckOptForceCache = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.ForceCache, "Force Offline Caching"), LayOpt);
+ final CheckBox CheckOptSitetweaks = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.Sitetweaks, "SiteTweaks"), LayOpt);
+ final CheckBox CheckOptPolyfillJs = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.PolyfillJs, "Polyfill JavaScript"), LayOpt);
+ final CheckBox CheckOptPolyfillCss = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.PolyfillCss, "Polyfill CSS"), LayOpt);
+ final CheckBox CheckOptDevtools = (CheckBox)_Util.AddLayoutChild(_Util.MakeCheckBox(this, DefSiteSettings.Devtools, "DevTools"), LayOpt);
+ final Button BtnOptCustomJs = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Custom JavaScript"), LayOpt);
+ final Button BtnOptCustomCss = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Custom CSS"), LayOpt);
+ final Button BtnOptCustomRedirects = (Button)_Util.AddLayoutChild(_Util.MakeButton(this, "Custom Redirects"), LayOpt);
+
+ //(CheckBox)LayOpt.findViewById("CheckDevtools").setText("Test");
+
+ final PopupWindow PopOpt = new PopupWindow(this);
+ PopOpt.setContentView(_LayOpt);
+ //PopOpt.setBackgroundDrawable(new ColorDrawable());
+ PopOpt.setBackgroundDrawable(ThemeBackgroundDrawable);
+ //PopOpt.setBackgroundDrawable(getResources().getDrawable(android.R.drawable.ic_dialog_email));
+ PopOpt.setOutsideTouchable(true);
+
+ // TODO: Emulate the proper behavior of Firefox options button (clicking on it after opening would still close the menu)
+ BtnOpt.setOnClickListener(new OnClickListener(){
+ @Override
+ public void onClick(View v){
+ /*
+ PopupMenu menu = new PopupMenu(BrowserActivity.this, v);
+ menu.getMenu().add("Reload/Stop");
+ menu.getMenu().add("Back");
+ menu.getMenu().add("Front");
+ menu.getMenu().add("Tabs");
+ menu.show();
+ */
+ /*if (WasPopOptOpen) {
+ PopOpt.dismiss();
+ WasPopOptOpen = false;
+ } else {*/
+ BtnOpt.setEnabled(false);
+ PopOpt.showAsDropDown(v);
+ /* WasPopOptOpen = true;
+ };*/
+ };
+ });
+ /*BtnOpt.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ switch(event.getAction()) {
+ case MotionEvent.ACTION_DOWN:
+ return true;
+ case MotionEvent.ACTION_UP:
+ if (WasPopOptOpen) {
+ PopOpt.dismiss();
+ WasPopOptOpen = false;
+ } else {
+ PopOpt.showAsDropDown(v);
+ WasPopOptOpen = true;
+ };
+ WasPopOptOpen = !WasPopOptOpen;
+ return true;
+ }
+ return false;
+ }
+ });*/
+ PopOpt.setOnDismissListener(new PopupWindow.OnDismissListener(){
+ @Override
+ public void onDismiss(){
+ //WasPopOptOpen = false;
+ BtnOpt.setEnabled(true);
+ };
+ });
+
+ Weber.loadUrl(EditOmnibar.getText().toString());
+ //Weber.getSettings().setJavaScriptEnabled(CurSiteSettings.AllowJs);
+ };
+
+ /*
+ @Override
+ public boolean onCreateOptionsMenu(Menu menu) {
+ menu.add(Menu.NONE, 1, Menu.NONE, "Item name");
+ return true;
+ }
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case 1:
+ return true;
+ default:
+ return false;
+ }
+ }
+ */
+};
+
+/*class BrowserNavigationButtons
+{
+ Context c;
+ BrowserNavigationButtons(Context c) {
+ Button BtnTabs = new Button(c);
+ Button BtnHistory;
+ Button BtnFavorites;
+ Button BtnLoad;
+ Button BtnPrev;
+ Button BtnNext;
+ };
+};*/
+
+/*class RadioValue {
+ String Value;
+ RadioValue(String Value) {
+ String Option = Value;
+ }
+};*/
+
+class SiteSettings {
+ /*RadioValue*/String Viewformat, Useragent;
+ Boolean BlockBadware, SuppressBanners;
+ Boolean AllowJs, AllowCss;
+ Boolean AllowStorage, Autofill;
+ Boolean ForceCache;
+ Boolean Sitetweaks;
+ Boolean PolyfillJs, PolyfillCss;
+ Boolean Devtools;
+ String CustomJs, CustomCss, CustomRedirects;
+};
diff --git a/app/src/main/java/org/eu/octt/browserocto/MainActivity.java b/app/src/main/java/org/eu/octt/browserocto/MainActivity.java
index 6eb6c34..8652a35 100644
--- a/app/src/main/java/org/eu/octt/browserocto/MainActivity.java
+++ b/app/src/main/java/org/eu/octt/browserocto/MainActivity.java
@@ -10,7 +10,8 @@ import android.net.*;
import android.content.pm.*;
import android.graphics.drawable.*;
-public class MainActivity extends Activity {
+public class MainActivity extends Activity
+{
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@@ -20,6 +21,7 @@ public class MainActivity extends Activity {
final EditText EditUrl = findViewById(R.id.EditUrl);
final Button BtnOpen = findViewById(R.id.BtnOpen);
final Button BtnShortcut = findViewById(R.id.BtnShortcut);
+ final Button BtnExperimental = findViewById(R.id.BtnExperimental);
final CheckBox SwitchCache = findViewById(R.id.SwitchCache);
BtnOpen.setOnClickListener(new OnClickListener() {
@@ -45,6 +47,13 @@ public class MainActivity extends Activity {
};
};
});
+
+ BtnExperimental.setOnClickListener(new OnClickListener(){
+ @Override
+ public void onClick(View v){
+ startActivity(new Intent(getApplicationContext(), BrowserActivity.class));
+ }
+ });
};
private Intent MakeIntBrowse(String Url, Boolean Cache) {
diff --git a/app/src/main/java/org/eu/octt/browserocto/WebWindowActivity.java b/app/src/main/java/org/eu/octt/browserocto/WebWindowActivity.java
index 1c91ec0..c7f4503 100644
--- a/app/src/main/java/org/eu/octt/browserocto/WebWindowActivity.java
+++ b/app/src/main/java/org/eu/octt/browserocto/WebWindowActivity.java
@@ -9,7 +9,8 @@ import android.util.*;
import java.io.*;
import java.net.*;
-public class WebWindowActivity extends Activity {
+public class WebWindowActivity extends Activity
+{
WebView Web0;
@Override
diff --git a/app/src/main/java/org/eu/octt/browserocto/_Util.java b/app/src/main/java/org/eu/octt/browserocto/_Util.java
index 217c717..3c8c03a 100644
--- a/app/src/main/java/org/eu/octt/browserocto/_Util.java
+++ b/app/src/main/java/org/eu/octt/browserocto/_Util.java
@@ -4,8 +4,12 @@ import android.app.*;
import android.content.*;
import android.widget.*;
import java.io.*;
+import android.graphics.drawable.*;
+import android.util.*;
+import android.view.*;
-public class _Util extends Activity {
+public class _Util extends Activity
+{
public static boolean StartsWithOneOf(String Check, String[] With) {
for (int i=0; i
+
+
+
+
diff --git a/app/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml
index cc72180..289f0e6 100644
--- a/app/src/main/res/layout/main.xml
+++ b/app/src/main/res/layout/main.xml
@@ -47,4 +47,12 @@
android:checked="true"
android:id="@+id/SwitchCache"/>
+
+
+