From 81c2870f04e58758c7031f44b28f69ab84a63fdd Mon Sep 17 00:00:00 2001 From: Mike Date: Wed, 14 Oct 2020 00:44:29 +0300 Subject: [PATCH 1/8] commit --- app/build.gradle | 4 + app/src/main/AndroidManifest.xml | 3 + .../webapplicationwithspring/EventData.java | 62 ++++++++++ .../EventsActivity.java | 113 ++++++++++++++++++ .../MainActivity.java | 15 ++- .../webapplicationwithspring/MapActivity.java | 27 +++-- .../ui/dashboard/DashboardFragment.java | 35 ------ .../ui/dashboard/DashboardViewModel.java | 19 --- .../ui/home/HomeFragment.java | 37 ------ .../ui/home/HomeViewModel.java | 19 --- .../notifications/NotificationsFragment.java | 35 ------ .../notifications/NotificationsViewModel.java | 19 --- .../main/res/drawable/ic_room_black_24dp.xml | 9 ++ app/src/main/res/layout/activity_events.xml | 41 +++++++ app/src/main/res/layout/activity_main.xml | 10 ++ app/src/main/res/layout/activity_map.xml | 11 +- .../main/res/layout/fragment_dashboard.xml | 19 --- app/src/main/res/layout/fragment_home.xml | 13 -- .../res/layout/fragment_notifications.xml | 19 --- app/src/main/res/menu/bottom_navigation.xml | 6 + .../main/res/xml/network_security_config.xml | 4 + 21 files changed, 286 insertions(+), 234 deletions(-) create mode 100644 app/src/main/java/com/example/webapplicationwithspring/EventData.java create mode 100644 app/src/main/java/com/example/webapplicationwithspring/EventsActivity.java delete mode 100644 app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardFragment.java delete mode 100644 app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardViewModel.java delete mode 100644 app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeFragment.java delete mode 100644 app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeViewModel.java delete mode 100644 app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsFragment.java delete mode 100644 app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsViewModel.java create mode 100644 app/src/main/res/drawable/ic_room_black_24dp.xml create mode 100644 app/src/main/res/layout/activity_events.xml delete mode 100644 app/src/main/res/layout/fragment_dashboard.xml delete mode 100644 app/src/main/res/layout/fragment_home.xml delete mode 100644 app/src/main/res/layout/fragment_notifications.xml create mode 100644 app/src/main/res/xml/network_security_config.xml diff --git a/app/build.gradle b/app/build.gradle index bd6130d..dab5608 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -46,4 +46,8 @@ dependencies { // implementation 'com.google.android.gms:play-services-maps:17.0.0' implementation 'com.google.android.gms:play-services:12.0.1' implementation 'com.google.android.material:material:1.0.0' + implementation 'org.jetbrains:annotations-java5:15.0' + implementation 'com.android.volley:volley:1.1.0' + implementation 'com.google.code.gson:gson:2.8.6' + } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d0dfa91..99a0d87 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -8,6 +8,8 @@ + \ No newline at end of file diff --git a/app/src/main/java/com/example/webapplicationwithspring/EventData.java b/app/src/main/java/com/example/webapplicationwithspring/EventData.java new file mode 100644 index 0000000..f3e178a --- /dev/null +++ b/app/src/main/java/com/example/webapplicationwithspring/EventData.java @@ -0,0 +1,62 @@ +package com.example.webapplicationwithspring; + +import android.os.AsyncTask; + +import com.google.gson.JsonObject; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.net.HttpURLConnection; +import java.net.MalformedURLException; +import java.net.URL; + +import javax.net.ssl.HttpsURLConnection; + +public class EventData extends AsyncTask { + String data = ""; + String parsed = ""; + @Override + protected Void doInBackground(Void... voids) { + try { + URL url = new URL("http://192.168.0.119:8080/eventsList"); + + HttpURLConnection connection = (HttpURLConnection) url.openConnection(); + InputStream inputStream = connection.getInputStream(); + BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream)); + String line = ""; + while (line != null){ + line = bufferedReader.readLine(); + data += line; + } + JSONArray ja = new JSONArray(data); + for(int i = 0; i < ja.length();i ++){ + JSONObject jo = (JSONObject) ja.get(i); + parsed += "EventName " + jo.get("eventName") + "\n" + + "eventData " + jo.get("eventDate") + "\n" + + "eventDescription " + jo.get("eventDescription") + "\n" + + "eventPlace " + jo.get("eventPlace") + "\n"; + + } + } catch (MalformedURLException e){ + e.printStackTrace(); + } catch (IOException e){ + e.printStackTrace(); + } catch (JSONException e) { + e.printStackTrace(); + } + return null; + } + + @Override + protected void onPostExecute(Void aVoid) { + super.onPostExecute(aVoid); + + EventsActivity.eventData.setText(parsed); + } +} diff --git a/app/src/main/java/com/example/webapplicationwithspring/EventsActivity.java b/app/src/main/java/com/example/webapplicationwithspring/EventsActivity.java new file mode 100644 index 0000000..e320296 --- /dev/null +++ b/app/src/main/java/com/example/webapplicationwithspring/EventsActivity.java @@ -0,0 +1,113 @@ +package com.example.webapplicationwithspring; + +import android.content.Context; +import android.content.Intent; +import android.os.Bundle; +import android.util.Log; +import android.view.MenuItem; +import android.widget.ScrollView; +import android.widget.TextView; +import android.widget.Toast; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.appcompat.app.AppCompatActivity; +import androidx.constraintlayout.widget.ConstraintLayout; + +import com.android.volley.Request; +import com.android.volley.RequestQueue; +import com.android.volley.Response; +import com.android.volley.VolleyError; +import com.android.volley.toolbox.JsonArrayRequest; +import com.android.volley.toolbox.JsonObjectRequest; +import com.android.volley.toolbox.Volley; +import com.google.android.material.bottomnavigation.BottomNavigationView; + +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import java.net.MalformedURLException; + +public class EventsActivity extends AppCompatActivity { + public static TextView eventData; + private ScrollView scrollView; +// url for local server + private String url = "http://192.168.0.119:8080/eventsList"; +// this will switch between items in the navigation bar + private BottomNavigationView.OnNavigationItemSelectedListener navListener = + new BottomNavigationView.OnNavigationItemSelectedListener() { + @Override + public boolean onNavigationItemSelected(@NonNull MenuItem item) { + + /* define the logic to switch between the fragments in navigation bar */ + switch (item.getItemId()){ + case R.id.nav_events: { + Toast.makeText(getApplicationContext(), "You are going to open events fragment", Toast.LENGTH_SHORT).show(); + break; + } + case R.id.nav_profile:{ + + Toast.makeText(getApplicationContext(), "You are going to open profile fragment", Toast.LENGTH_SHORT).show(); + break; + } + case R.id.nav_map:{ + // when we meet new item to be selected we switch to new activity + Toast.makeText(getApplicationContext(), "You are already in the Map", Toast.LENGTH_SHORT).show(); + startActivity(new Intent(getApplicationContext(), MapActivity.class)); + overridePendingTransition(0,0); + break; + } + } + return true; + } + }; + + @Override + public void onCreate(@Nullable Bundle savedInstanceState){ + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_events); + eventData = (TextView) findViewById(R.id.event_data); + scrollView = (ScrollView) findViewById(R.id.scroll_view); + RequestQueue requestQueue = Volley.newRequestQueue(this); + final TextView tv = new TextView(this); + tv.setLayoutParams(new ConstraintLayout.LayoutParams(ConstraintLayout.LayoutParams.MATCH_PARENT, + ConstraintLayout.LayoutParams.WRAP_CONTENT)); + JsonArrayRequest objectRequest = new JsonArrayRequest( + Request.Method.GET, + url, + null, + new Response.Listener() { + @Override + public void onResponse(JSONArray response) { + try { + for (int i = 0; i < response.length(); i++) { + JSONObject jo = (JSONObject) response.get(i); + String eventName = jo.getString("eventName"); + String eventDate = jo.getString("eventDate"); + String eventDescription = jo.getString("eventDescription"); + String eventPlace = jo.getString("eventPlace"); + eventData.append(eventName + " at " + eventDate + " there will be " + eventDescription + " in " + eventPlace); + + + } + } catch (JSONException e) { + e.printStackTrace(); + } + } + }, + new Response.ErrorListener() { + @Override + public void onErrorResponse(VolleyError error) { + Toast.makeText(EventsActivity.this, error.toString(), Toast.LENGTH_SHORT).show(); + Log.d("EventSSS",error.toString()); + } + } + ); + requestQueue.add(objectRequest); +// set the bottom navigation bar to switch between activities + BottomNavigationView nView = findViewById(R.id.bottom_navigation_for_events); + nView.setOnNavigationItemSelectedListener(navListener); + nView.setSelectedItemId(R.id.nav_events); + } +} diff --git a/app/src/main/java/com/example/webapplicationwithspring/MainActivity.java b/app/src/main/java/com/example/webapplicationwithspring/MainActivity.java index b95b5fd..1714f14 100644 --- a/app/src/main/java/com/example/webapplicationwithspring/MainActivity.java +++ b/app/src/main/java/com/example/webapplicationwithspring/MainActivity.java @@ -1,7 +1,5 @@ package com.example.webapplicationwithspring; -import androidx.appcompat.app.AppCompatActivity; - import android.app.Dialog; import android.content.Intent; import android.os.Bundle; @@ -10,6 +8,8 @@ import android.widget.Button; import android.widget.Toast; +import androidx.appcompat.app.AppCompatActivity; + import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.GoogleApiAvailability; import com.google.android.gms.maps.GoogleMap; @@ -24,6 +24,14 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); + Button buttonEvent = (Button) findViewById(R.id.btnEvents); + buttonEvent.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + Intent intent = new Intent(MainActivity.this, EventsActivity.class); + startActivity(intent); + } + }); if(isServicesOK()){ init(); } @@ -38,11 +46,12 @@ public void onClick(View v) { startActivity(intent); } }); + } private boolean isServicesOK(){ - Log.d(TAG,"isServiceOK: check goole services version" ); + Log.d(TAG,"isServiceOK: check google services version" ); int available = GoogleApiAvailability.getInstance().isGooglePlayServicesAvailable(MainActivity.this); if(available == ConnectionResult.SUCCESS){ diff --git a/app/src/main/java/com/example/webapplicationwithspring/MapActivity.java b/app/src/main/java/com/example/webapplicationwithspring/MapActivity.java index aa28c8d..f16e66d 100644 --- a/app/src/main/java/com/example/webapplicationwithspring/MapActivity.java +++ b/app/src/main/java/com/example/webapplicationwithspring/MapActivity.java @@ -1,9 +1,7 @@ package com.example.webapplicationwithspring; import android.Manifest; -import android.app.Activity; -import android.app.AppComponentFactory; -import android.content.Context; +import android.content.Intent; import android.content.pm.PackageManager; import android.os.Bundle; import android.util.Log; @@ -15,7 +13,6 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.core.app.ActivityCompat; import androidx.core.content.ContextCompat; -import androidx.fragment.app.Fragment; import com.google.android.gms.maps.GoogleMap; import com.google.android.gms.maps.OnMapReadyCallback; @@ -23,30 +20,35 @@ import com.google.android.material.bottomnavigation.BottomNavigationView; public class MapActivity extends AppCompatActivity implements OnMapReadyCallback{ - +// define tags and permission strings private static final String TAG = "MapActivity"; private static final String FINE_LOCATION = Manifest.permission.ACCESS_FINE_LOCATION; private static final String COARSE_LOCATION = Manifest.permission.ACCESS_COARSE_LOCATION; private Boolean mLocationPermissionGranted = false; private static final int L_PERMISSION_REQUEST_CODE = 1234; - + // this will switch between items in the navigation bar private BottomNavigationView.OnNavigationItemSelectedListener navListener = new BottomNavigationView.OnNavigationItemSelectedListener() { @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { - Fragment selectedFrag = null; + // define the logic to switch between the fragments in navigation bar switch (item.getItemId()){ case R.id.nav_events: { + // when the new item was clicked we switch an activity Toast.makeText(getApplicationContext(), "You are going to open events fragment", Toast.LENGTH_SHORT).show(); + startActivity(new Intent(getApplicationContext(), EventsActivity.class)); + overridePendingTransition(0,0); + break; } case R.id.nav_profile:{ + Toast.makeText(getApplicationContext(), "You are going to open profile fragment", Toast.LENGTH_SHORT).show(); break; } case R.id.nav_map:{ - Toast.makeText(getApplicationContext(), "You are going to open the Map", Toast.LENGTH_SHORT).show(); + Toast.makeText(getApplicationContext(), "You are already in the Map", Toast.LENGTH_SHORT).show(); break; } } @@ -59,9 +61,12 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { public void onCreate(@Nullable Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.activity_map); + // map initialization getLocationPermission(); + // set the bottom navigation to current item BottomNavigationView nView = findViewById(R.id.bottom_navigation); nView.setOnNavigationItemSelectedListener(navListener); + nView.setSelectedItemId(R.id.nav_map); } private void initMap(){ @@ -69,7 +74,7 @@ private void initMap(){ SupportMapFragment mapFragment = (SupportMapFragment) getSupportFragmentManager().findFragmentById(R.id.map); mapFragment.getMapAsync(MapActivity.this); } - + // get location permission private void getLocationPermission(){ Log.d(TAG, "getLocation permission : gettionf location permissions"); String[] permissions = {Manifest.permission.ACCESS_FINE_LOCATION, @@ -83,7 +88,7 @@ private void getLocationPermission(){ } } } - +// check for all permissions to be granted @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { Log.d(TAG, "onRequestPermissionResult : called"); @@ -105,7 +110,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis } } } - +// when the map is ready initialize it @Override public void onMapReady(GoogleMap googleMap) { Toast.makeText(this, "Map is ready", Toast.LENGTH_SHORT).show(); diff --git a/app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardFragment.java b/app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardFragment.java deleted file mode 100644 index 8b9011f..0000000 --- a/app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardFragment.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.example.webapplicationwithspring.ui.dashboard; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; - -import com.example.webapplicationwithspring.R; - -public class DashboardFragment extends Fragment { - - private DashboardViewModel dashboardViewModel; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - dashboardViewModel = - ViewModelProviders.of(this).get(DashboardViewModel.class); - View root = inflater.inflate(R.layout.fragment_dashboard, container, false); - final TextView textView = root.findViewById(R.id.text_dashboard); - dashboardViewModel.getText().observe(this, new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardViewModel.java b/app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardViewModel.java deleted file mode 100644 index b406a0e..0000000 --- a/app/src/main/java/com/example/webapplicationwithspring/ui/dashboard/DashboardViewModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.webapplicationwithspring.ui.dashboard; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -public class DashboardViewModel extends ViewModel { - - private MutableLiveData mText; - - public DashboardViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is dashboard fragment"); - } - - public LiveData getText() { - return mText; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeFragment.java b/app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeFragment.java deleted file mode 100644 index 1f5cf94..0000000 --- a/app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeFragment.java +++ /dev/null @@ -1,37 +0,0 @@ -package com.example.webapplicationwithspring.ui.home; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; - -import com.example.webapplicationwithspring.R; - -public class HomeFragment extends Fragment { -/* - private HomeViewModel homeViewModel; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - homeViewModel = - ViewModelProviders.of(this).get(HomeViewModel.class); - View root = inflater.inflate(R.layout.fragment_home, container, false); - final TextView textView = root.findViewById(R.id.text_home); - homeViewModel.getText().observe(this, new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } - - */ -} \ No newline at end of file diff --git a/app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeViewModel.java b/app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeViewModel.java deleted file mode 100644 index 042aecc..0000000 --- a/app/src/main/java/com/example/webapplicationwithspring/ui/home/HomeViewModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.webapplicationwithspring.ui.home; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -public class HomeViewModel extends ViewModel { - - private MutableLiveData mText; - - public HomeViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is home fragment"); - } - - public LiveData getText() { - return mText; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsFragment.java b/app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsFragment.java deleted file mode 100644 index 29b5a2b..0000000 --- a/app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsFragment.java +++ /dev/null @@ -1,35 +0,0 @@ -package com.example.webapplicationwithspring.ui.notifications; - -import android.os.Bundle; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.TextView; - -import androidx.annotation.Nullable; -import androidx.annotation.NonNull; -import androidx.fragment.app.Fragment; -import androidx.lifecycle.Observer; -import androidx.lifecycle.ViewModelProviders; - -import com.example.webapplicationwithspring.R; - -public class NotificationsFragment extends Fragment { - - private NotificationsViewModel notificationsViewModel; - - public View onCreateView(@NonNull LayoutInflater inflater, - ViewGroup container, Bundle savedInstanceState) { - notificationsViewModel = - ViewModelProviders.of(this).get(NotificationsViewModel.class); - View root = inflater.inflate(R.layout.fragment_notifications, container, false); - final TextView textView = root.findViewById(R.id.text_notifications); - notificationsViewModel.getText().observe(this, new Observer() { - @Override - public void onChanged(@Nullable String s) { - textView.setText(s); - } - }); - return root; - } -} \ No newline at end of file diff --git a/app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsViewModel.java b/app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsViewModel.java deleted file mode 100644 index da44dc1..0000000 --- a/app/src/main/java/com/example/webapplicationwithspring/ui/notifications/NotificationsViewModel.java +++ /dev/null @@ -1,19 +0,0 @@ -package com.example.webapplicationwithspring.ui.notifications; - -import androidx.lifecycle.LiveData; -import androidx.lifecycle.MutableLiveData; -import androidx.lifecycle.ViewModel; - -public class NotificationsViewModel extends ViewModel { - - private MutableLiveData mText; - - public NotificationsViewModel() { - mText = new MutableLiveData<>(); - mText.setValue("This is notifications fragment"); - } - - public LiveData getText() { - return mText; - } -} \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_room_black_24dp.xml b/app/src/main/res/drawable/ic_room_black_24dp.xml new file mode 100644 index 0000000..e3291a9 --- /dev/null +++ b/app/src/main/res/drawable/ic_room_black_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/layout/activity_events.xml b/app/src/main/res/layout/activity_events.xml new file mode 100644 index 0000000..214aa96 --- /dev/null +++ b/app/src/main/res/layout/activity_events.xml @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 20d7eaf..22be0ef 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -22,4 +22,14 @@ app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.345" /> + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 31f1936..43072d9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -9,4 +9,5 @@ Home Dashboard Notifications + Get Direction diff --git a/build.gradle b/build.gradle index a5bb815..0b02743 100644 --- a/build.gradle +++ b/build.gradle @@ -7,7 +7,7 @@ buildscript { } dependencies { - classpath 'com.android.tools.build:gradle:3.5.3' + classpath 'com.android.tools.build:gradle:4.0.2' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 452fe24..70b86a4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Tue Oct 06 22:28:10 MSK 2020 +#Fri Oct 23 00:02:35 MSK 2020 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-5.4.1-all.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip