Coder Social home page Coder Social logo

jialingkun / smartwebviewcompact Goto Github PK

View Code? Open in Web Editor NEW
7.0 2.0 3.0 251 KB

Module / Library Version from: https://github.com/mgks/Android-SmartWebView

Java 98.36% HTML 1.64%
android webview webview-progressbar webview-library webview-upload

smartwebviewcompact's Introduction

Android-SmartWebView Compact

Disclaimer: This is a module version of Android-SmartWebView which can be found in here: https://github.com/mgks/Android-SmartWebView.

I Do not own the whole code. I only make the original code more compact and ready to use as android module.

Original Library Overview:

This project is developed to help you create Hybrid Android applications with just webview. Hybrid app comes in between webview and native forms, with this project you can embed any existing webpage or setup an Offline HTML/CSS/Javascript based project.

Android Smart WebView gathers all necessary information needed to make any simple app as powerful as a native Android app. This project takes only required data from device to obtain information, including, GPS Location, File Manager, Camera for Processing Images, Custom Dialogues, Notifications and more with clean minimal design.

Quick Start

If you want to simply implement a webview through this project, you can try to import the module and use it directly in your project Activity (Like MainActivity). Follow this step for a quick start:

STEP 1 : Import Module in your project

  • Clone or download this repository through this link: https://github.com/jialingkun/SmartWebViewCompact/archive/master.zip
  • Create your New Android Studio Project.
  • Click File > New > Import Module.
  • Enter the location of the module directory (SmartWebView Folder) then click Finish.
  • Make sure the library is listed at the top of your settings.gradle file, as shown here
include ':app',':SmartWebView'
  • Open the app module's build.gradle file and add a new line to the dependencies block as shown in the following snippet:
dependencies {
    implementation project(":SmartWebView")
}
  • Click Sync Project with Gradle Files.

Learn more about adding android library as depedency here: https://developer.android.com/studio/projects/android-library#AddDependency

STEP 2 : Manifest Permission

Put this permission in your manifest

    <!--
        Remove permissions that your app doesn't require, asking for authority over unwanted information can cause damage to your reputation among your users
    -->
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.CAMERA" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.VIBRATE" />

    <!-- remove location.gps feature if not using permission ACCESS_FINE_LOCATION -->
    <uses-feature android:name="android.hardware.location.gps" />
    <uses-feature android:name="android.hardware.touchscreen" android:required="false" />

STEP 3 : XML Layout Implementation

Assuming that you start fresh project with only activity_main.xml Your XML Layout should look like this:

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity">

   <WebView
       android:id="@+id/msw_view"
       android:layout_width="match_parent"
       android:layout_height="match_parent"/>

   <RelativeLayout
       android:id="@+id/logosplash"
       android:layout_width="match_parent"
       android:layout_height="match_parent"
       android:background="#ffffff"
       android:visibility="gone">
       <ImageView
           android:id="@+id/centerlogo"
           android:layout_width="250dp"
           android:layout_height="250dp"
           android:layout_centerInParent="true"
           android:src="@drawable/logo"/>
   </RelativeLayout>

   <ProgressBar
       android:id="@+id/msw_progress"
       style="@android:style/Widget.ProgressBar.Horizontal"
       android:layout_width="fill_parent"
       android:layout_height="6dip"
       android:progressDrawable="@drawable/progress_style"
       android:layout_alignParentBottom="true"
       android:layout_alignParentStart="true"
       android:layout_alignParentLeft="true"
       android:visibility="visible" />

</RelativeLayout>

STEP 4 : Java Implementation

Assuming that you start fresh project with only MainActivity.java Put this code in your Activity

MainActivity.java

public class MainActivity extends AppCompatActivity {

