From 4438620783e395f94a24f6a51f13a9a86a0eb9ad Mon Sep 17 00:00:00 2001 From: msmannan00 Date: Sat, 27 Mar 2021 13:15:20 +0500 Subject: [PATCH] Bug Fixes Bug Fixes --- .../homeController/homeController.java | 32 +- .../homeController/homeViewController.java | 59 +++- .../settingAdvanceController.java | 13 +- .../advanceManager/settingAdvanceEnums.java | 4 +- .../advanceManager/settingAdvanceModel.java | 13 + .../settingAdvanceViewController.java | 40 ++- .../settingGeneralController.java | 1 - .../appManager/tabManager/tabAdapter.java | 28 +- .../appManager/tabManager/tabController.java | 120 +++++--- .../tabManager/tabViewController.java | 35 ++- .../genesissearchengine/constants/enums.java | 5 + .../genesissearchengine/constants/keys.java | 2 + .../genesissearchengine/constants/status.java | 23 +- .../dataManager/tabDataModel.java | 28 +- .../pluginManager/messageManager.java | 37 ++- .../pluginManager/pluginEnums.java | 2 +- .../main/res/custom-xml/tab/xml/tx_border.xml | 17 ++ .../xml/tx_border_image_dark_no_corner.xml | 9 + .../custom-xml/tab/xml/tx_ripple_light.xml | 13 + .../res/drawable-hdpi/tick_recycler_view.png | Bin 52313 -> 35888 bytes .../layouts/alert/layout/popup_max_tab.xml | 74 +++++ .../res/layouts/home/layout/home_view.xml | 15 + .../setting/layout/setting_advance_view.xml | 157 ++++++++++ .../res/layouts/tab/layout/tab_grid_view.xml | 277 ++++++++++++++++++ .../res/layouts/tab/layout/tab_row_view.xml | 2 +- .../main/res/layouts/tab/layout/tab_view.xml | 35 ++- app/src/main/res/values-night/colors.xml | 2 +- app/src/main/res/values/colors.xml | 3 +- app/src/main/res/values/strings.xml | 7 + 29 files changed, 913 insertions(+), 140 deletions(-) create mode 100644 app/src/main/res/custom-xml/tab/xml/tx_border.xml create mode 100644 app/src/main/res/custom-xml/tab/xml/tx_border_image_dark_no_corner.xml create mode 100644 app/src/main/res/custom-xml/tab/xml/tx_ripple_light.xml create mode 100644 app/src/main/res/layouts/alert/layout/popup_max_tab.xml create mode 100644 app/src/main/res/layouts/tab/layout/tab_grid_view.xml 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 b246c167..7e883401 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 @@ -146,6 +146,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba private FragmentContainerView mTabFragment; private LinearLayout mTopBarContainer; private View mPopupLoadNewTab; + private ImageView mTopBarHider; /*Redirection Objects*/ private GeckoResult mRenderedBitmap = null; @@ -397,13 +398,14 @@ public class homeController extends AppCompatActivity implements ComponentCallba mProgressBarIndeterminate = findViewById(R.id.pProgressBarIndeterminate); mTabFragment = findViewById(R.id.mTabFragment); mPopupLoadNewTab = findViewById(R.id.pPopupLoadNewTab); + mTopBarHider = findViewById(R.id.pTopBarHider); 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); + 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); mGeckoView.onSetHomeEvent(new nestedGeckoViewCallback()); mGeckoClient.initialize(mGeckoView, new geckoViewCallback(), this,false); mGeckoClient.onValidateInitializeFromStartup(); @@ -498,7 +500,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba } } - public void initRuntimeSettings() { mGeckoClient.updateSetting(); @@ -510,6 +511,11 @@ public class homeController extends AppCompatActivity implements ComponentCallba } public void onLoadURL(String url){ + + if(mGeckoView!=null && mGeckoView.getSession()!=null && !mGeckoView.getSession().isOpen()){ + mGeckoView.getSession().open(mGeckoClient.getmRuntime()); + } + mAppBar.animate().cancel(); mHomeViewController.onClearSelections(true); Objects.requireNonNull(mGeckoView.getSession()).stop(); @@ -646,7 +652,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba return false; }); - mFindText.addTextChangedListener(new TextWatcher() { @Override @@ -1005,6 +1010,13 @@ public class homeController extends AppCompatActivity implements ComponentCallba helperMethod.hideKeyboard(this); mHomeViewController.onOpenMenu(view,mGeckoClient.canGoForward(),!(mProgressBar.getAlpha()<=0 || mProgressBar.getVisibility() ==View.INVISIBLE),mGeckoClient.getUserAgent()); + + view.setClickable(false); + new Handler().postDelayed(() -> + { + view.setClickable(true); + }, 500); + } public void onFullScreenSettingChanged(){ @@ -1013,7 +1025,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba public void onDisableTabViewController(){ onResumeDump(); - mHomeViewController.onUpdateStatusBarTheme(mGeckoClient.getSession().getTheme(), true); mHomeViewController.onHideTabContainer(); activityContextManager.getInstance().getTabController().onExitAndClearBackup(); activityContextManager.getInstance().getTabController().onPostExit(); @@ -1023,7 +1034,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba public void onBackPressed(){ if(mTabFragment.getVisibility()==View.VISIBLE){ onResumeDump(); - mHomeViewController.onUpdateStatusBarTheme(mGeckoClient.getSession().getTheme(), false); mHomeViewController.onHideTabContainer(); activityContextManager.getInstance().getTabController().onPostExit(); activityContextManager.getInstance().getTabController().onBackPressed(); @@ -1155,9 +1165,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba if(mGeckoView!=null && mGeckoView.getSession()!=null && !mGeckoView.getSession().isOpen()){ onReDrawGeckoview(); onLoadURL(model.getSession().getCurrentURL()); - }else if(mGeckoView != null){ - mGeckoView.requestFocus(); - mGeckoView.setSession(model.getSession()); } } } @@ -1197,7 +1204,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba } if(status.sSettingIsAppStarted && mAppRestarted) { - onUpdateStatusBarTheme(); activityContextManager.getInstance().onClearStack(); tabRowModel model = (tabRowModel)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_CURRENT_TAB, null); @@ -1305,7 +1311,10 @@ public class homeController extends AppCompatActivity implements ComponentCallba } public void onSaveCurrentTab(geckoSession session,boolean isHardCopy){ - dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_ADD_TAB, Arrays.asList(session,isHardCopy)); + int mStatus = (Integer) dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_ADD_TAB, Arrays.asList(session,isHardCopy)); + if(mStatus == enums.AddTabCallback.TAB_FULL){ + pluginController.getInstance().onMessageManagerInvoke(Collections.singletonList(this), M_MAX_TAB_REACHED); + } } public boolean onCloseCurrentTab(geckoSession session){ @@ -1503,6 +1512,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba } public void onReInitTheme(){ + mHomeViewController.onUpdateStatusBarTheme(mGeckoClient.getSession().getTheme(), true); } public void onOrbotLog(View view) { @@ -1537,7 +1547,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba } else if(e_type.equals(enums.etype.M_UPDATE_THEME)) { - mHomeViewController.onUpdateStatusBarTheme(mGeckoClient.getSession().getTheme(), false); + mHomeViewController.onUpdateStatusBarTheme(mGeckoClient.getSession().getTheme(), true); } else if(e_type.equals(enums.etype.ON_UPDATE_THEME)){ mHomeViewController.onUpdateStatusBarTheme(mGeckoClient.getSession().getTheme(),false); 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 deeb627d..493d2282 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 @@ -108,14 +108,17 @@ class homeViewController private LinearLayout mTopBarContainer; private ImageView mSearchLock; private View mPopupLoadNewTab; + private ImageView mTopBarHider; /*Local Variables*/ private Callable mLogs = null; private boolean isLandscape = false; private boolean isFullScreen = false; private MovementMethod mSearchBarMovementMethod = null; + 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){ + 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){ this.mContext = context; this.mProgressBar = progressBar; this.mSearchbar = searchbar; @@ -150,6 +153,7 @@ class homeViewController this.mTopBarContainer = pTopBarContainer; this.mSearchLock = pSearchLock; this.mPopupLoadNewTab = pPopupLoadNewTab; + this.mTopBarHider = pTopBarHider; initSplashScreen(); createUpdateUiHandler(); @@ -209,13 +213,19 @@ class homeViewController mPopupLoadNewTab.setVisibility(View.VISIBLE); mPopupLoadNewTab.animate().setDuration(350).alpha(1); - final Handler handler = new Handler(); - handler.postDelayed(this::onHideLoadTabDialog, 2500); + if(mTabDialogHandler!=null){ + mTabDialogHandler.removeCallbacksAndMessages(null); + } + + mTabDialogHandler = new Handler(); + mTabDialogRunnable = this::onHideLoadTabDialog; + mTabDialogHandler.postDelayed(mTabDialogRunnable, 7500); } public void onHideLoadTabDialog() { mPopupLoadNewTab.findViewById(R.id.pBlockerUndo).setVisibility(View.VISIBLE); mPopupLoadNewTab.animate().cancel(); + mPopupLoadNewTab.animate().setDuration(350).alpha(0).withEndAction(() -> { mPopupLoadNewTab.setVisibility(View.GONE); }); @@ -225,10 +235,13 @@ class homeViewController if(mTabFragment.getAlpha()==0 || mTabFragment.getAlpha()==1){ onUpdateStatusBarTheme(null, false); + mTabFragment.setAlpha(0); mTabFragment.setTranslationY(0); mTabFragment.setVisibility(View.VISIBLE); mTabFragment.setTranslationY(-1 * helperMethod.pxFromDp(15)); + mTopBarHider.setVisibility(View.VISIBLE); + mTopBarHider.animate().alpha(1).setDuration(0); new Handler().postDelayed(() -> { @@ -248,12 +261,14 @@ class homeViewController public void onHideTabContainer(){ if(mTabFragment.getAlpha()==1){ - mEvent.invokeObserver(null, enums.etype.M_UPDATE_THEME); - mTabFragment.animate() - .setDuration(150) - .alpha(0f).withEndAction(() -> mTabFragment.setVisibility(View.GONE)); + new Handler().postDelayed(() -> + { + mTopBarHider.animate().alpha(0).setDuration(0).setStartDelay(0).withEndAction(() -> mTopBarHider.setVisibility(View.GONE)); + mEvent.invokeObserver(null, enums.etype.M_UPDATE_THEME); + }, 150); + + mTabFragment.animate() .setDuration(150).alpha(0f).withEndAction(() -> mTabFragment.setVisibility(View.GONE)); mEvent.invokeObserver(Collections.singletonList(status.sSettingSearchStatus), enums.etype.M_INIT_TAB_COUNT); - mEvent.invokeObserver(null, enums.etype.M_UPDATE_THEME); } } @@ -652,6 +667,7 @@ class homeViewController ImageButton back = popupView.findViewById(R.id.menu22); ImageButton close = popupView.findViewById(R.id.menu20); CheckBox desktop = popupView.findViewById(R.id.menu27); + LinearLayout newTab = popupView.findViewById(R.id.menu11); desktop.setChecked(userAgent==USER_AGENT_MODE_DESKTOP); if(!canGoForward){ @@ -663,6 +679,14 @@ class homeViewController close.setColorFilter(Color.argb(255, 191, 191, 191)); } + newTab.setClickable(false); + close.setClickable(false); + new Handler().postDelayed(() -> + { + newTab.setClickable(true); + close.setClickable(true); + }, 300); + } void downloadNotification(String message, enums.etype e_type){ @@ -804,7 +828,7 @@ class homeViewController public void onUpdateStatusBarTheme(String pTheme, boolean mForced) { if(mSplashScreen.getAlpha()<=0 && (status.sTheme != enums.Theme.THEME_DARK && !status.sDefaultNightMode) && mTabFragment.getAlpha()<=0 || mForced){ - int mColor = -1; + int mColor; try{ mColor = Color.parseColor(pTheme); }catch (Exception ex){ @@ -822,9 +846,13 @@ class homeViewController mGradientDrawable.setCornerRadius(helperMethod.pxFromDp(7)); GradientDrawable gradientDrawable1 = new GradientDrawable(); - gradientDrawable1.setColor(ColorUtils.blendARGB(helperMethod.invertedShadeColor(mColor,0.90f), Color.BLACK, 0.2f)); + gradientDrawable1.setColor(ColorUtils.blendARGB(helperMethod.invertedShadeColor(mColor,0.50f), Color.BLACK, 0.2f)); gradientDrawable1.setCornerRadius(helperMethod.pxFromDp(4)); - gradientDrawable1.setStroke(helperMethod.pxFromDp(2), mColor); + + GradientDrawable gradientDrawable3 = new GradientDrawable(); + gradientDrawable3.setColor(ColorUtils.blendARGB(helperMethod.invertedShadeColor(mColor,0.50f), Color.BLACK, 0.2f)); + gradientDrawable3.setCornerRadius(helperMethod.pxFromDp(4)); + gradientDrawable3.setStroke(helperMethod.pxFromDp(2), helperMethod.invertedGrayColor(mColor)); GradientDrawable gradientDrawable2 = new GradientDrawable(); gradientDrawable2.setColor(ColorUtils.blendARGB(helperMethod.invertedShadeColor(mColor,0.90f), Color.BLACK, 0.2f)); @@ -832,7 +860,7 @@ class homeViewController gradientDrawable2.setStroke(helperMethod.pxFromDp(2), helperMethod.invertedGrayColor(mColor)); StateListDrawable states = new StateListDrawable(); - InsetDrawable mInsetDrawable1 = new InsetDrawable(gradientDrawable1, helperMethod.pxFromDp(8), helperMethod.pxFromDp(8), helperMethod.pxFromDp(8), helperMethod.pxFromDp(8)); + InsetDrawable mInsetDrawable1 = new InsetDrawable(gradientDrawable3, 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); @@ -846,6 +874,8 @@ class homeViewController mSearchLock.setColorFilter(helperMethod.invertedGrayColor(mColor)); mSearchLock.setTag(R.id.themed,true); gradientDrawable1.setCornerRadius(helperMethod.pxFromDp(7)); + gradientDrawable1.setStroke(helperMethod.pxFromDp(2), mColor); + gradientDrawable1.setColor(ColorUtils.blendARGB(helperMethod.invertedShadeColor(mColor,0.90f), Color.BLACK, 0.2f)); mSearchbar.setBackground(gradientDrawable1); mSearchbar.setHintTextColor(ColorUtils.blendARGB(helperMethod.invertedShadeColor(mColor,0.10f), Color.BLACK, 0.2f)); @@ -895,7 +925,10 @@ class homeViewController mVoiceInput.setColorFilter(ContextCompat.getColor(mContext, R.color.c_navigation_tint)); mSearchbar.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v1)); mSearchbar.setHintTextColor(ContextCompat.getColor(mContext, R.color.c_text_v2)); - onUpdateSearchIcon(1); + + if(!mSearchbar.isFocused()){ + onUpdateSearchIcon(1); + } if(status.sTheme != enums.Theme.THEME_DARK && !status.sDefaultNightMode){ mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); 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 68c21fd9..e7ce3b73 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 @@ -35,7 +35,9 @@ public class settingAdvanceController extends AppCompatActivity { private SwitchMaterial mRestoreTabs; private SwitchMaterial mShowWebFonts; private SwitchMaterial mToolbarTheme; + private ArrayList mImageOption = new ArrayList<>(); + private ArrayList mTabLayoutOption = new ArrayList<>(); private boolean mIsChanged = false; /* Initializations */ @@ -64,9 +66,11 @@ public class settingAdvanceController extends AppCompatActivity { mToolbarTheme = findViewById(R.id.pToolbarTheme); mImageOption.add(findViewById(R.id.pAdvanceImageOption1)); mImageOption.add(findViewById(R.id.pAdvanceImageOption2)); + mTabLayoutOption.add(findViewById(R.id.pAdvanceGridOption1)); + mTabLayoutOption.add(findViewById(R.id.pAdvanceGridOption2)); activityContextManager.getInstance().onStack(this); - mSettingAdvanceViewController = new settingAdvanceViewController(this, new settingAdvanceViewCallback(), mRestoreTabs, mShowWebFonts, mToolbarTheme, mImageOption); + mSettingAdvanceViewController = new settingAdvanceViewController(this, new settingAdvanceViewCallback(), mRestoreTabs, mShowWebFonts, mToolbarTheme, mImageOption, mTabLayoutOption); mSettingAdvanceModel = new settingAdvanceModel(new settingAdvanceModelCallback()); } @@ -153,6 +157,13 @@ public class settingAdvanceController extends AppCompatActivity { dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_SHOW_IMAGES,status.sShowImages)); } + public void onGridView(View view) { + mSettingAdvanceViewController.onTrigger(settingAdvanceEnums.eAdvanceViewController.M_CLEAR_GRID, Collections.singletonList(null)); + mSettingAdvanceModel.onTrigger(settingAdvanceEnums.eAdvanceModel.M_SHOW_TAB_GRID, Collections.singletonList(view)); + mSettingAdvanceViewController.onTrigger(settingAdvanceEnums.eAdvanceViewController.M_SET_GRID, Collections.singletonList(view)); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SHOW_TAB_GRID,status.sTabGridLayoutEnabled)); + } + public void onShowWebFonts(View view) { mIsChanged = true; mSettingAdvanceModel.onTrigger(settingAdvanceEnums.eAdvanceModel.M_SHOW_WEB_FONTS, Collections.singletonList(!mShowWebFonts.isChecked())); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceEnums.java index 6a0f1591..c2bdcdb9 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceEnums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceEnums.java @@ -4,11 +4,11 @@ class settingAdvanceEnums { /*History Manager*/ public enum eAdvanceModel { - M_RESTORE_TAB, M_SHOW_IMAGE, M_SHOW_WEB_FONTS, M_TOOLBAR_THEME + M_RESTORE_TAB, M_SHOW_IMAGE, M_SHOW_TAB_GRID, M_SHOW_WEB_FONTS, M_TOOLBAR_THEME } public enum eAdvanceViewController { - M_CLEAR_IMAGE, M_SET_IMAGE + M_CLEAR_IMAGE, M_SET_IMAGE, M_CLEAR_GRID, M_SET_GRID } } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceModel.java index f92d328f..c63af967 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceModel.java @@ -36,6 +36,16 @@ class settingAdvanceModel } } + private void onShowTabGrid(View pView) { + + if(pView.getId() == R.id.pGridOption1){ + status.sTabGridLayoutEnabled = true; + } + else if(pView.getId() == R.id.pGridOption2){ + status.sTabGridLayoutEnabled = false; + } + } + private void onShowWebFonts(boolean pStatus) { status.sShowWebFonts = pStatus; } @@ -57,6 +67,9 @@ class settingAdvanceModel else if(pCommands.equals(settingAdvanceEnums.eAdvanceModel.M_TOOLBAR_THEME)){ onToolbarThemeChange((boolean)pData.get(0)); } + else if(pCommands.equals(settingAdvanceEnums.eAdvanceModel.M_SHOW_TAB_GRID)){ + onShowTabGrid((View)pData.get(0)); + } return null; } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceViewController.java index 0c7d4534..f9f9e7db 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceViewController.java @@ -27,10 +27,11 @@ class settingAdvanceViewController private SwitchMaterial mShowWebFonts; private SwitchMaterial mToolbarTheme; private ArrayList mImageOption; + private ArrayList mTabLayoutOption; /*Initializations*/ - settingAdvanceViewController(settingAdvanceController pContext, eventObserver.eventListener pEvent, SwitchMaterial pRestoreTabs, SwitchMaterial pShowWebFonts, SwitchMaterial pToolbarTheme, ArrayList pImageOption) + settingAdvanceViewController(settingAdvanceController pContext, eventObserver.eventListener pEvent, SwitchMaterial pRestoreTabs, SwitchMaterial pShowWebFonts, SwitchMaterial pToolbarTheme, ArrayList pImageOption, ArrayList pTabLayoutOption) { this.mEvent = pEvent; this.mContext = pContext; @@ -38,6 +39,7 @@ class settingAdvanceViewController this.mShowWebFonts = pShowWebFonts; this.mToolbarTheme = pToolbarTheme; this.mImageOption = pImageOption; + this.mTabLayoutOption = pTabLayoutOption; initViews(); initPostUI(); @@ -72,6 +74,16 @@ class settingAdvanceViewController mImageOption.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); mImageOption.get(1).setChecked(true); } + + if(status.sTabGridLayoutEnabled){ + mTabLayoutOption.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mTabLayoutOption.get(0).setChecked(true); + } + else{ + mTabLayoutOption.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mTabLayoutOption.get(1).setChecked(true); + } + } private void initPostUI(){ @@ -98,6 +110,13 @@ class settingAdvanceViewController mImageOption.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint_default))); } + private void clearGridOptions(){ + mTabLayoutOption.get(0).setChecked(false); + mTabLayoutOption.get(1).setChecked(false); + mTabLayoutOption.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint_default))); + mTabLayoutOption.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint_default))); + } + private void setImageOptions(View pView){ clearImageOptions(); if(pView.getId() == R.id.pAdvanceOption1){ @@ -110,13 +129,32 @@ class settingAdvanceViewController } } + private void setGridOptions(View pView){ + clearGridOptions(); + if(pView.getId() == R.id.pGridOption1){ + mTabLayoutOption.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mTabLayoutOption.get(0).setChecked(true); + } + else if(pView.getId() == R.id.pGridOption2){ + mTabLayoutOption.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mTabLayoutOption.get(1).setChecked(true); + } + } + public Object onTrigger(settingAdvanceEnums.eAdvanceViewController pCommands, List pData){ if(pCommands.equals(settingAdvanceEnums.eAdvanceViewController.M_CLEAR_IMAGE)){ clearImageOptions(); } + else if(pCommands.equals(settingAdvanceEnums.eAdvanceViewController.M_CLEAR_GRID)){ + clearGridOptions(); + } + else if(pCommands.equals(settingAdvanceEnums.eAdvanceViewController.M_SET_IMAGE)){ setImageOptions((View) pData.get(0)); } + else if(pCommands.equals(settingAdvanceEnums.eAdvanceViewController.M_SET_GRID)){ + setGridOptions((View) pData.get(0)); + } return null; } 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 5380a8ed..c61e227b 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 @@ -138,7 +138,6 @@ public class settingGeneralController extends AppCompatActivity { onBackPressed(); overridePendingTransition(R.anim.fade_in_lang, R.anim.fade_out_lang); activityContextManager.getInstance().getSettingController().onReInitTheme(); - activityContextManager.getInstance().getHomeController().onReInitTheme(); helperMethod.openActivity(settingGeneralController.class, constants.CONST_LIST_HISTORY, settingGeneralController.this,true); } } 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 de4eb707..a6699d2c 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 @@ -16,9 +16,12 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.helperManager.TopCropImageView; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.helperManager.helperMethod; @@ -68,8 +71,13 @@ public class tabAdapter extends RecyclerView.Adapter @NonNull @Override public listViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { - View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tab_row_view, parent, false); - return new listViewHolder(view); + if(status.sTabGridLayoutEnabled){ + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tab_grid_view, parent, false); + return new listViewHolder(view); + }else { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tab_row_view, parent, false); + return new listViewHolder(view); + } } @Override public void onBindViewHolder(@NonNull tabAdapter.listViewHolder holder, int position) @@ -250,7 +258,7 @@ public class tabAdapter extends RecyclerView.Adapter mItemSelectionMenuButton.setOnClickListener(this); }else { if(model.getSession().getTheme()==null){ - mBorder.setBackgroundColor(ContextCompat.getColor(itemView.getContext(), R.color.c_border_background_divider)); + mBorder.setBackgroundColor(ContextCompat.getColor(itemView.getContext(), R.color.c_ripple_v2)); }else { try{ mBorder.setBackgroundColor(Color.parseColor(model.getSession().getTheme())); @@ -271,12 +279,17 @@ public class tabAdapter extends RecyclerView.Adapter }else { mHeader.setText(model.getSession().getTitle()); } - mDescription.setText(mURL); + + if(status.sTabGridLayoutEnabled){ + mDescription.setText(helperMethod.getDomainName(mURL)); + }else { + mDescription.setText(mURL); + } mDate.setText(model.getDate()); mWebThumbnail.setImageBitmap(model.getBitmap()); if(getLayoutPosition()==0){ - mEvent.invokeObserver(Arrays.asList(mWebThumbnail, mURL), enums.etype.fetch_thumbnail); + // mEvent.invokeObserver(Arrays.asList(mWebThumbnail, mURL), enums.etype.fetch_thumbnail); } if(mSelectedList.contains(model.getSession().getSessionID())){ @@ -286,7 +299,9 @@ public class tabAdapter extends RecyclerView.Adapter } if(model.getSession().equals(mModelList.get(0).getSession())){ - itemView.setBackgroundColor(ContextCompat.getColor(activityContextManager.getInstance().getHomeController(), R.color.c_list_item_current)); + if(!status.sTabGridLayoutEnabled){ + itemView.setBackgroundColor(ContextCompat.getColor(activityContextManager.getInstance().getHomeController(), R.color.c_list_item_current)); + } }else { Drawable mDrawable; Resources res = itemView.getContext().getResources(); @@ -319,6 +334,7 @@ public class tabAdapter extends RecyclerView.Adapter mLongPressMenuEnabled = false; mItemSelectionMenuButton.animate().setDuration(250).alpha(1); } + mRemoveRow.bringToFront(); } 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 f071c25f..35b45bfd 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,22 +1,22 @@ package com.darkweb.genesissearchengine.appManager.tabManager; import android.annotation.SuppressLint; -import android.content.Context; -import android.content.pm.ActivityInfo; import android.graphics.Canvas; import android.os.Bundle; import android.os.Handler; +import android.util.Log; import android.view.LayoutInflater; import android.view.MotionEvent; import android.view.View; import android.view.ViewGroup; -import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.TextView; import androidx.annotation.NonNull; +import androidx.core.widget.NestedScrollView; import androidx.fragment.app.Fragment; +import androidx.recyclerview.widget.GridLayoutManager; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -24,6 +24,7 @@ import androidx.recyclerview.widget.SimpleItemAnimator; import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.appManager.homeManager.geckoManager.geckoSession; import com.darkweb.genesissearchengine.appManager.homeManager.homeController.homeController; +import com.darkweb.genesissearchengine.appManager.settingManager.advanceManager.settingAdvanceController; import com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage.settingHomeController; import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.status; @@ -49,6 +50,7 @@ public class tabController extends Fragment private TextView mSelectionCount; private ImageView mBlocker; private View mRootView; + private NestedScrollView mNestedScrollView; /*Private Variables*/ @@ -58,6 +60,10 @@ public class tabController extends Fragment private tabViewController mtabViewController; private RecyclerView mRecycleView; private tabAdapter mTabAdapter; + private Handler mScrollHandler = null; + private Runnable mScrollRunnable = null; + int minScroll = 0; + int maxScroll = 0; /*Initializations*/ @@ -100,8 +106,9 @@ public class tabController extends Fragment mPopupUndo = mRootView.findViewById(R.id.pPopupUndo); mSelectionCount = mRootView.findViewById(R.id.pSelectionCount); mBlocker = mRootView.findViewById(R.id.pBlocker); + mNestedScrollView = mRootView.findViewById(R.id.pNestedScroll); - mtabViewController = new tabViewController(this, mTabs, mRemoveSelection, mMenuButton, mClearSelection, mPopupUndo, mSelectionCount, mBlocker, mRecycleView); + mtabViewController = new tabViewController(this, mTabs, mRemoveSelection, mMenuButton, mClearSelection, mPopupUndo, mSelectionCount, mBlocker, mRecycleView, mNestedScrollView); } @SuppressLint("ClickableViewAccessibility") @@ -112,24 +119,65 @@ public class tabController extends Fragment } return false; }); + + mNestedScrollView.setOnTouchListener((v, event) -> { + if (event.getAction() == MotionEvent.ACTION_UP) { + onSwipeBounce(0); + } + + return false; + }); + + mNestedScrollView.getViewTreeObserver().addOnScrollChangedListener(() -> { + int scrollY = mNestedScrollView.getScrollY(); + + minScroll = scrollY; + maxScroll = mRecycleView.computeVerticalScrollRange() - helperMethod.pxFromDp(500); + onSwipeBounce(300); + }); + + mNestedScrollView.setOnScrollChangeListener((NestedScrollView.OnScrollChangeListener) (v, scrollX, scrollY, oldScrollX, oldScrollY) -> { + if (mRecycleView.getChildAt(mRecycleView.getChildCount() - 1) != null) { + if ((scrollY >= (mRecycleView.getChildAt(mRecycleView.getChildCount() - 1).getMeasuredHeight() - mRecycleView.getMeasuredHeight())) && scrollY > oldScrollY) { + Log.i("FUCK2:::::::",scrollY+""); + onSwipeBounce(0); + } + } + }); + } + + public void onSwipeBounce(int mDuration){ + if(minScroll > maxScroll){ + if(mScrollHandler!=null){ + mScrollHandler.removeCallbacksAndMessages(null); + } + + mScrollHandler = new Handler(); + mScrollRunnable = () -> { + mNestedScrollView.clearFocus(); + mRecycleView.clearFocus(); + mNestedScrollView.smoothScrollTo(0, maxScroll); + }; + mScrollHandler.postDelayed(mScrollRunnable, mDuration); + } } public void initializeList(){ - LinearLayoutManager layoutManager = new LinearLayoutManager(this.getContext()); tabAdapter adapter = new tabAdapter(mListModel.getList(),new adapterCallback()); mTabAdapter = adapter; - layoutManager.setReverseLayout(true); ((SimpleItemAnimator) Objects.requireNonNull(mRecycleView.getItemAnimator())).setSupportsChangeAnimations(false); mRecycleView.setAdapter(adapter); - mRecycleView.setItemViewCacheSize(100); mRecycleView.setNestedScrollingEnabled(false); - mRecycleView.setHasFixedSize(true); - mRecycleView.setItemViewCacheSize(100); - mRecycleView.setDrawingCacheEnabled(true); - mRecycleView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); - mRecycleView.setLayoutManager(new LinearLayoutManager(this.getContext())); + mRecycleView.setHasFixedSize(false); + + if(status.sTabGridLayoutEnabled){ + mRecycleView.setLayoutManager(new GridLayoutManager(this.getContext(), 2)); + }else { + mRecycleView.setLayoutManager(new LinearLayoutManager(this.getContext())); + } + initTabCount(0); } @@ -174,20 +222,18 @@ public class tabController extends Fragment mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.NOTIFY_SWIPE, Collections.singletonList(position)); } onShowUndoDialog(); - - final Handler handler = new Handler(); - handler.postDelayed(() -> - { - ViewGroup.LayoutParams params = mRecycleView.getLayoutParams(); - params.height = helperMethod.pxFromDp((mTabAdapter.getItemCount()) * 90); - mRecycleView.setLayoutParams(params); - }, 400); - + viewHolder.itemView.animate().alpha(0); } @Override public void onChildDraw(@NonNull Canvas c, @NonNull RecyclerView recyclerView, @NonNull RecyclerView.ViewHolder viewHolder, float dX, float dY, int actionState, boolean isCurrentlyActive) { if (actionState == ItemTouchHelper.ACTION_STATE_SWIPE) { + float alpha = 1 - (Math.abs(dX) / recyclerView.getWidth())*1.75f; + if(alpha <0.35){ + alpha = 0.35f; + } + viewHolder.itemView.setAlpha(alpha); + Canvas mCanvas = (Canvas) mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_GENERATE_SWIPABLE_BACKGROUND, Arrays.asList(c, viewHolder, dX, actionState)); super.onChildDraw(mCanvas, recyclerView, viewHolder, dX, dY, actionState, isCurrentlyActive); } @@ -210,35 +256,27 @@ public class tabController extends Fragment initTabCount(400); activityContextManager.getInstance().getHomeController().onLoadTabFromTabController(); mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.INIT_FIRST_ROW, null); + onSwipeBounce(0); } public boolean onInitRemoveView(int pIndex, boolean pCreateBackup){ mListModel.onTrigger(tabEnums.eModelCallback.M_REMOVE_TAB,Collections.singletonList(pIndex)); mListModel.getList().remove(pIndex); if(mListModel.getList().size()<1){ - mRecycleView.animate().setDuration(350).alpha(0).withEndAction(() -> { - mTabAdapter.notifyDataSetChanged(); - }); + mRecycleView.animate().setDuration(350).alpha(0).withEndAction(() -> mTabAdapter.notifyDataSetChanged()); activityContextManager.getInstance().getHomeController().onLoadTabFromTabController(); + new Handler().postDelayed(() -> onSwipeBounce(0), 400); return false; }else{ mTabAdapter.notifyItemRangeChanged(pIndex, mTabAdapter.getItemCount() - pIndex); activityContextManager.getInstance().getHomeController().onLoadTabFromTabController(); + new Handler().postDelayed(() -> onSwipeBounce(0), 400); return true; } } public void initTabCount(int pDelay) { - final Handler handler = new Handler(); - handler.postDelayed(() -> - { - if(mListModel.getList().size()>0){ - ViewGroup.LayoutParams params = mRecycleView.getLayoutParams(); - params.height = helperMethod.pxFromDp((mTabAdapter.getItemCount()) * 90); - mRecycleView.setLayoutParams(params); - } - }, pDelay); activityContextManager.getInstance().getHomeController().initTabCountForced(); } @@ -247,8 +285,7 @@ public class tabController extends Fragment } public void onNewTabInvoked(){ - int mBackupList = ((ArrayList)mListModel.onTrigger(tabEnums.eModelCallback.M_GET_BACKUP,null)).size(); - if(mListModel.getList().size()-mBackupList>=1){ + if(mListModel.getList().size()>=1){ mHomeController.onNewTabBackground(true,false); } onClose(); @@ -258,9 +295,6 @@ public class tabController extends Fragment public void onRestoreTab(View view){ ArrayList mBackup = (ArrayList)mListModel.onTrigger(tabEnums.eModelCallback.M_LOAD_BACKUP,null); - ViewGroup.LayoutParams params = mRecycleView.getLayoutParams(); - params.height = helperMethod.pxFromDp((mTabAdapter.getItemCount()+mBackup.size()) * 90); - mRecycleView.setLayoutParams(params); final Handler handler = new Handler(); handler.postDelayed(() -> @@ -328,10 +362,15 @@ public class tabController extends Fragment mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_SHOW_SELECTION_MENU, Arrays.asList(false,0)); mtabViewController.onTrigger(tabEnums.eTabViewCommands.ON_HIDE_SELECTION, null); activityContextManager.getInstance().getHomeController().onLoadTabFromTabController(); + + // mTabAdapter.notifyDataSetChanged(); + initTabCount(400); + } public void onClearSelection(View view) { mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.M_CLEAR_ALL_SELECTION, null); + mNestedScrollView.smoothScrollTo(0,0); } public void onTriggerSelected(View view){ @@ -353,11 +392,10 @@ public class tabController extends Fragment mRecycleView.animate().setDuration(350).alpha(0).withEndAction(() -> { onClearTabBackup(); mTabAdapter.onTrigger(tabEnums.eTabAdapterCommands.REMOVE_ALL, null); - initTabCount(400); }); } else if(pView.getId() == R.id.pOpenSetting){ - helperMethod.openActivity(settingHomeController.class, constants.CONST_LIST_HISTORY, activityContextManager.getInstance().getHomeController(),true); + helperMethod.openActivity(settingAdvanceController.class, constants.CONST_LIST_HISTORY, activityContextManager.getInstance().getHomeController(),true); } mtabViewController.onTrigger(tabEnums.eTabViewCommands.M_DISMISS_MENU, null); } @@ -371,7 +409,6 @@ public class tabController extends Fragment @Override public void onStop() { - // onBackPressed(); super.onStop(); } @@ -379,7 +416,6 @@ public class tabController extends Fragment public void onPause() { status.sSettingIsAppPaused = true; - // onBackPressed(); super.onPause(); } 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 a1a4ae3e..c237b77f 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 @@ -12,6 +12,7 @@ import android.os.Build; import android.os.Handler; import android.view.LayoutInflater; import android.view.View; +import android.view.ViewGroup; import android.view.Window; import android.view.WindowManager; import android.widget.ActionMenuView; @@ -19,10 +20,12 @@ import android.widget.Button; import android.widget.ImageButton; import android.widget.ImageView; import android.widget.PopupWindow; +import android.widget.RelativeLayout; import android.widget.TextView; import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; +import androidx.core.widget.NestedScrollView; import androidx.fragment.app.Fragment; import androidx.recyclerview.widget.ItemTouchHelper; import androidx.recyclerview.widget.RecyclerView; @@ -47,6 +50,7 @@ class tabViewController private TextView mSelectionCount; private ImageView mBlocker; private RecyclerView mRecycleView; + private NestedScrollView mNestedScrollView; /*Private Local Variables*/ private Handler mDelayHandler = new Handler(); @@ -54,7 +58,7 @@ class tabViewController /*Initializations*/ - tabViewController(Fragment mContext, Button pTabs, ImageView pRemoveSelection, ImageButton pMenuButton, ImageButton pClearSelection, View pToastLayoutRoot, TextView pSelectionCount, ImageView pBlocker, RecyclerView pRecycleView) + tabViewController(Fragment mContext, Button pTabs, ImageView pRemoveSelection, ImageButton pMenuButton, ImageButton pClearSelection, View pToastLayoutRoot, TextView pSelectionCount, ImageView pBlocker, RecyclerView pRecycleView, NestedScrollView pNestedScrollView) { this.mContext = mContext; this.mTabs = pTabs; @@ -65,6 +69,7 @@ class tabViewController this.mSelectionCount = pSelectionCount; this.mBlocker = pBlocker; this.mRecycleView = pRecycleView; + this.mNestedScrollView = pNestedScrollView; initUI(); initPostUI(); @@ -86,6 +91,10 @@ class tabViewController mMenuButton.animate().setStartDelay(200).setDuration(350).alpha(1); mMenuButton.setVisibility(View.VISIBLE); + if(!status.sTabGridLayoutEnabled){ + mNestedScrollView.setPadding(0,0,0,0); + } + onHideUndoDialogInit(); } @@ -214,22 +223,26 @@ class tabViewController if(pDX > 0){ if(status.sTheme == enums.Theme.THEME_DARK){ - pCanvas.drawARGB(150, 59, 57, 70); + pCanvas.drawARGB(255,28, 27, 33); }else { - pCanvas.drawARGB(150, 230, 230, 230); + pCanvas.drawARGB(255, 255, 255, 255); + } + if(!status.sTabGridLayoutEnabled){ + icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.dustbin); + RectF icon_dest = new RectF((float) itemView.getLeft() + width ,(float) itemView.getTop() + width,(float) itemView.getLeft()+ 2*width,(float)itemView.getBottom() - width); + pCanvas.drawBitmap(icon,null,icon_dest, mPainter); } - icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.dustbin); - RectF icon_dest = new RectF((float) itemView.getLeft() + width ,(float) itemView.getTop() + width,(float) itemView.getLeft()+ 2*width,(float)itemView.getBottom() - width); - pCanvas.drawBitmap(icon,null,icon_dest, mPainter); } else { if(status.sTheme == enums.Theme.THEME_DARK){ - pCanvas.drawARGB(150, 59, 57, 70); + pCanvas.drawARGB(255,28, 27, 33); }else { - pCanvas.drawARGB(150, 230, 230, 230); + pCanvas.drawARGB(255, 255, 255, 255); + } + if(!status.sTabGridLayoutEnabled){ + icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.dustbin); + RectF icon_dest = new RectF((float) itemView.getRight() - 2*width ,(float) itemView.getTop() + width,(float) itemView.getRight() - width,(float)itemView.getBottom() - width); + pCanvas.drawBitmap(icon,null,icon_dest, mPainter); } - icon = BitmapFactory.decodeResource(mContext.getResources(), R.drawable.dustbin); - RectF icon_dest = new RectF((float) itemView.getRight() - 2*width ,(float) itemView.getTop() + width,(float) itemView.getRight() - width,(float)itemView.getBottom() - width); - pCanvas.drawBitmap(icon,null,icon_dest, mPainter); } } } 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 083fd78a..a791ffb1 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java @@ -13,6 +13,11 @@ public class enums /*General Enums*/ + public static class AddTabCallback { + public static final int TAB_ADDED = 0; + public static final int TAB_FULL = 1; + } + public static class Theme { public static final int THEME_LIGHT = 0; public static final int THEME_DARK = 1; diff --git a/app/src/main/java/com/darkweb/genesissearchengine/constants/keys.java b/app/src/main/java/com/darkweb/genesissearchengine/constants/keys.java index dd2aa2b4..a22ee7da 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/keys.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/keys.java @@ -49,12 +49,14 @@ public class keys public static final String SETTING_RESTORE_TAB = "SETTING_RESTORE_TAB"; public static final String SETTING_CHARACTER_ENCODING = "SETTING_CHARACTER_ENCODING"; public static final String SETTING_SHOW_IMAGES = "SETTING_SHOW_IMAGES"; + public static final String SETTING_SHOW_TAB_GRID = "SETTING_SHOW_TAB_GRID"; public static final String SETTING_SHOW_FONTS = "SETTING_SHOW_FONTS"; public static final String SETTING_TOOLBAR_THEME = "SETTING_TOOLBAR_THEME"; public static final String SETTING_THEME = "SETTING_THEME_LIGHT"; public static final String SETTING_FULL_SCREEN_BROWSIING = "SETTING_FULL_SCREEN_BROWSIING"; public static final String SETTING_OPEN_URL_IN_NEW_TAB = "SETTING_OPEN_URL_IN_NEW_TAB"; public static final String SETTING_LIST_VIEW = "SETTING_LIST_VIEW"; + public static final String SETTING_TOOLBAR_THEME_ALLOWED = "SETTING_TOOLBAR_THEME_ALLOWED"; /*Bridge Settings*/ 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 07bdde3d..55af2f81 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java @@ -24,6 +24,7 @@ public class status public static String sSettingLanguage = "en"; public static String sSettingLanguageRegion = "Us"; public static String mReferenceWebsites; + public static String sBridgeCustomBridge = strings.GENERIC_EMPTY_STR; public static boolean sSettingEnableZoom = true; public static boolean sSettingEnableVoiceInput = true; @@ -40,9 +41,8 @@ public class status public static boolean sSettingIsAppRated = false; public static boolean sSettingFontAdjustable = true; public static boolean sSettingFirstStart = true; - public static int sSettingTrackingProtection = 0; public static boolean mThemeApplying = false; - + public static boolean sTabGridLayoutEnabled = true; public static boolean sStatusDoNotTrack = true; public static boolean sRestoreTabs = false; public static boolean sCharacterEncoding = false; @@ -52,23 +52,19 @@ public class status public static boolean sOpenURLInNewTab = true; public static boolean sDefaultNightMode; public static boolean sLogListView; - - public static float sSettingFontSize = 1; + public static boolean sBridgeGatewayAuto = false; + public static boolean sBridgeGatewayManual = false; + public static boolean sVPNStatus = false; + public static boolean sBridgeStatus = false; public static int sTheme = enums.Theme.THEME_DEFAULT; public static int sSettingCookieStatus = ContentBlocking.AntiTracking.DEFAULT; public static int sShowImages = -1; public static int sWidgetResponse = enums.WidgetResponse.NONE; - - /*Bridge Status*/ - - public static String sBridgeCustomBridge = strings.GENERIC_EMPTY_STR; - public static boolean sBridgeGatewayAuto = false; - public static boolean sBridgeGatewayManual = false; - public static boolean sVPNStatus = false; - public static boolean sBridgeStatus = false; public static int sBridgeNotificationManual = 0; + public static int sSettingTrackingProtection = 0; + public static float sSettingFontSize = 1; public static void initStatus() { @@ -92,13 +88,11 @@ public class status status.sSettingCookieStatus = (int)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_INT, Arrays.asList(keys.SETTING_COOKIE_ADJUSTABLE,ACCEPT_FIRST_PARTY)); status.sSettingFontSize = (int)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_FLOAT, Arrays.asList(keys.SETTING_FONT_SIZE,100)); status.sSettingLanguage = (String)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_STRING, Arrays.asList(keys.SETTING_LANGUAGE,strings.SETTING_DEFAULT_LANGUAGE)); - status.mReferenceWebsites = (String)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_STRING, Arrays.asList(keys.HOME_REFERENCE_WEBSITES,strings.HOME_REFERENCE_WEBSITES_DEFAULT)); status.sSettingLanguageRegion = (String)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_STRING, Arrays.asList(keys.SETTING_LANGUAGE_REGION,strings.SETTING_DEFAULT_LANGUAGE_REGION)); status.sSettingSearchStatus = (String)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_STRING, Arrays.asList(keys.SETTING_SEARCH_ENGINE,constants.CONST_BACKEND_GENESIS_URL)); status.sBridgeCustomBridge = (String)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,strings.BRIDGE_CUSTOM_BRIDGE_OBFS4)); status.sBridgeNotificationManual = (int)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_INT, Arrays.asList(keys.SETTING_NOTIFICATION_STATUS,0)); - status.sRestoreTabs = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_RESTORE_TAB,false)); status.sCharacterEncoding = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_CHARACTER_ENCODING,false)); status.sShowImages = (int)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_INT, Arrays.asList(keys.SETTING_SHOW_IMAGES,0)); @@ -108,6 +102,7 @@ public class status status.sTheme = (int)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_INT, Arrays.asList(keys.SETTING_THEME,enums.Theme.THEME_DEFAULT)); status.sOpenURLInNewTab = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_OPEN_URL_IN_NEW_TAB,true)); status.sLogListView = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_LIST_VIEW,true)); + status.sTabGridLayoutEnabled = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_SHOW_TAB_GRID,true)); } } 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 f419995a..a990c27e 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java @@ -2,32 +2,26 @@ package com.darkweb.genesissearchengine.dataManager; import android.annotation.SuppressLint; import android.content.ContentValues; -import android.content.pm.ActivityInfo; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.ImageView; - import androidx.annotation.NonNull; - import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.appManager.databaseManager.databaseController; import com.darkweb.genesissearchengine.appManager.homeManager.geckoManager.NestedGeckoView; import com.darkweb.genesissearchengine.appManager.homeManager.geckoManager.geckoSession; import com.darkweb.genesissearchengine.appManager.tabManager.tabRowModel; import com.darkweb.genesissearchengine.constants.enums; -import com.darkweb.genesissearchengine.constants.messages; -import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.constants.strings; -import com.darkweb.genesissearchengine.helperManager.helperMethod; - import org.mozilla.geckoview.GeckoResult; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Calendar; -import java.util.Collections; import java.util.List; import java.util.Locale; @@ -53,12 +47,13 @@ class tabDataModel } } - void addTabs(geckoSession mSession,boolean pIsDataSavable){ + int addTabs(geckoSession mSession,boolean pIsDataSavable){ tabRowModel mTabModel = new tabRowModel(mSession); mTabs.add(0,mTabModel); if(mTabs.size()>20){ closeTab(mTabs.get(mTabs.size()-1).getSession(), mTabs.get(mTabs.size()-1).getmId()); + return enums.AddTabCallback.TAB_FULL; } if(pIsDataSavable){ @@ -70,6 +65,7 @@ class tabDataModel databaseController.getInstance().execSQL("REPLACE INTO tab(mid,date,title,url,theme) VALUES('"+ mTabModel.getmId() +"','" + m_date + "',?,?,?);",params); } + return enums.AddTabCallback.TAB_ADDED; } void clearTab() { @@ -139,7 +135,6 @@ class tabDataModel boolean updateTab(String mSessionID, geckoSession pSession) { - boolean mSessionUpdated = false; for(int counter = 0; counter< mTabs.size(); counter++){ if(mTabs.get(counter).getSession().getSessionID().equals(mSessionID)) @@ -148,16 +143,12 @@ class tabDataModel params[0] = mTabs.get(counter).getSession().getTitle(); params[1] = mTabs.get(counter).getSession().getCurrentURL(); params[2] = mTabs.get(counter).getSession().getTheme(); - mSessionUpdated = true; - String m_date = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS", Locale.ENGLISH).format(Calendar.getInstance().getTime()); databaseController.getInstance().execSQL("UPDATE tab SET date = '" + m_date + "' , url = ? , title = ?, theme = ? WHERE mid='"+mTabs.get(counter).getmId() + "'",params); return true; } } - if(!mSessionUpdated){ - addTabs(pSession, true); - } + addTabs(pSession, true); return false; } @@ -231,8 +222,11 @@ class tabDataModel if (mTabs.get(counter).getSession().getSessionID().equals(pSessionID)) { GeckoResult mResult = pBitmapManager.withHandler(handler); Bitmap mBitmap = pBitmapManager.poll(4000); + ByteArrayOutputStream out = new ByteArrayOutputStream(); + mBitmap.compress(Bitmap.CompressFormat.PNG, 20, out); + Bitmap decoded = BitmapFactory.decodeStream(new ByteArrayInputStream(out.toByteArray())); - mTabs.get(finalCounter).setmBitmap(mBitmap); + mTabs.get(finalCounter).setmBitmap(decoded); if(pImageView!=null){ activityContextManager.getInstance().getHomeController().runOnUiThread(() -> pImageView.setImageBitmap(mBitmap)); } @@ -298,7 +292,7 @@ class tabDataModel clearTab(); } else if(pCommands == dataEnums.eTabCommands.M_ADD_TAB){ - addTabs((geckoSession)pData.get(0), (boolean)pData.get(1)); + return addTabs((geckoSession)pData.get(0), (boolean)pData.get(1)); } else if(pCommands == dataEnums.eTabCommands.M_UPDATE_TAB){ updateTab((String) pData.get(1), (geckoSession) pData.get(5)); 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 82c22bf7..3f78ab4e 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java @@ -1,7 +1,6 @@ package com.darkweb.genesissearchengine.pluginManager; import android.app.Dialog; -import android.content.DialogInterface; import android.content.Intent; import android.content.res.Resources; import android.graphics.Color; @@ -10,7 +9,6 @@ import android.graphics.drawable.Drawable; import android.graphics.drawable.InsetDrawable; import android.net.Uri; import android.os.Handler; -import android.util.Log; import android.view.Gravity; import android.view.Window; import android.view.WindowManager; @@ -152,15 +150,15 @@ class messageManager private void newIdentityCreated() { + final Handler handler = new Handler(); + Runnable runnable = () -> mDialog.dismiss(); + initializeDialog(R.layout.popup_new_circuit, Gravity.BOTTOM); mDialog.findViewById(R.id.pDismiss).setOnClickListener(v -> mDialog.dismiss()); - final Handler handler = new Handler(); - Runnable runnable = () -> { - mDialog.dismiss(); - }; - handler.postDelayed(runnable, 1500); + mDialog.setOnDismissListener(dialog -> handler.removeCallbacks(runnable)); + handler.postDelayed(runnable, 1500); } private void popupBlocked() @@ -183,6 +181,26 @@ class messageManager } + private void maxTabReached() + { + final Handler handler = new Handler(); + Runnable runnable = () -> { + mDialog.dismiss(); + }; + + initializeDialog(R.layout.popup_max_tab, Gravity.BOTTOM); + mDialog.getWindow().setDimAmount(0); + mDialog.findViewById(R.id.pDismiss).setOnClickListener(v -> { + mDialog.dismiss(); + handler.removeCallbacks(runnable); + }); + + mDialog.setOnDismissListener(dialog -> handler.removeCallbacks(runnable)); + + handler.postDelayed(runnable, 1500); + + } + private void notSupportMessage() { initializeDialog(R.layout.popup_not_supported, Gravity.BOTTOM); @@ -611,6 +629,11 @@ class messageManager /*VERIFIED*/ popupBlocked(); break; + + case M_MAX_TAB_REACHED: + /*VERIFIED*/ + maxTabReached(); + break; } } } 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 aa1e59dc..be94047a 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_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_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 } 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/tab/xml/tx_border.xml b/app/src/main/res/custom-xml/tab/xml/tx_border.xml new file mode 100644 index 00000000..51c1f8ef --- /dev/null +++ b/app/src/main/res/custom-xml/tab/xml/tx_border.xml @@ -0,0 +1,17 @@ + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/tab/xml/tx_border_image_dark_no_corner.xml b/app/src/main/res/custom-xml/tab/xml/tx_border_image_dark_no_corner.xml new file mode 100644 index 00000000..5b9b4d00 --- /dev/null +++ b/app/src/main/res/custom-xml/tab/xml/tx_border_image_dark_no_corner.xml @@ -0,0 +1,9 @@ + + + + + + + + diff --git a/app/src/main/res/custom-xml/tab/xml/tx_ripple_light.xml b/app/src/main/res/custom-xml/tab/xml/tx_ripple_light.xml new file mode 100644 index 00000000..30e269bb --- /dev/null +++ b/app/src/main/res/custom-xml/tab/xml/tx_ripple_light.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/tick_recycler_view.png b/app/src/main/res/drawable-hdpi/tick_recycler_view.png index 69e28ce286f63b591982fb937d032dc6fe92f219..3526b49cdc0c5b319354e6f657595a7a434a7654 100644 GIT binary patch literal 35888 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�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 literal 52313 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

C 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 D<;Ae( diff --git a/app/src/main/res/layouts/alert/layout/popup_max_tab.xml b/app/src/main/res/layouts/alert/layout/popup_max_tab.xml new file mode 100644 index 00000000..b836f0f8 --- /dev/null +++ b/app/src/main/res/layouts/alert/layout/popup_max_tab.xml @@ -0,0 +1,74 @@ + + + + + + + +