bug fixes

master
msmannan00 2019-05-10 23:44:08 +05:00
parent c65cd47610
commit 3cb6fdf3cf
27 changed files with 1028 additions and 325 deletions

View File

@ -1,55 +1,122 @@
apply plugin: 'com.android.application'
apply plugin: 'maven'
apply plugin: 'io.fabric'
ext {
geckoviewChannel = ""
geckoviewVersion = "66.0.20190322021635"
geckoviewChannel = "nightly"
geckoviewVersion = "64.0.20180927100037"
}
repositories {
maven {
url "https://maven.mozilla.org/maven2/"
mavenLocal()
mavenCentral()
google()
jcenter()
maven { url "https://raw.githubusercontent.com/guardianproject/gpmaven/master" }
}
}
android {
compileSdkVersion 28
defaultConfig {
applicationId "com.darkweb.genesissearchengine"
minSdkVersion 21
targetSdkVersion 28
versionCode 61
versionName "61.0"
versionCode 126
versionName "126.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
flavorDimensions "abi"
// Note: compileOptions is only required for minSdkVersion < 24
// Note: compileOptions is only required for minSdkVersion < 26 (not 24)
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
flavorDimensions "abi"
productFlavors {
x86 { dimension "abi" }
x86_64 { dimension "abi" }
arm { dimension "abi" }
aarch64 { dimension "abi" }
arm {
versionCode 131
versionName "131"
dimension "abi"
}
aarch64 {
versionCode 132
versionName "132"
dimension "abi"
}
x86_64 {
versionCode 135
versionName "135"
dimension "abi"
}
x86 {
versionCode 134
versionName "134"
dimension "abi"
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
splits {
abi {
enable true
reset()
include 'arm64-v8a'
//include 'x86'
//include 'armeabi-v7a'
//include 'x86_64'
//include 'armeabi'
universalApk true
}
}
}
}
configurations.all {
resolutionStrategy.eachDependency { DependencyResolveDetails details ->
def requested = details.requested
if (requested.group == 'com.android.support') {
if (!requested.name.startsWith("multidex")) {
details.useVersion '26.1.0'
}
}
}
}
dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:28.0.0'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
implementation 'com.google.android.gms:play-services-ads:17.1.1'
implementation "cz.msebera.android:httpclient:4.4.1.2"
implementation 'info.guardianproject.netcipher:netcipher:2.0.0-alpha1'
implementation 'info.guardianproject.netcipher:netcipher-okhttp3:2.0.0-alpha1'
armImplementation "org.mozilla.geckoview:geckoview-armeabi-v7a:${geckoviewVersion}"
aarch64Implementation "org.mozilla.geckoview:geckoview-arm64-v8a:${geckoviewVersion}"
implementation 'com.yarolegovich:lovely-dialog:1.1.0'
//x86Implementation "org.mozilla.geckoview:geckoview-nightly-x86:68.0.20190405111221"
//x86_64Implementation "org.mozilla.geckoview:geckoview-nightly-x86_64:68.0.20190405111221"
//armImplementation "org.mozilla.geckoview:geckoview-nightly-armeabi-v7a:68.0.20190405111221"
aarch64Implementation "org.mozilla.geckoview:geckoview-nightly-arm64-v8a:68.0.20190405111221"
implementation 'com.crashlytics.sdk.android:crashlytics:2.9.9'
implementation 'com.crowdfire.cfalertdialog:cfalertdialog:1.1.0'
implementation 'com.github.jehy:Tor-Onion-Proxy-Library:0.0.7'
implementation 'org.slf4j:slf4j-api:1.7.7'
implementation 'org.slf4j:slf4j-android:1.7.7'
implementation 'com.android.support:design:28.0.0'
}
apply plugin: 'com.android.application'

3
app/fabric.properties Normal file
View File

@ -0,0 +1,3 @@
#Contains API Secret used to validate your application. Commit to internal source control; avoid making secret public.
#Wed May 01 00:42:45 PKT 2019
apiSecret=042501af0b2390b9f064ff9a0823e52a2dd04b2280c9b675925cebbb9620ecbf

View File

@ -13,7 +13,7 @@
android:supportsRtl="true"
android:theme="@style/AppTheme"
android:networkSecurityConfig="@xml/network_security_config"
android:usesCleartextTraffic="true" tools:ignore="GoogleAppIndexingWarning">
android:usesCleartextTraffic="true" >
<uses-library
android:name="org.apache.http.legacy"
android:required="false" />
@ -21,11 +21,14 @@
android:screenOrientation="portrait" >
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<meta-data
android:name="io.fabric.ApiKey"
android:value="be76c64dae2519d4ab8daaed88298da14c7c294f"
/>
<meta-data
android:name="com.google.android.gms.ads.APPLICATION_ID"
android:value="ca-app-pub-5074525529134731~2926711128"/>

View File

@ -37,7 +37,7 @@ public class admanager {
@Override
public void onAdFailedToLoad(int errorCode) {
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
@Override
@ -59,6 +59,7 @@ public class admanager {
public void showAd()
{
mInterstitialAd.show();
mInterstitialAd.loadAd(new AdRequest.Builder().build());
}
}

View File

@ -0,0 +1,47 @@
package com.darkweb.genesissearchengine;
import android.content.Context;
import android.content.SharedPreferences;
import com.crashlytics.android.Crashlytics;
import java.util.UUID;
public class analyticmanager {
private static final analyticmanager ourInstance = new analyticmanager();
public static analyticmanager getInstance() {
return ourInstance;
}
String uniqueID = null;
private analyticmanager()
{
}
public void logUser()
{
Crashlytics.setUserIdentifier(uniqueID);
Crashlytics.setUserEmail("user@fabric.io");
Crashlytics.setUserName(uniqueID);
}
public void setDeviceID(Context context)
{
final String PREF_UNIQUE_ID = "PREF_UNIQUE_ID";
if (uniqueID == null)
{
SharedPreferences sharedPrefs = context.getSharedPreferences(
PREF_UNIQUE_ID, Context.MODE_PRIVATE);
uniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null);
if (uniqueID == null) {
uniqueID = UUID.randomUUID().toString();
SharedPreferences.Editor editor = sharedPrefs.edit();
editor.putString(PREF_UNIQUE_ID, uniqueID);
editor.commit();
}
}
}
}

View File

@ -1,31 +1,34 @@
package com.darkweb.genesissearchengine;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
import android.graphics.Color;
import android.os.Build;
import android.os.Handler;
import android.support.constraint.ConstraintLayout;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.v7.app.AppCompatActivity;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.style.ForegroundColorSpan;
import android.util.Log;
import android.util.Patterns;
import android.view.KeyEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.view.inputmethod.InputMethodManager;
import android.webkit.*;
import android.widget.*;
import com.crashlytics.android.Crashlytics;
import io.fabric.sdk.android.Fabric;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.Stack;
import com.example.myapplication.R;
import info.guardianproject.netcipher.proxy.OrbotHelper;
import org.mozilla.gecko.PrefsHelper;
import org.mozilla.geckoview.GeckoRuntime;
import org.mozilla.geckoview.GeckoSession;
import org.mozilla.geckoview.GeckoView;
@ -37,12 +40,13 @@ public class application_controller extends AppCompatActivity
{
/*View Objects*/
private WebView webView1;
private WebView webView2;
public WebView webView1;
public WebView webView2;
private GeckoView webLoader;
private ProgressBar progressBar;
private ConstraintLayout requestFailure;
private ConstraintLayout splashScreen;
private FloatingActionButton floatingButton;
private Button reloadButton;
private ImageButton homeButton;
private EditText searchbar;
@ -52,26 +56,61 @@ public class application_controller extends AppCompatActivity
private String version_code = "3.0";
private boolean wasBackPressed = false;
private boolean isLoadedUrlSet = false;
private boolean isGeckoURLLoadded = false;
private boolean isOnnionUrlHalted = false;
Handler handler = null;
Runnable geckoRunnable = null;
boolean isBlackPage = false;
int startPage=0;
Handler geckoHandler = null;
Runnable geckoRunnableError = null;
/*helper Variables*/
Stack traceUrlList = new Stack<String>();
boolean isTutorialPopupShown = false;
/*-------------------------------------------------------INITIALIZATION-------------------------------------------------------*/
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
//initializeCrashlytics();
initializeBackgroundColor();
//setOrientation();
setContentView(R.layout.application_view);
orbot_manager.getInstance().initializeTorClient(this);
initializeStatus();
initializeRunnable();
initializeProxy();
initializeConnections();
initializeOrbot();
initializeWebViews();
initializeView();
initializeAds();
checkSSLTextColor();
}
public void setOrientation()
{
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
}
public void initializeBackgroundColor()
{
if (android.os.Build.VERSION.SDK_INT > Build.VERSION_CODES.M){
getWindow().setBackgroundDrawableResource(R.drawable.backgradientwhite);
} else{
getWindow().setBackgroundDrawableResource(R.drawable.backgradientblack);
}
}
public void initializeStatus()
{
helperMethod.setPlaystoreStatus(this);
}
public void initializeCrashlytics()
{
Fabric.with(this, new Crashlytics());
analyticmanager.getInstance().setDeviceID(this);
analyticmanager.getInstance().logUser();
}
public void versionChecker()
@ -92,10 +131,11 @@ public class application_controller extends AppCompatActivity
Runnable my_runnable = new Runnable() {
@Override
public void run() {
if(!isBlackPage)
if(!isBlackPage || startPage>1)
{
Log.i("SHIT1 : ",status.currentURL);
Log.i("PROBLEM24","");
progressBar.animate().setDuration(150).alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
Log.i("SHIT1 : ",status.currentURL);
datamodel.getInstance().setIsLoadingURL(false);
message_manager.getInstance().URLNotFoundError(application_controller.this);
}
@ -108,67 +148,39 @@ public class application_controller extends AppCompatActivity
admanager.getInstance().initialize(this);
}
public void initializeProxy()
{
PrefsHelper.setPref("network.proxy.type",1); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks","127.0.0.1"); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks_port",9050); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks_version",5); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks_remote_dns",true); //manual proxy settings
PrefsHelper.setPref("browser.cache.disk.enable",false);
PrefsHelper.setPref("browser.cache.memory.enable",false);
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.value",1);
}
public void initializeConnections()
{
webView1 = findViewById(R.id.pageLoader1);
webView2 = findViewById(R.id.pageLoader2);
progressBar = findViewById(R.id.progressBar);
requestFailure = findViewById(R.id.requestFailure);
splashScreen = findViewById(R.id.splashScreen);
reloadButton = findViewById(R.id.reloadButton);
homeButton = findViewById(R.id.home);
searchbar = findViewById(R.id.search);
topbar = findViewById(R.id.topbar);
webLoader = findViewById(R.id.webLoader);
}
public void initializeOrbot()
{
Intent orbot = OrbotHelper.getOrbotStartIntent(getApplicationContext());
getApplicationContext().registerReceiver(orbot_manager.getInstance().orbotStatusReceiver,new IntentFilter(OrbotHelper.ACTION_STATUS));
getApplicationContext().sendBroadcast(orbot);
webView1 = (WebView) findViewById(R.id.pageLoader1);
webView2 = (WebView) findViewById(R.id.pageLoader2);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
requestFailure = (ConstraintLayout) findViewById(R.id.requestFailure);
splashScreen = (ConstraintLayout) findViewById(R.id.splashScreen);
reloadButton = (Button) findViewById(R.id.reloadButton);
homeButton = (ImageButton) findViewById(R.id.home);
searchbar = (EditText) findViewById(R.id.search);
floatingButton = (FloatingActionButton) findViewById(R.id.floatingActionButton3);
topbar = (LinearLayout) findViewById(R.id.topbar);
webLoader = (GeckoView) findViewById(R.id.webLoader);
}
public void initializeWebViews()
{
webRequestHandler.getInstance().initialization(webView1,webView2,progressBar,searchbar,requestFailure,this,splashScreen);
webRequestHandler.getInstance().initialization(webView1,webView2,progressBar,searchbar,requestFailure,this,splashScreen,this);
webView1.bringToFront();
Log.i("PROBLEM25","");
progressBar.animate().setDuration(150).alpha(0f);
//floatingButton.setAlpha(0);
new Thread()
{
public void run()
{
try
{
session1 = new GeckoSession();
runtime1 = GeckoRuntime.create(application_controller.this);
runtime1 = GeckoRuntime.getDefault(application_controller.this);
session1.open(runtime1);
if(session1.isOpen())
{
webLoader.releaseSession();
}
webLoader.setSession(session1);
session1.setProgressDelegate(new progressDelegate());
webLoader.setVisibility(View.INVISIBLE);
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
}
}.start();
}
/*Initialization*/
@ -179,16 +191,19 @@ public class application_controller extends AppCompatActivity
webView1.setWebViewClient(loadWebViewClient());
webView1.getSettings().setJavaScriptEnabled(true);
webView1.getSettings().setUseWideViewPort(true);
webView1.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView2.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView2.setBackgroundColor(Color.WHITE);
webView2.setWebViewClient(loadWebViewClient());
webView2.getSettings().setJavaScriptEnabled(true);
webView2.getSettings().setUseWideViewPort(true);
webView2.getSettings().setCacheMode(WebSettings.LOAD_CACHE_ELSE_NETWORK);
webView2.animate().setDuration(0).alpha(0f);
progressBar.setVisibility(View.INVISIBLE);
requestFailure.animate().setDuration(0).alpha(0.0f);
Log.i("PROBLEM26","");
progressBar.animate().setDuration(150).alpha(0f);
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
@ -199,12 +214,57 @@ public class application_controller extends AppCompatActivity
private void initializeViewClients()
{
searchbar.setOnEditorActionListener((v, actionId, event) -> {
Log.i("1actionId : ",actionId+"");
if (actionId == 5)
{
return onEditorClicked(v, actionId, event);
}
else
{
return false;
}
});
floatingButton.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v)
{
message_manager.getInstance().reportURL(application_controller.this,searchbar.getText().toString());
}
});
}
/*-------------------------------------------------------WEBVIEW LISTENERS-------------------------------------------------------*/
public void loadGeckoURL(String url)
{
boolean init_status=orbot_manager.getInstance().reinitOrbot(application_controller.this);
if(init_status)
{
searchbar.setText(url.replaceAll("boogle.store","genesis.onion"));
checkSSLTextColor();
KeyboardUtils.hideKeyboard(application_controller.this);
progressBar.setAlpha(0);
progressBar.setVisibility(View.VISIBLE);
Log.i("PROBLEM11","");
progressBar.animate().setDuration(150).setDuration(300).alpha(1f);
isOnnionUrlHalted = false;
session1.stop();
session1.close();
webLoader.releaseSession();
session1 = new GeckoSession();
session1.open(runtime1);
session1.setProgressDelegate(new progressDelegate());
webLoader.setSession(session1);
session1.loadUri(url);
}
}
private WebViewClient loadWebViewClient()
{
WebViewClient client = new WebViewClient()
@ -220,33 +280,26 @@ public class application_controller extends AppCompatActivity
if(!url.toString().contains("boogle"))
{
boolean init_status=orbot_manager.getInstance().reinitOrbot(application_controller.this);
if(init_status)
try
{
searchbar.setText(url.replaceAll("boogle.store","genesis.onion"));
KeyboardUtils.hideKeyboard(application_controller.this);
admanager.getInstance().showAd();
progressBar.setAlpha(0);
progressBar.setVisibility(View.VISIBLE);
progressBar.animate().setDuration(150).setDuration(300).alpha(1f);
isOnnionUrlHalted = false;
session1.stop();
session1.close();
webLoader.releaseSession();
session1 = new GeckoSession();
session1.open(runtime1);
session1.setProgressDelegate(new progressDelegate());
webLoader.setSession(session1);
session1.loadUri(url);
if(orbot_manager.getInstance().reinitOrbot(application_controller.this))
{
loadGeckoURL(url);
}
}
catch (Exception ex)
{
ex.printStackTrace();
}
return true;
}
else
{
session1.stop();
session1.close();
searchbar.setText(url.replaceAll("boogle.store","genesis.onion"));
checkSSLTextColor();
KeyboardUtils.hideKeyboard(application_controller.this);
if(traceUrlList.size()==0 || !status.currentURL.equals(traceUrlList.peek()))
{
@ -266,34 +319,68 @@ public class application_controller extends AppCompatActivity
{
super.onPageFinished(view, url);
handler = new Handler();
int delay = 800;
if(startPage>2)
{
delay = 0;
}
handler.postDelayed(new Runnable() {
@Override
public void run() {
webView1.stopLoading();
webView2.stopLoading();
if(webView1.getAlpha()==0)
{
webView1.animate().setDuration(250).alpha(1f);
webView2.animate().setDuration(250).alpha(1f).withEndAction((() -> {
}
else
{
webView2.animate().setDuration(250).alpha(1f);
}
//.withEndAction((() -> {
//}));;
datamodel.getInstance().setIsLoadingURL(false);
requestFailure.animate().alpha(0f).setDuration(300).withEndAction((() -> requestFailure.setVisibility(View.INVISIBLE)));;
Log.i("PROBLEM12","");
}));;
if(searchbar.getText().toString().contains("genesis.onion"))
{
progressBar.animate().setDuration(150).alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
}
if(!status.hasApplicationLoaded)
{
try
{
sleep(2000);
}
catch (InterruptedException e)
{
e.printStackTrace();
}
status.hasApplicationLoaded = true;
splashScreen.animate().alpha(0.0f).setDuration(300).setListener(null).withEndAction((() -> splashScreen.setVisibility(View.GONE)));
handler = new Handler();
splashScreen.animate().alpha(0.0f).setStartDelay(500).setDuration(300).setListener(null).withEndAction((() -> splashScreen.setVisibility(View.GONE)));
versionChecker();
}
InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(searchbar.getWindowToken(), 0);
}
}, 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
@ -303,11 +390,13 @@ public class application_controller extends AppCompatActivity
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i("PROBLEM13","");
progressBar.animate().setDuration(150).alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
datamodel.getInstance().setIsLoadingURL(false);
splashScreen.animate().alpha(0);
requestFailure.setVisibility(View.VISIBLE);
requestFailure.animate().alpha(1.0f);
status.isTorInitialized = false;
}
}, 3000);
@ -328,6 +417,7 @@ public class application_controller extends AppCompatActivity
requestFailure.setVisibility(View.VISIBLE);
requestFailure.animate().alpha(1.0f);
status.isTorInitialized = false;
loadErrorPage();
}
@ -340,7 +430,9 @@ class progressDelegate implements GeckoSession.ProgressDelegate
@Override
public void onPageStart(GeckoSession session, String url)
{
if(!orbot_manager.getInstance().reinitOrbot(application_controller.this))
isGeckoURLLoadded = false;
isBlackPage = url.equals("about:blank");
if(!isBlackPage && !orbot_manager.getInstance().reinitOrbot(application_controller.this))
{
session1.stop();
session1.close();
@ -371,10 +463,12 @@ class progressDelegate implements GeckoSession.ProgressDelegate
}
datamodel.getInstance().setIsLoadingURL(true);
isBlackPage = url.equals("about:blank");
if(!isBlackPage)
{
Log.i("HUTEES : 1","11");
searchbar.setText(url);
checkSSLTextColor();
//initGeckoFailureHandler();
}
if(!isBlackPage && progressBar.getVisibility() == View.INVISIBLE)
{
@ -386,43 +480,67 @@ class progressDelegate implements GeckoSession.ProgressDelegate
@Override
public void onPageStop(GeckoSession session, boolean success)
{
Log.i("STATUS-- : ",success+"");
if(!success)
{
handler.postDelayed(geckoRunnable, 15000);
initGeckoFailureHandler(isGeckoURLLoadded);
isGeckoURLLoadded = false;
}
if(success)
{
Log.i("PROBLEM14","");
isGeckoURLLoadded = false;
}
}
@Override
public void onProgressChange(GeckoSession session, int progress)
{
if(geckoHandler!=null)
{
geckoHandler.removeCallbacks(geckoRunnableError);
geckoHandler = null;
Log.i("HUTEES : 4","11");
}
if(progress>=100)
{
isGeckoURLLoadded = true;
floatingButton.animate().alpha(1);
if(status.currentURL.contains("://boogle.store"))
{
admanager.getInstance().showAd();
}
if(!isLoadedUrlSet &&!isOnnionUrlHalted)
{
webLoader.bringToFront();
webLoader.animate().setDuration(100).alpha(1);
webLoader.setVisibility(View.VISIBLE);
requestFailure.animate().alpha(0f).setDuration(300).withEndAction((() -> requestFailure.setVisibility(View.INVISIBLE)));;
String url = searchbar.getText().toString();
boolean isBlackPage = url.equals("about:blank");
if(!isBlackPage && !wasBackPressed)
{
Log.i("SHIT2 : ",status.currentURL);
traceUrlList.add(status.currentURL);
searchbar.setText(url);
checkSSLTextColor();
status.currentURL = url;
}
wasBackPressed=false;
}
progressBar.animate().setDuration(150).alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
isLoadedUrlSet = true;
}
else if(progress<100)
{
//Log.i("HUTEES : 3","11");
//initGeckoFailureHandler();
}
if(progress>=100)
{
progressBar.animate().setDuration(150).alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
datamodel.getInstance().setIsLoadingURL(false);
}
handler.removeCallbacks(geckoRunnable);
//handler.removeCallbacks(geckoRunnable);
}
@Override
@ -430,6 +548,42 @@ class progressDelegate implements GeckoSession.ProgressDelegate
{
}
}
public void initGeckoFailureHandler(boolean hasURLLoaded)
{
int delay = 15000;
if(!helperMethod.isNetworkAvailable(application_controller.this) || hasURLLoaded)
{
delay=0;
}
if(geckoHandler == null)
{
geckoHandler = new Handler();
geckoRunnableError = new Runnable() {
@Override
public void run() {
floatingButton.animate().alpha(0);
Log.i("PROBLEM15","");
datamodel.getInstance().setIsLoadingURL(false);
requestFailure.setAlpha(0.0f);
requestFailure.setVisibility(View.VISIBLE);
requestFailure.animate().alpha(1.0f);
Log.i("PROBLEM16","");
progressBar.animate().setDuration(150).alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
geckoHandler = null;
if(!helperMethod.isNetworkAvailable(application_controller.this))
{
orbot_manager.getInstance().restartOrbot(application_controller.this);
}
wasBackPressed=false;
}
};
geckoHandler.postDelayed(geckoRunnableError, delay);
}
}
/*-------------------------------------------------------Helper Method-------------------------------------------------------*/
public void loadErrorPage()
@ -441,19 +595,33 @@ class progressDelegate implements GeckoSession.ProgressDelegate
public void loadURLAnimate(String url)
{
floatingButton.animate().alpha(0);
webRequestHandler.getInstance().loadURL(url);
}
/*-------------------------------------------------------EVENT LISTENERS-------------------------------------------------------*/
public void initializePopupView(String url)
{
searchbar.setText(url.replaceAll("boogle.store","genesis.onion"));
checkSSLTextColor();
traceUrlList.add(status.currentURL);
status.currentURL=url;
progressBar.setAlpha(0f);
progressBar.setVisibility(View.VISIBLE);
Log.i("PROBLEM17","");
progressBar.animate().setDuration(150).alpha(1f);
}
public void onHomeButtonPressed(View view)
{
webRequestHandler.getInstance().isUrlStoped=true;
searchbar.setText("https://genesis.onion");
checkSSLTextColor();
status.currentURL="https://boogle.store";
progressBar.setAlpha(0f);
progressBar.setVisibility(View.VISIBLE);
Log.i("PROBLEM18","");
progressBar.animate().setDuration(150).alpha(1f);
loadURLAnimate("https://boogle.store");
webView1.stopLoading();
@ -468,39 +636,99 @@ class progressDelegate implements GeckoSession.ProgressDelegate
public void onReloadButtonPressed(View view)
{
webRequestHandler.getInstance().isReloadedUrl = true;
Log.i("PROBLEM19","");
progressBar.animate().setDuration(150).alpha(0f);
progressBar.setVisibility(View.VISIBLE);
if(searchbar.getText().toString().contains("://genesis.onion"))
{
Log.i("PROBLEM20","");
progressBar.animate().setDuration(150).alpha(1f);
loadURLAnimate(status.currentURL);
}
@Override
public void onBackPressed()
else
{
if(status.isTorInitialized)
{
Log.i("PROBLEM21","");
progressBar.animate().setDuration(150).alpha(1f);
wasBackPressed = true;
loadGeckoURL(searchbar.getText().toString());
}
else
{
orbot_manager.getInstance().reinitOrbot(application_controller.this);
}
}
}
public void checkSSLTextColor()
{
if(searchbar==null)
{
return;
}
if(searchbar.getText().toString().contains("https://"))
{
SpannableString ss = new SpannableString(searchbar.getText());
ss.setSpan(new ForegroundColorSpan(Color.argb(255,0,123,43)),0,5, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new ForegroundColorSpan(Color.GRAY),5,8, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
searchbar.setText(ss);
}
else if(searchbar.getText().toString().contains("http://"))
{
SpannableString ss = new SpannableString(searchbar.getText());
ss.setSpan(new ForegroundColorSpan(Color.argb(255,0,128,43)),0,4, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
ss.setSpan(new ForegroundColorSpan(Color.GRAY),4,7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
searchbar.setText(ss);
}
else
{
SpannableString ss = new SpannableString(searchbar.getText());
ss.setSpan(new ForegroundColorSpan(Color.BLACK),0,searchbar.getText().length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
searchbar.setText(ss);
}
}
public void backPressed()
{
session1.stop();
if(traceUrlList.size()>0)
{
searchbar.setText(traceUrlList.peek().toString().replaceAll("boogle.store","genesis.onion"));
if(traceUrlList.peek().toString().contains("boogle.store"))
{
session1.stop();
session1.close();
if(!status.currentURL.contains("boogle.store"))
{
Log.i("FITS4 : " , "");
searchbar.setText(traceUrlList.peek().toString().replaceAll("boogle.store","genesis.onion"));
isOnnionUrlHalted=true;
session1.stop();
session1.close();
webLoader.releaseSession();
webLoader.releaseSession();
status.currentURL = traceUrlList.pop().toString();
progressBar.animate().setDuration(150).alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
Log.i("PROBLEM22","");
webLoader.animate().alpha(0f).withEndAction((() -> webLoader.setVisibility(View.INVISIBLE)));;
isOnnionUrlHalted = true;
wasBackPressed = false;
//isOnnionUrlHalted = true;
KeyboardUtils.hideKeyboard(application_controller.this);
if(requestFailure.getAlpha()==1)
{
requestFailure.animate().alpha(0f).withEndAction((() -> requestFailure.setVisibility(View.INVISIBLE)));;
}
else
{
progressBar.animate().alpha(0f).withEndAction((() -> progressBar.setVisibility(View.INVISIBLE)));;
}
floatingButton.animate().alpha(0);
}
else
{
//if(progressBar.getAlpha()==0)
//{
//progressBar.animate().setDuration(150).setDuration(300).alpha(1f);
Log.i("1LOG3","LOG1");
searchbar.setText(traceUrlList.peek().toString().replaceAll("boogle.store","genesis.onion"));
session1.close();
Log.i("FITS3 : " , "");
loadURLAnimate(traceUrlList.pop().toString());
if(traceUrlList.size()<=0)
{
@ -510,49 +738,71 @@ class progressDelegate implements GeckoSession.ProgressDelegate
{
status.currentURL = traceUrlList.peek().toString();
}
floatingButton.animate().alpha(0);
//}
}
}
else
{
if(traceUrlList.size()<=0 || traceUrlList.peek().toString().contains("boogle.store"))
{
Log.i("FITS2 : " , "");
session1.stop();
session1.close();
searchbar.setText(traceUrlList.peek().toString().replaceAll("boogle.store","genesis.onion"));
status.currentURL = "https://boogle.store";
webLoader.animate().setDuration(250).alpha(0);
traceUrlList.pop();
wasBackPressed = false;
session1.close();
floatingButton.animate().alpha(0);
}
else
{
webLoader.animate().setDuration(250).alpha(1);
if(orbot_manager.getInstance().reinitOrbot(this))
{
searchbar.setText(traceUrlList.peek().toString().replaceAll("boogle.store","genesis.onion"));
status.currentURL = traceUrlList.peek().toString();
String prevURL = traceUrlList.pop().toString();
Log.i("FITS : " , prevURL);
session1.goBack();
boolean init_status=orbot_manager.getInstance().reinitOrbot(application_controller.this);
//isOnnionUrlHalted = true;
if(init_status)
{
searchbar.setText(status.currentURL.replaceAll("boogle.store","genesis.onion"));
KeyboardUtils.hideKeyboard(application_controller.this);
progressBar.animate().alpha(1);
progressBar.setVisibility(View.VISIBLE);
wasBackPressed = true;
requestFailure.animate().alpha(0);
session1.goBack();
}
else
{
session1.stop();
session1.close();
orbot_manager.getInstance().reinitOrbot(application_controller.this);
}
}
}
}
if(traceUrlList.size()==0)
{
searchbar.setText("https://genesis.onion/");
}
checkSSLTextColor();
}
}
public void loadGeckoUrl(String url)
@Override
public void onBackPressed()
{
session1.close();
session1 = new GeckoSession();
session1.open(runtime1);
session1.setProgressDelegate(new application_controller.progressDelegate());
webLoader.releaseSession();
webLoader.setSession(session1);
session1.loadUri(url);
backPressed();
}
public boolean onEditorClicked(TextView v, int actionId, KeyEvent event)
{
KeyboardUtils.hideKeyboard(application_controller.this);
Log.i("FUCKOFF : ",actionId+"");
try
{
session1.stop();
@ -570,21 +820,34 @@ class progressDelegate implements GeckoSession.ProgressDelegate
boolean isUrlValid = Patterns.WEB_URL.matcher(url).matches();
url = url.replace("genesis.onion","boogle.store");
URL host = new URL(url);
if(isUrlValid && host.getHost().replace("www.","").contains("."))
{
if(host.getHost().contains(constants.backendUrlHost)||host.getHost().contains(constants.frontEndUrlHost))
{
loadURLAnimate(v.getText().toString());
floatingButton.animate().alpha(0);
loadURLAnimate(url);
return true;
}
else if(host.getHost().contains(constants.allowedHost))
{
if(!orbot_manager.getInstance().reinitOrbot(this))
if(!url.contains("://boogle.store"))
{
orbot_manager.getInstance().reinitOrbot(this);
}
if(status.isTorInitialized)
{
session1.stop();
session1.loadUri(url);
}
else
{
orbot_manager.getInstance().reinitOrbot(application_controller.this);
message_manager.getInstance().startingOrbotInfo(this);
}
return true;
}
else
@ -597,7 +860,6 @@ class progressDelegate implements GeckoSession.ProgressDelegate
{
loadURLAnimate("https://boogle.store/search?q="+v.getText().toString().replaceAll(" ","+")+"&p_num=1&s_type=all");
}
orbot_manager.getInstance().reinitOrbot(this);
}
catch (IOException e)

View File

@ -1,8 +1,15 @@
package com.darkweb.genesissearchengine;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.preference.PreferenceManager;
import java.util.List;
import java.util.UUID;
public class helperMethod
{
@ -17,4 +24,37 @@ public class helperMethod
return false;
}
public static boolean readPrefs(String valueKey,Context applicationContext) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(applicationContext);
return prefs.getBoolean(valueKey,false);
}
public static void savePrefs(String valueKey, boolean value,Context applicationContext) {
SharedPreferences prefs = PreferenceManager
.getDefaultSharedPreferences(applicationContext);
SharedPreferences.Editor edit = prefs.edit();
edit.putBoolean(valueKey, value);
edit.commit();
}
public static void setPlaystoreStatus(Context context) {
String GooglePlayStorePackageNameOld = "com.google.market";
String GooglePlayStorePackageNameNew = "com.android.vending";
PackageManager packageManager = context.getPackageManager();
List<PackageInfo> packages = packageManager.getInstalledPackages(PackageManager.GET_UNINSTALLED_PACKAGES);
for (PackageInfo packageInfo : packages)
{
if (packageInfo.packageName.equals(GooglePlayStorePackageNameOld) ||
packageInfo.packageName.equals(GooglePlayStorePackageNameNew)) {
status.isPlayStoreInstalled = true;
break;
}
}
}
}

View File

@ -1,12 +1,9 @@
package com.darkweb.genesissearchengine;
import android.app.Application;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.view.View;
import com.example.myapplication.R;
import com.yarolegovich.lovelydialog.LovelyInfoDialog;
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
import android.graphics.Color;
import com.crowdfire.cfalertdialog.CFAlertDialog;
public class message_manager {
private static final message_manager ourInstance = new message_manager();
@ -18,38 +15,166 @@ public class message_manager {
private message_manager() {
}
public void welcomeMessage(Context application_context, application_controller controller)
{
if(!helperMethod.readPrefs("FirstTimeLoaded",application_context))
{
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
.setDialogStyle(CFAlertDialog.CFAlertStyle.ALERT)
.setTitle("DeepWeb Gateway | Welcome")
.setBackgroundColor(Color.argb(230,33,45,69))
.setTextColor(Color.argb(255,0,38,77))
.setMessage("\nWelcome to DeepWeb | Darkweb Gateway. This application provide you a platform to Search and Open DarkWeb urls.\n\nYou cannot open any url related to normal internet as its not the intended purpose. You can check out following urls to get yourself started\n\nHere are few Suggestions\n")
.addButton("DeepWeb Online Market", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED , (dialog, which) -> {
dialog.dismiss();
controller.initializePopupView("https://boogle.store/search?q=black+market&p_num=1&s_type=all");
controller.loadURLAnimate("https://boogle.store/search?q=black+market&p_num=1&s_type=all");
})
.addButton("Leaked Documents and Books", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED , (dialog, which) -> {
dialog.dismiss();
controller.initializePopupView("https://boogle.store/search?q=leaked+document&p_num=1&s_type=all&p_num=1&s_type=all");
controller.loadURLAnimate("https://boogle.store/search?q=leaked+document&p_num=1&s_type=all&p_num=1&s_type=all");
})
.addButton("Darkweb News and Articles", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED , (dialog, which) -> {
dialog.dismiss();
controller.initializePopupView("https://boogle.store/search?q=latest%20news&p_num=1&s_type=news");
controller.loadURLAnimate("https://boogle.store/search?q=latest%20news&p_num=1&s_type=news");
})
.addButton("Secret Softwares and Hacking Tools", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED , (dialog, which) -> {
dialog.dismiss();
controller.initializePopupView("https://boogle.store/search?q=softwares+tools&p_num=1&s_type=all&p_num=1&s_type=all");
controller.loadURLAnimate("https://boogle.store/search?q=softwares+tools&p_num=1&s_type=all&p_num=1&s_type=all");
})
.addButton("Don't Show Again", -1, -1, CFAlertDialog.CFAlertActionStyle.NEGATIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED , (dialog, which) -> {
dialog.dismiss();
helperMethod.savePrefs("FirstTimeLoaded",true,application_context);
});
builder.show();
}
// Create Alert using Builder
/*
new LovelyStandardDialog(application_context)
.setTopColorRes(R.color.header)
.setTopTitleColor(Color.argb(255,255,255,255))
.setTopTitle("Welcome")
.setMessage("This software can only be used to access hidden web such as \"Onion\" and \"I2P\" \n\nFor accessing Surface Web use Google or Bing")
.setPositiveButton(android.R.string.ok, new View.OnClickListener() {
@Override/
public void onClick(View v)
{
}
})
.setNegativeButton("Don't Show Again", null)
.show();*/
}
public void baseURLError(Context application_context)
{
new LovelyInfoDialog(application_context)
.setTopColorRes(R.color.header)
.setIcon(R.drawable.logo)
.setTitle("Surface Web URL Not Allowed")
.setMessage("This software can only be used to search hidden web such as \"Onion\" and \"I2P\" for searching in Surface Web use \"Google\" or \"Bing\"")
.show();
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
.setTitle("Darkweb URL | Invalid URL")
.setBackgroundColor(Color.argb(230,33,45,69))
.setTextColor(Color.argb(255,255,255,255))
.setMessage("This software can only be used to access hidden web such as \"Onion\" and \"I2P\" \n\nFor accessing Surface Web use Google or Bing\n")
.addButton("Dismiss", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.END, (dialog, which) -> {
dialog.dismiss();
});
builder.show();
}
public void illegalWarningDialog(Context application_context,application_controller controller)
{
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
.setTitle("Illegal Activity Detected")
.setBackgroundColor(Color.argb(255,33,45,69))
.setTextColor(Color.argb(255,255,255,255))
.setMessage("This software can only be used to access hidden web such as \"Onion\" and \"I2P\" \n\nFor accessing Surface Web use Google or Bing\n")
.addButton("Go Back", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.END, (dialog, which) -> {
dialog.dismiss();
})
.addButton("Dismiss", -1, -1, CFAlertDialog.CFAlertActionStyle.NEGATIVE, CFAlertDialog.CFAlertActionAlignment.END, (dialog, which) -> {
dialog.dismiss();
controller.backPressed();
});
builder.show();
}
public void URLNotFoundError(Context application_context)
{
new LovelyInfoDialog(application_context)
.setTopColorRes(R.color.header)
.setIcon(R.drawable.logo)
.setTitle("URL Temporarily Unavailable")
.setMessage("Site is Down or temporarily Unavailabe. Try again after a while")
.show();
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
.setTitle("Darkweb URL | Invalid")
.setBackgroundColor(Color.argb(230,33,45,69))
.setTextColor(Color.argb(255,255,255,255))
.setMessage("This software can only be used to access hidden web such as \"Onion\" and \"I2P\" \n\nFor accessing Surface Web use Google or Bing\n")
.addButton("Dismiss", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.END, (dialog, which) -> {
dialog.dismiss();
});
builder.show();
}
public void reportedSuccessfully(Context application_context)
{
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
.setTitle("URL Reported Successfully")
.setBackgroundColor(Color.argb(230,33,45,69))
.setTextColor(Color.argb(255,255,255,255))
.setMessage("URL has been succuessfully repotorted. It will take about a week to completely remove this website from our server\n")
.addButton("Dismiss", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED, (dialog, which) -> {
dialog.dismiss();
});
builder.show();
}
public void reportURL(Context application_context,String URL)
{
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
.setTitle("Report URL | "+status.currentURL.substring(0,status.currentURL.indexOf(".onion")))
.setBackgroundColor(Color.argb(230,33,45,69))
.setTextColor(Color.argb(255,255,255,255))
.setMessage("If you think url is illegal or disturbing report us so that we can update our database\n")
.addButton("Report", -1, -1, CFAlertDialog.CFAlertActionStyle.NEGATIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED, (dialog, which) -> {
String reportURL = "https://boogle.store/reportus?r_key="+URL;
webRequestHandler.getInstance().reportURL(reportURL);
dialog.dismiss();
reportedSuccessfully(application_context);
})
.addButton("Dismiss", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.JUSTIFIED, (dialog, which) -> {
dialog.dismiss();
});
builder.show();
}
public void startingOrbotInfo(Context application_context)
{
new LovelyInfoDialog(application_context)
.setTopColorRes(R.color.header)
.setIcon(R.drawable.logo)
.setTitle("Orbot is Starting")
.setMessage("Looks Like Orbot is Installed but not Running. Please wait while we Start Orbot for you")
.show();
CFAlertDialog.Builder builder = new CFAlertDialog.Builder(application_context)
.setDialogStyle(CFAlertDialog.CFAlertStyle.BOTTOM_SHEET)
.setTitle("Initializing Darkweb")
.setBackgroundColor(Color.argb(230,33,45,69))
.setTextColor(Color.argb(255,255,255,255))
.setMessage("Please wait! While we connect you to hidden web. This might take few seconds\n")
.addButton("Dismiss", -1, -1, CFAlertDialog.CFAlertActionStyle.POSITIVE, CFAlertDialog.CFAlertActionAlignment.END, (dialog, which) -> {
dialog.dismiss();
});
builder.show();
}
public void versionWarning(Context application_context)
{
{/*
new LovelyStandardDialog(application_context)
.setTopColorRes(R.color.header)
.setIcon(R.drawable.logo)
@ -67,7 +192,7 @@ public class message_manager {
})
.setNegativeButton(android.R.string.no, null)
.show();
*/
}
}

View File

@ -1,18 +1,18 @@
package com.darkweb.genesissearchengine;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.text.TextUtils;
import android.view.View;
import com.example.myapplication.R;
import com.yarolegovich.lovelydialog.LovelyStandardDialog;
import info.guardianproject.netcipher.proxy.OrbotHelper;
import android.util.Log;
import com.msopentech.thali.android.toronionproxy.AndroidOnionProxyManager;
import com.msopentech.thali.toronionproxy.OnionProxyManager;
import org.mozilla.gecko.PrefsHelper;
import java.io.IOException;
public class orbot_manager {
private static final orbot_manager ourInstance = new orbot_manager();
boolean isOrbotRunning = false;
boolean isLoading = false;
OnionProxyManager onionProxyManager = null;
public static orbot_manager getInstance() {
return ourInstance;
@ -21,62 +21,118 @@ public class orbot_manager {
private orbot_manager() {
}
public BroadcastReceiver orbotStatusReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (TextUtils.equals(intent.getAction(),
OrbotHelper.ACTION_STATUS)) {
String status = intent.getStringExtra(OrbotHelper.EXTRA_STATUS);
if (status.equals(OrbotHelper.STATUS_ON))
{
isOrbotRunning = true;
}
else if (status.equals(OrbotHelper.STATUS_OFF))
{
isOrbotRunning = false;
}
else if (status.equals(OrbotHelper.STATUS_STARTING))
{
}
else if (status.equals(OrbotHelper.STATUS_STOPPING))
{
}
}
}
};
public boolean reinitOrbot(Context application_context)
{
if(!OrbotHelper.isOrbotInstalled(application_context))
if(!status.isTorInitialized)
{
OrbotHelper.getOrbotInstallIntent(application_context);
new LovelyStandardDialog(application_context)
.setTopColorRes(R.color.header)
.setIcon(R.drawable.logo)
.setTitle("Orbot Proxy Not Installed")
.setMessage("Hidden Web can only be access by Special Proxies. Please Install Orbot Proxy from Playstore")
.setPositiveButton(android.R.string.ok, new View.OnClickListener() {
@Override
public void onClick(View v) {
final String appPackageName = "org.torproject.android"; // getPackageName() from Context or Activity object
try {
application_context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("market://details?id=" + appPackageName)));
} catch (android.content.ActivityNotFoundException anfe) {
application_context.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=" + appPackageName)));
}
}
})
.setNegativeButton(android.R.string.no, null)
.show();
return false;
}
if(!isOrbotRunning)
{
OrbotHelper.get(application_context).init();
message_manager.getInstance().startingOrbotInfo(application_context);
initializeTorClient(application_context);
return false;
}
else
{
return true;
}
}
public void restartOrbot(Context applicationContext)
{
isOrbotRunning = false;
status.isTorInitialized = false;
if(onionProxyManager!=null)
{
new Thread()
{
public void run()
{
try
{
onionProxyManager.stop();
//initializeTorClient(applicationContext);
}
catch (IOException e)
{
e.printStackTrace();
}
}
}.start();
}
}
public void initializeTorClient(Context applicationContext)
{
if(isLoading)
{
return;
}
new Thread()
{
public void run()
{
try
{
isLoading = true;
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()) {
Log.i("My App", "Tor initialized on port " + onionProxyManager.getIPv4LocalHostSocksPort());
}
}
}
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();
}
public void initializeProxy()
{
PrefsHelper.setPref("network.proxy.type",1); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks","127.0.0.1"); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks_port",status.port); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks_version",5); //manual proxy settings
PrefsHelper.setPref("network.proxy.socks_remote_dns",true); //manual proxy settings
PrefsHelper.setPref("browser.cache.disk.enable",false);
PrefsHelper.setPref("browser.cache.memory.enable",false);
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.value",1);
}
}

View File

@ -4,4 +4,7 @@ public class status
{
public static boolean hasApplicationLoaded = false;
public static String currentURL = "http://boogle.store/";
public static boolean isPlayStoreInstalled = false;
public static int port = 9150;
public static boolean isTorInitialized = false;
}

View File

@ -2,6 +2,7 @@ package com.darkweb.genesissearchengine;
import android.annotation.SuppressLint;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Message;
import android.support.constraint.ConstraintLayout;
import android.util.Log;
@ -10,6 +11,7 @@ import android.webkit.WebView;
import android.widget.EditText;
import android.widget.ProgressBar;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
@ -17,17 +19,22 @@ import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.security.KeyManagementException;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import android.os.Handler;
import cz.msebera.android.httpclient.HttpResponse;
import cz.msebera.android.httpclient.client.HttpClient;
import cz.msebera.android.httpclient.client.methods.HttpGet;
import cz.msebera.android.httpclient.conn.ssl.NoopHostnameVerifier;
import cz.msebera.android.httpclient.conn.ssl.SSLConnectionSocketFactory;
import cz.msebera.android.httpclient.conn.ssl.TrustSelfSignedStrategy;
import cz.msebera.android.httpclient.impl.client.DefaultHttpClient;
import info.guardianproject.netcipher.NetCipher;
import info.guardianproject.netcipher.client.StrongBuilder;
import info.guardianproject.netcipher.proxy.OrbotHelper;
import cz.msebera.android.httpclient.impl.client.HttpClients;
import cz.msebera.android.httpclient.ssl.SSLContexts;
public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
public class webRequestHandler
{
private static final webRequestHandler ourInstance = new webRequestHandler();
private WebView[] view = new WebView[2];
@ -35,6 +42,7 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
private EditText searchbar;
private ConstraintLayout requestFailure;
public boolean reloadError=false;
public boolean isReloadedUrl = false;
private int viewIndex = 1;
private int currentViewIndex = 0;
@ -49,6 +57,7 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
private final static int INTERNET_ERROR =2;
private final static int MESSAGE_UPDATE_TEXT_CHILD_THREAD =1;
private final static int RELOAD_ERROR =3;
private application_controller controller;
public static webRequestHandler getInstance() {
return ourInstance;
@ -58,33 +67,34 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
{
}
public void initialization(WebView view1, WebView view2, ProgressBar progressBar, EditText searchbar, ConstraintLayout requestFailure, Context applicationContext,ConstraintLayout splash)
public void initialization(WebView view1, WebView view2, ProgressBar progressBar, EditText searchbar, ConstraintLayout requestFailure, Context applicationContext,ConstraintLayout splash,application_controller controller)
{
this.controller = controller;
this.splash = splash;
this.view[0] = view1;
this.view[1] = view2;
this.progressBar = progressBar;
this.searchbar = searchbar;
this.requestFailure = requestFailure;
OrbotHelper.get(applicationContext).init();
createUpdateUiHandler();
}
public void loadURL(final String url)
{
Log.i("STEST : 1","1 : " + currenturl.equals(url) + " : " + isReloadedUrl + " : " + !reloadError);
try
{
Log.i("WOW MAN 0","WOW MAN 2 : " + currenturl + "----" + url);
if(!currenturl.equals(url) || isReloadedUrl)
if(!currenturl.equals(url) || isReloadedUrl || !reloadError)
{
Log.i("WOW MAN 1","WOW MAN 2");
Log.i("STEST : 2","1");
isReloadedUrl = false;
currenturl = url;
preInitialization(url);
currenturl = url;
}
else
{
Log.i("STEST : 3","1");
Message message = new Message();
message.what = RELOAD_ERROR;
updateUIHandler.sendMessage(message);
@ -93,28 +103,34 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
}
catch (Exception e)
{
Log.i("STEST : 4","1 : " + e.getMessage());
e.printStackTrace();
}
clientThread = new Thread(() -> {
try
{
Log.i("STEST : 5","1");
currenturl = url;
if(url.contains("boogle.store"))
{
Log.i("STEST : 6","1");
nonProxyConnection(url);
}
else
{
Log.i("STEST : 7","1");
proxyConnection(url);
}
}
catch (Exception e)
{
if(!e.getMessage().contains("failed to respond"))
Log.i("STEST : 8","1");
if(!e.getMessage().contains("Socket closed") && !e.getMessage().contains("failed to respond") && e.getMessage().contains("Unable to resolve host \"boogle.store\""))
{
Log.i("SUP3",e.getMessage()+"");
Log.i("STEST99 : 9","1 : "+e.getMessage());
onError();
reloadError=true;
e.printStackTrace();
}
}
@ -124,6 +140,12 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
public void preInitialization(String url)
{
Log.i("WOW MAN 0","WOW MAN 2 : " + currenturl + "----" + url);
progressBar.setAlpha(0);
progressBar.setVisibility(View.VISIBLE);
progressBar.animate().setDuration(150).alpha(1f);
Log.i("WOW MAN 1","WOW MAN 2 : " + currenturl + "----" + url);
if(!datamodel.getInstance().getIsLoadingURL())
{
datamodel.getInstance().setIsLoadingURL(true);
@ -137,16 +159,25 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
clientThread = null;
searchbar.setText(url.replace("http://boogle.store","http://genesis.onion"));
}
progressBar.animate().setDuration(150).alpha(0f);
progressBar.setVisibility(View.VISIBLE);
progressBar.animate().setDuration(150).alpha(1f);
}
public void nonProxyConnection(String url) throws IOException {
url = url.replace("http://boogle","https://boogle");
HttpClient client=new DefaultHttpClient();;
try {
SSLConnectionSocketFactory scsf = new SSLConnectionSocketFactory(
SSLContexts.custom().loadTrustMaterial(null, new TrustSelfSignedStrategy()).build(),
NoopHostnameVerifier.INSTANCE);
client = HttpClients.custom().setSSLSocketFactory(scsf).build();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (KeyManagementException e) {
e.printStackTrace();
} catch (KeyStoreException e) {
e.printStackTrace();
}
HttpClient client = new DefaultHttpClient();
request = new HttpGet(url);
baseURL = url;
HttpResponse response = client.execute(request);
@ -168,33 +199,40 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
}
public void proxyConnection(String url) throws Exception {
NetCipher.useTor();
HttpURLConnection connection = NetCipher.getHttpURLConnection(url);
connection.setRequestProperty("User-Agent","Mozilla/5.0 ( compatible ) ");
connection.setRequestProperty("Accept","*/*");
connection.connect();
BufferedReader br = new BufferedReader(new InputStreamReader((connection.getInputStream())));
StringBuilder sb = new StringBuilder();
String output;
while ((output = br.readLine()) != null) {
sb.append(output);
public void reportURL(String url)
{
try
{
HttpGet reportrequest = new HttpGet(url);
HttpClient client=new DefaultHttpClient();;
HttpResponse response = client.execute(reportrequest);
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
html = sb.toString();
Message message = new Message();
message.what = MESSAGE_UPDATE_TEXT_CHILD_THREAD;
updateUIHandler.sendMessage(message);
public void proxyConnection(String url) throws Exception {
}
public void onError()
{
Log.i("WOW222","WOW222 : " + isReloadedUrl);
reloadError = true;
if(!isReloadedUrl)
{
Message message = new Message();
message.what = INTERNET_ERROR;
updateUIHandler.sendMessage(message);
Log.i("WOW222","WOW333 : " + isReloadedUrl);
}
else
{
Log.i("SUSHIT5","5");
Message message = new Message();
message.what = RELOAD_ERROR;
updateUIHandler.sendMessage(message);
}
isReloadedUrl = false;
}
@ -211,9 +249,11 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
public void handleMessage(Message msg) {
if(msg.what == MESSAGE_UPDATE_TEXT_CHILD_THREAD)
{
view[viewIndex].animate().setDuration(0).alpha(0f);
reloadError = false;
view[viewIndex].setAlpha(0);
view[viewIndex].bringToFront();
view[viewIndex].loadDataWithBaseURL(baseURL,html, "text/html", "utf-8", null);
//view[currentViewIndex].animate().alpha(1);
if(viewIndex==1)
{
@ -225,24 +265,34 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
viewIndex = 1;
currentViewIndex=0;
}
view[currentViewIndex].animate().setDuration(0).alpha(0f).withEndAction((() -> {
}));
//view[currentViewIndex].animate().setDuration(0).alpha(0f).withEndAction((() -> {
//}));
}
else if (msg.what == INTERNET_ERROR)
{
splash.animate().setStartDelay(2000).alpha(0);
datamodel.getInstance().setIsLoadingURL(false);
Log.i("PROBLEM28","");
progressBar.animate().setDuration(150).alpha(0f);
requestFailure.setVisibility(View.VISIBLE);
requestFailure.animate().alpha(1f).setDuration(300).withEndAction((() -> {
}));
if(!helperMethod.isNetworkAvailable(controller))
{
orbot_manager.getInstance().restartOrbot(controller);
}
Log.i("SUSHIT2","2");
}
else if (msg.what == RELOAD_ERROR)
{
Log.i("SUSHIT1","1");
Handler handler = new Handler();
handler.postDelayed(new Runnable() {
@Override
public void run() {
Log.i("PROBLEM29","");
progressBar.animate().setDuration(150).alpha(0f);
}
}, 1000);
@ -253,25 +303,6 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
}
}
@Override
public void onConnected(HttpClient httpClient) {
}
@Override
public void onConnectionException(Exception e) {
}
@Override
public void onTimeout() {
}
@Override
public void onInvalid() {
}
public void getVersion(Context applicationContext)
{
new Thread()
@ -304,4 +335,9 @@ public class webRequestHandler implements StrongBuilder.Callback<HttpClient>
}.start();
}
/*****--------------------ASYNC TASK--------------------******/
}

View File

@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#0066ff"
android:endColor="#4d94ff"
android:angle="90"
android:startColor="#141e30"
android:endColor="#004e92"
android:angle="135"
/>
</shape>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#000000"
android:endColor="#000000"
android:angle="90"
/>
</shape>

View File

@ -0,0 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android">
<gradient
android:startColor="#ffffff"
android:endColor="#ffffff"
android:angle="90"
/>
</shape>

Binary file not shown.

After

Width:  |  Height:  |  Size: 436 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 366 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 734 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.0 KiB

View File

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item
android:drawable="@drawable/lock"
android:width="26dp"
android:height="16dp"
/>
</layer-list >

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.5 KiB

After

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@ -62,7 +62,7 @@
app:layout_constraintTop_toTopOf="parent" android:layout_marginTop="74dp"
app:layout_constraintEnd_toEndOf="parent" tools:ignore="TextViewEdits"/>
<Button
android:text="Reload"
android:text="@string/reload"
android:onClick="onReloadButtonPressed"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
@ -78,7 +78,7 @@
android:layout_marginBottom="36dp" app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHorizontal_bias="0.498" app:layout_constraintEnd_toEndOf="parent"/>
<TextView
android:text="These might be the problems you are facing\n\n\u2022 Webpage or Website might be down\n\u2022 Your Internet connection might be poor\n\u2022 You might be using a proxy\n\u2022 Website might be blocked by firewall"
android:text="@string/internetErrorMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textView"
@ -93,7 +93,7 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textView"
app:layout_constraintBottom_toTopOf="@+id/reloadButton" android:layout_marginBottom="35dp"
android:layout_marginTop="35dp"/>
android:layout_marginTop="35dp" android:contentDescription="@string/todo"/>
</android.support.constraint.ConstraintLayout>
<FrameLayout
android:layout_width="match_parent"
@ -108,11 +108,12 @@
android:elevation="10dp"
android:background="@drawable/border"
android:gravity="left" app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent">
app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent"
tools:ignore="RtlHardcoded,UselessParent">
<ImageButton
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginLeft="5dp"
android:layout_marginStart="5dp"
android:layout_marginTop="10.5dp"
android:id="@+id/home"
android:bottomRightRadius="13dp"
@ -123,7 +124,7 @@
android:src="@drawable/homeicon"
android:onClick="onHomeButtonPressed"
android:background="@drawable/pressedcolor"
/>
android:contentDescription="@string/todo"/>
<EditText
android:layout_width="0dp"
android:layout_height="match_parent"
@ -131,7 +132,8 @@
android:textColor="#333333"
android:selectAllOnFocus="true"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:drawableLeft="@drawable/lockstyle"
android:paddingRight="15dp"
android:textColorHighlight="#b3d1ff"
android:background="@drawable/searchbar"
android:textCursorDrawable="@drawable/cursorcolor"
@ -144,7 +146,8 @@
android:layout_marginEnd="10dp"
android:layout_marginStart="5dp"
android:maxLines="1"
android:id="@+id/search" android:layout_weight="1" android:importantForAutofill="no"/>
android:id="@+id/search" android:layout_weight="1" android:importantForAutofill="no"
tools:targetApi="o"/>
</LinearLayout>
</FrameLayout>
@ -157,6 +160,7 @@
android:layout_height="108dp"
android:indeterminateTint="#0047b3"
android:id="@+id/progressBar"
android:indeterminateTintMode="src_in"
android:indeterminateOnly="true"
android:progress="50" app:layout_constraintTop_toTopOf="parent"
/>
@ -173,12 +177,13 @@
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:layout_marginBottom="80dp" android:contentDescription="@string/todo"/>
<ProgressBar
style="?android:attr/progressBarStyle"
android:layout_width="95dp"
android:layout_height="95dp"
android:indeterminateTint="#455265"
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"/>
@ -189,7 +194,7 @@
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:layout_marginBottom="80dp" android:contentDescription="@string/todo"/>
<TextView
android:text="@string/projectName"
android:layout_width="wrap_content"
@ -214,4 +219,16 @@
</android.support.constraint.ConstraintLayout>
</FrameLayout>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:src="@drawable/ban"
android:layout_height="wrap_content"
android:alpha="0"
app:borderWidth="0dp"
app:elevation="10dp"
android:backgroundTint="#ffffff"
android:clickable="true" app:srcCompat="?attr/actionModeSelectAllDrawable"
android:id="@+id/floatingActionButton3" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginBottom="24dp"
android:layout_marginEnd="24dp"/>
</android.support.constraint.ConstraintLayout>

View File

@ -132,7 +132,8 @@
android:textColor="#333333"
android:selectAllOnFocus="true"
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:drawableLeft="@drawable/lockstyle"
android:paddingRight="15dp"
android:textColorHighlight="#b3d1ff"
android:background="@drawable/searchbar"
android:textCursorDrawable="@drawable/cursorcolor"
@ -159,6 +160,7 @@
android:layout_height="108dp"
android:indeterminateTint="#0047b3"
android:id="@+id/progressBar"
android:indeterminateTintMode="src_in"
android:indeterminateOnly="true"
android:progress="50" app:layout_constraintTop_toTopOf="parent"
/>
@ -180,7 +182,8 @@
style="?android:attr/progressBarStyle"
android:layout_width="95dp"
android:layout_height="95dp"
android:indeterminateTint="#455265"
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"/>
@ -216,4 +219,16 @@
</android.support.constraint.ConstraintLayout>
</FrameLayout>
<android.support.design.widget.FloatingActionButton
android:layout_width="wrap_content"
android:src="@drawable/ban"
android:layout_height="wrap_content"
android:alpha="0"
app:borderWidth="0dp"
app:elevation="10dp"
android:backgroundTint="#ffffff"
android:clickable="true" app:srcCompat="?attr/actionModeSelectAllDrawable"
android:id="@+id/floatingActionButton3" app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent" android:layout_marginBottom="24dp"
android:layout_marginEnd="24dp"/>
</android.support.constraint.ConstraintLayout>

View File

@ -3,7 +3,7 @@
<color name="colorPrimary">#000000</color>
<color name="colorPrimaryDark">#000000</color>
<color name="colorAccent">#000000</color>
<color name="blue">#0066ff</color>
<color name="blue">#0066FF</color>
<color name="holo_gray">#b3b3b3</color>
<color name="header">#009933</color>
<color name="header">#212f45</color>
</resources>

View File

@ -7,7 +7,7 @@
<item name="colorPrimaryDark">#f9f9f9</item>
<item name="colorAccent">#f9f9f9</item>
<item name="android:windowBackground">@drawable/backgradient</item>
<item name="android:windowLightStatusBar">true</item>
<item name="android:statusBarColor">#000000</item>
</style>

View File

@ -4,10 +4,11 @@ buildscript {
repositories {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.fabric.io/public' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.3.1'
classpath 'io.fabric.tools:gradle:1.+'
}
}
@ -16,6 +17,7 @@ allprojects {
google()
jcenter()
maven { url 'https://jitpack.io' }
maven { url 'https://maven.fabric.io/public' }
maven { url 'https://maven.mozilla.org/maven2/' }
}
}

BIN
genessis.jks Normal file

Binary file not shown.