From 99a04ecfb139ae3a1f14ca568aabcc8afb6ac0ce Mon Sep 17 00:00:00 2001 From: msmannan00 Date: Wed, 21 Apr 2021 15:05:23 +0500 Subject: [PATCH] Bug Fixes Bug Fixes --- .../appManager/activityContextManager.java | 12 ++ .../bookmarkManager/bookmarkController.java | 1 + .../bridgeManager/bridgeController.java | 10 +- .../helpManager/helpController.java | 7 +- .../historyManager/historyController.java | 1 + .../geckoManager/geckoClients.java | 36 +++--- .../geckoManager/geckoSession.java | 63 ++++++---- .../homeController/homeController.java | 75 +++++++++++- .../homeController/homeViewController.java | 8 +- .../languageManager/languageController.java | 1 + .../orbotLogManager/orbotLogController.java | 5 +- .../orbotManager/orbotController.java | 12 +- .../proxyStatusController.java | 1 + .../settingAccessibilityController.java | 1 + .../settingAdvanceController.java | 1 + .../clearManager/settingClearController.java | 1 + .../settingGeneralController.java | 4 + .../logManager/settingLogController.java | 1 + .../settingNotificationController.java | 1 + .../settingPrivacyController.java | 1 + .../settingSearchController.java | 1 + .../settingHomeController.java | 1 + .../settingTrackingController.java | 1 + .../appManager/tabManager/tabController.java | 14 +-- .../dataManager/tabDataModel.java | 1 + .../helperManager/ProxySelector.java | 8 -- .../helperManager/ProxySettings.java | 4 +- .../helperManager/theme.java | 4 +- .../pluginManager/messageManager.java | 15 +++ .../pluginManager/orbotManager.java | 4 + .../pluginManager/pluginController.java | 3 + .../pluginManager/pluginEnums.java | 2 +- .../xml/hox_rounded_corner_splash_right.xml | 50 ++++++++ app/src/main/res/drawable-hdpi/reset.png | Bin 0 -> 13690 bytes .../res/layouts/alert/layout/popup_panic.xml | 109 ++++++++++++++++++ .../bridge/layout/bridge_settings_view.xml | 2 + .../res/layouts/home/layout/home_view.xml | 16 +++ app/src/main/res/values-night/colors.xml | 2 +- app/src/main/res/values/strings.xml | 6 + orbotservice/build.gradle | 4 +- 40 files changed, 412 insertions(+), 77 deletions(-) create mode 100644 app/src/main/res/custom-xml/home/xml/hox_rounded_corner_splash_right.xml create mode 100644 app/src/main/res/drawable-hdpi/reset.png create mode 100644 app/src/main/res/layouts/alert/layout/popup_panic.xml diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java index 7e4f23f1..6c893f9d 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java @@ -11,6 +11,8 @@ import com.darkweb.genesissearchengine.appManager.orbotLogManager.orbotLogContro import com.darkweb.genesissearchengine.appManager.settingManager.generalManager.settingGeneralController; import com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage.settingHomeController; import com.darkweb.genesissearchengine.appManager.tabManager.tabController; +import com.darkweb.genesissearchengine.helperManager.theme; + import java.lang.ref.WeakReference; import java.util.ArrayList; @@ -168,6 +170,16 @@ public class activityContextManager }catch (Exception ignored){} } + public void onResetTheme(){ + for(int mCounter=0;mCounter mHelpAdapter.onTrigger(helpEnums.eHelpAdapter.M_INIT_FILTER, Collections.singletonList(mSearchInput.getText().toString())); + if(mHelpAdapter!=null){ + postToServerRunnable = () -> mHelpAdapter.onTrigger(helpEnums.eHelpAdapter.M_INIT_FILTER, Collections.singletonList(mSearchInput.getText().toString())); + } mSearchInput.addTextChangedListener(new TextWatcher() { diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java index d5538d12..eefd8a91 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java @@ -88,6 +88,7 @@ public class historyController extends AppCompatActivity public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoClients.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoClients.java index f1e3d4a6..299dcb6a 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoClients.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoClients.java @@ -384,24 +384,28 @@ public class geckoClients @Override public Object invokeObserver(List data, Object e_type) { - if(e_type.equals(enums.etype.SESSION_ID)){ - return mSession.getSessionID(); - } - else if (mSessionID!=null && mSessionID.equals(data.get(1)) || e_type.equals(enums.etype.FINDER_RESULT_CALLBACK) || e_type.equals(enums.etype.ON_UPDATE_TAB_TITLE) || e_type.equals(enums.etype.on_update_favicon) ||e_type.equals(enums.etype.on_update_history) || e_type.equals(enums.etype.on_request_completed) || e_type.equals(enums.etype.on_update_suggestion) || e_type.equals(enums.etype.on_update_suggestion_url)) - { - if (e_type.equals(on_handle_external_intent)) + if(mSession!=null && mSession.isClosed()){ + return null; + }else if(mSession!=null) { + if(e_type.equals(enums.etype.SESSION_ID)){ + return mSession.getSessionID(); + } + else if (mSessionID!=null && mSessionID.equals(data.get(1)) || e_type.equals(enums.etype.FINDER_RESULT_CALLBACK) || e_type.equals(enums.etype.ON_UPDATE_TAB_TITLE) || e_type.equals(enums.etype.on_update_favicon) ||e_type.equals(enums.etype.on_update_history) || e_type.equals(enums.etype.on_request_completed) || e_type.equals(enums.etype.on_update_suggestion) || e_type.equals(enums.etype.on_update_suggestion_url)) { - try { - WebResponse responseInfo = (WebResponse)data.get(0); - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.setDataAndTypeAndNormalize(Uri.parse(responseInfo.uri), responseInfo.headers.get("Content-Type")); - activityContextManager.getInstance().getHomeController().startActivity(intent); - }catch (Exception ex){ - Log.i("ex","ex"); + if (e_type.equals(on_handle_external_intent)) + { + try { + WebResponse responseInfo = (WebResponse)data.get(0); + Intent intent = new Intent(Intent.ACTION_VIEW); + intent.setDataAndTypeAndNormalize(Uri.parse(responseInfo.uri), responseInfo.headers.get("Content-Type")); + activityContextManager.getInstance().getHomeController().startActivity(intent); + }catch (Exception ex){ + Log.i("ex","ex"); + } + } else + { + return event.invokeObserver(data, e_type); } - } else - { - return event.invokeObserver(data, e_type); } } return null; diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoSession.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoSession.java index c8802aa3..57cea63e 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoSession.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoManager/geckoSession.java @@ -113,6 +113,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele private boolean isFirstPaintExecuted = false; private boolean mIsProgressBarChanging = false; private Handler mFindHandler; + private boolean mClosed = false; geckoSession(eventObserver.eventListener event,String mSessionID,AppCompatActivity mContext, GeckoView pGeckoView){ @@ -562,7 +563,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele @UiThread public void onCloseRequest(@NonNull GeckoSession var1) { - if(!canGoBack()){ + if(!canGoBack() && !mClosed){ event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle), enums.etype.back_list_empty); } } @@ -570,33 +571,37 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele int mCrashCount = 0; @UiThread public void onCrash(@NonNull GeckoSession session) { - String mSessionID = (String) event.invokeObserver(null, enums.etype.SESSION_ID); - if(mSessionID.equals(getSessionID())){ - if(mCrashCount<=5){ - final Handler handler = new Handler(); - handler.postDelayed(() -> { - if(!session.isOpen()){ - event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id, mTheme, this), enums.etype.M_OPEN_SESSION); - } - }, mCrashCount*500); + if(!mClosed){ + String mSessionID = (String) event.invokeObserver(null, enums.etype.SESSION_ID); + if(mSessionID.equals(getSessionID())){ + if(mCrashCount<=5){ + final Handler handler = new Handler(); + handler.postDelayed(() -> { + if(!session.isOpen()){ + event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id, mTheme, this), enums.etype.M_OPEN_SESSION); + } + }, mCrashCount*500); + } + mCrashCount+=1; } - mCrashCount+=1; } } @UiThread public void onKill(@NonNull GeckoSession session) { - String mSessionID = (String) event.invokeObserver(null, enums.etype.SESSION_ID); - if(mSessionID.equals(getSessionID())){ - if(mCrashCount<=5){ - final Handler handler = new Handler(); - handler.postDelayed(() -> { - if(!session.isOpen()){ - event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id, mTheme, this), enums.etype.M_OPEN_SESSION); - } - }, mCrashCount*500); + if(!mClosed){ + String mSessionID = (String) event.invokeObserver(null, enums.etype.SESSION_ID); + if(mSessionID.equals(getSessionID())){ + if(mCrashCount<=5){ + final Handler handler = new Handler(); + handler.postDelayed(() -> { + if(!session.isOpen()){ + event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id, mTheme, this), enums.etype.M_OPEN_SESSION); + } + }, mCrashCount*500); + } + mCrashCount+=1; } - mCrashCount+=1; } } @@ -700,6 +705,10 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele private boolean createAndSaveFileFromBase64Url(String url) { try{ + if(!url.startsWith("data") && !url.startsWith("blob")){ + return false; + } + File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); String filetype; @@ -855,7 +864,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele return mCanGoBack; } - boolean wasPreviousErrorPage(){ + public boolean wasPreviousErrorPage(){ return mPreviousErrorPage; } @@ -883,6 +892,16 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele event.invokeObserver(Arrays.asList(null,mSessionID), enums.etype.on_close_sesson); } + public void closeSessionInstant(){ + mSessionID = "-1"; + mClosed = true; + close(); + } + + public boolean isClosed(){ + return mClosed; + } + GeckoResult mFinder = null; public void findInPage(String pQuery, int pDirection){ mFinder = null; diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeController.java index 72b2d87e..16e4a207 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeController.java @@ -76,6 +76,8 @@ import com.darkweb.genesissearchengine.pluginManager.pluginEnums; import com.darkweb.genesissearchengine.widget.progressBar.AnimatedProgressBar; import com.example.myapplication.R; import com.google.android.gms.ads.AdView; + +import org.mozilla.geckoview.ContentBlocking; import org.mozilla.geckoview.GeckoResult; import org.mozilla.geckoview.GeckoSession; import org.torproject.android.service.OrbotService; @@ -104,6 +106,7 @@ import static com.darkweb.genesissearchengine.constants.enums.etype.open_new_tab import static com.darkweb.genesissearchengine.pluginManager.pluginEnums.eMessageManager.*; import static com.darkweb.genesissearchengine.pluginManager.pluginEnums.eMessageManagerCallbacks.M_RATE_APPLICATION; import static java.lang.Character.isLetter; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_FIRST_PARTY; public class homeController extends AppCompatActivity implements ComponentCallbacks2 { @@ -127,6 +130,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba private TextView mLoadingText; private AdView mBannerAds = null; private ImageButton mGatewaySplash; + private ImageButton mPanicButton; private LinearLayout mTopBar; private ImageView mBackSplash; private Button mConnectButton; @@ -433,13 +437,14 @@ public class homeController extends AppCompatActivity implements ComponentCallba mNewTabBlocker = findViewById(R.id.pNewTabBlocker); mCoordinatorLayout = findViewById(R.id.pCoordinatorLayout); mImageDivider = findViewById(R.id.pImageDivider); + mPanicButton = findViewById(R.id.pPanicButton); mGeckoView.setSaveEnabled(false); mGeckoView.setSaveFromParentEnabled(false); mGeckoView.setAutofillEnabled(true); mGeckoClient = new geckoClients(); - mHomeViewController.initialization(new homeViewCallback(),this,mNewTab, mWebViewContainer, mLoadingText, mProgressBar, mSearchbar, mSplashScreen, mLoadingIcon, mBannerAds, mGatewaySplash, mTopBar, mGeckoView, mBackSplash, mConnectButton, mFindBar, mFindText, mFindCount, mTopLayout, mVoiceInput, mMenu, mNestedScroll, mBlocker, mBlockerFullSceen, mSearchEngineBar, mCopyright, mHintListView, mAppBar, mOrbotLogManager, mInfoLandscape, mInfoPortrait, mProgressBarIndeterminate, mTabFragment, mTopBarContainer, mSearchLock, mPopupLoadNewTab, mTopBarHider, mNewTabBlocker, mCoordinatorLayout, mImageDivider); + mHomeViewController.initialization(new homeViewCallback(),this,mNewTab, mWebViewContainer, mLoadingText, mProgressBar, mSearchbar, mSplashScreen, mLoadingIcon, mBannerAds, mGatewaySplash, mTopBar, mGeckoView, mBackSplash, mConnectButton, mFindBar, mFindText, mFindCount, mTopLayout, mVoiceInput, mMenu, mNestedScroll, mBlocker, mBlockerFullSceen, mSearchEngineBar, mCopyright, mHintListView, mAppBar, mOrbotLogManager, mInfoLandscape, mInfoPortrait, mProgressBarIndeterminate, mTabFragment, mTopBarContainer, mSearchLock, mPopupLoadNewTab, mTopBarHider, mNewTabBlocker, mCoordinatorLayout, mImageDivider, mPanicButton); mGeckoView.onSetHomeEvent(new nestedGeckoViewCallback()); mGeckoClient.initialize(mGeckoView, new geckoViewCallback(), this,false); mGeckoClient.onValidateInitializeFromStartup(mGeckoView, homeController.this); @@ -1211,10 +1216,12 @@ public class homeController extends AppCompatActivity implements ComponentCallba if(activityContextManager.getInstance().getTabController().isSelectionOpened()){ activityContextManager.getInstance().getTabController().onClearSelection(null); }else { + boolean mStatus = activityContextManager.getInstance().getTabController().onBackPressed(); onResumeDump(); - mHomeViewController.onHideTabContainer(); activityContextManager.getInstance().getTabController().onPostExit(); - activityContextManager.getInstance().getTabController().onBackPressed(); + if(!mStatus){ + mHomeViewController.onHideTabContainer(); + } } return; } @@ -1368,7 +1375,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba pluginController.getInstance().onNotificationInvoke(null, pluginEnums.eNotificationManager.M_CLEAR_NOTIFICATION ); if(!status.mThemeApplying){ - activityContextManager.getInstance().onClearStack(); + //activityContextManager.getInstance().onClearStack(); } initWidget(); initTabCountForced(); @@ -1380,6 +1387,12 @@ public class homeController extends AppCompatActivity implements ComponentCallba pluginController.getInstance().onMessageManagerInvoke(null, M_RESET); } + if(status.sSettingIsAppStarted && !status.mThemeApplying){ + if(mGeckoClient.getSession().wasPreviousErrorPage()){ + mGeckoClient.onReload(mGeckoView, this); + } + } + status.mThemeApplying = false; super.onResume(); @@ -1747,6 +1760,60 @@ public class homeController extends AppCompatActivity implements ComponentCallba helperMethod.openActivity(orbotLogController.class, constants.CONST_LIST_HISTORY, homeController.this,true); } + public void panicExit(View view) { + pluginController.getInstance().onMessageManagerInvoke(null, M_RESET); + pluginController.getInstance().onMessageManagerInvoke(Collections.singletonList(homeController.this), M_PANIC_RESET); + } + + public void panicExitInvoked() { + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SEARCH_HISTORY,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SEARCH_SUGGESTION,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_JAVA_SCRIPT,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_HISTORY_CLEAR,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_GATEWAY,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_GATEWAY_MANUAL,false)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.VPN_ENABLED,false)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.BRIDGE_ENABLES,false)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_FONT_ADJUSTABLE,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_ZOOM,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_VOICE_INPUT,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_TRACKING_PROTECTION, ContentBlocking.AntiTracking.DEFAULT)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_DONOT_TRACK,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_COOKIE_ADJUSTABLE,ACCEPT_FIRST_PARTY)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_FLOAT, Arrays.asList(keys.SETTING_FONT_SIZE,100)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.SETTING_LANGUAGE, strings.SETTING_DEFAULT_LANGUAGE)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.SETTING_LANGUAGE_REGION,strings.SETTING_DEFAULT_LANGUAGE_REGION)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.SETTING_SEARCH_ENGINE,constants.CONST_BACKEND_GENESIS_URL)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,strings.BRIDGE_CUSTOM_BRIDGE_OBFS4)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_NOTIFICATION_STATUS,1)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_RESTORE_TAB,false)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_CHARACTER_ENCODING,false)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_SHOW_IMAGES,0)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SHOW_FONTS,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_TOOLBAR_THEME,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_FULL_SCREEN_BROWSIING,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_THEME, enums.Theme.THEME_DEFAULT)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_LIST_VIEW,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SHOW_TAB_GRID,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_OPEN_URL_IN_NEW_TAB,true)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_TYPE,strings.BRIDGE_CUSTOM_BRIDGE_OBFS4)); + + status.sSettingIsAppStarted = false; + finishAndRemoveTask(); + + new Thread(){ + public void run(){ + try { + sleep(1000); + android.os.Process.killProcess(android.os.Process.myPid()); + System.exit(1); + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + }.start(); + } + public class nestedGeckoViewCallback implements eventObserver.eventListener{ @Override diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeViewController.java index 2fa800f1..f3522efc 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController/homeViewController.java @@ -106,6 +106,7 @@ class homeViewController private ImageView mNewTabBlocker; private CoordinatorLayout mCoordinatorLayout; private ImageView mImageDivider; + private ImageButton mPanicButton; /*Local Variables*/ private Callable mLogs = null; @@ -115,7 +116,7 @@ class homeViewController private Handler mTabDialogHandler = null; private Runnable mTabDialogRunnable = null; - void initialization(eventObserver.eventListener event, AppCompatActivity context, Button mNewTab, ConstraintLayout webviewContainer, TextView loadingText, AnimatedProgressBar progressBar, editTextManager searchbar, ConstraintLayout splashScreen, ImageView loading, AdView banner_ads, ImageButton gateway_splash, LinearLayout top_bar, GeckoView gecko_view, ImageView backsplash, Button connect_button, View pFindBar, EditText pFindText, TextView pFindCount, androidx.constraintlayout.widget.ConstraintLayout pTopLayout, ImageButton pVoiceInput, ImageButton pMenu, androidx.core.widget.NestedScrollView pNestedScroll, ImageView pBlocker, ImageView pBlockerFullSceen, View mSearchEngineBar, TextView pCopyright, RecyclerView pHistListView, com.google.android.material.appbar.AppBarLayout pAppBar, ImageButton pOrbotLogManager, ConstraintLayout pInfoLandscape, ConstraintLayout pInfoPortrait, ProgressBar pProgressBarIndeterminate, FragmentContainerView pTabFragment, LinearLayout pTopBarContainer, ImageView pSearchLock, View pPopupLoadNewTab, ImageView pTopBarHider, ImageView pNewTabBlocker, CoordinatorLayout mCoordinatorLayout, ImageView pImageDivider){ + void initialization(eventObserver.eventListener event, AppCompatActivity context, Button mNewTab, ConstraintLayout webviewContainer, TextView loadingText, AnimatedProgressBar progressBar, editTextManager searchbar, ConstraintLayout splashScreen, ImageView loading, AdView banner_ads, ImageButton gateway_splash, LinearLayout top_bar, GeckoView gecko_view, ImageView backsplash, Button connect_button, View pFindBar, EditText pFindText, TextView pFindCount, androidx.constraintlayout.widget.ConstraintLayout pTopLayout, ImageButton pVoiceInput, ImageButton pMenu, androidx.core.widget.NestedScrollView pNestedScroll, ImageView pBlocker, ImageView pBlockerFullSceen, View mSearchEngineBar, TextView pCopyright, RecyclerView pHistListView, com.google.android.material.appbar.AppBarLayout pAppBar, ImageButton pOrbotLogManager, ConstraintLayout pInfoLandscape, ConstraintLayout pInfoPortrait, ProgressBar pProgressBarIndeterminate, FragmentContainerView pTabFragment, LinearLayout pTopBarContainer, ImageView pSearchLock, View pPopupLoadNewTab, ImageView pTopBarHider, ImageView pNewTabBlocker, CoordinatorLayout mCoordinatorLayout, ImageView pImageDivider, ImageButton pPanicButton){ this.mContext = context; this.mProgressBar = progressBar; this.mSearchbar = searchbar; @@ -154,6 +155,7 @@ class homeViewController this.mNewTabBlocker = pNewTabBlocker; this.mCoordinatorLayout = mCoordinatorLayout; this.mImageDivider = pImageDivider; + this.mPanicButton = pPanicButton; initSplashScreen(); createUpdateUiHandler(); @@ -520,6 +522,7 @@ class homeViewController mConnectButton.setEnabled(false); mSplashScreen.setEnabled(false); mOrbotLogManager.setEnabled(false); + mPanicButton.setEnabled(false); final Handler handler = new Handler(); handler.postDelayed(() -> @@ -532,6 +535,7 @@ class homeViewController initSplashLoading(); }); mGatewaySplash.animate().setDuration(350).alpha(0.4f); + mPanicButton.animate().setDuration(250).alpha(0f); } private void initSplashScreen(){ @@ -626,6 +630,8 @@ class homeViewController mBlocker.setVisibility(View.GONE); mGatewaySplash.setVisibility(View.GONE); mConnectButton.setVisibility(View.GONE); + mPanicButton.setVisibility(View.GONE); + mEvent.invokeObserver(null, enums.etype.M_CACHE_UPDATE_TAB); mEvent.invokeObserver(null, enums.etype.M_SPLASH_DISABLE); })); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageController.java index dca46ede..6c583bf1 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageController.java @@ -67,6 +67,7 @@ public class languageController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogController.java index 0b581627..87f41b1d 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogController.java @@ -67,9 +67,10 @@ public class orbotLogController extends AppCompatActivity { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); - super.onConfigurationChanged(newConfig); - theme.getInstance().onConfigurationChanged(this); + activityContextManager.getInstance().onResetTheme(); + + super.onConfigurationChanged(newConfig); } public void viewsInitializations() { diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java index 2ec39530..f51c92ce 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java @@ -53,6 +53,10 @@ public class orbotController extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.orbot_settings_view); + if(!status.mThemeApplying){ + activityContextManager.getInstance().onStack(this); + } + viewsInitializations(); onInitListener(); } @@ -60,9 +64,10 @@ public class orbotController extends AppCompatActivity { @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); - super.onConfigurationChanged(newConfig); - theme.getInstance().onConfigurationChanged(this); + activityContextManager.getInstance().onResetTheme(); + + super.onConfigurationChanged(newConfig); } public void viewsInitializations() { @@ -137,9 +142,6 @@ public class orbotController extends AppCompatActivity { { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_RESUME); activityContextManager.getInstance().setCurrentActivity(this); - mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.M_INIT_POST_UI,null); - - activityContextManager.getInstance().onStack(this); super.onResume(); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/proxyStatusManager/proxyStatusController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/proxyStatusManager/proxyStatusController.java index 05e1311d..5354c221 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/proxyStatusManager/proxyStatusController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/proxyStatusManager/proxyStatusController.java @@ -50,6 +50,7 @@ public class proxyStatusController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java index 52f3a4d3..97df1f95 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java @@ -60,6 +60,7 @@ public class settingAccessibilityController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceController.java index c7f513bc..f166a9c6 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceController.java @@ -56,6 +56,7 @@ public class settingAdvanceController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearController.java index aa8ed0d3..5a8e5de4 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearController.java @@ -57,6 +57,7 @@ public class settingClearController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralController.java index eaa1d71d..e5ff41fc 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralController.java @@ -63,6 +63,10 @@ public class settingGeneralController extends AppCompatActivity { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + if(!mIsThemeChanging){ + //activityContextManager.getInstance().onResetTheme(); + } + theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/logManager/settingLogController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/logManager/settingLogController.java index 4565f2df..493550e9 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/logManager/settingLogController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/logManager/settingLogController.java @@ -47,6 +47,7 @@ public class settingLogController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java index 16eabaab..f87a535f 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java @@ -46,6 +46,7 @@ public class settingNotificationController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyController.java index 324af9f7..d1b71fac 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyController.java @@ -53,6 +53,7 @@ public class settingPrivacyController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java index 44fad3e2..4790e6b1 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java @@ -48,6 +48,7 @@ public class settingSearchController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingHomeController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingHomeController.java index 1c68d68b..e708d860 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingHomeController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingHomeController.java @@ -69,6 +69,7 @@ public class settingHomeController extends AppCompatActivity public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/trackingManager/settingTrackingController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/trackingManager/settingTrackingController.java index 0012d256..7e38ca0f 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/trackingManager/settingTrackingController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/trackingManager/settingTrackingController.java @@ -51,6 +51,7 @@ public class settingTrackingController extends AppCompatActivity { public void onConfigurationChanged(@NonNull Configuration newConfig) { pluginController.getInstance().onLanguageInvoke(Collections.singletonList(this), pluginEnums.eLangManager.M_ACTIVITY_CREATED); super.onConfigurationChanged(newConfig); + activityContextManager.getInstance().onResetTheme(); theme.getInstance().onConfigurationChanged(this); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabController.java index 29a70159..a9774419 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabController.java @@ -317,7 +317,8 @@ public class tabController extends Fragment public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { int position = viewHolder.getAdapterPosition(); - onExitAndClearBackup(); + onClearTabBackup(); + mListModel.onTrigger(tabEnums.eModelCallback.M_CLEAR_BACKUP_RETAIN_DATABASE,null); boolean mStatus = onInitRemoveView(position, true, true); if(mStatus){ mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.NOTIFY_SWIPE, Collections.singletonList(position)); @@ -378,7 +379,7 @@ public class tabController extends Fragment new Handler().postDelayed(() -> { onSwipeBounce(0); }, 400); - return false; + return true; }else{ onShowUndoDialog(); mTabAdapter.notifyItemRangeChanged(pIndex, mTabAdapter.getItemCount() - pIndex); @@ -446,8 +447,8 @@ public class tabController extends Fragment public void onClearTabBackup(){ ArrayList mBackupIndex = (ArrayList)mListModel.onTrigger(tabEnums.eModelCallback.M_GET_BACKUP,null); for(int mCounter=0;mCounter { mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.REMOVE_ALL, null); onClearSelection(null); - - onClearTabBackup(); - mListModel.onTrigger(tabEnums.eModelCallback.M_CLEAR_BACKUP_RETAIN_DATABASE,null); }); } else if(pView.getId() == R.id.pOpenSetting){ @@ -586,7 +584,7 @@ public class tabController extends Fragment } - public void onBackPressed() { + public boolean onBackPressed() { if(mTabAdapter!=null){ boolean mStatus = (boolean) mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.M_SELECTION_MENU_SHOWING, null); onClearTabBackup(); @@ -594,8 +592,10 @@ public class tabController extends Fragment if(!mStatus){ mHomeController.onDisableTabViewController(); onClose(); + return true; } } + return false; } /*Event Observer*/ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java index 530c7758..b027ce1c 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java @@ -100,6 +100,7 @@ class tabDataModel void closeTab(geckoSession mSession,Object pID) { mSession.stop(); mSession.close(); + if(pID == null){ String mID = strings.GENERIC_EMPTY_STR; for(int counter = 0; counter< mTabs.size(); counter++){ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySelector.java b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySelector.java index 37696897..0ebfafb6 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySelector.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySelector.java @@ -14,14 +14,6 @@ import java.util.List; public class ProxySelector { public static URLConnection openConnectionWithProxy(final URI uri) throws IOException { - final java.net.ProxySelector ps = java.net.ProxySelector.getDefault(); - Proxy proxy = Proxy.NO_PROXY; - if (ps != null) { - final List proxies = ps.select(uri); - if (proxies != null && !proxies.isEmpty()) { - proxy = proxies.get(0); - } - } return uri.toURL().openConnection(ProxySettings.getProxy()); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySettings.java b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySettings.java index 59ba1e02..2b50c847 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySettings.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/ProxySettings.java @@ -7,11 +7,11 @@ import ch.boye.httpclientandroidlib.HttpHost; public class ProxySettings { private static final String TOR_PROXY_ADDRESS = "127.0.0.1"; - private static final int TOR_PROXY_PORT = 9050; + private static final int TOR_PROXY_PORT = 1080; public static Proxy getProxy() { // TODO make configurable - return new Proxy(Proxy.Type.SOCKS, new InetSocketAddress(TOR_PROXY_ADDRESS, TOR_PROXY_PORT)); + return new Proxy(Proxy.Type.HTTP, new InetSocketAddress(TOR_PROXY_ADDRESS, TOR_PROXY_PORT)); } public static HttpHost getProxyHost() { diff --git a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/theme.java b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/theme.java index e8ee7f86..8b1ae772 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/theme.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/theme.java @@ -22,10 +22,10 @@ public class theme { public void onConfigurationChanged(AppCompatActivity pContext){ boolean sDefaultNightMode = (pContext.getApplicationContext().getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; - if(status.sDefaultNightMode != sDefaultNightMode){ + // if(status.sDefaultNightMode != sDefaultNightMode){ setupThemeLocal(pContext, sDefaultNightMode); pContext.recreate(); - } + // } } public void setupThemeLocal(Context context, boolean sDefaultNightMode) { diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java index 798567c1..aadac78b 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java @@ -222,6 +222,16 @@ class messageManager mDialog.setOnDismissListener(dialog -> onClearReference()); } + private void onPanic(){ + initializeDialog(R.layout.popup_panic, Gravity.BOTTOM); + mDialog.findViewById(R.id.pDismiss).setOnClickListener(v -> mDialog.dismiss()); + mDialog.setOnDismissListener(dialog -> onClearReference()); + mDialog.findViewById(R.id.pNext).setOnClickListener(v -> { + mDialog.dismiss(); + mEvent.invokeObserver(null, M_PANIC_RESET); + }); + } + private void dataClearedSuccessfully() { initializeDialog(R.layout.popup_data_cleared, Gravity.BOTTOM); @@ -632,6 +642,11 @@ class messageManager notSupportMessage(); break; + case M_PANIC_RESET: + /*VERIFIED*/ + onPanic(); + break; + case M_DATA_CLEARED: /*VERIFIED*/ dataClearedSuccessfully(); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java index 04912183..6614055c 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java @@ -169,6 +169,10 @@ class orbotManager { String logs = orbotLocalConstants.mTorLogsStatus; + if(orbotLocalConstants.mTorLogsStatus.equals("No internet connection")){ + return "Warning | " + orbotLocalConstants.mTorLogsStatus; + } + if(!logs.contains("Bootstrapped") && !mLogsStarted){ logs = "Initializing Bootstrap"; mLogsStarted = true; diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java index 653eed7d..927a2625 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java @@ -198,6 +198,9 @@ public class pluginController { ((homeController)mHomeController.get()).onLoadURL(pData.get(0).toString()); } + else if(pEventType.equals(M_PANIC_RESET)){ + activityContextManager.getInstance().getHomeController().panicExitInvoked(); + } else if(pEventType.equals(M_DOWNLOAD_SINGLE)){ activityContextManager.getInstance().getHomeController().onManualDownloadFileName((String)pData.get(2),(String)pData.get(0)); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginEnums.java index ec276f61..bc9ba9ee 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginEnums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginEnums.java @@ -28,7 +28,7 @@ public class pluginEnums /*Message Manager*/ public enum eMessageManager{ - M_RESET, M_DATA_CLEARED, M_SECURE_CONNECTION, M_POPUP_BLOCKED, M_MAX_TAB_REACHED,M_DOWNLOAD_SINGLE, M_UPDATE_BRIDGES, M_NEW_IDENTITY, M_NOT_SUPPORTED, M_BRIDGE_MAIL, M_LONG_PRESS_WITH_LINK, M_LONG_PRESS_URL, M_LONG_PRESS_DOWNLOAD, M_START_ORBOT, M_DOWNLOAD_FILE, M_RATE_APP, M_REPORT_URL, M_CLEAR_BOOKMARK, M_CLEAR_HISTORY, M_BOOKMARK, M_RATE_SUCCESS, M_RATE_FAILURE, M_LANGUAGE_SUPPORT_FAILURE, M_WELCOME + M_RESET, M_DATA_CLEARED, M_SECURE_CONNECTION, M_POPUP_BLOCKED, M_PANIC, M_MAX_TAB_REACHED,M_DOWNLOAD_SINGLE, M_UPDATE_BRIDGES, M_NEW_IDENTITY, M_NOT_SUPPORTED, M_BRIDGE_MAIL, M_LONG_PRESS_WITH_LINK, M_LONG_PRESS_URL, M_LONG_PRESS_DOWNLOAD, M_START_ORBOT, M_DOWNLOAD_FILE, M_RATE_APP, M_REPORT_URL, M_CLEAR_BOOKMARK, M_CLEAR_HISTORY, M_BOOKMARK, M_PANIC_RESET, M_RATE_SUCCESS, M_RATE_FAILURE, M_LANGUAGE_SUPPORT_FAILURE, M_WELCOME } public enum eMessageManagerCallbacks{ M_CANCEL_WELCOME, M_APP_RATED, M_DOWNLOAD_FILE_MANUAL, M_OPEN_LINK_CURRENT_TAB, M_COPY_LINK, M_REQUEST_BRIDGES, M_SET_BRIDGES, M_OPEN_LINK_NEW_TAB, M_CLEAR_TAB, M_RATE_APPLICATION, M_OPEN_PRIVACY diff --git a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_splash_right.xml b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_splash_right.xml new file mode 100644 index 00000000..05379af8 --- /dev/null +++ b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_splash_right.xml @@ -0,0 +1,50 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable-hdpi/reset.png b/app/src/main/res/drawable-hdpi/reset.png new file mode 100644 index 0000000000000000000000000000000000000000..8c5009d716145d80263eb86d42d8c9b20b1fc3b1 GIT binary patch literal 13690 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 + + + + + + + + + + + + +