Coder Social home page Coder Social logo

webapps's Introduction

WebApps Sandboxed browser Android app

DEPRECATED - This project is no longer maintained, due to reasons explained in this issue

screenshot 1 screenshot 2 screenshot 3

WebApps allows you to save websites, as if they were apps! It provides a secure way to browse popular webapps by eliminating referrers, 3rd party requests, 3rd party cookies, insecure HTTP requests, etc.

It accomplishes this by providing a sandbox for multiple webapps (like Google's apps, Facebook, Twitter, etc.). Each webapp will run in it's own sandbox, with 3rd party requests (images, scripts, iframes, etc.) blocked, and all external links opening in an external default web browser (which should have cookies, plug-ins, flash, etc. disabled). All HTTP requests are blocked (only HTTPS allowed). This improves security, especially on untrusted networks. In addition, WebApps will warn you if the SSL certificate of the site you're viewing has changed to warn you of a possible man-in-the-middle attack.

For a less security-focussed, but more media-friendly option, try Web Media Share, which is a fork of WebApps with specific focus on viewing and sharing/casting media.

Grab the APK from releases

Features

  • Works like Mozilla Prism on the desktop. This is a mostly chrome-less browser that gets out of your way.
  • Completely full-screen browsing (auto-hiding actionbar)
  • Securely browse mobile sites (uses HTTPS only)
  • Blocks 3rd party requests (images/scripts/iframes) like the NoScript, NotScripts, uMatrix, uBlock Origin plugins on the desktop
  • Allows self-signed SSL certificates to be saved
  • Warns if server SSL certificate changes (e.g. during man-in-the-middle-attack)
  • User agent and text size setting (per site) allows more rich mobile experience (depending on site)
  • External links (outside the domain of the site visited) open in your default browser
  • Long-press links to choose how to open them
  • Create shortcuts to your webapps on the homescreen
  • Uses much less bandwidth than native apps (like Google+ app). No background sync'ing.
  • Features local data storage and caching for reduced bandwidth usage and better speed.
  • Fully open source software.

Cookies

Cookies are stored by Android's CookieManager, of which there is one instance per app. To avoid cookies from passing between sandboxes, the following has been implemented:

  • All cookies in the CookieManager are deleted when opening a URL or web app.
  • For saved web apps, the saved cookies are restored, and the app opened.
  • Cookies are only saved for the root domain of the saved web app, and made available to all sub-domains.
  • No 3rd party cookies are saved or sent. This may prevent some sites from working correctly.

In short, there is a strict cookie policy in place that ensures that cookies are correctly sandboxed, and that no 3rd party cookies are saved or sent.

However, it should be noted that there are several techniques for storing unique identifiers, such as evercookie AKA supercookies. Thus, the strongest protection this app provides is the blocking of 3rd party requests, which is why it is important to pick services that use the least amount of 3rd party requests, and try to unblock as few of them as possible. In particular, CDNs and other common 3rd party services such as CloudFlare, JQuery, Google Fonts, Google Analytics, etc. should be blocked as much as possible.

Referer

Referer information is not send on any request (as per default behaviour of Webview), which may lead to problems on some sites, but improves privacy.

Storage

Plugins, and local file access are disabled, however DOM/local storage and app caching is allowed. There is only one cache for all sandboxes to share, so this is potentially a way to leak information between sandboxes.

Location

Since WebApps v3.0, location access has been enabled. WebApps will prompt for location access per web app, the first time the app requests your location. You can then permanently allow or deny location access, with an option to reset the app should you change your mind.

Privacy warnings

WebApps sandboxing is not perfect:

  • WebApps relies on Android System WebView (or Bromite if you have that installed) which may or may not make additional requests, send out identifying headers, implement FLoC or similar, etc.
  • Evercookie/supercookies can leak information between sandboxes
  • Browser fingerprinting can be used to identify our browser across domains
  • The shared cache can be abused to leak information between sandboxes
  • CNAME cloaking (see https://medium.com/nextdns/cname-cloaking-the-dangerous-disguise-of-third-party-trackers-195205dc522a) can be used to bypass 3rd-party content blocking, and is being increasingly used across the web

There are probably many more ways to leak identifying data across sites that I am not aware of.

Credits:

Development

Libraries

This project makes use of the following libraries/tools:

NOTE: There are many inter-dependencies between the various library versions, Gradle versions, Gradle plugin versions, Android SDK versions, and the JDK version (which has to be JDK 8 for Android)! Simply upgrading any one of these components is likely to cause a build failure, and this will not be easy to resolve.

Build and run

To run a debug build of this project:

  • Clone or download the git repository to your local machine (git clone [email protected]:tobykurien/WebApps.git)
  • Run ./debug.sh to build a debug APK and upload it to a connected device.

VSCode

The easiest (although not the nicest) way to make changes to this app is to use VSCode and an Xtend plugin. While you get basic syntax highlighting, you will get no code completion/intellisense/code navigation/Java docs/etc. It is a basic text editor. On the plus side, setup is very easy, and it is light on RAM (can work on a machine with only 4Gb RAM).

You can run ./debug.sh after a code change to compile and run the app on an attached device. This is how this project is currently being maintained.

Eclipse

Eclipse is the best development environment for this project, because it makes use of Xtend lang that is only supported in Eclipse. In order to develop in Eclipse:

  • UPDATE: due to this issue the Gradle android eclipse plugin had to be removed from the repo, so you will need to manually compile that gradle plugin with JDK8 and add it to the app/build.gradle file to continue. Alternatively, copy the compiled version from here and apply the plugin as in build.gradle. This plugin is needed to set up Eclipse to work with Android AAR dependencies.
  • Install the Xtend plugin for Eclipse
  • Clone the git repository to your local machine (git clone ...)
  • Inside the checked-out folder, run: ./gradlew eclipse. This will download all the required 3rd party libraries and create the Eclipse classpath and project files
  • Open Eclipse and import the project in the app folder using File -> Import -> Gradle -> Existing Gradle Project (not as a generic project)
  • Right-click the "app" project -> Properties -> Add Variable -> Cionfigure Variables -> New
    • add a new variable called ANDROID_HOME and point it to the location of your android SDK installation
    • Apply and Close, and do a full re-build
  • The project should now compile in Eclipse

Android Studio

Development in Android Studio is not supported any longer, as the Xtend plugin for IntelliJ (https://plugins.jetbrains.com/plugin/8073-xtend-support) is not maintained.

webapps's People

Contributors

chaptergy avatar cristianaunisa avatar fanthos avatar full-duplex avatar iraamaro avatar mueller-ma avatar naofum avatar oviazh avatar sitavi avatar sr093906 avatar tacothedank avatar tobykurien avatar zayuim avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

webapps's Issues

Build issue

:compileReleaseXtend

WARNING:    Dependencies.xtend - 
15: Unnecessary cast from Settings to Settings

WARNING:    WebAppActivity.xtend - 
316: The constructor ViewConfiguration() is deprecated

WARNING:    DbService.xtend - 
4: The import 'com.tobykurien.webapps.R' is never used.

WARNING:    MainActivity.xtend - 
21: The import 'android.util.Log' is never used.

WARNING:    WebappsAdapter.xtend - 
13: The import 'org.xtendroid.adapter.AndroidAdapter' is never used.

WARNING:    DlgSaveWebapp.xtend - 
10: The import 'java.util.HashMap' is never used.
:generateReleaseSources
:processReleaseJavaRes UP-TO-DATE
:compileReleaseJava/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:35: error: cannot access DrawerLayoutImpl
public class BaseWebAppActivity extends AppCompatActivity {
       ^
  class file for android.support.v4.widget.DrawerLayoutImpl not found
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/webviewclient/WebClient.java:45: error: no suitable constructor found for Builder(BaseWebAppActivity)
      new AlertDialog.Builder(activity)
      ^
    constructor Builder.Builder(Context,int) is not applicable
      (actual and formal argument lists differ in length)
    constructor Builder.Builder(Context) is not applicable
      (actual argument BaseWebAppActivity cannot be converted to Context by method invocation conversion)
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/webviewclient/WebClient.java:93: error: cannot find symbol
         activity.startActivity(i);
                 ^
  symbol:   method startActivity(Intent)
  location: variable activity of type BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/webviewclient/WebClient.java:99: error: cannot find symbol
         activity.startActivity(i);
                 ^
  symbol:   method startActivity(Intent)
  location: variable activity of type BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/webviewclient/WebClient.java:105: error: cannot find symbol
         activity.startActivity(i);
                 ^
  symbol:   method startActivity(Intent)
  location: variable activity of type BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/webviewclient/WebClient.java:118: error: method getSettings in class Dependencies cannot be applied to given types;
      Settings settings = Dependencies.getSettings(activity);
                                      ^
  required: Context
  found: BaseWebAppActivity
  reason: actual argument BaseWebAppActivity cannot be converted to Context by method invocation conversion
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/webviewclient/WebClient.java:159: error: no suitable method found for makeText(BaseWebAppActivity,String,int)
      Toast.makeText(activity, description, Toast.LENGTH_LONG).show();
           ^
    method Toast.makeText(Context,int,int) is not applicable
      (actual argument BaseWebAppActivity cannot be converted to Context by method invocation conversion)
    method Toast.makeText(Context,CharSequence,int) is not applicable
      (actual argument BaseWebAppActivity cannot be converted to Context by method invocation conversion)
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:48: error: cannot find symbol
        super.onCreate(savedInstanceState);
        ^
  symbol:   variable super
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:51: error: cannot find symbol
                getDir("icons", MODE_PRIVATE).getPath());
                                ^
  symbol:   variable MODE_PRIVATE
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:52: error: cannot find symbol
        setContentView(R.layout.webapp);
        ^
  symbol:   method setContentView(int)
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:56: error: cannot find symbol
            finish();
            ^
  symbol:   method finish()
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:60: error: cannot find symbol
        if (getIntent() != null && getIntent().getData() != null
            ^
  symbol:   method getIntent()
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:60: error: cannot find symbol
        if (getIntent() != null && getIntent().getData() != null
                                   ^
  symbol:   method getIntent()
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:61: error: cannot find symbol
                && Intent.ACTION_VIEW.equals(getIntent().getAction())) {
                                             ^
  symbol:   method getIntent()
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:62: error: cannot find symbol
            siteUrl = getIntent().getData();
                      ^
  symbol:   method getIntent()
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:63: error: cannot find symbol
            webappId = getIntent().getLongExtra(EXTRA_WEBAPP_ID, -1);
                       ^
  symbol:   method getIntent()
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:66: error: cannot find symbol
            finish();
            ^
  symbol:   method finish()
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:70: error: cannot find symbol
        CookieSyncManager.createInstance(this);
                                         ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:46: error: method does not override or implement a method from a supertype
    @Override
    ^
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:79: error: cannot find symbol
        super.onResume();
        ^
  symbol:   variable super
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:77: error: method does not override or implement a method from a supertype
    @Override
    ^
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:91: error: cannot find symbol
        super.onPause();
        ^
  symbol:   variable super
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:89: error: method does not override or implement a method from a supertype
    @Override
    ^
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:108: error: cannot find symbol
        String databasePath = this.getApplicationContext().getCacheDir()
                              ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:114: error: cannot find symbol
        String cachePath = this.getApplicationContext().getCacheDir()
                           ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:133: error: cannot find symbol
        settings.setLoadsImagesAutomatically(Settings.getSettings(this)
                                                                  ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:139: error: cannot find symbol
        String userAgent = Settings.getSettings(this).getUserAgent();
                                                ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:173: error: cannot find symbol
                    startActivity(i);
                    ^
  symbol: method startActivity(Intent)
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:201: error: cannot find symbol
        return (ProgressBar) findViewById(R.id.site_progress);
                             ^
  symbol:   method findViewById(int)
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:210: error: cannot find symbol
        return (WebView) findViewById(R.id.site_webview);
                         ^
  symbol:   method findViewById(int)
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:226: error: cannot find symbol
                DbService db = Dependencies.getDb(this);
                                                  ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:236: error: cannot find symbol
            wc = new WebClient(this, wv, pb, unblock.toArray(new String[0]));
                               ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:248: error: cannot find symbol
        int size = Settings.getSettings(this).getIntFontSize();
                                        ^
  symbol:   variable this
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:276: error: cannot find symbol
        return super.onKeyDown(keyCode, event);
               ^
  symbol:   variable super
  location: class BaseWebAppActivity
/home/krt/src/fdroiddata/build/com.tobykurien.webapps/src/com/tobykurien/webapps/activity/BaseWebAppActivity.java:270: error: method does not override or implement a method from a supertype
    @Override
    ^
 FAILED

FAILURE: Build failed with an exception.

Action bar colour

Perhaps use the colour palette of the webapp icon to set the colour of the action bar, or let the user override the colour in settings.

Support localStorage and CORS?

I am trying to use apps based on remotestorage (such as http://myfavoritedrinks.5apps.com/), but something in the authentication process fails. I suspect that either CORS requests or localStorage is blocked/unsupported by WebApps. The same apps work fine in the Android stock browser.

It'd be nice if WebApps provided a way to view console logs so I can debug this problem. For example, the stock browser sends everything from console.log to logcat.

saving as webapp doesn't do anything

I got your app via fdroid. I opened https://facebook.com, but when I went to save as "Facebook", nothing happens. When I navigate back to front page of your app, I still see a bunch of "NULL" apps, and clicking any just crashes program. Am I doing something wrong? Or is that save behavior not implemented? I'm on galaxy s3 with CyanogenMod 12 nightly.

Protect app with lockscreen

an awesome feature would be password encrypted webapp-data (cache, cookies, etc.) so that the app cannot be used, without entering a password.

Maps blank

Hi! Recently (sometime in the last couple of months), opening Maps in GApps Browser gives only a blank page. Other apps (at least News and G+) seem to work fine still.

Deleted webapp's desktop shortcut causes an exception

Steps to reproduce:
Create a webapp
Create a desktop (home screen) shortcut
Delete the webapp
Tap the shortcut

Stack trace:
E/AndroidRuntime( 3999): Process: com.tobykurien.webapps, PID: 3999
E/AndroidRuntime( 3999): java.lang.RuntimeException: Unable to start activity ComponentInfo{com.tobykurien.webapps/com.tobykurien.webapps.activity.WebAppActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.tobykurien.webapps.data.Webapp.getFontSize()' on a null object reference
E/AndroidRuntime( 3999): Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int com.tobykurien.webapps.data.Webapp.getFontSize()' on a null object reference
E/AndroidRuntime( 3999): at com.tobykurien.webapps.webviewclient.WebViewUtilsApi11.setupWebView(WebViewUtilsApi11.xtend:61)
E/AndroidRuntime( 3999): at com.tobykurien.webapps.webviewclient.WebViewUtilsApi12.setupWebView(WebViewUtilsApi12.xtend:12)
E/AndroidRuntime( 3999): at com.tobykurien.webapps.webviewclient.WebViewUtilsApi16.setupWebView(WebViewUtilsApi16.xtend:14)
E/AndroidRuntime( 3999): at com.tobykurien.webapps.webviewclient.WebViewUtilsApi21.setupWebView(WebViewUtilsApi21.xtend:14)
E/AndroidRuntime( 3999): at com.tobykurien.webapps.activity.BaseWebAppActivity.setupWebView(BaseWebAppActivity.xtend:82)
E/AndroidRuntime( 3999): at com.tobykurien.webapps.activity.BaseWebAppActivity.onCreate(BaseWebAppActivity.xtend:70)
E/AndroidRuntime( 3999): at com.tobykurien.webapps.activity.WebAppActivity.onCreate(WebAppActivity.xtend:54)

support local html files (intent/data and URI)

Hi, I store my bookmarks in a local html files. Did not succeed by any mean to have WebApps open this file.

It would be nice if WebApps could

  • open file:/// type URIs
  • register a data scheme to receive file:// URIs from file managers etc
  • register a data scheme to receive a HTML file (eg from an encrypted email), store it in its own encrypted dataspace and have a private bookmark to that file

I feel somewhat safer to have the

Thanks in advance..

insecure HTTP whitelist

Would it be possible to have some whitelisting system for HTTP like the one for 3rd party requests? Thx

Individual user agents for sandboxes

Changing the user agent string is currently possible by changing the global setting. Since some mobile versions of websites are easier/faster, but also lack functionality, it would be helpful to optionally define the user agent per sandbox.

m.facebook.com login page is launched in default browser

Some time within the past few weeks, WebApps started launching my phone's default browser when I try to use my facebook webapp ( https://m.facebook.com/ ). If I allow it to launch, my default browser then opens to a facebook login page. Of course, logging in to facebook in my default browser doesn't return me to WebApps, and returning to it manually shows me logged out of facebook, so WebApps is effectively broken for facebook.

It has only happened about half of the times I've launched my facebook webapp recently. The other times worked fine.

I tried deleting and re-creating my facebook webapp, but that hasn't made any difference.

I'm using WebApps 2.5, installed from F-Droid, on Android 5.1.1.

Stuck at version 1.4 on F-Droid

WebApps on F-Droid is only at version 1.4, while it's at version 2.2 on the Play Store.

It would be nice if your privacy-saving app didn't require privacy-invading Google services. :)

Support usage of multiple accounts.

Since multiple saved webapps use the same sandbox and share cookies (at least) for the same root domain (see #3), it is currently not possible to switch between different accounts e.g. by creating two separate bookmarks (e.g. twitter.com/user1 and twitter.com/user2). This might also affect #45.
It would be interesting if it is possible to support the usage of multiple indipendent sandboxes and/or cookies for the same domain but different accounts without the need to log out and in each time.

global exit button

I like to close security related apps when I'm done using then
Right now in web apps I have to use back many times to get to the exit button on the main screen.
An exit button that is always accessible would be nice

Allow HTTP WebApps

When the preference "Block insecure requests" is disabled, the user should be able to choose the protocol on its own.

Remove the leading https:// from "Open Site" dialog

While it's useful when manually typing the address, it comes into the way when copy-pasting a URL that already contains the "https://" part. It's bothersome to scroll to the beginning of the URL and delete extra "https://".
IMHO, address field with no prefix would be more useful solution in addition to check for the beginning of entered URL:

  1. starting with "https://" -- leave it as is
  2. starting with "http://" -- show an error or a toast and/or replace it with "https://"
  3. if none of above (for example: "github.com"), just add the "https://"

Truncate long URL's

When the URL is really long, the list of webapps looks messy. Truncate to one-line or show only the domain part.

App crashes when adding Pandora

When adding "padora.com" the app just loads the website from the device's external browser. When adding "www.pandora.com" the app begins to load the website from the internal browser but crashes before the web page loads completely. With either entry I was hoping the app would just load a broken page that would allow me to start re-enabling certain connections but I'm not able to do that.

I'm having this issue with the latest update from the F-Droid repo. I haven't tried it on any earlier version though so I can't tell you if this has been an issue in the past. I'm running the app on the latest Cyanogenmod snapshot with my Nexus 5X.

google groups new topic hangs

I've been trying this app recently and when I tried to post a new topic in google groups it hung at loading the Window to create the post.
It could be my setup but maybe a bug if anyone else can reproduce.

"Homescreen shortcut" crashes the app

Steps to reproduce:

  1. Open any URL via the "Open URL" icon (globe)
  2. Optionally: save the web app
  3. Try adding a homescreen shortcut from the app's menu

logcat.log

Only after saving and exiting the new web app, the "Homescreen shortcut" action works.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.