Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
55 changes: 48 additions & 7 deletions app/src/main/java/com/frankenstein/screenx/MainActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;

Expand All @@ -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;
Expand All @@ -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<String, View> _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;
Expand All @@ -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,
Expand Down Expand Up @@ -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();
Expand Down Expand Up @@ -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;
Expand All @@ -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();
Expand Down Expand Up @@ -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;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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;
}
}
Original file line number Diff line number Diff line change
@@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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<String, OnboardingDetail> detailsMap = new HashMap<>();
private final ArrayList<String> _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;
}
}
Loading