Forráskód Böngészése

initial saving of the state of the fragments and a fragment of the event list

felocsss 1 éve
szülő
commit
fee4443725

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
+.idea/
 *.iml
 .gradle
 /local.properties

+ 0 - 17
.idea/deploymentTargetDropDown.xml

@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<project version="4">
-  <component name="deploymentTargetDropDown">
-    <targetSelectedWithDropDown>
-      <Target>
-        <type value="QUICK_BOOT_TARGET" />
-        <deviceKey>
-          <Key>
-            <type value="VIRTUAL_DEVICE_PATH" />
-            <value value="C:\Users\vlads\.android\avd\Pixel_5_API_33.avd" />
-          </Key>
-        </deviceKey>
-      </Target>
-    </targetSelectedWithDropDown>
-    <timeTargetWasSelectedWithDropDown value="2023-04-30T20:54:44.487883800Z" />
-  </component>
-</project>

+ 5 - 0
app/src/main/java/com/sharix/sportsmanfriend/OnBackPressedListener.java

@@ -0,0 +1,5 @@
+package com.sharix.sportsmanfriend;
+
+public interface OnBackPressedListener {
+    void onBackPressed();
+}

+ 5 - 12
app/src/main/java/com/sharix/sportsmanfriend/view/LoginActivity.java

@@ -4,6 +4,7 @@ import androidx.appcompat.app.AppCompatActivity;
 
 import android.content.Intent;
 import android.os.Bundle;
+import android.util.Log;
 import android.view.View;
 import android.widget.Button;
 
@@ -22,19 +23,11 @@ public class LoginActivity extends AppCompatActivity {
         btnNext = findViewById(R.id.btnNext);
         btnGoBack = findViewById(R.id.btnGoBack);
 
-        btnNext.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                Intent intent = new Intent(LoginActivity.this, MainActivity.class);
-                startActivity(intent);
-            }
+        btnNext.setOnClickListener(view -> {
+            Intent intent = new Intent(LoginActivity.this, MainActivity.class);
+            startActivity(intent);
         });
 
-        btnGoBack.setOnClickListener(new View.OnClickListener() {
-            @Override
-            public void onClick(View view) {
-                finish();
-            }
-        });
+        btnGoBack.setOnClickListener(view -> finish());
     }
 }

+ 27 - 33
app/src/main/java/com/sharix/sportsmanfriend/view/MainActivity.java

@@ -2,8 +2,11 @@ package com.sharix.sportsmanfriend.view;
 
 import androidx.appcompat.app.AppCompatActivity;
 import android.os.Bundle;
+import android.preference.PreferenceManager;
 import android.widget.Toast;
 
+import com.sharix.sportsmanfriend.BuildConfig;
+import com.sharix.sportsmanfriend.OnBackPressedListener;
 import com.sharix.sportsmanfriend.R;
 import com.sharix.sportsmanfriend.databinding.ActivityMainBinding;
 import com.sharix.sportsmanfriend.view.fragments.CalendarFragment;
@@ -16,7 +19,9 @@ import androidx.fragment.app.Fragment;
 import androidx.fragment.app.FragmentManager;
 import androidx.fragment.app.FragmentTransaction;
 
