diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 4dc05829..8ea9459a 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -11,7 +11,15 @@ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index a850ce8f..e6a117f0 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -1,8 +1,21 @@ \ No newline at end of file diff --git a/app/build.gradle b/app/build.gradle index 44c0c02f..0cb47f43 100755 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,11 +21,12 @@ repositories { android { compileSdkVersion project.ext.compileSdkVersion + ndkVersion "21.3.6528147" defaultConfig { applicationId project.ext.applicationId minSdkVersion project.ext.minSdkVersion - // targetSdkVersion project.ext.targetSdkVersion + targetSdkVersion project.ext.targetSdkVersion versionCode project.ext.versionCode versionName project.ext.versionName } @@ -74,8 +75,10 @@ android { res.srcDirs = [ 'src/main/res/layouts/history', + 'src/main/res/layouts/tab', 'src/main/res/layouts/language', 'src/main/res/layouts/orbot', + 'src/main/res/layouts/orbotLog', 'src/main/res/layouts/setting', 'src/main/res/layouts/bridge', 'src/main/res/layouts/alert', @@ -84,6 +87,7 @@ android { 'src/main/res/layouts/shared/listviews', 'src/main/res/layouts/other', 'src/main/res/custom-xml/alert', + 'src/main/res/custom-xml/tab', 'src/main/res/custom-xml/images', 'src/main/res/custom-xml/bookmark', 'src/main/res/custom-xml/generic', @@ -91,6 +95,7 @@ android { 'src/main/res/custom-xml/home', 'src/main/res/custom-xml/landing', 'src/main/res/custom-xml/orbot', + 'src/main/res/custom-xml/orbot_log', 'src/main/res/custom-xml/setting', 'src/main/res/layouts', 'src/main/res/images', @@ -124,6 +129,7 @@ dependencies { implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.legacy:legacy-preference-v14:1.0.0' implementation 'androidx.recyclerview:recyclerview:1.1.0' + implementation 'androidx.cardview:cardview:1.0.0' // Testing-only dependencies androidTestImplementation('androidx.test.espresso:espresso-core:3.3.0') { @@ -149,7 +155,7 @@ dependencies { implementation 'com.crowdfire.cfalertdialog:cfalertdialog:1.1.0' /*Ads Manager*/ - implementation 'com.google.android.gms:play-services-ads:19.4.0' + implementation 'com.google.android.gms:play-services-ads:19.5.0' /*Crashlytics*/ @@ -163,9 +169,11 @@ dependencies { implementation project(path: ':orbotservice') implementation 'androidx.legacy:legacy-support-v4:1.0.0' implementation 'com.github.apl-devs:appintro:v4.2.2' + implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' /*Helper Libraries*/ implementation 'com.chauthai.overscroll:overscroll-bouncy:0.1.1' + androidTestImplementation "junit:junit:4.13.1" } apply plugin: 'com.android.application' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0261dddd..1696b865 100755 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -28,58 +28,89 @@ + + + + + + + + + + @@ -151,6 +182,15 @@ android:name="com.google.android.gms.ads.APPLICATION_ID" android:value="ca-app-pub-5074525529134731~2926711128" /> + + + + + + + + +A Simple HTML Document + + + +

This is a very simple HTML document

+

It only has two paragraphs

+ + \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java index 5359c07a..f01da953 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/activityContextManager.java @@ -3,6 +3,8 @@ package com.darkweb.genesissearchengine.appManager; import com.darkweb.genesissearchengine.appManager.bookmarkManager.bookmarkController; import com.darkweb.genesissearchengine.appManager.historyManager.historyController; import com.darkweb.genesissearchengine.appManager.homeManager.homeController; +import com.darkweb.genesissearchengine.appManager.orbotLogManager.orbotLogController; +import com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage.settingController; import com.darkweb.genesissearchengine.appManager.tabManager.tabController; public class activityContextManager @@ -16,11 +18,13 @@ public class activityContextManager } /*Private Contexts*/ - private historyController history_controller; - private bookmarkController bookmark_controller; - private homeController home_controller; - private tabController tab_controller; - private android.app.Activity sCurrentActivity = null; + private historyController pHistoryController; + private bookmarkController pBookmarkController; + private homeController pHomeController; + private tabController pTabController; + private android.app.Activity pCurrentActivity = null; + private settingController pSettingController; + private orbotLogController pOrbotLogController; /*Initialization*/ @@ -30,37 +34,51 @@ public class activityContextManager /*List ContextGetterSetters*/ public historyController getHistoryController(){ - return history_controller; + return pHistoryController; } public void setHistoryController(historyController history_controller){ - this.history_controller = history_controller; + this.pHistoryController = history_controller; } public bookmarkController getBookmarkController(){ - return bookmark_controller; + return pBookmarkController; } public void setBookmarkController(bookmarkController bookmark_controller){ - this.bookmark_controller = bookmark_controller; + this.pBookmarkController = bookmark_controller; } public homeController getHomeController(){ - return home_controller; + return pHomeController; } public void setHomeController(homeController home_controller){ - this.home_controller = home_controller; + this.pHomeController = home_controller; } public tabController getTabController(){ - return tab_controller; + return pTabController; } public void setTabController(tabController tab_controller){ - this.tab_controller = tab_controller; + this.pTabController = tab_controller; } - public void setCurrentActivity(android.app.Activity sCurrentActivity){ - this.sCurrentActivity = sCurrentActivity; + public orbotLogController getOrbotLogController(){ + return pOrbotLogController; + } + public void setOrbotLogController(orbotLogController pOrbotLogController){ + this.pOrbotLogController = pOrbotLogController; + } + + public settingController getSettingController(){ + return pSettingController; + } + public void setSettingController(settingController pSettingController){ + this.pSettingController = pSettingController; + } + + public void setCurrentActivity(android.app.Activity pCurrentActivity){ + this.pCurrentActivity = pCurrentActivity; } public android.app.Activity setCurrentActivity(){ - return sCurrentActivity; + return pCurrentActivity; } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bookmarkManager/bookmarkAdapter.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bookmarkManager/bookmarkAdapter.java index 0281b813..8553886b 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bookmarkManager/bookmarkAdapter.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bookmarkManager/bookmarkAdapter.java @@ -14,7 +14,6 @@ import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.RecyclerView; -import com.darkweb.genesissearchengine.appManager.historyManager.bookmarkEnums; import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.helperManager.eventObserver; @@ -28,6 +27,7 @@ import java.util.Date; import java.util.List; import static android.content.Context.LAYOUT_INFLATER_SERVICE; +import static com.darkweb.genesissearchengine.constants.constants.HISTORY_LOAD_MORE; public class bookmarkAdapter extends RecyclerView.Adapter { @@ -41,7 +41,6 @@ public class bookmarkAdapter extends RecyclerView.Adapter mLongSelectedDate = new ArrayList<>(); private ArrayList mLongSelectedIndex = new ArrayList<>(); private ArrayList mLongSelectedID = new ArrayList<>(); - private ArrayList mLongPressedViewHolders = new ArrayList<>(); private AppCompatActivity mContext; private bookmarkAdapterView mHistroyAdapterView; @@ -70,15 +69,14 @@ public class bookmarkAdapter extends RecyclerView.Adapter { - mCurrentList.add(new bookmarkRowModel(null, "loading",-2)); + mCurrentList.add(new bookmarkRowModel(HISTORY_LOAD_MORE,null,-2)); notifyItemInserted(mCurrentList.size()); }); } private void onLoadingClear(){ - for(int mCounter = 0; mCounter< mCurrentList.size(); mCounter++){ - if(mCurrentList.get(mCounter).getHeader().equals("loading")){ + if(mCurrentList.get(mCounter).getHeader().equals(HISTORY_LOAD_MORE)){ int finalM_counter = mCounter; mContext.runOnUiThread(() -> { mCurrentList.remove(finalM_counter); @@ -121,7 +119,7 @@ public class bookmarkAdapter extends RecyclerView.Adapter getLongSelectedURL(){ + private ArrayList getLongSelectedleURL(){ return mLongSelectedIndex; } public void onDeleteSelected(){ for(int m_counter = 0; m_counter< mLongSelectedIndex.size(); m_counter++){ for(int m_counter_inner = 0; m_counter_inner< mCurrentList.size(); m_counter_inner++){ - if(mCurrentList.get(m_counter_inner).getDate() == mLongSelectedDate.get(m_counter) && mLongSelectedIndex.get(m_counter).equals(mCurrentList.get(m_counter_inner).getDescription())){ + if(mCurrentList.get(m_counter_inner).getDate() == mLongSelectedDate.get(m_counter) && mLongSelectedIndex.get(m_counter).equals("https://"+ mCurrentList.get(m_counter_inner).getDescription())){ mEvent.invokeObserver(Collections.singletonList(mRealIndex.get(m_counter_inner)),enums.etype.url_clear); mEvent.invokeObserver(Collections.singletonList(mLongSelectedID.get(m_counter)),enums.etype.url_clear_at); invokeFilter(false); mEvent.invokeObserver(Collections.singletonList(m_counter_inner),enums.etype.is_empty); boolean mDateVerify = false; - initializeModelWithDate(false); - if(mCurrentList.size()>0 && mCurrentList.get(m_counter_inner-1).getHeader()==null && (mCurrentList.size()>m_counter_inner+1 && mCurrentList.get(m_counter_inner+1).getHeader()==null || mCurrentList.size()==m_counter_inner+1)){ + if(mCurrentList.size()>0 && mCurrentList.get(m_counter_inner-1).getDescription()==null && (mCurrentList.size()>m_counter_inner+1 && mCurrentList.get(m_counter_inner+1).getDescription()==null || mCurrentList.size()==m_counter_inner+1)){ mDateVerify = true; } @@ -197,18 +194,10 @@ public class bookmarkAdapter extends RecyclerView.Adapter { + pItemView.setOnTouchListener((v, event) -> { - if (mRecyclerPositionX1!=0 && Math.abs(event.getX() - mRecyclerPositionX1) > 400 && !mLongPressedMenuActive) { - v.setPressed(false); - pItemView.clearFocus(); - handler.removeCallbacks(mLongPressed); - pItemView.setOnTouchListener(null); - pItemView.clearFocus(); - if(mPassedList.size()<=1){ - mPassedList.clear(); - initializeModelWithDate(false); - notifyItemRemoved(0); - notifyItemRangeChanged(0, 1); - mEvent.invokeObserver(Collections.singletonList(0),enums.etype.is_empty); - }else { - bookmarkAdapter.this.onClose(pPosition); - } - return true; - } + if (mRecyclerPositionX1!=0 && Math.abs(event.getX() - mRecyclerPositionX1) > 400 && !mLongPressedMenuActive) { + v.setPressed(false); + pItemView.clearFocus(); + handler.removeCallbacks(mLongPressed); + pItemView.setOnTouchListener(null); + pItemView.clearFocus(); + if(mPassedList.size()<=1){ + mPassedList.clear(); + initializeModelWithDate(false); + notifyItemRemoved(0); + notifyItemRangeChanged(0, 1); + mEvent.invokeObserver(Collections.singletonList(0),enums.etype.is_empty); + }else { + initializeModelWithDate(false); + bookmarkAdapter.this.onClose(pPosition); + } + return true; + } - mPointerPosition = event.getX(); - if (event.getAction() == MotionEvent.ACTION_UP) { - mRecyclerPositionX2 = event.getX(); - float deltaX = mRecyclerPositionX2 - mRecyclerPositionX1; + mPointerPosition = event.getX(); + if (event.getAction() == MotionEvent.ACTION_UP) { + mRecyclerPositionX2 = event.getX(); + float deltaX = mRecyclerPositionX2 - mRecyclerPositionX1; - if (mLongSelectedIndex.size() > 0) { - if (Math.abs(deltaX) <= 20 && !mLongPressedMenuActive) { - if (mLongSelectedIndex.contains(pUrl) && mLongSelectedID.contains(pId)) { - handler.removeCallbacks(mLongPressed); - bookmarkAdapter.this.onClearHighlight(pItem, pItemView, pUrl, pMenuItem, pLogoImage, false, pId, pDate); - } else{ - handler.removeCallbacks(mLongPressed); - bookmarkAdapter.this.onSelectView(pItem, pItemView, pUrl, pMenuItem, pLogoImage, false, pId, pDate); - } - } - return false; - } + Log.i("FCK2","FCK2 : " + mLongSelectedIndex.size()); + if (mLongSelectedIndex.size() > 0) { + if (Math.abs(deltaX) <= 20 && !mLongPressedMenuActive) { + if (mLongSelectedIndex.contains(pUrl) && mLongSelectedID.contains(pId)) { + handler.removeCallbacks(mLongPressed); + bookmarkAdapter.this.onClearHighlight(pItemView, pUrl, pMenuItem, pLogoImage, false, pId, pDate); + } else{ + handler.removeCallbacks(mLongPressed); + bookmarkAdapter.this.onSelectView(pItemView, pUrl, pMenuItem, pLogoImage, false, pId, pDate); + } + } + return false; + } - if (Math.abs(deltaX) > 100) { - v.setPressed(false); - handler.removeCallbacks(mLongPressed); - bookmarkAdapter.this.onClose(pPosition); - } else { - v.setPressed(false); - handler.removeCallbacks(mLongPressed); - mEvent.invokeObserver(Collections.singletonList(pUrl), enums.etype.url_triggered); - } + if (Math.abs(deltaX) > 100) { + v.setPressed(false); + handler.removeCallbacks(mLongPressed); + bookmarkAdapter.this.onClose(pPosition); + } else { + v.setPressed(false); + handler.removeCallbacks(mLongPressed); + mEvent.invokeObserver(Collections.singletonList(pUrl), enums.etype.url_triggered); + } - return true; + return true; - } else if (event.getAction() == MotionEvent.ACTION_DOWN) { - mDisableCallable = false; - mLongPressedMenuActive = false; - v.setPressed(true); - mRecyclerPositionX1 = event.getX(); - Log.i("1WOW : ","WOW : " + event.getX() + " -- " + mRecyclerPositionX1); - handler.postDelayed(mLongPressed, ViewConfiguration.getLongPressTimeout()); - return true; - } else if (event.getAction() == MotionEvent.ACTION_CANCEL) { - handler.removeCallbacks(mLongPressed); - mDisableCallable = true; - if (!mLongSelectedIndex.contains(pUrl) || !mLongSelectedID.contains(pId)) { - v.setPressed(false); - } - handler.removeCallbacks(mLongPressed); + } else if (event.getAction() == MotionEvent.ACTION_DOWN) { + mDisableCallable = false; + mLongPressedMenuActive = false; + v.setPressed(true); + mRecyclerPositionX1 = event.getX(); + Log.i("1WOW : ","WOW : " + event.getX() + " -- " + mRecyclerPositionX1); + handler.postDelayed(mLongPressed, ViewConfiguration.getLongPressTimeout()); + return true; + } else if (event.getAction() == MotionEvent.ACTION_CANCEL) { + handler.removeCallbacks(mLongPressed); + mDisableCallable = true; + if (!mLongSelectedIndex.contains(pUrl) || !mLongSelectedID.contains(pId)) { + v.setPressed(false); + } + handler.removeCallbacks(mLongPressed); - return true; - } - return false; - }); + return true; + } + return false; + }); } void onOpenMenu(View pView, String pUrl, int pPosition, String pTitle){ @@ -417,61 +407,62 @@ public class bookmarkAdapter extends RecyclerView.Adapter onOpenMenu(v, pUrl, pPosition, pTitle)); - onSwipe(pItem, pItemView, pPosition, pUrl,pMenuItem, pLogoImage, pId, pDate); + onSwipe(pItemView, pPosition, pUrl,pMenuItem, pLogoImage, pId, pDate); } private void onClose(int pIndex){ - mEvent.invokeObserver(Collections.singletonList(mRealIndex.get(pIndex)),enums.etype.url_clear); - mEvent.invokeObserver(Collections.singletonList(mRealID.get(pIndex)),enums.etype.url_clear_at); - invokeFilter(false); - mEvent.invokeObserver(Collections.singletonList(mRealID.get(pIndex)),enums.etype.is_empty); - boolean mDateVerify = false; - if(mPassedList.size()>0){ - if(mCurrentList.size()>0 && mCurrentList.get(pIndex-1).getHeader()==null && (mCurrentList.size()>pIndex+1 && mCurrentList.get(pIndex+1).getHeader()==null || mCurrentList.size()==pIndex+1)){ - mDateVerify = true; - } - }else { - mCurrentList.clear(); - notifyDataSetChanged(); - return; + mEvent.invokeObserver(Collections.singletonList(mRealIndex.get(pIndex)),enums.etype.url_clear); + mEvent.invokeObserver(Collections.singletonList(mRealID.get(pIndex)),enums.etype.url_clear_at); + invokeFilter(false); + mEvent.invokeObserver(Collections.singletonList(mRealID.get(pIndex)),enums.etype.is_empty); + boolean mDateVerify = false; + if(mPassedList.size()>0){ + if(mCurrentList.size()>0 && mCurrentList.get(pIndex-1).getDescription()==null && (mCurrentList.size()>pIndex+1 && mCurrentList.get(pIndex+1).getDescription()==null || mCurrentList.size()==pIndex+1)){ + mDateVerify = true; } - int size = mCurrentList.size(); + }else { + mCurrentList.clear(); + notifyDataSetChanged(); + return; + } + int size = mCurrentList.size(); - if(mDateVerify){ - notifyItemRemoved(pIndex-1); - mCurrentList.remove(pIndex-1); - notifyItemRemoved(pIndex-1); - mCurrentList.remove(pIndex-1); - notifyItemRangeChanged(pIndex-1, mCurrentList.size()); - }else { - notifyItemRemoved(pIndex); - mCurrentList.remove(pIndex); - notifyItemRangeChanged(pIndex, mCurrentList.size()); - } + if(mDateVerify){ + notifyItemRemoved(pIndex-1); + mCurrentList.remove(pIndex-1); + notifyItemRemoved(pIndex-1); + mCurrentList.remove(pIndex-1); + notifyItemRangeChanged(pIndex-1, mCurrentList.size()); + }else { + notifyItemRemoved(pIndex); + mCurrentList.remove(pIndex); + notifyItemRangeChanged(pIndex, mCurrentList.size()); + } - if(size>1){ - new Thread(){ - public void run(){ - try - { - sleep(500); - } - catch (InterruptedException e) - { - e.printStackTrace(); - } + if(size>1){ + new Thread(){ + public void run(){ + try + { + sleep(500); } - }.start(); - } + catch (InterruptedException e) + { + e.printStackTrace(); + } + } + }.start(); + } } /*View Holder Extensions*/ @@ -504,18 +495,20 @@ public class bookmarkAdapter extends RecyclerView.Adapter0){ - mRowMenu.setVisibility(View.GONE); + mRowMenu.setVisibility(View.INVISIBLE); + mRowMenu.setClickable(false); }else { mRowMenu.setVisibility(View.VISIBLE); + mRowMenu.setClickable(true); } - if(mLongSelectedIndex.contains(model.getDescription()) && mLongSelectedID.contains(model.getID())){ + if(mLongSelectedIndex.contains("https://" + model.getDescription()) && mLongSelectedID.contains(model.getID())){ mPopupWindow = (PopupWindow) mHistroyAdapterView.onTrigger(bookmarkEnums.eBookmarkViewAdapterCommands.M_SELECT_VIEW, Arrays.asList(mRowContainer, mRowMenu, mLogoImage, true, false)); }else if(mLogoImage.getAlpha()>0){ mPopupWindow = (PopupWindow) mHistroyAdapterView.onTrigger(bookmarkEnums.eBookmarkViewAdapterCommands.M_CLEAR_HIGHLIGHT, Arrays.asList(mRowContainer, mRowMenu, mLogoImage, true, false)); @@ -562,7 +557,7 @@ public class bookmarkAdapter extends RecyclerView.Adapter0; @@ -582,7 +577,7 @@ public class bookmarkAdapter extends RecyclerView.Adapter0){ - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.blue)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_setting_heading)); mEmptyListNotification.animate().setDuration(pDuration).alpha(0f); mClearButton.setText(strings.BOOKMARK_CLEAR_BOOKMARK); mClearButton.setClickable(true); } else { - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.holo_dark_gray_alpha)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); mEmptyListNotification.animate().setDuration(pDuration).alpha(1f); mClearButton.animate().setDuration(pDuration).alpha(0.4f); @@ -82,10 +85,13 @@ class bookmarkViewController mMenuButton.animate().setDuration(pDuration).alpha(0f); mClearButton.setEnabled(false); - mClearButton.setClickable(false); mSearchButton.setClickable(false); mMenuButton.setClickable(false); + mSearchInput.setVisibility(View.GONE); + mClearButton.setAlpha(0f); + mClearButton.animate().setDuration(300).alpha(1); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); mClearButton.setText(strings.BOOKMARK_NO_BOOKMARK_FOUND); mClearButton.setClickable(false); } @@ -95,14 +101,15 @@ class bookmarkViewController if(mPopupWindow !=null && mPopupWindow.isShowing()){ mPopupWindow.dismiss(); } + onSelectionMenu(true); } private void onSelectionMenu(boolean pStatus){ if(!pStatus){ mClearButton.setClickable(false); mClearButton.animate().cancel(); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.holo_dark_gray_alpha)); - mClearButton.animate().setDuration(150).alpha(0.4f); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); + mClearButton.animate().setDuration(200).alpha(0.4f); mMenuButton.setVisibility(View.VISIBLE); mSearchButton.setVisibility(View.GONE); if (mSearchInput.getVisibility() == View.VISIBLE){ @@ -111,9 +118,9 @@ class bookmarkViewController }else { if (mSearchInput.getVisibility() != View.VISIBLE) { mClearButton.setClickable(true); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.blue)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_setting_heading)); mClearButton.animate().cancel(); - mClearButton.animate().setDuration(150).alpha(1); + mClearButton.animate().setDuration(200).alpha(1); } mMenuButton.setVisibility(View.GONE); mSearchButton.setVisibility(View.VISIBLE); @@ -123,7 +130,6 @@ class bookmarkViewController } private void updateList(){ - int index = Objects.requireNonNull(mRecycleView.getAdapter()).getItemCount()-1; mRecycleView.getAdapter().notifyDataSetChanged(); } @@ -138,6 +144,7 @@ class bookmarkViewController updateIfListEmpty(mRecycleView.getAdapter().getItemCount(),300); mSearchInput.clearFocus(); mSearchInput.setText(strings.GENERIC_EMPTY_STR); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); } private boolean onHideSearch() { @@ -151,7 +158,7 @@ class bookmarkViewController mSearchInput.setText(strings.GENERIC_EMPTY_STR); mSearchInput.setClickable(false); mClearButton.setClickable(true); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.blue)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_setting_heading)); mClearButton.animate().cancel(); mClearButton.animate().setDuration(150).alpha(1f); return false; @@ -163,7 +170,7 @@ class bookmarkViewController mSearchInput.setClickable(true); mClearButton.setClickable(false); mSearchInput.requestFocus(); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.holo_dark_gray_alpha)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); mClearButton.animate().cancel(); mClearButton.animate().setDuration(150).alpha(0.4f); InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeController.java index 6f93aca1..f16ba3ea 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeController.java @@ -1,33 +1,42 @@ package com.darkweb.genesissearchengine.appManager.bridgeManager; +import android.content.Context; +import android.graphics.Rect; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; +import android.view.MotionEvent; import android.view.View; +import android.view.inputmethod.InputMethodManager; import android.widget.Button; import android.widget.EditText; import android.widget.ImageView; import android.widget.RadioButton; import androidx.appcompat.app.AppCompatActivity; import com.darkweb.genesissearchengine.appManager.activityContextManager; +import com.darkweb.genesissearchengine.appManager.historyManager.historyAdapter; import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.constants.keys; import com.darkweb.genesissearchengine.constants.status; -import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.dataManager.dataController; import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.darkweb.genesissearchengine.pluginManager.pluginController; import com.example.myapplication.R; import java.util.Arrays; import java.util.Collections; +import java.util.List; +import java.util.Objects; public class bridgeController extends AppCompatActivity { /*Private Variables*/ - + private bridgeModel mBridgeModel; private bridgeViewController mBridgeViewController; + private RadioButton mBridgeObfs; private RadioButton mBridgeChina; private RadioButton mBridgeCustom; @@ -63,11 +72,18 @@ public class bridgeController extends AppCompatActivity { mCustomBridgeBlocker = findViewById(R.id.pCustomBridgeBlocker); mBridgeViewController.initialization(mCustomPort, mBridgeButton,this, mBridgeObfs, mBridgeChina, mBridgeCustom, mCustomBridgeBlocker); - mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.S_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,0)); + mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.M_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,0)); + mBridgeModel = new bridgeModel(new bridgeController.bridgeModelCallback(), this); } private void initializeLocalEventHandlers() { + mCustomPort.setOnFocusChangeListener((v, hasFocus) -> { + if (!hasFocus) { + helperMethod.hideKeyboard(this); + } + }); + mCustomPort.addTextChangedListener(new TextWatcher() { @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) @@ -86,6 +102,18 @@ public class bridgeController extends AppCompatActivity { }); } + /* LISTENERS */ + + public class bridgeModelCallback implements eventObserver.eventListener{ + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + /* LOCAL OVERRIDES */ + @Override protected void onPause() { @@ -109,30 +137,28 @@ public class bridgeController extends AppCompatActivity { finish(); } + /*Helper Method*/ + public void onClose(View view){ finish(); } - /*Helper Method*/ - public void requestBridges(View view){ + mBridgeModel.onTrigger(bridgeEnums.eBridgeModelCommands.M_REQUEST_BRIDGE, null); pluginController.getInstance().MessageManagerHandler(this, Collections.singletonList(constants.CONST_BACKEND_GOOGLE_URL), enums.etype.on_bridge_mail); } public void onCustomChecked(View view){ - status.sBridgeCustomBridge = strings.BRIDGE_CUSTOM_BRIDGE_CUSTOM; - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,status.sBridgeCustomBridge)); - mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.S_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,250)); + mBridgeModel.onTrigger(bridgeEnums.eBridgeModelCommands.M_CUSTOM_BRIDGE, null); + mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.M_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,250)); } public void onMeekChecked(View view){ - status.sBridgeCustomBridge = strings.BRIDGE_CUSTOM_BRIDGE_OBFS4; - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,status.sBridgeCustomBridge)); - mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.S_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,250)); + mBridgeModel.onTrigger(bridgeEnums.eBridgeModelCommands.M_MEEK_BRIDGE, null); + mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.M_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,250)); } public void onObfsChecked(View view){ - status.sBridgeCustomBridge = strings.BRIDGE_CUSTOM_BRIDGE_MEEK; - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,status.sBridgeCustomBridge)); - mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.S_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,250)); + mBridgeModel.onTrigger(bridgeEnums.eBridgeModelCommands.M_OBFS_CHECK, null); + mBridgeViewController.onTrigger(bridgeEnums.eBridgeViewCommands.M_INIT_VIEWS, Arrays.asList(status.sBridgeCustomBridge,250)); } } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeEnums.java index 4354ba33..8f87cab6 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeEnums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeEnums.java @@ -4,6 +4,11 @@ public class bridgeEnums { /*Settings Manager*/ public enum eBridgeViewCommands { - S_INIT_VIEWS + M_INIT_VIEWS } + + public enum eBridgeModelCommands { + M_REQUEST_BRIDGE, M_CUSTOM_BRIDGE, M_MEEK_BRIDGE, M_OBFS_CHECK + } + } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeModel.java new file mode 100644 index 00000000..bf3902df --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeModel.java @@ -0,0 +1,69 @@ +package com.darkweb.genesissearchengine.appManager.bridgeManager; + +import androidx.appcompat.app.AppCompatActivity; + +import com.darkweb.genesissearchengine.constants.constants; +import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.constants.keys; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.constants.strings; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.pluginManager.pluginController; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +class bridgeModel +{ + /*Variable Declaration*/ + + private eventObserver.eventListener mEvent; + private AppCompatActivity mContext; + + /*Initializations*/ + + bridgeModel(eventObserver.eventListener mEvent, AppCompatActivity pContext){ + this.mEvent = mEvent; + mContext = pContext; + } + + /*Helper Methods*/ + + public void requestBridges(){ + pluginController.getInstance().MessageManagerHandler(mContext, Collections.singletonList(constants.CONST_BACKEND_GOOGLE_URL), enums.etype.on_bridge_mail); + } + + public void onCustomChecked(){ + status.sBridgeCustomBridge = strings.BRIDGE_CUSTOM_BRIDGE_CUSTOM; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,status.sBridgeCustomBridge)); + + } + public void onMeekChecked(){ + status.sBridgeCustomBridge = strings.BRIDGE_CUSTOM_BRIDGE_MEEK; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,status.sBridgeCustomBridge)); + } + public void onObfsChecked(){ + status.sBridgeCustomBridge = strings.BRIDGE_CUSTOM_BRIDGE_OBFS4; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.BRIDGE_CUSTOM_BRIDGE_1,status.sBridgeCustomBridge)); + } + + public void onTrigger(bridgeEnums.eBridgeModelCommands pCommands, List pData){ + if(pCommands == bridgeEnums.eBridgeModelCommands.M_REQUEST_BRIDGE){ + requestBridges(); + } + else if(pCommands == bridgeEnums.eBridgeModelCommands.M_CUSTOM_BRIDGE){ + onCustomChecked(); + } + else if(pCommands == bridgeEnums.eBridgeModelCommands.M_MEEK_BRIDGE){ + onMeekChecked(); + } + else if(pCommands == bridgeEnums.eBridgeModelCommands.M_OBFS_CHECK){ + onObfsChecked(); + } + } + + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeViewController.java index b524c3bd..1c193d9e 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/bridgeManager/bridgeViewController.java @@ -15,7 +15,10 @@ import android.widget.RadioButton; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; + +import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.example.myapplication.R; @@ -56,8 +59,10 @@ class bridgeViewController window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } @@ -70,17 +75,17 @@ class bridgeViewController } private void resetRadioButtons(int p_duration){ - animateColor(mBridgeObfs, mBridgeObfs.getCurrentTextColor(), mContext.getResources().getColor(R.color.float_white), "textColor", p_duration); - animateColor(mBridgeCustom, mBridgeCustom.getCurrentTextColor(), mContext.getResources().getColor(R.color.float_white), "textColor", p_duration); - animateColor(mBridgeChina, mBridgeChina.getCurrentTextColor(), mContext.getResources().getColor(R.color.float_white), "textColor", p_duration); + animateColor(mBridgeObfs, mBridgeObfs.getCurrentTextColor(), mContext.getResources().getColor(R.color.holo_dark_gray), "textColor", p_duration); + animateColor(mBridgeCustom, mBridgeCustom.getCurrentTextColor(), mContext.getResources().getColor(R.color.holo_dark_gray), "textColor", p_duration); + animateColor(mBridgeChina, mBridgeChina.getCurrentTextColor(), mContext.getResources().getColor(R.color.holo_dark_gray), "textColor", p_duration); - mBridgeObfs.setHighlightColor(mContext.getResources().getColor(R.color.float_white)); - mBridgeCustom.setHighlightColor(mContext.getResources().getColor(R.color.float_white)); - mBridgeChina.setHighlightColor(mContext.getResources().getColor(R.color.float_white)); + mBridgeObfs.setHighlightColor(mContext.getResources().getColor(R.color.holo_dark_gray)); + mBridgeCustom.setHighlightColor(mContext.getResources().getColor(R.color.holo_dark_gray)); + mBridgeChina.setHighlightColor(mContext.getResources().getColor(R.color.holo_dark_gray)); - mBridgeObfs.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.float_white))); - mBridgeCustom.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.float_white))); - mBridgeChina.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.float_white))); + mBridgeObfs.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.holo_dark_gray))); + mBridgeCustom.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.holo_dark_gray))); + mBridgeChina.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.holo_dark_gray))); helperMethod.hideKeyboard(mContext); mCustomPort.clearFocus(); @@ -93,22 +98,21 @@ class bridgeViewController resetRadioButtons(p_duration); switch (p_bridge) { case strings.BRIDGE_CUSTOM_BRIDGE_OBFS4: - - animateColor(mBridgeChina, mBridgeChina.getCurrentTextColor(), mContext.getResources().getColor(R.color.black), "textColor", p_duration); - mBridgeChina.setHighlightColor(Color.BLACK); - mBridgeChina.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.cursor_blue))); - mBridgeChina.setChecked(true); - break; - case strings.BRIDGE_CUSTOM_BRIDGE_MEEK: - animateColor(mBridgeObfs, mBridgeObfs.getCurrentTextColor(), mContext.getResources().getColor(R.color.black), "textColor", p_duration); + animateColor(mBridgeObfs, mBridgeObfs.getCurrentTextColor(), mContext.getResources().getColor(R.color.c_text_v1), "textColor", p_duration); mBridgeObfs.setHighlightColor(Color.BLACK); - mBridgeObfs.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.cursor_blue))); + mBridgeObfs.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); mBridgeObfs.setChecked(true); break; + case strings.BRIDGE_CUSTOM_BRIDGE_MEEK: + animateColor(mBridgeChina, mBridgeChina.getCurrentTextColor(), mContext.getResources().getColor(R.color.c_text_v1), "textColor", p_duration); + mBridgeChina.setHighlightColor(Color.BLACK); + mBridgeChina.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mBridgeChina.setChecked(true); + break; case strings.BRIDGE_CUSTOM_BRIDGE_CUSTOM: - animateColor(mBridgeCustom, mBridgeCustom.getCurrentTextColor(), mContext.getResources().getColor(R.color.black), "textColor", p_duration); + animateColor(mBridgeCustom, mBridgeCustom.getCurrentTextColor(), mContext.getResources().getColor(R.color.c_text_v1), "textColor", p_duration); mBridgeCustom.setHighlightColor(Color.BLACK); - mBridgeCustom.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.cursor_blue))); + mBridgeCustom.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); mBridgeCustom.setChecked(true); mCustomPort.animate().setDuration(p_duration).alpha(1f); @@ -119,7 +123,7 @@ class bridgeViewController } public void onTrigger(bridgeEnums.eBridgeViewCommands p_commands, List p_data){ - if(p_commands == bridgeEnums.eBridgeViewCommands.S_INIT_VIEWS){ + if(p_commands == bridgeEnums.eBridgeViewCommands.M_INIT_VIEWS){ initViews((String) p_data.get(0), (int)p_data.get(1)); } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapter.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapter.java index 4fcd6261..b728112d 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapter.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapter.java @@ -27,6 +27,7 @@ import java.util.Date; import java.util.List; import static android.content.Context.LAYOUT_INFLATER_SERVICE; +import static com.darkweb.genesissearchengine.constants.constants.HISTORY_LOAD_MORE; public class historyAdapter extends RecyclerView.Adapter { @@ -40,7 +41,6 @@ public class historyAdapter extends RecyclerView.Adapter mLongSelectedDate = new ArrayList<>(); private ArrayList mLongSelectedIndex = new ArrayList<>(); private ArrayList mLongSelectedID = new ArrayList<>(); - private ArrayList mLongPressedViewHolders = new ArrayList<>(); private AppCompatActivity mContext; private historyAdapterView mHistroyAdapterView; @@ -69,15 +69,14 @@ public class historyAdapter extends RecyclerView.Adapter { - mCurrentList.add(new historyRowModel("loading",null,-2)); + mCurrentList.add(new historyRowModel(HISTORY_LOAD_MORE,null,-2)); notifyItemInserted(mCurrentList.size()); }); } private void onLoadingClear(){ - for(int mCounter = 0; mCounter< mCurrentList.size(); mCounter++){ - if(mCurrentList.get(mCounter).getHeader().equals("loading")){ + if(mCurrentList.get(mCounter).getHeader().equals(HISTORY_LOAD_MORE)){ int finalM_counter = mCounter; mContext.runOnUiThread(() -> { mCurrentList.remove(finalM_counter); @@ -195,18 +194,10 @@ public class historyAdapter extends RecyclerView.Adapter onOpenMenu(v, pUrl, pPosition, pTitle)); - onSwipe(pItem, pItemView, pPosition, pUrl,pMenuItem, pLogoImage, pId, pDate); + onSwipe(pItemView, pPosition, pUrl,pMenuItem, pLogoImage, pId, pDate); } private void onClose(int pIndex){ @@ -509,7 +498,8 @@ public class historyAdapter extends RecyclerView.Adapter0){ - mRowMenu.setVisibility(View.GONE); + mRowMenu.setVisibility(View.INVISIBLE); + mRowMenu.setClickable(false); }else { mRowMenu.setVisibility(View.VISIBLE); + mRowMenu.setClickable(true); } if(mLongSelectedIndex.contains("https://" + model.getDescription()) && mLongSelectedID.contains(model.getID())){ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapterView.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapterView.java index 29b0d327..cab91953 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapterView.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyAdapterView.java @@ -40,7 +40,7 @@ public class historyAdapterView pView.getLocationOnScreen(location); int y = location[1]; int height = helperMethod.getScreenHeight(mContext); - int m_offset_height = 0; + int m_offset_height; if(y + helperMethod.pxFromDp(300) >height){ m_offset_height = helperMethod.pxFromDp(203); } @@ -59,15 +59,16 @@ public class historyAdapterView private void clearLongSelectedURL(ImageButton pPopupMenu, ImageView pLogoImage, View mItemView){ mItemView.setPressed(false); - pPopupMenu.setVisibility(View.VISIBLE); - pPopupMenu.animate().setDuration(150).alpha(1); + pPopupMenu.setVisibility(View.GONE); + pPopupMenu.animate().setDuration(150).alpha(0); pPopupMenu.setClickable(true); - pLogoImage.setAlpha(1f); + pLogoImage.setAlpha(0f); pLogoImage.animate().cancel(); + pLogoImage.setVisibility(View.GONE); pLogoImage.animate().setDuration(150).alpha(0).withEndAction(() -> pLogoImage.setVisibility(View.GONE)); } - public void onSelectView(View pItemView, View pMenuItem, ImageView pLogoImage, boolean pIsForced, boolean pVibrate){ + public void onSelectView(View pItemView, ImageView pLogoImage, boolean pIsForced, boolean pVibrate){ pItemView.setPressed(false); int speed = 150; if(pIsForced){ @@ -83,7 +84,7 @@ public class historyAdapterView pLogoImage.animate().setDuration(speed).alpha(1); } - public void onClearHighlight( View pItemView, View pMenuItem, ImageView pLogoImage, boolean pIsForced) + public void onClearHighlight(View pItemView, ImageView pLogoImage, boolean pIsForced) { try { if(pLogoImage.getAlpha()>0){ @@ -109,10 +110,10 @@ public class historyAdapterView clearLongSelectedURL((ImageButton)pData.get(0), (ImageView)pData.get(1), (View)pData.get(2)); } if(pCommands == historyEnums.eHistoryViewAdapterCommands.M_SELECT_VIEW){ - onSelectView((View)pData.get(0), (View)pData.get(1), (ImageView)pData.get(2), (Boolean) pData.get(3), (Boolean) pData.get(4)); + onSelectView((View)pData.get(0), (ImageView)pData.get(2), (Boolean) pData.get(3), (Boolean) pData.get(4)); } if(pCommands == historyEnums.eHistoryViewAdapterCommands.M_CLEAR_HIGHLIGHT){ - onClearHighlight((View)pData.get(0), (View)pData.get(1), (ImageView)pData.get(2), (Boolean) pData.get(3)); + onClearHighlight((View)pData.get(0), (ImageView)pData.get(2), (Boolean) pData.get(3)); } return null; } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java index 7cdf5fc4..3fd501eb 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyController.java @@ -35,8 +35,6 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Objects; - import static com.darkweb.genesissearchengine.appManager.historyManager.historyEnums.eHistoryViewCommands.M_VERTIFY_SELECTION_MENU; public class historyController extends AppCompatActivity @@ -59,7 +57,6 @@ public class historyController extends AppCompatActivity private historyViewController mHistoryViewController; private boolean isUpdatingRecyclerView = false; - private boolean mIsScrollingUp; /*Initializations*/ @@ -152,8 +149,8 @@ public class historyController extends AppCompatActivity if (!hasFocus) { mSearchInput.clearFocus(); }else { - ((historyAdapter) Objects.requireNonNull(mRecycleView.getAdapter())).setFilter(mSearchInput.getText().toString()); - ((historyAdapter) mRecycleView.getAdapter()).invokeFilter(true); + mHistoryAdapter.setFilter(mSearchInput.getText().toString()); + mHistoryAdapter.invokeFilter(true); } }); @@ -172,8 +169,8 @@ public class historyController extends AppCompatActivity @Override public void afterTextChanged(Editable editable) { - ((historyAdapter) Objects.requireNonNull(mRecycleView.getAdapter())).setFilter(mSearchInput.getText().toString()); - ((historyAdapter) mRecycleView.getAdapter()).invokeFilter(true); + mHistoryAdapter.setFilter(mSearchInput.getText().toString()); + mHistoryAdapter.invokeFilter(true); } }); } @@ -240,7 +237,7 @@ public class historyController extends AppCompatActivity } public void onHideSearch(View view) { - ((historyAdapter) mRecycleView.getAdapter()).onUpdateSearchStatus((boolean) mHistoryViewController.onTrigger(historyEnums.eHistoryViewCommands.M_HIDE_SEARCH, null)); + mHistoryAdapter.onUpdateSearchStatus((boolean) mHistoryViewController.onTrigger(historyEnums.eHistoryViewCommands.M_HIDE_SEARCH, null)); } public void onLongPressMenu(View view) { @@ -279,7 +276,7 @@ public class historyController extends AppCompatActivity public void onclearData(){ mHistoryModel.clearList(); - ((historyAdapter) Objects.requireNonNull(mRecycleView.getAdapter())).invokeFilter(true ); + mHistoryAdapter.invokeFilter(true ); mHistoryViewController.onTrigger(historyEnums.eHistoryViewCommands.M_CLEAR_LIST, null); databaseController.getInstance().execSQL(sql.SQL_CLEAR_HISTORY,null); } @@ -295,9 +292,7 @@ public class historyController extends AppCompatActivity dataController.getInstance().invokeHistory(dataEnums.eHistoryCommands.M_LOAD_MORE_HISTORY ,null); try { sleep(500); - activityContextManager.getInstance().getHistoryController().runOnUiThread(() -> { - mHistoryAdapter.onTrigger(historyEnums.eHistoryAdapterCommands.M_LOADING_CLEAR, null); - }); + activityContextManager.getInstance().getHistoryController().runOnUiThread(() -> mHistoryAdapter.onTrigger(historyEnums.eHistoryAdapterCommands.M_LOADING_CLEAR, null)); sleep(1000); isUpdatingRecyclerView = false; } catch (InterruptedException e) { diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyViewController.java index 26779fff..c0b9d7c9 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/historyManager/historyViewController.java @@ -12,6 +12,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.PopupWindow; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; import androidx.recyclerview.widget.RecyclerView; import com.darkweb.genesissearchengine.constants.strings; @@ -24,14 +25,12 @@ class historyViewController { /*Private Variables*/ private AppCompatActivity mContext; - private ImageView mEmptyListNotification; private EditText mSearchInput; private RecyclerView mRecycleView; private Button mClearButton; private ImageButton mMenuButton; private ImageButton mSearchButton; - private PopupWindow mPopupWindow = null; /*Initializations*/ @@ -55,24 +54,26 @@ class historyViewController window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { - window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + window.setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } private void updateIfListEmpty(int pSize,int pDuration){ if(pSize>0){ - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.blue)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_setting_heading)); mEmptyListNotification.animate().setDuration(pDuration).alpha(0f); mClearButton.setText(strings.HISTORY_CLEAR_HISTORY); mClearButton.setClickable(true); } else { - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.holo_dark_gray_alpha)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); mEmptyListNotification.animate().setDuration(pDuration).alpha(1f); mClearButton.animate().setDuration(pDuration).alpha(0.4f); @@ -82,7 +83,10 @@ class historyViewController mClearButton.setEnabled(false); mSearchButton.setClickable(false); mMenuButton.setClickable(false); + mSearchInput.setVisibility(View.GONE); + mClearButton.animate().setDuration(300).alpha(1); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); mClearButton.setText(strings.HISTORY_NO_HISTORY_FOUND); mClearButton.setClickable(false); } @@ -92,14 +96,15 @@ class historyViewController if(mPopupWindow !=null && mPopupWindow.isShowing()){ mPopupWindow.dismiss(); } + onSelectionMenu(true); } private void onSelectionMenu(boolean pStatus){ if(!pStatus){ mClearButton.setClickable(false); mClearButton.animate().cancel(); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.holo_dark_gray_alpha)); - mClearButton.animate().setDuration(150).alpha(0.4f); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); + mClearButton.animate().setDuration(200).alpha(0.4f); mMenuButton.setVisibility(View.VISIBLE); mSearchButton.setVisibility(View.GONE); if (mSearchInput.getVisibility() == View.VISIBLE){ @@ -108,9 +113,9 @@ class historyViewController }else { if (mSearchInput.getVisibility() != View.VISIBLE) { mClearButton.setClickable(true); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.blue)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_setting_heading)); mClearButton.animate().cancel(); - mClearButton.animate().setDuration(150).alpha(1); + mClearButton.animate().setDuration(200).alpha(1); } mMenuButton.setVisibility(View.GONE); mSearchButton.setVisibility(View.VISIBLE); @@ -120,7 +125,6 @@ class historyViewController } private void updateList(){ - int index = Objects.requireNonNull(mRecycleView.getAdapter()).getItemCount()-1; mRecycleView.getAdapter().notifyDataSetChanged(); } @@ -135,6 +139,7 @@ class historyViewController updateIfListEmpty(mRecycleView.getAdapter().getItemCount(),300); mSearchInput.clearFocus(); mSearchInput.setText(strings.GENERIC_EMPTY_STR); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); } private boolean onHideSearch() { @@ -148,7 +153,7 @@ class historyViewController mSearchInput.setText(strings.GENERIC_EMPTY_STR); mSearchInput.setClickable(false); mClearButton.setClickable(true); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.blue)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_setting_heading)); mClearButton.animate().cancel(); mClearButton.animate().setDuration(150).alpha(1f); return false; @@ -160,7 +165,7 @@ class historyViewController mSearchInput.setClickable(true); mClearButton.setClickable(false); mSearchInput.requestFocus(); - mClearButton.setTextColor(mContext.getApplication().getResources().getColor(R.color.holo_dark_gray_alpha)); + mClearButton.setTextColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); mClearButton.animate().cancel(); mClearButton.animate().setDuration(150).alpha(0.4f); InputMethodManager imm = (InputMethodManager) mContext.getSystemService(Context.INPUT_METHOD_SERVICE); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoClients.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoClients.java index 5c14e120..6841615f 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoClients.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoClients.java @@ -2,17 +2,24 @@ package com.darkweb.genesissearchengine.appManager.homeManager; import android.content.Intent; import android.net.Uri; -import android.util.Log; import androidx.appcompat.app.AppCompatActivity; import com.darkweb.genesissearchengine.constants.*; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.helperManager.helperMethod; import java.io.File; +import java.net.URI; import java.util.List; import static com.darkweb.genesissearchengine.constants.enums.etype.on_handle_external_intent; import static org.mozilla.geckoview.GeckoSessionSettings.USER_AGENT_MODE_MOBILE; -import static org.mozilla.geckoview.StorageController.ClearFlags.ALL; +import static org.mozilla.geckoview.StorageController.ClearFlags.AUTH_SESSIONS; +import static org.mozilla.geckoview.StorageController.ClearFlags.COOKIES; +import static org.mozilla.geckoview.StorageController.ClearFlags.DOM_STORAGES; +import static org.mozilla.geckoview.StorageController.ClearFlags.IMAGE_CACHE; +import static org.mozilla.geckoview.StorageController.ClearFlags.NETWORK_CACHE; +import static org.mozilla.geckoview.StorageController.ClearFlags.PERMISSIONS; +import static org.mozilla.geckoview.StorageController.ClearFlags.SITE_DATA; +import static org.mozilla.geckoview.StorageController.ClearFlags.SITE_SETTINGS; import org.mozilla.geckoview.ContentBlocking; import org.mozilla.geckoview.GeckoRuntime; @@ -29,6 +36,7 @@ class geckoClients private int mSessionID=0; private int mGlobalSessionCounter=0; + private eventObserver.eventListener event; private AppCompatActivity context; @@ -38,19 +46,18 @@ class geckoClients this.event = event; mGlobalSessionCounter+=1; mSessionID = mGlobalSessionCounter; - runtimeSettings(context); + initRuntimeSettings(context); if(!isForced && geckoView.getSession()!=null && geckoView.getSession().isOpen()){ mSession = (geckoSession) geckoView.getSession(); } else { geckoView.releaseSession(); - Log.i("GCHECKS:","GCHECKS:"+mGlobalSessionCounter); - mSession = new geckoSession(new geckoViewClientCallback(),mGlobalSessionCounter,context); + mSession = new geckoSession(new geckoViewClientCallback(),mGlobalSessionCounter,context, geckoView); mSession.open(mRuntime); - mSession.getSettings().setUseTrackingProtection(true); + mSession.getSettings().setUseTrackingProtection(status.sStatusDoNotTrack); mSession.getSettings().setFullAccessibilityTree(true); - mSession.getSettings().setUserAgentMode(USER_AGENT_MODE_MOBILE ); + mSession.getSettings().setUserAgentMode(USER_AGENT_MODE_MOBILE); mSession.getSettings().setAllowJavascript(status.sSettingJavaStatus); geckoView.releaseSession(); geckoView.setSession(mSession); @@ -67,13 +74,21 @@ class geckoClients return mSession.getUserAgentMode(); } - private void runtimeSettings(AppCompatActivity context){ + public void initRuntimeSettings(AppCompatActivity context){ if(mRuntime==null){ mRuntime = GeckoRuntime.getDefault(context); + mRuntime.getSettings().setAboutConfigEnabled(true); + mRuntime.getSettings().setWebFontsEnabled(status.sShowWebFonts); + mRuntime.getSettings().setRemoteDebuggingEnabled(false); mRuntime.getSettings().getContentBlocking().setCookieBehavior(getCookiesBehaviour()); + mRuntime.getSettings().getContentBlocking().setSafeBrowsing(ContentBlocking.SafeBrowsing.DEFAULT); mRuntime.getSettings().setAutomaticFontSizeAdjustment(status.sSettingFontAdjustable); - mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.AD); - mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.FINGERPRINTING); + if(status.sSettingTrackingProtection){ + mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.AD); + mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.FINGERPRINTING); + }else { + mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.STRICT); + } } } @@ -81,12 +96,25 @@ class geckoClients return status.sSettingCookieStatus; } - void updateCookies(){ - mRuntime.getSettings().getContentBlocking().setCookieBehavior(status.sSettingCookieStatus); - onReload(); - } + void updateSetting(){ + mRuntime.getSettings().setRemoteDebuggingEnabled(false); + mRuntime.getSettings().setWebFontsEnabled(status.sShowWebFonts); + mRuntime.getSettings().getContentBlocking().setCookieBehavior(getCookiesBehaviour()); + mRuntime.getSettings().setAutomaticFontSizeAdjustment(status.sSettingFontAdjustable); + mRuntime.getSettings().getContentBlocking().setSafeBrowsing(ContentBlocking.SafeBrowsing.DEFAULT); + if(status.sSettingTrackingProtection){ + mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.AD); + mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.FINGERPRINTING); + }else { + mRuntime.getSettings().getContentBlocking().setAntiTracking(ContentBlocking.AntiTracking.STRICT); + } - void onClose(){ + + mSession.getSettings().setUseTrackingProtection(status.sStatusDoNotTrack); + mSession.getSettings().setFullAccessibilityTree(true); + mSession.getSettings().setUserAgentMode(USER_AGENT_MODE_MOBILE ); + mSession.getSettings().setAllowJavascript(status.sSettingJavaStatus); + onReload(); } void initSession(geckoSession mSession){ @@ -118,8 +146,24 @@ class geckoClients mSession.loadUri(url); } + void onClearSiteData(){ + mRuntime.getStorageController().clearData(SITE_SETTINGS); + mRuntime.getStorageController().clearData(SITE_DATA); + } + void onClearSession(){ - mRuntime.getStorageController().clearData(ALL); + mRuntime.getStorageController().clearData(AUTH_SESSIONS); + mRuntime.getStorageController().clearData(PERMISSIONS); + } + + void onClearCache(){ + mRuntime.getStorageController().clearData(NETWORK_CACHE); + mRuntime.getStorageController().clearData(IMAGE_CACHE); + mRuntime.getStorageController().clearData(DOM_STORAGES); + } + + void onClearCookies(){ + mRuntime.getStorageController().clearData(COOKIES); } void onBackPressed(boolean isFinishAllowed){ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoSession.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoSession.java index 95ebf88d..88001423 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoSession.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/geckoSession.java @@ -1,6 +1,5 @@ package com.darkweb.genesissearchengine.appManager.homeManager; -import android.app.Notification; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; @@ -9,6 +8,9 @@ import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; +import android.graphics.Matrix; +import android.graphics.Rect; +import android.graphics.RectF; import android.media.MediaScannerConnection; import android.net.Uri; import android.os.Build; @@ -16,8 +18,9 @@ import android.os.Environment; import android.os.Handler; import android.util.Base64; import android.util.Log; +import android.view.autofill.AutofillManager; +import android.view.autofill.AutofillValue; import android.widget.Toast; -import androidx.annotation.AnyThread; import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.annotation.UiThread; @@ -25,17 +28,19 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.NotificationCompat; import androidx.core.content.FileProvider; import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.helperManager.JavaScriptInterface; import com.darkweb.genesissearchengine.helperManager.downloadFileService; import com.darkweb.genesissearchengine.helperManager.errorHandler; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.example.myapplication.R; -import org.mozilla.gecko.GeckoSystemStateListener; -import org.mozilla.gecko.GeckoThread; +import org.mozilla.gecko.util.ThreadUtils; import org.mozilla.geckoview.AllowOrDeny; +import org.mozilla.geckoview.Autofill; import org.mozilla.geckoview.GeckoResult; import org.mozilla.geckoview.GeckoSession; +import org.mozilla.geckoview.GeckoView; import org.mozilla.geckoview.WebRequestError; import java.io.File; import java.io.FileOutputStream; @@ -43,7 +48,7 @@ import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.List; - +import java.util.Objects; import static org.mozilla.geckoview.GeckoSessionSettings.USER_AGENT_MODE_DESKTOP; import static org.mozilla.geckoview.GeckoSessionSettings.USER_AGENT_MODE_MOBILE; @@ -67,15 +72,19 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio private GeckoSession.HistoryDelegate.HistoryList mHistoryList = null; private int rateCount=0; private int m_current_url_id = -1; + private GeckoView mGeckoView; - geckoSession(eventObserver.eventListener event,int mSessionID,AppCompatActivity mContext){ + geckoSession(eventObserver.eventListener event,int mSessionID,AppCompatActivity mContext, GeckoView pGeckoView){ + this.mGeckoView = pGeckoView; this.mContext = mContext; this.mSessionID = mSessionID; setProgressDelegate(this); setHistoryDelegate(this); setNavigationDelegate(this); setContentDelegate(this); + setAutoFillDelegate(); + setPermissionDelegate(this); mDownloadManager = new geckoDownloadManager(); setPromptDelegate(new geckoPromptView(mContext)); this.event = event; @@ -84,7 +93,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio void onFileUploadRequest(int resultCode, Intent data){ geckoPromptView mPromptDelegate = (geckoPromptView)getPromptDelegate(); - mPromptDelegate.onFileCallbackResult(resultCode,data); + Objects.requireNonNull(mPromptDelegate).onFileCallbackResult(resultCode,data); } void initURL(String url){ @@ -93,7 +102,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio mCurrentTitle = mCurrentURL; event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle), enums.etype.on_update_suggestion); - if(!url.equals("about:blank")) + if(!url.equals("about:blank") && !url.equals("about:config")) { mProgress = 5; event.invokeObserver(Arrays.asList(5, mSessionID), enums.etype.progress_update); @@ -101,6 +110,69 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio m_current_url_id = -1; } + /*Autofill Delegate*/ + + public void setAutoFillDelegate(){ + this.setAutofillDelegate(new AndroidAutofillDelegate()); + } + + private class AndroidAutofillDelegate implements Autofill.Delegate { + + private Rect displayRectForId(@NonNull final GeckoSession session, + @NonNull final Autofill.Node node) { + final Matrix matrix = new Matrix(); + final RectF rectF = new RectF(node.getDimensions()); + session.getPageToScreenMatrix(matrix); + matrix.mapRect(rectF); + + final Rect screenRect = new Rect(); + rectF.roundOut(screenRect); + return screenRect; + } + + @Override + public void onAutofill(@NonNull final GeckoSession session, + final int notification, + final Autofill.Node node) { + ThreadUtils.assertOnUiThread(); + if (Build.VERSION.SDK_INT < 26) { + return; + } + + final AutofillManager manager = + mContext.getSystemService(AutofillManager.class); + if (manager == null) { + return; + } + + switch (notification) { + case Autofill.Notify.SESSION_STARTED: + case Autofill.Notify.SESSION_CANCELED: + manager.cancel(); + break; + case Autofill.Notify.SESSION_COMMITTED: + manager.commit(); + break; + case Autofill.Notify.NODE_FOCUSED: + manager.notifyViewEntered( + mGeckoView, node.getId(), + displayRectForId(session, node)); + break; + case Autofill.Notify.NODE_BLURRED: + manager.notifyViewExited(mGeckoView, node.getId()); + break; + case Autofill.Notify.NODE_UPDATED: + manager.notifyValueChanged( + mGeckoView, + node.getId(), + AutofillValue.forText(node.getValue())); + break; + case Autofill.Notify.NODE_ADDED: + case Autofill.Notify.NODE_REMOVED: + break; + } + } + } /*Progress Delegate*/ @Override @@ -116,12 +188,6 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio } - @AnyThread - public void shutdown() { - GeckoSystemStateListener.getInstance().shutdown(); - GeckoThread.forceQuit(); - } - @UiThread public void onPageStop(@NonNull GeckoSession var1, boolean var2) { @@ -159,13 +225,13 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio /*Navigation Delegate*/ public void onLocationChange(@NonNull GeckoSession var1, @Nullable String var2) { - String newUrl = var2.split("#")[0]; + String newUrl = Objects.requireNonNull(var2).split("#")[0]; if(!mCurrentTitle.equals("loading")){ m_current_url_id = (int)event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID,mCurrentTitle, m_current_url_id), enums.etype.on_update_history); } mCurrentURL = newUrl; - if (var2 != null && !var2.equals("about:blank")) + if (!var2.equals("about:blank")) { event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID), enums.etype.start_proxy); event.invokeObserver(Arrays.asList(mCurrentURL,mSessionID), enums.etype.search_update); @@ -260,6 +326,21 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio } } + /*Permission Delegate*/ + + @Override + public void onContentPermissionRequest(final GeckoSession session, final String uri, + final int type, final Callback callback) { + if (PERMISSION_AUTOPLAY_AUDIBLE == type || PERMISSION_AUTOPLAY_INAUDIBLE == type) { + if (!status.sAutoPlay) { + callback.reject(); + } else { + callback.grant(); + } + }else { + callback.reject(); + } + } /*Download Manager*/ void downloadRequestedFile() @@ -280,70 +361,6 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio } } - public boolean downloadBlobFile(String url){ - - try{ - File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); - - String filetype = ""; - String filename = ""; - - filetype = url.substring(url.indexOf("/") + 1, url.indexOf(";")); - filename = System.currentTimeMillis() + "." + filetype; - - File file = new File(path, filename); - try { - if(!path.exists()) - path.mkdirs(); - if(!file.exists()) - file.createNewFile(); - - String base64EncodedString = url.substring(url.indexOf(",") + 1); - byte[] decodedBytes = Base64.decode(base64EncodedString, Base64.DEFAULT); - OutputStream os = new FileOutputStream(file); - os.write(decodedBytes); - os.close(); - - //Tell the media scanner about the new file so that it is immediately available to the user. - MediaScannerConnection.scanFile(mContext, - new String[]{file.toString()}, null, - new MediaScannerConnection.OnScanCompletedListener() { - public void onScanCompleted(String path, Uri uri) { - Log.i("ExternalStorage", "Scanned " + path + ":"); - Log.i("ExternalStorage", "-> uri=" + uri); - } - }); - - //Set notification after download complete and add "click to view" action to that - String mimetype = url.substring(url.indexOf(":") + 1, url.indexOf("/")); - Intent intent = new Intent(); - intent.setAction(android.content.Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(file), (mimetype + "/*")); - PendingIntent pIntent = PendingIntent.getActivity(mContext, 0, intent, 0); - - Notification notification = new NotificationCompat.Builder(mContext) - .setSmallIcon(R.xml.ic_download) - .setContentTitle(filename) - .setContentIntent(pIntent) - .build(); - - notification.flags |= Notification.FLAG_AUTO_CANCEL; - int notificationId = 85851; - NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(notificationId, notification); - } catch (IOException e) { - e.printStackTrace(); - } - - return true; - } - catch (Exception ignored){ - - } - - return true; - } - private boolean createAndSaveFileFromBase64Url(String url) { if(!url.startsWith("data") && !url.startsWith("blob")){ @@ -361,8 +378,8 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio try{ File path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_DOWNLOADS); - String filetype = ""; - String filename = ""; + String filetype; + String filename; if(url.startsWith("blob")){ loadUri(JavaScriptInterface.getBase64StringFromBlobUrl(url)); @@ -397,49 +414,30 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio //Set notification after download complete and add "click to view" action to that String mimetype = url.substring(url.indexOf(":") + 1, url.indexOf("/")); Intent intent = new Intent(); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - intent.setAction(android.content.Intent.ACTION_VIEW); - intent.setDataAndType(Uri.fromFile(file), (mimetype + "/*")); - } else { - intent.setAction(android.content.Intent.ACTION_VIEW); - Uri uri_temp = FileProvider.getUriForFile(mContext,mContext.getString(R.string.GENERAL_FILE_PROVIDER_AUTHORITY), file); - intent.setDataAndType(uri_temp, (mimetype + "/*")); + intent.setAction(android.content.Intent.ACTION_VIEW); + Uri uri_temp = FileProvider.getUriForFile(mContext,mContext.getString(R.string.GENERAL_FILE_PROVIDER_AUTHORITY), file); + intent.setDataAndType(uri_temp, (mimetype + "/*")); - List resInfoList = mContext.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); - for (ResolveInfo resolveInfo : resInfoList) { - String packageName = resolveInfo.activityInfo.packageName; - mUriPermission = uri_temp; - mContext.grantUriPermission(packageName, uri_temp, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); - } + List resInfoList = mContext.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); + for (ResolveInfo resolveInfo : resInfoList) { + String packageName = resolveInfo.activityInfo.packageName; + mUriPermission = uri_temp; + mContext.grantUriPermission(packageName, uri_temp, Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); } PendingIntent pIntent = PendingIntent.getActivity(mContext, 0, intent, 0); - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) { - Notification notification = new NotificationCompat.Builder(mContext) - .setSmallIcon(R.xml.ic_download) - .setContentTitle(filename) - .setContentIntent(pIntent) - .build(); + String channel_id = createNotificationChannel(mContext); + assert channel_id != null; + NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mContext, channel_id) + .setSmallIcon(R.xml.ic_download) + .setContentTitle(filename) + .setContentIntent(pIntent); - notification.flags |= Notification.FLAG_AUTO_CANCEL; - int notificationId = 85851; - NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(notificationId, notification); - } else { - - String channel_id = createNotificationChannel(mContext); - NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(mContext, channel_id) - .setSmallIcon(R.xml.ic_download) - .setContentTitle(filename) - .setContentIntent(pIntent); - - notificationBuilder.setAutoCancel(true); - - int notificationId = 85851; - NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); - notificationManager.notify(notificationId, notificationBuilder.build()); - } + notificationBuilder.setAutoCancel(true); + int notificationId = 85851; + NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + notificationManager.notify(notificationId, notificationBuilder.build()); } catch (IOException e) { e.printStackTrace(); @@ -461,10 +459,9 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio CharSequence channelName = "Application_name"; String channelDescription = "Application_name Alert"; int channelImportance = NotificationManager.IMPORTANCE_DEFAULT; - boolean channelEnableVibrate = true; NotificationChannel notificationChannel = new NotificationChannel(channelId, channelName, channelImportance); notificationChannel.setDescription(channelDescription); - notificationChannel.enableVibration(channelEnableVibrate); + notificationChannel.enableVibration(true); NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); assert notificationManager != null; notificationManager.createNotificationChannel(notificationChannel); @@ -536,11 +533,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio if(mHistoryList!=null && index>=0 && index - { - goBack(); - }, 100); + new Handler().postDelayed(this::goBack, 100); } } else { @@ -558,11 +551,7 @@ public class geckoSession extends GeckoSession implements GeckoSession.Permissio { event.invokeObserver(Arrays.asList(mHistoryList.get(index), mSessionID), enums.etype.start_proxy); - - new Handler().postDelayed(() -> - { - goForward(); - }, 100); + new Handler().postDelayed(this::goForward, 100); } }else { goForward(); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController.java index f5ac594f..166c8946 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeController.java @@ -23,14 +23,18 @@ import android.webkit.URLUtil; import android.widget.*; import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.constraintlayout.widget.ConstraintLayout; import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.appManager.bookmarkManager.bookmarkController; import com.darkweb.genesissearchengine.appManager.databaseManager.databaseController; import com.darkweb.genesissearchengine.appManager.historyManager.historyController; +import com.darkweb.genesissearchengine.appManager.historyManager.historyRowModel; import com.darkweb.genesissearchengine.appManager.landingManager.landingController; import com.darkweb.genesissearchengine.appManager.languageManager.languageController; +import com.darkweb.genesissearchengine.appManager.orbotLogManager.orbotLogController; +import com.darkweb.genesissearchengine.appManager.orbotManager.orbotController; import com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage.settingController; import com.darkweb.genesissearchengine.appManager.tabManager.tabController; import com.darkweb.genesissearchengine.appManager.tabManager.tabRowModel; @@ -40,7 +44,6 @@ import com.darkweb.genesissearchengine.constants.keys; import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.dataManager.dataController; -import com.darkweb.genesissearchengine.appManager.orbotManager.orbotController; import com.darkweb.genesissearchengine.dataManager.dataEnums; import com.darkweb.genesissearchengine.helperManager.KeyboardUtils; import com.darkweb.genesissearchengine.helperManager.eventObserver; @@ -57,6 +60,7 @@ import org.torproject.android.service.wrapper.orbotLocalConstants; import java.lang.ref.WeakReference; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; @@ -82,9 +86,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba private ImageView mLoadingIcon; private TextView mLoadingText; private AdView mBannerAds = null; - private ImageView mEngineLogo; private ImageButton mGatewaySplash; - private ImageButton mSwitchEngineBack; private LinearLayout mTopBar; private ImageView mBackSplash; private Button mConnectButton; @@ -94,17 +96,21 @@ public class homeController extends AppCompatActivity implements ComponentCallba private boolean mPageClosed = false; private boolean isKeyboardOpened = false; private boolean isSuggestionChanged = false; + private boolean isTabMenuOpened = false; /*-------------------------------------------------------INITIALIZATION-------------------------------------------------------*/ @Override protected void onCreate(Bundle savedInstanceState) { + pluginController.getInstance().preInitialize(this); databaseController.getInstance().initialize(this); dataController.getInstance().initialize(this); + onChangeTheme(); status.initStatus(); pluginController.getInstance().onCreate(this); + onInitTheme(); super.onCreate(savedInstanceState); setContentView(R.layout.home_view); @@ -123,6 +129,29 @@ public class homeController extends AppCompatActivity implements ComponentCallba initLocalLanguage(); } + public void onInitTheme(){ + + if(status.sTheme == enums.Theme.THEME_DARK){ + if(AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_YES){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } + }else if(status.sTheme == enums.Theme.THEME_LIGHT){ + if(AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_NO){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + } + }else { + if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO){ + if(AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_NO){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + } + }else { + if(AppCompatDelegate.getDefaultNightMode() != AppCompatDelegate.MODE_NIGHT_YES){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } + } + } + } + private void initLocalLanguage() { String lang = Resources.getSystem().getConfiguration().locale.getLanguage(); @@ -167,7 +196,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba public void initializeConnections() { - mGeckoView = findViewById(R.id.webLoader); + mGeckoView = findViewById(R.id.pWebView); mProgressBar = findViewById(R.id.progressBar); mSplashScreen = findViewById(R.id.splashScreen); @@ -186,9 +215,13 @@ public class homeController extends AppCompatActivity implements ComponentCallba mGeckoView.setSaveFromParentEnabled(false); mGeckoClient = new geckoClients(); - boolean is_engine_switched = (boolean) dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_ENGINE_SWITCHED,false)); + mHomeViewController.initialization(new homeViewCallback(),this,mNewTab, mWebViewContainer, mLoadingText, mProgressBar, mSearchbar, mSplashScreen, mLoadingIcon, mBannerAds,(ArrayList)dataController.getInstance().invokeSuggestion(dataEnums.eSuggestionCommands.M_GET_SUGGESTION, null), mGatewaySplash, mTopBar, mGeckoView, mBackSplash, mConnectButton); + } - mHomeViewController.initialization(new homeViewCallback(),this,mNewTab, mWebViewContainer, mLoadingText, mProgressBar, mSearchbar, mSplashScreen, mLoadingIcon, mBannerAds,dataController.getInstance().getSuggestions(), mGatewaySplash, mTopBar, mGeckoView, mBackSplash,is_engine_switched, mConnectButton, mSwitchEngineBack); + public void onChangeTheme(){ + if(!status.sSettingIsAppStarted){ + status.sDefaultNightMode = (getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES; + } } public void initPreFixes() { @@ -212,18 +245,18 @@ public class homeController extends AppCompatActivity implements ComponentCallba mGeckoClient.initialize(mGeckoView, new geckoViewCallback(), this,isForced); //mGeckoClient.loadURL("about:blank"); onSaveCurrentTab(mGeckoClient.getSession(),false); - mHomeViewController.initTab(dataController.getInstance().getTotalTabs()); + mHomeViewController.initTab((int)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_TOTAL_TAB, null)); } public void initTab(boolean isKeyboardOpened){ onNewTab(isKeyboardOpened, false); - mHomeViewController.initTab(dataController.getInstance().getTotalTabs()); + mHomeViewController.initTab((int)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_TOTAL_TAB, null)); } @Override protected void attachBaseContext(Context base) { Prefs.setContext(base); - orbotLocalConstants.sHomeContext = new WeakReference<>(base); + orbotLocalConstants.mHomeContext = new WeakReference<>(base); super.attachBaseContext(LocaleHelper.onAttach(base, Prefs.getDefaultLocale())); } @@ -242,14 +275,10 @@ public class homeController extends AppCompatActivity implements ComponentCallba } } - public void onUpdateJavascript(){ - mGeckoView.clearFocus(); - mGeckoClient.updateJavascript(); - } - public void onUpdateCookies(){ - mGeckoView.clearFocus(); - mGeckoClient.updateCookies(); + public void initRuntimeSettings() + { + mGeckoClient.updateSetting(); } public void onLoadURL(String url){ @@ -257,9 +286,13 @@ public class homeController extends AppCompatActivity implements ComponentCallba mGeckoClient.loadURL(url.replace("genesis.onion","boogle.store")); } + public GeckoView getmGeckoView(){ + return mGeckoView; + } + public void onLoadTab(geckoSession mTempSession,boolean isSessionClosed){ if(!isSessionClosed){ - dataController.getInstance().moveTabToTop(mTempSession); + dataController.getInstance().invokeTab(dataEnums.eTabCommands.MOVE_TAB_TO_TOP, Collections.singletonList(mTempSession)); } mGeckoView.releaseSession(); @@ -365,7 +398,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba } if(isSuggestionChanged){ isSuggestionChanged = false; - mHomeViewController.initializeSuggestionView(dataController.getInstance().getSuggestions()); + mHomeViewController.initializeSuggestionView((ArrayList)dataController.getInstance().invokeSuggestion(dataEnums.eSuggestionCommands.M_GET_SUGGESTION, null)); } }else { mHomeViewController.onUpdateSearchBar(mGeckoClient.getSession().getCurrentURL(),true); @@ -401,7 +434,14 @@ public class homeController extends AppCompatActivity implements ComponentCallba public void onNewTab(boolean isKeyboardOpenedTemp, boolean isKeyboardOpened){ initializeGeckoView(true); - onLoadURL("about:blank"); + if(status.sOpenURLInNewTab){ + onLoadURL(helperMethod.getDomainName(status.sSettingSearchStatus)); + mHomeViewController. onUpdateSearchBar(helperMethod.getDomainName(status.sSettingSearchStatus),false); + }else { + mGeckoView.releaseSession(); + onLoadURL("about:blank"); + mHomeViewController. onUpdateSearchBar(strings.HOME_BLANK_PAGE,false); + } mHomeViewController.progressBarReset(); mHomeViewController.onNewTab(isKeyboardOpened,isKeyboardOpenedTemp); mHomeViewController.onSessionChanged(); @@ -409,7 +449,9 @@ public class homeController extends AppCompatActivity implements ComponentCallba public void onOpenTabViewBoundary(View view){ mNewTab.setPressed(true); + isTabMenuOpened = true; helperMethod.openActivity(tabController.class, constants.CONST_LIST_HISTORY, homeController.this,true); + overridePendingTransition(R.anim.popup_anim_in, R.anim.popup_anim_out); } public void onNotificationInvoked(String message,enums.etype e_type){ @@ -451,6 +493,19 @@ public class homeController extends AppCompatActivity implements ComponentCallba mGeckoClient.onClearSession(); } + public void onClearSiteData(){ + mGeckoClient.onClearSiteData(); + } + + public void onClearCache(){ + mGeckoClient.onClearCache(); + } + + public void onClearCookies(){ + mGeckoClient.onClearCookies(); + } + + @Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); @@ -493,9 +548,23 @@ public class homeController extends AppCompatActivity implements ComponentCallba if (mGeckoClient!=null && Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP && mGeckoClient.getUriPermission()!=null) { this.revokeUriPermission(mGeckoClient.getUriPermission(), Intent.FLAG_GRANT_WRITE_URI_PERMISSION | Intent.FLAG_GRANT_READ_URI_PERMISSION); } + if(status.sSettingIsAppStarted){ + onStartApplication(null); + } super.onResume(); } + public void onAcquireDisplay(){ + isTabMenuOpened = false; + tabRowModel model = (tabRowModel)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_CURRENT_TAB, null); + if(model==null){ + onLoadTab(model.getSession(),true); + }else { + mGeckoView.releaseSession(); + mGeckoView.setSession(model.getSession()); + } + } + @Override protected void onActivityResult(int requestCode, int resultCode, Intent data){ if(requestCode==1){ @@ -514,7 +583,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba public void onSuggestionUpdate(){ if(!mSearchbar.isFocused()){ - mHomeViewController.initializeSuggestionView(dataController.getInstance().getSuggestions()); + mHomeViewController.initializeSuggestionView((ArrayList)dataController.getInstance().invokeSuggestion(dataEnums.eSuggestionCommands.M_GET_SUGGESTION, null)); }else { isSuggestionChanged = true; } @@ -560,37 +629,42 @@ public class homeController extends AppCompatActivity implements ComponentCallba } public void onSaveCurrentTab(geckoSession session,boolean isHardCopy){ - dataController.getInstance().addTab(session,isHardCopy); + dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_ADD_TAB, Arrays.asList(session,isHardCopy)); } public boolean onCloseCurrentTab(geckoSession session){ - dataController.getInstance().closeTab(session); - tabRowModel model = dataController.getInstance().getCurrentTab(); + dataController.getInstance().invokeTab(dataEnums.eTabCommands.CLOSE_TAB, Collections.singletonList(session)); + tabRowModel model = (tabRowModel)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_CURRENT_TAB, null); session.stop(); session.close(); initTabCount(); if(model!=null){ - onLoadTab(model.getSession(),true); + if(activityContextManager.getInstance().getTabController()==null || activityContextManager.getInstance().getTabController()!=null && (activityContextManager.getInstance().getTabController().isDestroyed())){ + onLoadTab(model.getSession(),true); + } return true; } else { - return false; + if(activityContextManager.getInstance().getTabController()==null || activityContextManager.getInstance().getTabController()!=null && (activityContextManager.getInstance().getTabController().isDestroyed())){ + return false; + }else { + return true; + } } } public void initTabCount(){ - mHomeViewController.initTab(dataController.getInstance().getTotalTabs()); + mHomeViewController.initTab((int)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_TOTAL_TAB, null)); } public void releaseSession(){ mGeckoView.releaseSession(); } - public void loadExistingTab() - { - tabRowModel model = dataController.getInstance().getCurrentTab(); + public void loadExistingTab(){ + tabRowModel model = (tabRowModel)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_CURRENT_TAB, null); if (model != null) { onLoadTab(model.getSession(), true); @@ -615,7 +689,11 @@ public class homeController extends AppCompatActivity implements ComponentCallba } else { mSearchbar.clearFocus(); - if (menuId == R.id.menu9) { + if (menuId == R.id.menu12) { + helperMethod.hideKeyboard(this); + helperMethod.openActivity(orbotLogController.class, constants.CONST_LIST_HISTORY, homeController.this,true); + } + else if (menuId == R.id.menu9) { helperMethod.hideKeyboard(this); helperMethod.openActivity(tabController.class, constants.CONST_LIST_HISTORY, homeController.this,true); } @@ -672,7 +750,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba } if (menuId == R.id.menu23) { helperMethod.hideKeyboard(this); - mGeckoClient.onBackPressed(false); + pluginController.getInstance().MessageManagerHandler(homeController.this, Collections.singletonList(mGeckoClient.getSession().getCurrentURL()),enums.etype.bookmark); } if (menuId == R.id.menu24) { helperMethod.hideKeyboard(this); @@ -691,6 +769,10 @@ public class homeController extends AppCompatActivity implements ComponentCallba mHomeViewController.closeMenu(); } + public void onOrbotLog(View view) { + helperMethod.openActivity(orbotLogController.class, constants.CONST_LIST_HISTORY, homeController.this,true); + } + public class homeViewCallback implements eventObserver.eventListener{ @Override @@ -746,7 +828,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba mHomeViewController.onUpdateSearchBar(dataToStr(data.get(0),mGeckoClient.getSession().getCurrentURL()),false); } else if(e_type.equals(enums.etype.back_list_empty)){ - if(dataController.getInstance().getTotalTabs()>1){ + if((int)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_TOTAL_TAB, null)>1){ if(!onCloseCurrentTab(mGeckoClient.getSession())){ onNewTab(true,false); } @@ -758,10 +840,13 @@ public class homeController extends AppCompatActivity implements ComponentCallba pluginController.getInstance().setProxy(dataToStr(data.get(0))); } else if(e_type.equals(enums.etype.on_update_history)){ + if(activityContextManager.getInstance().getTabController()!=null && !activityContextManager.getInstance().getTabController().isDestroyed() && !activityContextManager.getInstance().getTabController().isFinishing()){ + activityContextManager.getInstance().getTabController().onTabRowChanged((int)data.get(1)); + } return dataController.getInstance().invokeHistory(dataEnums.eHistoryCommands.M_ADD_HISTORY ,data); } else if(e_type.equals(enums.etype.on_update_suggestion)){ - dataController.getInstance().addSuggesion(data.get(0).toString(),data.get(2).toString()); + dataController.getInstance().invokeSuggestion(dataEnums.eSuggestionCommands.M_ADD_SUGGESTION, Arrays.asList(data.get(0).toString(),data.get(2).toString())); } else if(e_type.equals(enums.etype.on_page_loaded)){ pluginController.getInstance().logEvent(strings.EVENT_PAGE_OPENED_SUCCESS); @@ -779,10 +864,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba handler.postDelayed(runnable, 1300); }else { final Handler handler = new Handler(); - Runnable runnable = () -> - { - pluginController.getInstance().initializeBannerAds(); - }; + Runnable runnable = () -> pluginController.getInstance().initializeBannerAds(); handler.postDelayed(runnable, 2000); } } @@ -810,7 +892,6 @@ public class homeController extends AppCompatActivity implements ComponentCallba mHomeViewController.onFullScreenUpdate(status); } else if(e_type.equals(enums.etype.on_update_favicon)){ - boolean status = (Boolean)data.get(0); dataController.getInstance().invokeImageCache(dataEnums.eImageCacheCommands.M_SET_IMAGE ,data); } else if(e_type.equals(enums.etype.on_long_press_with_link)){ @@ -834,7 +915,7 @@ public class homeController extends AppCompatActivity implements ComponentCallba helperMethod.openPlayStore(dataToStr(data.get(0)).split("__")[1],homeController.this); } else if(e_type.equals(enums.etype.on_update_suggestion_url)){ - dataController.getInstance().updateSuggestionURL(dataToStr(data.get(0)),dataToStr(data.get(2))); + dataController.getInstance().invokeSuggestion(dataEnums.eSuggestionCommands.M_UPDATE_SUGGESTION, Arrays.asList(dataToStr(data.get(0)),dataToStr(data.get(2)))); } return null; } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeModel.java index 2c1de034..4e48f70b 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeModel.java @@ -16,22 +16,26 @@ class homeModel } String urlComplete(String url){ - try - { - String updateUrl = helperMethod.completeURL(url); - URL host = new URL(updateUrl); - boolean isUrlValid = Patterns.WEB_URL.matcher(updateUrl).matches(); - if(isUrlValid && host.getHost().replace("www.","").contains(".")) + if(url.equals("about:config")){ + return url; + }else { + try { - return null; + String updateUrl = helperMethod.completeURL(url); + URL host = new URL(updateUrl); + boolean isUrlValid = Patterns.WEB_URL.matcher(updateUrl).matches(); + if(isUrlValid && host.getHost().replace("www.","").contains(".")) + { + return null; + } } - } - catch (Exception ex){ - ex.printStackTrace(); - } + catch (Exception ex){ + ex.printStackTrace(); + } - return constants.CONST_BACKEND_GOOGLE_URL.replace("$s",url.replaceAll(" ","+")); + return constants.CONST_BACKEND_GOOGLE_URL.replace("$s",url.replaceAll(" ","+")); + } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeViewController.java index f1d7cfb0..63fb0f7c 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/homeManager/homeViewController.java @@ -27,6 +27,7 @@ import android.view.inputmethod.InputMethodManager; import android.widget.*; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.constraintlayout.widget.ConstraintLayout; import androidx.core.content.ContextCompat; import com.daimajia.androidanimations.library.Techniques; @@ -42,7 +43,6 @@ 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; -//import org.torproject.android.service.wrapper.orbotLocalConstants; import java.util.ArrayList; import java.util.Collections; import java.util.Objects; @@ -66,7 +66,6 @@ class homeViewController private TextView mLoadingText; private AdView mBannerAds = null; private Handler mUpdateUIHandler = null; - private ImageButton mSwitchEngineBack; private ImageButton mGatewaySplash; private LinearLayout mTopBar; private GeckoView mGeckoView; @@ -76,12 +75,10 @@ class homeViewController private PopupWindow popupWindow = null; /*Local Variables*/ - private ValueAnimator mEngineAnimator = null; private Callable mLogs = null; private boolean isLandscape = false; - private boolean disableSplash = false; - void initialization(eventObserver.eventListener event, AppCompatActivity context, Button mNewTab, FrameLayout webviewContainer, TextView loadingText, com.darkweb.genesissearchengine.widget.AnimatedProgressBar progressBar, AutoCompleteTextView searchbar, ConstraintLayout splashScreen, ImageView loading, AdView banner_ads, ArrayList suggestions, ImageButton gateway_splash, LinearLayout top_bar, GeckoView gecko_view, ImageView backsplash, boolean is_triggered, Button connect_button, ImageButton switch_engine_back){ + void initialization(eventObserver.eventListener event, AppCompatActivity context, Button mNewTab, FrameLayout webviewContainer, TextView loadingText, com.darkweb.genesissearchengine.widget.AnimatedProgressBar progressBar, AutoCompleteTextView searchbar, ConstraintLayout splashScreen, ImageView loading, AdView banner_ads, ArrayList suggestions, ImageButton gateway_splash, LinearLayout top_bar, GeckoView gecko_view, ImageView backsplash, Button connect_button){ this.mContext = context; this.mProgressBar = progressBar; this.mSearchbar = searchbar; @@ -96,7 +93,6 @@ class homeViewController this.mGeckoView = gecko_view; this.mBackSplash = backsplash; this.mConnectButton = connect_button; - //this.mSwitchEngineBack = switch_engine_back; this.mNewTab = mNewTab; this.popupWindow = null; @@ -111,7 +107,7 @@ class homeViewController } void initTab(int count){ - mNewTab.setText(count+strings.GENERIC_EMPTY_STR); + mNewTab.setText((count+strings.GENERIC_EMPTY_STR)); YoYo.with(Techniques.FlipInX) .duration(450) @@ -127,16 +123,22 @@ class homeViewController window.setStatusBarColor(mContext.getResources().getColor(R.color.landing_ease_blue)); } else{ + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { - window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + window.setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); } else { - initStatusBarColor(); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } } + @RequiresApi(api = Build.VERSION_CODES.M) private void initStatusBarColor() { animatedColor oneToTwo = new animatedColor(ContextCompat.getColor(mContext, R.color.landing_ease_blue), ContextCompat.getColor(mContext, R.color.landing_ease_blue_light_1)); @@ -237,7 +239,7 @@ class homeViewController mConnectButton.setClickable(false); mGatewaySplash.setClickable(false); - mConnectButton.animate().setDuration(300).alpha(0f).withEndAction((() -> initSplashLoading())); + mConnectButton.animate().setDuration(300).alpha(0f).withEndAction((this::initSplashLoading)); mGatewaySplash.animate().setDuration(300).alpha(0f); } @@ -262,7 +264,7 @@ class homeViewController new Thread(){ public void run(){ AppCompatActivity temp_context = mContext; - while (!orbotLocalConstants.sIsTorInitialized || !orbotLocalConstants.sNetworkState){ + while (!orbotLocalConstants.mIsTorInitialized || !orbotLocalConstants.mNetworkState){ try { sleep(1000); @@ -298,8 +300,7 @@ class homeViewController mTopBar.setAlpha(1); if(mSplashScreen.getAlpha()>=1) { - disableSplash = true; - mSplashScreen.animate().setDuration(300).setStartDelay(500).alpha(0).withEndAction((() -> triggerPostUI())); + mSplashScreen.animate().setDuration(300).setStartDelay(500).alpha(0).withEndAction((this::triggerPostUI)); initPostUI(false); } } @@ -326,9 +327,7 @@ class homeViewController final View popupView = layoutInflater.inflate(R.layout.popup_menu, null); - int height = 0; - - height = helperMethod.getScreenHeight(mContext)*90 /100; + int height = helperMethod.getScreenHeight(mContext)*90 /100; popupWindow = new PopupWindow( popupView, @@ -346,16 +345,15 @@ class homeViewController } popupWindow.showAtLocation(parent, Gravity.TOP|Gravity.END,0,0); + if(!status.sCharacterEncoding){ + popupView.findViewById(R.id.menu30).setVisibility(View.GONE); + } + ImageButton back = popupView.findViewById(R.id.menu22); - ImageButton forward = popupView.findViewById(R.id.menu23); ImageButton close = popupView.findViewById(R.id.menu20); CheckBox desktop = popupView.findViewById(R.id.menu27); desktop.setChecked(userAgent==USER_AGENT_MODE_DESKTOP); - if(!canGoForward){ - forward.setColorFilter(Color.argb(255, 191, 191, 191)); - forward.setEnabled(false); - } if(!canGoBack){ back.setEnabled(false); back.setColorFilter(Color.argb(255, 191, 191, 191)); @@ -444,7 +442,6 @@ class homeViewController handlerLocalUrl = url; if(searchBarUpdateHandler.hasMessages(100)){ - delay=0; return; } @@ -478,7 +475,7 @@ class homeViewController if(url.length()<=300){ url = removeEndingSlash(url); - mSearchbar.setText(helperMethod.urlDesigner(url)); + mSearchbar.setText(helperMethod.urlDesigner(url, mContext)); mSearchbar.selectAll(); if(isTextSelected){ @@ -502,7 +499,6 @@ class homeViewController } void onNewTab(boolean keyboard,boolean isKeyboardOpen){ - onUpdateSearchBar(strings.HOME_BLANK_PAGE,false); if(keyboard){ if(!isKeyboardOpen){ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageViewController.java index 00fe50bf..14f5d06f 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/languageManager/languageViewController.java @@ -5,6 +5,10 @@ import android.view.View; import android.view.Window; import android.view.WindowManager; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.ContextCompat; + +import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.example.myapplication.R; @@ -23,12 +27,15 @@ class languageViewController if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { Window window = mContext.getWindow(); window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); } else { - mContext.getWindow().setStatusBarColor(mContext.getColor(R.color.white)); - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } 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 new file mode 100644 index 00000000..468c5a79 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogController.java @@ -0,0 +1,111 @@ +package com.darkweb.genesissearchengine.appManager.orbotLogManager; + +import android.os.Bundle; +import android.view.View; +import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; +import com.darkweb.genesissearchengine.appManager.activityContextManager; +import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.pluginManager.pluginController; +import com.example.myapplication.R; +import org.torproject.android.service.wrapper.orbotLocalConstants; +import java.util.Collections; +import java.util.List; + +public class orbotLogController extends AppCompatActivity { + + /* PRIVATE VARIABLES */ + private orbotLogModel mOrbotModel; + private orbotLogViewController mOrbotViewController; + + private TextView mLogs; + private int mLogCounter=0; + private boolean mActivityClosed = false; + + /* INITIALIZATIONS */ + + @Override + protected void onCreate(Bundle savedInstanceState) { + pluginController.getInstance().onCreate(this); + super.onCreate(savedInstanceState); + setContentView(R.layout.orbot_log_view); + + viewsInitializations(); + onUpdateLogs(); + } + + public void viewsInitializations() { + mLogs = findViewById(R.id.pLogs); + + activityContextManager.getInstance().setOrbotLogController(this); + mOrbotViewController = new orbotLogViewController(this, mLogs); + mOrbotModel = new orbotLogModel(new orbotModelCallback()); + } + + /* LISTENERS */ + + public void onUpdateLogs(){ + new Thread(){ + public void run(){ + while (true){ + try { + if(mActivityClosed){ + break; + } + if(orbotLocalConstants.mTorLogsHistory.size()>mLogCounter){ + sleep(0); + }else { + sleep(400); + } + + if(orbotLocalConstants.mTorLogsHistory.size()>0){ + runOnUiThread(() -> { + if(orbotLocalConstants.mTorLogsHistory.size()>mLogCounter){ + mOrbotViewController.onTrigger(orbotLogEnums.eOrbotLogViewCommands.M_UPDATE_LOGS, Collections.singletonList(orbotLocalConstants.mTorLogsHistory.get(mLogCounter))); + mLogCounter+=1; + } + }); + } + } catch (InterruptedException e) { + e.printStackTrace(); + } + } + } + }.start(); + } + + public class orbotModelCallback implements eventObserver.eventListener{ + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + /* LOCAL OVERRIDES */ + + @Override + public void onResume() + { + activityContextManager.getInstance().setCurrentActivity(this); + super.onResume(); + } + + @Override + public void onPause() + { + super.onPause(); + } + + @Override + public void onBackPressed() { + finish(); + mActivityClosed = true; + } + + public void onClose(View view){ + finish(); + mActivityClosed = true; + } +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogEnums.java new file mode 100644 index 00000000..9396d95a --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogEnums.java @@ -0,0 +1,12 @@ +package com.darkweb.genesissearchengine.appManager.orbotLogManager; + +public class orbotLogEnums +{ + /*Settings Manager*/ + public enum eOrbotLogViewCommands { + M_UPDATE_LOGS + } + + public enum eOrbotLogModelCommands { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogModel.java new file mode 100644 index 00000000..61e16565 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogModel.java @@ -0,0 +1,30 @@ +package com.darkweb.genesissearchengine.appManager.orbotLogManager; + +import com.darkweb.genesissearchengine.constants.keys; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.pluginManager.pluginController; +import java.util.Arrays; +import java.util.List; + +class orbotLogModel +{ + /*Variable Declaration*/ + + private eventObserver.eventListener mEvent; + + /*Initializations*/ + + orbotLogModel(eventObserver.eventListener mEvent){ + this.mEvent = mEvent; + } + + /*Helper Methods*/ + + public void onTrigger(orbotLogEnums.eOrbotLogModelCommands pCommands, List pData){ + } + + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogViewController.java new file mode 100644 index 00000000..7ed562ba --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotLogManager/orbotLogViewController.java @@ -0,0 +1,64 @@ +package com.darkweb.genesissearchengine.appManager.orbotLogManager; + +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.LinearLayout; +import android.widget.TextView; + +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.ContextCompat; + +import com.darkweb.genesissearchengine.helperManager.helperMethod; +import com.example.myapplication.R; +import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.List; + +class orbotLogViewController +{ + /*Private Variables*/ + + private AppCompatActivity mContext; + private TextView mLogs; + + /*Initializations*/ + + orbotLogViewController(AppCompatActivity pContext, TextView pLogs) + { + this.mContext = pContext; + this.mLogs = pLogs; + + initPostUI(); + } + + private void initPostUI(){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = mContext.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + } + else { + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); + } + } + } + + + private void onUpdateLogs(String pLogs){ + mLogs.append("\n\n~ " + (pLogs)); + } + + public void onTrigger(orbotLogEnums.eOrbotLogViewCommands pCommands, List pData){ + if(pCommands.equals(orbotLogEnums.eOrbotLogViewCommands.M_UPDATE_LOGS)){ + onUpdateLogs((String) pData.get(0)); + } + + } +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java index 93640a10..07f8946e 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotController.java @@ -7,25 +7,25 @@ import androidx.appcompat.app.AppCompatActivity; import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.appManager.bridgeManager.bridgeController; import com.darkweb.genesissearchengine.constants.constants; -import com.darkweb.genesissearchengine.constants.keys; +import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.constants.status; -import com.darkweb.genesissearchengine.dataManager.dataController; -import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.darkweb.genesissearchengine.pluginManager.pluginController; import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; - import java.util.Arrays; import java.util.Collections; +import java.util.List; public class orbotController extends AppCompatActivity { /* PRIVATE VARIABLES */ + private com.darkweb.genesissearchengine.appManager.orbotManager.orbotModel mOrbotModel; + private com.darkweb.genesissearchengine.appManager.orbotManager.orbotViewController mOrbotViewController; private SwitchMaterial mBridgeSwitch; private SwitchMaterial mVpnSwitch; - private orbotViewController mOrbotViewController; private LinearLayout mCustomizableBridgeMenu; /* INITIALIZATIONS */ @@ -44,18 +44,24 @@ public class orbotController extends AppCompatActivity { mVpnSwitch = findViewById(R.id.pVpnSwitch); mCustomizableBridgeMenu = findViewById(R.id.pCustomizableBridgeMenu); - mOrbotViewController = new orbotViewController(mBridgeSwitch, mVpnSwitch, this, mCustomizableBridgeMenu); - mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.S_INIT_UI, Arrays.asList(status.sBridgeVPNStatus,status.sBridgeStatus)); + mOrbotViewController = new com.darkweb.genesissearchengine.appManager.orbotManager.orbotViewController(mBridgeSwitch, mVpnSwitch, this, mCustomizableBridgeMenu); + mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.M_INIT_UI, Arrays.asList(status.sBridgeVPNStatus,status.sBridgeStatus)); + mOrbotModel = new com.darkweb.genesissearchengine.appManager.orbotManager.orbotModel(new orbotModelCallback()); } /* LISTENERS */ + public class orbotModelCallback implements eventObserver.eventListener{ + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } public void onBridgeSwitch(View view){ - status.sBridgeStatus = !mBridgeSwitch.isChecked(); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.BRIDGE_BRIDGE_ENABLES,status.sBridgeStatus)); - pluginController.getInstance().updateBridges(status.sBridgeStatus); - mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.S_UPDATE_BRIDGE_SETTINGS_VIEWS, Collections.singletonList(status.sBridgeStatus)); + mOrbotModel.onTrigger(orbotEnums.eOrbotModelCommands.M_BRIDGE_SWITCH,Collections.singletonList(!mBridgeSwitch.isChecked())); + mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.M_UPDATE_BRIDGE_SETTINGS_VIEWS, Collections.singletonList(status.sBridgeStatus)); } public void openBridgeSettings(View view){ @@ -63,10 +69,8 @@ public class orbotController extends AppCompatActivity { } public void onVPNSwitch(View view){ - status.sBridgeVPNStatus = !mVpnSwitch.isChecked(); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.BRIDGE_VPN_ENABLED,status.sBridgeVPNStatus)); - mOrbotViewController.updateVPN(status.sBridgeVPNStatus); - pluginController.getInstance().updateVPN(status.sBridgeVPNStatus); + mOrbotModel.onTrigger(orbotEnums.eOrbotModelCommands.M_VPN_SWITCH,Collections.singletonList(!mVpnSwitch.isChecked())); + mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.M_UPDATE_VPN,Collections.singletonList(status.sBridgeVPNStatus)); } /* LOCAL OVERRIDES */ @@ -75,7 +79,7 @@ public class orbotController extends AppCompatActivity { public void onResume() { activityContextManager.getInstance().setCurrentActivity(this); - mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.S_INIT_POST_UI,null); + mOrbotViewController.onTrigger(orbotEnums.eOrbotViewCommands.M_INIT_POST_UI,null); super.onResume(); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotEnums.java index 49d981ea..fecf8a8b 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotEnums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotEnums.java @@ -4,6 +4,10 @@ public class orbotEnums { /*Settings Manager*/ public enum eOrbotViewCommands { - S_UPDATE_BRIDGE_SETTINGS_VIEWS, S_INIT_POST_UI, S_INIT_UI + M_UPDATE_BRIDGE_SETTINGS_VIEWS, M_INIT_POST_UI, M_INIT_UI, M_UPDATE_VPN, M_UPDATE_BRIDGES + } + + public enum eOrbotModelCommands { + M_BRIDGE_SWITCH, M_VPN_SWITCH } } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotModel.java new file mode 100644 index 00000000..a0b08c85 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotModel.java @@ -0,0 +1,49 @@ +package com.darkweb.genesissearchengine.appManager.orbotManager; + +import com.darkweb.genesissearchengine.constants.keys; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.pluginManager.pluginController; +import java.util.Arrays; +import java.util.List; + +class orbotModel +{ + /*Variable Declaration*/ + + private eventObserver.eventListener mEvent; + + /*Initializations*/ + + orbotModel(eventObserver.eventListener mEvent){ + this.mEvent = mEvent; + } + + /*Helper Methods*/ + + public void onBridgeSwitch(boolean pStatus){ + status.sBridgeStatus = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.BRIDGE_BRIDGE_ENABLES,status.sBridgeStatus)); + pluginController.getInstance().updateBridges(status.sBridgeStatus); + } + + public void onVPNSwitch(boolean pStatus){ + status.sBridgeVPNStatus = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.BRIDGE_VPN_ENABLED,status.sBridgeVPNStatus)); + pluginController.getInstance().updateVPN(status.sBridgeVPNStatus); + } + + + public void onTrigger(com.darkweb.genesissearchengine.appManager.orbotManager.orbotEnums.eOrbotModelCommands pCommands, List pData){ + if(pCommands == com.darkweb.genesissearchengine.appManager.orbotManager.orbotEnums.eOrbotModelCommands.M_BRIDGE_SWITCH){ + onBridgeSwitch((boolean) pData.get(0)); + } + else if(pCommands == com.darkweb.genesissearchengine.appManager.orbotManager.orbotEnums.eOrbotModelCommands.M_VPN_SWITCH){ + onVPNSwitch((boolean) pData.get(0)); + } + } + + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotViewController.java index 2fdc40eb..86bdc0c9 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/orbotManager/orbotViewController.java @@ -6,7 +6,9 @@ import android.view.Window; import android.view.WindowManager; import android.widget.LinearLayout; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; + import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; import java.util.List; @@ -41,34 +43,36 @@ class orbotViewController window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } - private void bridgeSettingsStatus(boolean p_status){ - updateBridgeViews(p_status, true); + private void bridgeSettingsStatus(boolean pStatus){ + updateBridgeViews(pStatus, true); } - public void updateVPN(boolean p_status){ - mVpnSwitch.setChecked(p_status); + private void updateVPN(boolean pStatus){ + mVpnSwitch.setChecked(pStatus); } - public void updateBridgeViews(boolean p_status,boolean p_is_invoked){ - mBridgeSwitch.setChecked(p_status); - if(p_status){ + private void updateBridgeViews(boolean pStatus,boolean pIsInvoked){ + mBridgeSwitch.setChecked(pStatus); + if(pStatus){ mCustomizableBridgeMenu.setClickable(true); mCustomizableBridgeMenu.setAlpha(0); mCustomizableBridgeMenu.setVisibility(View.VISIBLE); - if(p_is_invoked){ + if(pIsInvoked){ mCustomizableBridgeMenu.animate().alpha(1); }else { mCustomizableBridgeMenu.setAlpha(1); } }else { mCustomizableBridgeMenu.setClickable(false); - if(p_is_invoked){ + if(pIsInvoked){ mCustomizableBridgeMenu.animate().alpha(0).withEndAction(() -> mCustomizableBridgeMenu.setVisibility(View.GONE)); }else { mCustomizableBridgeMenu.setAlpha(0); @@ -77,20 +81,26 @@ class orbotViewController } } - private void initViews(boolean p_vpn_status, boolean p_gateway_status){ - updateBridgeViews(p_gateway_status, false); - updateVPN(p_vpn_status); + private void initViews(boolean pVPNStatus, boolean pGatewayStatus){ + updateBridgeViews(pGatewayStatus, false); + updateVPN(pVPNStatus); } - public void onTrigger(orbotEnums.eOrbotViewCommands p_commands, List p_data){ - if(p_commands == orbotEnums.eOrbotViewCommands.S_UPDATE_BRIDGE_SETTINGS_VIEWS){ - bridgeSettingsStatus((boolean) p_data.get(0)); + public void onTrigger(orbotEnums.eOrbotViewCommands pCommands, List pData){ + if(pCommands == orbotEnums.eOrbotViewCommands.M_UPDATE_BRIDGE_SETTINGS_VIEWS){ + bridgeSettingsStatus((boolean) pData.get(0)); } - else if(p_commands == orbotEnums.eOrbotViewCommands.S_INIT_POST_UI){ + else if(pCommands == orbotEnums.eOrbotViewCommands.M_INIT_POST_UI){ initPostUI(); } - else if(p_commands == orbotEnums.eOrbotViewCommands.S_INIT_UI){ - initViews((boolean)p_data.get(0),(boolean) p_data.get(1)); + else if(pCommands == orbotEnums.eOrbotViewCommands.M_INIT_UI){ + initViews((boolean)pData.get(0),(boolean) pData.get(1)); + } + else if(pCommands == orbotEnums.eOrbotViewCommands.M_UPDATE_VPN){ + updateVPN((boolean) pData.get(0)); + } + else if(pCommands == orbotEnums.eOrbotViewCommands.M_UPDATE_BRIDGES){ + updateBridgeViews((boolean) pData.get(1), (boolean) pData.get(1)); } } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java index 7de6554a..9cbc23b8 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityController.java @@ -4,9 +4,9 @@ import android.os.Bundle; import android.view.View; import android.widget.SeekBar; import android.widget.TextView; - import androidx.appcompat.app.AppCompatActivity; import com.darkweb.genesissearchengine.appManager.activityContextManager; +import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.constants.keys; import com.darkweb.genesissearchengine.constants.status; @@ -16,8 +16,8 @@ import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.pluginManager.pluginController; import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; - import java.util.Arrays; +import java.util.Collections; import java.util.List; public class settingAccessibilityController extends AppCompatActivity { @@ -27,7 +27,6 @@ public class settingAccessibilityController extends AppCompatActivity { private settingAccessibilityViewController mSettingAccessibilityViewController; private SwitchMaterial mZoom; private SwitchMaterial mVoiceInput; - private SwitchMaterial mFontSizeAdjustable; private SeekBar mSeekBar; private TextView mSeekBarSample; private TextView mScalePercentage; @@ -45,12 +44,11 @@ public class settingAccessibilityController extends AppCompatActivity { public void viewsInitializations() { mZoom = findViewById(R.id.pZoom); mVoiceInput = findViewById(R.id.pVoiceInput); - mFontSizeAdjustable = findViewById(R.id.pFontSizeAdjustable); mSeekBar = findViewById(R.id.pSeekBar); mSeekBarSample = findViewById(R.id.pSeekBarSample); mScalePercentage = findViewById(R.id.pScalePercentage); - mSettingAccessibilityViewController = new settingAccessibilityViewController(this, new settingAccessibilityController.settingAccessibilityViewCallback(), mZoom, mVoiceInput, mFontSizeAdjustable, mSeekBar, mSeekBarSample, mScalePercentage); + mSettingAccessibilityViewController = new settingAccessibilityViewController(this, new settingAccessibilityController.settingAccessibilityViewCallback(), mZoom, mVoiceInput, mSeekBar, mSeekBarSample, mScalePercentage); mSettingAccessibilityModel = new settingAccessibilityModel(new settingAccessibilityController.settingAccessibilityModelCallback()); } @@ -88,8 +86,9 @@ public class settingAccessibilityController extends AppCompatActivity { @Override public void onProgressChanged(SeekBar seekBar, int progress,boolean fromUser) { int percentage = ((progress+5)*10); - mSeekBarSample.setTextSize((int)((12.0*percentage)/100)); - mScalePercentage.setText(percentage+"%"); + mSettingAccessibilityViewController.onTrigger(settingAccessibilityEnums.eAccessibilityModel.M_UPDATE_SAMPLE_TEXT, Collections.singletonList((int)((12.0*percentage)/100))); + mSettingAccessibilityViewController.onTrigger(settingAccessibilityEnums.eAccessibilityModel.M_UPDATE_PERCENTAGE, Collections.singletonList((percentage+ constants.CONST_PERCENTAGE_SIGN))); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_FONT_SIZE,percentage)); status.sSettingFontSize = percentage; activityContextManager.getInstance().getHomeController().onLoadFont(); @@ -123,25 +122,13 @@ public class settingAccessibilityController extends AppCompatActivity { } public void onZoomSettingUpdate(View view){ - mSettingAccessibilityModel.onZoomSettingUpdate(!mZoom.isChecked()); + mSettingAccessibilityModel.onTrigger(settingAccessibilityEnums.eAccessibilityViewController.M_ZOOM_SETTING, Collections.singletonList(!mZoom.isChecked())); mZoom.toggle(); } public void onVoiceInputSettingUpdate(View view){ - mSettingAccessibilityModel.onVoiceInputSettingUpdate(!mVoiceInput.isChecked()); + mSettingAccessibilityModel.onTrigger(settingAccessibilityEnums.eAccessibilityViewController.M_VOICE_INPUT_SETTING, Collections.singletonList(!mVoiceInput.isChecked())); mVoiceInput.toggle(); } - public void onFontSizeAdjustableUpdate(View view){ - mSettingAccessibilityModel.onFontSizeAdjustableUpdate(!mFontSizeAdjustable.isChecked()); - mFontSizeAdjustable.toggle(); - - if(!mFontSizeAdjustable.isChecked()){ - mSettingAccessibilityViewController.enableFontManual(); - }else { - mSettingAccessibilityViewController.disableFontManual(); - } - activityContextManager.getInstance().getHomeController().onLoadFont(); - } - } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityEnums.java new file mode 100644 index 00000000..cba7234c --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityEnums.java @@ -0,0 +1,14 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.accessibilityManager; + +class settingAccessibilityEnums +{ + /*History Manager*/ + public enum eAccessibilityModel { + M_UPDATE_SAMPLE_TEXT, M_UPDATE_PERCENTAGE + } + + public enum eAccessibilityViewController { + M_ZOOM_SETTING, M_VOICE_INPUT_SETTING + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityModel.java index 449585a7..c11cb748 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityModel.java @@ -1,14 +1,12 @@ package com.darkweb.genesissearchengine.appManager.settingManager.accessibilityManager; -import android.view.View; - import com.darkweb.genesissearchengine.constants.keys; import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.dataManager.dataController; import com.darkweb.genesissearchengine.dataManager.dataEnums; import com.darkweb.genesissearchengine.helperManager.eventObserver; - import java.util.Arrays; +import java.util.List; class settingAccessibilityModel { @@ -24,21 +22,24 @@ class settingAccessibilityModel /*Helper Methods*/ - public void onZoomSettingUpdate(boolean pStatus){ + private void onZoomSettingUpdate(boolean pStatus){ status.sSettingEnableZoom = pStatus; dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_ZOOM,pStatus)); } - public void onVoiceInputSettingUpdate(boolean pStatus){ + private void onVoiceInputSettingUpdate(boolean pStatus){ status.sSettingEnableVoiceInput = pStatus; dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_VOICE_INPUT,pStatus)); } - public void onFontSizeAdjustableUpdate(boolean pStatus){ - status.sSettingFontAdjustable = pStatus; - status.sSettingFontSize = 5; - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_FONT_ADJUSTABLE,pStatus)); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_FONT_SIZE,(int)status.sSettingFontSize)); + public Object onTrigger(settingAccessibilityEnums.eAccessibilityViewController pCommands, List pData){ + if(pCommands.equals(settingAccessibilityEnums.eAccessibilityViewController.M_ZOOM_SETTING)){ + onZoomSettingUpdate((boolean)pData.get(0)); + } + else if(pCommands.equals(settingAccessibilityEnums.eAccessibilityViewController.M_VOICE_INPUT_SETTING)){ + onVoiceInputSettingUpdate((boolean)pData.get(0)); + } + return null; } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityViewController.java index cf67fec2..b497c503 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/accessibilityManager/settingAccessibilityViewController.java @@ -6,14 +6,15 @@ import android.view.Window; import android.view.WindowManager; import android.widget.SeekBar; import android.widget.TextView; - import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; - +import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.List; class settingAccessibilityViewController { @@ -24,20 +25,18 @@ class settingAccessibilityViewController private SwitchMaterial mZoom; private SwitchMaterial mVoiceInput; - private SwitchMaterial mFontSizeAdjustable; private SeekBar mSeekBar; private TextView mSeekBarSample; private TextView mScalePercentage; /*Initializations*/ - settingAccessibilityViewController(settingAccessibilityController pContext, eventObserver.eventListener pEvent, SwitchMaterial pZoom, SwitchMaterial pVoiceInput, SwitchMaterial pFontSizeAdjustable, SeekBar pSeekBar, TextView mSeekBarSample, TextView pScalePercentage) + settingAccessibilityViewController(settingAccessibilityController pContext, eventObserver.eventListener pEvent, SwitchMaterial pZoom, SwitchMaterial pVoiceInput, SeekBar pSeekBar, TextView mSeekBarSample, TextView pScalePercentage) { this.mEvent = pEvent; this.mContext = pContext; this.mZoom = pZoom; this.mVoiceInput = pVoiceInput; - this.mFontSizeAdjustable = pFontSizeAdjustable; this.mSeekBar = pSeekBar; this.mSeekBarSample = mSeekBarSample; this.mScalePercentage = pScalePercentage; @@ -55,8 +54,10 @@ class settingAccessibilityViewController window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } @@ -73,50 +74,38 @@ class settingAccessibilityViewController }else { mVoiceInput.setChecked(false); } - if(status.sSettingFontAdjustable){ - mFontSizeAdjustable.setChecked(true); - mSeekBar.setProgress(5); - mScalePercentage.setText("100%"); - mSeekBar.setEnabled(false); - mSeekBar.setAlpha(0.5f); - mScalePercentage.setAlpha(0.5f); - mSeekBarSample.setAlpha(0.3f); - disableFontManual(); - }else { - mFontSizeAdjustable.setChecked(false); - mSeekBar.setProgress((int)status.sSettingFontSize/10-5); - int percentage = (int)status.sSettingFontSize; - if(status.sSettingFontSize<100){ - mSeekBarSample.setTextSize((int)(12.0*percentage)/100); - }else if(status.sSettingFontSize>100){ - mSeekBarSample.setTextSize((int)(12.0*percentage)/100); - } - mScalePercentage.setText(percentage+"%"); - mSeekBar.setAlpha(1f); - mScalePercentage.setAlpha(1f); - mSeekBarSample.setAlpha(1f); - mSeekBar.setEnabled(true); + mSeekBar.setProgress((int)status.sSettingFontSize/10-5); + float percentage = status.sSettingFontSize; + if(status.sSettingFontSize<100){ + mSeekBarSample.setTextSize((int)((12*percentage)/100)); + }else if(status.sSettingFontSize>100){ + mSeekBarSample.setTextSize((int)((12*percentage)/100)); } - } - public void disableFontManual(){ - mSeekBar.setProgress(5); - mSeekBarSample.setTextSize(12); - mScalePercentage.setText("100%"); - mSeekBar.setEnabled(false); - mSeekBar.animate().setDuration(250).alpha(0.5f); - mScalePercentage.animate().setDuration(250).alpha(0.5f); - mSeekBarSample.animate().setDuration(250).alpha(0.3f); - } - - public void enableFontManual(){ - mSeekBar.setProgress(5); - mSeekBarSample.setTextSize(12); - mScalePercentage.setText("100%"); + mScalePercentage.setText(((int)percentage + constants.CONST_PERCENTAGE_SIGN)); + mSeekBar.setAlpha(1f); + mScalePercentage.setAlpha(1f); + mSeekBarSample.setAlpha(1f); mSeekBar.setEnabled(true); - mSeekBar.animate().setDuration(250).alpha(1f); - mScalePercentage.animate().setDuration(250).alpha(1f); - mSeekBarSample.animate().setDuration(250).alpha(1f); } + + private void updateSampleTextSize(int pText){ + mSeekBarSample.setTextSize(pText); + } + + private void updatePercentage(String pText){ + mScalePercentage.setText(pText); + } + + public Object onTrigger(settingAccessibilityEnums.eAccessibilityModel pCommands, List pData){ + if(pCommands.equals(settingAccessibilityEnums.eAccessibilityModel.M_UPDATE_SAMPLE_TEXT)){ + updateSampleTextSize((int)pData.get(0)); + } + else if(pCommands.equals(settingAccessibilityEnums.eAccessibilityModel.M_UPDATE_PERCENTAGE)){ + updatePercentage((String)pData.get(0)); + } + return null; + } + } 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 new file mode 100644 index 00000000..8f2eace5 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceController.java @@ -0,0 +1,132 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.advanceManager; + +import android.os.Bundle; +import android.view.View; +import android.widget.RadioButton; +import androidx.appcompat.app.AppCompatActivity; +import com.darkweb.genesissearchengine.appManager.activityContextManager; +import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.pluginManager.pluginController; +import com.example.myapplication.R; +import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class settingAdvanceController extends AppCompatActivity { + + /* PRIVATE VARIABLES */ + private settingAdvanceModel mSettingAdvanceModel; + private settingAdvanceViewController mSettingAdvanceViewController; + private SwitchMaterial mRestoreTabs; + private SwitchMaterial mShowWebFonts; + private SwitchMaterial mAllowAutoPlay; + private ArrayList mImageOption = new ArrayList<>(); + private boolean mIsChanged = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + pluginController.getInstance().onCreate(this); + super.onCreate(savedInstanceState); + setContentView(R.layout.setting_advance_view); + + viewsInitializations(); + } + + public void viewsInitializations() { + mRestoreTabs = findViewById(R.id.pRestoreTabs); + mShowWebFonts = findViewById(R.id.pShowWebFonts); + mAllowAutoPlay = findViewById(R.id.pAllowAutoPlay); + mImageOption.add(findViewById(R.id.pAdvanceImageOption1)); + mImageOption.add(findViewById(R.id.pAdvanceImageOption2)); + + mSettingAdvanceViewController = new settingAdvanceViewController(this, new settingAdvanceViewCallback(), mRestoreTabs, mShowWebFonts, mAllowAutoPlay, mImageOption); + mSettingAdvanceModel = new settingAdvanceModel(new settingAdvanceModelCallback()); + } + + /* LISTENERS */ + public class settingAdvanceViewCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + + public class settingAdvanceModelCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + /* LOCAL OVERRIDES */ + + @Override + public void onResume() + { + activityContextManager.getInstance().setCurrentActivity(this); + super.onResume(); + + int notificationStatus = pluginController.getInstance().getNotificationStatus(); + if(notificationStatus==0){ + pluginController.getInstance().disableTorNotification(); + } else if(notificationStatus==1){ + pluginController.getInstance().enableTorNotification(); + } + } + + @Override + public void onPause() + { + super.onPause(); + } + + @Override + public void onBackPressed() { + if(mIsChanged){ + pluginController.getInstance().updatePrivacy(); + activityContextManager.getInstance().getHomeController().initRuntimeSettings(); + } + finish(); + } + + /*UI Redirection*/ + + public void onClose(View view){ + if(mIsChanged){ + pluginController.getInstance().updatePrivacy(); + activityContextManager.getInstance().getHomeController().initRuntimeSettings(); + } + finish(); + } + + public void onRestoreTabs(View view) { + mSettingAdvanceModel.onTrigger(settingAdvanceEnums.eAdvanceModel.M_RESTORE_TAB, Collections.singletonList(!mRestoreTabs.isChecked())); + mRestoreTabs.toggle(); + } + + public void onShowImages(View view) { + mIsChanged = true; + mSettingAdvanceViewController.onTrigger(settingAdvanceEnums.eAdvanceViewController.M_CLEAR_IMAGE, Collections.singletonList(null)); + mSettingAdvanceModel.onTrigger(settingAdvanceEnums.eAdvanceModel.M_SHOW_IMAGE, Collections.singletonList(view)); + mSettingAdvanceViewController.onTrigger(settingAdvanceEnums.eAdvanceViewController.M_SET_IMAGE, Collections.singletonList(view)); + } + + public void onShowWebFonts(View view) { + mIsChanged = true; + mSettingAdvanceModel.onTrigger(settingAdvanceEnums.eAdvanceModel.M_SHOW_WEB_FONTS, Collections.singletonList(!mShowWebFonts.isChecked())); + mShowWebFonts.toggle(); + } + + public void onAllowAutoPlay(View view) { + mIsChanged = true; + mSettingAdvanceModel.onTrigger(settingAdvanceEnums.eAdvanceModel.M_ALLOW_AUTOPLAY, Collections.singletonList(!mAllowAutoPlay.isChecked())); + mAllowAutoPlay.toggle(); + } +} \ No newline at end of file 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 new file mode 100644 index 00000000..52d607d0 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceEnums.java @@ -0,0 +1,14 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.advanceManager; + +class settingAdvanceEnums +{ + /*History Manager*/ + public enum eAdvanceModel { + M_RESTORE_TAB, M_SHOW_IMAGE, M_SHOW_WEB_FONTS, M_ALLOW_AUTOPLAY + } + + public enum eAdvanceViewController { + M_CLEAR_IMAGE, M_SET_IMAGE + } + +} \ 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 new file mode 100644 index 00000000..b5b6b31e --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceModel.java @@ -0,0 +1,71 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.advanceManager; + +import android.view.View; + +import com.darkweb.genesissearchengine.constants.keys; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.example.myapplication.R; +import java.util.Arrays; +import java.util.List; + +class settingAdvanceModel +{ + /*Variable Declaration*/ + + private eventObserver.eventListener mEvent; + + /*Initializations*/ + + settingAdvanceModel(eventObserver.eventListener mEvent){ + this.mEvent = mEvent; + } + + /*Helper Methods*/ + + private void onRestoreTabs(boolean pStatus) { + status.sRestoreTabs = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_RESTORE_TAB,pStatus)); + } + + private void onShowImages(View pView) { + + if(pView.getId() == R.id.pAdvanceOption1){ + status.sShowImages = 0; + } + else if(pView.getId() == R.id.pAdvanceOption2){ + status.sShowImages = 2; + } + + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_SHOW_IMAGES,status.sShowImages)); + } + + private void onShowWebFonts(boolean pStatus) { + status.sShowWebFonts = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SHOW_FONTS,pStatus)); + } + + private void onAllowAutoPlay(boolean pStatus) { + status.sAutoPlay = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_AUTO_PLAY,pStatus)); + } + + public Object onTrigger(settingAdvanceEnums.eAdvanceModel pCommands, List pData){ + if(pCommands.equals(settingAdvanceEnums.eAdvanceModel.M_RESTORE_TAB)){ + onRestoreTabs((boolean)pData.get(0)); + } + else if(pCommands.equals(settingAdvanceEnums.eAdvanceModel.M_SHOW_IMAGE)){ + onShowImages((View)pData.get(0)); + } + else if(pCommands.equals(settingAdvanceEnums.eAdvanceModel.M_SHOW_WEB_FONTS)){ + onShowWebFonts((boolean)pData.get(0)); + } + else if(pCommands.equals(settingAdvanceEnums.eAdvanceModel.M_ALLOW_AUTOPLAY)){ + onAllowAutoPlay((boolean)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 new file mode 100644 index 00000000..fb574357 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/advanceManager/settingAdvanceViewController.java @@ -0,0 +1,125 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.advanceManager; + +import android.content.res.ColorStateList; +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.RadioButton; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.ContextCompat; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.example.myapplication.R; +import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.ArrayList; +import java.util.List; + +class settingAdvanceViewController +{ + /*Private Variables*/ + + private eventObserver.eventListener mEvent; + private AppCompatActivity mContext; + + private SwitchMaterial mRestoreTabs; + private SwitchMaterial mShowWebFonts; + private SwitchMaterial mAllowAutoPlay; + private ArrayList mImageOption; + + /*Initializations*/ + + settingAdvanceViewController(settingAdvanceController pContext, eventObserver.eventListener pEvent, SwitchMaterial pRestoreTabs, SwitchMaterial pShowWebFonts, SwitchMaterial pAllowAutoPlay, ArrayList pImageOption) + { + this.mEvent = pEvent; + this.mContext = pContext; + this.mRestoreTabs = pRestoreTabs; + this.mShowWebFonts = pShowWebFonts; + this.mAllowAutoPlay = pAllowAutoPlay; + this.mImageOption = pImageOption; + + initViews(); + initPostUI(); + } + + private void initViews() + { + if(status.sRestoreTabs){ + mRestoreTabs.setChecked(true); + }else { + mRestoreTabs.setChecked(false); + } + + if(status.sShowWebFonts){ + mShowWebFonts.setChecked(true); + }else { + mShowWebFonts.setChecked(false); + } + + if(status.sAutoPlay){ + mAllowAutoPlay.setChecked(true); + }else { + mAllowAutoPlay.setChecked(false); + } + + clearImageOptions(); + if(status.sShowImages == 0){ + mImageOption.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mImageOption.get(0).setChecked(true); + } + else if(status.sShowImages == 2){ + mImageOption.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mImageOption.get(1).setChecked(true); + } + } + + private void initPostUI(){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = mContext.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + } + else { + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); + } + } + } + + private void clearImageOptions(){ + mImageOption.get(0).setChecked(false); + mImageOption.get(1).setChecked(false); + mImageOption.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint_default))); + mImageOption.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){ + mImageOption.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mImageOption.get(0).setChecked(true); + } + else if(pView.getId() == R.id.pAdvanceOption2){ + mImageOption.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mImageOption.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_SET_IMAGE)){ + setImageOptions((View) pData.get(0)); + } + return null; + } + + + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearController.java new file mode 100644 index 00000000..a514a927 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearController.java @@ -0,0 +1,167 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.clearManager; + +import android.content.res.ColorStateList; +import android.os.Bundle; +import android.view.View; +import android.widget.CheckBox; +import androidx.appcompat.app.AppCompatActivity; +import androidx.core.content.ContextCompat; + +import com.darkweb.genesissearchengine.appManager.activityContextManager; +import com.darkweb.genesissearchengine.appManager.databaseManager.databaseController; +import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.constants.sql; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.pluginManager.pluginController; +import com.example.myapplication.R; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class settingClearController extends AppCompatActivity { + + /* PRIVATE VARIABLES */ + private settingClearModel mSettingClearModel; + private settingClearViewController mSettingClearViewController; + private ArrayList mCheckBoxList = new ArrayList<>(); + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.setting_clear_view); + + pluginController.getInstance().onCreate(this); + viewsInitializations(); + initializeListeners(); + } + + public void viewsInitializations() { + mCheckBoxList.add(findViewById(R.id.pClearChecked_1)); + mCheckBoxList.add(findViewById(R.id.pClearChecked_2)); + mCheckBoxList.add(findViewById(R.id.pClearChecked_3)); + mCheckBoxList.add(findViewById(R.id.pClearChecked_4)); + mCheckBoxList.add(findViewById(R.id.pClearChecked_6)); + mCheckBoxList.add(findViewById(R.id.pClearChecked_7)); + mCheckBoxList.add(findViewById(R.id.pClearChecked_8)); + mCheckBoxList.add(findViewById(R.id.pClearChecked_9)); + + mSettingClearViewController = new settingClearViewController(this, new settingClearController.settingClearViewCallback(), mCheckBoxList); + mSettingClearModel = new settingClearModel(new settingClearController.settingClearModelCallback()); + } + + /* LISTENERS */ + public class settingClearViewCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + + public class settingClearModelCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + public void initializeListeners(){ + } + + public void onCheckBoxTriggered(View view){ + mSettingClearViewController.onTrigger(settingClearEnums.eClearViewController.M_CHECK_INVOKE, Arrays.asList(view.getTag(),!mCheckBoxList.get(Integer.parseInt(view.getTag().toString())).isChecked())); + } + + public void onClearData(View view){ + try{ + if(mCheckBoxList.get(0).isChecked()){ + mCheckBoxList.get(0).setChecked(false); + mCheckBoxList.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + activityContextManager.getInstance().getHomeController().onClearSession(); + dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_CLEAR_TAB, null); + activityContextManager.getInstance().getHomeController().initTab(false); + } + if(mCheckBoxList.get(1).isChecked()){ + mCheckBoxList.get(1).setChecked(false); + mCheckBoxList.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + databaseController.getInstance().execSQL(sql.SQL_CLEAR_HISTORY,null); + dataController.getInstance().invokeHistory(dataEnums.eHistoryCommands.M_CLEAR_HISTORY ,null); + } + if(mCheckBoxList.get(2).isChecked()){ + mCheckBoxList.get(2).setChecked(false); + mCheckBoxList.get(2).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + databaseController.getInstance().execSQL(sql.SQL_CLEAR_BOOKMARK,null); + dataController.getInstance().invokeBookmark(dataEnums.eBookmarkCommands.M_CLEAR_BOOKMARK ,null); + } + if(mCheckBoxList.get(3).isChecked()){ + mCheckBoxList.get(3).setChecked(false); + mCheckBoxList.get(3).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + activityContextManager.getInstance().getHomeController().onClearCache(); + } + if(mCheckBoxList.get(4).isChecked()){ + mCheckBoxList.get(4).setChecked(false); + mCheckBoxList.get(4).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + dataController.getInstance().invokeSuggestion(dataEnums.eSuggestionCommands.M_CLEAR_SUGGESTION ,null); + } + if(mCheckBoxList.get(5).isChecked()){ + mCheckBoxList.get(5).setChecked(false); + mCheckBoxList.get(5).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + activityContextManager.getInstance().getHomeController().onClearSiteData(); + } + if(mCheckBoxList.get(6).isChecked()){ + mCheckBoxList.get(6).setChecked(false); + mCheckBoxList.get(6).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + activityContextManager.getInstance().getHomeController().onClearSession(); + } + if(mCheckBoxList.get(7).isChecked()){ + mCheckBoxList.get(7).setChecked(false); + mCheckBoxList.get(7).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + activityContextManager.getInstance().getHomeController().onClearCookies(); + } + if(mCheckBoxList.get(8).isChecked()){ + mCheckBoxList.get(8).setChecked(false); + mCheckBoxList.get(8).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(this, R.color.c_checkbox_tint_default))); + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_CLEAR_PREFS, null); + status.initStatus(); + } + + activityContextManager.getInstance().getHomeController().initRuntimeSettings(); + pluginController.getInstance().MessageManagerHandler(this, null, enums.etype.data_cleared); + }catch (Exception ex){ + ex.printStackTrace(); + } + } + + /* LOCAL OVERRIDES */ + + @Override + public void onResume() + { + activityContextManager.getInstance().setCurrentActivity(this); + super.onResume(); + } + + @Override + public void onPause() + { + super.onPause(); + } + + @Override + public void onBackPressed() { + finish(); + } + + /*UI Redirection*/ + public void onClose(View view){ + finish(); + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearEnums.java new file mode 100644 index 00000000..56b97072 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearEnums.java @@ -0,0 +1,13 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.clearManager; + +class settingClearEnums +{ + /*History Manager*/ + public enum eClearModel { + } + + public enum eClearViewController { + M_CHECK_INVOKE + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearModel.java new file mode 100644 index 00000000..0be4bc89 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearModel.java @@ -0,0 +1,20 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.clearManager; + +import com.darkweb.genesissearchengine.helperManager.eventObserver; + +class settingClearModel +{ + /*Variable Declaration*/ + + private eventObserver.eventListener mEvent; + + /*Initializations*/ + + settingClearModel(eventObserver.eventListener mEvent){ + this.mEvent = mEvent; + } + + /*Helper Methods*/ + + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearViewController.java new file mode 100644 index 00000000..f754e735 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/clearManager/settingClearViewController.java @@ -0,0 +1,74 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.clearManager; + +import android.content.res.ColorStateList; +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.CheckBox; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.ContextCompat; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.example.myapplication.R; +import java.util.ArrayList; +import java.util.List; + +class settingClearViewController +{ + /*Private Variables*/ + + private eventObserver.eventListener mEvent; + private AppCompatActivity mContext; + private ArrayList mCheckBoxList; + + /*Initializations*/ + + settingClearViewController(settingClearController pContext, eventObserver.eventListener pEvent, ArrayList pCheckBoxList) + { + this.mEvent = pEvent; + this.mContext = pContext; + this.mCheckBoxList = pCheckBoxList; + + initViews(); + initPostUI(); + } + + private void initPostUI(){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = mContext.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + } + else { + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); + } + } + } + + private void initViews() + { + } + + private void onClearCheckbox(int pIndex, boolean pStatus){ + mCheckBoxList.get(pIndex).setChecked(pStatus); + if(pStatus){ + mCheckBoxList.get(pIndex).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_checkbox_tint))); + }else { + mCheckBoxList.get(pIndex).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_checkbox_tint_default))); + } + } + + public Object onTrigger(settingClearEnums.eClearViewController pCommands, List pData){ + if(pCommands.equals(settingClearEnums.eClearViewController.M_CHECK_INVOKE)){ + onClearCheckbox(Integer.parseInt(pData.get(0).toString()), (boolean)pData.get(1)); + } + 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 new file mode 100644 index 00000000..8ebf93da --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralController.java @@ -0,0 +1,170 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.generalManager; + +import android.content.res.Configuration; +import android.os.Bundle; +import android.os.Handler; +import android.view.View; +import android.widget.RadioButton; +import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import com.darkweb.genesissearchengine.appManager.activityContextManager; +import com.darkweb.genesissearchengine.appManager.languageManager.languageController; +import com.darkweb.genesissearchengine.constants.constants; +import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.helperManager.helperMethod; +import com.darkweb.genesissearchengine.pluginManager.pluginController; +import com.example.myapplication.R; +import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.Collections; +import java.util.List; + +public class settingGeneralController extends AppCompatActivity { + + /* PRIVATE VARIABLES */ + private settingGeneralModel mSettingGeneralModel; + private settingGeneralViewController mSettingGeneralViewController; + private SwitchMaterial mFullScreenMode; + private SwitchMaterial mOpenURLInNewTab; + private RadioButton mThemeLight; + private RadioButton mThemeDark; + private RadioButton mThemeDefault; + private TextView mHomePageText; + + @Override + protected void onCreate(Bundle savedInstanceState) { + pluginController.getInstance().onCreate(this); + onInitTheme(); + super.onCreate(savedInstanceState); + setContentView(R.layout.setting_general_view); + + viewsInitializations(); + initializeListeners(); + } + + public void viewsInitializations() { + + mFullScreenMode = findViewById(R.id.pFullScreenMode); + mThemeLight = findViewById(R.id.pThemeLight); + mThemeDark = findViewById(R.id.pThemeDark); + mThemeDefault = findViewById(R.id.pThemeDefault); + mHomePageText = findViewById(R.id.pHomePageText); + mOpenURLInNewTab = findViewById(R.id.pOpenURLInNewTab); + + mSettingGeneralViewController = new settingGeneralViewController(this, new settingGeneralViewCallback(), mFullScreenMode, mThemeLight, mThemeDark, mThemeDefault, mHomePageText, mOpenURLInNewTab); + mSettingGeneralModel = new settingGeneralModel(new settingGeneralModelCallback()); + } + + public void onInitTheme(){ + + if(status.sTheme == enums.Theme.THEME_DARK){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + }else if(status.sTheme == enums.Theme.THEME_LIGHT){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + }else { + if(!status.sDefaultNightMode){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + }else { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } + } + } + + /* LISTENERS */ + public class settingGeneralViewCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + if(enums.etype.M_RESET_THEME_INVOKED_BACK.equals(e_type)) + { + helperMethod.restartActivity(getIntent(), settingGeneralController.this); + new Handler().postDelayed(() -> { + overridePendingTransition(R.anim.fade_in, R.anim.fade_out); + activityContextManager.getInstance().getSettingController().applyTheme(); + }, 150); + } + return null; + } + } + + + public class settingGeneralModelCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + public void initializeListeners(){ + } + + /* LOCAL OVERRIDES */ + + @Override + public void onResume() + { + activityContextManager.getInstance().setCurrentActivity(this); + super.onResume(); + } + + @Override + public void onPause() + { + super.onPause(); + } + + @Override + public void onBackPressed() { + finish(); + } + + /*UI Redirection*/ + public void onClose(View view){ + finish(); + } + + public void onManageLanguage(View view) { + helperMethod.openActivity(languageController.class, constants.CONST_LIST_HISTORY, this,true); + } + + public void onFullScreenBrowsing(View view){ + mSettingGeneralModel.onTrigger(settingGeneralEnums.eGeneralModel.M_FULL_SCREEN_BROWSING, Collections.singletonList(!mFullScreenMode.isChecked())); + mFullScreenMode.toggle(); + } + + public void onSelectTheme(View view){ + if(view.getId() == R.id.pOption1){ + if(status.sTheme != enums.Theme.THEME_DARK) { + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_RESET_THEME, null); + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_SET_THEME, Collections.singletonList(enums.Theme.THEME_DARK)); + mSettingGeneralModel.onTrigger(settingGeneralEnums.eGeneralModel.M_SELECT_THEME, Collections.singletonList(enums.Theme.THEME_DARK)); + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_UPDATE_THEME_BLOCKER, Collections.singletonList(enums.Theme.THEME_DARK)); + } + }else if(view.getId() == R.id.pOption2) { + if(status.sTheme != enums.Theme.THEME_LIGHT) { + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_RESET_THEME, null); + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_SET_THEME, Collections.singletonList(enums.Theme.THEME_LIGHT)); + mSettingGeneralModel.onTrigger(settingGeneralEnums.eGeneralModel.M_SELECT_THEME, Collections.singletonList(enums.Theme.THEME_LIGHT)); + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_UPDATE_THEME_BLOCKER, Collections.singletonList(enums.Theme.THEME_LIGHT)); + } + }else { + if(status.sTheme != enums.Theme.THEME_DEFAULT) { + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_RESET_THEME, null); + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_SET_THEME, Collections.singletonList(enums.Theme.THEME_DEFAULT)); + mSettingGeneralModel.onTrigger(settingGeneralEnums.eGeneralModel.M_SELECT_THEME, Collections.singletonList(enums.Theme.THEME_DEFAULT)); + mSettingGeneralViewController.onTrigger(settingGeneralEnums.eGeneralViewController.M_UPDATE_THEME_BLOCKER, Collections.singletonList(enums.Theme.THEME_DEFAULT)); + } + } + } + + public void onURLInNewTab(View view) { + mSettingGeneralModel.onTrigger(settingGeneralEnums.eGeneralModel.M_URL_NEW_TAB, Collections.singletonList(!mOpenURLInNewTab.isChecked())); + mOpenURLInNewTab.toggle(); + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralEnums.java new file mode 100644 index 00000000..55cb43b5 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralEnums.java @@ -0,0 +1,14 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.generalManager; + +class settingGeneralEnums +{ + /*History Manager*/ + public enum eGeneralModel { + M_FULL_SCREEN_BROWSING, M_SELECT_THEME, M_URL_NEW_TAB + } + + public enum eGeneralViewController { + M_SET_THEME, M_RESET_THEME, M_UPDATE_THEME_BLOCKER + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralModel.java new file mode 100644 index 00000000..63cedc3d --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralModel.java @@ -0,0 +1,52 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.generalManager; + +import com.darkweb.genesissearchengine.constants.keys; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import java.util.Arrays; +import java.util.List; + +class settingGeneralModel +{ + /*Variable Declaration*/ + + private eventObserver.eventListener mEvent; + + /*Initializations*/ + + settingGeneralModel(eventObserver.eventListener mEvent){ + this.mEvent = mEvent; + } + + /*Helper Methods*/ + private void onFullScreenBrowsing(boolean pStatus){ + status.sFullScreenBrowsing = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_FULL_SCREEN_BROWSIING,pStatus)); + } + + private void onSelectThemeLight(int pStatus){ + status.sTheme = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_THEME,pStatus)); + } + + private void onURLInNewTab(boolean pStatus) { + status.sOpenURLInNewTab = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_OPEN_URL_IN_NEW_TAB,pStatus)); + } + + public Object onTrigger(settingGeneralEnums.eGeneralModel pCommands, List pData){ + if(pCommands.equals(settingGeneralEnums.eGeneralModel.M_FULL_SCREEN_BROWSING)){ + onFullScreenBrowsing((boolean)pData.get(0)); + } + else if(pCommands.equals(settingGeneralEnums.eGeneralModel.M_SELECT_THEME)){ + onSelectThemeLight((int)pData.get(0)); + } + else if(pCommands.equals(settingGeneralEnums.eGeneralModel.M_URL_NEW_TAB)){ + onURLInNewTab((boolean)pData.get(0)); + } + return null; + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralViewController.java new file mode 100644 index 00000000..6a8a0f72 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/generalManager/settingGeneralViewController.java @@ -0,0 +1,140 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.generalManager; + +import android.content.res.ColorStateList; +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.RadioButton; +import android.widget.TextView; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.ContextCompat; +import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.helperManager.helperMethod; +import com.example.myapplication.R; +import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.Collections; +import java.util.List; + +class settingGeneralViewController +{ + /*Private Variables*/ + + private eventObserver.eventListener mEvent; + private AppCompatActivity mContext; + private SwitchMaterial mFullScreenMode; + private SwitchMaterial mOpenURLInNewTab; + private RadioButton mThemeLight; + private RadioButton mThemeDark; + private RadioButton mThemeDefault; + private TextView mHomePageText; + + /*Initializations*/ + + + settingGeneralViewController(settingGeneralController pContext, eventObserver.eventListener pEvent, SwitchMaterial pFullScreenMode, RadioButton pThemeLight, RadioButton pThemeDark, RadioButton pThemeDefault, TextView pHomePageText, SwitchMaterial pOpenURLInNewTab) + { + this.mEvent = pEvent; + this.mContext = pContext; + this.mFullScreenMode = pFullScreenMode; + this.mThemeLight = pThemeLight; + this.mThemeDark = pThemeDark; + this.mThemeDefault = pThemeDefault; + this.mHomePageText = pHomePageText; + this.mOpenURLInNewTab = pOpenURLInNewTab; + + initViews(); + initPostUI(); + } + + + private void initPostUI(){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = mContext.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + } + else { + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); + } + } + } + + private void initViews() + { + resetThemeSelection(); + + if(status.sTheme == enums.Theme.THEME_LIGHT){ + mThemeLight.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mThemeLight.setChecked(true); + }else if(status.sTheme == enums.Theme.THEME_DARK){ + mThemeDark.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mThemeDark.setChecked(true); + }else{ + mThemeDefault.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mThemeDefault.setChecked(true); + } + + if(status.sFullScreenBrowsing){ + mFullScreenMode.setChecked(true); + }else { + mFullScreenMode.setChecked(false); + } + + if(status.sOpenURLInNewTab){ + mOpenURLInNewTab.setChecked(true); + }else { + mOpenURLInNewTab.setChecked(false); + } + + mHomePageText.setText(helperMethod.getDomainName(status.sSettingSearchStatus)); + } + + private void updateThemeChanger(int pStatus){ + mEvent.invokeObserver(Collections.singletonList(status.sTheme), enums.etype.M_RESET_THEME_INVOKED_BACK); + } + + private void resetThemeSelection(){ + mThemeDark.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint_default))); + mThemeLight.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint_default))); + mThemeDefault.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint_default))); + mThemeDark.setChecked(false); + mThemeLight.setChecked(false); + mThemeDefault.setChecked(false); + } + + private void setThemeLight(int pTheme){ + if(pTheme == enums.Theme.THEME_LIGHT){ + mThemeLight.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mThemeLight.setChecked(true); + }else if(pTheme == enums.Theme.THEME_DARK){ + mThemeDark.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mThemeDark.setChecked(true); + }else{ + mThemeDefault.setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mThemeDefault.setChecked(true); + } + } + + public Object onTrigger(settingGeneralEnums.eGeneralViewController pCommands, List pData){ + if(pCommands.equals(settingGeneralEnums.eGeneralViewController.M_SET_THEME)){ + setThemeLight((int)pData.get(0)); + } + else if(pCommands.equals(settingGeneralEnums.eGeneralViewController.M_RESET_THEME)){ + resetThemeSelection(); + } + else if(pCommands.equals(settingGeneralEnums.eGeneralViewController.M_UPDATE_THEME_BLOCKER)){ + updateThemeChanger((int)pData.get(0)); + } + return null; + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java index 66ab5bde..7b09b22f 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationController.java @@ -1,16 +1,16 @@ package com.darkweb.genesissearchengine.appManager.settingManager.notificationManager; -import android.content.Intent; import android.os.Bundle; import android.view.View; import androidx.appcompat.app.AppCompatActivity; import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.darkweb.genesissearchengine.pluginManager.pluginController; import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; - +import java.util.Collections; import java.util.List; public class settingNotificationController extends AppCompatActivity { @@ -90,14 +90,11 @@ public class settingNotificationController extends AppCompatActivity { } public void onOpenNotificationSettings(View view){ - Intent intent = new Intent(); - intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); - intent.putExtra("android.provider.extra.APP_PACKAGE", getPackageName()); - startActivity(intent); + helperMethod.openNotification(this); } public void onSaveLocalNotificationSettings(View view){ - mSettingNotificationModel.updateLocalNotification(!mNotificationManual.isChecked()); + mSettingNotificationModel.onTrigger(settingNotificationEnums.eNotificationModel.M_UPDATE_LOCAL_NOTIFICATION, Collections.singletonList(!mNotificationManual.isChecked())); mNotificationManual.toggle(); } } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationEnums.java new file mode 100644 index 00000000..77599c2e --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationEnums.java @@ -0,0 +1,14 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.notificationManager; + +class settingNotificationEnums +{ + /*History Manager*/ + public enum eNotificationModel { + M_UPDATE_LOCAL_NOTIFICATION + } + + public enum eNotificationViewController { + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationModel.java index 81347f0b..8f8a4d33 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationModel.java @@ -1,18 +1,13 @@ package com.darkweb.genesissearchengine.appManager.settingManager.notificationManager; -import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.constants.keys; import com.darkweb.genesissearchengine.constants.status; -import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.dataManager.dataController; import com.darkweb.genesissearchengine.dataManager.dataEnums; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.pluginManager.pluginController; - import java.util.Arrays; -import java.util.Collections; - -import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_FIRST_PARTY; +import java.util.List; class settingNotificationModel { @@ -29,7 +24,7 @@ class settingNotificationModel /*Helper Methods*/ - public void updateLocalNotification(boolean pStatus){ + private void updateLocalNotification(boolean pStatus){ int mStatus = pStatus ? 1 : 0; status.sBridgeNotificationManual = mStatus; @@ -46,5 +41,11 @@ class settingNotificationModel } } + public Object onTrigger(settingNotificationEnums.eNotificationModel pCommands, List pData){ + if(pCommands.equals(settingNotificationEnums.eNotificationModel.M_UPDATE_LOCAL_NOTIFICATION)){ + updateLocalNotification((boolean)pData.get(0)); + } + return null; + } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationViewController.java index 1209ea31..6dbd0860 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/notificationManager/settingNotificationViewController.java @@ -1,28 +1,19 @@ package com.darkweb.genesissearchengine.appManager.settingManager.notificationManager; -import android.annotation.SuppressLint; import android.os.Build; import android.view.View; import android.view.Window; import android.view.WindowManager; -import android.widget.SeekBar; -import android.widget.Spinner; -import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; -import com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage.settingController; -import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.status; -import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; -import static com.darkweb.genesissearchengine.constants.status.sSettingHistoryStatus; -import static com.darkweb.genesissearchengine.constants.status.sSettingJavaStatus; - class settingNotificationViewController { /*Private Variables*/ @@ -62,8 +53,10 @@ class settingNotificationViewController window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyController.java new file mode 100644 index 00000000..5b4732e8 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyController.java @@ -0,0 +1,138 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.privacyManager; + +import android.os.Bundle; +import android.view.View; +import android.widget.RadioButton; +import androidx.appcompat.app.AppCompatActivity; +import com.darkweb.genesissearchengine.appManager.activityContextManager; +import com.darkweb.genesissearchengine.constants.enums; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.darkweb.genesissearchengine.pluginManager.pluginController; +import com.example.myapplication.R; +import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +public class settingPrivacyController extends AppCompatActivity { + + /* PRIVATE VARIABLES */ + private settingPrivacyModel mSettingPrivacyModel; + private settingPrivacyViewController mSettingPrivacyViewController; + private SwitchMaterial mJavaScript; + private SwitchMaterial mDoNotTrack; + private SwitchMaterial mTrackingProtection; + private SwitchMaterial mClearDataOnExit; + private ArrayList mCookie = new ArrayList<>(); + private boolean mSettingChanged = false; + + @Override + protected void onCreate(Bundle savedInstanceState) { + pluginController.getInstance().onCreate(this); + super.onCreate(savedInstanceState); + setContentView(R.layout.setting_privacy_view); + + viewsInitializations(); + initializeListeners(); + } + + public void viewsInitializations() { + mJavaScript = findViewById(R.id.pJavascript); + mDoNotTrack = findViewById(R.id.pDoNotTrack); + mTrackingProtection = findViewById(R.id.pTrackingProtection); + mClearDataOnExit = findViewById(R.id.pClearDataOnExit); + mCookie.add(findViewById(R.id.pCookieRadioOption1)); + mCookie.add(findViewById(R.id.pCookieRadioOption2)); + mCookie.add(findViewById(R.id.pCookieRadioOption3)); + mCookie.add(findViewById(R.id.pCookieRadioOption4)); + + mSettingPrivacyViewController = new settingPrivacyViewController(this, new settingPrivacyController.settingAccessibilityViewCallback(), mJavaScript, mDoNotTrack, mTrackingProtection, mClearDataOnExit, mCookie); + mSettingPrivacyModel = new settingPrivacyModel(new settingPrivacyController.settingAccessibilityModelCallback()); + } + + /* LISTENERS */ + public class settingAccessibilityViewCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + + public class settingAccessibilityModelCallback implements eventObserver.eventListener{ + + @Override + public Object invokeObserver(List data, enums.etype e_type) + { + return null; + } + } + + public void initializeListeners(){ + } + + /* LOCAL OVERRIDES */ + + @Override + public void onResume() + { + if(mSettingChanged){ + activityContextManager.getInstance().setCurrentActivity(this); + } + super.onResume(); + } + + @Override + public void onPause() + { + super.onPause(); + } + + @Override + public void onBackPressed() { + if(mSettingChanged){ + activityContextManager.getInstance().setCurrentActivity(this); + } + finish(); + } + + /*UI Redirection*/ + public void onClose(View view){ + activityContextManager.getInstance().getHomeController().initRuntimeSettings(); + finish(); + } + + public void onJavaScript(View view){ + mSettingChanged = true; + mSettingPrivacyModel.onTrigger(settingPrivacyEnums.ePrivacyModel.M_SET_JAVASCRIPT, Collections.singletonList(!status.sSettingJavaStatus)); + mJavaScript.toggle(); + } + + public void onDoNotTrack(View view){ + mSettingChanged = true; + mSettingPrivacyModel.onTrigger(settingPrivacyEnums.ePrivacyModel.SET_DONOT_TRACK, Collections.singletonList(!status.sStatusDoNotTrack)); + mDoNotTrack.toggle(); + } + + public void onTrackingProtection(View view){ + mSettingChanged = true; + mSettingPrivacyModel.onTrigger(settingPrivacyEnums.ePrivacyModel.SET_TRACKING_PROTECTION, Collections.singletonList(!status.sSettingTrackingProtection)); + mTrackingProtection.toggle(); + } + + public void onCookies(View view){ + mSettingChanged = true; + mSettingPrivacyViewController.onTrigger(settingPrivacyEnums.ePrivacyViewController.SET_COOKIE_STATUS, Collections.singletonList(view)); + mSettingPrivacyModel.onTrigger(settingPrivacyEnums.ePrivacyModel.SET_COOKIES, Collections.singletonList(view)); + } + + public void onClearPrivateData(View view){ + mSettingChanged = true; + mSettingPrivacyModel.onTrigger(settingPrivacyEnums.ePrivacyModel.SET_CLEAR_PRIVATE_DATA, Collections.singletonList(!status.sClearOnExit)); + mClearDataOnExit.toggle(); + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyEnums.java new file mode 100644 index 00000000..f2983630 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyEnums.java @@ -0,0 +1,14 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.privacyManager; + +class settingPrivacyEnums +{ + /*History Manager*/ + public enum ePrivacyModel { + M_SET_JAVASCRIPT, SET_DONOT_TRACK, SET_TRACKING_PROTECTION, SET_COOKIES, SET_CLEAR_PRIVATE_DATA + } + + public enum ePrivacyViewController { + SET_COOKIE_STATUS + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyModel.java new file mode 100644 index 00000000..dc840433 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyModel.java @@ -0,0 +1,87 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.privacyManager; + +import android.view.View; +import com.darkweb.genesissearchengine.constants.keys; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.example.myapplication.R; +import java.util.Arrays; +import java.util.List; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_ALL; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_FIRST_PARTY; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_NONE; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_NON_TRACKERS; + +class settingPrivacyModel +{ + /*Variable Declaration*/ + + private eventObserver.eventListener mEvent; + + /*Initializations*/ + + settingPrivacyModel(eventObserver.eventListener mEvent){ + this.mEvent = mEvent; + } + + /*Helper Methods*/ + + private void onJavaScript(boolean pStatus){ + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_JAVA_SCRIPT,pStatus)); + status.sSettingJavaStatus = pStatus; + } + + private void onDoNotTrack(boolean pStatus){ + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_DONOT_TRACK,pStatus)); + status.sStatusDoNotTrack = pStatus; + } + + private void onTrackingProtection(boolean pStatus){ + status.sSettingTrackingProtection = pStatus; + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_TRACKING_PROTECTION,pStatus)); + } + + private void onCookies(View pView){ + if(pView.getId() == R.id.pCookieOption1){ + status.sSettingCookieStatus = ACCEPT_ALL; + } + if(pView.getId() == R.id.pCookieOption2){ + status.sSettingCookieStatus = ACCEPT_NON_TRACKERS; + } + if(pView.getId() == R.id.pCookieOption3){ + status.sSettingCookieStatus = ACCEPT_FIRST_PARTY; + } + if(pView.getId() == R.id.pCookieOption4){ + status.sSettingCookieStatus = ACCEPT_NONE; + } + + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_COOKIE_ADJUSTABLE,status.sSettingCookieStatus)); + } + + private void onClearPrivateData(boolean pStatus){ + dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_HISTORY_CLEAR,pStatus)); + status.sClearOnExit = pStatus; + } + + public Object onTrigger(settingPrivacyEnums.ePrivacyModel pCommands, List pData){ + if(pCommands.equals(settingPrivacyEnums.ePrivacyModel.M_SET_JAVASCRIPT)){ + onJavaScript((boolean)pData.get(0)); + } + else if(pCommands.equals(settingPrivacyEnums.ePrivacyModel.SET_DONOT_TRACK)){ + onDoNotTrack((boolean)pData.get(0)); + } + else if(pCommands.equals(settingPrivacyEnums.ePrivacyModel.SET_TRACKING_PROTECTION)){ + onTrackingProtection((boolean)pData.get(0)); + } + else if(pCommands.equals(settingPrivacyEnums.ePrivacyModel.SET_COOKIES)){ + onCookies((View) pData.get(0)); + } + else if(pCommands.equals(settingPrivacyEnums.ePrivacyModel.SET_CLEAR_PRIVATE_DATA)){ + onClearPrivateData((Boolean) pData.get(0)); + } + return null; + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyViewController.java new file mode 100644 index 00000000..03ba26ed --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/privacyManager/settingPrivacyViewController.java @@ -0,0 +1,148 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.privacyManager; + +import android.content.res.ColorStateList; +import android.os.Build; +import android.view.View; +import android.view.Window; +import android.view.WindowManager; +import android.widget.RadioButton; +import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; +import androidx.core.content.ContextCompat; +import com.darkweb.genesissearchengine.constants.status; +import com.darkweb.genesissearchengine.helperManager.eventObserver; +import com.example.myapplication.R; +import com.google.android.material.switchmaterial.SwitchMaterial; +import java.util.ArrayList; +import java.util.List; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_ALL; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_FIRST_PARTY; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_NONE; +import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_NON_TRACKERS; + +class settingPrivacyViewController +{ + /*Private Variables*/ + + private eventObserver.eventListener mEvent; + private AppCompatActivity mContext; + private SwitchMaterial mJavaScript; + private SwitchMaterial mDoNotTrack; + private SwitchMaterial mTrackingProtection; + private SwitchMaterial mClearDataOnExit; + private ArrayList mCookie; + + /*Initializations*/ + + settingPrivacyViewController(settingPrivacyController pContext, eventObserver.eventListener pEvent, SwitchMaterial pJavaScript, SwitchMaterial pDoNotTrack, SwitchMaterial pTrackingProtection, SwitchMaterial pClearDataOnExit, ArrayList pCookie) + { + this.mEvent = pEvent; + this.mContext = pContext; + this.mJavaScript = pJavaScript; + this.mTrackingProtection = pTrackingProtection; + this.mClearDataOnExit = pClearDataOnExit; + this.mCookie = pCookie; + this.mDoNotTrack = pDoNotTrack; + + initViews(); + initPostUI(); + } + + private void initPostUI(){ + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + Window window = mContext.getWindow(); + window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); + + if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { + window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + } + else { + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); + } + } + } + + private void initViews(){ + if(status.sSettingJavaStatus){ + this.mJavaScript.setChecked(true); + }else{ + this.mJavaScript.setChecked(false); + } + + if(status.sClearOnExit){ + this.mClearDataOnExit.setChecked(true); + }else{ + this.mClearDataOnExit.setChecked(false); + } + + if(status.sSettingTrackingProtection){ + this.mTrackingProtection.setChecked(true); + }else{ + this.mTrackingProtection.setChecked(false); + } + + if(status.sStatusDoNotTrack){ + this.mDoNotTrack.setChecked(true); + }else{ + this.mDoNotTrack.setChecked(false); + } + + clearCookieSetting(); + if(status.sSettingCookieStatus == ACCEPT_ALL){ + mCookie.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mCookie.get(0).setChecked(true); + } + if(status.sSettingCookieStatus == ACCEPT_NON_TRACKERS){ + mCookie.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mCookie.get(1).setChecked(true); + } + if(status.sSettingCookieStatus == ACCEPT_FIRST_PARTY){ + mCookie.get(2).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mCookie.get(2).setChecked(true); + } + if(status.sSettingCookieStatus == ACCEPT_NONE){ + mCookie.get(3).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mCookie.get(3).setChecked(true); + } + + } + + private void clearCookieSetting(){ + for(int mCounter=0; mCounter pData){ + if(pCommands.equals(settingPrivacyEnums.ePrivacyViewController.SET_COOKIE_STATUS)){ + setCookieStatus((View)pData.get(0)); + } + return null; + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java index 410751fc..1ed5b313 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchController.java @@ -1,13 +1,9 @@ package com.darkweb.genesissearchengine.appManager.settingManager.searchEngineManager; -import android.content.Intent; import android.os.Bundle; import android.view.View; import android.widget.RadioButton; -import android.widget.Spinner; - import androidx.appcompat.app.AppCompatActivity; - import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.enums; @@ -15,8 +11,8 @@ import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.pluginManager.pluginController; import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; - import java.util.ArrayList; +import java.util.Collections; import java.util.List; public class settingSearchController extends AppCompatActivity { @@ -52,32 +48,32 @@ public class settingSearchController extends AppCompatActivity { public void onSelectSearchEngine(View view) { if(view.getId() == R.id.pOption1){ - mSettingSearchModel.onSetSearchEngine(constants.CONST_BACKEND_GENESIS_URL); + mSettingSearchModel.onTrigger(settingSearchEnums.eSearchModel.M_SET_SEARCH_ENGINE, Collections.singletonList(constants.CONST_BACKEND_GENESIS_URL)); } else if(view.getId() == R.id.pOption2){ - mSettingSearchModel.onSetSearchEngine(constants.CONST_BACKEND_DUCK_DUCK_GO_URL); + mSettingSearchModel.onTrigger(settingSearchEnums.eSearchModel.M_SET_SEARCH_ENGINE, Collections.singletonList(constants.CONST_BACKEND_DUCK_DUCK_GO_URL)); } else if(view.getId() == R.id.pOption3){ - mSettingSearchModel.onSetSearchEngine(constants.CONST_BACKEND_GOOGLE_URL); + mSettingSearchModel.onTrigger(settingSearchEnums.eSearchModel.M_SET_SEARCH_ENGINE, Collections.singletonList(constants.CONST_BACKEND_GOOGLE_URL)); } else if(view.getId() == R.id.pOption4){ - mSettingSearchModel.onSetSearchEngine(constants.CONST_BACKEND_BING_URL); + mSettingSearchModel.onTrigger(settingSearchEnums.eSearchModel.M_SET_SEARCH_ENGINE, Collections.singletonList(constants.CONST_BACKEND_BING_URL)); } else if(view.getId() == R.id.pOption5){ - mSettingSearchModel.onSetSearchEngine(constants.CONST_BACKEND_WIKI_URL); + mSettingSearchModel.onTrigger(settingSearchEnums.eSearchModel.M_SET_SEARCH_ENGINE, Collections.singletonList(constants.CONST_BACKEND_WIKI_URL)); } - mSettingSearchViewController.resetSearchEngine(); - mSettingSearchViewController.initSearchEngine(); + mSettingSearchViewController.onTrigger(settingSearchEnums.eSearchViewController.M_RESET_SEARCH_ENGINE, Collections.singletonList(null)); + mSettingSearchViewController.onTrigger(settingSearchEnums.eSearchViewController.M_INIT_SEARCH_ENGINE, Collections.singletonList(null)); } public void setSearchHistory(View view){ - mSettingSearchModel.setSearchHistory(!mSearchHistory.isChecked()); + mSettingSearchModel.onTrigger(settingSearchEnums.eSearchModel.M_SET_SEARCH_HISTORY, Collections.singletonList(!mSearchHistory.isChecked())); mSearchHistory.toggle(); } public void setSearchStatus(View view){ - mSettingSearchModel.setSearchStatus(!mSearchSuggestions.isChecked()); + mSettingSearchModel.onTrigger(settingSearchEnums.eSearchModel.M_SET_SEARCH_HISTORY, Collections.singletonList(!mSearchSuggestions.isChecked())); mSearchSuggestions.toggle(); } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchEnums.java new file mode 100644 index 00000000..d8b8bf57 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchEnums.java @@ -0,0 +1,14 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.searchEngineManager; + +class settingSearchEnums +{ + /*History Manager*/ + public enum eSearchModel { + M_SET_SEARCH_ENGINE, M_SET_SEARCH_HISTORY, M_SET_SEARCH_STATUS + } + + public enum eSearchViewController { + M_INIT_SEARCH_ENGINE, M_RESET_SEARCH_ENGINE + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchModel.java index 27c73270..4c2b5584 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchModel.java @@ -1,12 +1,15 @@ package com.darkweb.genesissearchengine.appManager.settingManager.searchEngineManager; +import android.view.View; + +import com.darkweb.genesissearchengine.appManager.historyManager.historyEnums; import com.darkweb.genesissearchengine.constants.keys; import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.dataManager.dataController; import com.darkweb.genesissearchengine.dataManager.dataEnums; import com.darkweb.genesissearchengine.helperManager.eventObserver; - import java.util.Arrays; +import java.util.List; class settingSearchModel @@ -24,18 +27,33 @@ class settingSearchModel /*Helper Methods*/ - public void onSetSearchEngine(String pUrl){ + private void onSetSearchEngine(String pUrl){ status.sSettingSearchStatus = pUrl; dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.SETTING_SEARCH_ENGINE, pUrl)); } - public void setSearchHistory(boolean pStatus){ + private void setSearchHistory(boolean pStatus){ dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SEARCH_HISTORY, pStatus)); status.sSettingSearchHistory = pStatus; } - public void setSearchStatus(boolean pStatus){ + private void setSearchStatus(boolean pStatus){ dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_SEARCH_SUGGESTION, pStatus)); status.getsSettingSearchSuggestion = pStatus; } + public Object onTrigger(settingSearchEnums.eSearchModel pCommands, List pData){ + if(pCommands.equals(settingSearchEnums.eSearchModel.M_SET_SEARCH_ENGINE)){ + onSetSearchEngine((String) pData.get(0)); + } + else if(pCommands.equals(settingSearchEnums.eSearchModel.M_SET_SEARCH_HISTORY)){ + + setSearchHistory((boolean) pData.get(0)); + } + else if(pCommands.equals(settingSearchEnums.eSearchModel.M_SET_SEARCH_STATUS)){ + + setSearchStatus((boolean) pData.get(0)); + } + return null; + } + } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchViewController.java index 1f80f668..57f341e9 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/searchEngineManager/settingSearchViewController.java @@ -1,22 +1,21 @@ package com.darkweb.genesissearchengine.appManager.settingManager.searchEngineManager; +import android.content.res.ColorStateList; import android.os.Build; import android.view.View; import android.view.Window; import android.view.WindowManager; import android.widget.RadioButton; -import android.widget.Spinner; - import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; - import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.status; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.example.myapplication.R; import com.google.android.material.switchmaterial.SwitchMaterial; - import java.util.ArrayList; +import java.util.List; class settingSearchViewController { @@ -48,41 +47,6 @@ class settingSearchViewController initSearchViews(); } - public void initSearchViews(){ - if(status.sSettingSearchHistory){ - mSearchHistory.setChecked(true); - } - if(status.getsSettingSearchSuggestion){ - mSearchSuggestions.setChecked(true); - } - } - - public void initSearchEngine(){ - switch (status.sSettingSearchStatus) { - case constants.CONST_BACKEND_GOOGLE_URL: - mSearchEngines.get(2).setChecked(true); - break; - case constants.CONST_BACKEND_GENESIS_URL: - mSearchEngines.get(0).setChecked(true); - break; - case constants.CONST_BACKEND_DUCK_DUCK_GO_URL: - mSearchEngines.get(1).setChecked(true); - break; - case constants.CONST_BACKEND_BING_URL: - mSearchEngines.get(3).setChecked(true); - break; - case constants.CONST_BACKEND_WIKI_URL: - mSearchEngines.get(4).setChecked(true); - break; - } - } - - public void resetSearchEngine(){ - for(int mCounter=0;mCounter= Build.VERSION_CODES.LOLLIPOP) { Window window = mContext.getWindow(); @@ -92,10 +56,64 @@ class settingSearchViewController window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } + private void initSearchViews(){ + if(status.sSettingSearchHistory){ + mSearchHistory.setChecked(true); + } + if(status.getsSettingSearchSuggestion){ + mSearchSuggestions.setChecked(true); + } + } + + private void initSearchEngine(){ + resetSearchEngine(); + switch (status.sSettingSearchStatus) { + case constants.CONST_BACKEND_GOOGLE_URL: + mSearchEngines.get(2).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mSearchEngines.get(2).setChecked(true); + break; + case constants.CONST_BACKEND_GENESIS_URL: + mSearchEngines.get(0).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mSearchEngines.get(0).setChecked(true); + break; + case constants.CONST_BACKEND_DUCK_DUCK_GO_URL: + mSearchEngines.get(1).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mSearchEngines.get(1).setChecked(true); + break; + case constants.CONST_BACKEND_BING_URL: + mSearchEngines.get(3).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mSearchEngines.get(3).setChecked(true); + break; + case constants.CONST_BACKEND_WIKI_URL: + mSearchEngines.get(4).setButtonTintList(ColorStateList.valueOf(ContextCompat.getColor(mContext, R.color.c_radio_tint))); + mSearchEngines.get(4).setChecked(true); + break; + } + } + + private void resetSearchEngine(){ + for(int mCounter=0;mCounter pData){ + if(pCommands.equals(settingSearchEnums.eSearchViewController.M_INIT_SEARCH_ENGINE)){ + initSearchEngine(); + } + else if(pCommands.equals(settingSearchEnums.eSearchViewController.M_RESET_SEARCH_ENGINE)){ + resetSearchEngine(); + } + return null; + } + } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingController.java index ec8850b5..3f832984 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingController.java @@ -1,18 +1,20 @@ package com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage; import android.content.Intent; +import android.content.res.Configuration; import android.os.Build; import android.os.Bundle; import android.view.View; -import android.widget.AdapterView; -import android.widget.SeekBar; -import android.widget.Spinner; -import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; + import com.darkweb.genesissearchengine.appManager.activityContextManager; -import com.darkweb.genesissearchengine.appManager.homeManager.homeController; import com.darkweb.genesissearchengine.appManager.settingManager.accessibilityManager.settingAccessibilityController; +import com.darkweb.genesissearchengine.appManager.settingManager.advanceManager.settingAdvanceController; +import com.darkweb.genesissearchengine.appManager.settingManager.clearManager.settingClearController; +import com.darkweb.genesissearchengine.appManager.settingManager.generalManager.settingGeneralController; import com.darkweb.genesissearchengine.appManager.settingManager.notificationManager.settingNotificationController; +import com.darkweb.genesissearchengine.appManager.settingManager.privacyManager.settingPrivacyController; import com.darkweb.genesissearchengine.appManager.settingManager.searchEngineManager.settingSearchController; import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.enums; @@ -28,80 +30,59 @@ import com.example.myapplication.R; import java.util.Arrays; import java.util.List; import static com.darkweb.genesissearchengine.constants.enums.etype.on_not_support; -import static com.darkweb.genesissearchengine.constants.status.sSettingCookieStatus; -import static com.darkweb.genesissearchengine.constants.status.sSettingHistoryStatus; -import static com.darkweb.genesissearchengine.constants.status.sSettingJavaStatus; public class settingController extends AppCompatActivity { /*Private Observer Classes*/ - private homeController mHomeController; private settingViewController mSettingViewController; private settingModel mSettingModel; - /*Private Variables*/ - - private Spinner mSearch; - private Spinner mJavascript; - private Spinner mHistory; - private Spinner mCookies; - private Spinner mFontAdjustable; - private Spinner mNotification; - private SeekBar mFontSize; - private TextView mFontSizePercentage; - /*Initializations*/ public settingController(){ - mHomeController = activityContextManager.getInstance().getHomeController(); mSettingModel = new settingModel(new settingModelCallback()); - mSettingModel.initNotification(pluginController.getInstance().getNotificationStatus()); } @Override protected void onCreate(Bundle savedInstanceState) { - pluginController.getInstance().onCreate(this); + onInitTheme(); super.onCreate(savedInstanceState); setContentView(R.layout.setting); + pluginController.getInstance().onCreate(this); viewsInitializations(); - modelInitialization(); listenersInitializations(); - initializeFontSizeListener(); } - public void modelInitialization(){ - mSettingModel.setJavaStatus(sSettingJavaStatus, true); - mSettingModel.setHistoryStatus(sSettingHistoryStatus, true); - mSettingModel.setSearchStatus(status.sSettingSearchStatus, true); - mSettingModel.setAdjustableStatus(status.sSettingFontAdjustable, true); - mSettingModel.setFontSize(status.sSettingFontSize, true); + public void onInitTheme(){ + + if(status.sTheme == enums.Theme.THEME_DARK){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + }else if(status.sTheme == enums.Theme.THEME_LIGHT){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + }else { + if((getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_NO){ + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + }else { + AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + } + } + } + + public void applyTheme(){ + recreate(); } public void viewsInitializations() { - mSearch = findViewById(R.id.search_manager); - mJavascript = findViewById(R.id.javascript_manager); - mHistory = findViewById(R.id.history_manager); - mFontSize = findViewById(R.id.font_size); - mFontAdjustable = findViewById(R.id.font_adjustable); - mFontSizePercentage = findViewById(R.id.font_size_percentage); - mCookies = findViewById(R.id.cookies_manager); - mNotification = findViewById(R.id.notification_manager); - - mSettingViewController = new settingViewController(mSearch, mJavascript, mHistory, mFontSize, mFontAdjustable, mFontSizePercentage,this, new settingModelCallback(), mCookies,mNotification,pluginController.getInstance().getNotificationStatus()); + activityContextManager.getInstance().setSettingController(this); + mSettingViewController = new settingViewController(this, new settingModelCallback()); } public void listenersInitializations() { - initializeItemSelectedListener(mSearch); - initializeItemSelectedListener(mJavascript); - initializeItemSelectedListener(mNotification); - initializeItemSelectedListener(mHistory); - initializeItemSelectedListener(mFontAdjustable); - initializeItemSelectedListener(mCookies); pluginController.getInstance().logEvent(strings.EVENT_SETTINGS_OPENED); } @@ -117,11 +98,13 @@ public class settingController extends AppCompatActivity } } + @Override public void onResume() { activityContextManager.getInstance().setCurrentActivity(this); status.sSettingIsAppPaused = false; + onInitTheme(); super.onResume(); } @@ -137,73 +120,7 @@ public class settingController extends AppCompatActivity finish(); } - public void initializeItemSelectedListener(Spinner view){ - view.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { - @Override - public void onItemSelected(AdapterView parentView, View selectedItemView, int position, long id) { - if(parentView.getId()== R.id.search_manager) - { - mSettingModel.setSearchStatus(getEngineURL(position), false); - } - else if(parentView.getId()== R.id.javascript_manager) - { - mSettingModel.setJavaStatus(position==0, false); - } - else if(parentView.getId()== R.id.history_manager) - { - mSettingModel.setHistoryStatus(position==0, false); - } - else if(parentView.getId()== R.id.font_adjustable) - { - if(position==0){ - mSettingModel.setFontSize(100, false); - } - mSettingViewController.setFontSizeAdjustable(position==0); - mSettingModel.setAdjustableStatus(position==0, false); - } - else if(parentView.getId()== R.id.cookies_manager) - { - mSettingModel.setCookieStatus(position, false); - } - else if(parentView.getId()== R.id.notification_manager) - { - mSettingModel.setmNotificationStatus(position, false); - } - } - @Override - public void onNothingSelected(AdapterView parentView) { - } - }); - } - - public void initializeFontSizeListener(){ - - mFontSize.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { - @Override - public void onProgressChanged(SeekBar seekBar, int i, boolean b) { - float cur_progress = seekBar.getProgress(); - mSettingModel.setFontSize((cur_progress), false); - mSettingViewController.updatePercentage(mFontSize.getProgress()); - mSettingViewController.setFontSize(b); - mSettingModel.setAdjustableStatus(b, false); - if(cur_progress<1){ - mFontSize.setProgress(1); - } - } - - @Override - public void onStartTrackingTouch(SeekBar seekBar) { - - } - - @Override - public void onStopTrackingTouch(SeekBar seekBar) { - } - }); - } - public void onNavigationBackPressed(View view){ - mSettingModel.onSaveSettings(); finish(); } @@ -227,6 +144,22 @@ public class settingController extends AppCompatActivity helperMethod.openActivity(settingAccessibilityController.class, constants.CONST_LIST_HISTORY, this,true); } + public void onManageGeneral(View view) { + helperMethod.openActivity(settingGeneralController.class, constants.CONST_LIST_HISTORY, this,true); + } + + public void onManageSearchClearData(View view) { + helperMethod.openActivity(settingClearController.class, constants.CONST_LIST_HISTORY, this,true); + } + + public void onManageSearchPrivacy(View view) { + helperMethod.openActivity(settingPrivacyController.class, constants.CONST_LIST_HISTORY, this,true); + } + + public void onManageSearchAdvanced(View view) { + helperMethod.openActivity(settingAdvanceController.class, constants.CONST_LIST_HISTORY, this,true); + } + /*Event Observer*/ public class settingViewCallback implements eventObserver.eventListener{ @@ -243,67 +176,8 @@ public class settingController extends AppCompatActivity @Override public Object invokeObserver(List data, enums.etype e_type) { - if(e_type == enums.etype.update_searcn){ - status.sSettingSearchStatus = (String)data.get(0); - mHomeController.onHomeButton(null); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_STRING, Arrays.asList(keys.SETTING_SEARCH_ENGINE, mSettingModel.getSearchStatus())); - } - else if(e_type == enums.etype.update_javascript){ - status.sSettingJavaStatus = (boolean)data.get(0); - mHomeController.onUpdateJavascript(); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_JAVA_SCRIPT, status.sSettingJavaStatus)); - } - else if(e_type == enums.etype.update_history){ - sSettingHistoryStatus = (boolean)data.get(0); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_BOOL, Arrays.asList(keys.SETTING_HISTORY_CLEAR, sSettingHistoryStatus)); - } - else if(e_type == enums.etype.update_notification){ - pluginController.getInstance().setNotificationStatus((int)data.get(0)); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_NOTIFICATION_STATUS, pluginController.getInstance().getNotificationStatus())); - - int notificationStatus = pluginController.getInstance().getNotificationStatus(); - if(notificationStatus==0){ - pluginController.getInstance().disableTorNotification(); - } else if(notificationStatus==1){ - pluginController.getInstance().enableTorNotification(); - }else { - pluginController.getInstance().enableTorNotificationNoBandwidth(); - } - - } - else if(e_type == enums.etype.update_font_adjustable || e_type == enums.etype.update_font_size){ - mHomeController.onLoadFont(); - } - else if(e_type == enums.etype.update_cookies){ - sSettingCookieStatus = (int)data.get(0); - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_COOKIE_ADJUSTABLE, sSettingCookieStatus)); - mHomeController.onUpdateCookies(); - pluginController.getInstance().updateCookiesStatus(); - } - else if(e_type == enums.etype.close_view){ - finish(); - - } return null; } } - /*Helper Methods*/ - - public String getEngineURL(int index){ - - if (index == 0) - { - return constants.CONST_BACKEND_GENESIS_URL; - } - else if (index == 1) - { - return constants.CONST_BACKEND_GOOGLE_URL; - } - else - { - return constants.CONST_BACKEND_DUCK_DUCK_GO_URL; - } - } - } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingHomeEnums.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingHomeEnums.java new file mode 100644 index 00000000..ac23b0c6 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingHomeEnums.java @@ -0,0 +1,12 @@ +package com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage; + +public class settingHomeEnums +{ + /*History Manager*/ + public enum eHomeModel { + } + + public enum eHomeViewController { + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingModel.java index 6e53f804..747f7993 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingModel.java @@ -1,135 +1,19 @@ package com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage; -import com.darkweb.genesissearchengine.constants.enums; -import com.darkweb.genesissearchengine.constants.keys; -import com.darkweb.genesissearchengine.constants.status; -import com.darkweb.genesissearchengine.constants.strings; -import com.darkweb.genesissearchengine.dataManager.dataController; -import com.darkweb.genesissearchengine.dataManager.dataEnums; import com.darkweb.genesissearchengine.helperManager.eventObserver; -import java.util.Arrays; -import java.util.Collections; -import static org.mozilla.geckoview.ContentBlocking.CookieBehavior.ACCEPT_FIRST_PARTY; - class settingModel { /*Variable Declaration*/ private eventObserver.eventListener mEvent; - private String mSearchStatus = strings.GENERIC_EMPTY_STR; - private int mCookieStatus = ACCEPT_FIRST_PARTY; - private int mNotificationStatus = 0; - private boolean mJavaStatus = false; - private boolean mHistoryStatus = true; - private boolean mFontAdjustable = true; - private float mFontSize = 1; - private int notificationStatusGlobal; - /*Initializations*/ settingModel(eventObserver.eventListener mEvent){ - init_status(); this.mEvent = mEvent; } /*Helper Methods*/ - private void init_status() - { - mSearchStatus = status.sSettingSearchStatus; - mHistoryStatus = status.sSettingHistoryStatus; - mJavaStatus = status.sSettingJavaStatus; - mCookieStatus = status.sSettingCookieStatus; - } - - void initNotification(int notificationStatus){ - mNotificationStatus = notificationStatus; - notificationStatusGlobal = notificationStatus; - } - - /*Changed Status*/ - - String getSearchStatus(){ - return mSearchStatus; - } - - void setCookieStatus(int cookie_status, boolean isActivityLoading){ - this.mCookieStatus = cookie_status; - if(!isActivityLoading){ - onSaveSettings(); - } - } - - void setSearchStatus(String search_status, boolean isActivityLoading){ - this.mSearchStatus = search_status; - if(!isActivityLoading){ - onSaveSettings(); - } - } - - void setFontSize(float font_size, boolean isActivityLoading){ - this.mFontSize = font_size; - if(!isActivityLoading){ - onSaveSettings(); - } - } - - void setAdjustableStatus(boolean font_status, boolean isActivityLoading){ - this.mFontAdjustable = font_status; - if(!isActivityLoading){ - onSaveSettings(); - } - } - - - void setJavaStatus(boolean java_status, boolean isActivityLoading){ - this.mJavaStatus = java_status; - if(!isActivityLoading){ - onSaveSettings(); - } - } - - void setmNotificationStatus(int notification_status, boolean isActivityLoading){ - this.mNotificationStatus = notification_status; - if(!isActivityLoading){ - onSaveSettings(); - } - } - - void setHistoryStatus(boolean history_status, boolean isActivityLoading){ - this.mHistoryStatus = history_status; - if(!isActivityLoading){ - onSaveSettings(); - } - } - - void onSaveSettings() - { - if(!status.sSettingSearchStatus.equals(mSearchStatus)) - { - mEvent.invokeObserver(Collections.singletonList(mSearchStatus), enums.etype.update_searcn); - } - if(status.sSettingJavaStatus != mJavaStatus) - { - mEvent.invokeObserver(Collections.singletonList(mJavaStatus), enums.etype.update_javascript); - } - if(notificationStatusGlobal != mNotificationStatus) - { - mEvent.invokeObserver(Collections.singletonList(mNotificationStatus), enums.etype.update_notification); - } - if(status.sSettingHistoryStatus != mHistoryStatus) - { - status.sSettingHistoryStatus = mHistoryStatus; - mEvent.invokeObserver(Collections.singletonList(mHistoryStatus), enums.etype.update_history); - } - if(status.sSettingCookieStatus != mCookieStatus) - { - status.sSettingCookieStatus = mCookieStatus; - dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_SET_INT, Arrays.asList(keys.SETTING_COOKIE_ADJUSTABLE,status.sSettingCookieStatus)); - mEvent.invokeObserver(Collections.singletonList(mCookieStatus), enums.etype.update_cookies); - } - } - } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingViewController.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingViewController.java index 989e13ca..387681e3 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingViewController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/settingManager/settingHomePage/settingViewController.java @@ -1,22 +1,17 @@ package com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage; -import android.annotation.SuppressLint; +import android.graphics.Color; import android.os.Build; import android.view.View; import android.view.Window; import android.view.WindowManager; -import android.widget.SeekBar; -import android.widget.Spinner; -import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; -import com.darkweb.genesissearchengine.constants.constants; + import com.darkweb.genesissearchengine.constants.status; -import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.example.myapplication.R; -import static com.darkweb.genesissearchengine.constants.status.sSettingHistoryStatus; -import static com.darkweb.genesissearchengine.constants.status.sSettingJavaStatus; class settingViewController { @@ -25,39 +20,13 @@ class settingViewController private eventObserver.eventListener mEvent; private AppCompatActivity mContext; - private Spinner mSearch; - private Spinner mJavaScript; - private Spinner mNotification; - private Spinner mHistory; - private Spinner mCookies; - private Spinner mFontAdjustable; - private SeekBar mFontSize; - private TextView mFontSizePercentage; - /*Initializations*/ - settingViewController(Spinner mSearch, Spinner mJavaScript, Spinner mHistory, SeekBar mFontSize, Spinner mFontAdjustable, TextView mFontSizePercentage, settingController mContext, eventObserver.eventListener mEvent, Spinner mCookies, Spinner mNotification, int notificationStatus) + settingViewController(settingController mContext, eventObserver.eventListener mEvent) { - this.mFontSizePercentage = mFontSizePercentage; - this.mSearch = mSearch; - this.mJavaScript = mJavaScript; - this.mNotification = mNotification; - this.mHistory = mHistory; - this.mFontAdjustable = mFontAdjustable; - this.mFontSize = mFontSize; - this.mCookies = mCookies; - this.mEvent = mEvent; this.mContext = mContext; - initNotification(notificationStatus); - initViews(); - initJavascript(); - initHistory(); - initSearchEngine(); - initFontAdjustable(); - initCookies(); - initFontSize(); initPostUI(); } @@ -70,113 +39,12 @@ class settingViewController window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } - private void initViews() - { - mSearch.setDropDownVerticalOffset(15); - mSearch.setDropDownHorizontalOffset(-15); - mJavaScript.setDropDownVerticalOffset(15); - mJavaScript.setDropDownHorizontalOffset(-15); - mNotification.setDropDownVerticalOffset(15); - mNotification.setDropDownHorizontalOffset(-15); - mHistory.setDropDownVerticalOffset(15); - mHistory.setDropDownHorizontalOffset(-15); - mCookies.setDropDownVerticalOffset(15); - mCookies.setDropDownHorizontalOffset(-15); - mFontAdjustable.setDropDownHorizontalOffset(-15); - mFontAdjustable.setDropDownVerticalOffset(15); - } - - private void initJavascript() - { - if (sSettingJavaStatus) - { - mJavaScript.setSelection(0); - } - else - { - mJavaScript.setSelection(1); - } - } - - private void initNotification(int status) - { - mNotification.setSelection(status); - } - - private void initHistory() - { - if (sSettingHistoryStatus) - { - mHistory.setSelection(0); - } - else - { - mHistory.setSelection(1); - } - } - - private void initCookies() - { - mCookies.setSelection(status.sSettingCookieStatus); - } - - private void initFontAdjustable() - { - if (status.sSettingFontAdjustable) - { - mFontAdjustable.setSelection(0); - } - else - { - mFontAdjustable.setSelection(1); - } - } - - private void initFontSize() - { - mFontSize.setProgress((int)status.sSettingFontSize); - updatePercentage(mFontSize.getProgress()); - } - - void setFontSize(boolean status){ - if(status){ - mFontAdjustable.setSelection(1); - } - } - - void setFontSizeAdjustable(boolean status){ - if(status){ - mFontSize.setProgress(100); - } - } - - private void initSearchEngine() - { - mSearch.setSelection(getEngineIndex()); - } - - /*External Helper Methods*/ - - private int getEngineIndex(){ - if(status.sSettingSearchStatus.equals(constants.CONST_BACKEND_GENESIS_URL)){ - return 0; - } - else if(status.sSettingSearchStatus.equals(constants.CONST_BACKEND_GOOGLE_URL)){ - return 1; - } - else - return 2; - } - - @SuppressLint("SetTextI18n") - void updatePercentage(int font_size){ - - mFontSizePercentage.setText(strings.SETTING_CUSTOM_FONTS + strings.GENERIC_EMPTY_SPACE + font_size +strings.SETTING_PERCENT_SIGN); - } } 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 c3217f9c..431e5cbd 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 @@ -1,5 +1,7 @@ package com.darkweb.genesissearchengine.appManager.tabManager; +import android.util.DisplayMetrics; +import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; @@ -9,11 +11,16 @@ import android.widget.LinearLayout; import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; + +import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.constants.strings; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.example.myapplication.R; + +import org.mozilla.geckoview.GeckoView; + import java.util.ArrayList; import java.util.Collections; @@ -22,15 +29,17 @@ public class tabAdapter extends RecyclerView.Adapter /*Private Variables*/ private ArrayList mModelList; - private ArrayList mTempModelList; private eventObserver.eventListener mEvent; - private String filter = strings.GENERIC_EMPTY_STR; - private boolean isClosing = false; - tabAdapter(ArrayList model_list, eventObserver.eventListener event) { + private GeckoView mCurrentGeckoView = null; + private int mCurrentSession; + + tabAdapter(ArrayList model_list, eventObserver.eventListener event, GeckoView pGeckoView, int pCurrentSession) { this.mModelList = model_list; this.mEvent = event; - mTempModelList = new ArrayList<>(); + + pGeckoView.releaseSession(); + this.mCurrentSession = pCurrentSession; } /*Initializations*/ @@ -38,128 +47,76 @@ 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.recyclerview_row, parent, false); + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.tabview_row, parent, false); return new listViewHolder(view); } @Override public void onBindViewHolder(@NonNull tabAdapter.listViewHolder holder, int position) { - holder.bindListView(mTempModelList.get(position)); - clearMessageItem(holder.messageButton,position,holder.data_model); - clearMessageItemContainer(holder.itemContainer,position,holder.data_model); + holder.bindListView(mModelList.get(position)); } @Override public int getItemCount() { - return mTempModelList.size(); + return mModelList.size(); } /*Listeners*/ - private void clearMessageItem(ImageButton clearButton, int index,tabRowModel model) - { - clearButton.setOnClickListener(v -> - { - if(!isClosing){ - isClosing = true; - int size = mModelList.size(); - - mEvent.invokeObserver(Collections.singletonList(mTempModelList.get(index).getmId()),enums.etype.url_clear); - mEvent.invokeObserver(Collections.singletonList(index),enums.etype.is_empty); - invokeFilter(false); - model.getSession().stop(); - model.getSession().close(); - if(size>1){ - new Thread(){ - public void run(){ - try - { - sleep(500); - isClosing = false; - } - catch (InterruptedException e) - { - e.printStackTrace(); - } - } - }.start(); - } - } - }); + public void onClose(){ + if(mCurrentGeckoView!=null){ + mCurrentGeckoView.releaseSession(); + } } + public void setOnClickListener(ImageView pLoadSession, tabRowModel model, GeckoView pGeckoView, ImageButton mRemoveRow){ + pLoadSession.setOnClickListener(v -> { + pGeckoView.releaseSession(); + activityContextManager.getInstance().getHomeController().onLoadTab(model.getSession(), false); + activityContextManager.getInstance().getTabController().onBackPressed(null); + activityContextManager.getInstance().getTabController().initTabCount(); + }); - - - private void clearMessageItemContainer(LinearLayout clearButton, int index,tabRowModel model) - { - clearButton.setOnClickListener(v -> - { - if(mTempModelList.size()>index){ - invokeFilter(false); - mEvent.invokeObserver(Collections.singletonList(model),enums.etype.url_triggered); - } + mRemoveRow.setOnClickListener(v -> { + model.getSession().closeSession(); + activityContextManager.getInstance().getTabController().onRemoveView(model.getSession().getSessionID()); + notifyDataSetChanged(); + activityContextManager.getInstance().getTabController().initTabCount(); }); } /*View Holder Extensions*/ - class listViewHolder extends RecyclerView.ViewHolder { - TextView heaaderText; - TextView descriptionText; - ImageButton messageButton; - ImageView empty_message; - LinearLayout itemContainer; - tabRowModel data_model; + GeckoView mGeckoView; + TextView mHeader; + TextView mDescription; + ImageView mLoadSession; + ImageButton mRemoveRow; listViewHolder(View itemView) { super(itemView); } void bindListView(tabRowModel model) { + mGeckoView = itemView.findViewById(R.id.pGeckoView); + mHeader = itemView.findViewById(R.id.pHeader); + mDescription = itemView.findViewById(R.id.pDescription); + mLoadSession = itemView.findViewById(R.id.pLoadSession); + mRemoveRow = itemView.findViewById(R.id.pRemoveRow); - heaaderText = itemView.findViewById(R.id.pHeader); - descriptionText = itemView.findViewById(R.id.pDescription); - //itemContainer = itemView.findViewById(R.id.pRowContainer); - - if(model.getSession().getTitle().equals("") || model.getSession().getTitle().equals("loading")){ - heaaderText.setText(helperMethod.getDomainName(model.getSession().getCurrentURL())); - } - else { - heaaderText.setText(model.getSession().getTitle()); + mGeckoView.releaseSession(); + mGeckoView.setSession(model.getSession()); + if(model.getmId() == mCurrentSession){ + mCurrentGeckoView = mGeckoView; } + model.setGeckoView(mGeckoView); + mHeader.setText(model.getSession().getTitle()); + mDescription.setText(model.getSession().getCurrentURL()); - /*Large file or content based url handling*/ - String url = model.getSession().getCurrentURL(); - if(url.length()>200){ - url = url.substring(0,200); - } - - descriptionText.setText(url); - // messageButton = itemView.findViewById(R.id.message_button); - empty_message = itemView.findViewById(R.id.pEmptyListNotification); - data_model = model; + setOnClickListener(mLoadSession, model, mGeckoView, mRemoveRow); } } - void setFilter(String filter){ - this.filter = filter; - } - - void invokeFilter(boolean notify){ - mTempModelList.clear(); - for(int counter = 0; counter< mModelList.size(); counter++){ - if(mModelList.get(counter).getSession().getTitle().contains(filter) || mModelList.get(counter).getSession().getCurrentURL().contains(filter)){ - tabRowModel model = mModelList.get(counter); - mTempModelList.add(new tabRowModel(model.getSession(),counter)); - } - } - - if(notify){ - mEvent.invokeObserver(null,enums.etype.clear_recycler); - notifyDataSetChanged(); - } - } } 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 4be69a32..e7e21ee1 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,18 +1,17 @@ package com.darkweb.genesissearchengine.appManager.tabManager; import android.os.Bundle; -import android.text.Editable; -import android.text.TextWatcher; +import android.os.Handler; +import android.os.Looper; import android.view.View; -import android.view.inputmethod.EditorInfo; import android.widget.Button; -import android.widget.EditText; -import android.widget.ImageView; import androidx.appcompat.app.AppCompatActivity; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; import com.darkweb.genesissearchengine.appManager.activityContextManager; import com.darkweb.genesissearchengine.appManager.homeManager.homeController; +import com.darkweb.genesissearchengine.appManager.settingManager.settingHomePage.settingController; +import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.constants.enums; import com.darkweb.genesissearchengine.constants.keys; import com.darkweb.genesissearchengine.constants.status; @@ -23,26 +22,24 @@ import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.darkweb.genesissearchengine.helperManager.helperMethod; import com.darkweb.genesissearchengine.pluginManager.pluginController; import com.example.myapplication.R; - +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.Objects; public class tabController extends AppCompatActivity { + /*Private Views*/ + private Button mTabs; + /*Private Variables*/ private tabModel mListModel; private homeController mHomeController; private activityContextManager mContextManager; - - private ImageView mEmptyListNotifier; - private EditText mSearchBar; - private RecyclerView mListView; - private Button mClearButton; - private tabViewController mtabViewController; + private RecyclerView mRecycleView; + private tabAdapter mTabAdapter; /*Initializations*/ @@ -54,88 +51,115 @@ public class tabController extends AppCompatActivity initializeListModel(); initializeViews(); initializeList(); - onEditorInvoked(); + onCustomeListeners(); } public void initializeListModel(){ mListModel = new tabModel(); - mListModel.setList(dataController.getInstance().getTab()); + mListModel.setList((ArrayList)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_TAB, null)); mContextManager = activityContextManager.getInstance(); mHomeController = activityContextManager.getInstance().getHomeController(); mContextManager.setTabController(this); pluginController.getInstance().logEvent(strings.EVENT_TAB_OPENED); } public void initializeViews(){ - mEmptyListNotifier = findViewById(R.id.pEmptyListNotification); - mSearchBar = findViewById(R.id.pSearchInput); - mListView = findViewById(R.id.pRecycleView); - mClearButton = findViewById(R.id.pClearButton); - mtabViewController = new tabViewController(mEmptyListNotifier, mListView, mClearButton,this); + mRecycleView = findViewById(R.id.pRecycleView); + mTabs = findViewById(R.id.pTabs); + + mtabViewController = new tabViewController(this, mTabs); } public void initializeList(){ - tabAdapter adapter = new tabAdapter(mListModel.getList(),new adapterCallback()); - adapter.invokeFilter(false); - mListView.setAdapter(adapter); - mListView.setLayoutManager(new LinearLayoutManager(this)); - mtabViewController.updateIfListEmpty(mListModel.getList().size(),0); + LinearLayoutManager layoutManager = new LinearLayoutManager(tabController.this); + tabAdapter adapter = new tabAdapter(mListModel.getList(),new adapterCallback(), mHomeController.getmGeckoView(), ((tabRowModel)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_CURRENT_TAB,null)).getmId()); + mTabAdapter = adapter; + layoutManager.setReverseLayout(true); + + mRecycleView.setAdapter(adapter); + mRecycleView.setItemViewCacheSize(100); + mRecycleView.setNestedScrollingEnabled(false); + mRecycleView.setHasFixedSize(true); + mRecycleView.setAdapter(adapter); + mRecycleView.setItemViewCacheSize(100); + mRecycleView.setDrawingCacheEnabled(true); + mRecycleView.setDrawingCacheQuality(View.DRAWING_CACHE_QUALITY_HIGH); + mRecycleView.setLayoutManager(new LinearLayoutManager(tabController.this)); } /*View Handlers*/ - public void onEditorInvoked(){ + public void onCustomeListeners(){ - mSearchBar.setOnEditorActionListener((v, actionId, event) ->{ - if (actionId == EditorInfo.IME_ACTION_NEXT) - { - helperMethod.hideKeyboard(this); - return true; - } - return false; - }); - - mSearchBar.addTextChangedListener(new TextWatcher() { - - @Override - public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2){ - - } - - @Override - public void onTextChanged(CharSequence charSequence, int i, int i1, int i2){ - - } - - @Override - public void afterTextChanged(Editable editable) - { - if(mListView!=null){ - ((tabAdapter) Objects.requireNonNull(mListView.getAdapter())).setFilter(mSearchBar.getText().toString()); - ((tabAdapter) mListView.getAdapter()).invokeFilter(true); - } - } - }); } - public void reset(){ - if(mListView!=null){ - mListView.setAdapter(null); - } - mListView = null; + public void onReleaseDisplay(){ + mTabAdapter.onClose(); + mHomeController.onAcquireDisplay(); } @Override public void onBackPressed() { super.onBackPressed(); - reset(); + overridePendingTransition(R.anim.popup_anim_in, R.anim.popup_anim_out); } - public void onBackPressed(View view){ - this.finish(); - reset(); + public void onBackPressed(View view) { + onReleaseDisplay(); + finish(); + overridePendingTransition(R.anim.popup_anim_in, R.anim.popup_anim_out); } - public void onclearDataTrigger(View view){ - pluginController.getInstance().MessageManagerHandler(this, Collections.singletonList(strings.GENERIC_EMPTY_STR),enums.etype.clear_tab); + public void onRemoveView(int pId){ + for(int mCounter=0; mCounter data, enums.etype e_type) { - if(e_type.equals(enums.etype.clear_recycler)){ - mListView.getRecycledViewPool().clear(); - } - if(e_type.equals(enums.etype.url_triggered)){ - tabRowModel model = (tabRowModel)data.get(0); - pluginController.getInstance().logEvent(strings.EVENT_TAB_TRIGGERED); - mHomeController.onLoadTab(model.getSession(),false); - tabController.this.finish(); - } - else if(e_type.equals(enums.etype.url_clear)){ - mListModel.onManualClear((int)data.get(0)); - mHomeController.initTabCount(); - } - else if(e_type.equals(enums.etype.is_empty)){ - - mtabViewController.removeFromList((int)data.get(0)); - mtabViewController.updateIfListEmpty(mListModel.getList().size(),300); - mHomeController.releaseSession(); - if(dataController.getInstance().getTotalTabs()<1){ - mHomeController.onNewTab(true,false); - finish(); - }else { - mHomeController.loadExistingTab(); - } - mHomeController.initTabCount(); - } return null; } - } - } 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 new file mode 100644 index 00000000..defcf614 --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabEnums.java @@ -0,0 +1,12 @@ +package com.darkweb.genesissearchengine.appManager.tabManager; + +public class tabEnums +{ + /*Settings Manager*/ + public enum eTabViewCommands { + M_DISMISS_MENU, M_SHOW_MENU, INIT_TAB_COUNT + } + + public enum eTabModelCommands { + } +} \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabModel.java index 2dc1c52e..145b69ff 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabModel.java @@ -14,19 +14,10 @@ class tabModel { mModelList = model; } + ArrayList getList() { return mModelList; } - private void removeFromMainList(int index) - { - if(mModelList.size()>index){ - mModelList.remove(index); - } - } - - void onManualClear(int index){ - removeFromMainList(index); - } } \ No newline at end of file diff --git a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabRowModel.java b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabRowModel.java index 12e74895..aeb2a497 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabRowModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/appManager/tabManager/tabRowModel.java @@ -2,12 +2,15 @@ package com.darkweb.genesissearchengine.appManager.tabManager; import com.darkweb.genesissearchengine.appManager.homeManager.geckoSession; +import org.mozilla.geckoview.GeckoView; + public class tabRowModel { /*Private Variables*/ private geckoSession mSession; private int mId; + private GeckoView mGeckoView = null; /*Initializations*/ @@ -21,6 +24,16 @@ public class tabRowModel return mSession; } + public void setGeckoView(GeckoView pGeckoView){ + mGeckoView = pGeckoView; + } + + public void releaseGeckoView(){ + if(mGeckoView!=null){ + mGeckoView.releaseSession(); + } + } + public int getmId() { return mId; } 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 0fa29afa..7feb9569 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 @@ -1,37 +1,52 @@ package com.darkweb.genesissearchengine.appManager.tabManager; +import android.annotation.SuppressLint; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; import android.os.Build; +import android.view.LayoutInflater; import android.view.View; import android.view.Window; import android.view.WindowManager; +import android.widget.ActionMenuView; import android.widget.Button; -import android.widget.ImageView; +import android.widget.PopupWindow; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.app.AppCompatDelegate; import androidx.core.content.ContextCompat; -import androidx.recyclerview.widget.RecyclerView; -import com.example.myapplication.R; -import java.util.Objects; +import com.darkweb.genesissearchengine.constants.strings; +import com.darkweb.genesissearchengine.dataManager.dataController; +import com.darkweb.genesissearchengine.dataManager.dataEnums; +import com.darkweb.genesissearchengine.helperManager.helperMethod; +import com.example.myapplication.R; +import java.util.List; +import static android.content.Context.LAYOUT_INFLATER_SERVICE; class tabViewController { /*Private Variables*/ private AppCompatActivity mContext; - - private ImageView mEmptyListNotifier; - private RecyclerView mListView; - private Button mClearButton; + private PopupWindow mTabOptionMenu = null; + private Button mTabs; /*Initializations*/ - tabViewController(ImageView mEmptyListNotifier, RecyclerView mListView, Button mClearButton, AppCompatActivity mContext) + tabViewController(AppCompatActivity mContext, Button pTabs) { this.mContext = mContext; - this.mEmptyListNotifier = mEmptyListNotifier; - this.mListView = mListView; - this.mClearButton = mClearButton; + this.mTabs = pTabs; initPostUI(); + initUI(); + } + + private void initUI(){ + initTabCount(); + } + + private void initTabCount(){ + mTabs.setText((((int)dataController.getInstance().invokeTab(dataEnums.eTabCommands.GET_TOTAL_TAB, null))+ strings.GENERIC_EMPTY_STR)); } private void initPostUI(){ @@ -40,30 +55,45 @@ class tabViewController window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS); if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.M) { - window.setStatusBarColor(mContext.getResources().getColor(R.color.blue_dark)); + window.setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_text_v3)); } else { - mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR);// set status text dark - mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.white)); + if(AppCompatDelegate.getDefaultNightMode() == AppCompatDelegate.MODE_NIGHT_NO){ + mContext.getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR); + } + mContext.getWindow().setStatusBarColor(ContextCompat.getColor(mContext, R.color.c_background)); } } } - void updateIfListEmpty(int size,int duration){ - if(size>0){ - mEmptyListNotifier.animate().setDuration(duration).alpha(0f); - mClearButton.animate().setDuration(duration).alpha(1f); - } - else { - mEmptyListNotifier.animate().setDuration(duration).alpha(1f); - mClearButton.animate().setDuration(duration).alpha(0f); + private void onOpenTabMenu(View view) { + onCloseTabMenu(); + LayoutInflater layoutInflater = (LayoutInflater) view.getContext().getSystemService(LAYOUT_INFLATER_SERVICE); + @SuppressLint("InflateParams") final View mPopupView = layoutInflater.inflate(R.layout.tab_menu, null); + mTabOptionMenu = new PopupWindow( mPopupView, ActionMenuView.LayoutParams.WRAP_CONTENT, ActionMenuView.LayoutParams.WRAP_CONTENT, true); + view.measure(View.MeasureSpec.UNSPECIFIED, View.MeasureSpec.UNSPECIFIED); + mTabOptionMenu.setOutsideTouchable(true); + mTabOptionMenu.setFocusable(true); + mTabOptionMenu.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT)); + mTabOptionMenu.setAnimationStyle(R.style.popup_window_animation); + mTabOptionMenu.setElevation(7); + mTabOptionMenu.showAsDropDown(view,0, helperMethod.pxFromDp(-45)); + } + + private void onCloseTabMenu() { + if(mTabOptionMenu!=null){ + mTabOptionMenu.dismiss(); } } - void removeFromList(int index) - { - Objects.requireNonNull(mListView.getAdapter()).notifyItemRemoved(index); - mListView.getAdapter().notifyItemRangeChanged(index, mListView.getAdapter().getItemCount()-1); + public void onTrigger(tabEnums.eTabViewCommands pCommands, List pData){ + if(pCommands.equals(tabEnums.eTabViewCommands.M_SHOW_MENU)){ + onOpenTabMenu((View) pData.get(0)); + }else if(pCommands.equals(tabEnums.eTabViewCommands.M_DISMISS_MENU)){ + onCloseTabMenu(); + }else if(pCommands.equals(tabEnums.eTabViewCommands.INIT_TAB_COUNT)){ + initTabCount(); + } } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/constants/constants.java b/app/src/main/java/com/darkweb/genesissearchengine/constants/constants.java index b5ea8bf7..9fa0c59f 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/constants.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/constants.java @@ -15,7 +15,6 @@ public class constants public static final String CONST_GENESIS_UPDATE_URL = "https://boogle.store/manual?abi="; public static final String CONST_PLAYSTORE_URL = "https://play.google.com/store/apps/details?id=com.darkweb.genesissearchengine"; - public static final String CONST_BACKEND_GENESIS_URL = "http://boogle.store/q=$s"; public static final String CONST_BACKEND_GOOGLE_URL = "https://www.google.com/q=$s"; public static final String CONST_BACKEND_DUCK_DUCK_GO_URL = "https://duckduckgo.com/q=$s"; @@ -32,6 +31,14 @@ public class constants public static final boolean CONST_PROXY_DO_NOT_TRACK_HEADER_ENABLED = false; public static final int CONST_PROXY_DO_NOT_TRACK_HEADER_VALUE = 1; + /*HISTORY CONSTANTS*/ + + public static final String HISTORY_LOAD_MORE = "loading_more"; + + /*BOOKMARK CONSTANTS*/ + + public static final String BOOKMARK_LOAD_MORE = "loading_more"; + /*MENU CONSTANTS*/ public static final int CONST_LIST_HISTORY = 1; @@ -43,6 +50,8 @@ public class constants public static final int CONST_FETCHABLE_LIST_SIZE =100; public static final int CONST_MAX_BOOKMARK_SIZE =500; public static final String CONST_DATABASE_NAME ="genesis_dbase"; + public static final String CONST_PERCENTAGE_SIGN ="%"; + public static final String CONST_PERCENTAGE_SIGN_100 ="100%"; /*ADMOB CONSTANTS*/ 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 6923890b..d57762a6 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/enums.java @@ -4,11 +4,17 @@ public class enums { /*Settings Manager*/ public enum etype{ - on_update_favicon, + on_update_favicon,M_RESET_THEME_INVOKED_BACK, onion,on_verify_selected_url_menu, - welcome,abi_error, rate_failure,reported_success,bookmark, clear_tab,clear_history,clear_bookmark,report_url,rate_app,version_warning,start_orbot,download_file,download_file_long_press,on_long_press_url, + welcome,abi_error, rate_failure,reported_success,bookmark, clear_tab,clear_history,clear_bookmark,report_url,default_home,rate_app,version_warning,start_orbot,download_file,download_file_long_press,on_long_press_url, cancel_welcome,ignore_abi,reload,connect_vpn,app_rated,download_file_manual,download_folder, update_searcn, update_javascript,update_notification, update_history,update_cookies, update_font_size,update_font_adjustable,close_view,open_link_new_tab,open_link_current_tab,copy_link, url_triggered, url_triggered_new_tab,url_clear,clear_recycler,url_clear_at,remove_from_database,is_empty, - on_close_sesson,on_long_press,on_long_press_with_link,on_reset_app,on_bridge_mail,on_not_support,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_request_completed, on_update_history,on_update_suggestion,on_page_loaded,on_load_error,download_file_popup,on_init_ads,rate_application,search_update, open_new_tab + on_close_sesson,on_long_press,on_long_press_with_link,on_reset_app,on_bridge_mail,on_not_support, data_cleared,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_request_completed, on_update_history,on_update_suggestion,on_page_loaded,on_load_error,download_file_popup,on_init_ads,rate_application,search_update, open_new_tab + } + + public static class Theme { + public static final int THEME_LIGHT = 0; + public static final int THEME_DARK = 1; + public static final int THEME_DEFAULT = 2; } } \ No newline at end of file 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 b0fd4c56..6347d7a1 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/keys.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/keys.java @@ -19,6 +19,7 @@ public class keys public static final String PROXY_DO_NOT_TRACK_HEADER_VALUE = "privacy.donottrackheader.value"; public static final String PROXY_IS_APP_RATED = "IS_APP_RATED"; public static final String PROXY_LIST_TYPE = "list_type"; + public static final String PROXY_IMAGE = "permissions.default.image"; /*Settings*/ @@ -40,6 +41,16 @@ public class keys public static final String SETTING_SEARCH_SUGGESTION = "SETTING_SEARCH_STATUS"; public static final String SETTING_ZOOM = "SETTING_ZOOM"; public static final String SETTING_VOICE_INPUT = "SETTING_VOICE_INPUT"; + public static final String SETTING_TRACKING_PROTECTION = "SETTING_TRACKING_PROTECTION"; + public static final String SETTING_DONOT_TRACK = "SETTING_DONOT_TRACK"; + 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_FONTS = "SETTING_SHOW_FONTS"; + public static final String SETTING_AUTO_PLAY = "SETTING_AUTO_PLAY"; + 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"; /*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 fa995e93..bcbff0fb 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/status.java @@ -1,5 +1,7 @@ package com.darkweb.genesissearchengine.constants; +import android.content.res.Configuration; + import com.darkweb.genesissearchengine.dataManager.dataController; import com.darkweb.genesissearchengine.dataManager.dataEnums; @@ -11,8 +13,8 @@ public class status { /*App Status*/ - public static String sAppCurrentABI = "7.0"; public static boolean sPaidStatus = false; + public static String sAppCurrentABI = "7.0"; /*Settings Status*/ @@ -20,29 +22,41 @@ public class status public static String sSettingRedirectStatus = strings.GENERIC_EMPTY_STR; + public static boolean sThemeChanged = false; public static boolean sSettingEnableZoom = true; public static boolean sSettingEnableVoiceInput = true; public static boolean sSettingSearchHistory = false; public static boolean getsSettingSearchSuggestion = false; public static boolean sSettingJavaStatus = true; - public static boolean sSettingHistoryStatus = true; + public static boolean sClearOnExit = true; public static boolean sSettingIsAppPaused = false; public static boolean sSettingIsWelcomeEnabled = true; public static boolean sSettingIsAppStarted = false; public static boolean sSettingIsAppRated = false; public static boolean sSettingFontAdjustable = true; public static boolean sSettingFirstStart = true; + public static boolean sSettingTrackingProtection = true; + public static boolean sStatusDoNotTrack = true; + public static boolean sRestoreTabs = false; + public static boolean sCharacterEncoding = false; + public static boolean sShowWebFonts = false; + public static boolean sAutoPlay = false; + public static boolean sFullScreenBrowsing = false; + public static boolean sOpenURLInNewTab = false; + public static int sTheme = enums.Theme.THEME_DEFAULT; public static int sSettingCookieStatus = ACCEPT_FIRST_PARTY; + public static int sShowImages = -1; public static float sSettingFontSize = 1; public static String sSettingLanguage = "en"; + public static boolean sDefaultNightMode; /*Bridge Status*/ - public static int sBridgeNotificationManual = 0; public static boolean sBridgeGatewayAuto = false; public static boolean sBridgeGatewayManual = false; public static boolean sBridgeVPNStatus = false; public static boolean sBridgeStatus = false; + public static int sBridgeNotificationManual = 0; public static String sBridgeCustomBridge = strings.BRIDGE_CUSTOM_BRIDGE_OBFS4; @@ -51,7 +65,7 @@ public class status status.sSettingSearchHistory = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_SEARCH_HISTORY,true)); status.getsSettingSearchSuggestion = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_SEARCH_SUGGESTION,true)); status.sSettingJavaStatus = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_JAVA_SCRIPT,true)); - status.sSettingHistoryStatus = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_HISTORY_CLEAR,true)); + status.sClearOnExit = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_HISTORY_CLEAR,true)); status.sBridgeGatewayAuto = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_GATEWAY_AUTO,true)); status.sBridgeGatewayManual = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_GATEWAY_MANUAL,false)); status.sSettingIsWelcomeEnabled = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_IS_WELCOME_ENABLED,true)); @@ -62,7 +76,8 @@ public class status status.sSettingFirstStart = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_FIRST_INSTALLED,true)); status.sSettingEnableZoom = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_ZOOM,true)); status.sSettingEnableVoiceInput = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_VOICE_INPUT,true)); - + status.sSettingTrackingProtection = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_TRACKING_PROTECTION,true)); + status.sStatusDoNotTrack = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_DONOT_TRACK,true)); 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)); @@ -70,6 +85,15 @@ public class status 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)); + status.sShowWebFonts = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_SHOW_FONTS,false)); + status.sAutoPlay = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_AUTO_PLAY,false)); + status.sFullScreenBrowsing = (boolean)dataController.getInstance().invokePrefs(dataEnums.ePreferencesCommands.M_GET_BOOL, Arrays.asList(keys.SETTING_FULL_SCREEN_BROWSIING,false)); + 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,false)); } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/constants/strings.java b/app/src/main/java/com/darkweb/genesissearchengine/constants/strings.java index ef697cfa..8ee90822 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/constants/strings.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/constants/strings.java @@ -27,6 +27,7 @@ public class strings public static final String SETTING_CUSTOM_FONTS = "Custom Font"; public static final String SETTING_PERCENT_SIGN = "%"; public static final String SETTING_DEFAULT_LANGUAGE = "en"; + public static final String SETTING_DEFAULT_NEW_TAB_URL = "about:blank"; /*Home Manager*/ diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/bookmarkDataModel.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/bookmarkDataModel.java index d0218682..35712011 100644 --- a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/bookmarkDataModel.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/bookmarkDataModel.java @@ -23,8 +23,10 @@ public class bookmarkDataModel { return mBookmarks; } - void addBookmark(String url, String title){ - if(url.length()>1500){ + void addBookmark(String pURL, String pTitle){ + if(pURL.endsWith("about:blank")) + pURL = "about:blank"; + if(pURL.length()>1500){ return; } int autoval = 0; @@ -38,20 +40,26 @@ public class bookmarkDataModel { autoval = mBookmarks.get(0).getID()+1; } - if(title.equals("")) + if(pTitle.equals("")) { - title = "New_Bookmark"+autoval; + pTitle = "New_Bookmark"+autoval; } String[] params = new String[2]; - params[0] = title; - params[1] = url; + params[0] = pTitle; + params[1] = pURL; - databaseController.getInstance().execSQL("INSERT INTO bookmark(id,title,url) VALUES("+autoval+",?,?);",params); - mBookmarks.add(0,new bookmarkRowModel(title, url,autoval)); + if(!pTitle.equals("loading")){ + databaseController.getInstance().execSQL("INSERT INTO bookmark(id,title,url) VALUES("+autoval+",?,?);",params); + } + mBookmarks.add(0,new bookmarkRowModel(pTitle, pURL,autoval)); } - void clearBookmark(int pID) { + void clearBookmark(){ + mBookmarks.clear(); + } + + void deleteBookmark(int pID) { for(int mCounter=0;mCounter mTabs = new ArrayList<>(); - private ArrayList mSuggestions = new ArrayList<>(); - private Map mSuggestionCache = new HashMap<>(); - - - /*List History*/ - void updateSuggestionURL(String url, String newURL,boolean isLoading){ - if(url.length()>1500){ - return; - } - url = helperMethod.removeLastSlash(url); - url = helperMethod.urlWithoutPrefix(url); - historyRowModel model = mSuggestionCache.get(url); - if(model!=null){ - mSuggestionCache.remove(url); - if(!newURL.equals("loading")) - model.setHeader(newURL); - mSuggestionCache.put(url,model); - } - - String[] params = new String[2]; - params[0] = newURL; - params[1] = url; - if(newURL.length()>0 && !isLoading){ - // databaseController.getInstance().execSQL("UPDATE history SET title = ? , date = DateTime('now') WHERE url = ?",params); - } - } - void addSuggenstions(String url, String title,boolean isLoading){ - if(url.length()>1500 || title.equals("$TITLE") || title.equals("loading")){ - return; - } - - url = helperMethod.removeLastSlash(url); - url = helperMethod.urlWithoutPrefix(url); - historyRowModel tempModel = mSuggestionCache.get(url); - - if(tempModel==null) { - historyRowModel model = new historyRowModel(title, url, -1); - mSuggestionCache.put(url, model); - mSuggestions.add(0, mSuggestionCache.get(url)); - - } - else { - updateSuggestionURL(url,title,isLoading); - } - - String[] params = new String[2]; - params[0] = title; - params[1] = url; - if(title.length()>0 && !isLoading){ - //databaseController.getInstance().execSQL("UPDATE history SET title = ? , date = DateTime('now') WHERE url = ?",params); - } - } - - - /*List Tabs*/ - - void addTabs(geckoSession mSession,boolean isHardCopy){ - if(!isHardCopy){ - mTabs.add(0,new tabRowModel(mSession,mTabs.size())); - } - else { - mTabs.add(0,new tabRowModel(mSession,mTabs.size())); - } - } - ArrayList getTab(){ - return mTabs; - } - void clearTab() { - int size = mTabs.size(); - for(int counter = 0; counter< size; counter++){ - mTabs.get(0).getSession().stop(); - mTabs.remove(0); - } - if(mTabs.size()>0){ - //Log.i("FUCKERRROR125:","_FERROR_"); - mTabs.get(0).getSession().closeSession(); - } - } - void closeTab(geckoSession mSession) { - - for(int counter = 0; counter< mTabs.size(); counter++){ - if(mTabs.get(counter).getSession().getSessionID()==mSession.getSessionID()) - { - mTabs.remove(counter); - break; - } - else { - mTabs.get(counter).setId(mTabs.get(counter).getmId()+1); - } - } - } - void moveTabToTop(geckoSession mSession) { - - for(int counter = 0; counter< mTabs.size(); counter++){ - - if(mTabs.get(counter).getSession().getSessionID()==mSession.getSessionID()) - { - /***BIG PROBLEM***/ - mTabs.remove(counter); - mTabs.add(0,new tabRowModel(mSession,0)); - break; - }else { - mTabs.get(counter).setId(mTabs.get(counter).getmId()+1); - } - } - } - tabRowModel getCurrentTab(){ - if(mTabs.size()>0){ - return mTabs.get(0); - } - else { - return null; - } - } - int getTotalTabs(){ - return mTabs.size(); - } - - /*List Suggestion*/ - - ArrayList getmSuggestions(){ - return mSuggestions; - } - void clearSuggestion(){ - mSuggestions.clear(); - initSuggestions(); - } - void initSuggestions(){ - - addSuggenstions("https://duckduckgo.com","Duckduckgo",true); - addSuggenstions("https://bbc.com","BBC",true); - addSuggenstions("https://youtube.com","Youtube",true); - addSuggenstions("https://facebook.com","Facebook",true); - addSuggenstions("https://twitter.com","Twitter",true); - addSuggenstions("https://amazon.com","Amazon",true); - addSuggenstions("https://imdb.com","IMDB",true); - addSuggenstions("https://reddit.com","Reddit",true); - addSuggenstions("https://pinterest.com","Pinterest",true); - addSuggenstions("https://ebay.com","EBay",true); - addSuggenstions("https://tripadvisor.com","Trip Advisor",true); - addSuggenstions("https://craigslist.org","Craigslist",true); - addSuggenstions("https://walmart.com","Walmart",true); - addSuggenstions("https://instagram.com","Instagram",true); - addSuggenstions("https://google.com","Google",true); - addSuggenstions("https://nytimes.com","NY Times",true); - addSuggenstions("https://apple.com","Apple",true); - addSuggenstions("https://linkedin.com","Linkedin",true); - addSuggenstions("https://indeed.com","Indeed",true); - addSuggenstions("https://play.google.com","Play.Google",true); - addSuggenstions("https://espn.com","ESPN",true); - addSuggenstions("https://webmd.com","Webmd",true); - addSuggenstions("https://cnn.com","CNN",true); - addSuggenstions("https://homedepot.com","Homedepot",true); - addSuggenstions("https://etsy.com","ETSY",true); - addSuggenstions("https://netflix.com","Netflix",true); - addSuggenstions("https://quora.com","Quora",true); - addSuggenstions("https://microsoft.com","Microsoft",true); - addSuggenstions("https://target.com","Target",true); - addSuggenstions("https://merriam-webster.com","Merriam Webster",true); - addSuggenstions("https://forbes.com","Forbes",true); - addSuggenstions("https://mapquest.com","Mapquest",true); - addSuggenstions("https://nih.gov","NIH",true); - addSuggenstions("https://gamepedia.com","Gamepedia",true); - addSuggenstions("https://yahoo.com","Yahoo",true); - addSuggenstions("https://healthline.com","Healthline",true); - addSuggenstions("https://foxnews.com","Foxnews",true); - addSuggenstions("https://allrecipes.com","All Recipes",true); - addSuggenstions("https://quizlet.com","Quizlet",true); - addSuggenstions("https://weather.com","Weather",true); - addSuggenstions("https://bestbuy.com","Bestbuy",true); - addSuggenstions("https://urbandictionary.com","Urbandictionary",true); - addSuggenstions("https://mayoclinic.org","Mayoclinic",true); - addSuggenstions("https://aol.com" ,"AOL",true); - addSuggenstions("https://genius.com","Genius",true); - addSuggenstions("https://zillow.com","Zillow",true); - addSuggenstions("https://usatoday.com","Usatoday",true); - addSuggenstions("https://glassdoor.com","Glassdoor",true); - addSuggenstions("https://msn.com","MSN",true); - addSuggenstions("https://rottentomatoes.com","Rotten Tomatoes",true); - addSuggenstions("https://lowes.com","Lowes",true); - addSuggenstions("https://dictionary.com","Dictionary",true); - addSuggenstions("https://businessinsider.com","Business Insider",true); - addSuggenstions("https://usnews.com","US News",true); - addSuggenstions("https://medicalnewstoday.com","Medical News Today",true); - addSuggenstions("https://britannica.com","Britannica",true); - addSuggenstions("https://washingtonpost.com","Washington Post",true); - addSuggenstions("https://usps.com","USPS",true); - addSuggenstions("https://finance.yahoo.com","Finance Yahoo",true); - addSuggenstions("https://irs.gov","IRS",true); - addSuggenstions("https://yellowpages.com","Yellow Pages",true); - addSuggenstions("https://chase.com","Chase",true); - addSuggenstions("https://retailmenot.com","Retail Menot",true); - addSuggenstions("https://accuweather.com","Accuweather",true); - addSuggenstions("https://wayfair.com","Way Fair",true); - addSuggenstions("https://go.com","GO",true); - addSuggenstions("https://live.com","Live",true); - addSuggenstions("https://login.yahoo.com","Login Yahoo",true); - addSuggenstions("https://steamcommunity.com","Steam Community",true); - addSuggenstions("https://xfinity.com","XFinity",true); - addSuggenstions("https://cnet.com","CNET",true); - addSuggenstions("https://ign.com","IGN",true); - addSuggenstions("https://steampowered.com","Steam Powered",true); - addSuggenstions("https://macys.com","Macys",true); - addSuggenstions("https://wikihow.com","Wikihow",true); - addSuggenstions("https://mail.yahoo.com","Mail Yahoo",true); - addSuggenstions("wiktionary.org","Wiktionary",true); - addSuggenstions("https://cbssports.com","Cbssports",true); - addSuggenstions("https://cnbc.com","CNBC",true); - addSuggenstions("https://bankofamerica.com","Bank Of America",true); - addSuggenstions("https://expedia.com","Expedia",true); - addSuggenstions("https://wellsfargo.com","Wellsfargo",true); - addSuggenstions("https://groupon.com","Groupon",true); - addSuggenstions("https://twitch.tv","Twitch",true); - addSuggenstions("https://khanacademy.org","Khan Academy",true); - addSuggenstions("https://theguardian.com","The Guardian",true); - addSuggenstions("https://paypal.com","Paypal",true); - addSuggenstions("https://spotify.com","Spotify",true); - addSuggenstions("https://att.com","ATT",true); - addSuggenstions("https://nfl.com","NFL",true); - addSuggenstions("https://realtor.com","Realtor",true); - addSuggenstions("https://ca.gov","CA Gov",true); - addSuggenstions("https://goodreads.com","Good Reads",true); - addSuggenstions("https://office.com","Office",true); - addSuggenstions("https://ufl.edu","UFL",true); - addSuggenstions("https://mlb.com","MLB",true); - addSuggenstions("https://foodnetwork.com","Food Network",true); - addSuggenstions("https://apartments.com","Apartments",true); - addSuggenstions("https://npr.org","NPR",true); - addSuggenstions("https://wowhead.com","Wow Head",true); - addSuggenstions("https://bing.com","Bing",true); - addSuggenstions("https://google.com","Google",true); - addSuggenstions("https://boogle.store","Genesis Search",true); - } - -} +package com.darkweb.genesissearchengine.dataManager; + +import com.darkweb.genesissearchengine.appManager.historyManager.historyRowModel; +import com.darkweb.genesissearchengine.helperManager.helperMethod; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +public class suggestionDataModel { + + private ArrayList mSuggestions = new ArrayList<>(); + private Map mSuggestionCache = new HashMap<>(); + + private void initSuggestions(){ + + addSuggenstions("https://duckduckgo.com","Duckduckgo",true); + addSuggenstions("https://bbc.com","BBC",true); + addSuggenstions("https://youtube.com","Youtube",true); + addSuggenstions("https://facebook.com","Facebook",true); + addSuggenstions("https://twitter.com","Twitter",true); + addSuggenstions("https://amazon.com","Amazon",true); + addSuggenstions("https://imdb.com","IMDB",true); + addSuggenstions("https://reddit.com","Reddit",true); + addSuggenstions("https://pinterest.com","Pinterest",true); + addSuggenstions("https://ebay.com","EBay",true); + addSuggenstions("https://tripadvisor.com","Trip Advisor",true); + addSuggenstions("https://craigslist.org","Craigslist",true); + addSuggenstions("https://walmart.com","Walmart",true); + addSuggenstions("https://instagram.com","Instagram",true); + addSuggenstions("https://google.com","Google",true); + addSuggenstions("https://nytimes.com","NY Times",true); + addSuggenstions("https://apple.com","Apple",true); + addSuggenstions("https://linkedin.com","Linkedin",true); + addSuggenstions("https://indeed.com","Indeed",true); + addSuggenstions("https://play.google.com","Play.Google",true); + addSuggenstions("https://espn.com","ESPN",true); + addSuggenstions("https://webmd.com","Webmd",true); + addSuggenstions("https://cnn.com","CNN",true); + addSuggenstions("https://homedepot.com","Homedepot",true); + addSuggenstions("https://etsy.com","ETSY",true); + addSuggenstions("https://netflix.com","Netflix",true); + addSuggenstions("https://quora.com","Quora",true); + addSuggenstions("https://microsoft.com","Microsoft",true); + addSuggenstions("https://target.com","Target",true); + addSuggenstions("https://merriam-webster.com","Merriam Webster",true); + addSuggenstions("https://forbes.com","Forbes",true); + addSuggenstions("https://mapquest.com","Mapquest",true); + addSuggenstions("https://nih.gov","NIH",true); + addSuggenstions("https://gamepedia.com","Gamepedia",true); + addSuggenstions("https://yahoo.com","Yahoo",true); + addSuggenstions("https://healthline.com","Healthline",true); + addSuggenstions("https://foxnews.com","Foxnews",true); + addSuggenstions("https://allrecipes.com","All Recipes",true); + addSuggenstions("https://quizlet.com","Quizlet",true); + addSuggenstions("https://weather.com","Weather",true); + addSuggenstions("https://bestbuy.com","Bestbuy",true); + addSuggenstions("https://urbandictionary.com","Urbandictionary",true); + addSuggenstions("https://mayoclinic.org","Mayoclinic",true); + addSuggenstions("https://aol.com" ,"AOL",true); + addSuggenstions("https://genius.com","Genius",true); + addSuggenstions("https://zillow.com","Zillow",true); + addSuggenstions("https://usatoday.com","Usatoday",true); + addSuggenstions("https://glassdoor.com","Glassdoor",true); + addSuggenstions("https://msn.com","MSN",true); + addSuggenstions("https://rottentomatoes.com","Rotten Tomatoes",true); + addSuggenstions("https://lowes.com","Lowes",true); + addSuggenstions("https://dictionary.com","Dictionary",true); + addSuggenstions("https://businessinsider.com","Business Insider",true); + addSuggenstions("https://usnews.com","US News",true); + addSuggenstions("https://medicalnewstoday.com","Medical News Today",true); + addSuggenstions("https://britannica.com","Britannica",true); + addSuggenstions("https://washingtonpost.com","Washington Post",true); + addSuggenstions("https://usps.com","USPS",true); + addSuggenstions("https://finance.yahoo.com","Finance Yahoo",true); + addSuggenstions("https://irs.gov","IRS",true); + addSuggenstions("https://yellowpages.com","Yellow Pages",true); + addSuggenstions("https://chase.com","Chase",true); + addSuggenstions("https://retailmenot.com","Retail Menot",true); + addSuggenstions("https://accuweather.com","Accuweather",true); + addSuggenstions("https://wayfair.com","Way Fair",true); + addSuggenstions("https://go.com","GO",true); + addSuggenstions("https://live.com","Live",true); + addSuggenstions("https://login.yahoo.com","Login Yahoo",true); + addSuggenstions("https://steamcommunity.com","Steam Community",true); + addSuggenstions("https://xfinity.com","XFinity",true); + addSuggenstions("https://cnet.com","CNET",true); + addSuggenstions("https://ign.com","IGN",true); + addSuggenstions("https://steampowered.com","Steam Powered",true); + addSuggenstions("https://macys.com","Macys",true); + addSuggenstions("https://wikihow.com","Wikihow",true); + addSuggenstions("https://mail.yahoo.com","Mail Yahoo",true); + addSuggenstions("wiktionary.org","Wiktionary",true); + addSuggenstions("https://cbssports.com","Cbssports",true); + addSuggenstions("https://cnbc.com","CNBC",true); + addSuggenstions("https://bankofamerica.com","Bank Of America",true); + addSuggenstions("https://expedia.com","Expedia",true); + addSuggenstions("https://wellsfargo.com","Wellsfargo",true); + addSuggenstions("https://groupon.com","Groupon",true); + addSuggenstions("https://twitch.tv","Twitch",true); + addSuggenstions("https://khanacademy.org","Khan Academy",true); + addSuggenstions("https://theguardian.com","The Guardian",true); + addSuggenstions("https://paypal.com","Paypal",true); + addSuggenstions("https://spotify.com","Spotify",true); + addSuggenstions("https://att.com","ATT",true); + addSuggenstions("https://nfl.com","NFL",true); + addSuggenstions("https://realtor.com","Realtor",true); + addSuggenstions("https://ca.gov","CA Gov",true); + addSuggenstions("https://goodreads.com","Good Reads",true); + addSuggenstions("https://office.com","Office",true); + addSuggenstions("https://ufl.edu","UFL",true); + addSuggenstions("https://mlb.com","MLB",true); + addSuggenstions("https://foodnetwork.com","Food Network",true); + addSuggenstions("https://apartments.com","Apartments",true); + addSuggenstions("https://npr.org","NPR",true); + addSuggenstions("https://wowhead.com","Wow Head",true); + addSuggenstions("https://bing.com","Bing",true); + addSuggenstions("https://google.com","Google",true); + addSuggenstions("https://boogle.store","Genesis Search",true); + } + + private void addSuggenstions(String url, String title,boolean isLoading){ + url = helperMethod.removeLastSlash(url); + if(url.length()>1500 || title.equals("$TITLE") || title.equals("loading")){ + return; + } + + url = helperMethod.removeLastSlash(url); + url = helperMethod.urlWithoutPrefix(url); + historyRowModel tempModel = mSuggestionCache.get(url); + + if(tempModel==null) { + historyRowModel model = new historyRowModel(title, url, -1); + mSuggestionCache.put(url, model); + mSuggestions.add(0, mSuggestionCache.get(url)); + + } + else { + updateSuggestionURL(url,title); + } + + } + + private void clearSuggestion(){ + mSuggestions.clear(); + initSuggestions(); + } + + private void updateSuggestionURL(String url, String newURL){ + url = helperMethod.removeLastSlash(url); + if(url.length()>1500){ + return; + } + url = helperMethod.removeLastSlash(url); + url = helperMethod.urlWithoutPrefix(url); + historyRowModel model = mSuggestionCache.get(url); + if(model!=null){ + mSuggestionCache.remove(url); + if(!newURL.equals("loading")) + model.setHeader(newURL); + mSuggestionCache.put(url,model); + } + } + + private ArrayList getmSuggestions(){ + return mSuggestions; + } + + public Object onTrigger(dataEnums.eSuggestionCommands p_commands, List p_data){ + if(p_commands.equals(dataEnums.eSuggestionCommands.M_CLEAR_SUGGESTION)){ + clearSuggestion(); + } + else if(p_commands.equals(dataEnums.eSuggestionCommands.M_INIT_SUGGESTION)){ + initSuggestions(); + } + else if(p_commands.equals(dataEnums.eSuggestionCommands.M_GET_SUGGESTION)){ + return getmSuggestions(); + } + else if(p_commands.equals(dataEnums.eSuggestionCommands.M_UPDATE_SUGGESTION)){ + updateSuggestionURL((String)p_data.get(0),(String) p_data.get(1)); + } + else if(p_commands.equals(dataEnums.eSuggestionCommands.M_ADD_SUGGESTION)){ + addSuggenstions((String)p_data.get(0),(String) p_data.get(1),true); + } + return null; + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java new file mode 100644 index 00000000..e0bb93ea --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/dataManager/tabDataModel.java @@ -0,0 +1,108 @@ +package com.darkweb.genesissearchengine.dataManager; + +import android.annotation.SuppressLint; + +import com.darkweb.genesissearchengine.appManager.homeManager.geckoSession; +import com.darkweb.genesissearchengine.appManager.tabManager.tabRowModel; + +import java.util.ArrayList; +import java.util.List; + +@SuppressLint("CommitPrefEdits") +class tabDataModel +{ + private ArrayList mTabs = new ArrayList<>(); + + /*List Tabs*/ + + void addTabs(geckoSession mSession,boolean isHardCopy){ + if(!isHardCopy){ + mTabs.add(0,new tabRowModel(mSession,mTabs.size())); + } + else { + mTabs.add(0,new tabRowModel(mSession,mTabs.size())); + } + } + ArrayList getTab(){ + return mTabs; + } + void clearTab() { + int size = mTabs.size(); + for(int counter = 0; counter< size; counter++){ + mTabs.get(0).getSession().stop(); + mTabs.remove(0); + } + if(mTabs.size()>0){ + mTabs.get(0).getSession().closeSession(); + } + } + void closeTab(geckoSession mSession) { + for(int counter = 0; counter< mTabs.size(); counter++){ + if(mTabs.get(counter).getSession().getSessionID()==mSession.getSessionID()) + { + mTabs.remove(counter); + break; + } + else { + mTabs.get(counter).setId(mTabs.get(counter).getmId()+1); + } + } + } + void moveTabToTop(geckoSession mSession) { + + for(int counter = 0; counter< mTabs.size(); counter++){ + + if(mTabs.get(counter).getSession().getSessionID()==mSession.getSessionID()) + { + /* BIG PROBLEM */ + mTabs.remove(counter); + mTabs.add(0,new tabRowModel(mSession,0)); + break; + }else { + mTabs.get(counter).setId(mTabs.get(counter).getmId()+1); + } + } + } + tabRowModel getCurrentTab(){ + if(mTabs.size()>0){ + return mTabs.get(0); + } + else { + return null; + } + } + int getTotalTabs(){ + return mTabs.size(); + } + + /*List Suggestion*/ + public Object onTrigger(dataEnums.eTabCommands p_commands, List p_data){ + if(p_commands == dataEnums.eTabCommands.GET_TOTAL_TAB){ + return getTotalTabs(); + } + else if(p_commands == dataEnums.eTabCommands.GET_CURRENT_TAB){ + return getCurrentTab(); + } + else if(p_commands == dataEnums.eTabCommands.MOVE_TAB_TO_TOP){ + moveTabToTop((geckoSession)p_data.get(0)); + } + else if(p_commands == dataEnums.eTabCommands.CLOSE_TAB){ + closeTab((geckoSession)p_data.get(0)); + } + else if(p_commands == dataEnums.eTabCommands.M_CLEAR_TAB){ + clearTab(); + } + else if(p_commands == dataEnums.eTabCommands.M_CLOSE_TAB_PARAMETERIZED){ + closeTab((geckoSession)p_data.get(0)); + } + else if(p_commands == dataEnums.eTabCommands.M_ADD_TAB){ + addTabs((geckoSession)p_data.get(0), (boolean)p_data.get(1)); + } + else if(p_commands == dataEnums.eTabCommands.GET_TAB){ + return getTab(); + } + + return null; + } + +} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/autoFillService.java b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/autoFillService.java new file mode 100644 index 00000000..f8714a5c --- /dev/null +++ b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/autoFillService.java @@ -0,0 +1,25 @@ +package com.darkweb.genesissearchengine.helperManager; + +import android.os.Build; +import android.os.CancellationSignal; +import android.service.autofill.AutofillService; +import android.service.autofill.FillCallback; +import android.service.autofill.FillRequest; +import android.service.autofill.SaveCallback; +import android.service.autofill.SaveRequest; +import androidx.annotation.NonNull; +import androidx.annotation.RequiresApi; + +@RequiresApi(api = Build.VERSION_CODES.O) +public class autoFillService extends AutofillService { + + @Override + public void onFillRequest(@NonNull FillRequest request, @NonNull CancellationSignal cancellationSignal, @NonNull FillCallback callback) { + + } + + @Override + public void onSaveRequest(@NonNull SaveRequest request, @NonNull SaveCallback callback) { + + } +} 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 67b2dd21..35f4f1ea 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/helperManager/helperMethod.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/helperManager/helperMethod.java @@ -61,12 +61,14 @@ public class helperMethod { /*Helper Methods General*/ - public static String completeURL(String url){ - + public static String completeURL(String pURL){ + if(pURL.equals("about:blank")){ + return pURL; + } URL weburl = null; try { - weburl = new URL(url); + weburl = new URL(pURL); URLConnection result = weburl.openConnection(); if (result instanceof HttpsURLConnection) { @@ -83,16 +85,16 @@ public class helperMethod e.printStackTrace(); } - if(!url.startsWith("www.")&& !url.startsWith("http://")&& !url.startsWith("https://")){ - url = ""+url; + if(!pURL.startsWith("www.")&& !pURL.startsWith("http://")&& !pURL.startsWith("https://")){ + pURL = ""+pURL; } - if(!url.startsWith("http://")&&!url.startsWith("https://")){ - url = "http://"+url; + if(!pURL.startsWith("http://")&&!pURL.startsWith("https://")){ + pURL = "http://"+pURL; } - return url; + return pURL; } - public static SpannableString urlDesigner(String url){ + public static SpannableString urlDesigner(String url, Context pContext){ if (url.contains("https://")) { @@ -109,7 +111,7 @@ public class helperMethod } else { SpannableString ss = new SpannableString(url); - ss.setSpan(new ForegroundColorSpan(Color.BLACK), 0, url.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + ss.setSpan(new ForegroundColorSpan(pContext.getResources().getColor(R.color.c_text_v1)), 0, url.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); return ss; } } @@ -255,6 +257,11 @@ public class helperMethod context.startActivity(myIntent); } + public static void restartActivity( Intent pIntent, AppCompatActivity pContext){ + pContext.finish(); + pContext.startActivity(pIntent); + } + public static void onMinimizeApp(AppCompatActivity context){ Intent startMain = new Intent(Intent.ACTION_MAIN); startMain.addCategory(Intent.CATEGORY_HOME); @@ -274,6 +281,23 @@ public class helperMethod return rotate; } + public static void openNotification(AppCompatActivity pContext) + { + Intent intent = new Intent(); + intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS"); + intent.putExtra("android.provider.extra.APP_PACKAGE", pContext.getPackageName()); + pContext.startActivity(intent); + } + + public static String ellipsize(String input, int maxLength) { + String ellip = "..."; + if (input == null || input.length() <= maxLength + || input.length() < ellip.length()) { + return input; + } + return input.substring(0, maxLength - ellip.length()).concat(ellip); + } + public static String getDomainName(String url) { try{ 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 28b01950..801395b1 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/adManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/adManager.java @@ -1,18 +1,16 @@ package com.darkweb.genesissearchengine.pluginManager; -import android.util.Log; - import androidx.appcompat.app.AppCompatActivity; import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.helperManager.eventObserver; import com.google.android.gms.ads.*; -import static com.darkweb.genesissearchengine.constants.status.paid_status; +import static com.darkweb.genesissearchengine.constants.status.sPaidStatus; class adManager { - /*Private Variables*/ + /*Private Variables */ private AppCompatActivity mAppContext; private eventObserver.eventListener mEvent; @@ -29,12 +27,12 @@ class adManager } void loadAds(){ - if(!paid_status) + if(!sPaidStatus) { if (!bannerAdsLoading) { bannerAdsLoading = true; - MobileAds.initialize(mAppContext, constants.ADMOB_KEY); + MobileAds.initialize(mAppContext, constants.CONST_ADMOB_KEY); mBannerAds.setAlpha(0f); initializeBannerAds(); } @@ -48,7 +46,7 @@ class adManager /*Local Helper Methods*/ private void admobListeners(){ - if(!paid_status){ + if(!sPaidStatus){ mBannerAds.setAdListener(new AdListener() { @Override public void onAdLoaded() { @@ -83,7 +81,7 @@ class adManager /*External Helper Methods*/ private void initializeBannerAds(){ - if(!paid_status){ + if(!sPaidStatus){ AdRequest request = new AdRequest.Builder().addTestDevice("E731DE5933CDC0E42B335787CE3E23EF").build(); mBannerAds.loadAd(request); admobListeners(); diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/admanager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/admanager.java deleted file mode 100755 index 801395b1..00000000 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/admanager.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.darkweb.genesissearchengine.pluginManager; - -import androidx.appcompat.app.AppCompatActivity; -import com.darkweb.genesissearchengine.constants.constants; -import com.darkweb.genesissearchengine.helperManager.eventObserver; -import com.google.android.gms.ads.*; - -import static com.darkweb.genesissearchengine.constants.status.sPaidStatus; - -class adManager -{ - - /*Private Variables */ - - private AppCompatActivity mAppContext; - private eventObserver.eventListener mEvent; - private AdView mBannerAds; - private boolean bannerAdsLoading = false; - private boolean bannerAdsLoaded = false; - - /*Initializations*/ - - adManager(AppCompatActivity app_context, eventObserver.eventListener event, AdView banner_ads) { - this.mAppContext = app_context; - this.mEvent = event; - mBannerAds = banner_ads; - } - - void loadAds(){ - if(!sPaidStatus) - { - if (!bannerAdsLoading) - { - bannerAdsLoading = true; - MobileAds.initialize(mAppContext, constants.CONST_ADMOB_KEY); - mBannerAds.setAlpha(0f); - initializeBannerAds(); - } - } - } - - boolean isAdvertLoaded(){ - return bannerAdsLoaded; - } - - /*Local Helper Methods*/ - - private void admobListeners(){ - if(!sPaidStatus){ - mBannerAds.setAdListener(new AdListener() { - @Override - public void onAdLoaded() { - bannerAdsLoaded = true; - mEvent.invokeObserver(null,null); - } - - @Override - public void onAdFailedToLoad(int errorCode) { - //Log.i("Failure___",""+errorCode); - } - - @Override - public void onAdOpened() { - } - - @Override - public void onAdClicked() { - } - - @Override - public void onAdLeftApplication() { - } - - @Override - public void onAdClosed() { - } - }); - } - } - - /*External Helper Methods*/ - - private void initializeBannerAds(){ - if(!sPaidStatus){ - AdRequest request = new AdRequest.Builder().addTestDevice("E731DE5933CDC0E42B335787CE3E23EF").build(); - mBannerAds.loadAd(request); - admobListeners(); - } - } - -} diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/analyticManager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/analyticManager.java index a73e4c82..bc4e54b4 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/analyticManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/analyticManager.java @@ -3,7 +3,6 @@ package com.darkweb.genesissearchengine.pluginManager; import android.content.Context; import android.content.SharedPreferences; import androidx.appcompat.app.AppCompatActivity; -import com.crashlytics.android.Crashlytics; import com.darkweb.genesissearchengine.constants.constants; import com.darkweb.genesissearchengine.helperManager.eventObserver; @@ -11,7 +10,7 @@ import java.util.UUID; class analyticManager { - /*Private Variables*/ + /*Private Variables */ private AppCompatActivity mAppContext; private String mUniqueID = null; @@ -24,7 +23,7 @@ class analyticManager } private void initialize(){ - final String PREF_UNIQUE_ID = constants.UNIQUE_KEY_ID; + final String PREF_UNIQUE_ID = constants.CONST_UNIQUE_KEY_ID; if (mUniqueID == null) { @@ -53,9 +52,6 @@ class analyticManager /*Helper Methods*/ void logUser(){ - Crashlytics.setUserIdentifier(mUniqueID); - Crashlytics.setUserEmail(constants.USER_EMAIL); - Crashlytics.setUserName(mUniqueID); } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/analyticmanager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/analyticmanager.java deleted file mode 100755 index bc4e54b4..00000000 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/analyticmanager.java +++ /dev/null @@ -1,57 +0,0 @@ -package com.darkweb.genesissearchengine.pluginManager; - -import android.content.Context; -import android.content.SharedPreferences; -import androidx.appcompat.app.AppCompatActivity; -import com.darkweb.genesissearchengine.constants.constants; -import com.darkweb.genesissearchengine.helperManager.eventObserver; - -import java.util.UUID; - -class analyticManager -{ - /*Private Variables */ - - private AppCompatActivity mAppContext; - private String mUniqueID = null; - - /*Initializations*/ - - analyticManager(AppCompatActivity app_context, eventObserver.eventListener event){ - this.mAppContext = app_context; - initialize(); - } - - private void initialize(){ - final String PREF_UNIQUE_ID = constants.CONST_UNIQUE_KEY_ID; - - if (mUniqueID == null) - { - SharedPreferences sharedPrefs = mAppContext.getSharedPreferences( - PREF_UNIQUE_ID, Context.MODE_PRIVATE); - mUniqueID = sharedPrefs.getString(PREF_UNIQUE_ID, null); - if (mUniqueID == null) { - - new Thread(){ - public void run(){ - try{ - mUniqueID = UUID.randomUUID().toString(); - }catch (Exception ex){ - mUniqueID = UUID.randomUUID().toString(); - } - - SharedPreferences.Editor editor = sharedPrefs.edit(); - editor.putString(PREF_UNIQUE_ID, mUniqueID); - editor.apply(); - } - }.start(); - } - } - } - - /*Helper Methods*/ - - void logUser(){ - } - -} 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 65031fe2..732b52d0 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/messageManager.java @@ -79,11 +79,11 @@ class messageManager }); } + @SuppressLint("QueryPermissionsNeeded") private void abiError() { initializeDialog(R.layout.popup_abi_error, Gravity.CENTER); - dialog.findViewById(R.id.pOption1).setOnClickListener(v -> dialog.dismiss()); - dialog.findViewById(R.id.pOption2).setOnClickListener(v -> { + dialog.findViewById(R.id.pOption1).setOnClickListener(v -> { dialog.dismiss(); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(constants.CONST_GENESIS_UPDATE_URL + status.sAppCurrentABI)); if(browserIntent.resolveActivity(app_context.getPackageManager()) != null) @@ -136,6 +136,12 @@ class messageManager dialog.findViewById(R.id.pDismiss).setOnClickListener(v -> dialog.dismiss()); } + private void dataClearedSuccessfully() + { + initializeDialog(R.layout.popup_data_cleared, Gravity.BOTTOM); + dialog.findViewById(R.id.pDismiss).setOnClickListener(v -> dialog.dismiss()); + } + @SuppressLint("ResourceType") private void bookmark() { @@ -211,6 +217,7 @@ class messageManager }); } + @SuppressLint("QueryPermissionsNeeded") private void rateApp() { initializeDialog(R.layout.popup_rate_us, Gravity.CENTER); @@ -251,12 +258,12 @@ class messageManager String title = data.get(1); int size = name.length(); - if(size>35){ - size = 35; + if(size>235){ + size = 235; } initializeDialog(R.layout.popup_file_longpress, Gravity.CENTER); - ((TextView)dialog.findViewById(R.id.pDescription)).setText((title + data.get(0).substring(0,size)+"...")); + ((TextView)dialog.findViewById(R.id.pDescription)).setText((title + " | " + data.get(0).substring(0,size)+"...")); dialog.findViewById(R.id.pDismiss).setOnClickListener(v -> dialog.dismiss()); dialog.findViewById(R.id.pOption1).setOnClickListener(v -> { event.invokeObserver(Collections.singletonList(data.get(0)), enums.etype.download_file_manual); @@ -281,8 +288,8 @@ class messageManager int size = data.get(0).length()-1; String title = data.get(1); - if(size>35){ - size = 35; + if(size>235){ + size = 235; } initializeDialog(R.layout.popup_url_longpress, Gravity.CENTER); @@ -303,7 +310,6 @@ class messageManager } private void popupDownloadFull(){ - String url = data.get(0); String file = data.get(1); String title = data.get(2); @@ -311,25 +317,28 @@ class messageManager String data_local = app_context.getString(R.string.ALERT_LONG_URL_MESSAGE); int size = url.length(); - if(size>35){ - size = 35; + if(size>235){ + size = 235; } int size1 = file.length(); - if(size1>35){ - size1 = 35; + if(size1>235){ + size1 = 235; } if(!url.equals("")){ data_local = title + url.substring(0,size)+"..."; } else if(!file.equals("")){ - data_local = title + file.substring(0,size1)+"..."; + data_local = file.substring(0,size1)+"..."; + } + String mTitle = title; + if(mTitle.length()<=1){ + mTitle = data.get(0).substring(0,size)+"..."; } - - initializeDialog(R.layout.popup_url_longpress, Gravity.CENTER); - ((TextView)dialog.findViewById(R.id.pHeader)).setText((title + data.get(0).substring(0,size)+"...")); + initializeDialog(R.layout.popup_download_full, Gravity.CENTER); + ((TextView)dialog.findViewById(R.id.pHeader)).setText(mTitle); ((TextView)dialog.findViewById(R.id.pDescription)).setText((data_local)); dialog.findViewById(R.id.pDismiss).setOnClickListener(v -> dialog.dismiss()); dialog.findViewById(R.id.pOption1).setOnClickListener(v -> { @@ -456,7 +465,7 @@ class messageManager case on_long_press_with_link: popupDownloadFull(); - break; + break; case on_bridge_mail: sendBridgeMail(); @@ -465,6 +474,10 @@ class messageManager case on_not_support: notSupportMessage(); break; + + case data_cleared: + dataClearedSuccessfully(); + break; } } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java index af84f742..be6abc8a 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/orbotManager.java @@ -5,6 +5,7 @@ import android.content.Intent; import android.os.Build; import androidx.appcompat.app.AppCompatActivity; + import com.darkweb.genesissearchengine.constants.*; import com.darkweb.genesissearchengine.dataManager.dataController; import com.darkweb.genesissearchengine.dataManager.dataEnums; @@ -41,8 +42,8 @@ class orbotManager } void startOrbot(Context context){ - orbotLocalConstants.bridges = status.sBridgeCustomBridge; - orbotLocalConstants.sIsManualBridge = status.sBridgeGatewayManual; + orbotLocalConstants.mBridges = status.sBridgeCustomBridge; + orbotLocalConstants.mIsManualBridge = status.sBridgeGatewayManual; this.mAppContext = context; Prefs.putBridgesEnabled(status.sBridgeGatewayManual |status.sBridgeGatewayAuto); Intent mServiceIntent = new Intent(context, OrbotService.class); @@ -58,10 +59,10 @@ class orbotManager } int getNotificationStatus(){ - return orbotLocalConstants.sNotificationStatus; + return orbotLocalConstants.mNotificationStatus; } void initNotification(int status){ - orbotLocalConstants.sNotificationStatus = status; + orbotLocalConstants.mNotificationStatus = status; } void enableTorNotification(){ OrbotService.getServiceObject().enableNotification(); @@ -129,20 +130,22 @@ class orbotManager setPrivacyPrefs(); } - private void setPrivacyPrefs () + public void setPrivacyPrefs () { + PrefsHelper.setPref(keys.PROXY_IMAGE, status.sShowImages); + PrefsHelper.setPref("browser.display.show_image_placeholders",true); PrefsHelper.setPref("browser.cache.disk.enable",false); PrefsHelper.setPref("browser.cache.memory.enable",true); PrefsHelper.setPref("browser.cache.disk.capacity",0); PrefsHelper.setPref("privacy.resistFingerprinting",true); - PrefsHelper.setPref("privacy.clearOnShutdown.cache",status.sSettingHistoryStatus); - PrefsHelper.setPref("privacy.clearOnShutdown.downloads",status.sSettingHistoryStatus); - PrefsHelper.setPref("privacy.clearOnShutdown.formdata",status.sSettingHistoryStatus); - PrefsHelper.setPref("privacy.clearOnShutdown.history",status.sSettingHistoryStatus); - PrefsHelper.setPref("privacy.clearOnShutdown.offlineApps",status.sSettingHistoryStatus); - PrefsHelper.setPref("privacy.clearOnShutdown.passwords",status.sSettingHistoryStatus); - PrefsHelper.setPref("privacy.clearOnShutdown.sessions",status.sSettingHistoryStatus); - PrefsHelper.setPref("privacy.clearOnShutdown.siteSettings",status.sSettingHistoryStatus); + PrefsHelper.setPref("privacy.clearOnShutdown.cache",status.sClearOnExit); + PrefsHelper.setPref("privacy.clearOnShutdown.downloads",status.sClearOnExit); + PrefsHelper.setPref("privacy.clearOnShutdown.formdata",status.sClearOnExit); + PrefsHelper.setPref("privacy.clearOnShutdown.history",status.sClearOnExit); + PrefsHelper.setPref("privacy.clearOnShutdown.offlineApps",status.sClearOnExit); + PrefsHelper.setPref("privacy.clearOnShutdown.passwords",status.sClearOnExit); + PrefsHelper.setPref("privacy.clearOnShutdown.sessions",status.sClearOnExit); + PrefsHelper.setPref("privacy.clearOnShutdown.siteSettings",status.sClearOnExit); PrefsHelper.setPref("privacy.donottrackheader.enabled",false); PrefsHelper.setPref("privacy.donottrackheader.value",1); PrefsHelper.setPref("network.http.sendRefererHeader", 0); @@ -155,7 +158,7 @@ class orbotManager String getLogs() { - String logs = orbotLocalConstants.tor_logs_status; + String logs = orbotLocalConstants.mTorLogsStatus; if(!logs.contains("Bootstrapped") && !mLogsStarted){ logs = "Initializing Bootstrap"; @@ -178,7 +181,7 @@ class orbotManager } boolean isOrbotRunning(){ - return orbotLocalConstants.sIsTorInitialized; + return orbotLocalConstants.mIsTorInitialized; } } diff --git a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java index 823dc6a9..32a1a0f9 100755 --- a/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java +++ b/app/src/main/java/com/darkweb/genesissearchengine/pluginManager/pluginController.java @@ -121,6 +121,9 @@ public class pluginController public void setProxy(String url){ orbotManager.getInstance().setProxy(url); } + public void updatePrivacy(){ + orbotManager.getInstance().setPrivacyPrefs(); + } public String orbotLogs(){ return orbotManager.getInstance().getLogs(); } @@ -245,7 +248,7 @@ public class pluginController dataController.getInstance().invokeHistory(dataEnums.eHistoryCommands.M_CLEAR_HISTORY ,null); mContextManager.getHistoryController().onclearData(); mHomeController.onClearSession(); - dataController.getInstance().clearTabs(); + dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_CLEAR_TAB, null); mHomeController.initTab(false); } else if(event_type.equals(enums.etype.clear_bookmark)){ @@ -283,7 +286,7 @@ public class pluginController helperMethod.copyURL(data.get(0).toString(),mContextManager.getHomeController()); } else if(event_type.equals(enums.etype.clear_tab)){ - dataController.getInstance().clearTabs(); + dataController.getInstance().invokeTab(dataEnums.eTabCommands.M_CLEAR_TAB, null); mHomeController.initTab(true); activityContextManager.getInstance().getTabController().finish(); } diff --git a/app/src/main/res/anim/fade_in.xml b/app/src/main/res/anim/fade_in.xml index b9abe68c..d35de463 100755 --- a/app/src/main/res/anim/fade_in.xml +++ b/app/src/main/res/anim/fade_in.xml @@ -1,8 +1,7 @@ - - + - + android:duration="100" + android:fromAlpha="0.5" + android:interpolator="@android:anim/linear_interpolator" + android:toAlpha="1.0" /> \ No newline at end of file diff --git a/app/src/main/res/anim/fade_out.xml b/app/src/main/res/anim/fade_out.xml new file mode 100644 index 00000000..cfc55613 --- /dev/null +++ b/app/src/main/res/anim/fade_out.xml @@ -0,0 +1,7 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_left.xml b/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_left.xml index 1bbce1d6..7c8204ac 100644 --- a/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_left.xml +++ b/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_left.xml @@ -1,5 +1,5 @@ + android:color="@color/c_view_divier_background"> diff --git a/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_right.xml b/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_right.xml index 4d1bff53..dd163480 100644 --- a/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_right.xml +++ b/app/src/main/res/custom-xml/alert/xml/ax_bottom_rounded_corner_right.xml @@ -1,5 +1,5 @@ + android:color="@color/c_ripple"> diff --git a/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_bottom.xml b/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_bottom.xml new file mode 100644 index 00000000..2c2af2ce --- /dev/null +++ b/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_bottom.xml @@ -0,0 +1,13 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_left.xml b/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_left.xml index 4d1bff53..93f43199 100644 --- a/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_left.xml +++ b/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_left.xml @@ -1,11 +1,11 @@ + android:color="@color/c_ripple"> diff --git a/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_right.xml b/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_right.xml index 1bbce1d6..e399ab35 100644 --- a/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_right.xml +++ b/app/src/main/res/custom-xml/alert/xml/ax_ripple_default_round_right.xml @@ -1,11 +1,11 @@ + android:color="@color/c_ripple"> - + diff --git a/app/src/main/res/custom-xml/generic/xml/gx_generic_input.xml b/app/src/main/res/custom-xml/generic/xml/gx_generic_input.xml index 5238b973..d754f0a2 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_generic_input.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_generic_input.xml @@ -5,7 +5,7 @@ android:top="113dp"> - + @@ -13,7 +13,7 @@ android:top="113dp"> - + diff --git a/app/src/main/res/custom-xml/generic/xml/gx_generic_input_square.xml b/app/src/main/res/custom-xml/generic/xml/gx_generic_input_square.xml new file mode 100644 index 00000000..4de0ff64 --- /dev/null +++ b/app/src/main/res/custom-xml/generic/xml/gx_generic_input_square.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + 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 74e94289..51946e32 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 @@ -4,26 +4,26 @@ + android:shape="rectangle" android:padding="15dp" > - + + android:color="@color/c_tab_border" /> + android:shape="rectangle" android:padding="15dp" > - + + android:width="2dp" + android:color="@color/c_text_v5" /> diff --git a/app/src/main/res/custom-xml/generic/xml/gx_ripple_blue.xml b/app/src/main/res/custom-xml/generic/xml/gx_ripple_blue.xml index 24aa3de5..72ae4dc1 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_ripple_blue.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_ripple_blue.xml @@ -1,5 +1,5 @@ + android:color="@color/c_ripple"> diff --git a/app/src/main/res/custom-xml/generic/xml/gx_ripple_default_round.xml b/app/src/main/res/custom-xml/generic/xml/gx_ripple_default_round.xml index b8468451..29103274 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_ripple_default_round.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_ripple_default_round.xml @@ -1,5 +1,5 @@ + android:color="@color/c_ripple"> diff --git a/app/src/main/res/custom-xml/generic/xml/gx_ripple_gray.xml b/app/src/main/res/custom-xml/generic/xml/gx_ripple_gray.xml index f1635852..ef31b852 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_ripple_gray.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_ripple_gray.xml @@ -1,5 +1,5 @@ + android:color="@color/c_ripple"> diff --git a/app/src/main/res/custom-xml/generic/xml/gx_rounded_corner_alert.xml b/app/src/main/res/custom-xml/generic/xml/gx_rounded_corner_alert.xml index 1b5be0c7..2b54d45f 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_rounded_corner_alert.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_rounded_corner_alert.xml @@ -12,8 +12,8 @@ diff --git a/app/src/main/res/custom-xml/generic/xml/gx_side_item.xml b/app/src/main/res/custom-xml/generic/xml/gx_side_item.xml index f979fa51..58185999 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_side_item.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_side_item.xml @@ -1,6 +1,6 @@ + android:color="@color/c_ripple_v1"> diff --git a/app/src/main/res/custom-xml/generic/xml/gx_side_item_bottom.xml b/app/src/main/res/custom-xml/generic/xml/gx_side_item_bottom.xml index 6b34449e..4debc24a 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_side_item_bottom.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_side_item_bottom.xml @@ -1,6 +1,6 @@ + android:color="@color/c_ripple_v1"> diff --git a/app/src/main/res/custom-xml/generic/xml/gx_side_item_popup.xml b/app/src/main/res/custom-xml/generic/xml/gx_side_item_popup.xml index d15d3b96..20206895 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_side_item_popup.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_side_item_popup.xml @@ -4,17 +4,17 @@ - + + android:color="@color/c_view_divier_background" /> + android:topRightRadius="4dp"/> @@ -22,22 +22,22 @@ - + + android:color="@color/c_view_divier_background" /> + android:topRightRadius="4dp"/> diff --git a/app/src/main/res/custom-xml/generic/xml/gx_side_item_top.xml b/app/src/main/res/custom-xml/generic/xml/gx_side_item_top.xml index fdec7461..b10097de 100644 --- a/app/src/main/res/custom-xml/generic/xml/gx_side_item_top.xml +++ b/app/src/main/res/custom-xml/generic/xml/gx_side_item_top.xml @@ -1,9 +1,9 @@ + android:color="@color/c_ripple_v1"> - + - + + android:color="@color/c_view_divier_background" /> + android:topRightRadius="4dp"/> @@ -22,22 +22,22 @@ - + + android:color="@color/c_view_divier_background" /> + android:topRightRadius="4dp"/> diff --git a/app/src/main/res/custom-xml/history/xml/hx_border.xml b/app/src/main/res/custom-xml/history/xml/hx_border.xml index c6b41317..900b4ffc 100644 --- a/app/src/main/res/custom-xml/history/xml/hx_border.xml +++ b/app/src/main/res/custom-xml/history/xml/hx_border.xml @@ -2,12 +2,12 @@ - + - + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/history/xml/hx_circle_favicon.xml b/app/src/main/res/custom-xml/history/xml/hx_circle_favicon.xml index 85096710..e573e69e 100644 --- a/app/src/main/res/custom-xml/history/xml/hx_circle_favicon.xml +++ b/app/src/main/res/custom-xml/history/xml/hx_circle_favicon.xml @@ -2,7 +2,7 @@ + android:startColor="@color/c_profile_radial_inner" android:endColor="@color/c_profile_radial_outer" /> + android:color="@color/c_alert_background" android:layout_height="match_parent" android:layout_width="match_parent"> - + + android:color="@color/c_alert_background" /> - + + android:color="@color/c_alert_background" /> diff --git a/app/src/main/res/custom-xml/history/xml/hx_menu_popup_container.xml b/app/src/main/res/custom-xml/history/xml/hx_menu_popup_container.xml index b63c9dac..a3fc13da 100644 --- a/app/src/main/res/custom-xml/history/xml/hx_menu_popup_container.xml +++ b/app/src/main/res/custom-xml/history/xml/hx_menu_popup_container.xml @@ -12,7 +12,7 @@ android:right="1dp" android:top="1dp" /> - + - + - + - + - + - + - + - + - + - + - + - + - + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner.xml b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner.xml index 6802f78b..ca8356ce 100644 --- a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner.xml +++ b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner.xml @@ -12,8 +12,8 @@ diff --git a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_container.xml b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_container.xml new file mode 100644 index 00000000..ab1575f0 --- /dev/null +++ b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_container.xml @@ -0,0 +1,11 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_container_bottom.xml b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_container_bottom.xml new file mode 100644 index 00000000..2a485e68 --- /dev/null +++ b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_container_bottom.xml @@ -0,0 +1,15 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_splash.xml b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_splash.xml new file mode 100644 index 00000000..426be64b --- /dev/null +++ b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_splash.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_suggestion_settings.xml b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_suggestion_settings.xml index 13e3357c..26aed53a 100644 --- a/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_suggestion_settings.xml +++ b/app/src/main/res/custom-xml/home/xml/hox_rounded_corner_suggestion_settings.xml @@ -1,6 +1,6 @@ + android:color="@color/text_color_v1"> @@ -12,8 +12,8 @@ diff --git a/app/src/main/res/custom-xml/images/xml/ic_baseline_add.xml b/app/src/main/res/custom-xml/images/xml/ic_baseline_add.xml new file mode 100644 index 00000000..eb232541 --- /dev/null +++ b/app/src/main/res/custom-xml/images/xml/ic_baseline_add.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/custom-xml/images/xml/ic_baseline_bookmark.xml b/app/src/main/res/custom-xml/images/xml/ic_baseline_bookmark.xml new file mode 100644 index 00000000..b6d93cac --- /dev/null +++ b/app/src/main/res/custom-xml/images/xml/ic_baseline_bookmark.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/custom-xml/images/xml/ic_baseline_bug.xml b/app/src/main/res/custom-xml/images/xml/ic_baseline_bug.xml new file mode 100644 index 00000000..7853f61c --- /dev/null +++ b/app/src/main/res/custom-xml/images/xml/ic_baseline_bug.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/custom-xml/images/xml/ic_baseline_cross.xml b/app/src/main/res/custom-xml/images/xml/ic_baseline_cross.xml new file mode 100644 index 00000000..16d6d37d --- /dev/null +++ b/app/src/main/res/custom-xml/images/xml/ic_baseline_cross.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/custom-xml/images/xml/ic_baseline_delete.xml b/app/src/main/res/custom-xml/images/xml/ic_baseline_delete.xml new file mode 100644 index 00000000..b0b1d8d0 --- /dev/null +++ b/app/src/main/res/custom-xml/images/xml/ic_baseline_delete.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/custom-xml/images/xml/ic_secondary_gradinet.xml b/app/src/main/res/custom-xml/images/xml/ic_secondary_gradinet.xml index c20cd60c..59187ce1 100644 --- a/app/src/main/res/custom-xml/images/xml/ic_secondary_gradinet.xml +++ b/app/src/main/res/custom-xml/images/xml/ic_secondary_gradinet.xml @@ -3,8 +3,8 @@ - - + + diff --git a/app/src/main/res/custom-xml/orbot_log/xml/olx_rounded_corner_warning.xml b/app/src/main/res/custom-xml/orbot_log/xml/olx_rounded_corner_warning.xml new file mode 100644 index 00000000..c3d5caf0 --- /dev/null +++ b/app/src/main/res/custom-xml/orbot_log/xml/olx_rounded_corner_warning.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/setting/xml/sx_border_left.xml b/app/src/main/res/custom-xml/setting/xml/sx_border_left.xml new file mode 100644 index 00000000..c2faa39f --- /dev/null +++ b/app/src/main/res/custom-xml/setting/xml/sx_border_left.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/setting/xml/sx_button_round.xml b/app/src/main/res/custom-xml/setting/xml/sx_button_round.xml new file mode 100644 index 00000000..ed43521b --- /dev/null +++ b/app/src/main/res/custom-xml/setting/xml/sx_button_round.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/custom-xml/setting/xml/sx_font_change_round_background.xml b/app/src/main/res/custom-xml/setting/xml/sx_font_change_round_background.xml new file mode 100644 index 00000000..47824208 --- /dev/null +++ b/app/src/main/res/custom-xml/setting/xml/sx_font_change_round_background.xml @@ -0,0 +1,15 @@ + + + + + + + + + + diff --git a/app/src/main/res/custom-xml/setting/xml/sx_seekbar_trail.xml b/app/src/main/res/custom-xml/setting/xml/sx_seekbar_trail.xml new file mode 100644 index 00000000..527edf49 --- /dev/null +++ b/app/src/main/res/custom-xml/setting/xml/sx_seekbar_trail.xml @@ -0,0 +1,8 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/custom-xml/tab/xml/tx_border_round_geckoview.xml b/app/src/main/res/custom-xml/tab/xml/tx_border_round_geckoview.xml new file mode 100644 index 00000000..f0ebe3cb --- /dev/null +++ b/app/src/main/res/custom-xml/tab/xml/tx_border_round_geckoview.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/empty_bookmark.png b/app/src/main/res/drawable-hdpi/empty_bookmark.png index 282b5daf..311ea592 100644 Binary files a/app/src/main/res/drawable-hdpi/empty_bookmark.png and b/app/src/main/res/drawable-hdpi/empty_bookmark.png differ diff --git a/app/src/main/res/drawable-hdpi/empty_history.png b/app/src/main/res/drawable-hdpi/empty_history.png index 1e6642e2..397f0170 100644 Binary files a/app/src/main/res/drawable-hdpi/empty_history.png and b/app/src/main/res/drawable-hdpi/empty_history.png differ diff --git a/app/src/main/res/drawable-hdpi/genesis_logo.png b/app/src/main/res/drawable-hdpi/genesis_logo.png new file mode 100644 index 00000000..f3af780c Binary files /dev/null and b/app/src/main/res/drawable-hdpi/genesis_logo.png differ diff --git a/app/src/main/res/drawable/ic_baseline_accessibility.xml b/app/src/main/res/drawable/ic_baseline_accessibility.xml new file mode 100644 index 00000000..f29b9ce8 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_accessibility.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_advance.xml b/app/src/main/res/drawable/ic_baseline_advance.xml new file mode 100644 index 00000000..f4916f73 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_advance.xml @@ -0,0 +1,13 @@ + + + + diff --git a/app/src/main/res/drawable/ic_baseline_browser.xml b/app/src/main/res/drawable/ic_baseline_browser.xml new file mode 100644 index 00000000..3f70646b --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_browser.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_clear.xml b/app/src/main/res/drawable/ic_baseline_clear.xml new file mode 100644 index 00000000..60b9c1d5 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_clear.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_home.xml b/app/src/main/res/drawable/ic_baseline_home.xml new file mode 100644 index 00000000..3a4c7dac --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_home.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_notifications.xml b/app/src/main/res/drawable/ic_baseline_notifications.xml new file mode 100644 index 00000000..c3204226 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_notifications.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_privacy.xml b/app/src/main/res/drawable/ic_baseline_privacy.xml new file mode 100644 index 00000000..99e31f21 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_privacy.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/drawable/ic_baseline_search.xml b/app/src/main/res/drawable/ic_baseline_search.xml new file mode 100644 index 00000000..07b76d62 --- /dev/null +++ b/app/src/main/res/drawable/ic_baseline_search.xml @@ -0,0 +1,10 @@ + + + diff --git a/app/src/main/res/layouts/alert/layout/popup_abi_error.xml b/app/src/main/res/layouts/alert/layout/popup_abi_error.xml index d5eae4d9..91d138ad 100644 --- a/app/src/main/res/layouts/alert/layout/popup_abi_error.xml +++ b/app/src/main/res/layouts/alert/layout/popup_abi_error.xml @@ -27,7 +27,7 @@ android:paddingStart="15dp" android:text="@string/ALERT_ABI_ERROR" android:textAlignment="textStart" - android:textColor="@color/secondary" + android:textColor="@color/c_text_setting_heading_v2" android:textSize="17sp" android:textStyle="bold" app:layout_constraintStart_toStartOf="parent" @@ -46,7 +46,7 @@ android:paddingStart="15dp" android:textSize="13sp" app:layout_constraintEnd_toEndOf="parent" - android:textColor="#242B64" + android:textColor="@color/c_text_v1" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/pHeader" tools:ignore="SmallSp" /> @@ -56,7 +56,7 @@ android:layout_width="match_parent" android:layout_height="1dp" android:layout_marginTop="35dp" - android:background="@color/holo_gray_light" + android:background="@color/c_view_divier_background" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/pDescription" /> @@ -75,11 +75,11 @@ android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_weight="1" - android:background="@xml/ax_ripple_default_round_right" + android:background="@xml/ax_ripple_default_round_left" android:padding="0dp" android:text="@string/ALERT_LOCAL_UPGRADE" android:textAllCaps="false" - android:textColor="@color/cursor_blue" + android:textColor="@color/c_button_text_v1" android:textSize="15sp" android:textStyle="bold" /> @@ -87,7 +87,7 @@ android:id="@+id/pDividerHorizontal" android:layout_width="1dp" android:layout_height="match_parent" - android:background="@color/holo_gray_light" + android:background="@color/c_view_divier_background" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@+id/pRating" /> @@ -101,7 +101,7 @@ android:padding="0dp" android:text="@string/ALERT_PLAYSTORE_UPGRADE" android:textAllCaps="false" - android:textColor="@color/cursor_blue" + android:textColor="@color/c_button_text_v1" android:textSize="15sp" android:textStyle="bold" /> 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 1c15c43c..c1056483 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 @@ -1,108 +1,111 @@ +xmlns:android="http://schemas.android.com/apk/res/android" +xmlns:app="http://schemas.android.com/apk/res-auto" +xmlns:tools="http://schemas.android.com/tools" +android:layout_width="match_parent" +android:layout_height="match_parent"> - + + + app:layout_constraintTop_toTopOf="parent" /> - + - + + + +