From 7b80b89e50757888bbe99ca39912d7173269e9e4 Mon Sep 17 00:00:00 2001 From: msmannan00 Date: Sun, 7 Feb 2021 22:40:35 +0500 Subject: [PATCH] Bug Fixes Bug Fixes --- app/src/main/assets/Help/help.html | 119 ++++- app/src/main/assets/Help/style/cs-help.css | 41 +- app/src/main/ic_launcher-playstore.png | Bin 51238 -> 28125 bytes .../helpManager/helpController.java | 7 +- .../appManager/helpManager/helpEnums.java | 2 +- .../appManager/helpManager/helpModel.java | 62 ++- .../geckoManager/geckoSession.java | 3 +- .../homeManager/hintManager/hintAdapter.java | 2 +- .../homeController/homeController.java | 96 ++-- .../homeController/homeViewController.java | 50 +- .../languageManager/languageModel.java | 1 + .../orbotLogManager/orbotLogController.java | 14 +- .../orbotManager/orbotController.java | 17 +- .../appManager/tabManager/tabAdapter.java | 31 +- .../appManager/tabManager/tabController.java | 93 ++-- .../appManager/tabManager/tabEnums.java | 2 +- .../tabManager/tabViewController.java | 34 +- .../genesissearchengine/constants/enums.java | 2 +- .../genesissearchengine/constants/status.java | 2 +- .../dataManager/dataController.java | 7 + .../dataManager/dataEnums.java | 5 + .../dataManager/helpDataModel.java | 40 ++ .../dataManager/imageDataModel.java | 2 +- .../genesissearchengine/dataManager/test.java | 4 - .../helperManager/helperMethod.java | 7 + .../pluginManager/adManager.java | 2 +- .../pluginManager/langManager.java | 2 +- app/src/main/res/anim/fade_in_lang.xml | 2 +- app/src/main/res/anim/fade_out_lang.xml | 4 +- .../generic/xml/gx_generic_tab_button.xml | 69 +-- .../custom-xml/history/xml/hx_menu_popup.xml | 16 +- .../history/xml/hx_menu_popup_container.xml | 232 ++-------- .../images/xml/ic_baseline_remove_red_eye.xml | 10 + .../alert/layout/popup_bridge_mail.xml | 1 + .../alert/layout/popup_clear_bookmark.xml | 5 +- .../alert/layout/popup_clear_history.xml | 3 +- .../alert/layout/popup_data_cleared.xml | 3 +- .../alert/layout/popup_file_longpress.xml | 1 + .../res/layouts/alert/layout/popup_find.xml | 2 +- .../alert/layout/popup_language_support.xml | 5 +- .../alert/layout/popup_not_supported.xml | 5 +- .../alert/layout/popup_rate_failure.xml | 5 +- .../layouts/alert/layout/popup_report_url.xml | 3 +- .../layout/popup_reported_successfully.xml | 5 +- .../res/layouts/alert/layout/popup_undo.xml | 18 + .../alert/layout/popup_update_bridges.xml | 5 +- .../alert/layout/popup_url_longpress.xml | 3 +- .../layouts/alert/layout/popup_welcome.xml | 2 + .../layouts/bookmark/layout/bookmark_view.xml | 1 + .../bridge/layout/bridge_settings_view.xml | 6 +- .../res/layouts/help/layout/help_row_view.xml | 2 +- .../layouts/history/layout/history_view.xml | 2 + .../res/layouts/home/layout/home_view.xml | 108 ++--- .../layouts/landing/layout/landing_view.xml | 3 + .../orbot/layout/orbot_settings_view.xml | 30 +- .../orbotLog/layout/orbot_log_view.xml | 5 +- .../proxyStatus/layout/proxy_status_view.xml | 12 +- .../res/layouts/setting/layout/setting.xml | 68 +-- .../layout/setting_accessibility_view.xml | 45 +- .../setting/layout/setting_advance_view.xml | 36 +- .../setting/layout/setting_clear_view.xml | 112 ++--- .../setting/layout/setting_general_view.xml | 55 ++- .../setting/layout/setting_log_view.xml | 8 +- .../layout/setting_notification_view.xml | 24 +- .../setting/layout/setting_privacy_view.xml | 46 +- .../setting/layout/setting_search_view.xml | 36 +- .../setting/layout/setting_tracking_view.xml | 19 +- .../layout/history_bookmark__row_menu.xml | 10 +- .../layout/history_bookmark_menu.xml | 8 +- .../main/res/layouts/tab/layout/tab_menu.xml | 158 +++++-- .../main/res/layouts/tab/layout/tab_view.xml | 63 ++- app/src/main/res/localization.xml | 430 +++++++++++++++++ app/src/main/res/localizer.txt | 12 + app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 3279 -> 2661 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 5825 -> 3916 bytes .../res/mipmap-hdpi/ic_launcher_round.png | Bin 5393 -> 4537 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 2109 -> 1784 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 3550 -> 2516 bytes .../res/mipmap-mdpi/ic_launcher_round.png | Bin 3268 -> 2907 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 4526 -> 3614 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 8286 -> 5372 bytes .../res/mipmap-xhdpi/ic_launcher_round.png | Bin 7660 -> 6441 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 7227 -> 5536 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 14408 -> 8612 bytes .../res/mipmap-xxhdpi/ic_launcher_round.png | Bin 12307 -> 10134 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 10287 -> 7581 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 21929 -> 11979 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.png | Bin 17896 -> 14360 bytes app/src/main/res/values-ur/strings.xml | 434 ++++++++++++++++++ app/src/main/res/values/strings.xml | 6 +- 90 files changed, 1996 insertions(+), 789 deletions(-) create mode 100644 app/src/main/java/com/darkweb/genesissearchengine/dataManager/helpDataModel.java delete mode 100644 app/src/main/java/com/darkweb/genesissearchengine/dataManager/test.java create mode 100644 app/src/main/res/custom-xml/images/xml/ic_baseline_remove_red_eye.xml create mode 100644 app/src/main/res/localization.xml create mode 100644 app/src/main/res/localizer.txt create mode 100644 app/src/main/res/values-ur/strings.xml diff --git a/app/src/main/assets/Help/help.html b/app/src/main/assets/Help/help.html index 4d67ce6f..a049bec4 100644 --- a/app/src/main/assets/Help/help.html +++ b/app/src/main/assets/Help/help.html @@ -29,46 +29,123 @@
-

Note | The following help manual is loaded from local cache. Connect to proxy for viewing latest help repository

+

The following help manual is loaded from local cache. Connect to proxy for viewing latest help repository