-public class MainActivity extends AppCompatActivity {
+import org.osmdroid.config.Configuration;
+
+public class MainActivity extends AppCompatActivity implements OnBackPressedListener {
 
     ActivityMainBinding binding;
 
@@ -30,62 +35,38 @@ public class MainActivity extends AppCompatActivity {
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
 
+        // установка user agent
+        Configuration.getInstance().load(getApplicationContext(),
+                PreferenceManager.getDefaultSharedPreferences(getApplicationContext()));
+
+        Configuration.getInstance().setUserAgentValue(BuildConfig.APPLICATION_ID);
+
         binding = ActivityMainBinding.inflate(getLayoutInflater());
 
         setContentView(binding.getRoot());
 
-        replaceFragment(new MapFragment());
+        replaceFragment(mapFragment);
 
         binding.bottomNavigationView.setOnItemSelectedListener(item -> {
             switch (item.getItemId()){
 
                 case R.id.home:
-                    /*if(mapFragment == null){
-                        mapFragment = new MapFragment();
-                        Toast toast = Toast.makeText(getApplicationContext(),
-                                "Пора покормить кота!", Toast.LENGTH_SHORT);
-                        toast.show();
-                    }*/
                     replaceFragment(mapFragment);
                     break;
 
                 case R.id.today:
-                    /*if(calendarFragment == null){
-                        Toast toast = Toast.makeText(getApplicationContext(),
-                                "Пора покормить кота!", Toast.LENGTH_SHORT);
-                        toast.show();
-                        calendarFragment = new CalendarFragment();
-                    }*/
                     replaceFragment(calendarFragment);
                     break;
 
                 case R.id.history:
-                    /*if(createMettingFragment == null){
-                        Toast toast = Toast.makeText(getApplicationContext(),
-                                "Пора покормить кота!", Toast.LENGTH_SHORT);
-                        toast.show();
-                        createMettingFragment = new CreateMettingFragment();
-                    }*/
                     replaceFragment(createMettingFragment);
                     break;
 
                 case R.id.chats:
-                    /*if(chatsFragment == null){
-                        Toast toast = Toast.makeText(getApplicationContext(),
-                                "Пора покормить кота!", Toast.LENGTH_SHORT);
-                        toast.show();
-                        chatsFragment = new ChatsFragment();
-                    }*/
                     replaceFragment(chatsFragment);
                     break;
 
                 case R.id.account:
-                    /*if(profileFragment == null){
-                        Toast toast = Toast.makeText(getApplicationContext(),
-                                "Пора покормить кота!", Toast.LENGTH_SHORT);
-                        toast.show();
-                        profileFragment = new ProfileFragment();
-                    }*/
                     replaceFragment(profileFragment);
                     break;
             }
@@ -98,7 +79,20 @@ public class MainActivity extends AppCompatActivity {
         FragmentManager fragmentManager = getSupportFragmentManager();
         FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
         fragmentTransaction.replace(R.id.frameWindow,fragment);
-        fragmentTransaction.addToBackStack(null);
+        //fragmentTransaction.addToBackStack(null);
         fragmentTransaction.commit();
     }
+
+    @Override
+    public void onBackPressed() {
+        // Получаем текущий фрагмент
+        Fragment currentFragment = getSupportFragmentManager().findFragmentById(R.id.frameWindow);
+
+        // Если текущий фрагмент реализует интерфейс OnBackPressedListener, вызываем его метод onBackPressed()
+        if (currentFragment instanceof OnBackPressedListener) {
+            ((OnBackPressedListener) currentFragment).onBackPressed();
+        } else {
+            super.onBackPressed();
+        }
+    }
 }

+ 56 - 40
app/src/main/java/com/sharix/sportsmanfriend/view/fragments/CalendarFragment.java

@@ -2,65 +2,81 @@ package com.sharix.sportsmanfriend.view.fragments;
 
 import android.os.Bundle;
 
+import androidx.annotation.NonNull;
 import androidx.fragment.app.Fragment;
 
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
+import android.widget.CalendarView;
+import android.widget.EditText;
+import android.widget.TextView;
 
 import com.sharix.sportsmanfriend.R;
 
-/**
- * A simple {@link Fragment} subclass.
- * Use the {@link CalendarFragment#newInstance} factory method to
- * create an instance of this fragment.
- */
+import java.util.Calendar;
+
 public class CalendarFragment extends Fragment {
 
-    // TODO: Rename parameter arguments, choose names that match
-    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-    private static final String ARG_PARAM1 = "param1";
-    private static final String ARG_PARAM2 = "param2";
+    private Bundle savedState = null;
+    EditText vstup;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+        View view = inflater.inflate(R.layout.fragment_calendar, container, false);
+
+        vstup = view.findViewById(R.id.textView7);
 
-    // TODO: Rename and change types of parameters
-    private String mParam1;
-    private String mParam2;
+        if(savedInstanceState != null && savedState == null) {
+            savedState = savedInstanceState.getBundle("key1");
+        }
+        if(savedState != null) {
+            vstup.setText(savedState.getCharSequence("key2"));
+        }
+        savedState = null;
 
-    public CalendarFragment() {
-        // Required empty public constructor
+        return view;
     }
 
-    /**
-     * Use this factory method to create a new instance of
-     * this fragment using the provided parameters.
-     *
-     * @param param1 Parameter 1.
-     * @param param2 Parameter 2.
-     * @return A new instance of fragment CalendarFragment.
-     */
-    // TODO: Rename and change types and number of parameters
-    public static CalendarFragment newInstance(String param1, String param2) {
-        CalendarFragment fragment = new CalendarFragment();
-        Bundle args = new Bundle();
-        args.putString(ARG_PARAM1, param1);
-        args.putString(ARG_PARAM2, param2);
-        fragment.setArguments(args);
-        return fragment;
+    @Override
+    public void onPause() {
+        super.onPause();
+        Log.d("TAG", "onPause: ");
     }
 
     @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (getArguments() != null) {
-            mParam1 = getArguments().getString(ARG_PARAM1);
-            mParam2 = getArguments().getString(ARG_PARAM2);
-        }
+    public void onStop() {
+        super.onStop();
+        Log.d("TAG", "onStop: ");
     }
 
     @Override
-    public View onCreateView(LayoutInflater inflater, ViewGroup container,
-                             Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
-        return inflater.inflate(R.layout.fragment_calendar, container, false);
+    public void onDestroyView() {
+        super.onDestroyView();
+        savedState = saveState(); /* vstup defined here for sure */
+        vstup = null;
+    }
+
+    private Bundle saveState() { /* called either from onDestroyView() or onSaveInstanceState() */
+        Bundle state = new Bundle();
+        state.putCharSequence("key2", vstup.getText());
+        return state;
+    }
+
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+        Log.d("TAG", "onDestroy: ");
+    }
+
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        /* If onDestroyView() is called first, we can use the previously savedState but we can't call saveState() anymore */
+        /* If onSaveInstanceState() is called first, we don't have savedState, so we need to call saveState() */
+        /* => (?:) operator inevitable! */
+        outState.putBundle("key1", (savedState != null) ? savedState : saveState());
     }
 }

+ 0 - 9
app/src/main/java/com/sharix/sportsmanfriend/view/fragments/ChatsFragment.java

@@ -21,26 +21,21 @@ public class ChatsFragment extends Fragment {
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
         View view =  inflater.inflate(R.layout.fragment_chats, container, false);
 
         Spinner spinner = view.findViewById(R.id.sort_spinner);
 
-        // Создание массива строк с элементами для Spinner
         String[] items = new String[]{"Sort by", "Date", "Saved", "Distance"};
 
-        // Создание ArrayAdapter с использованием созданного массива строк и стандартного макета выпадающего списка
         ArrayAdapter<String> adapter = new ArrayAdapter<String>(getActivity(), android.R.layout.simple_spinner_dropdown_item, items) {
             @Override
             public View getDropDownView(int position, @Nullable View convertView, @NonNull ViewGroup parent) {
                 View view = super.getDropDownView(position, convertView, parent);
 
                 if (position == 0) {
-                    // Если это элемент с подсказкой, то делаем его серым и неактивным
                     ((TextView) view).setTextColor(Color.GRAY);
                     ((TextView) view).setEnabled(false);
                 } else {
-                    // Иначе делаем активным
                     ((TextView) view).setTextColor(Color.BLACK);
                     ((TextView) view).setEnabled(true);
                 }
@@ -49,14 +44,10 @@ public class ChatsFragment extends Fragment {
             }
         };
 
-        // Задание стиля выпадающего списка
         adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
 
-        // Связывание ArrayAdapter с Spinner
         spinner.setAdapter(adapter);
 
-        // Установка первоначального текста
-
         return view;
     }
 }

+ 0 - 47
app/src/main/java/com/sharix/sportsmanfriend/view/fragments/CreateMettingFragment.java

@@ -9,58 +9,11 @@ import android.view.View;
 import android.view.ViewGroup;
 
 import com.sharix.sportsmanfriend.R;
-
-/**
- * A simple {@link Fragment} subclass.
- * Use the {@link CreateMettingFragment#newInstance} factory method to
- * create an instance of this fragment.
- */
 public class CreateMettingFragment extends Fragment {
 
-    // TODO: Rename parameter arguments, choose names that match
-    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-    private static final String ARG_PARAM1 = "param1";
-    private static final String ARG_PARAM2 = "param2";
-
-    // TODO: Rename and change types of parameters
-    private String mParam1;
-    private String mParam2;
-
-    public CreateMettingFragment() {
-        // Required empty public constructor
-    }
-
-    /**
-     * Use this factory method to create a new instance of
-     * this fragment using the provided parameters.
-     *
-     * @param param1 Parameter 1.
-     * @param param2 Parameter 2.
-     * @return A new instance of fragment CreateMettingFragment.
-     */
-    // TODO: Rename and change types and number of parameters
-    public static CreateMettingFragment newInstance(String param1, String param2) {
-        CreateMettingFragment fragment = new CreateMettingFragment();
-        Bundle args = new Bundle();
-        args.putString(ARG_PARAM1, param1);
-        args.putString(ARG_PARAM2, param2);
-        fragment.setArguments(args);
-        return fragment;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (getArguments() != null) {
-            mParam1 = getArguments().getString(ARG_PARAM1);
-            mParam2 = getArguments().getString(ARG_PARAM2);
-        }
-    }
-
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
         return inflater.inflate(R.layout.fragment_create_metting, container, false);
     }
 }

+ 71 - 0
app/src/main/java/com/sharix/sportsmanfriend/view/fragments/EventListFragment.java

@@ -0,0 +1,71 @@
+package com.sharix.sportsmanfriend.view.fragments;
+
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+
+import androidx.core.app.ActivityCompat;
+import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
+
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.LinearLayout;
+
+import com.sharix.sportsmanfriend.OnBackPressedListener;
+import com.sharix.sportsmanfriend.R;
+
+import org.osmdroid.util.GeoPoint;
+
+public class EventListFragment extends Fragment implements OnBackPressedListener {
+
+    private LinearLayout btnOpenEventMap;
+
+    @Override
+    public View onCreateView(LayoutInflater inflater, ViewGroup container,
+                             Bundle savedInstanceState) {
+
+        View view = inflater.inflate(R.layout.fragment_event_list, container, false);
+
+        btnOpenEventMap = view.findViewById(R.id.btnOpenEventMap);
+
+        addClickEventToAllButtons();
+
+        return view;
+    }
+
+    private void addClickEventToAllButtons() {
+
+        btnOpenEventMap.setOnClickListener(new View.OnClickListener() {
+            @Override
+            public void onClick(View v) {
+                /*// Получаем менеджер фрагментов
+                FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
+
+                // Создаем транзакцию фрагментов
+                FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+
+                // Создаем новый фрагмент, который мы хотим открыть
+                MapFragment myFragment = new MapFragment();
+
+                // Заменяем текущий фрагмент на новый
+                fragmentTransaction.replace(R.id.frameWindow, myFragment);
+
+                // Добавляем транзакцию в стек возврата, чтобы пользователь мог вернуться назад
+                fragmentTransaction.addToBackStack(null);
+
+                // Применяем транзакцию
+                fragmentTransaction.commit();*/
+
+                onBackPressed();
+            }
+        });
+    }
+
+    @Override
+    public void onBackPressed() {
+        getActivity().getSupportFragmentManager().popBackStack();
+    }
+}

+ 79 - 10
app/src/main/java/com/sharix/sportsmanfriend/view/fragments/MapFragment.java

@@ -10,12 +10,17 @@ import androidx.annotation.Nullable;
 import androidx.core.app.ActivityCompat;
 import androidx.core.content.ContextCompat;
 import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentManager;
+import androidx.fragment.app.FragmentTransaction;
 
 
+import android.util.Log;
 import android.view.LayoutInflater;
 import android.view.View;
 import android.view.ViewGroup;
 import android.widget.ImageButton;
+import android.widget.LinearLayout;
+import android.widget.Toast;
 
 
 import com.google.android.gms.location.FusedLocationProviderClient;
@@ -38,28 +43,52 @@ public class MapFragment extends Fragment {
     private ImageButton btnZoomIn;
     private ImageButton btnZoomOut;
     private ImageButton btnMyLocation;
+    private LinearLayout btnOpenEventList;
     private double latitude, longitude;
     private FusedLocationProviderClient fusedLocationProviderClient;
 
-    @Override
-    public void onCreate(@Nullable Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
+    private Bundle savedState = null;
 
-    }
+    private static final String KEY_ZOOM_LEVEL = "zoomLevel";
+    private static final String KEY_CENTER_LATITUDE = "centerLatitude";
+    private static final String KEY_CENTER_LONGITUDE = "centerLongitude";
+
+    private double centerLatitude = 0.0;
+    private double centerLongitude = 0.0;
+    private int zoomLevel = 0;
 
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+
         view = inflater.inflate(R.layout.fragment_map, container, false);
 
+
         btnZoomIn = view.findViewById(R.id.btn_zoomIn);
         btnZoomOut = view.findViewById(R.id.btn_zoomOut);
         btnMyLocation = view.findViewById(R.id.btnMyLocation);
+        btnOpenEventList = view.findViewById(R.id.btnOpenEventList);
 
         map = view.findViewById(R.id.map);
         mapController = map.getController();
         fusedLocationProviderClient = LocationServices.getFusedLocationProviderClient(getActivity());
+        if(savedInstanceState != null && savedState == null) {
+            savedState = savedInstanceState.getBundle("key1");
+            Log.d("TAG", "first ");
+        }
+        if(savedState != null) {
+            zoomLevel = savedState.getInt(KEY_ZOOM_LEVEL);
+            centerLatitude = savedState.getDouble(KEY_CENTER_LATITUDE);
+            centerLongitude = savedState.getDouble(KEY_CENTER_LONGITUDE);
+            configureMap(centerLatitude, centerLongitude, zoomLevel);
+            Log.d("TAG", "second");
+        }
+        else if(savedState == null){
+            configureMap(55.934473, 37.497081, 15);
+            Log.d("TAG", "thirt");
+        }
+
+        savedState = null;
 
-        configureMap();
         askPermissions();
         addClickEventToAllButtons();
 
@@ -83,14 +112,13 @@ public class MapFragment extends Fragment {
         }
     }
 
-    private void configureMap() {
-        map = (MapView) view.findViewById(R.id.map);
+    private void configureMap(double Latitude, double Longitude, int Zoom) {
         map.setTileSource(TileSourceFactory.DEFAULT_TILE_SOURCE);
         map.setMultiTouchControls(true);
         map.setMaxZoomLevel(18.0);
 
-        mapController.setZoom(15);
-        GeoPoint startPoint = new GeoPoint(55.934473, 37.497081);
+        mapController.setZoom(Zoom);
+        GeoPoint startPoint = new GeoPoint(Latitude, Longitude);
         mapController.setCenter(startPoint);
 
         map.setBuiltInZoomControls(false);
@@ -122,7 +150,6 @@ public class MapFragment extends Fragment {
         btnMyLocation.setOnClickListener(v -> {
             if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED
                     && ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
-
                 String[] permission = {Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION};
                 requestPermissions(permission, PERMISSIONS_REQUEST_ACCESS_FINE_LOCATION);
             }
@@ -138,6 +165,48 @@ public class MapFragment extends Fragment {
                     });
 
         });
+
+        btnOpenEventList.setOnClickListener(v -> {
+            // Получаем менеджер фрагментов
+            FragmentManager fragmentManager = getActivity().getSupportFragmentManager();
+
+            // Создаем транзакцию фрагментов
+            FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
+
+            // Создаем новый фрагмент, который мы хотим открыть
+            EventListFragment myFragment = new EventListFragment();
+
+            // Заменяем текущий фрагмент на новый
+            fragmentTransaction.replace(R.id.frameWindow, myFragment);
+
+            // Добавляем транзакцию в стек возврата, чтобы пользователь мог вернуться назад
+            fragmentTransaction.addToBackStack(null);
+
+            // Применяем транзакцию
+            fragmentTransaction.commit();
+        });
+    }
+
+    @Override
+    public void onDestroyView() {
+        super.onDestroyView();
+        savedState = saveState();
+    }
+
+    private Bundle saveState() { /* called either from onDestroyView() or onSaveInstanceState() */
+        Bundle state = new Bundle();
+        state.putInt(KEY_ZOOM_LEVEL, map.getZoomLevel());
+        state.putDouble(KEY_CENTER_LATITUDE, map.getMapCenter().getLatitude());
+        state.putDouble(KEY_CENTER_LONGITUDE, map.getMapCenter().getLongitude());
+        return state;
     }
 
+    @Override
+    public void onSaveInstanceState(Bundle outState) {
+        super.onSaveInstanceState(outState);
+        /* If onDestroyView() is called first, we can use the previously savedState but we can't call saveState() anymore */
+        /* If onSaveInstanceState() is called first, we don't have savedState, so we need to call saveState() */
+        /* => (?:) operator inevitable! */
+        outState.putBundle("key1", (savedState != null) ? savedState : saveState());
+    }
 }

+ 0 - 46
app/src/main/java/com/sharix/sportsmanfriend/view/fragments/ProfileFragment.java

@@ -10,57 +10,11 @@ import android.view.ViewGroup;
 
 import com.sharix.sportsmanfriend.R;
 
-/**
- * A simple {@link Fragment} subclass.
- * Use the {@link ProfileFragment#newInstance} factory method to
- * create an instance of this fragment.
- */
 public class ProfileFragment extends Fragment {
 
-    // TODO: Rename parameter arguments, choose names that match
-    // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
-    private static final String ARG_PARAM1 = "param1";
-    private static final String ARG_PARAM2 = "param2";
-
-    // TODO: Rename and change types of parameters
-    private String mParam1;
-    private String mParam2;
-
-    public ProfileFragment() {
-        // Required empty public constructor
-    }
-
-    /**
-     * Use this factory method to create a new instance of
-     * this fragment using the provided parameters.
-     *
-     * @param param1 Parameter 1.
-     * @param param2 Parameter 2.
-     * @return A new instance of fragment ProfileFragment.
-     */
-    // TODO: Rename and change types and number of parameters
-    public static ProfileFragment newInstance(String param1, String param2) {
-        ProfileFragment fragment = new ProfileFragment();
-        Bundle args = new Bundle();
-        args.putString(ARG_PARAM1, param1);
-        args.putString(ARG_PARAM2, param2);
-        fragment.setArguments(args);
-        return fragment;
-    }
-
-    @Override
-    public void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        if (getArguments() != null) {
-            mParam1 = getArguments().getString(ARG_PARAM1);
-            mParam2 = getArguments().getString(ARG_PARAM2);
-        }
-    }
-
     @Override
     public View onCreateView(LayoutInflater inflater, ViewGroup container,
                              Bundle savedInstanceState) {
-        // Inflate the layout for this fragment
         return inflater.inflate(R.layout.fragment_profile, container, false);
     }
 }

+ 5 - 0
app/src/main/res/drawable/ic_filter.xml

@@ -0,0 +1,5 @@
+<vector android:height="25dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="25dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M4.25,5.61C6.27,8.2 10,13 10,13v6c0,0.55 0.45,1 1,1h2c0.55,0 1,-0.45 1,-1v-6c0,0 3.72,-4.8 5.74,-7.39C20.25,4.95 19.78,4 18.95,4H5.04C4.21,4 3.74,4.95 4.25,5.61z"/>
+</vector>

+ 5 - 0
app/src/main/res/drawable/ic_map.xml

@@ -0,0 +1,5 @@
+<vector android:height="25dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="25dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M20.5,3l-0.16,0.03L15,5.1 9,3 3.36,4.9c-0.21,0.07 -0.36,0.25 -0.36,0.48V20.5c0,0.28 0.22,0.5 0.5,0.5l0.16,-0.03L9,18.9l6,2.1 5.64,-1.9c0.21,-0.07 0.36,-0.25 0.36,-0.48V3.5c0,-0.28 -0.22,-0.5 -0.5,-0.5zM15,19l-6,-2.11V5l6,2.11V19z"/>
+</vector>

+ 12 - 0
app/src/main/res/drawable/ic_people.xml

@@ -0,0 +1,12 @@
+<vector android:height="25dp" android:tint="#000000"
+    android:viewportHeight="24" android:viewportWidth="24"
+    android:width="25dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white"
+        android:fillType="evenOdd" android:pathData="M16.67,13.13C18.04,14.06 19,15.32 19,17v3h4v-3C23,14.82 19.43,13.53 16.67,13.13z"/>
+    <path android:fillColor="@android:color/white"
+        android:fillType="evenOdd" android:pathData="M9,8m-4,0a4,4 0,1 1,8 0a4,4 0,1 1,-8 0"/>
+    <path android:fillColor="@android:color/white"
+        android:fillType="evenOdd" android:pathData="M15,12c2.21,0 4,-1.79 4,-4c0,-2.21 -1.79,-4 -4,-4c-0.47,0 -0.91,0.1 -1.33,0.24C14.5,5.27 15,6.58 15,8s-0.5,2.73 -1.33,3.76C14.09,11.9 14.53,12 15,12z"/>
+    <path android:fillColor="@android:color/white"
+        android:fillType="evenOdd" android:pathData="M9,13c-2.67,0 -8,1.34 -8,4v3h16v-3C17,14.34 11.67,13 9,13z"/>
+</vector>

+ 2 - 2
app/src/main/res/drawable/ic_search.xml

@@ -1,5 +1,5 @@
-<vector android:height="40dp" android:tint="#000000"
+<vector android:height="25dp" android:tint="#000000"
     android:viewportHeight="24" android:viewportWidth="24"
-    android:width="40dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    android:width="25dp" xmlns:android="http://schemas.android.com/apk/res/android">
     <path android:fillColor="@android:color/white" android:pathData="M15.5,14h-0.79l-0.28,-0.27C15.41,12.59 16,11.11 16,9.5 16,5.91 13.09,3 9.5,3S3,5.91 3,9.5 5.91,16 9.5,16c1.61,0 3.09,-0.59 4.23,-1.57l0.27,0.28v0.79l5,4.99L20.49,19l-4.99,-5zM9.5,14C7.01,14 5,11.99 5,9.5S7.01,5 9.5,5 14,7.01 14,9.5 11.99,14 9.5,14z"/>
 </vector>

+ 5 - 0
app/src/main/res/drawable/ic_sort.xml

@@ -0,0 +1,5 @@
+<vector android:autoMirrored="true" android:height="24dp"
+    android:tint="#000000" android:viewportHeight="24"
+    android:viewportWidth="24" android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="@android:color/white" android:pathData="M3,18h6v-2L3,16v2zM3,6v2h18L21,6L3,6zM3,13h12v-2L3,11v2z"/>
+</vector>

+ 4 - 0
app/src/main/res/drawable/ic_sport_icon.xml

@@ -0,0 +1,4 @@
+<vector android:height="35.592594dp" android:viewportHeight="31"
+    android:viewportWidth="27" android:width="31dp" xmlns:android="http://schemas.android.com/apk/res/android">
+    <path android:fillColor="#303030" android:pathData="M17.375,5.813C18.98,5.813 20.281,4.511 20.281,2.906C20.281,1.301 18.98,0 17.375,0C15.77,0 14.469,1.301 14.469,2.906C14.469,4.511 15.77,5.813 17.375,5.813ZM7.79,19.222L6.894,21.312H2.844C1.774,21.312 0.906,22.18 0.906,23.249C0.906,24.319 1.774,25.187 2.844,25.187H7.533C8.699,25.187 9.748,24.494 10.204,23.426L10.736,22.183L10.09,21.802C9.041,21.182 8.27,20.266 7.79,19.222ZM24.156,13.562H21.49L19.913,10.338C19.156,8.791 17.766,7.66 16.172,7.254L11.868,5.974C10.155,5.562 8.37,5.94 6.974,7.011L4.572,8.853C3.722,9.503 3.561,10.719 4.213,11.569C4.865,12.418 6.081,12.577 6.929,11.927L9.333,10.086C9.797,9.729 10.389,9.602 10.863,9.714L11.753,9.979L9.485,15.27C8.72,17.055 9.405,19.146 11.077,20.132L16.222,23.17L14.559,28.482C14.239,29.503 14.808,30.59 15.829,30.909C16.022,30.97 16.217,30.999 16.409,30.999C17.233,30.999 17.997,30.468 18.257,29.639L20.172,23.521C20.53,22.263 19.997,20.912 18.862,20.228L15.154,18.039L17.05,13.3L18.277,15.808C18.761,16.798 19.786,17.436 20.887,17.436H24.156C25.226,17.436 26.094,16.569 26.094,15.499C26.094,14.429 25.226,13.562 24.156,13.562Z"/>
+</vector>

BIN
app/src/main/res/drawable/place_photo.png


+ 19 - 5
app/src/main/res/layout/fragment_calendar.xml

@@ -1,5 +1,6 @@
 <?xml version="1.0" encoding="utf-8"?>
-<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout 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"
@@ -7,12 +8,25 @@
     android:background="@color/AppBackground">
 
     <CalendarView
+        android:id="@+id/test"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:theme="@style/CalenderViewCustom"
+        android:layout_margin="5dp"
+        android:background="@drawable/black_border"
         android:dateTextAppearance="@style/CalenderViewDateCustomText"
+        android:theme="@style/CalenderViewCustom"
         android:weekDayTextAppearance="@style/CalenderViewWeekCustomText"
-        android:background="@drawable/black_border"
-        android:layout_margin="5dp"/>
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent" />
+
+    <EditText
+        android:textColor="@color/TextColor"
+        android:id="@+id/textView7"
+        android:layout_width="match_parent"
+        android:layout_height="60dp"
+        android:layout_marginTop="10dp"
+        app:layout_constraintTop_toBottomOf="@+id/test"
+        android:background="@drawable/black_border"/>
 
-</FrameLayout>
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 258 - 0
app/src/main/res/layout/fragment_event_list.xml

@@ -0,0 +1,258 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout 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"
+    android:background="@color/AppBackground"
+    tools:context=".view.fragments.EventListFragment">
+
+    <RelativeLayout
+        android:id="@+id/relativeLayout"
+        android:layout_width="match_parent"
+        android:layout_height="55dp"
+        android:background="@color/AppBackground"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toTopOf="parent">
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_marginStart="15dp"
+            android:gravity="center_vertical"
+            android:text="Events"
+            android:textColor="@color/TextColor"
+            android:textSize="16sp" />
+
+        <LinearLayout
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent"
+            android:layout_alignParentEnd="true"
+            android:orientation="horizontal">
+
+            <ImageButton
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:background="#00000000"
+                android:gravity="center_vertical"
+                android:padding="7dp"
+                android:src="@drawable/ic_sort"
+                app:tint="@color/TextColor" />
+
+            <ImageButton
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:background="#00000000"
+                android:gravity="center_vertical"
+                android:padding="7dp"
+                android:src="@drawable/ic_filter"
+                app:tint="@color/TextColor" />
+
+            <ImageButton
+                android:id="@+id/search"
+                android:layout_width="wrap_content"
+                android:layout_height="match_parent"
+                android:background="#00000000"
+                android:gravity="center_vertical"
+                android:padding="7dp"
+                android:src="@drawable/ic_search"
+                app:tint="@color/TextColor" />
+
+        </LinearLayout>
+
+    </RelativeLayout>
+
+    <ScrollView
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        app:layout_constraintEnd_toEndOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        app:layout_constraintTop_toBottomOf="@+id/relativeLayout"
+        android:layout_marginTop="15dp"
+        android:layout_marginStart="15dp"
+        android:layout_marginEnd="15dp">
+
+        <LinearLayout
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:orientation="vertical">
+
+            <LinearLayout
+                android:layout_width="match_parent"
+                android:layout_height="200dp"
+                android:orientation="horizontal"
+                android:background="@drawable/black_border">
+
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_weight="1"
+                    android:padding="15dp">
+
+                    <ImageView
+                        android:id="@+id/imageView2"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent"
+                        android:src="@drawable/ic_sport_icon"
+                        app:tint="@color/TextColor" />
+
+                    <TextView
+                        android:id="@+id/textView"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:text="Jogging"
+                        android:textSize="12sp"
+                        android:textColor="@color/TextColor"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toBottomOf="@+id/imageView2"
+                        android:layout_marginTop="5dp"/>
+
+                    <ImageView
+                        android:layout_width="85dp"
+                        android:layout_height="85dp"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        app:layout_constraintEnd_toEndOf="parent"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toBottomOf="@+id/textView"
+                        android:src="@drawable/place_photo"/>
+
+                </androidx.constraintlayout.widget.ConstraintLayout>
+
+                <androidx.constraintlayout.widget.ConstraintLayout
+                    android:layout_width="0dp"
+                    android:layout_height="match_parent"
+                    android:layout_weight="2"
+                    android:padding="15dp">
+
+                    <LinearLayout
+                        android:id="@+id/linearLayout"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="horizontal"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toTopOf="parent">
+
+                        <TextView
+                            android:id="@+id/textView2"
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:text="Nov 23 | 9:00"
+                            android:textColor="@color/TextColor"
+                            android:textSize="16dp" />
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:layout_marginStart="10dp"
+                            android:text="45 min"
+                            android:textColor="@color/SubTextColor"
+                            android:textSize="12dp" />
+
+                    </LinearLayout>
+
+                    <TextView
+                        android:id="@+id/textView4"
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:layout_marginTop="20dp"
+                        android:text="3km away"
+                        android:textColor="@color/SubTextColor"
+                        android:textSize="12dp"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toBottomOf="@+id/linearLayout" />
+
+                    <TextView
+                        android:id="@+id/textView5"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:text="Yaroslavskaya Ulitsa, 12, стр.2, Moscow, 129366"
+                        android:textColor="@color/TextColor"
+                        android:textSize="12dp"
+                        android:layout_marginTop="5dp"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toBottomOf="@+id/textView4" />
+
+                    <LinearLayout
+                        android:layout_width="wrap_content"
+                        android:layout_height="wrap_content"
+                        android:orientation="horizontal"
+                        app:layout_constraintBottom_toTopOf="@+id/textView6"
+                        app:layout_constraintStart_toStartOf="parent"
+                        app:layout_constraintTop_toBottomOf="@+id/textView5">
+
+                        <ImageView
+                            android:layout_width="wrap_content"
+                            android:layout_height="wrap_content"
+                            android:src="@drawable/ic_people"
+                            android:tint="@color/TextColor"/>
+
+                        <TextView
+                            android:layout_width="wrap_content"
+                            android:layout_height="match_parent"
+                            android:text="2/5"
+                            android:textSize="14sp"
+                            android:gravity="center"
+                            android:layout_marginStart="5dp"
+                            android:textColor="@color/TextColor"
+                            app:layout_constraintBottom_toTopOf="@+id/textView6"
+                            app:layout_constraintStart_toStartOf="parent"
+                            app:layout_constraintTop_toBottomOf="@+id/textView5" />
+
+                    </LinearLayout>
+
+                    <TextView
+                        android:id="@+id/textView6"
+                        android:layout_width="match_parent"
+                        android:layout_height="wrap_content"
+                        android:text="Level 0.52 - 3.52"
+                        android:textColor="@color/TextColor"
+                        android:textSize="12dp"
+                        app:layout_constraintBottom_toBottomOf="parent"
+                        tools:layout_editor_absoluteX="15dp" />
+
+                </androidx.constraintlayout.widget.ConstraintLayout>
+
+
+            </LinearLayout>
+
+        </LinearLayout>
+
+    </ScrollView>
+
+    <LinearLayout
+        android:id="@+id/btnOpenEventMap"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:orientation="horizontal"
+        app:layout_constraintBottom_toBottomOf="parent"
+        app:layout_constraintStart_toStartOf="parent"
+        android:background="@drawable/black_border"
+        android:paddingTop="10dp"
+        android:paddingBottom="10dp"
+        android:paddingStart="20dp"
+        android:paddingEnd="20dp"
+        android:layout_marginBottom="40dp"
+        android:layout_marginStart="15dp">
+
+        <ImageView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:src="@drawable/ic_map"
+            app:tint="@color/TextColor" />
+
+        <TextView
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content"
+            android:text="View event map"
+            android:textColor="@color/TextColor"
+            android:textSize="16sp"
+            android:layout_marginStart="15dp"/>
+
+    </LinearLayout>
+
+</androidx.constraintlayout.widget.ConstraintLayout>

+ 1 - 0
app/src/main/res/layout/fragment_map.xml

@@ -81,6 +81,7 @@
     </LinearLayout>
 
     <LinearLayout
+        android:id="@+id/btnOpenEventList"
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
         android:orientation="horizontal"

+ 1 - 1
app/src/main/res/values/strings.xml

@@ -1,5 +1,5 @@
 <resources>
-    <string name="app_name">SportAbuser</string>
+    <string name="app_name">Sportsman Friend</string>
     <string name="cdLogo">LogoHolder</string>
     <string name="AppName">Друг-спортсмен</string>
     <string name="etLogin">Email</string>