bgabriel998/SoftwareDevProject

View on GitHub
app/src/main/java/ch/epfl/sdp/peakar/general/MainActivity.java

Summary

Maintainability
A
0 mins
Test Coverage
D
62%
package ch.epfl.sdp.peakar.general;

import android.os.Bundle;
import android.os.StrictMode;

import androidx.appcompat.app.AppCompatActivity;
import androidx.preference.PreferenceManager;
import androidx.viewpager2.adapter.FragmentStateAdapter;
import androidx.viewpager2.widget.ViewPager2;

import org.osmdroid.config.Configuration;

import java.util.Objects;
import java.util.Stack;

import ch.epfl.sdp.peakar.R;
import ch.epfl.sdp.peakar.points.UserPoint;
import ch.epfl.sdp.peakar.utils.MenuBarHandlerFragments;
import ch.epfl.sdp.peakar.utils.MainPagerAdapter;

import static ch.epfl.sdp.peakar.utils.MainPagerAdapter.CAMERA_FRAGMENT_INDEX;
import static ch.epfl.sdp.peakar.utils.PermissionUtilities.hasLocationPermission;

/**
 * MainsActivity displays displays all the different pages with the ViewPager2 and the menu-bar
 */
public class MainActivity extends AppCompatActivity {

    private ViewPager2 viewPager;
    public static Stack<Integer> lastFragmentIndex;
    private boolean locationPermission;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
        Configuration.getInstance().load(this, PreferenceManager.getDefaultSharedPreferences(this));
        setContentView(R.layout.activity_main);
        lastFragmentIndex = new Stack<>();

        viewPager = findViewById(R.id.viewPager);
        FragmentStateAdapter adapterViewPager = new MainPagerAdapter(this);
        viewPager.setAdapter(adapterViewPager);
        viewPager.setOffscreenPageLimit(Objects.requireNonNull(viewPager.getAdapter()).getItemCount());

        Bundle b = getIntent().getExtras();
        viewPager.setCurrentItem(b != null ? b.getInt(getString(R.string.setPagerOnRestart)) : CAMERA_FRAGMENT_INDEX);

        MenuBarHandlerFragments.setup(this, viewPager);
    }

    /**
     * Sets the viewPager to a certain item, used to change the item from the fragments directly
     *
     * @param position new item to be displayed
     */
    public void setCurrentPagerItem(int position){
        if(viewPager!=null){
            viewPager.setCurrentItem(position);
        }
    }

    /**
     * Gets the viewPager current item
     *
     * @return position of current item
     */
    public int getCurrentPagerItem(){
        return viewPager.getCurrentItem();
    }

    @Override
    public void onBackPressed() {
        //Remove duplicates
        if(lastFragmentIndex.size()>=2){
            int lastFragment = lastFragmentIndex.pop();
            int nextFragment = lastFragment == viewPager.getCurrentItem() ? lastFragmentIndex.pop() : lastFragment;
            viewPager.setCurrentItem(nextFragment);
        }
        else{
            super.onBackPressed();
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        locationPermission = hasLocationPermission(this);
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        if(!locationPermission && hasLocationPermission(this)){
            UserPoint userPoint = UserPoint.getInstance(this);
            userPoint.updateGPSTracker(this);
            userPoint.update();
        }
    }
}