    SmartWebViewCompact smartWebViewCompact = new SmartWebViewCompact();

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
        super.onActivityResult(requestCode, resultCode, intent);
        smartWebViewCompact.onActivityResult(requestCode, resultCode, intent);
    }


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        //Permission variables
        smartWebViewCompact.ASWP_JSCRIPT     = true;     //enable JavaScript for webview
        smartWebViewCompact.ASWP_FUPLOAD     = true;     //upload file from webview
        smartWebViewCompact.ASWP_CAMUPLOAD   = true;     //enable upload from camera for photos
        smartWebViewCompact.ASWP_ONLYCAM     = false;   //incase you want only camera files to upload
        smartWebViewCompact.ASWP_MULFILE     = false;    //upload multiple files in webview
        smartWebViewCompact.ASWP_LOCATION    = false;     //track GPS locations
        smartWebViewCompact.ASWP_RATINGS     = false;     //show ratings dialog; auto configured, edit method get_rating() for customizations
        smartWebViewCompact.ASWP_PBAR        = true;     //show progress bar in app
        smartWebViewCompact.ASWP_ZOOM        = false;    //zoom control for webpages view
        smartWebViewCompact.ASWP_SFORM       = true;    //save form cache and auto-fill information
        smartWebViewCompact.ASWP_OFFLINE     = false;    //whether the loading webpages are offline or online
        smartWebViewCompact.ASWP_EXTURL      = true;     //open external url with default browser instead of app webview
        smartWebViewCompact.ASWP_ROOT        = true;    //False if you need to use webview in other intent activity
        smartWebViewCompact.ASWP_SPLASH      = true;    //enable splash screen

        //Configuration variables
        smartWebViewCompact.ASWV_URL          = "https://google.com"; //complete URL of your website or webpage
        smartWebViewCompact.ASWV_F_TYPE       = "*/*";  //to upload any file type using "*/*"; check file type references for more

        //Rating system variables
        DefaultSetting.ASWR_DAYS            = 3;        //after how many days of usage would you like to show the dialoge
        DefaultSetting.ASWR_TIMES           = 10;       //overall request launch times being ignored
        DefaultSetting.ASWR_INTERVAL        = 2;        //reminding users to rate after days interval

        WebView webView = (WebView) findViewById(R.id.msw_view);
        ProgressBar progressBar = (ProgressBar) findViewById(R.id.msw_progress);
        RelativeLayout splashScreen = (RelativeLayout) findViewById(R.id.logosplash); //logosplash
        smartWebViewCompact.onCreate(this,webView,progressBar,splashScreen);
    }

    @Override
    public void onBackPressed() {
        smartWebViewCompact.onBackPressed();
    }

    @Override
    protected void onSaveInstanceState(Bundle outState ){
        super.onSaveInstanceState(outState);
        smartWebViewCompact.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState){
        super.onRestoreInstanceState(savedInstanceState);
        smartWebViewCompact.onRestoreInstanceState(savedInstanceState);
    }
}

Implement inside fragment

If you need to put a webview inside fragment, try this code in your Fragment Java Class

FragmentActivity.java

public class FragmentActivity extends Fragment {
    SmartWebViewCompact smartWebViewCompact = new SmartWebViewCompact();

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        smartWebViewCompact.onActivityResult(requestCode, resultCode, data);
    }

    @Nullable
    @Override
    public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.activity_fragment, container, false);

        //Permission variables
        smartWebViewCompact.ASWP_JSCRIPT     = true;     //enable JavaScript for webview
        smartWebViewCompact.ASWP_FUPLOAD     = true;     //upload file from webview
        smartWebViewCompact.ASWP_CAMUPLOAD   = true;     //enable upload from camera for photos
        smartWebViewCompact.ASWP_ONLYCAM        = false;    //incase you want only camera files to upload
        smartWebViewCompact.ASWP_MULFILE     = false;    //upload multiple files in webview
        smartWebViewCompact.ASWP_LOCATION    = false;     //track GPS locations
        smartWebViewCompact.ASWP_RATINGS     = false;     //show ratings dialog; auto configured, edit method get_rating() for customizations
        smartWebViewCompact.ASWP_PBAR        = true;     //show progress bar in app
        smartWebViewCompact.ASWP_ZOOM        = false;    //zoom control for webpages view
        smartWebViewCompact.ASWP_SFORM       = true;    //save form cache and auto-fill information
        smartWebViewCompact.ASWP_OFFLINE     = false;    //whether the loading webpages are offline or online
        smartWebViewCompact.ASWP_EXTURL      = false;     //open external url with default browser instead of app webview
        smartWebViewCompact.ASWP_ROOT        = true;    //False if you need to use webview in other intent activity
        smartWebViewCompact.ASWP_SPLASH      = false;    //enable splash screen

        //Configuration variables
        smartWebViewCompact.ASWV_URL          = "https://google.com/"; //complete URL of your website or webpage
        smartWebViewCompact.ASWV_F_TYPE       = "*/*";  //to upload any file type using "*/*"; check file type references for more

        //Rating system variables
        DefaultSetting.ASWR_DAYS            = 3;        //after how many days of usage would you like to show the dialoge
        DefaultSetting.ASWR_TIMES           = 10;       //overall request launch times being ignored
        DefaultSetting.ASWR_INTERVAL        = 2;        //reminding users to rate after days interval

        WebView webView = (WebView) view.findViewById(R.id.msw_view);
        ProgressBar progressBar = (ProgressBar) view.findViewById(R.id.msw_progress);
        RelativeLayout splashScreen = (RelativeLayout) view.findViewById(R.id.logosplash); //logosplash
        smartWebViewCompact.onCreate(getActivity(),webView,progressBar,splashScreen);

        return view;
    }


    @Override
    public void onSaveInstanceState(@NonNull Bundle outState) {
        super.onSaveInstanceState(outState);
        smartWebViewCompact.onSaveInstanceState(outState);
    }


    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        if (savedInstanceState != null) {
            smartWebViewCompact.onRestoreInstanceState(savedInstanceState);
        }
    }
}

Note: OnBackPressed function currently not supported inside Fragment. Try a workaround by calling the method inside activity that has the fragment.

smartwebviewcompact's People

Contributors

jialingkun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

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.