package com.example.agathe.tsgtest.carpooling; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.support.annotation.Nullable; import android.support.design.widget.FloatingActionButton; import android.support.design.widget.TabLayout; import android.support.v4.app.FragmentTransaction; import android.support.v7.app.ActionBar; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.Toolbar; import android.support.v4.app.Fragment; import android.support.v4.app.FragmentManager; import android.support.v4.app.FragmentPagerAdapter; import android.support.v4.view.ViewPager; import android.os.Bundle; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; import com.example.agathe.tsgtest.R; import com.example.agathe.tsgtest.SettingsActivity; import com.example.agathe.tsgtest.SettingsFragment; import com.example.agathe.tsgtest.database.AllPathsUserTask; import com.example.agathe.tsgtest.dto.CommonTravel; import com.example.agathe.tsgtest.dto.User; import com.google.android.gms.maps.CameraUpdate; import com.google.android.gms.maps.CameraUpdateFactory; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; import com.google.android.gms.maps.SupportMapFragment; import com.google.android.gms.maps.model.BitmapDescriptorFactory; import com.google.android.gms.maps.model.LatLng; import com.google.android.gms.maps.model.LatLngBounds; import com.google.android.gms.maps.model.Marker; import com.google.android.gms.maps.model.MarkerOptions; import java.util.ArrayList; import java.util.List; import java.util.concurrent.ExecutionException; public class PurposeActivity extends AppCompatActivity { private SectionsPagerAdapter mSectionsPagerAdapter; private static View view; private ViewPager mViewPager; final ArrayList<CommonTravel> travels = new ArrayList<CommonTravel>(); private SharedPreferences settings = null; private SharedPreferences.Editor editor = null; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_purpose); Toolbar toolbar = (Toolbar) findViewById(R.id.my_toolbar_carpoolers); setSupportActionBar(toolbar); // Get a support ActionBar corresponding to this toolbar ActionBar ab = getSupportActionBar(); ab.setDisplayHomeAsUpEnabled(true); // Initialize trajects and users, just for test // After, these informations will be provided by API based on NoSQL database which contains all trajects of users ArrayList<User> users1 = new ArrayList<User>() {{ add(new User("Marilyne Beaumont", "closed friend", "0612345678")); add(new User("Jean Delaroche", "closed friend", "0612345678")); add(new User("Sandra Rouget", "closed work relation", "0612345678")); add(new User("Georges Mourin", "known people", "0612345678")); }}; ArrayList<User> users2 = new ArrayList<User>() {{ add(new User("Jules Noyelles", "closed friend", "0612345678")); add(new User("Léa Dallenne", "family relation", "0612345678")); add(new User("Caroline Dumoulin", "closed work relation", "0612345678")); add(new User("Paul Martin", "known relation", "0612345678")); }}; ArrayList<User> users3 = new ArrayList<User>() {{ add(new User("Hélèna de Lila", "closed friend", "0612345678")); add(new User("Claude Sapin", "closed friend", "0612345678")); add(new User("Mélanie Lapin", "closed work relation", "0612345678")); add(new User("Hector Sauvage", "known people", "0612345678")); }}; travels.add(new CommonTravel("178 rue Nationale, 59000 LILLE", "195 rue de Paris, 59000 LILLE", new LatLng(50.632752, 3.052427), new LatLng(50.631714, 3.068285), users1)); travels.add(new CommonTravel("178 rue Nationale, 59000 LILLE", "1 Avenue du Pont de Bois, 59650 Villeneuve-d'Ascq", new LatLng(50.632752, 3.052427), new LatLng(50.625480, 3.126518), users2)); travels.add(new CommonTravel("178 rue Nationale, 59000 LILLE", "2 Avenue de la Porte Molitor, 75016 Paris", new LatLng(50.632752, 3.052427), new LatLng(48.833079, 2.265492), users3)); mSectionsPagerAdapter = new SectionsPagerAdapter(getSupportFragmentManager(),travels); // Set up the ViewPager with the sections adapter. mViewPager = (ViewPager) findViewById(R.id.container); mViewPager.setAdapter(mSectionsPagerAdapter); PageListener pageListener = new PageListener(); mViewPager.setOnPageChangeListener(pageListener); // Give the TabLayout the ViewPager TabLayout mTabLayout = (TabLayout) findViewById(R.id.sliding_tabs); mTabLayout.setupWithViewPager(mViewPager); for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) { mTabLayout.getTabAt(i).setText("Path #" + String.valueOf(i + 1)); } FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); fab.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(PurposeActivity.this, PotentialCarpoolersActivity.class); intent.putExtra("pageNumber", currentPage); intent.putParcelableArrayListExtra("travels", travels); startActivity(intent); } }); findTravels(); } public void findTravels() { settings = getSharedPreferences("PREFERENCES_FILE", Context.MODE_PRIVATE); editor = settings.edit(); String clientId = settings.getString("userID", ""); ArrayList<CommonTravel> list = null; // On cherche tous les trajets de l'utilisateur try { list = new AllPathsUserTask("path", clientId, getApplicationContext()).execute().get(); if (list != null) { // travels = list; } } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_main, menu); return true; } @Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.action_about: android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(this); builder.setMessage(R.string.dialog_message).setTitle(R.string.app_name); builder.setPositiveButton(R.string.dialog_ok, null); builder.setIcon(R.mipmap.ic_launcher); android.support.v7.app.AlertDialog dialog = builder.create(); dialog.show(); return true; case R.id.action_main_settings: Intent intent = new Intent(PurposeActivity.this, SettingsActivity.class); startActivity(intent); return true; default: // If we got here, the user's action was not recognized. // Invoke the superclass to handle it. return super.onOptionsItemSelected(item); } } /** * A placeholder fragment containing a simple view. */ public static class PlaceholderFragment extends Fragment { /** * The fragment argument representing the section number for this * fragment. */ private static final String ARG_SECTION_NUMBER = "section_number"; private static ArrayList<CommonTravel> travels = new ArrayList<>(); public PlaceholderFragment() { } /** * Returns a new instance of this fragment for the given section * number. */ public static PlaceholderFragment newInstance(int sectionNumber, ArrayList<CommonTravel> travels) { PlaceholderFragment fragment = new PlaceholderFragment(); Bundle args = new Bundle(); args.putInt(ARG_SECTION_NUMBER, sectionNumber); args.putParcelableArrayList("travels", travels); fragment.setArguments(args); return fragment; } @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { travels = getArguments().getParcelableArrayList("travels"); view = inflater.inflate(R.layout.activity_maps, container, false); TextView departure = (TextView) view.findViewById(R.id.departure_place); TextView destination = (TextView) view.findViewById(R.id.destination_place); departure.setText(travels.get(getArguments().getInt(ARG_SECTION_NUMBER) - 1).departure); destination.setText(travels.get(getArguments().getInt(ARG_SECTION_NUMBER) - 1).destination); return view; } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); FragmentManager fm = getChildFragmentManager(); SupportMapFragment mapFragment = (SupportMapFragment) fm.findFragmentByTag("mapFragment"); if (mapFragment == null) { mapFragment = new SupportMapFragment(); FragmentTransaction ft = fm.beginTransaction(); ft.add(R.id.mapFragmentContainer, mapFragment, "mapFragment"); ft.commit(); fm.executePendingTransactions(); } mapFragment.getMapAsync(new OnMapReadyCallback() { @Override public void onMapReady(GoogleMap googleMap) { GoogleMap mMap = googleMap; LatLng departure = travels.get(getArguments().getInt(ARG_SECTION_NUMBER) - 1).departurePosition; LatLng destination = travels.get(getArguments().getInt(ARG_SECTION_NUMBER) - 1).destinationPosition; List<Marker> markers = new ArrayList<Marker>(); markers.add(mMap.addMarker(new MarkerOptions().position(departure).title("Departure"))); markers.add(mMap.addMarker(new MarkerOptions().position(destination) .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_AZURE)) .title("Destination"))); LatLngBounds.Builder builder = new LatLngBounds.Builder(); for (Marker marker : markers) { builder.include(marker.getPosition()); } LatLngBounds bounds = builder.build(); int padding = 30; // offset from edges of the map in pixels CameraUpdate cu = CameraUpdateFactory.newLatLngBounds(bounds, padding); googleMap.moveCamera(cu); } }); } } /** * A {@link FragmentPagerAdapter} that returns a fragment corresponding to * one of the sections/tabs/pages. */ public class SectionsPagerAdapter extends FragmentPagerAdapter { ArrayList<CommonTravel> mTravels = null; public SectionsPagerAdapter(FragmentManager fm, ArrayList<CommonTravel> travels) { super(fm); mTravels = travels; } @Override public Fragment getItem(int position) { // getItem is called to instantiate the fragment for the given page. // Return a PlaceholderFragment (defined as a static inner class below). return new PlaceholderFragment().newInstance(position + 1, mTravels); } @Override public int getCount() { return 3; } } private static int currentPage; private static class PageListener extends ViewPager.SimpleOnPageChangeListener { public void onPageSelected(int position) { currentPage = position; } } }