-
-
- - Issue 1: Connection Problem +
+ -
-
- Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. +
+
+
  • Checking the network cables and router
  • +
  • Reconnect to Wi-Fi
  • +
  • Restart phone or application
  • -
    -
    -
    - + +
    + +
    +
    + To see connection status with Tor network GOTO +

    Menu Icon (Top-Right) Settings Onion Proxy Status +
    +
    +
    + + +
    +
    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + You can view Tor logs to debug an issue. To do this GOTO +

    Menu Icon (Top-Right) Orbot Logs
    -
    -
    -
    -
    - Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + This happens when we are unable to fetch help manual due to internet connection issue. It can also happen when ISP blocks some of our servers.
    + +
    + +
    +
    + Some times ISP blocks Tor network routing. This issue can be solved by enabling Tor Bridges. To do this GOTO +

    Connection Screen Gear Icon Enable Bridges +
    +
    +
    + +
    + +
    +
    + Tor routing can be blocked in China even when you are using default bridges. This issue can be solved by connecting with Meek bridges. To do this GOTO +

    Connection Screen Gear Icon Enable Bridges Customize bridges Meek-azure (China) +
    +
    +
    + +
    + +
    +
    + You can also provide custom bridges in Genesis. To do this GOTO +

    Connection Screen Gear Icon Enable Bridges Customize bridges Paste custom bridge paste your bridge string +
    +
    +
    + + +
    + +
    +
    + Genesis also provides a vpn from which you can secure data of other applications. To do this GOTO +

    Connection Screen Gear Icon Enable VPN Service +
    +
    +
    + +
    diff --git a/app/src/main/assets/Help/style/cs-help.css b/app/src/main/assets/Help/style/cs-help.css index 5e5ee9c2..c39f6300 100644 --- a/app/src/main/assets/Help/style/cs-help.css +++ b/app/src/main/assets/Help/style/cs-help.css @@ -11,7 +11,46 @@ .hi_info{ margin-top: 30px; - padding-left:3%; + padding-left:15px; + padding-bottom: 12px; + padding-top: 10px; margin-bottom: 30px; + height: auto; border-left: 5px solid #ff9933; } + +.hi_bullets{ + margin-left: 20px; + line-height: 30px; +} + +.hi_card{ +cursor: pointer; +} + +.hi_card_link{ + color: #6699cc; + font-size: 15px; +} + +.hi_issue--color{ + color: #336699; +} + +.hi_arrow--color{ + color: #4080bf; +} + +.hi_card--margin-top{ + margin-top: 2%; +} + +.hi_no_select { + -webkit-touch-callout: none; /* iOS Safari */ + -webkit-user-select: none; /* Safari */ + -khtml-user-select: none; /* Konqueror HTML */ + -moz-user-select: none; /* Firefox */ + -ms-user-select: none; /* Internet Explorer/Edge */ + user-select: none; /* Non-prefixed version, currently + supported by Chrome and Opera */ +} \ No newline at end of file diff --git a/app/src/main/ic_launcher-playstore.png b/app/src/main/ic_launcher-playstore.png index 3faa0f78ea523355f50d99f3c28e0b4c7990af97..6876fb49f13dbf646b8b8d7e418374b7b2200ee1 100644 GIT binary patch literal 28125 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

    +)%yM48FzyQ_NUXHRK#7^9+$UM zIG0)J#1fXcS+q)<_j7Av}d?&coElj>(K_ME>VhRK4`vC`knhvYBA z`zPK5d~i+fyBk?0vtO&~N^W+IPz?*rnOgo%4ev?84WN@i(D_H0KC{+r_w$$wm4EiV zjC*yGk`7Xd(%Mct=A%}RoUZv$1ee7X4*Q^>ap}rI&zbh1NT>SLn`XU_FM2J{QXJkc zbqkHA3~?LrCp#a>_DOSyG<6|C5(2sBIfyN6fBlJgmwuB{J3Mf+#9J9xI_13lM7RCP zC<<#%T<*HpJH9KsxzBjg82$xqzX}c0D7DX#rW7ndA?-7lpcgmHox;hua zGPVL0B-?SLT3fHLq)AWVqMQMIaGOhG1JSl&v_pr1Sy&FI$OoOj88kuD2j2zXntklJ zEvow+SB2)xCCfssXPChKW-}NDfRDzn@iE*pbKXrGE_qKEZzOI$2Yw7JM}8PGk4Tw#6)44vp2ZQ5jb#Lb{O{{$Kz;Fl^8$bmkj(9s|DRq2 k-;M>odII`?c+t8oZBs^E!|O|OJ1I!%xte_0Gt;;K2MNnlD*ylh literal 51238 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 a93;nN+b?phtNG^lX{#GN_^Rp<^?v{xn$ctc diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpController.java index 08bf41e7..c9cb58d7 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpController.java @@ -27,6 +27,8 @@ import java.util.Collections; import java.util.List; import java.util.Objects; +import static com.darkweb.genesissearchengine.appManager.helpManager.helpEnums.eHelpModel.M_IS_LOADED; + public class helpController extends AppCompatActivity { /*Initializations*/ @@ -49,8 +51,8 @@ public class helpController extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.help_view); - initializeAppModel(); initializeViews(); + initializeAppModel(); initializeLocalEventHandlers(); } @@ -58,6 +60,9 @@ public class helpController extends AppCompatActivity { { mHelpModel = new helpModel(this, new helpAdapterCallback()); mHelpModel.onTrigger(helpEnums.eHelpModel.M_LOAD_HELP_DATA,null); + if((boolean)mHelpModel.onTrigger(M_IS_LOADED,null)){ + mProgressBar.setVisibility(View.GONE); + } } private void initializeViews(){ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpEnums.java index 94f7f83c..b520d2e8 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpEnums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpEnums.java @@ -4,7 +4,7 @@ class helpEnums { /*History Manager*/ public enum eHelpModel { - M_LOAD_HELP_DATA + M_LOAD_HELP_DATA, M_IS_LOADED } public enum eHelpModelCallback { diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpModel.java index 441dc3c3..28f7f8d8 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/helpManager/helpModel.java @@ -5,6 +5,8 @@ import com.android.volley.Request; import com.android.volley.RequestQueue; import com.android.volley.toolbox.StringRequest; import com.android.volley.toolbox.Volley; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; import com.darkweb.genesissearchengine.helperManager.eventObserver; import org.json.JSONArray; import org.json.JSONException; @@ -20,6 +22,7 @@ class helpModel private String mJsonPath = CONST_SERVER; private AppCompatActivity mContext; private ArrayList mHelpListModel; + private boolean mIsLoaded = false; public helpModel(AppCompatActivity pContext, eventObserver.eventListener pEvent){ this.mContext = pContext; @@ -28,39 +31,56 @@ class helpModel } private void getHelpJSON(){ + + ArrayList mTempModel = (ArrayList)dataController.getInstance().invokeHelp(dataEnums.eHelpCommands.M_GET_HELP, null); + mHelpListModel.clear(); - StringRequest stringRequest = new StringRequest(Request.Method.GET, mJsonPath, - response -> { - try { - JSONArray jsonArray = new JSONArray(response); + if(mTempModel.size()>0){ + mIsLoaded = true; + mHelpListModel.addAll(mTempModel); + mEvent.invokeObserver(Collections.singletonList(mHelpListModel),helpEnums.eHelpModelCallback.M_LOAD_JSON_RESPONSE_SUCCESS); + }else { + StringRequest stringRequest = new StringRequest(Request.Method.GET, mJsonPath, + response -> { + try { + JSONArray jsonArray = new JSONArray(response); - for (int i = 0; i < jsonArray.length(); i++) { - JSONObject obj = jsonArray.getJSONObject(i); + for (int i = 0; i < jsonArray.length(); i++) { + JSONObject obj = jsonArray.getJSONObject(i); - helpDataModel hero = new helpDataModel( - obj.getString(CONST_HELP_MODEL_HEADER), - obj.getString(CONST_HELP_MODEL_DESCRIPTION), - obj.getString(CONST_HELP_MODEL_ICON)); - mHelpListModel.add(hero); + helpDataModel hero = new helpDataModel( + obj.getString(CONST_HELP_MODEL_HEADER), + obj.getString(CONST_HELP_MODEL_DESCRIPTION), + obj.getString(CONST_HELP_MODEL_ICON)); + mHelpListModel.add(hero); + dataController.getInstance().invokeHelp(dataEnums.eHelpCommands.M_SET_HELP, Collections.singletonList(mHelpListModel)); + } + mEvent.invokeObserver(Collections.singletonList(mHelpListModel),helpEnums.eHelpModelCallback.M_LOAD_JSON_RESPONSE_SUCCESS); + } catch (JSONException e) { + mEvent.invokeObserver(Collections.singletonList(mHelpListModel),helpEnums.eHelpModelCallback.M_LOAD_JSON_RESPONSE_FAILURE); + e.printStackTrace(); } - mEvent.invokeObserver(Collections.singletonList(mHelpListModel),helpEnums.eHelpModelCallback.M_LOAD_JSON_RESPONSE_SUCCESS); - } catch (JSONException e) { + }, + error -> { mEvent.invokeObserver(Collections.singletonList(mHelpListModel),helpEnums.eHelpModelCallback.M_LOAD_JSON_RESPONSE_FAILURE); - e.printStackTrace(); - } - }, - error -> { - mEvent.invokeObserver(Collections.singletonList(mHelpListModel),helpEnums.eHelpModelCallback.M_LOAD_JSON_RESPONSE_FAILURE); - }); + }); - RequestQueue requestQueue = Volley.newRequestQueue(mContext/*, new ProxiedHurlStack()*/); - requestQueue.add(stringRequest); + RequestQueue requestQueue = Volley.newRequestQueue(mContext/*, new ProxiedHurlStack()*/); + requestQueue.add(stringRequest); + } + } + + private boolean IsLoaded(){ + return mIsLoaded; } public Object onTrigger(helpEnums.eHelpModel pCommands, List pData){ if(pCommands.equals(helpEnums.eHelpModel.M_LOAD_HELP_DATA)){ getHelpJSON(); } + else if(pCommands.equals(helpEnums.eHelpModel.M_IS_LOADED)){ + return IsLoaded(); + } 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 309cd0ed..af6957d4 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 @@ -242,7 +242,6 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, mTheme), enums.etype.ON_UPDATE_THEME); event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id, mTheme), enums.etype.on_update_favicon); event.invokeObserver(Arrays.asList(null,mSessionID), enums.etype.on_page_loaded); - onRedrawPixel(); } } } @@ -324,6 +323,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele return GeckoResult.fromValue(AllowOrDeny.DENY); } else if(var1.uri.equals("about:blank") && mIsLoaded){ + event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, mTheme), enums.etype.ON_EXPAND_TOP_BAR); return GeckoResult.fromValue(AllowOrDeny.ALLOW); } else if(var1.target==2){ @@ -341,6 +341,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.MediaDele event.invokeObserver(Arrays.asList(var1.uri,mSessionID), enums.etype.start_proxy); event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID), enums.etype.search_update); checkApplicationRate(); + event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, mTheme), enums.etype.ON_EXPAND_TOP_BAR); return GeckoResult.fromValue(AllowOrDeny.ALLOW); }else { return GeckoResult.fromValue(AllowOrDeny.DENY); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/hintManager/hintAdapter.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/hintManager/hintAdapter.java index 82cf6251..4f0abedf 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/hintManager/hintAdapter.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/hintManager/hintAdapter.java @@ -152,7 +152,7 @@ public class hintAdapter extends RecyclerView.Adapter= Build.VERSION_CODES.M) { @@ -186,8 +194,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); window.setStatusBarColor(ContextCompat.getColor(this, R.color.c_text_v3)); } - mSplashScreen.setAlpha(0f); - mSplashScreen.setVisibility(View.GONE); + mHomeViewController.splashScreenDisableInstant(); onLoadTabOnResume(); mSearchLock.setColorFilter(ContextCompat.getColor(this, R.color.c_lock_tint)); } @@ -328,7 +335,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba mTopBar = findViewById(R.id.pTopbar); mBackSplash = findViewById(R.id.pTopImage); mConnectButton = findViewById(R.id.Connect); - mNewTab = findViewById(R.id.pTabCounter); + mNewTab = findViewById(R.id.pNewTab); mSearchEngineBar = findViewById(R.id.pSearchEngineBar); mFindText = findViewById(R.id.pFindText); mFindCount = findViewById(R.id.pFindCount); @@ -374,10 +381,19 @@ public class homeController extends AppCompatActivity implements ComponentCallba @Override public boolean dispatchTouchEvent(MotionEvent event) { - mSwipeDirectionDetector.onTouchEvent(event); + if(inSignatureArea(event)){ + try{ + mSwipeDirectionDetector.onTouchEvent(event); + }catch (Exception ignored){ } + } return super.dispatchTouchEvent(event); } + public boolean inSignatureArea(MotionEvent ev) { + float mEventY = ev.getY(); + return mEventY>mTopBar.getY()+mTopBar.getHeight() && mEventY { + if(event.getAction() == MotionEvent.ACTION_DOWN){ + onOpenTabViewBoundary(null); + } + return false; + }); + + mFindText.addTextChangedListener(new TextWatcher() { @Override @@ -596,6 +618,11 @@ public class homeController extends AppCompatActivity implements ComponentCallba if(status.sSearchSuggestionStatus && isSuggestionChanged){ mSuggestions = (ArrayList)dataController.getInstance().invokeSuggestions(dataEnums.eSuggestionCommands.M_GET_SUGGESTIONS, Collections.singletonList(mSearchbar.getText().toString())); if(mSuggestions.size()>0){ + if(!isSuggestionSearchOpened && mSearchbar.isFocused()){ + if(Objects.requireNonNull(mHintListView.getAdapter()).getItemCount()>0){ + mHomeViewController.onUpdateSearchEngineBar(true, 0); + } + } if(mHintListView.getAdapter()==null){ initSuggestionView(mSuggestions); mSearchEngineBar.setVisibility(View.VISIBLE); @@ -604,12 +631,11 @@ public class homeController extends AppCompatActivity implements ComponentCallba mSearchEngineBar.setVisibility(View.VISIBLE); mSearchEngineBar.setAlpha(1); mEdittextChanged.removeCallbacks(postToServerRunnable); - mEdittextChanged.postDelayed(postToServerRunnable, 50); - } - - if(!isSuggestionSearchOpened && mSearchbar.isFocused()){ - if(Objects.requireNonNull(mHintListView.getAdapter()).getItemCount()>0){ - mHomeViewController.onUpdateSearchEngineBar(true, 0); + if(!mSearchBarLoading){ + mSearchBarLoading = true; + mEdittextChanged.postDelayed(postToServerRunnable, 0); + }else{ + mEdittextChanged.postDelayed(postToServerRunnable, 100); } } } @@ -677,6 +703,8 @@ public class homeController extends AppCompatActivity implements ComponentCallba private Handler mEdittextChanged = new Handler(); private Runnable postToServerRunnable = () -> { onUpdateSuggestionList(mSuggestions); + final Handler handler = new Handler(); + handler.postDelayed(() -> mSearchBarLoading = false, 110); }; public void onSearchBarInvoked(View view){ @@ -720,7 +748,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba } public void postNewTabAnimation(boolean isKeyboardOpenedTemp, boolean isKeyboardOpened){ - mGeckoClient.onRedrawPixel(); initializeGeckoView(true, true); if(status.sOpenURLInNewTab){ onLoadURL(helperMethod.getDomainName(status.sSettingSearchStatus)); @@ -736,7 +763,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba } public void postNewLinkTabAnimation(String url){ - mGeckoClient.onRedrawPixel(); initializeGeckoView(true, true); mHomeViewController.progressBarReset(); mHomeViewController.onUpdateSearchBar(url,false,true); @@ -752,10 +778,10 @@ public class homeController extends AppCompatActivity implements ComponentCallba } public void onOpenTabViewBoundary(View view){ + mGeckoClient.onRedrawPixel(); mNewTab.setPressed(true); helperMethod.openActivity(tabController.class, constants.CONST_LIST_HISTORY, homeController.this,true); overridePendingTransition(R.anim.popup_anim_in, R.anim.popup_anim_out); - mGeckoClient.onRedrawPixel(); } public void onLockSecure(View view){ @@ -835,9 +861,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba final Handler handler = new Handler(); handler.postDelayed(() -> mGeckoClient.onRedrawPixel(), 300); - if(mSplashScreen.getAlpha()>0){ - mHomeViewController.initSplashOrientation(); - } if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) { mHomeViewController.setOrientation(true); if(mGeckoClient.getFullScreenStatus()) @@ -851,6 +874,9 @@ public class homeController extends AppCompatActivity implements ComponentCallba mHomeViewController.onSetBannerAdMargin(true,(boolean)pluginController.getInstance().onAdsInvoke(null, pluginEnums.eAdManager.M_IS_ADVERT_LOADED)); } } + if(mSplashScreen.getAlpha()>0){ + mHomeViewController.initSplashOrientation(); + } } @Override @@ -1224,14 +1250,14 @@ public class homeController extends AppCompatActivity implements ComponentCallba else if(e_type.equals(enums.etype.on_url_load)){ if(status.sSettingIsAppRedirected){ mHomeViewController.onPageFinished(); + status.sSettingIsAppRedirected = false; onLoadURL(status.sSettingRedirectStatus); status.sSettingRedirectStatus = strings.GENERIC_EMPTY_STR; }else { if(status.mThemeApplying){ mHomeViewController.onUpdateSearchBar(data.get(0).toString(),false, false); - mSplashScreen.setAlpha(0f); - mSplashScreen.setVisibility(View.GONE); + mHomeViewController.splashScreenDisableInstant(); onLoadTabOnResume(); } onLoadURL(data.get(0).toString()); @@ -1245,8 +1271,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba status.sSettingRedirectStatus = strings.GENERIC_EMPTY_STR; }else { if(status.mThemeApplying){ - mSplashScreen.setAlpha(0f); - mSplashScreen.setVisibility(View.GONE); + mHomeViewController.splashScreenDisableInstant(); onLoadTabOnResume(); } else if(status.sSettingIsAppStarted){ @@ -1328,7 +1353,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba @Override public Object invokeObserver(List data, Object e_type) { - if(e_type.equals(enums.etype.ON_LOAD_REQUEST)){ + if(e_type.equals(enums.etype.ON_EXPAND_TOP_BAR)){ mAppBar.setExpanded(true,true); } else if(e_type.equals(enums.etype.progress_update)){ @@ -1429,6 +1454,11 @@ public class homeController extends AppCompatActivity implements ComponentCallba else if(e_type.equals(dataEnums.eTabCommands.M_UPDATE_PIXEL)){ try{ dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_UPDATE_PIXEL, Arrays.asList(data.get(1), mGeckoView.capturePixels())); + final Handler handler = new Handler(); + handler.postDelayed(() -> + { + dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_UPDATE_PIXEL, Arrays.asList(data.get(1), mGeckoView.capturePixels())); + }, 500); }catch (Exception EX){ EX.printStackTrace(); } 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 f6c987a1..344ae339 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 @@ -13,6 +13,7 @@ import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.ColorDrawable; import android.graphics.drawable.Drawable; import android.graphics.drawable.GradientDrawable; +import android.graphics.drawable.InsetDrawable; import android.graphics.drawable.StateListDrawable; import android.os.Build; import android.os.Handler; @@ -42,7 +43,6 @@ import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.darkweb.genesissearchengine.widget.progressBar.AnimatedProgressBar; import com.example.myapplication.R; -import com.google.android.gms.ads.AdSize; import com.google.android.gms.ads.AdView; import org.mozilla.geckoview.GeckoView; import org.torproject.android.service.wrapper.orbotLocalConstants; @@ -62,7 +62,7 @@ class homeViewController /*ViewControllers*/ private com.google.android.material.appbar.AppBarLayout mAppBar; - private FrameLayout mWebviewContainer; + private ConstraintLayout mWebviewContainer; private AnimatedProgressBar mProgressBar; private editTextManager mSearchbar; private ConstraintLayout mSplashScreen; @@ -94,7 +94,7 @@ class homeViewController private Callable mLogs = null; private boolean isLandscape = false; - void initialization(eventObserver.eventListener event, AppCompatActivity context, Button mNewTab, FrameLayout 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, FrameLayout pTopLayout, ImageButton pVoiceInput, ImageButton pMenu, FrameLayout pNestedScroll, ImageView pBlocker, ImageView pBlockerFullSceen, View mSearchEngineBar, TextView pCopyright, RecyclerView pHistListView, com.google.android.material.appbar.AppBarLayout pAppBar, ImageButton pOrbotLogManager, ConstraintLayout pInfoLandscape, ConstraintLayout pInfoPortrait){ + 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, FrameLayout pTopLayout, ImageButton pVoiceInput, ImageButton pMenu, FrameLayout pNestedScroll, ImageView pBlocker, ImageView pBlockerFullSceen, View mSearchEngineBar, TextView pCopyright, RecyclerView pHistListView, com.google.android.material.appbar.AppBarLayout pAppBar, ImageButton pOrbotLogManager, ConstraintLayout pInfoLandscape, ConstraintLayout pInfoPortrait){ this.mContext = context; this.mProgressBar = progressBar; this.mSearchbar = searchbar; @@ -156,7 +156,7 @@ class homeViewController } public void initSplashOrientation(){ - if(!isLandscape){ + if(isLandscape){ this.mInfoPortrait.setVisibility(View.GONE); this.mInfoLandscape.setVisibility(View.VISIBLE); mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.landing_ease_blue_splash)); @@ -171,7 +171,7 @@ class homeViewController if(!pStatus){ this.mVoiceInput.animate().setDuration(0).alpha(0).withEndAction(() -> { mVoiceInput.setVisibility(View.GONE); - ((FrameLayout)mNewTab.getParent()).setVisibility(View.VISIBLE); + mNewTab.setVisibility(View.VISIBLE); mMenu.setVisibility(View.VISIBLE); mSearchbar.setPadding(mSearchbar.getPaddingLeft(),0,helperMethod.pxFromDp(15),0); @@ -195,7 +195,7 @@ class homeViewController mVoiceInput.setVisibility(View.VISIBLE); }, 0); - ((FrameLayout)this.mNewTab.getParent()).setVisibility(View.GONE); + mNewTab.setVisibility(View.GONE); this.mMenu.setVisibility(View.GONE); //mSearchbar.setPadding(mSearchbar.getPaddingLeft(),0,helperMethod.pxFromDp(40),0); @@ -288,8 +288,6 @@ class homeViewController public void initSplashLoading(){ - mLoading.setAnimation(helperMethod.getRotationAnimation()); - mLoading.setAnimation(helperMethod.getRotationAnimation()); mLoadingText.setAlpha(0); mLoadingText.setVisibility(View.VISIBLE); mLoadingText.animate().setStartDelay(0).alpha(1); @@ -311,11 +309,11 @@ class homeViewController mOrbotLogManager.setEnabled(true); }, 700); - mConnectButton.animate().setDuration(350).alpha(0.2f).withEndAction(() -> { + mConnectButton.animate().setDuration(350).alpha(0.4f).withEndAction(() -> { mCopyright.setVisibility(View.GONE); initSplashLoading(); }); - mGatewaySplash.animate().setDuration(350).alpha(0.2f); + mGatewaySplash.animate().setDuration(350).alpha(0.4f); } private void initSplashScreen(){ @@ -372,6 +370,14 @@ class homeViewController mSplashScreen.bringToFront(); splashScreenDisable(); } + + public void splashScreenDisableInstant() { + mSplashScreen.setAlpha(0f); + mSplashScreen.setVisibility(View.GONE); + mSplashScreen.setVisibility(View.GONE); + mBlocker.setEnabled(false); + } + private boolean mIsAnimating = false; public void splashScreenDisable(){ mTopBar.setAlpha(1); @@ -386,6 +392,7 @@ class homeViewController mSplashScreen.setClickable(false); mSplashScreen.setFocusable(false); mSearchbar.setEnabled(true); + mBlocker.setEnabled(false); }); mEvent.invokeObserver(null, enums.etype.M_WELCOME_MESSAGE); mOrbotLogManager.setClickable(false); @@ -519,11 +526,9 @@ class homeViewController handler.postDelayed(() -> { mWebviewContainer.clearAnimation(); - mWebviewContainer.setPadding(0,AdSize.SMART_BANNER.getHeightInPixels(mContext)+1,0,0); mProgressBar.bringToFront(); }, 250); }else{ - mWebviewContainer.setPadding(0,0,0,0); mBannerAds.setVisibility(View.GONE); } } @@ -583,21 +588,25 @@ class homeViewController GradientDrawable gradientDrawable1 = new GradientDrawable(); gradientDrawable1.setColor(helperMethod.invertedShadeColor(mColor,0.85f)); gradientDrawable1.setCornerRadius(helperMethod.pxFromDp(4)); - gradientDrawable1.setStroke(helperMethod.pxFromDp(2), helperMethod.invertedGrayColor(mColor)); + gradientDrawable1.setStroke(helperMethod.pxFromDp(2), mColor); GradientDrawable gradientDrawable2 = new GradientDrawable(); gradientDrawable2.setColor(helperMethod.invertedShadeColor(mColor,0.85f)); gradientDrawable2.setCornerRadius(helperMethod.pxFromDp(4)); - gradientDrawable2.setStroke(helperMethod.pxFromDp(2), mColor); + gradientDrawable2.setStroke(helperMethod.pxFromDp(2), helperMethod.invertedGrayColor(mColor)); StateListDrawable states = new StateListDrawable(); - states.addState(new int[] {android.R.attr.state_pressed}, gradientDrawable2); - states.addState(new int[] { }, gradientDrawable1); + InsetDrawable mInsetDrawable1 = new InsetDrawable(gradientDrawable1, helperMethod.pxFromDp(8), helperMethod.pxFromDp(8), helperMethod.pxFromDp(8), helperMethod.pxFromDp(8)); + InsetDrawable mInsetDrawable2 = new InsetDrawable(gradientDrawable2, helperMethod.pxFromDp(8), helperMethod.pxFromDp(8), helperMethod.pxFromDp(8), helperMethod.pxFromDp(8)); + + states.addState(new int[] {android.R.attr.state_pressed}, mInsetDrawable1); + states.addState(new int[] { }, mInsetDrawable2); mNewTab.setBackground(states); mMenu.setColorFilter(helperMethod.invertedGrayColor(mColor)); mVoiceInput.setColorFilter(helperMethod.invertedGrayColor(mColor)); + mVoiceInput.setBackground(mGradientDrawable); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { mContext.getWindow().setStatusBarColor(Color.parseColor(pTheme)); @@ -629,6 +638,7 @@ class homeViewController drawable = Drawable.createFromXml(res, res.getXml(R.xml.gx_generic_input)); mSearchbar.setBackground(drawable); + mVoiceInput.setBackground(drawable); } catch (Exception ignored) { } @@ -831,11 +841,11 @@ class homeViewController mTopBar.setVisibility(View.GONE); mBannerAds.setVisibility(View.GONE); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mWebviewContainer.getLayoutParams(); + ConstraintLayout.MarginLayoutParams params = (ConstraintLayout.MarginLayoutParams) mWebviewContainer.getLayoutParams(); params.setMargins(0, helperMethod.pxFromDp(0), 0, 0); mWebviewContainer.setLayoutParams(params); - ViewGroup.MarginLayoutParams params1 = (ViewGroup.MarginLayoutParams) mWebviewContainer.getLayoutParams(); + ConstraintLayout.MarginLayoutParams params1 = (ConstraintLayout.MarginLayoutParams) mWebviewContainer.getLayoutParams(); params1.setMargins(0, 0, 0,0); mGeckoView.setLayoutParams(params1); @@ -858,11 +868,11 @@ class homeViewController mBannerAds.setVisibility(View.GONE); mEvent.invokeObserver(Collections.singletonList(!isLandscape), enums.etype.on_init_ads); - ViewGroup.MarginLayoutParams params = (ViewGroup.MarginLayoutParams) mWebviewContainer.getLayoutParams(); + ConstraintLayout.MarginLayoutParams params = (ConstraintLayout.MarginLayoutParams) mWebviewContainer.getLayoutParams(); params.setMargins(0, 0, 0,0); mWebviewContainer.setLayoutParams(params); - ViewGroup.MarginLayoutParams params1 = (ViewGroup.MarginLayoutParams) mWebviewContainer.getLayoutParams(); + ConstraintLayout.MarginLayoutParams params1 = (ConstraintLayout.MarginLayoutParams) mWebviewContainer.getLayoutParams(); params1.setMargins(0, 0, 0,helperMethod.pxFromDp(0)); mGeckoView.setLayoutParams(params1); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageModel.java index 1fe904c8..52e9a7e3 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageModel.java @@ -31,6 +31,7 @@ class languageModel mSupportedLanaguage.add(new languageDataModel("韓国語","Korean", "ko","Kr")); mSupportedLanaguage.add(new languageDataModel("Português","Portuguese (Portugal)", "pt","Pt")); mSupportedLanaguage.add(new languageDataModel("Română","Romanian", "ro","Ro")); + mSupportedLanaguage.add(new languageDataModel("Urdu (اردو)","Urdu", "ur","Ur")); mSupportedLanaguage.add(new languageDataModel("русский","Russian", "ru","Ru")); mSupportedLanaguage.add(new languageDataModel("ไทย","Thai", "th","Th")); mSupportedLanaguage.add(new languageDataModel("Türk","Turkish", "tr","Tr")); 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 24225f18..fa96d8ec 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 @@ -131,7 +131,7 @@ public class orbotLogController extends AppCompatActivity { @Override public boolean onSwipe(Direction direction) { - if (direction==Direction.left || direction==Direction.right){ + if (direction==Direction.right){ finish(); overridePendingTransition(R.anim.push_anim_in, R.anim.push_anim_out); } @@ -255,8 +255,18 @@ public class orbotLogController extends AppCompatActivity { @Override public boolean dispatchTouchEvent(MotionEvent event) { - mSwipeDirectionDetector.onTouchEvent(event); + if(inSignatureArea(event)){ + try{ + mSwipeDirectionDetector.onTouchEvent(event); + }catch (Exception ignored){ } + } return super.dispatchTouchEvent(event); } + public boolean inSignatureArea(MotionEvent ev) { + float mEventY = ev.getY(); + return mEventY>helperMethod.pxFromDp(300) || ev.getX()helperMethod.pxFromDp(500) || mEventX>helperMethod.getScreenWidth(this)-helperMethod.pxFromDp(80); + } + } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabAdapter.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabAdapter.java index 16a615c1..e87a743d 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabAdapter.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabAdapter.java @@ -3,6 +3,7 @@ package com.darkweb.genesissearchengine.appManager.tabManager; import android.content.res.Resources; import android.graphics.Color; import android.graphics.drawable.Drawable; +import android.os.Handler; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -114,6 +115,17 @@ public class tabAdapter extends RecyclerView.Adapter notifyItemChanged(mModelList.size()-1); } + private void onRemoveAll(){ + int mSize = mModelList.size()-1; + for(int mCounter=0;mCounter mEvent.invokeObserver(null, tabEnums.eTabAdapterCallback.ON_INIT_TAB_COUNT); } + private int getSelectionSize(){ + return mSelectedList.size(); + } + /*View Holder Extensions*/ class listViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener { @@ -215,7 +231,12 @@ public class tabAdapter extends RecyclerView.Adapter } mDescription.setText(model.getSession().getCurrentURL()); mDate.setText(model.getDate()); - mWebThumbnail.setImageBitmap(model.getBitmap()); + + final Handler handler = new Handler(); + handler.postDelayed(() -> + { + mWebThumbnail.setImageBitmap(model.getBitmap()); + }, 500); if(mSelectedList.contains(model.getSession().getSessionID())){ onSelectionCreate(mSelectedView); @@ -307,6 +328,7 @@ public class tabAdapter extends RecyclerView.Adapter } mEvent.invokeObserver(Collections.singletonList(this.getLayoutPosition()), tabEnums.eTabAdapterCallback.ON_REMOVE_TAB_VIEW); + mEvent.invokeObserver(null, tabEnums.eTabAdapterCallback.ON_SHOW_UNDO_DIALOG); } else if(v.getId() == R.id.pItemSelectionMenuButton){ onEnableLongClickMenu(); @@ -333,6 +355,7 @@ public class tabAdapter extends RecyclerView.Adapter } } + public Object onTrigger(tabEnums.eTabAdapterCommands pCommands, List pData){ if(pCommands.equals(tabEnums.eTabAdapterCommands.M_SELECTION_MENU_SHOWING)){ return isSelectionMenuShowing(); @@ -346,8 +369,12 @@ public class tabAdapter extends RecyclerView.Adapter initFirstRow(); }else if(pCommands.equals(tabEnums.eTabAdapterCommands.REINIT_DATA)){ reInitData((ArrayList)pData.get(0)); - }else if(pCommands.equals(tabEnums.eTabAdapterCommands.NOTIFY_sWIPE)){ + }else if(pCommands.equals(tabEnums.eTabAdapterCommands.NOTIFY_SWIPE)){ onNotifyItemSwiped((int)pData.get(0)); + }else if(pCommands.equals(tabEnums.eTabAdapterCommands.GET_SELECTION_SIZE)){ + return getSelectionSize(); + }else if(pCommands.equals(tabEnums.eTabAdapterCommands.REMOVE_ALL)){ + onRemoveAll(); } return null; } 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 f66282ac..90935b76 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 @@ -1,13 +1,14 @@ package com.darkweb.genesissearchengine.appManager.tabManager; +import android.annotation.SuppressLint; import android.graphics.Canvas; import android.os.Bundle; +import android.util.Log; +import android.view.MotionEvent; import android.view.View; import android.widget.Button; -import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; @@ -29,7 +30,6 @@ import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.darkweb.genesissearchengine.pluginManager.pluginController; import com.darkweb.genesissearchengine.pluginManager.pluginEnums; import com.example.myapplication.R; - import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -41,7 +41,6 @@ public class tabController extends AppCompatActivity /*Private Views*/ private Button mTabs; private ImageView mRemoveSelection; - private FrameLayout mTabsContainer; private ImageButton mMenuButton; private ImageButton mClearSelection; private View mPopupUndo; @@ -73,6 +72,7 @@ public class tabController extends AppCompatActivity initializeViews(); initializeList(); initSwipe(); + initializeLocalEventHandlers(); } public void initializeActivity(){ @@ -87,16 +87,24 @@ public class tabController extends AppCompatActivity mRecycleView = findViewById(R.id.pRecycleView); mTabs = findViewById(R.id.pTabs); mRemoveSelection = findViewById(R.id.pRemoveSelection); - mTabsContainer = findViewById(R.id.pTabsContainer); mMenuButton = findViewById(R.id.pMenuButton); mClearSelection = findViewById(R.id.pClearSelection); mPopupUndo = findViewById(R.id.pPopupUndo); mSelectionCount = findViewById(R.id.pSelectionCount); mBlocker = findViewById(R.id.pBlocker); - mtabViewController = new tabViewController(this, mTabs, mRemoveSelection, mTabsContainer, mMenuButton, mClearSelection, mPopupUndo, mSelectionCount, mBlocker); + mtabViewController = new tabViewController(this, mTabs, mRemoveSelection, mMenuButton, mClearSelection, mPopupUndo, mSelectionCount, mBlocker); } + @SuppressLint("ClickableViewAccessibility") + public void initializeLocalEventHandlers(){ + mTabs.setOnTouchListener((v, event) -> { + if(event.getAction() == MotionEvent.ACTION_DOWN){ + onBackPressedInvoked(null); + } + return false; + }); + } public void initializeList(){ LinearLayoutManager layoutManager = new LinearLayoutManager(tabController.this); tabAdapter adapter = new tabAdapter(mListModel.getList(),new adapterCallback()); @@ -113,6 +121,7 @@ public class tabController extends AppCompatActivity mRecycleView.setDrawingCacheEnabled(true); mRecycleView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); mRecycleView.setLayoutManager(new LinearLayoutManager(tabController.this)); + initTabCount(); } /*Listeners*/ @@ -127,9 +136,12 @@ public class tabController extends AppCompatActivity public void onSwiped(RecyclerView.ViewHolder viewHolder, int direction) { int position = viewHolder.getAdapterPosition(); - onClearTabBackup(); - onInitRemoveView(position, true); - mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.NOTIFY_sWIPE, Collections.singletonList(position)); + mListModel.onClearBackupWithoutClose(); + boolean mStatus = onInitRemoveView(position, true); + if(mStatus){ + mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.NOTIFY_SWIPE, Collections.singletonList(position)); + } + onShowUndoDialog(); } @Override @@ -146,25 +158,28 @@ public class tabController extends AppCompatActivity public void onRemoveTab(int pIndex){ mListModel.onRemoveTab(pIndex); if(mListModel.getList().size()<1){ - mRecycleView.animate().setStartDelay(150).alpha(0); + mRecycleView.animate().setStartDelay(250).alpha(0); } initTabCount(); mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.INIT_FIRST_ROW, null); } - public void onInitRemoveView(int pIndex, boolean pCreateBackup){ + public boolean onInitRemoveView(int pIndex, boolean pCreateBackup){ mListModel.onRemoveTab(pIndex); mListModel.getList().remove(pIndex); - if(mListModel.getList().size()<1){ - mRecycleView.animate().setStartDelay(150).alpha(0); - } initTabCount(); - mTabAdapter.notifyItemRangeChanged(pIndex, mTabAdapter.getItemCount() - pIndex); + if(mListModel.getList().size()<1){ + mRecycleView.animate().setStartDelay(250).alpha(0).withEndAction(() -> mTabAdapter.notifyDataSetChanged()); + return false; + }else{ + mTabAdapter.notifyItemRangeChanged(pIndex, mTabAdapter.getItemCount() - pIndex); + return true; + } } public void initTabCount() { - mtabViewController.onTrigger(tabEnums.eTabViewCommands.INIT_TAB_COUNT, null); + mtabViewController.onTrigger(tabEnums.eTabViewCommands.INIT_TAB_COUNT, Collections.singletonList(mListModel.getList().size())); mHomeController.initTabCount(); } @@ -183,17 +198,25 @@ public class tabController extends AppCompatActivity } public void onRestoreTab(View view){ + Log.i("FUCKSSS","FUCKSSS1 : " + (mPopupUndo.findViewById(R.id.pBlockerUndo).getVisibility()==View.VISIBLE)); + mPopupUndo.findViewById(R.id.pBlockerUndo).setVisibility(View.VISIBLE); + mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_HIDE_UNDO_DIALOG, null); + + if(mRecycleView.getAlpha()==0){ + initializeList(); + mRecycleView.animate().cancel(); + mRecycleView.setVisibility(View.VISIBLE); + mRecycleView.animate().setDuration(250).alpha(1); + } + ArrayList mBackup = mListModel.onLoadBackup(); mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.REINIT_DATA, Collections.singletonList(mBackup)); - mListModel.onClearBackupWithoutClose(); initTabCount(); - mRecycleView.animate().cancel(); - mRecycleView.animate().alpha(1); } public void onShowUndoDialog(){ - mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_SHOW_UNDO_DIALOG, null); + mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_SHOW_UNDO_DIALOG, Collections.singletonList(mListModel.getList().size())); } public void onClearTabBackup(){ @@ -219,7 +242,18 @@ public class tabController extends AppCompatActivity } public void onRemoveSelection(View view) { - mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.M_REMOVE_ALL_SELECTION, null); + int mSelectionSize = (int)mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.GET_SELECTION_SIZE,null); + if(mSelectionSize >= mListModel.getList().size()){ + mRecycleView.animate().setStartDelay(250).alpha(0).withEndAction(() -> { + mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.M_REMOVE_ALL_SELECTION, null); + onShowUndoDialog(); + }); + }else { + mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.M_REMOVE_ALL_SELECTION, null); + } + + mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_SHOW_SELECTION_MENU, Arrays.asList(false,0)); + mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_HIDE_SELECTION, null); } public void onClearSelection(View view) { @@ -243,17 +277,16 @@ public class tabController extends AppCompatActivity onNewTabInvoked(); } else if(pView.getId() == R.id.pCloseTab){ - mtabViewController.onTrigger(tabEnums.eTabViewCommands.M_DISMISS_MENU, null); - int mCounterActual = mListModel.getList().size(); - for(int mCounter=0;mCounterActual>0;mCounter++){ - onInitRemoveView(mCounter, true); - mCounterActual -= 1; - } + mRecycleView.animate().setDuration(250).alpha(0).withEndAction(() -> { + onClearTabBackup(); + mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.REMOVE_ALL, null); + initTabCount(); + }); } else if(pView.getId() == R.id.pOpenSetting){ - mtabViewController.onTrigger(tabEnums.eTabViewCommands.M_DISMISS_MENU, null); helperMethod.openActivity(settingHomeController.class, constants.CONST_LIST_HISTORY, this,true); } + mtabViewController.onTrigger(tabEnums.eTabViewCommands.M_DISMISS_MENU, null); } @Override @@ -331,14 +364,14 @@ public class tabController extends AppCompatActivity mHomeController.onLoadTab((geckoSession)data.get(0),(boolean)data.get(1)); } else if(e_type.equals(tabEnums.eTabAdapterCallback.ON_REMOVE_TAB_VIEW)){ - onClearTabBackup(); + mListModel.onClearBackupWithoutClose(); onInitRemoveView((Integer) data.get(0), true); } else if(e_type.equals(tabEnums.eTabAdapterCallback.ON_REMOVE_TAB_VIEW_RETAIN_BACKUP)){ onInitRemoveView((Integer) data.get(0), false); } else if(e_type.equals(tabEnums.eTabAdapterCallback.ON_SHOW_UNDO_DIALOG)){ - onShowUndoDialog(); + mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_SHOW_UNDO_DIALOG, Collections.singletonList(mListModel.getList().size())); } else if(e_type.equals(tabEnums.eTabAdapterCallback.ON_SHOW_SELECTION_MENU)){ mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_SHOW_SELECTION_MENU, data); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabEnums.java index fa3cb405..8268752a 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabEnums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabEnums.java @@ -8,7 +8,7 @@ public class tabEnums } public enum eTabAdapterCommands { - M_SELECTION_MENU_SHOWING, M_REMOVE_ALL_SELECTION, M_CLEAR_ALL_SELECTION, ENABLE_LONG_CLICK_MENU, INIT_FIRST_ROW, REINIT_DATA, NOTIFY_sWIPE + M_SELECTION_MENU_SHOWING, M_REMOVE_ALL_SELECTION, M_CLEAR_ALL_SELECTION, ENABLE_LONG_CLICK_MENU, INIT_FIRST_ROW, REINIT_DATA, NOTIFY_SWIPE, GET_SELECTION_SIZE, REMOVE_ALL } public enum eTabAdapterCallback { diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabViewController.java index 29b6badc..cf800d44 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabViewController.java @@ -11,7 +11,6 @@ import android.graphics.drawable.ColorDrawable; import android.os.Build; import android.os.Handler; import android.view.LayoutInflater; -import android.view.MotionEvent; import android.view.View; import android.view.Window; import android.view.WindowManager; @@ -20,16 +19,13 @@ import android.widget.Button; import android.widget.FrameLayout; import android.widget.ImageButton; import android.widget.ImageView; -import android.widget.LinearLayout; import android.widget.PopupWindow; import android.widget.TextView; - import androidx.appcompat.app.AppCompatActivity; import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; - import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.dataManager.dataController; import com.darkweb.genesissearchengine.dataManager.dataEnums; @@ -45,7 +41,6 @@ class tabViewController private PopupWindow mTabOptionMenu = null; private Button mTabs; private ImageView mRemoveSelection; - private FrameLayout mTabsContainer; private ImageButton mMenuButton; private ImageButton mClearSelection; private View mToastLayoutRoot; @@ -58,12 +53,11 @@ class tabViewController /*Initializations*/ - tabViewController(AppCompatActivity mContext, Button pTabs, ImageView pRemoveSelection, FrameLayout pTabsContainer, ImageButton pMenuButton, ImageButton pClearSelection, View pToastLayoutRoot, TextView pSelectionCount, ImageView pBlocker) + tabViewController(AppCompatActivity mContext, Button pTabs, ImageView pRemoveSelection, ImageButton pMenuButton, ImageButton pClearSelection, View pToastLayoutRoot, TextView pSelectionCount, ImageView pBlocker) { this.mContext = mContext; this.mTabs = pTabs; this.mRemoveSelection = pRemoveSelection; - this.mTabsContainer = pTabsContainer; this.mMenuButton = pMenuButton; this.mClearSelection = pClearSelection; this.mToastLayoutRoot = pToastLayoutRoot; @@ -71,14 +65,9 @@ class tabViewController this.mBlocker = pBlocker; initPostUI(); - initUI(); onHoldInteraction(); } - private void initUI(){ - initTabCount(); - } - @SuppressLint("ClickableViewAccessibility") public void onHoldInteraction(){ final Handler handler = new Handler(); @@ -88,8 +77,8 @@ class tabViewController }, 350); } - private void initTabCount(){ - mTabs.setText((((int)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_TOTAL_TAB, null))+ strings.GENERIC_EMPTY_STR)); + private void initTabCount(int pCount){ + mTabs.setText(String.valueOf(pCount)); } private void initPostUI(){ @@ -134,7 +123,6 @@ class tabViewController mSelectionCount.setText(0 + " Selected"); } - mTabsContainer.setVisibility(View.GONE); mMenuButton.setVisibility(View.GONE); mSelectionCount.setVisibility(View.VISIBLE); mClearSelection.setVisibility(View.VISIBLE); @@ -147,25 +135,29 @@ class tabViewController mRemoveSelection.setVisibility(View.GONE); } mSelectionCount.setText(pCount + " Selected"); + mTabs.setAlpha(0); } private void onHideSelectionMenu() { mSelectionCount.setVisibility(View.GONE); mRemoveSelection.setVisibility(View.GONE); mClearSelection.setVisibility(View.GONE); - mTabsContainer.setVisibility(View.VISIBLE); mMenuButton.setVisibility(View.VISIBLE); + mTabs.animate().setStartDelay(250).setDuration(200).alpha(1); } - private void onShowUndoDialog() { + private void onShowUndoDialog(int pTabCount) { + mToastLayoutRoot.findViewById(R.id.pBlockerUndo).setVisibility(View.GONE); mToastLayoutRoot.animate().cancel(); mToastLayoutRoot.setVisibility(View.VISIBLE); mToastLayoutRoot.setAlpha(0); mToastLayoutRoot.animate().alpha(1); - initTabCount(); + initTabCount(pTabCount); mDelayHandler.removeCallbacksAndMessages(null); - mDelayHandler.postDelayed(() -> mToastLayoutRoot.animate().alpha(0).withEndAction(() -> mToastLayoutRoot.setVisibility(View.GONE)), 2000); + mDelayHandler.postDelayed(() -> mToastLayoutRoot.animate().alpha(0).withEndAction(() -> { + mToastLayoutRoot.setVisibility(View.GONE); + }), 3000); } private void onHideUndoDialog() { @@ -209,7 +201,7 @@ class tabViewController }else if(pCommands.equals(tabEnums.eTabViewCommands.M_DISMISS_MENU)){ onCloseTabMenu(); }else if(pCommands.equals(tabEnums.eTabViewCommands.INIT_TAB_COUNT)){ - initTabCount(); + initTabCount((int)pData.get(0)); }else if(pCommands.equals(tabEnums.eTabViewCommands.ON_HIDE_SELECTION)){ onHideSelectionMenu(); } @@ -219,7 +211,7 @@ class tabViewController else if(pCommands.equals(tabEnums.eTabViewCommands.ON_SHOW_SELECTION)){ onShowSelection(); }else if(pCommands.equals(tabEnums.eTabViewCommands.ON_SHOW_UNDO_DIALOG)){ - onShowUndoDialog(); + onShowUndoDialog((int)pData.get(0)); }else if(pCommands.equals(tabEnums.eTabViewCommands.ON_HIDE_UNDO_DIALOG)){ onHideUndoDialog(); }else if(pCommands.equals(tabEnums.eTabViewCommands.ON_GENERATE_SWIPABLE_BACKGROUND)){ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java b/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java index 7e7eab67..c20e1087 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java @@ -8,7 +8,7 @@ public class enums on_verify_selected_url_menu,FINDER_RESULT_CALLBACK, welcome, reload,download_folder, url_triggered, url_triggered_new_tab,url_clear,fetch_favicon,url_clear_at,remove_from_database,is_empty,M_HOME_PAGE,M_PRELOAD_URL,ON_KEYBOARD_CLOSE, - on_close_sesson,on_long_press, on_full_screen,on_handle_external_intent,on_update_suggestion_url,progress_update,recheck_orbot,on_url_load,on_playstore_load,back_list_empty,start_proxy, ON_UPDATE_THEME, M_INITIALIZE_TAB_SINGLE, M_INITIALIZE_TAB_LINK,on_request_completed, on_update_history,on_update_suggestion,M_WELCOME_MESSAGE,ON_UPDATE_TITLE_BAR,ON_FIRST_PAINT, ON_LOAD_TAB_ON_RESUME, ON_SESSION_REINIT,on_page_loaded,on_load_error,download_file_popup,on_init_ads,search_update, open_new_tab + on_close_sesson,on_long_press, on_full_screen,on_handle_external_intent,on_update_suggestion_url,progress_update, ON_EXPAND_TOP_BAR,recheck_orbot,on_url_load,on_playstore_load,back_list_empty,start_proxy, ON_UPDATE_THEME, M_INITIALIZE_TAB_SINGLE, M_INITIALIZE_TAB_LINK,on_request_completed, on_update_history,on_update_suggestion,M_WELCOME_MESSAGE,ON_UPDATE_TITLE_BAR,ON_FIRST_PAINT, ON_LOAD_TAB_ON_RESUME, ON_SESSION_REINIT,on_page_loaded,on_load_error,download_file_popup,on_init_ads,search_update, open_new_tab } /*General Enums*/ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java b/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java index 156da277..01824fcf 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java @@ -13,7 +13,7 @@ public class status { /*App Status*/ - public static boolean sPaidStatus = true; + public static boolean sPaidStatus = false; public static String mCurrentReloadURL = ""; public static int mNotificationID = 1001; diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataController.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataController.java index 0e26406f..01bdeef4 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataController.java @@ -20,6 +20,7 @@ public class dataController private imageDataModel mImageDataModel; private bookmarkDataModel mBookmarkDataModel; private suggestionDataModel mSuggestionDataModel; + private helpDataModel mHelpDataModel; /*Private Declarations*/ @@ -38,6 +39,7 @@ public class dataController mImageDataModel = new imageDataModel(); mBookmarkDataModel = new bookmarkDataModel(); mSuggestionDataModel = new suggestionDataModel(pAppContext); + mHelpDataModel = new helpDataModel(); } public void initializeListData(){ mBookmarkDataModel.initializebookmark(databaseController.getInstance().selectBookmark()); @@ -80,6 +82,11 @@ public class dataController return mPreferenceModel.onTrigger(pCommands, pData); } + /*Recieving Help*/ + public Object invokeHelp(dataEnums.eHelpCommands pCommands, List pData){ + return mHelpDataModel.onTrigger(pCommands, pData); + } + /*Recieving History*/ public Object invokeBookmark(dataEnums.eBookmarkCommands pCommands, List pData){ return mBookmarkDataModel.onTrigger(pCommands, pData); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataEnums.java index a4ae3c1b..9b74bda4 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataEnums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/dataEnums.java @@ -26,4 +26,9 @@ public class dataEnums public enum eImageCommands{ M_REQUEST_IMAGE_URL, M_GET_IMAGE } + + public enum eHelpCommands { + M_GET_HELP, M_SET_HELP + } + } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/helpDataModel.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/helpDataModel.java new file mode 100644 index 00000000..d11adacd --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/helpDataModel.java @@ -0,0 +1,40 @@ +package com.darkweb.genesissearchengine.dataManager; + +import android.annotation.SuppressLint; +import java.util.ArrayList; +import java.util.List; + +@SuppressLint("CommitPrefEdits") +class helpDataModel +{ + private ArrayList mHelpListModel; + + helpDataModel(){ + mHelpListModel = new ArrayList<>(); + } + + ArrayList getHelpModel(){ + return mHelpListModel; + } + + private void setModel(ArrayList pHelpListModel){ + mHelpListModel.clear(); + mHelpListModel.addAll(pHelpListModel); + } + + /*List Tabs*/ + + + /*List Suggestion*/ + public Object onTrigger(dataEnums.eHelpCommands pCommands, List pData){ + if(pCommands.equals(dataEnums.eHelpCommands.M_GET_HELP)){ + return getHelpModel(); + } + else if(pCommands.equals(dataEnums.eHelpCommands.M_SET_HELP)){ + setModel((ArrayList)pData.get(0)); + } + + return null; + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/imageDataModel.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/imageDataModel.java index 4c638f21..fb6ae06c 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/imageDataModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/imageDataModel.java @@ -56,7 +56,7 @@ class imageDataModel public void run(){ while (true) { try { - sleep(1000); + sleep(50); if(mRequestQueue.size()>0){ mParsedQueues.put(mRequestQueue.get(0), enums.ImageQueueStatus.M_IMAGE_LOADING); Bitmap mBitmap = getBitmapFromURL(mRequestQueue.get(0)); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/test.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/test.java deleted file mode 100644 index 75d4c86a..00000000 --- a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/test.java +++ /dev/null @@ -1,4 +0,0 @@ -package com.darkweb.genesissearchengine.dataManager; - -public class test { -} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/helperMethod.java b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/helperMethod.java index a038cb92..b68d1079 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/helperMethod.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/helperMethod.java @@ -128,6 +128,13 @@ public class helperMethod return size.y; } + public static int getScreenWidth(AppCompatActivity context) { + Display display = context.getWindowManager().getDefaultDisplay(); + Point size = new Point(); + display.getRealSize(size); + return size.x; + } + public static SpannableString urlDesigner(String url, Context pContext, int pDefColor){ int mColor = 0; diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/adManager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/adManager.java index 85019a42..e4ce6c6d 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/adManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/adManager.java @@ -44,7 +44,7 @@ class adManager { bannerAdsLoading = true; MobileAds.initialize(mAppContext, initializationStatus -> { }); - mBannerAds.setAlpha(0f); + initializeBannerAds(); } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/langManager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/langManager.java index 2462c021..6b17c8a2 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/langManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/langManager.java @@ -33,7 +33,7 @@ class langManager { { Locale mSystemLocale = Resources.getSystem().getConfiguration().locale; String mSystemLangugage = mSystemLocale.toString(); - if(mSystemLangugage.equals("en_US") || mSystemLangugage.equals("de_DE") || mSystemLangugage.equals("ca_ES") || mSystemLangugage.equals("zh_CN") || mSystemLangugage.equals("ch_CZ") || mSystemLangugage.equals("nl_NL") || mSystemLangugage.equals("fr_FR") || mSystemLangugage.equals("el_GR") || mSystemLangugage.equals("hu_HU") || mSystemLangugage.equals("in_ID") || mSystemLangugage.equals("it_IT") || mSystemLangugage.equals("ja_JP") || mSystemLangugage.equals("ko_KR") || mSystemLangugage.equals("pt_PT") || mSystemLangugage.equals("ro_RO") || mSystemLangugage.equals("ru_RU") || mSystemLangugage.equals("th_TH") || mSystemLangugage.equals("tr_TR") || mSystemLangugage.equals("uk_UA") || mSystemLangugage.equals("vi_VN")){ + if(mSystemLangugage.equals("en_US") || mSystemLangugage.equals("de_DE") || mSystemLangugage.equals("ur_UR") || mSystemLangugage.equals("ca_ES") || mSystemLangugage.equals("zh_CN") || mSystemLangugage.equals("ch_CZ") || mSystemLangugage.equals("nl_NL") || mSystemLangugage.equals("fr_FR") || mSystemLangugage.equals("el_GR") || mSystemLangugage.equals("hu_HU") || mSystemLangugage.equals("in_ID") || mSystemLangugage.equals("it_IT") || mSystemLangugage.equals("ja_JP") || mSystemLangugage.equals("ko_KR") || mSystemLangugage.equals("pt_PT") || mSystemLangugage.equals("ro_RO") || mSystemLangugage.equals("ru_RU") || mSystemLangugage.equals("th_TH") || mSystemLangugage.equals("tr_TR") || mSystemLangugage.equals("uk_UA") || mSystemLangugage.equals("vi_VN")){ mLanguage = new Locale(mSystemLocale.getLanguage(), mSystemLocale.getCountry()); }else { mLanguage = new Locale("en", "Us"); diff --git a/app/src/main/res/anim/fade_in_lang.xml b/app/src/main/res/anim/fade_in_lang.xml index d38048c0..04a4f737 100644 --- a/app/src/main/res/anim/fade_in_lang.xml +++ b/app/src/main/res/anim/fade_in_lang.xml @@ -1,7 +1,7 @@ diff --git a/app/src/main/res/anim/fade_out_lang.xml b/app/src/main/res/anim/fade_out_lang.xml index a66adda4..2cf3f175 100644 --- a/app/src/main/res/anim/fade_out_lang.xml +++ b/app/src/main/res/anim/fade_out_lang.xml @@ -1,7 +1,7 @@ + android:toAlpha="0.5" /> \ No newline at end of file diff --git a/app/src/main/res/custom-xml/generic/xml/gx_generic_tab_button.xml b/app/src/main/res/custom-xml/generic/xml/gx_generic_tab_button.xml index 4a5a4b44..c30d7c4c 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_generic_tab_button.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_generic_tab_button.xml @@ -1,34 +1,45 @@ - - - - - - - - + + + + - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/history/xml/hx_menu_popup.xml b/app/src/main/res/custom-xml/history/xml/hx_menu_popup.xml index 0cf0ba79..aea4f3c1 100644 --- a/app/src/main/res/custom-xml/history/xml/hx_menu_popup.xml +++ b/app/src/main/res/custom-xml/history/xml/hx_menu_popup.xml @@ -12,10 +12,10 @@ android:color="@color/c_alert_background" /> + android:bottomLeftRadius="7dp" + android:bottomRightRadius="7dp" + android:topLeftRadius="7dp" + android:topRightRadius="7dp"/> #000000 5 @@ -33,10 +33,10 @@ android:color="@color/c_alert_background" /> + android:bottomLeftRadius="7dp" + android:bottomRightRadius="7dp" + android:topLeftRadius="7dp" + android:topRightRadius="7dp"/> - - - + + + - - - - + - + - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + - - + + - - - - + - + - - - - - - + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - \ No newline at end of file + diff --git a/app/src/main/res/custom-xml/images/xml/ic_baseline_remove_red_eye.xml b/app/src/main/res/custom-xml/images/xml/ic_baseline_remove_red_eye.xml new file mode 100644 index 00000000..a3e222a2 --- /dev/null +++ b/app/src/main/res/custom-xml/images/xml/ic_baseline_remove_red_eye.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layouts/alert/layout/popup_bridge_mail.xml b/app/src/main/res/layouts/alert/layout/popup_bridge_mail.xml index 49689f6d..eb60be30 100644 --- a/app/src/main/res/layouts/alert/layout/popup_bridge_mail.xml +++ b/app/src/main/res/layouts/alert/layout/popup_bridge_mail.xml @@ -22,6 +22,7 @@ android:layout_height="match_parent"> android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_BRIDGE_MAIL" android:textAlignment="textStart" diff --git a/app/src/main/res/layouts/alert/layout/popup_clear_bookmark.xml b/app/src/main/res/layouts/alert/layout/popup_clear_bookmark.xml index 4e7cf66b..1a07d6af 100644 --- a/app/src/main/res/layouts/alert/layout/popup_clear_bookmark.xml +++ b/app/src/main/res/layouts/alert/layout/popup_clear_bookmark.xml @@ -22,6 +22,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_CLEAR_BOOKMARK" android:textAlignment="textStart" @@ -37,11 +38,11 @@ android:layout_height="wrap_content" android:layout_marginTop="5dp" android:alpha="0.6" - android:paddingEnd="10dp" + android:paddingEnd="15dp" + android:paddingStart="15dp" android:textColor="@color/c_alert_text" android:text="@string/ALERT_CLEAR_BOOKMARK_INFO" android:textAlignment="textStart" - android:paddingStart="15dp" android:textSize="13sp" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layouts/alert/layout/popup_clear_history.xml b/app/src/main/res/layouts/alert/layout/popup_clear_history.xml index b8addcb1..612a3171 100644 --- a/app/src/main/res/layouts/alert/layout/popup_clear_history.xml +++ b/app/src/main/res/layouts/alert/layout/popup_clear_history.xml @@ -22,6 +22,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_CLEAR_HISTORY" android:textAlignment="textStart" @@ -36,10 +37,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="5dp" - android:paddingEnd="10dp" android:text="@string/ALERT_CLEAR_HISTORY_INFO" android:textColor="@color/c_alert_text" android:textAlignment="textStart" + android:paddingEnd="15dp" android:paddingStart="15dp" android:alpha="0.6" android:textSize="13sp" diff --git a/app/src/main/res/layouts/alert/layout/popup_data_cleared.xml b/app/src/main/res/layouts/alert/layout/popup_data_cleared.xml index d4e7b94f..a7ad1fad 100644 --- a/app/src/main/res/layouts/alert/layout/popup_data_cleared.xml +++ b/app/src/main/res/layouts/alert/layout/popup_data_cleared.xml @@ -22,6 +22,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_DATA_CLEARED" android:textAlignment="textStart" @@ -37,8 +38,8 @@ android:layout_height="wrap_content" android:layout_marginTop="5dp" android:alpha="0.6" + android:paddingEnd="15dp" android:paddingStart="15dp" - android:paddingEnd="10dp" android:text="@string/ALERT_DATA_CLEARED_INFO" android:textAlignment="textStart" android:textColor="@color/c_alert_text" diff --git a/app/src/main/res/layouts/alert/layout/popup_file_longpress.xml b/app/src/main/res/layouts/alert/layout/popup_file_longpress.xml index dceea927..f66be77d 100644 --- a/app/src/main/res/layouts/alert/layout/popup_file_longpress.xml +++ b/app/src/main/res/layouts/alert/layout/popup_file_longpress.xml @@ -22,6 +22,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_LONG_FILE" android:textAlignment="textStart" diff --git a/app/src/main/res/layouts/alert/layout/popup_find.xml b/app/src/main/res/layouts/alert/layout/popup_find.xml index a850f725..ccce2ccb 100644 --- a/app/src/main/res/layouts/alert/layout/popup_find.xml +++ b/app/src/main/res/layouts/alert/layout/popup_find.xml @@ -20,7 +20,7 @@ app:layout_constraintStart_toStartOf="parent"> + + + + + \ No newline at end of file diff --git a/app/src/main/res/layouts/alert/layout/popup_update_bridges.xml b/app/src/main/res/layouts/alert/layout/popup_update_bridges.xml index 8bbd58fe..cefd0e78 100644 --- a/app/src/main/res/layouts/alert/layout/popup_update_bridges.xml +++ b/app/src/main/res/layouts/alert/layout/popup_update_bridges.xml @@ -22,6 +22,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_UPDATE_BRIDGES" android:textAlignment="textStart" @@ -37,10 +38,10 @@ android:layout_height="wrap_content" android:layout_marginTop="5dp" android:alpha="0.6" - android:paddingEnd="10dp" + android:paddingEnd="15dp" + android:paddingStart="15dp" android:text="@string/ALERT_UPDATE_BRIDGES_INFO" android:textAlignment="textStart" - android:paddingStart="15dp" android:textColor="@color/c_alert_text" android:textSize="13sp" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layouts/alert/layout/popup_url_longpress.xml b/app/src/main/res/layouts/alert/layout/popup_url_longpress.xml index 20c1ea7d..05e28e72 100644 --- a/app/src/main/res/layouts/alert/layout/popup_url_longpress.xml +++ b/app/src/main/res/layouts/alert/layout/popup_url_longpress.xml @@ -22,9 +22,10 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_LONG_URL" - android:textAlignment="textStart" + android:gravity="start" android:textColor="@color/c_text_setting_heading_v2" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layouts/alert/layout/popup_welcome.xml b/app/src/main/res/layouts/alert/layout/popup_welcome.xml index 3f4488f8..45f16b26 100644 --- a/app/src/main/res/layouts/alert/layout/popup_welcome.xml +++ b/app/src/main/res/layouts/alert/layout/popup_welcome.xml @@ -21,6 +21,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="10dp" + android:paddingEnd="15dp" android:paddingStart="15dp" android:text="@string/ALERT_WELCOME_MESSAGE" android:textAlignment="textStart" @@ -51,6 +52,7 @@ android:id="@+id/pDivider" android:layout_width="match_parent" android:layout_height="1dp" + android:layout_marginTop="10dp" android:background="@color/c_view_divier_background" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" diff --git a/app/src/main/res/layouts/bookmark/layout/bookmark_view.xml b/app/src/main/res/layouts/bookmark/layout/bookmark_view.xml index a59edd2e..5adfa16a 100644 --- a/app/src/main/res/layouts/bookmark/layout/bookmark_view.xml +++ b/app/src/main/res/layouts/bookmark/layout/bookmark_view.xml @@ -147,6 +147,7 @@ android:layout_width="0dp" android:layout_height="match_parent" android:layout_marginStart="0dp" + android:paddingEnd="15dp" android:layout_marginTop="0dp" android:layout_marginEnd="0dp" android:layout_weight="17" diff --git a/app/src/main/res/layouts/bridge/layout/bridge_settings_view.xml b/app/src/main/res/layouts/bridge/layout/bridge_settings_view.xml index cfa24afc..cca607ad 100644 --- a/app/src/main/res/layouts/bridge/layout/bridge_settings_view.xml +++ b/app/src/main/res/layouts/bridge/layout/bridge_settings_view.xml @@ -76,7 +76,7 @@ diff --git a/app/src/main/res/layouts/history/layout/history_view.xml b/app/src/main/res/layouts/history/layout/history_view.xml index 549ac155..943c3e4b 100644 --- a/app/src/main/res/layouts/history/layout/history_view.xml +++ b/app/src/main/res/layouts/history/layout/history_view.xml @@ -149,11 +149,13 @@ android:layout_marginTop="0dp" android:layout_marginEnd="0dp" android:layout_weight="17" + android:paddingEnd="15dp" android:background="@xml/gx_ripple_blue" android:textAllCaps="false" android:paddingStart="20dp" android:stateListAnimator="@null" android:text="@string/HISTORY_CLEAR" + android:textAlignment="textStart" android:textColor="@color/c_text_setting_heading" diff --git a/app/src/main/res/layouts/home/layout/home_view.xml b/app/src/main/res/layouts/home/layout/home_view.xml index e6159f4d..1518d91e 100644 --- a/app/src/main/res/layouts/home/layout/home_view.xml +++ b/app/src/main/res/layouts/home/layout/home_view.xml @@ -136,41 +136,26 @@ android:tint="@color/c_navigation_tint" android:visibility="gone" /> - - -