diff --git a/app/src/main/java/com/frankenstein/screenx/MainActivity.java b/app/src/main/java/com/frankenstein/screenx/MainActivity.java index 46986d6..c3785fa 100644 --- a/app/src/main/java/com/frankenstein/screenx/MainActivity.java +++ b/app/src/main/java/com/frankenstein/screenx/MainActivity.java @@ -24,6 +24,8 @@ import androidx.viewpager2.widget.ViewPager2; import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; import android.content.Intent; @@ -32,6 +34,7 @@ import com.frankenstein.screenx.models.AppGroup; import com.frankenstein.screenx.models.Screenshot; import com.frankenstein.screenx.ui.adapters.HomePageAdapter; +import com.frankenstein.screenx.ui.adapters.OnboardingPageAdapter; import com.frankenstein.screenx.ui.adapters.PermissionPageAdapter; import com.google.android.material.tabs.TabLayout; import com.google.android.material.tabs.TabLayoutMediator; @@ -52,8 +55,16 @@ public class MainActivity extends AppCompatActivity { private SwipeRefreshLayout _pullToRefresh; private View _mProgressBar; private View _mPermissionsDisplay; + private View _mOnboardingDisplay; private PermissionPageAdapter _mPermissionPageAdapter; + private OnboardingPageAdapter _mOnboardingPageAdapter; private AlertDialog.Builder _mAlertBuilder; + private Map _mDisplayMap = new HashMap<>(); + + private static final String PERMISSION_DISPLAY="PERMISSION_DISPLAY"; + private static final String ONBOARDING_DISPLAY="ONBOARDING_DISPLAY"; + private static final String PROGRESS_DISPLAY="PROGRESS_DISPLAY"; + private static final String HOMEPAGE_DISPLAY="HOMEPAGE_DISPLAY"; private boolean _mPermissionsGranted = false; private Handler _mHandler; @@ -72,6 +83,7 @@ public class MainActivity extends AppCompatActivity { private HomePageState _mPrevState = HomePageState.REQUEST_PERMISSIONS; private enum HomePageState { REQUEST_PERMISSIONS, + ONBOARDING_SCREEN, LOADING_PROGRESS_BAR, NO_CONTENT_SCREEN, DISPLAY_CONTENT, @@ -101,6 +113,12 @@ protected void onCreate(Bundle savedInstanceState) { _mProgressBar = findViewById(R.id.progress_bar); _mPermissionsDisplay = findViewById(R.id.permissions_display); + _mOnboardingDisplay = findViewById(R.id.onboarding_display); + + _mDisplayMap.put(PERMISSION_DISPLAY, _mPermissionsDisplay); + _mDisplayMap.put(ONBOARDING_DISPLAY, _mOnboardingDisplay); + _mDisplayMap.put(PROGRESS_DISPLAY, _mProgressBar); + _mDisplayMap.put(HOMEPAGE_DISPLAY, _mHomePageContentLayout); _mAlertBuilder = new AlertDialog.Builder(this); setupSearchBar(); @@ -131,6 +149,9 @@ private void onStateChange(HomePageState newState) { case REQUEST_PERMISSIONS: showRequestPermissionsScreen(); break; + case ONBOARDING_SCREEN: + showOnboardingScreen(); + break; case LOADING_PROGRESS_BAR: showProgressBar(); break; @@ -147,21 +168,30 @@ private void onStateChange(HomePageState newState) { _mPrevState = newState; } + private void bringDisplayIntoView(String displayName) { + View display = _mDisplayMap.get(displayName); + for (View v: _mDisplayMap.values()) { + v.setVisibility(View.GONE); + } + display.setVisibility(View.VISIBLE); + } + private void showRequestPermissionsScreen() { _mPermissionsGranted = false; - _mPermissionsDisplay.setVisibility(View.VISIBLE); - _mProgressBar.setVisibility(View.GONE); - _mHomePageContentEmpty.setVisibility(View.GONE); + bringDisplayIntoView(PERMISSION_DISPLAY); checkPermissions(); } + private void showOnboardingScreen() { + createOnboardingAdapter(); + bringDisplayIntoView(ONBOARDING_DISPLAY); + } + private void showProgressBar() { _mPermissionsGranted = true; + bringDisplayIntoView(PROGRESS_DISPLAY); _mHomePageContentLayout.setAlpha(0); _mHomePageContentLayout.setVisibility(View.VISIBLE); - _mPermissionsDisplay.setVisibility(View.GONE); - _mProgressBar.setVisibility(View.VISIBLE); - _mLogger.log("Initializing Screenshots"); createIfNot(CUSTOM_SCREENSHOT_DIR); refresh(); @@ -312,13 +342,24 @@ private void createPermissionAdapter() { new TabLayoutMediator(permissionTabLayout, permissionViewPager, (tab, pos) -> {}).attach(); } + private void createOnboardingAdapter() { + if (_mOnboardingPageAdapter != null) + return; + ViewPager2 onboardingViewPager = findViewById(R.id.onboarding_view_pager); + _mOnboardingPageAdapter = new OnboardingPageAdapter(this, this); + onboardingViewPager.setAdapter(_mOnboardingPageAdapter); + TabLayout permissionTabLayout = findViewById(R.id.onboarding_tab_layout); + new TabLayoutMediator(permissionTabLayout, onboardingViewPager, (tab, pos) -> {}).attach(); + } + public void checkPermissions() { boolean hasStoragePermission = PermissionHelper.hasStoragePermission(this); boolean hasUsagePermission = PermissionHelper.hasUsagePermission(this); if (hasStoragePermission && hasUsagePermission) { _mLogger.log("Has all the permissions"); - _mState.setValue(HomePageState.LOADING_PROGRESS_BAR); + _mState.setValue(HomePageState.ONBOARDING_SCREEN); +// _mState.setValue(HomePageState.LOADING_PROGRESS_BAR); return; } diff --git a/app/src/main/java/com/frankenstein/screenx/models/OnboardingDetail.java b/app/src/main/java/com/frankenstein/screenx/models/OnboardingDetail.java new file mode 100644 index 0000000..8c858fa --- /dev/null +++ b/app/src/main/java/com/frankenstein/screenx/models/OnboardingDetail.java @@ -0,0 +1,22 @@ +package com.frankenstein.screenx.models; + + +import android.graphics.drawable.Drawable; + +import androidx.lifecycle.MutableLiveData; + +public class OnboardingDetail { + public String name; + public String title1; + public String title2; + public Drawable drawable; + public String description; + + public OnboardingDetail(String name, String title1, String title2, Drawable drawable, String description) { + this.name = name; + this.title1 = title1; + this.title2 = title2; + this.drawable = drawable; + this.description = description; + } +} diff --git a/app/src/main/java/com/frankenstein/screenx/ui/OnboardingDetailFragment.java b/app/src/main/java/com/frankenstein/screenx/ui/OnboardingDetailFragment.java new file mode 100644 index 0000000..5787532 --- /dev/null +++ b/app/src/main/java/com/frankenstein/screenx/ui/OnboardingDetailFragment.java @@ -0,0 +1,55 @@ +package com.frankenstein.screenx.ui; + +import android.os.Bundle; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.frankenstein.screenx.R; +import com.frankenstein.screenx.helper.Logger; +import com.frankenstein.screenx.models.OnboardingDetail; +import com.frankenstein.screenx.ui.adapters.OnboardingPageAdapter; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.Fragment; + +public class OnboardingDetailFragment extends Fragment { + private OnboardingDetail _mDetail; + private TextView _mTitle1; + private TextView _mTitle2; + private TextView _mDescription; + private ImageView _mImage; + private static final Logger _mLogger = Logger.getInstance("OnboardingDetailFragment"); + public static final String ONBOARDING_DETAIL_NAME = "ONBOARDING_DETAIL_NAME"; + + public OnboardingDetailFragment () { + super(); + } + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, Bundle savedInstanceState) { + super.onCreateView(inflater, container, savedInstanceState); + View view = inflater.inflate(R.layout.homepage_onboarding_component, container, false); + _mTitle1 = view.findViewById(R.id.title1); + _mTitle2 = view.findViewById(R.id.title2); + _mDescription = view.findViewById(R.id.description); + _mImage = view.findViewById(R.id.image); + Bundle bundle = getArguments(); + String permissionName = bundle.getString(ONBOARDING_DETAIL_NAME ); + _mDetail = OnboardingPageAdapter.detailsMap.get(permissionName); + return view; + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + _mTitle1.setText(_mDetail.title1); + _mTitle2.setText(_mDetail.title2); + _mDescription.setText(_mDetail.description); + _mImage.setImageDrawable(_mDetail.drawable); + super.onViewCreated(view, savedInstanceState); + } +} diff --git a/app/src/main/java/com/frankenstein/screenx/ui/adapters/OnboardingPageAdapter.java b/app/src/main/java/com/frankenstein/screenx/ui/adapters/OnboardingPageAdapter.java new file mode 100644 index 0000000..7a57b5d --- /dev/null +++ b/app/src/main/java/com/frankenstein/screenx/ui/adapters/OnboardingPageAdapter.java @@ -0,0 +1,71 @@ +package com.frankenstein.screenx.ui.adapters; + +import android.content.Context; +import android.os.Bundle; + +import com.frankenstein.screenx.R; +import com.frankenstein.screenx.helper.Logger; +import com.frankenstein.screenx.models.OnboardingDetail; +import com.frankenstein.screenx.ui.OnboardingDetailFragment; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Map; + +import androidx.annotation.NonNull; +import androidx.fragment.app.Fragment; +import androidx.fragment.app.FragmentActivity; +import androidx.viewpager2.adapter.FragmentStateAdapter; + +public class OnboardingPageAdapter extends FragmentStateAdapter { + + private Logger _logger = Logger.getInstance("OnboardingPageAdapter"); + public static final Map detailsMap = new HashMap<>(); + private final ArrayList _detailOrder = new ArrayList<>(); + public static final String THEPROBLEM_PAGE = "THEPROBLEM_PAGE"; + public static final String SEARCH_PAGE = "SEARCH_PAGE"; + public static final String ORGANIZE_PAGE = "ORGANIZE_PAGE"; + + public OnboardingPageAdapter(FragmentActivity fa, Context context) { + super(fa); + detailsMap.put(THEPROBLEM_PAGE,new OnboardingDetail( + THEPROBLEM_PAGE, + context.getResources().getString(R.string.onboarding_theproblem_title1), + context.getResources().getString(R.string.onboarding_theproblem_title2), + context.getResources().getDrawable(R.drawable.ic_woman_on_photo), + context.getResources().getString(R.string.onboarding_theproblem_description))); + detailsMap.put(SEARCH_PAGE,new OnboardingDetail( + SEARCH_PAGE, + context.getResources().getString(R.string.onboarding_search_title1), + context.getResources().getString(R.string.onboarding_search_title2), + context.getResources().getDrawable(R.drawable.ic_woman_with_binoculars), + context.getResources().getString(R.string.onboarding_search_description))); + detailsMap.put(ORGANIZE_PAGE,new OnboardingDetail( + ORGANIZE_PAGE, + context.getResources().getString(R.string.onboarding_organize_title1), + context.getResources().getString(R.string.onboarding_organize_title2), + context.getResources().getDrawable(R.drawable.ic_man_with_folders), + context.getResources().getString(R.string.onboarding_organize_description) + )); + _detailOrder.add(THEPROBLEM_PAGE); + _detailOrder.add(SEARCH_PAGE); + _detailOrder.add(ORGANIZE_PAGE); + } + + @Override + public int getItemCount() { + return _detailOrder.size(); + } + + @NonNull + @Override + public Fragment createFragment(int position) { + _logger.log("View Pager Instantiating item", position); + String detailName = _detailOrder.get(position); + OnboardingDetailFragment fragment = new OnboardingDetailFragment(); + Bundle bundle = new Bundle(); + bundle.putString(OnboardingDetailFragment.ONBOARDING_DETAIL_NAME, detailName); + fragment.setArguments(bundle); + return fragment; + } +} diff --git a/app/src/main/res/drawable/ic_blue_bg.xml b/app/src/main/res/drawable/ic_blue_bg.xml new file mode 100644 index 0000000..53f7e16 --- /dev/null +++ b/app/src/main/res/drawable/ic_blue_bg.xml @@ -0,0 +1,351 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_green_bg.xml b/app/src/main/res/drawable/ic_green_bg.xml new file mode 100644 index 0000000..673916d --- /dev/null +++ b/app/src/main/res/drawable/ic_green_bg.xml @@ -0,0 +1,350 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_guy_standing_with_phone.xml b/app/src/main/res/drawable/ic_guy_standing_with_phone.xml new file mode 100644 index 0000000..882acb5 --- /dev/null +++ b/app/src/main/res/drawable/ic_guy_standing_with_phone.xml @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_guy_standing_with_phone_nobg.xml b/app/src/main/res/drawable/ic_guy_standing_with_phone_nobg.xml new file mode 100644 index 0000000..1cffbb5 --- /dev/null +++ b/app/src/main/res/drawable/ic_guy_standing_with_phone_nobg.xml @@ -0,0 +1,474 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_guy_walking_with_phone.xml b/app/src/main/res/drawable/ic_guy_walking_with_phone.xml new file mode 100644 index 0000000..b34a53d --- /dev/null +++ b/app/src/main/res/drawable/ic_guy_walking_with_phone.xml @@ -0,0 +1,145 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_hiking_man.xml b/app/src/main/res/drawable/ic_hiking_man.xml new file mode 100644 index 0000000..108f945 --- /dev/null +++ b/app/src/main/res/drawable/ic_hiking_man.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_man_on_way.xml b/app/src/main/res/drawable/ic_man_on_way.xml new file mode 100644 index 0000000..a5cb732 --- /dev/null +++ b/app/src/main/res/drawable/ic_man_on_way.xml @@ -0,0 +1,365 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_onboarding_search.xml b/app/src/main/res/drawable/ic_onboarding_search.xml new file mode 100644 index 0000000..31efca0 --- /dev/null +++ b/app/src/main/res/drawable/ic_onboarding_search.xml @@ -0,0 +1,131 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_pink_bg.xml b/app/src/main/res/drawable/ic_pink_bg.xml new file mode 100644 index 0000000..c9486c5 --- /dev/null +++ b/app/src/main/res/drawable/ic_pink_bg.xml @@ -0,0 +1,321 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_woman_with_binoculars.xml b/app/src/main/res/drawable/ic_woman_with_binoculars.xml new file mode 100644 index 0000000..41c447f --- /dev/null +++ b/app/src/main/res/drawable/ic_woman_with_binoculars.xml @@ -0,0 +1,20 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_woman_with_magnifier.xml b/app/src/main/res/drawable/ic_woman_with_magnifier.xml new file mode 100644 index 0000000..b890abd --- /dev/null +++ b/app/src/main/res/drawable/ic_woman_with_magnifier.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/font/bad_script_regular.ttf b/app/src/main/res/font/bad_script_regular.ttf new file mode 100644 index 0000000..35e3ad6 Binary files /dev/null and b/app/src/main/res/font/bad_script_regular.ttf differ diff --git a/app/src/main/res/font/dancing_script_regular.ttf b/app/src/main/res/font/dancing_script_regular.ttf new file mode 100644 index 0000000..8da293e Binary files /dev/null and b/app/src/main/res/font/dancing_script_regular.ttf differ diff --git a/app/src/main/res/font/poriet_one_regular.ttf b/app/src/main/res/font/poriet_one_regular.ttf new file mode 100644 index 0000000..2da1bcf Binary files /dev/null and b/app/src/main/res/font/poriet_one_regular.ttf differ diff --git a/app/src/main/res/font/titillium_web_extra_light.ttf b/app/src/main/res/font/titillium_web_extra_light.ttf new file mode 100644 index 0000000..2b506ef Binary files /dev/null and b/app/src/main/res/font/titillium_web_extra_light.ttf differ diff --git a/app/src/main/res/font/titillium_web_light.ttf b/app/src/main/res/font/titillium_web_light.ttf new file mode 100644 index 0000000..ca67971 Binary files /dev/null and b/app/src/main/res/font/titillium_web_light.ttf differ diff --git a/app/src/main/res/layout/homepage.xml b/app/src/main/res/layout/homepage.xml index 491f93f..ec38635 100644 --- a/app/src/main/res/layout/homepage.xml +++ b/app/src/main/res/layout/homepage.xml @@ -8,6 +8,8 @@ layout="@layout/homepage_content"/> + diff --git a/app/src/main/res/layout/homepage_onboarding.xml b/app/src/main/res/layout/homepage_onboarding.xml new file mode 100644 index 0000000..6de728c --- /dev/null +++ b/app/src/main/res/layout/homepage_onboarding.xml @@ -0,0 +1,26 @@ + + + + + diff --git a/app/src/main/res/layout/homepage_onboarding_component.xml b/app/src/main/res/layout/homepage_onboarding_component.xml new file mode 100644 index 0000000..266d1cd --- /dev/null +++ b/app/src/main/res/layout/homepage_onboarding_component.xml @@ -0,0 +1,73 @@ + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index ecafdfe..c0b9a21 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -21,7 +21,15 @@ #00c8d7 #00a8b7 + #3DC0CC + #A5B6B7 + + #f9a9af + #a6dd8f + #aae3e0 + + #f5ebdd #00c8d7 #9900c8d7 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index df54ba3..0d0e23f 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -24,6 +24,19 @@ Usage Access Usage permission is needed to organize screenshots into app groups. + // On Boarding Screens + Have + too many screenshots ? + We made this app to search them all and keep them organized + + Search + using text in screenshot + type a word in search bar and find all screenshots which contain that word + + Sort + by app + every app has a separate folder into which all of its screenshots go + Grant Overlay permissions Screenshot feature disabled