bug fixes
|
@ -4,7 +4,7 @@ apply plugin: 'maven'
|
||||||
apply plugin: 'io.fabric'
|
apply plugin: 'io.fabric'
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
geckoviewChannel = "nightly"
|
geckoviewChannel = ""
|
||||||
geckoviewVersion = "64.0.20180927100037"
|
geckoviewVersion = "64.0.20180927100037"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -43,26 +43,31 @@ android {
|
||||||
flavorDimensions "abi"
|
flavorDimensions "abi"
|
||||||
|
|
||||||
productFlavors {
|
productFlavors {
|
||||||
arm {
|
/*arm {
|
||||||
versionCode 149
|
versionCode 152
|
||||||
versionName "145"
|
versionName "152"
|
||||||
dimension "abi"
|
dimension "abi"
|
||||||
}
|
buildConfigField "String", "VARIANT", "\"arm\""
|
||||||
|
}*/
|
||||||
aarch64 {
|
aarch64 {
|
||||||
versionCode 150
|
versionCode 153
|
||||||
versionName "146"
|
versionName "153"
|
||||||
dimension "abi"
|
dimension "abi"
|
||||||
|
buildConfigField "String", "VARIANT", "\"aarch64\""
|
||||||
}
|
}
|
||||||
x86_64 {
|
/*
|
||||||
versionCode 151
|
|
||||||
versionName "147"
|
|
||||||
dimension "abi"
|
|
||||||
}
|
|
||||||
x86 {
|
x86 {
|
||||||
versionCode 148
|
versionCode 154
|
||||||
versionName "148"
|
versionName "154"
|
||||||
dimension "abi"
|
dimension "abi"
|
||||||
|
buildConfigField "String", "VARIANT", "\"i686\""
|
||||||
}
|
}
|
||||||
|
/*x86_64 {
|
||||||
|
versionCode 155
|
||||||
|
versionName "155"
|
||||||
|
dimension "abi"
|
||||||
|
buildConfigField "String", "VARIANT", "\"x86_64\""
|
||||||
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,10 +109,10 @@ dependencies {
|
||||||
implementation 'com.google.android.gms:play-services-ads:17.1.1'
|
implementation 'com.google.android.gms:play-services-ads:17.1.1'
|
||||||
implementation "cz.msebera.android:httpclient:4.4.1.2"
|
implementation "cz.msebera.android:httpclient:4.4.1.2"
|
||||||
|
|
||||||
x86Implementation "org.mozilla.geckoview:geckoview-nightly-x86:68.0.20190405111221"
|
//x86Implementation "org.mozilla.geckoview:geckoview-x86:67.0.20190521210220"
|
||||||
x86_64Implementation "org.mozilla.geckoview:geckoview-nightly-x86_64:68.0.20190405111221"
|
//x86_64Implementation "org.mozilla.geckoview:geckoview-x86_64:67.0.20190521210220"
|
||||||
armImplementation "org.mozilla.geckoview:geckoview-nightly-armeabi-v7a:68.0.20190405111221"
|
//armImplementation "org.mozilla.geckoview:geckoview-armeabi-v7a:67.0.20190521210220"
|
||||||
aarch64Implementation "org.mozilla.geckoview:geckoview-nightly-arm64-v8a:68.0.20190405111221"
|
aarch64Implementation "org.mozilla.geckoview:geckoview-arm64-v8a:67.0.20190521210220"
|
||||||
|
|
||||||
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
|
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
|
||||||
implementation 'com.crowdfire.cfalertdialog:cfalertdialog:1.1.0'
|
implementation 'com.crowdfire.cfalertdialog:cfalertdialog:1.1.0'
|
||||||
|
|
|
@ -1,140 +0,0 @@
|
||||||
package com.darkweb.genesissearchengine;
|
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.Field;
|
|
||||||
import java.lang.reflect.InvocationTargetException;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import cz.msebera.android.httpclient.HttpHost;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.util.Log;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Utility class for setting WebKit proxy used by Android WebView
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
public class ProxySettings {
|
|
||||||
|
|
||||||
private static final String TAG = "GAEProxy.ProxySettings";
|
|
||||||
|
|
||||||
static final int PROXY_CHANGED = 193;
|
|
||||||
|
|
||||||
private static Object getDeclaredField(Object obj, String name) throws SecurityException,
|
|
||||||
NoSuchFieldException, IllegalArgumentException, IllegalAccessException {
|
|
||||||
Field f = obj.getClass().getDeclaredField(name);
|
|
||||||
f.setAccessible(true);
|
|
||||||
Object out = f.get(obj);
|
|
||||||
// System.out.println(obj.getClass().getName() + "." + name + " = "+
|
|
||||||
// out);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static Object getRequestQueue(Context ctx) throws Exception {
|
|
||||||
Object ret = null;
|
|
||||||
Class networkClass = Class.forName("android.webkit.Network");
|
|
||||||
if (networkClass != null) {
|
|
||||||
Object networkObj = invokeMethod(networkClass, "getInstance", new Object[] { ctx },
|
|
||||||
Context.class);
|
|
||||||
if (networkObj != null) {
|
|
||||||
ret = getDeclaredField(networkObj, "mRequestQueue");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static Object invokeMethod(Object object, String methodName, Object[] params,
|
|
||||||
Class... types) throws Exception {
|
|
||||||
Object out = null;
|
|
||||||
Class c = object instanceof Class ? (Class) object : object.getClass();
|
|
||||||
if (types != null) {
|
|
||||||
Method method = c.getMethod(methodName, types);
|
|
||||||
out = method.invoke(object, params);
|
|
||||||
} else {
|
|
||||||
Method method = c.getMethod(methodName);
|
|
||||||
out = method.invoke(object);
|
|
||||||
}
|
|
||||||
// System.out.println(object.getClass().getName() + "." + methodName +
|
|
||||||
// "() = "+ out);
|
|
||||||
return out;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void resetProxy(Context ctx) throws Exception {
|
|
||||||
Object requestQueueObject = getRequestQueue(ctx);
|
|
||||||
if (requestQueueObject != null) {
|
|
||||||
setDeclaredField(requestQueueObject, "mProxyHost", null);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setDeclaredField(Object obj, String name, Object value)
|
|
||||||
throws SecurityException, NoSuchFieldException, IllegalArgumentException,
|
|
||||||
IllegalAccessException {
|
|
||||||
Field f = obj.getClass().getDeclaredField(name);
|
|
||||||
f.setAccessible(true);
|
|
||||||
f.set(obj, value);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Override WebKit Proxy settings
|
|
||||||
*
|
|
||||||
* @param ctx
|
|
||||||
* Android ApplicationContext
|
|
||||||
* @param host
|
|
||||||
* @param port
|
|
||||||
* @return true if Proxy was successfully set
|
|
||||||
*/
|
|
||||||
public static boolean setProxy(Context ctx, String host, int port) {
|
|
||||||
boolean ret = false;
|
|
||||||
setSystemProperties(host, port);
|
|
||||||
|
|
||||||
try {
|
|
||||||
if (Build.VERSION.SDK_INT < 14) {
|
|
||||||
|
|
||||||
Object requestQueueObject = getRequestQueue(ctx);
|
|
||||||
if (requestQueueObject != null) {
|
|
||||||
// Create Proxy config object and set it into request Q
|
|
||||||
HttpHost httpHost = new HttpHost(host, port, "http");
|
|
||||||
|
|
||||||
setDeclaredField(requestQueueObject, "mProxyHost", httpHost);
|
|
||||||
ret = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
} else {
|
|
||||||
ret = setICSProxy(host, port);
|
|
||||||
}
|
|
||||||
} catch (Exception e) {
|
|
||||||
Log.e(TAG, "error setting up webkit proxying", e);
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
private static boolean setICSProxy(String host, int port) throws ClassNotFoundException,
|
|
||||||
NoSuchMethodException, IllegalArgumentException, InstantiationException,
|
|
||||||
IllegalAccessException, InvocationTargetException {
|
|
||||||
Class webViewCoreClass = Class.forName("android.webkit.WebViewCore");
|
|
||||||
Class proxyPropertiesClass = Class.forName("android.net.ProxyProperties");
|
|
||||||
if (webViewCoreClass != null && proxyPropertiesClass != null) {
|
|
||||||
Method m = webViewCoreClass.getDeclaredMethod("sendStaticMessage", Integer.TYPE,
|
|
||||||
Object.class);
|
|
||||||
Constructor c = proxyPropertiesClass.getConstructor(String.class, Integer.TYPE,
|
|
||||||
String.class);
|
|
||||||
m.setAccessible(true);
|
|
||||||
c.setAccessible(true);
|
|
||||||
Object properties = c.newInstance(host, port, null);
|
|
||||||
m.invoke(null, PROXY_CHANGED, properties);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
private static void setSystemProperties(String host, int port) {
|
|
||||||
|
|
||||||
System.setProperty("http.proxyHost", host);
|
|
||||||
System.setProperty("http.proxyPort", port + "");
|
|
||||||
|
|
||||||
System.setProperty("https.proxyHost", host);
|
|
||||||
System.setProperty("https.proxyPort", port + "");
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,313 @@
|
||||||
|
package com.darkweb.genesissearchengine;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.net.Proxy;
|
||||||
|
import android.os.Build;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.webkit.WebView;
|
||||||
|
|
||||||
|
import cz.msebera.android.httpclient.HttpHost;
|
||||||
|
|
||||||
|
import java.io.PrintWriter;
|
||||||
|
import java.io.StringWriter;
|
||||||
|
import java.lang.reflect.Constructor;
|
||||||
|
import java.lang.reflect.Field;
|
||||||
|
import java.lang.reflect.InvocationTargetException;
|
||||||
|
import java.lang.reflect.Method;
|
||||||
|
|
||||||
|
import android.util.ArrayMap;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Code from http://stackoverflow.com/questions/4488338/webview-android-proxy
|
||||||
|
*/
|
||||||
|
public class WebkitProxy3 {
|
||||||
|
|
||||||
|
public static String LOG_TAG = "WebkitProxy3";
|
||||||
|
|
||||||
|
public static boolean setProxy(WebView webview, String host, int port, String applicationClassName) {
|
||||||
|
if (host == null)
|
||||||
|
return false;
|
||||||
|
// 3.2 (HC) or lower
|
||||||
|
if (Build.VERSION.SDK_INT <= 13) {
|
||||||
|
return setProxyUpToHC(webview, host, port);
|
||||||
|
}
|
||||||
|
// ICS: 4.0
|
||||||
|
else if (Build.VERSION.SDK_INT <= 15) {
|
||||||
|
return setProxyICS(webview, host, port);
|
||||||
|
}
|
||||||
|
// 4.1-4.3 (JB)
|
||||||
|
else if (Build.VERSION.SDK_INT <= 18) {
|
||||||
|
return setProxyJB(webview, host, port);
|
||||||
|
}
|
||||||
|
// 4.4 (KK) & 5.0 (Lollipop)
|
||||||
|
else {
|
||||||
|
return setProxyKKPlus(webview, host, port, applicationClassName);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Proxy for Android 3.2 and below.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private static boolean setProxyUpToHC(WebView webview, String host, int port) {
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with <= 3.2 API.");
|
||||||
|
|
||||||
|
HttpHost proxyServer = new HttpHost(host, port);
|
||||||
|
// Getting network
|
||||||
|
Class networkClass = null;
|
||||||
|
Object network = null;
|
||||||
|
try {
|
||||||
|
networkClass = Class.forName("android.webkit.Network");
|
||||||
|
if (networkClass == null) {
|
||||||
|
Log.e(LOG_TAG, "failed to get class for android.webkit.Network");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Method getInstanceMethod = networkClass.getMethod("getInstance", Context.class);
|
||||||
|
if (getInstanceMethod == null) {
|
||||||
|
Log.e(LOG_TAG, "failed to get getInstance method");
|
||||||
|
}
|
||||||
|
network = getInstanceMethod.invoke(networkClass, new Object[]{webview.getContext()});
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.e(LOG_TAG, "error getting network: " + ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (network == null) {
|
||||||
|
Log.e(LOG_TAG, "error getting network: network is null");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Object requestQueue = null;
|
||||||
|
try {
|
||||||
|
Field requestQueueField = networkClass
|
||||||
|
.getDeclaredField("mRequestQueue");
|
||||||
|
requestQueue = getFieldValueSafely(requestQueueField, network);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.e(LOG_TAG, "error getting field value");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (requestQueue == null) {
|
||||||
|
Log.e(LOG_TAG, "Request queue is null");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Field proxyHostField = null;
|
||||||
|
try {
|
||||||
|
Class requestQueueClass = Class.forName("android.net.http.RequestQueue");
|
||||||
|
proxyHostField = requestQueueClass
|
||||||
|
.getDeclaredField("mProxyHost");
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.e(LOG_TAG, "error getting proxy host field");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean temp = proxyHostField.isAccessible();
|
||||||
|
try {
|
||||||
|
proxyHostField.setAccessible(true);
|
||||||
|
proxyHostField.set(requestQueue, proxyServer);
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.e(LOG_TAG, "error setting proxy host");
|
||||||
|
} finally {
|
||||||
|
proxyHostField.setAccessible(temp);
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with <= 3.2 API successful!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private static boolean setProxyICS(WebView webview, String host, int port) {
|
||||||
|
try
|
||||||
|
{
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with 4.0 API.");
|
||||||
|
|
||||||
|
Class jwcjb = Class.forName("android.webkit.JWebCoreJavaBridge");
|
||||||
|
Class params[] = new Class[1];
|
||||||
|
params[0] = Class.forName("android.net.ProxyProperties");
|
||||||
|
Method updateProxyInstance = jwcjb.getDeclaredMethod("updateProxy", params);
|
||||||
|
|
||||||
|
Class wv = Class.forName("android.webkit.WebView");
|
||||||
|
Field mWebViewCoreField = wv.getDeclaredField("mWebViewCore");
|
||||||
|
Object mWebViewCoreFieldInstance = getFieldValueSafely(mWebViewCoreField, webview);
|
||||||
|
|
||||||
|
Class wvc = Class.forName("android.webkit.WebViewCore");
|
||||||
|
Field mBrowserFrameField = wvc.getDeclaredField("mBrowserFrame");
|
||||||
|
Object mBrowserFrame = getFieldValueSafely(mBrowserFrameField, mWebViewCoreFieldInstance);
|
||||||
|
|
||||||
|
Class bf = Class.forName("android.webkit.BrowserFrame");
|
||||||
|
Field sJavaBridgeField = bf.getDeclaredField("sJavaBridge");
|
||||||
|
Object sJavaBridge = getFieldValueSafely(sJavaBridgeField, mBrowserFrame);
|
||||||
|
|
||||||
|
Class ppclass = Class.forName("android.net.ProxyProperties");
|
||||||
|
Class pparams[] = new Class[3];
|
||||||
|
pparams[0] = String.class;
|
||||||
|
pparams[1] = int.class;
|
||||||
|
pparams[2] = String.class;
|
||||||
|
Constructor ppcont = ppclass.getConstructor(pparams);
|
||||||
|
|
||||||
|
updateProxyInstance.invoke(sJavaBridge, ppcont.newInstance(host, port, null));
|
||||||
|
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with 4.0 API successful!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
Log.e(LOG_TAG, "failed to set HTTP proxy: " + ex);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set Proxy for Android 4.1 - 4.3.
|
||||||
|
*/
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private static boolean setProxyJB(WebView webview, String host, int port) {
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with 4.1 - 4.3 API.");
|
||||||
|
|
||||||
|
try {
|
||||||
|
Class wvcClass = Class.forName("android.webkit.WebViewClassic");
|
||||||
|
Class wvParams[] = new Class[1];
|
||||||
|
wvParams[0] = Class.forName("android.webkit.WebView");
|
||||||
|
Method fromWebView = wvcClass.getDeclaredMethod("fromWebView", wvParams);
|
||||||
|
Object webViewClassic = fromWebView.invoke(null, webview);
|
||||||
|
|
||||||
|
Class wv = Class.forName("android.webkit.WebViewClassic");
|
||||||
|
Field mWebViewCoreField = wv.getDeclaredField("mWebViewCore");
|
||||||
|
Object mWebViewCoreFieldInstance = getFieldValueSafely(mWebViewCoreField, webViewClassic);
|
||||||
|
|
||||||
|
Class wvc = Class.forName("android.webkit.WebViewCore");
|
||||||
|
Field mBrowserFrameField = wvc.getDeclaredField("mBrowserFrame");
|
||||||
|
Object mBrowserFrame = getFieldValueSafely(mBrowserFrameField, mWebViewCoreFieldInstance);
|
||||||
|
|
||||||
|
Class bf = Class.forName("android.webkit.BrowserFrame");
|
||||||
|
Field sJavaBridgeField = bf.getDeclaredField("sJavaBridge");
|
||||||
|
Object sJavaBridge = getFieldValueSafely(sJavaBridgeField, mBrowserFrame);
|
||||||
|
|
||||||
|
Class ppclass = Class.forName("android.net.ProxyProperties");
|
||||||
|
Class pparams[] = new Class[3];
|
||||||
|
pparams[0] = String.class;
|
||||||
|
pparams[1] = int.class;
|
||||||
|
pparams[2] = String.class;
|
||||||
|
Constructor ppcont = ppclass.getConstructor(pparams);
|
||||||
|
|
||||||
|
Class jwcjb = Class.forName("android.webkit.JWebCoreJavaBridge");
|
||||||
|
Class params[] = new Class[1];
|
||||||
|
params[0] = Class.forName("android.net.ProxyProperties");
|
||||||
|
Method updateProxyInstance = jwcjb.getDeclaredMethod("updateProxy", params);
|
||||||
|
|
||||||
|
updateProxyInstance.invoke(sJavaBridge, ppcont.newInstance(host, port, null));
|
||||||
|
} catch (Exception ex) {
|
||||||
|
Log.e(LOG_TAG,"Setting proxy with >= 4.1 API failed with error: " + ex.getMessage());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with 4.1 - 4.3 API successful!");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// from https://stackoverflow.com/questions/19979578/android-webview-set-proxy-programatically-kitkat
|
||||||
|
@SuppressLint("NewApi")
|
||||||
|
@SuppressWarnings("all")
|
||||||
|
private static boolean setProxyKKPlus(WebView webView, String host, int port, String applicationClassName) {
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with >= 4.4 API.");
|
||||||
|
|
||||||
|
Context appContext = webView.getContext().getApplicationContext();
|
||||||
|
System.setProperty("http.proxyHost", host);
|
||||||
|
System.setProperty("http.proxyPort", port + "");
|
||||||
|
System.setProperty("https.proxyHost", host);
|
||||||
|
System.setProperty("https.proxyPort", port + "");
|
||||||
|
try {
|
||||||
|
Class applictionCls = Class.forName(applicationClassName);
|
||||||
|
Field loadedApkField = applictionCls.getField("mLoadedApk");
|
||||||
|
loadedApkField.setAccessible(true);
|
||||||
|
Object loadedApk = loadedApkField.get(appContext);
|
||||||
|
Class loadedApkCls = Class.forName("android.app.LoadedApk");
|
||||||
|
Field receiversField = loadedApkCls.getDeclaredField("mReceivers");
|
||||||
|
receiversField.setAccessible(true);
|
||||||
|
ArrayMap receivers = (ArrayMap) receiversField.get(loadedApk);
|
||||||
|
for (Object receiverMap : receivers.values()) {
|
||||||
|
for (Object rec : ((ArrayMap) receiverMap).keySet()) {
|
||||||
|
Class clazz = rec.getClass();
|
||||||
|
if (clazz != null && clazz.getName() != null && clazz.getName().contains("ProxyChangeListener")) {
|
||||||
|
Method onReceiveMethod = clazz.getDeclaredMethod("onReceive", Context.class, Intent.class);
|
||||||
|
if (onReceiveMethod == null)
|
||||||
|
continue;
|
||||||
|
Intent intent = new Intent(Proxy.PROXY_CHANGE_ACTION);
|
||||||
|
|
||||||
|
try {
|
||||||
|
/*********** optional, may be need in future *************/
|
||||||
|
String CLASS_NAME;
|
||||||
|
if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.KITKAT) {
|
||||||
|
CLASS_NAME = "android.net.ProxyProperties";
|
||||||
|
} else {
|
||||||
|
CLASS_NAME = "android.net.ProxyInfo";
|
||||||
|
}
|
||||||
|
Class cls = Class.forName(CLASS_NAME);
|
||||||
|
Constructor constructor = cls.getConstructor(String.class, Integer.TYPE, String.class);
|
||||||
|
constructor.setAccessible(true);
|
||||||
|
Object proxyProperties = constructor.newInstance(host, port, null);
|
||||||
|
intent.putExtra("proxy", (Parcelable) proxyProperties);
|
||||||
|
/*********** optional, may be need in future *************/
|
||||||
|
} catch (Exception e) {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
String exceptionAsString = sw.toString();
|
||||||
|
Log.v(LOG_TAG, e.getMessage());
|
||||||
|
Log.v(LOG_TAG, exceptionAsString);
|
||||||
|
}
|
||||||
|
|
||||||
|
onReceiveMethod.invoke(rec, appContext, intent);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Log.d(LOG_TAG, "Setting proxy with >= 4.4 API successful!");
|
||||||
|
return true;
|
||||||
|
} catch (ClassNotFoundException e) {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
String exceptionAsString = sw.toString();
|
||||||
|
Log.v(LOG_TAG, e.getMessage());
|
||||||
|
Log.v(LOG_TAG, exceptionAsString);
|
||||||
|
} catch (NoSuchFieldException e) {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
String exceptionAsString = sw.toString();
|
||||||
|
Log.v(LOG_TAG, e.getMessage());
|
||||||
|
Log.v(LOG_TAG, exceptionAsString);
|
||||||
|
} catch (IllegalAccessException e) {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
String exceptionAsString = sw.toString();
|
||||||
|
Log.v(LOG_TAG, e.getMessage());
|
||||||
|
Log.v(LOG_TAG, exceptionAsString);
|
||||||
|
} catch (IllegalArgumentException e) {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
String exceptionAsString = sw.toString();
|
||||||
|
Log.v(LOG_TAG, e.getMessage());
|
||||||
|
Log.v(LOG_TAG, exceptionAsString);
|
||||||
|
} catch (NoSuchMethodException e) {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
String exceptionAsString = sw.toString();
|
||||||
|
Log.v(LOG_TAG, e.getMessage());
|
||||||
|
Log.v(LOG_TAG, exceptionAsString);
|
||||||
|
} catch (InvocationTargetException e) {
|
||||||
|
StringWriter sw = new StringWriter();
|
||||||
|
e.printStackTrace(new PrintWriter(sw));
|
||||||
|
String exceptionAsString = sw.toString();
|
||||||
|
Log.v(LOG_TAG, e.getMessage());
|
||||||
|
Log.v(LOG_TAG, exceptionAsString);
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Object getFieldValueSafely(Field field, Object classInstance) throws IllegalArgumentException, IllegalAccessException {
|
||||||
|
boolean oldAccessibleValue = field.isAccessible();
|
||||||
|
field.setAccessible(true);
|
||||||
|
Object result = field.get(classInstance);
|
||||||
|
field.setAccessible(oldAccessibleValue);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
package com.darkweb.genesissearchengine;
|
package com.darkweb.genesissearchengine;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.util.Log;
|
||||||
import com.google.android.gms.ads.AdListener;
|
import com.google.android.gms.ads.AdListener;
|
||||||
import com.google.android.gms.ads.AdRequest;
|
import com.google.android.gms.ads.AdRequest;
|
||||||
import com.google.android.gms.ads.InterstitialAd;
|
import com.google.android.gms.ads.InterstitialAd;
|
||||||
|
@ -59,31 +60,40 @@ public class admanager {
|
||||||
public void showAd(boolean isAdForced)
|
public void showAd(boolean isAdForced)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
Log.i("SHITSS","SHITSS 1" + " --- " + mInterstitialAd.isLoading() + " --- " + mInterstitialAd.isLoaded());
|
||||||
if(!mInterstitialAd.isLoading() && !mInterstitialAd.isLoaded())
|
if(!mInterstitialAd.isLoading() && !mInterstitialAd.isLoaded())
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 2");
|
||||||
mInterstitialAd.loadAd(new AdRequest.Builder().build());
|
mInterstitialAd.loadAd(new AdRequest.Builder().build());
|
||||||
if(isAdForced || adCount==0 || adCount%3==0)
|
if(isAdForced || adCount==0 || adCount%3==0)
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 3");
|
||||||
adCount = 0;
|
adCount = 0;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 4");
|
||||||
adCount+=1;
|
adCount+=1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 5");
|
||||||
if(mInterstitialAd.isLoaded())
|
if(mInterstitialAd.isLoaded())
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 6");
|
||||||
if(isAdForced)
|
if(isAdForced)
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 7");
|
||||||
mInterstitialAd.show();
|
mInterstitialAd.show();
|
||||||
adCount = 1;
|
adCount = 1;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 8");
|
||||||
if(adCount%3==0)
|
if(adCount%3==0)
|
||||||
{
|
{
|
||||||
|
Log.i("SHITSS","SHITSS 9");
|
||||||
mInterstitialAd.show();
|
mInterstitialAd.show();
|
||||||
}
|
}
|
||||||
adCount += 1;
|
adCount += 1;
|
||||||
|
|
|
@ -3,7 +3,10 @@ package com.darkweb.genesissearchengine;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.pm.ActivityInfo;
|
import android.content.pm.ActivityInfo;
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.content.res.Resources;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import android.graphics.Point;
|
||||||
import android.graphics.drawable.Drawable;
|
import android.graphics.drawable.Drawable;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
|
@ -17,14 +20,15 @@ import android.text.Spanned;
|
||||||
import android.text.style.ForegroundColorSpan;
|
import android.text.style.ForegroundColorSpan;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import android.util.Patterns;
|
import android.util.Patterns;
|
||||||
import android.view.KeyEvent;
|
import android.view.*;
|
||||||
import android.view.View;
|
import android.view.animation.Animation;
|
||||||
import android.view.Window;
|
import android.view.animation.AnimationUtils;
|
||||||
import android.view.WindowManager;
|
import android.view.animation.RotateAnimation;
|
||||||
import android.view.inputmethod.InputMethodManager;
|
import android.view.inputmethod.InputMethodManager;
|
||||||
import android.webkit.*;
|
import android.webkit.*;
|
||||||
import android.widget.*;
|
import android.widget.*;
|
||||||
import com.crashlytics.android.Crashlytics;
|
import com.crashlytics.android.Crashlytics;
|
||||||
|
import com.example.myapplication.BuildConfig;
|
||||||
import io.fabric.sdk.android.Fabric;
|
import io.fabric.sdk.android.Fabric;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
|
@ -37,6 +41,7 @@ import org.mozilla.geckoview.GeckoSession;
|
||||||
import org.mozilla.geckoview.GeckoView;
|
import org.mozilla.geckoview.GeckoView;
|
||||||
|
|
||||||
|
|
||||||
|
import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT;
|
||||||
import static java.lang.Thread.sleep;
|
import static java.lang.Thread.sleep;
|
||||||
|
|
||||||
public class application_controller extends AppCompatActivity
|
public class application_controller extends AppCompatActivity
|
||||||
|
@ -48,7 +53,7 @@ public class application_controller extends AppCompatActivity
|
||||||
private GeckoView webLoader;
|
private GeckoView webLoader;
|
||||||
private ProgressBar progressBar;
|
private ProgressBar progressBar;
|
||||||
private ConstraintLayout requestFailure;
|
private ConstraintLayout requestFailure;
|
||||||
private ConstraintLayout splashScreen;
|
private FrameLayout splashScreen;
|
||||||
private FloatingActionButton floatingButton;
|
private FloatingActionButton floatingButton;
|
||||||
private Button reloadButton;
|
private Button reloadButton;
|
||||||
private ImageButton homeButton;
|
private ImageButton homeButton;
|
||||||
|
@ -56,7 +61,7 @@ public class application_controller extends AppCompatActivity
|
||||||
private LinearLayout topbar;
|
private LinearLayout topbar;
|
||||||
private GeckoSession session1;
|
private GeckoSession session1;
|
||||||
private GeckoRuntime runtime1;
|
private GeckoRuntime runtime1;
|
||||||
private String version_code = "3.0";
|
private String version_code = "5.0";
|
||||||
private boolean wasBackPressed = false;
|
private boolean wasBackPressed = false;
|
||||||
private boolean isLoadedUrlSet = false;
|
private boolean isLoadedUrlSet = false;
|
||||||
private boolean isGeckoURLLoadded = false;
|
private boolean isGeckoURLLoadded = false;
|
||||||
|
@ -76,18 +81,27 @@ public class application_controller extends AppCompatActivity
|
||||||
protected void onCreate(Bundle savedInstanceState)
|
protected void onCreate(Bundle savedInstanceState)
|
||||||
{
|
{
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
//initializeCrashlytics();
|
|
||||||
initializeBackgroundColor();
|
if(BuildConfig.FLAVOR.equals("aarch64")&&Build.SUPPORTED_ABIS[0].equals("arm64-v8a") || BuildConfig.FLAVOR.equals("arm")&&Build.SUPPORTED_ABIS[0].equals("armeabi-v7a") || BuildConfig.FLAVOR.equals("x86")&&Build.SUPPORTED_ABIS[0].equals("x86") || BuildConfig.FLAVOR.equals("x86_64")&&Build.SUPPORTED_ABIS[0].equals("x86_64"))
|
||||||
//setOrientation();
|
{
|
||||||
setContentView(R.layout.application_view);
|
//initializeCrashlytics();
|
||||||
//orbot_manager.getInstance().initializeTorClient(this);
|
initializeBackgroundColor();
|
||||||
initializeStatus();
|
setContentView(R.layout.application_view);
|
||||||
initializeRunnable();
|
orbot_manager.getInstance().initializeTorClient(this, webView1, webView2);
|
||||||
initializeConnections();
|
initializeStatus();
|
||||||
initializeWebViews();
|
initializeRunnable();
|
||||||
initializeView();
|
initializeConnections();
|
||||||
initializeAds();
|
initializeWebViews();
|
||||||
checkSSLTextColor();
|
initializeView();
|
||||||
|
initializeAds();
|
||||||
|
checkSSLTextColor();
|
||||||
|
initSplashScreen();
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setContentView(R.layout.invalid_setup);
|
||||||
|
message_manager.getInstance().abiError(this,Build.SUPPORTED_ABIS[0]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setOrientation()
|
public void setOrientation()
|
||||||
|
@ -95,6 +109,41 @@ public class application_controller extends AppCompatActivity
|
||||||
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void initSplashScreen()
|
||||||
|
{
|
||||||
|
ImageView view = findViewById(R.id.imageView_loading_back);
|
||||||
|
RotateAnimation rotate = new RotateAnimation(0, 360,
|
||||||
|
Animation.RELATIVE_TO_SELF, 0.5f, Animation.RELATIVE_TO_SELF,
|
||||||
|
0.5f);
|
||||||
|
|
||||||
|
rotate.setDuration(2000);
|
||||||
|
rotate.setRepeatCount(Animation.INFINITE);
|
||||||
|
view.setAnimation(rotate);
|
||||||
|
|
||||||
|
Display display = getWindowManager().getDefaultDisplay();
|
||||||
|
Point size = new Point();
|
||||||
|
display.getSize(size);
|
||||||
|
float width_x = size.x;
|
||||||
|
float height_y = size.y;
|
||||||
|
|
||||||
|
ImageView splashlogo = findViewById(R.id.backsplash);
|
||||||
|
ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) splashlogo.getLayoutParams();
|
||||||
|
//int height = Resources.getSystem().getDisplayMetrics().heightPixels+getStatusBarHeight(this);
|
||||||
|
//splashlogo.getLayoutParams().height = splashlogo.getLayoutParams().height-300;
|
||||||
|
|
||||||
|
params.topMargin = getStatusBarHeight(this)/2;
|
||||||
|
splashlogo.setLayoutParams(params);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getStatusBarHeight(Context c) {
|
||||||
|
int result = 0;
|
||||||
|
int resourceId = getResources().getIdentifier("status_bar_height", "dimen", "android");
|
||||||
|
if (resourceId > 0) {
|
||||||
|
result = getResources().getDimensionPixelSize(resourceId);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
public void initializeBackgroundColor()
|
public void initializeBackgroundColor()
|
||||||
{
|
{
|
||||||
if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.M){
|
if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.M){
|
||||||
|
@ -121,7 +170,7 @@ public class application_controller extends AppCompatActivity
|
||||||
String version = preference_manager.getInstance().getString("version","none",this);
|
String version = preference_manager.getInstance().getString("version","none",this);
|
||||||
if(!version.equals(version_code) && !version.equals("none"))
|
if(!version.equals(version_code) && !version.equals("none"))
|
||||||
{
|
{
|
||||||
message_manager.getInstance().versionWarning(this);
|
message_manager.getInstance().versionWarning(this,Build.SUPPORTED_ABIS[0]);
|
||||||
}
|
}
|
||||||
webRequestHandler.getInstance().getVersion(this);
|
webRequestHandler.getInstance().getVersion(this);
|
||||||
}
|
}
|
||||||
|
@ -168,7 +217,7 @@ public class application_controller extends AppCompatActivity
|
||||||
|
|
||||||
public void initializeWebViews()
|
public void initializeWebViews()
|
||||||
{
|
{
|
||||||
webRequestHandler.getInstance().initialization(webView1,webView2,progressBar,searchbar,requestFailure,this,splashScreen,this);
|
webRequestHandler.getInstance().initialization(webView1,webView2,progressBar,searchbar, splashScreen,this, requestFailure,this);
|
||||||
webView1.bringToFront();
|
webView1.bringToFront();
|
||||||
Log.i("PROBLEM25","");
|
Log.i("PROBLEM25","");
|
||||||
progressBar.animate().setDuration(150).alpha(0f);
|
progressBar.animate().setDuration(150).alpha(0f);
|
||||||
|
@ -214,9 +263,6 @@ public class application_controller extends AppCompatActivity
|
||||||
requestFailure.animate().setDuration(0).alpha(0.0f);
|
requestFailure.animate().setDuration(0).alpha(0.0f);
|
||||||
progressBar.animate().setDuration(150).alpha(0f);
|
progressBar.animate().setDuration(150).alpha(0f);
|
||||||
|
|
||||||
webView1.loadUrl(constants.backendUrl);
|
|
||||||
try {Thread.sleep(100);} catch (Exception e) {}
|
|
||||||
|
|
||||||
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
|
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
|
||||||
loadURLAnimate(constants.backendUrl);
|
loadURLAnimate(constants.backendUrl);
|
||||||
initializeViewClients();
|
initializeViewClients();
|
||||||
|
@ -347,7 +393,7 @@ public class application_controller extends AppCompatActivity
|
||||||
super.onPageFinished(view, url);
|
super.onPageFinished(view, url);
|
||||||
|
|
||||||
handler = new Handler();
|
handler = new Handler();
|
||||||
int delay = 800;
|
int delay = 200;
|
||||||
if(startPage>2)
|
if(startPage>2)
|
||||||
{
|
{
|
||||||
delay = 0;
|
delay = 0;
|
||||||
|
@ -382,9 +428,26 @@ public class application_controller extends AppCompatActivity
|
||||||
status.hasApplicationLoaded = true;
|
status.hasApplicationLoaded = true;
|
||||||
handler = new Handler();
|
handler = new Handler();
|
||||||
|
|
||||||
splashScreen.animate().alpha(0.0f).setStartDelay(500).setDuration(300).setListener(null).withEndAction((() -> splashScreen.setVisibility(View.GONE)));
|
splashScreen.animate().alpha(0.0f).setStartDelay(100).setDuration(300).setListener(null).withEndAction((() -> splashScreen.setVisibility(View.GONE)));
|
||||||
versionChecker();
|
|
||||||
|
|
||||||
|
Handler popuphandler = new Handler();
|
||||||
|
|
||||||
|
popuphandler.postDelayed(new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
if(status.hasApplicationLoaded && !isTutorialPopupShown)
|
||||||
|
{
|
||||||
|
if(!helperMethod.readPrefs("FirstTimeLoaded",application_controller.this)) {
|
||||||
|
message_manager.getInstance().welcomeMessage(application_controller.this, application_controller.this);
|
||||||
|
isTutorialPopupShown = true;
|
||||||
|
}
|
||||||
|
else if(buildconstants.build_type.equals("local"))
|
||||||
|
{
|
||||||
|
versionChecker();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, 2000);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -393,21 +456,6 @@ public class application_controller extends AppCompatActivity
|
||||||
|
|
||||||
}
|
}
|
||||||
}, delay);
|
}, delay);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Handler popuphandler = new Handler();
|
|
||||||
|
|
||||||
popuphandler.postDelayed(new Runnable() {
|
|
||||||
@Override
|
|
||||||
public void run() {
|
|
||||||
if(status.hasApplicationLoaded && !isTutorialPopupShown)
|
|
||||||
{
|
|
||||||
message_manager.getInstance().welcomeMessage(application_controller.this,application_controller.this);
|
|
||||||
isTutorialPopupShown = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}, 2000);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -814,7 +862,6 @@ class progressDelegate implements GeckoSession.ProgressDelegate
|
||||||
public boolean onEditorClicked(TextView v, int actionId, KeyEvent event)
|
public boolean onEditorClicked(TextView v, int actionId, KeyEvent event)
|
||||||
{
|
{
|
||||||
KeyboardUtils.hideKeyboard(application_controller.this);
|
KeyboardUtils.hideKeyboard(application_controller.this);
|
||||||
Log.i("FUCKOFF : ",actionId+"");
|
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
session1.stop();
|
session1.stop();
|
||||||
|
@ -870,16 +917,24 @@ class progressDelegate implements GeckoSession.ProgressDelegate
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
loadURLAnimate("https://boogle.store/search?q="+v.getText().toString().replaceAll(" ","+")+"&p_num=1&s_type=all");
|
String editedURL = "https://boogle.store/search?q="+v.getText().toString().replaceAll(" ","+")+"&p_num=1&s_type=all";
|
||||||
|
status.currentURL = editedURL;
|
||||||
|
searchbar.setText(editedURL.replace("boogle.store","genesis.onion"));
|
||||||
|
searchbar.clearFocus();
|
||||||
|
loadURLAnimate(editedURL);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
catch (IOException e)
|
catch (IOException e)
|
||||||
{
|
{
|
||||||
loadURLAnimate("https://boogle.store/search?q="+v.getText().toString().replaceAll(" ","+")+"&p_num=1&s_type=all");
|
String editedURL = "https://boogle.store/search?q="+v.getText().toString().replaceAll(" ","+")+"&p_num=1&s_type=all";
|
||||||
|
status.currentURL = editedURL;
|
||||||
|
searchbar.clearFocus();
|
||||||
|
searchbar.setText(editedURL.replace("boogle.store","genesis.onion"));
|
||||||
|
loadURLAnimate(editedURL);
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
return false;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,7 @@
|
||||||
|
package com.darkweb.genesissearchengine;
|
||||||
|
|
||||||
|
public class buildconstants
|
||||||
|
{
|
||||||
|
//public static String build_type = "playstore";
|
||||||
|
public static String build_type = "local";
|
||||||
|
}
|
|
@ -2,8 +2,8 @@ package com.darkweb.genesissearchengine;
|
||||||
|
|
||||||
public class constants
|
public class constants
|
||||||
{
|
{
|
||||||
//public static String backendUrl = "https://boogle.store";
|
public static String backendUrl = "https://boogle.store";
|
||||||
public static String backendUrl = "http://msydqstlz2kzerdg.onion/";
|
//public static String backendUrl = "http://msydqstlz2kzerdg.onion/";
|
||||||
public static String backendUrlHost = "boogle.store";
|
public static String backendUrlHost = "boogle.store";
|
||||||
public static String frontEndUrlHost = "genesis.store";
|
public static String frontEndUrlHost = "genesis.store";
|
||||||
public static String allowedHost = ".onion";
|
public static String allowedHost = ".onion";
|
||||||
|
|
|
@ -8,9 +8,12 @@ import android.net.ConnectivityManager;
|
||||||
import android.net.NetworkInfo;
|
import android.net.NetworkInfo;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
|
import static android.content.Context.MODE_PRIVATE;
|
||||||
|
|
||||||
public class helperMethod
|
public class helperMethod
|
||||||
{
|
{
|
||||||
public static boolean isNetworkAvailable(Context application_context)
|
public static boolean isNetworkAvailable(Context application_context)
|
||||||
|
@ -54,6 +57,22 @@ public class helperMethod
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public static String readInternalHTML(Context applicationContext)
|
||||||
|
{
|
||||||
|
SharedPreferences prefs = PreferenceManager
|
||||||
|
.getDefaultSharedPreferences(applicationContext);
|
||||||
|
return prefs.getString("internalhtml","");
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setInternalHTML(String html,Context applicationContext)
|
||||||
|
{
|
||||||
|
SharedPreferences prefs = PreferenceManager
|
||||||
|
.getDefaultSharedPreferences(applicationContext);
|
||||||
|
SharedPreferences.Editor edit = prefs.edit();
|
||||||
|
edit.putString("internalhtml", html);
|
||||||
|
edit.commit();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,10 @@ package com.darkweb.genesissearchengine;
|
||||||
|
|
||||||
import android.app.Application;
|
import android.app.Application;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
import android.graphics.Color;
|
import android.graphics.Color;
|
||||||
|
import android.net.Uri;
|
||||||
import com.crowdfire.cfalertdialog.CFAlertDialog;
|
import com.crowdfire.cfalertdialog.CFAlertDialog;
|
||||||
|
|
||||||
public class message_manager {
|
public class message_manager {
|
||||||
|
@ -17,8 +20,6 @@ public class message_manager {
|
||||||
|
|
||||||
public void welcomeMessage(Context application_context, application_controller controller)
|
public void welcomeMessage(Context application_context, application_controller controller)
|
||||||
{
|
{
|
||||||
if(!helperMethod.readPrefs("FirstTimeLoaded",application_context))
|
|
||||||
{
|
|
||||||
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
|
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
|
||||||
.setDialogStyle(CFAlertDialog.CFAlertStyle.ALERT)
|
.setDialogStyle(CFAlertDialog.CFAlertStyle.ALERT)
|
||||||
.setTitle("Welcome | Deep Web Gateway")
|
.setTitle("Welcome | Deep Web Gateway")
|
||||||
|
@ -51,7 +52,6 @@ public class message_manager {
|
||||||
helperMethod.savePrefs("FirstTimeLoaded",true,application_context);
|
helperMethod.savePrefs("FirstTimeLoaded",true,application_context);
|
||||||
});
|
});
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
// Create Alert using Builder
|
// Create Alert using Builder
|
||||||
|
@ -87,6 +87,32 @@ public class message_manager {
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void abiError(Context application_context,String currentAbi)
|
||||||
|
{
|
||||||
|
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
|
||||||
|
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
|
||||||
|
.setTitle("Invalid Setup File")
|
||||||
|
.setBackgroundColor(Color.argb(230,33,45,69))
|
||||||
|
.setTextColor(Color.argb(255,255,255,255))
|
||||||
|
.onDismissListener(new DialogInterface.OnDismissListener() {
|
||||||
|
@Override
|
||||||
|
public void onDismiss(DialogInterface dialog) {
|
||||||
|
abiError(application_context,currentAbi);
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setMessage("Looks like you messed up the installation. Either Install it from playstore or follow the link")
|
||||||
|
.addButton("Local Upgrade", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED, (dialog, which) -> {
|
||||||
|
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://boogle.store/manual?abi="+currentAbi));
|
||||||
|
application_context.startActivity(browserIntent);
|
||||||
|
})
|
||||||
|
.addButton("Playstore Upgrade", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED, (dialog, which) -> {
|
||||||
|
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.darkweb.genesissearchengine"));
|
||||||
|
application_context.startActivity(browserIntent);
|
||||||
|
});
|
||||||
|
|
||||||
|
builder.show();
|
||||||
|
}
|
||||||
|
|
||||||
public void illegalWarningDialog(Context application_context,application_controller controller)
|
public void illegalWarningDialog(Context application_context,application_controller controller)
|
||||||
{
|
{
|
||||||
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
|
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
|
||||||
|
@ -173,26 +199,20 @@ public class message_manager {
|
||||||
builder.show();
|
builder.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void versionWarning(Context application_context)
|
public void versionWarning(Context application_context,String currentAbi)
|
||||||
{/*
|
{
|
||||||
new LovelyStandardDialog(application_context)
|
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
|
||||||
.setTopColorRes(R.color.header)
|
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
|
||||||
.setIcon(R.drawable.logo)
|
.setTitle("Update Pending")
|
||||||
.setTitle("Update Application")
|
.setBackgroundColor(Color.argb(230,33,45,69))
|
||||||
.setMessage("A newer version is availabe please install to get better experience")
|
.setTextColor(Color.argb(255,255,255,255))
|
||||||
.setPositiveButton(android.R.string.ok, new View.OnClickListener() {
|
.setMessage("You have not updated this app for a while please update it to get best performance\n")
|
||||||
@Override
|
.addButton("Update", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.END, (dialog, which) -> {
|
||||||
public void onClick(View v)
|
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://boogle.store/manual?abi="+currentAbi));
|
||||||
{
|
application_context.startActivity(browserIntent);
|
||||||
String url = "http://boogle.store/android";
|
});
|
||||||
Intent i = new Intent(Intent.ACTION_VIEW);
|
|
||||||
i.setData(Uri.parse(url));
|
builder.show();
|
||||||
application_context.startActivity(i);
|
|
||||||
}
|
|
||||||
})
|
|
||||||
.setNegativeButton(android.R.string.no, null)
|
|
||||||
.show();
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@ package com.darkweb.genesissearchengine;
|
||||||
|
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.webkit.WebView;
|
||||||
import com.msopentech.thali.android.toronionproxy.AndroidOnionProxyManager;
|
import com.msopentech.thali.android.toronionproxy.AndroidOnionProxyManager;
|
||||||
import com.msopentech.thali.toronionproxy.OnionProxyManager;
|
import com.msopentech.thali.toronionproxy.OnionProxyManager;
|
||||||
import org.mozilla.gecko.PrefsHelper;
|
import org.mozilla.gecko.PrefsHelper;
|
||||||
|
@ -14,6 +15,8 @@ public class orbot_manager {
|
||||||
boolean isLoading = false;
|
boolean isLoading = false;
|
||||||
OnionProxyManager onionProxyManager = null;
|
OnionProxyManager onionProxyManager = null;
|
||||||
Context applicationContext = null;
|
Context applicationContext = null;
|
||||||
|
WebView view1=null;
|
||||||
|
WebView view2=null;
|
||||||
|
|
||||||
public static orbot_manager getInstance() {
|
public static orbot_manager getInstance() {
|
||||||
return ourInstance;
|
return ourInstance;
|
||||||
|
@ -27,7 +30,7 @@ public class orbot_manager {
|
||||||
if(!status.isTorInitialized)
|
if(!status.isTorInitialized)
|
||||||
{
|
{
|
||||||
message_manager.getInstance().startingOrbotInfo(application_context);
|
message_manager.getInstance().startingOrbotInfo(application_context);
|
||||||
initializeTorClient(application_context);
|
initializeTorClient(application_context,view1,view2);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -61,8 +64,13 @@ public class orbot_manager {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initializeTorClient(Context applicationContext)
|
public void initializeTorClient(Context applicationContext,WebView view1,WebView view2)
|
||||||
{
|
{
|
||||||
|
if(view1==null)
|
||||||
|
{
|
||||||
|
this.view1 = view1;
|
||||||
|
this.view2 = view2;
|
||||||
|
}
|
||||||
if(isLoading)
|
if(isLoading)
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
|
@ -71,53 +79,50 @@ public class orbot_manager {
|
||||||
{
|
{
|
||||||
public void run()
|
public void run()
|
||||||
{
|
{
|
||||||
try
|
while (true)
|
||||||
{
|
{
|
||||||
isLoading = true;
|
try
|
||||||
String fileStorageLocation = "torfiles";
|
|
||||||
onionProxyManager = new AndroidOnionProxyManager(applicationContext, fileStorageLocation);
|
|
||||||
int totalSecondsPerTorStartup = 4 * 60;
|
|
||||||
int totalTriesPerTorStartup = 5;
|
|
||||||
try {
|
|
||||||
boolean ok = onionProxyManager.startWithRepeat(totalSecondsPerTorStartup, totalTriesPerTorStartup);
|
|
||||||
if (!ok) {
|
|
||||||
Log.i("TorTest", "Couldn't start Tor!");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
{
|
||||||
if(onionProxyManager.isRunning()) {
|
isLoading = true;
|
||||||
Log.i("My App", "Tor initialized on port " + onionProxyManager.getIPv4LocalHostSocksPort());
|
String fileStorageLocation = "torfiles";
|
||||||
|
|
||||||
|
if(onionProxyManager!=null && onionProxyManager.isRunning())
|
||||||
|
{
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
onionProxyManager = new AndroidOnionProxyManager(applicationContext, fileStorageLocation);
|
||||||
|
|
||||||
|
int totalSecondsPerTorStartup = 4 * 60;
|
||||||
|
int totalTriesPerTorStartup = 5;
|
||||||
|
boolean ok = onionProxyManager.startWithRepeat(totalSecondsPerTorStartup, totalTriesPerTorStartup);
|
||||||
|
if (!ok) {
|
||||||
|
Log.i("TorTest", "Couldn't start Tor!");
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
if (onionProxyManager.isRunning()) {
|
||||||
|
Log.i("My App", "Tor initialized on port " + onionProxyManager.getIPv4LocalHostSocksPort());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
while (!onionProxyManager.isRunning()) {
|
||||||
|
sleep(1000);
|
||||||
|
}
|
||||||
|
if (onionProxyManager.isRunning()) {
|
||||||
|
Log.i("My App", "Tor initialized on port " + onionProxyManager.getIPv4LocalHostSocksPort());
|
||||||
|
status.port = onionProxyManager.getIPv4LocalHostSocksPort();
|
||||||
|
initializeProxy();
|
||||||
|
sleep(1500);
|
||||||
|
status.isTorInitialized = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
isLoading = false;
|
||||||
|
} catch (Exception ex) {
|
||||||
|
ex.printStackTrace();
|
||||||
|
continue;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch (Exception ex) {
|
}
|
||||||
ex.printStackTrace();
|
|
||||||
}
|
|
||||||
|
|
||||||
while (!onionProxyManager.isRunning())
|
|
||||||
{
|
|
||||||
sleep(1000);
|
|
||||||
}
|
|
||||||
if(onionProxyManager.isRunning())
|
|
||||||
{
|
|
||||||
Log.i("My App", "Tor initialized on port " + onionProxyManager.getIPv4LocalHostSocksPort());
|
|
||||||
status.port = onionProxyManager.getIPv4LocalHostSocksPort();
|
|
||||||
initializeProxy();
|
|
||||||
sleep(1500);
|
|
||||||
status.isTorInitialized = true;
|
|
||||||
}
|
|
||||||
isLoading = false;
|
|
||||||
}
|
|
||||||
catch (InterruptedException e)
|
|
||||||
{
|
|
||||||
isLoading = false;
|
|
||||||
e.printStackTrace();
|
|
||||||
} catch (IOException e) {
|
|
||||||
isLoading = false;
|
|
||||||
e.printStackTrace();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}.start();
|
}.start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -134,8 +139,8 @@ public class orbot_manager {
|
||||||
PrefsHelper.setPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0");
|
PrefsHelper.setPref("general.useragent.override", "Mozilla/5.0 (Windows NT 6.1; rv:17.0) Gecko/20100101 Firefox/17.0");
|
||||||
PrefsHelper.setPref("privacy.donottrackheader.enabled",false);
|
PrefsHelper.setPref("privacy.donottrackheader.enabled",false);
|
||||||
PrefsHelper.setPref("privacy.donottrackheader.value",1);
|
PrefsHelper.setPref("privacy.donottrackheader.value",1);
|
||||||
ProxySettings.setProxy(applicationContext, "127.0.0.1", status.port);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,6 +9,7 @@ import android.util.Log;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
|
import android.widget.FrameLayout;
|
||||||
import android.widget.ProgressBar;
|
import android.widget.ProgressBar;
|
||||||
|
|
||||||
|
|
||||||
|
@ -40,7 +41,7 @@ public class webRequestHandler
|
||||||
private WebView[] view = new WebView[2];
|
private WebView[] view = new WebView[2];
|
||||||
private ProgressBar progressBar;
|
private ProgressBar progressBar;
|
||||||
private EditText searchbar;
|
private EditText searchbar;
|
||||||
private ConstraintLayout requestFailure;
|
private FrameLayout requestFailure;
|
||||||
|
|
||||||
public boolean reloadError=false;
|
public boolean reloadError=false;
|
||||||
public boolean isReloadedUrl = false;
|
public boolean isReloadedUrl = false;
|
||||||
|
@ -58,6 +59,7 @@ public class webRequestHandler
|
||||||
private final static int MESSAGE_UPDATE_TEXT_CHILD_THREAD =1;
|
private final static int MESSAGE_UPDATE_TEXT_CHILD_THREAD =1;
|
||||||
private final static int RELOAD_ERROR =3;
|
private final static int RELOAD_ERROR =3;
|
||||||
private application_controller controller;
|
private application_controller controller;
|
||||||
|
private Context applictionContext;
|
||||||
|
|
||||||
public static webRequestHandler getInstance() {
|
public static webRequestHandler getInstance() {
|
||||||
return ourInstance;
|
return ourInstance;
|
||||||
|
@ -67,8 +69,9 @@ public class webRequestHandler
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public void initialization(WebView view1, WebView view2, ProgressBar progressBar, EditText searchbar, ConstraintLayout requestFailure, Context applicationContext,ConstraintLayout splash,application_controller controller)
|
public void initialization(WebView view1, WebView view2, ProgressBar progressBar, EditText searchbar, FrameLayout requestFailure, Context applicationContext,ConstraintLayout splash,application_controller controller)
|
||||||
{
|
{
|
||||||
|
this.applictionContext = applicationContext;
|
||||||
this.controller = controller;
|
this.controller = controller;
|
||||||
this.splash = splash;
|
this.splash = splash;
|
||||||
this.view[0] = view1;
|
this.view[0] = view1;
|
||||||
|
@ -108,6 +111,7 @@ public class webRequestHandler
|
||||||
}
|
}
|
||||||
|
|
||||||
clientThread = new Thread(() -> {
|
clientThread = new Thread(() -> {
|
||||||
|
String errorMessage = "";
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Log.i("STEST : 5","1");
|
Log.i("STEST : 5","1");
|
||||||
|
@ -125,7 +129,8 @@ public class webRequestHandler
|
||||||
}
|
}
|
||||||
catch (Exception e)
|
catch (Exception e)
|
||||||
{
|
{
|
||||||
Log.i("STEST : 8","1");
|
Log.i("STEST : 8","1 : " + e.getMessage());
|
||||||
|
errorMessage = e.getMessage();
|
||||||
if(!e.getMessage().contains("Socket closed") && !e.getMessage().contains("failed to respond") && e.getMessage().contains("Unable to resolve host \"boogle.store\""))
|
if(!e.getMessage().contains("Socket closed") && !e.getMessage().contains("failed to respond") && e.getMessage().contains("Unable to resolve host \"boogle.store\""))
|
||||||
{
|
{
|
||||||
Log.i("STEST99 : 9","1 : "+e.getMessage());
|
Log.i("STEST99 : 9","1 : "+e.getMessage());
|
||||||
|
@ -134,6 +139,8 @@ public class webRequestHandler
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
});
|
});
|
||||||
clientThread.start();
|
clientThread.start();
|
||||||
}
|
}
|
||||||
|
@ -161,8 +168,26 @@ public class webRequestHandler
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void nonProxyConnection(String url) throws IOException {
|
public void nonProxyConnection(String url) throws IOException
|
||||||
|
{
|
||||||
url = url.replace("http://boogle","https://boogle");
|
url = url.replace("http://boogle","https://boogle");
|
||||||
|
|
||||||
|
Log.i("SHITS","fizza " + url);
|
||||||
|
if(url.equals("https://boogle.store"))
|
||||||
|
{
|
||||||
|
String html_local = helperMethod.readInternalHTML(applictionContext);
|
||||||
|
Log.i("SHITS","fizza1 " + html_local);
|
||||||
|
if(html_local.length()>1)
|
||||||
|
{
|
||||||
|
Log.i("SHITS","fizza2 " + url);
|
||||||
|
html = html_local;
|
||||||
|
Message message = new Message();
|
||||||
|
message.what = MESSAGE_UPDATE_TEXT_CHILD_THREAD;
|
||||||
|
updateUIHandler.sendMessage(message);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
HttpClient client=new DefaultHttpClient();;
|
HttpClient client=new DefaultHttpClient();;
|
||||||
try {
|
try {
|
||||||
SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(
|
SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(
|
||||||
|
@ -193,10 +218,16 @@ public class webRequestHandler
|
||||||
in.close();
|
in.close();
|
||||||
|
|
||||||
html = str.toString();
|
html = str.toString();
|
||||||
|
if(url.equals("https://boogle.store"))
|
||||||
|
{
|
||||||
|
html = html.replace("/privacy","https://boogle.store/privacy").replace("/about","https://boogle.store/about").replace("/reportus","https://boogle.store/reportus").replace("/search?q=random&p_num=1&s_type=image","https://boogle.store/search?q=random&p_num=1&s_type=image");
|
||||||
|
Log.i("SHITS","fizza3 " + html);
|
||||||
|
helperMethod.setInternalHTML(html,applictionContext);
|
||||||
|
}
|
||||||
|
|
||||||
Message message = new Message();
|
Message message = new Message();
|
||||||
message.what = MESSAGE_UPDATE_TEXT_CHILD_THREAD;
|
message.what = MESSAGE_UPDATE_TEXT_CHILD_THREAD;
|
||||||
updateUIHandler.sendMessage(message);
|
updateUIHandler.sendMessage(message);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void reportURL(String url)
|
public void reportURL(String url)
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<item android:drawable="@color/splashblue"/>
|
||||||
|
</layer-list>
|
|
@ -1,8 +1,8 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
<shape xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
<gradient
|
<gradient
|
||||||
android:startColor="#141e30"
|
android:startColor="#4d88ff"
|
||||||
android:endColor="#004e92"
|
android:endColor="#4d88ff"
|
||||||
android:angle="135"
|
android:angle="135"
|
||||||
/>
|
/>
|
||||||
</shape>
|
</shape>
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<item android:drawable="@color/splashblue"/>
|
||||||
|
</layer-list>
|
After Width: | Height: | Size: 7.5 KiB |
After Width: | Height: | Size: 11 KiB |
|
@ -163,60 +163,26 @@
|
||||||
android:indeterminateOnly="true"
|
android:indeterminateOnly="true"
|
||||||
android:progress="50" app:layout_constraintTop_toTopOf="parent"
|
android:progress="50" app:layout_constraintTop_toTopOf="parent"
|
||||||
/>
|
/>
|
||||||
<android.support.constraint.ConstraintLayout
|
|
||||||
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" android:id="@+id/splashScreen"
|
android:id="@+id/splashScreen"
|
||||||
android:background="@drawable/backgradient"
|
android:background="@color/splashblue"
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
android:layout_height="match_parent">
|
||||||
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintVertical_bias="1.0">
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="113dp"
|
|
||||||
android:layout_height="77dp" app:srcCompat="@drawable/logolarge"
|
|
||||||
android:id="@+id/imageView_loading_back" app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
android:layout_marginBottom="80dp" android:contentDescription="@string/todo"/>
|
|
||||||
<ProgressBar
|
|
||||||
style="?android:attr/progressBarStyle"
|
|
||||||
android:layout_width="95dp"
|
|
||||||
android:layout_height="95dp"
|
|
||||||
android:indeterminateTintMode="src_in"
|
|
||||||
android:indeterminateTint="#414e62"
|
|
||||||
app:layout_constraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="80dp"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="70dp" app:srcCompat="@drawable/logolarge"
|
|
||||||
android:id="@+id/imageView_loading" app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
android:layout_marginBottom="80dp" android:contentDescription="@string/todo"/>
|
|
||||||
<TextView
|
|
||||||
android:text="@string/projectName"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textColor="#ffffff"
|
android:layout_gravity="center_vertical|center_horizontal"
|
||||||
android:textStyle="bold"
|
android:id="@+id/backsplash"
|
||||||
android:id="@+id/textView3"
|
android:background="@mipmap/splashlogo"/>
|
||||||
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="16dp"
|
<ImageView
|
||||||
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="35dp"
|
android:layout_width="35dp"
|
||||||
android:layout_marginEnd="231dp" app:layout_constraintEnd_toEndOf="parent"
|
android:layout_height="35dp" app:srcCompat="@drawable/loading"
|
||||||
app:layout_constraintHorizontal_bias="0.0"/>
|
android:layout_centerInParent="true"
|
||||||
<TextView
|
android:layout_gravity="bottom|center_horizontal"
|
||||||
android:text="@string/loadingText"
|
android:layout_marginBottom="200px"
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/imageView_loading_back"/>
|
||||||
android:layout_height="wrap_content"
|
</FrameLayout>
|
||||||
android:textColor="#ffffff"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:id="@+id/notification" app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
android:layout_marginTop="50dp" android:layout_marginStart="76dp" android:layout_marginEnd="76dp"/>
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
|
@ -163,60 +163,26 @@
|
||||||
android:indeterminateOnly="true"
|
android:indeterminateOnly="true"
|
||||||
android:progress="50" app:layout_constraintTop_toTopOf="parent"
|
android:progress="50" app:layout_constraintTop_toTopOf="parent"
|
||||||
/>
|
/>
|
||||||
<android.support.constraint.ConstraintLayout
|
|
||||||
|
<FrameLayout
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="match_parent" android:id="@+id/splashScreen"
|
android:id="@+id/splashScreen"
|
||||||
android:background="@drawable/backgradient"
|
android:background="@color/splashblue"
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
android:layout_height="match_parent">
|
||||||
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.0" app:layout_constraintVertical_bias="1.0">
|
|
||||||
<ImageView
|
<ImageView
|
||||||
android:layout_width="113dp"
|
|
||||||
android:layout_height="77dp" app:srcCompat="@drawable/logolarge"
|
|
||||||
android:id="@+id/imageView_loading_back" app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
android:layout_marginBottom="80dp" android:contentDescription="@string/todo"/>
|
|
||||||
<ProgressBar
|
|
||||||
style="?android:attr/progressBarStyle"
|
|
||||||
android:layout_width="95dp"
|
|
||||||
android:layout_height="95dp"
|
|
||||||
android:indeterminateTintMode="src_in"
|
|
||||||
android:indeterminateTint="#414e62"
|
|
||||||
app:layout_constraintStart_toStartOf="parent" app:layout_constraintHorizontal_bias="0.5"
|
|
||||||
app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"
|
|
||||||
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="80dp"/>
|
|
||||||
|
|
||||||
<ImageView
|
|
||||||
android:layout_width="100dp"
|
|
||||||
android:layout_height="70dp" app:srcCompat="@drawable/logolarge"
|
|
||||||
android:id="@+id/imageView_loading" app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
android:layout_marginBottom="80dp" android:contentDescription="@string/todo"/>
|
|
||||||
<TextView
|
|
||||||
android:text="@string/projectName"
|
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:textColor="#ffffff"
|
android:layout_gravity="center_vertical|center_horizontal"
|
||||||
android:textStyle="bold"
|
android:id="@+id/backsplash"
|
||||||
android:id="@+id/textView3"
|
android:background="@mipmap/splashlogo"/>
|
||||||
app:layout_constraintBottom_toBottomOf="parent" android:layout_marginBottom="16dp"
|
<ImageView
|
||||||
app:layout_constraintStart_toStartOf="parent" android:layout_marginStart="35dp"
|
android:layout_width="35dp"
|
||||||
android:layout_marginEnd="231dp" app:layout_constraintEnd_toEndOf="parent"
|
android:layout_height="35dp" app:srcCompat="@drawable/loading"
|
||||||
app:layout_constraintHorizontal_bias="0.0"/>
|
android:layout_centerInParent="true"
|
||||||
<TextView
|
android:layout_gravity="bottom|center_horizontal"
|
||||||
android:text="@string/loadingText"
|
android:layout_marginBottom="200px"
|
||||||
android:layout_width="wrap_content"
|
android:id="@+id/imageView_loading_back"/>
|
||||||
android:layout_height="wrap_content"
|
</FrameLayout>
|
||||||
android:textColor="#ffffff"
|
|
||||||
android:textStyle="bold"
|
|
||||||
android:id="@+id/notification" app:layout_constraintStart_toStartOf="parent"
|
|
||||||
app:layout_constraintHorizontal_bias="0.5" app:layout_constraintEnd_toEndOf="parent"
|
|
||||||
app:layout_constraintTop_toTopOf="parent" app:layout_constraintBottom_toBottomOf="parent"
|
|
||||||
android:layout_marginTop="50dp" android:layout_marginStart="76dp" android:layout_marginEnd="76dp"/>
|
|
||||||
</android.support.constraint.ConstraintLayout>
|
|
||||||
|
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
<android.support.design.widget.FloatingActionButton
|
<android.support.design.widget.FloatingActionButton
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
</android.support.constraint.ConstraintLayout>
|
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 16 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 10 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 22 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 35 KiB |
After Width: | Height: | Size: 36 KiB |
After Width: | Height: | Size: 25 KiB |
After Width: | Height: | Size: 49 KiB |
After Width: | Height: | Size: 50 KiB |
|
@ -5,7 +5,7 @@
|
||||||
<item name="colorPrimary">#f2f2f2</item>
|
<item name="colorPrimary">#f2f2f2</item>
|
||||||
<item name="colorPrimaryDark">#f2f2f2</item>
|
<item name="colorPrimaryDark">#f2f2f2</item>
|
||||||
<item name="colorAccent">#f2f2f2</item>
|
<item name="colorAccent">#f2f2f2</item>
|
||||||
<item name="android:windowBackground">@drawable/backgradient</item>
|
<item name="android:windowBackground">@drawable/backsplash</item>
|
||||||
<item name="android:windowLightStatusBar">true</item>
|
<item name="android:windowLightStatusBar">true</item>
|
||||||
</style>
|
</style>
|
||||||
</resources>
|
</resources>
|
|
@ -4,6 +4,7 @@
|
||||||
<color name="colorPrimaryDark">#000000</color>
|
<color name="colorPrimaryDark">#000000</color>
|
||||||
<color name="colorAccent">#000000</color>
|
<color name="colorAccent">#000000</color>
|
||||||
<color name="blue">#0066FF</color>
|
<color name="blue">#0066FF</color>
|
||||||
|
<color name="splashblue">#4d88ff</color>
|
||||||
<color name="holo_gray">#b3b3b3</color>
|
<color name="holo_gray">#b3b3b3</color>
|
||||||
<color name="header">#212f45</color>
|
<color name="header">#212f45</color>
|
||||||
</resources>
|
</resources>
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
<string name="errorTiyle">\u0020\u0020\u0020Opps! Some Thing Went Wrong</string>
|
<string name="errorTiyle">\u0020\u0020\u0020Opps! Some Thing Went Wrong</string>
|
||||||
<string name="todo">TODO</string>
|
<string name="todo">TODO</string>
|
||||||
<string name="projectName">Genesis Search Engine</string>
|
<string name="projectName">Genesis Search Engine</string>
|
||||||
<string name="loadingText">Loading Please Wait</string>
|
<string name="loadingText">Online Freedom</string>
|
||||||
<string name="reload">Reload</string>
|
<string name="reload">Reload</string>
|
||||||
<string name="internetErrorMessage">These might be the problems you are facing \n\n• Webpage or Website might be down \n•
|
<string name="internetErrorMessage">These might be the problems you are facing \n\n• Webpage or Website might be down \n•
|
||||||
Your Internet connection might be poor \n• You might be using a proxy \n• Website might be blocked by firewall
|
Your Internet connection might be poor \n• You might be using a proxy \n• Website might be blocked by firewall
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
<item name="colorPrimary">#f9f9f9</item>
|
<item name="colorPrimary">#f9f9f9</item>
|
||||||
<item name="colorPrimaryDark">#f9f9f9</item>
|
<item name="colorPrimaryDark">#f9f9f9</item>
|
||||||
<item name="colorAccent">#f9f9f9</item>
|
<item name="colorAccent">#f9f9f9</item>
|
||||||
<item name="android:windowBackground">@drawable/backgradient</item>
|
<item name="android:windowBackground">@drawable/backsplash</item>
|
||||||
<item name="android:statusBarColor">#000000</item>
|
<item name="android:statusBarColor">#000000</item>
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
|
|