package com.some.some;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import android.Manifest;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.Intent;
import android.content.pm.ActivityInfo;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.graphics.Rect;
import android.graphics.drawable.ColorDrawable;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.provider.MediaStore;
import android.provider.Settings;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.View;
import android.view.Window;
import android.webkit.DownloadListener;
import android.webkit.GeolocationPermissions;
import android.webkit.PermissionRequest;
import android.webkit.ValueCallback;
import android.webkit.WebChromeClient;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ProgressBar;
import android.widget.Toast;
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import android.app.DownloadManager;
public class MainActivity extends AppCompatActivity {
private WebView webview;
ProgressBar progressBar;
ProgressBar progressBar2;
AlertDialog alertDialog;
private SwipeRefreshLayout swipeRefreshLayout;
String appurl
= "https://x...content-available-to-author-only...o.com/home.php";
private ValueCallback<Uri> mUploadMessage;
private final static int FILECHOOSER_RESULTCODE=1;
public ValueCallback<Uri[]> uploadMessage;
private int LOCATION_PERMISSION_CODE = 1;
public static final int INPUT_FILE_REQUEST_CODE = 1;
public static final String EXTRA_FROM_NOTIFICATION
= "EXTRA_FROM_NOTIFICATION"; private ValueCallback<Uri[]> mFilePathCallback;
private String mCameraPhotoPath
;
private static final int PERMISSION_REQUEST_CODE = 200;
@SuppressLint("SetJavaScriptEnabled")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
View decor
= getWindow
().
getDecorView(); decor.
setSystemUiVisibility(View.
SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);//SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
FullScreencall();
try { trimCache(this); }
webview=(WebView)findViewById(R.id.webView);
progressBar=findViewById(R.id.progressBar);
// swipeRefreshLayout = (SwipeRefreshLayout) findViewById(R.id.swipe_refresh_layout);
// swipeRefreshLayout.setOnRefreshListener(MainActivity.this);
//webview.setWebChromeClient(new CustomChrome());
webview.setWebViewClient(new WebViewClient());
WebSettings webSettings = webview.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setAllowFileAccess(true);
webSettings.setAppCacheEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.getSettings().setJavaScriptEnabled(true);
webSettings.setJavaScriptEnabled(true);
webview.getSettings().setUserAgentString(webview.getSettings().getUserAgentString());
//webview.getSettings().setUserAgentString(webview.getSettings().getUserAgentString().replace("; wv", ""));
String MyUA
= "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 " + "(KHTML, like Gecko) Chrome/41.0.2228.0 Safari/537.36";
webview.getSettings().setUserAgentString(MyUA);
// for mute or unmute sound
webSettings.setMediaPlaybackRequiresUserGesture(false);
// webview.setWebChromeClient(new WebChromeClient(){
// @Override
// public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
// callback.invoke(origin, true, true);
// super.onGeolocationPermissionsShowPrompt(origin, callback);
// }
//
// @Override
// public void onPermissionRequest(PermissionRequest request) {
// super.onPermissionRequest(request);
// request.grant(request.getResources());
//
// }
//
// @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
// public boolean onShowFileChooser(WebView mWebView, ValueCallback<Uri[]> filePathCallback, WebChromeClient.FileChooserParams fileChooserParams)
// {
// if (uploadMessage != null) {
// uploadMessage.onReceiveValue(null);
// uploadMessage = null;
// }
//
// uploadMessage = filePathCallback;
//
// Intent intent = fileChooserParams.createIntent();
// try
// {
// startActivityForResult(intent, 100);
// } catch (ActivityNotFoundException e)
// {
// uploadMessage = null;
// Toast.makeText(getApplicationContext(), "Cannot Open File Chooser", Toast.LENGTH_LONG).show();
// return false;
// }
// return true;
// }
//
// });
//
webview.getSettings().setSupportMultipleWindows(true);
webview.setDownloadListener(new DownloadListener() {
@Override
long contentLength) {
Uri.parse(url));
request.allowScanningByMediaScanner();
request.
setNotificationVisibility(DownloadManager.
Request.
VISIBILITY_VISIBLE_NOTIFY_COMPLETED); //Notify client once download is completed! request.
setDestinationInExternalPublicDir(Environment.
DIRECTORY_DOWNLOADS,
"Name of your downloadble file goes here, example: Mathematics II "); DownloadManager dm = (DownloadManager) getSystemService(DOWNLOAD_SERVICE);
dm.enqueue(request);
Toast.makeText(getApplicationContext(), "Downloading File", //To notify the Client that the file is being downloaded
Toast.LENGTH_LONG).show();
}
});
webview.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt
(String origin, GeolocationPermissions.
Callback callback
) { callback.invoke(origin, true, true);
super.onGeolocationPermissionsShowPrompt(origin, callback);
}
@Override
public void onPermissionRequest(PermissionRequest request) {
super.onPermissionRequest(request);
request.grant(request.getResources());
}
// @Override
// public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) {
// //return super.onCreateWindow(view, isDialog, isUserGesture, resultMsg);
// WebView.HitTestResult result = view.getHitTestResult();
// String data = result.getExtra();
// Context context = view.getContext();
// if (data != null && data.contains("_blanks")) {
// Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(data));
// browserIntent.setPackage("com.android.chrome");
// Toast.makeText(context, "create", Toast.LENGTH_SHORT).show();
// context.startActivity(browserIntent);
// return false;
// }
// return false;
// }
public boolean onShowFileChooser(
WebView webView, ValueCallback<Uri[]> filePathCallback,
WebChromeClient.FileChooserParams fileChooserParams) {
if(mFilePathCallback != null) {
mFilePathCallback.onReceiveValue(null);
}
mFilePathCallback = filePathCallback;
Intent takePictureIntent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
if (takePictureIntent.resolveActivity(getPackageManager()) != null) {
// Create the File where the photo should go
try {
photoFile = createImageFile();
takePictureIntent.putExtra("PhotoPath", mCameraPhotoPath);
// Error occurred while creating the File
Log.e("TAG", "Unable to create Image File", ex);
}
// Continue only if the File was successfully created
if (photoFile != null) {
mCameraPhotoPath = "file:" + photoFile.getAbsolutePath();
takePictureIntent.putExtra(MediaStore.EXTRA_OUTPUT,
Uri.fromFile(photoFile));
} else {
takePictureIntent = null;
}
}
Intent contentSelectionIntent = new Intent(Intent.ACTION_GET_CONTENT);
contentSelectionIntent.addCategory(Intent.CATEGORY_OPENABLE);
contentSelectionIntent.setType("image/*");
Intent[] intentArray;
if(takePictureIntent != null) {
intentArray = new Intent[]{takePictureIntent};
} else {
intentArray = new Intent[0];
}
Intent chooserIntent = new Intent(Intent.ACTION_CHOOSER);
chooserIntent.putExtra(Intent.EXTRA_INTENT, contentSelectionIntent);
chooserIntent.putExtra(Intent.EXTRA_TITLE, "Image Chooser");
chooserIntent.putExtra(Intent.EXTRA_INITIAL_INTENTS, intentArray);
startActivityForResult(chooserIntent, INPUT_FILE_REQUEST_CODE);
return true;
}
});
if ( Build.VERSION.SDK_INT >= 23){
if (ActivityCompat.
checkSelfPermission(MainActivity.
this, android.
Manifest.
permission.
ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED ){
// requestPermissions(new String[]{
// android.Manifest.permission.ACCESS_FINE_LOCATION},
// LOCATION_PERMISSION_CODE);
// ActivityCompat.requestPermissions(MainActivity.this,
// new String[] {android.Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_CODE);
ActivityCompat.requestPermissions(MainActivity.this,
new String[] {android.
Manifest.
permission.
ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_CODE
);
//return ;
} else {
if (canGetLocation()) {
//DO SOMETHING USEFUL HERE. ALL GPS PROVIDERS ARE CURRENTLY ENABLED
} else {
//SHOW OUR SETTINGS ALERT, AND LET THE USE TURN ON ALL THE GPS PROVIDERS
Intent intent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
}
}
// checkPermission();
if (isConnected()){
progressBar.
setVisibility(View.
VISIBLE); loadWeburl(appurl);
} else {
Toast.makeText(MainActivity.this, "No internet connection", Toast.LENGTH_SHORT).show();
noInternetAlertDialog();
}
}
// hide botoom navigation bar buttons
public void FullScreencall() {
if(Build.VERSION.SDK_INT > 11 && Build.VERSION.SDK_INT < 19) { // lower api
View v
= this.
getWindow().
getDecorView(); v.
setSystemUiVisibility(View.
GONE); } else if(Build.VERSION.SDK_INT >= 19) {
//for new api versions.
View decorView
= getWindow
().
getDecorView(); int uiOptions
= View.
SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.
SYSTEM_UI_FLAG_IMMERSIVE_STICKY;// View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR | // View.SYSTEM_UI_FLAG_HIDE_NAVIGATION | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY; decorView.setSystemUiVisibility(uiOptions);
}
}
//////////////////////////////////// check internet connection ////////////////////////////////////
public boolean isConnected() {
boolean connected = false;
try {
ConnectivityManager cm
= (ConnectivityManager
)getApplicationContext
().
getSystemService(Context.
CONNECTIVITY_SERVICE); NetworkInfo nInfo = cm.getActiveNetworkInfo();
connected = nInfo != null && nInfo.isAvailable() && nInfo.isConnected();
return connected;
Log.e("Connectivity Exception", e.getMessage());
}
return connected;
}
//////////////////////////////////// load Web url ////////////////////////////////////
private void loadWeburl
(String url
){
webview.setWebViewClient(new WebViewClient() {
public boolean shouldOverrideUrlLoading
(WebView view,
String url
) {
Log.i("TAG", "Processing webview url click...");
progressBar.
setVisibility(View.
VISIBLE); // stopping swipe refresh
// swipeRefreshLayout.setRefreshing(false);
// view.loadUrl(url);
try { trimCache(getApplicationContext()); }
if (url != null && url.startsWith("whatsapp://")) {
view.getContext().startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
return true;
} else if (url.startsWith(TELPREFIX)) {
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse(url));
startActivity(intent);
return true;
} else {
view.loadUrl(url);
appurl = url;
}
return true;
}
public void onPageFinished
(WebView view,
String url
) { Log.i("TAG", "Finished loading URL: " + url);
// stopping swipe refresh
// swipeRefreshLayout.setRefreshing(false);
// webview.loadUrl("javascript:MyApp.resize(document.body.getBoundingClientRect().height)");
progressBar.
setVisibility(View.
GONE); }
public void onReceivedError
(WebView view,
int errorCode,
String description,
String failingUrl
) { Log.e("TAG", "Error: " + description);
//Toast.makeText(Main.this, "Oh no! " + description, Toast.LENGTH_SHORT).show();
progressBar.
setVisibility(View.
GONE); // stopping swipe refresh
// swipeRefreshLayout.setRefreshing(false);
if (!isConnected()){
Toast.makeText(MainActivity.this, "No internet connection", Toast.LENGTH_SHORT).show();
noInternetAlertDialog();
}
}
});
webview.loadUrl(url);
}
//////////////////////////////////// View no Internet AlertDialog ////////////////////////////////////
private void noInternetAlertDialog() {
AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this).setCancelable(false);
dialogBuilder.setView(R.layout.nointernet_view);
alertDialog = dialogBuilder.create();
alertDialog.
getWindow().
setBackgroundDrawable(new ColorDrawable
(Color.
TRANSPARENT)); alertDialog.show();
Button tryAgainBtn
= alertDialog.
findViewById(R.
id.
tryagainBtn); progressBar2 = alertDialog.findViewById(R.id.progressBar2);
progressBar2.
setVisibility(View.
GONE); tryAgainBtn.
setOnClickListener(new View.
OnClickListener() { @Override
public void onClick
(View v
) { progressBar2.
setVisibility(View.
VISIBLE); new Handler
().
postDelayed(new Runnable() { @Override
public void run() {
if (isConnected()){
progressBar2.
setVisibility(View.
GONE); alertDialog.dismiss();
progressBar.
setVisibility(View.
VISIBLE); loadWeburl(appurl);
} else {
Toast.makeText(MainActivity.this, "No internet connection", Toast.LENGTH_SHORT).show();
progressBar2.
setVisibility(View.
GONE); alertDialog.dismiss();
noInternetAlertDialog();
}
}
}, 10000);
}
});
// Creating Dynamic
Rect displayRectangle = new Rect();
DisplayMetrics displayMetrics = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
int widthLcl = (int) (displayMetrics.widthPixels*1f);
int heightLcl = (int) (displayMetrics.heightPixels*1f);
window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); //(displayRectangle.width() * 0.9f
alertDialog.getWindow().setLayout((int) (widthLcl), heightLcl); //alertDialog.getWindow().getAttributes().height
}
// @SuppressLint("MissingSuperCall")
// @Override
// protected void onActivityResult(int requestCode, int resultCode,
// Intent intent) {
//
// if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// if (requestCode == 100) {
// if (uploadMessage == null)
// return;
// uploadMessage.onReceiveValue(WebChromeClient.FileChooserParams.parseResult(resultCode, intent));
// uploadMessage = null;
// }
// } else if (requestCode == FILECHOOSER_RESULTCODE) {
// if (null == mUploadMessage)
// return;
//
// Uri result = intent == null || resultCode != MainActivity.RESULT_OK ? null : intent.getData();
// mUploadMessage.onReceiveValue(result);
// mUploadMessage = null;
// } else
// Toast.makeText(getApplicationContext(), "Failed to Upload Image", Toast.LENGTH_LONG).show();
// }
@Override
public void onActivityResult (int requestCode, int resultCode, Intent data) {
if(requestCode != INPUT_FILE_REQUEST_CODE || mFilePathCallback == null) {
super.onActivityResult(requestCode, resultCode, data);
return;
}
Uri[] results = null;
// Check that the response is a good one
if(resultCode == Activity.RESULT_OK) {
if(data == null) {
// If there is not data, then we may have taken a photo
if(mCameraPhotoPath != null) {
results = new Uri[]{Uri.parse(mCameraPhotoPath)};
}
} else {
String dataString
= data.
getDataString(); if (dataString != null) {
results = new Uri[]{Uri.parse(dataString)};
}
}
}
mFilePathCallback.onReceiveValue(results);
mFilePathCallback = null;
return;
}
@Override
public void onBackPressed() {
if (webview.canGoBack()) {
webview.goBack();
} else {
super.onBackPressed();
finish();
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
webview.saveState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
webview.restoreState(savedInstanceState);
}
private class CustomChrome extends WebChromeClient {
private View mCustomView
; private WebChromeClient.CustomViewCallback mCustomViewCallback;
//protected FrameLayout mFullscreenContainer;
//private int mOriginalOrientation;
private int mOriginalSystemUiVisibility;
CustomChrome() {
}
public Bitmap getDefaultVideoPoster() {
if (mCustomView == null) {
return null;
}
return BitmapFactory.decodeResource(getApplicationContext().getResources(), 2130837573);
}
@SuppressLint("SourceLockedOrientationActivity")
public void onHideCustomView() {
((FrameLayout) getWindow().getDecorView()).removeView(this.mCustomView);
this.mCustomView = null;
getWindow().getDecorView().setSystemUiVisibility(this.mOriginalSystemUiVisibility);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
this.mCustomViewCallback.onCustomViewHidden();
this.mCustomViewCallback = null;
}
@SuppressLint("SourceLockedOrientationActivity")
public void onShowCustomView
(View paramView, WebChromeClient.
CustomViewCallback paramCustomViewCallback
) { if (this.mCustomView != null) {
onHideCustomView();
return;
}
this.mCustomView = paramView;
this.mOriginalSystemUiVisibility = getWindow().getDecorView().getSystemUiVisibility();
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
//this.mOriginalOrientation = getRequestedOrientation();
this.mCustomViewCallback = paramCustomViewCallback;
((FrameLayout) getWindow().getDecorView()).addView(this.mCustomView, new FrameLayout.LayoutParams(-1, -1));
getWindow().getDecorView().setSystemUiVisibility(3846);
}
}
@Override
public void onRequestPermissionsResult
(int requestCode, @NonNull
String[] permissions, @NonNull
int[] grantResults
) { super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == LOCATION_PERMISSION_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Toast.makeText(this, "Permission GRANTED", Toast.LENGTH_SHORT).show();
if (canGetLocation()) {
//DO SOMETHING USEFUL HERE. ALL GPS PROVIDERS ARE CURRENTLY ENABLED
// if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
// != PackageManager.PERMISSION_GRANTED) {
// // Permission is not granted
// ActivityCompat.requestPermissions(this,
// new String[]{android.Manifest.permission.CAMERA},
// PERMISSION_REQUEST_CODE);
//
// }
} else {
//SHOW OUR SETTINGS ALERT, AND LET THE USE TURN ON ALL THE GPS PROVIDERS
Intent intent = new Intent(
Settings.ACTION_LOCATION_SOURCE_SETTINGS);
startActivity(intent);
}
// if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.CAMERA)
// != PackageManager.PERMISSION_GRANTED) {
// // Permission is not granted
// ActivityCompat.requestPermissions(this,
// new String[]{android.Manifest.permission.CAMERA},
// PERMISSION_REQUEST_CODE);
//
// }
//
// } else {
// // Toast.makeText(this, "Permission DENIED", Toast.LENGTH_SHORT).show();
} else if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_DENIED){
finish();
}
}
if (requestCode == PERMISSION_REQUEST_CODE) {
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// Toast.makeText(getApplicationContext(), "Permission Granted", Toast.LENGTH_SHORT).show();
if (ContextCompat.
checkSelfPermission(this,
Manifest.
permission.
ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
ActivityCompat.requestPermissions(this,
LOCATION_PERMISSION_CODE);
}
// main logic
} else {
//Toast.makeText(getApplicationContext(), "Permission Denied", Toast.LENGTH_SHORT).show();
}
}
}
public boolean canGetLocation() {
boolean result = true;
LocationManager lm;
boolean gpsEnabled = false;
boolean networkEnabled = false;
lm
= (LocationManager
) getSystemService
(Context.
LOCATION_SERVICE);
// exceptions will be thrown if provider is not permitted.
try {
gpsEnabled = lm.isProviderEnabled(LocationManager.GPS_PROVIDER);
}
try {
networkEnabled = lm
.isProviderEnabled(LocationManager.NETWORK_PROVIDER);
}
return gpsEnabled && networkEnabled;
}
// Create an image file name
String imageFileName
= "JPEG_" + timeStamp
+ "_"; imageFileName, /* prefix */
".jpg", /* suffix */
storageDir /* directory */
);
return imageFile;
}
private void checkPermission() {
if (ContextCompat.
checkSelfPermission(this, android.
Manifest.
permission.
CAMERA) != PackageManager.PERMISSION_GRANTED) {
// Permission is not granted
ActivityCompat.requestPermissions(this,
PERMISSION_REQUEST_CODE);
}
// if (ContextCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION)
// != PackageManager.PERMISSION_GRANTED) {
// // Permission is not granted
// ActivityCompat.requestPermissions(this,
// new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
// LOCATION_PERMISSION_CODE);
//
// }
}
private void requestPermission() {
ActivityCompat.requestPermissions(this,
PERMISSION_REQUEST_CODE);
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
try { trimCache(this); }
}
public static boolean trimCache
(Context context
) { try {
File dir
= context.
getCacheDir(); if (dir != null && dir.isDirectory()) {
return deleteDir(dir);
}
// TODO: handle exception
}
return false;
}
public static boolean deleteDir
(File dir
) { if (dir != null && dir.isDirectory()) {
String[] children
= dir.
list(); for (int i = 0; i < children.length; i++) {
boolean success
= deleteDir
(new File(dir, children
[i
])); if (!success) {
return false;
}
}
}
// The directory is now empty so delete it
return dir.delete();
}
}