mirror of
https://github.com/russok/FitoTrack.git
synced 2025-10-29 00:32:11 -07:00
Merge remote-tracking branch 'mylocal/develop' into develop
This commit is contained in:
commit
4e354a8078
19
.gitignore
vendored
Normal file
19
.gitignore
vendored
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
|
||||||
|
|
||||||
|
# dependencies
|
||||||
|
/node_modules
|
||||||
|
|
||||||
|
# testing
|
||||||
|
/coverage
|
||||||
|
|
||||||
|
# production
|
||||||
|
/build
|
||||||
|
/app/build
|
||||||
|
/app/release
|
||||||
|
|
||||||
|
# misc
|
||||||
|
.*
|
||||||
|
*.properties
|
||||||
|
*.iml
|
||||||
|
!.gitignore
|
||||||
|
|
||||||
@ -49,6 +49,12 @@ android {
|
|||||||
sourceCompatibility = '1.8'
|
sourceCompatibility = '1.8'
|
||||||
targetCompatibility = '1.8'
|
targetCompatibility = '1.8'
|
||||||
}
|
}
|
||||||
|
lintOptions {
|
||||||
|
checkReleaseBuilds false
|
||||||
|
// Or, if you prefer, you can continue to check for errors in release builds,
|
||||||
|
// but continue the build even when errors are found:
|
||||||
|
// abortOnError false
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
|||||||
@ -38,6 +38,8 @@ import android.view.ViewGroup;
|
|||||||
import android.widget.EditText;
|
import android.widget.EditText;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import android.speech.tts.TextToSpeech;
|
||||||
|
|
||||||
import androidx.core.app.ActivityCompat;
|
import androidx.core.app.ActivityCompat;
|
||||||
|
|
||||||
import org.mapsforge.core.graphics.Paint;
|
import org.mapsforge.core.graphics.Paint;
|
||||||
@ -50,9 +52,11 @@ import org.mapsforge.map.layer.overlay.Polyline;
|
|||||||
|
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Locale;
|
||||||
|
|
||||||
import de.tadris.fitness.Instance;
|
import de.tadris.fitness.Instance;
|
||||||
import de.tadris.fitness.R;
|
import de.tadris.fitness.R;
|
||||||
|
import de.tadris.fitness.data.UserPreferences;
|
||||||
import de.tadris.fitness.data.Workout;
|
import de.tadris.fitness.data.Workout;
|
||||||
import de.tadris.fitness.map.MapManager;
|
import de.tadris.fitness.map.MapManager;
|
||||||
import de.tadris.fitness.map.tilesource.TileSources;
|
import de.tadris.fitness.map.tilesource.TileSources;
|
||||||
@ -82,6 +86,8 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location
|
|||||||
private Intent locationListener;
|
private Intent locationListener;
|
||||||
private Intent pressureService;
|
private Intent pressureService;
|
||||||
private boolean saved= false;
|
private boolean saved= false;
|
||||||
|
TextToSpeech tts;
|
||||||
|
boolean ttsReady = false;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
@ -102,6 +108,9 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location
|
|||||||
recorder= new WorkoutRecorder(this, ACTIVITY, this);
|
recorder= new WorkoutRecorder(this, ACTIVITY, this);
|
||||||
recorder.start();
|
recorder.start();
|
||||||
|
|
||||||
|
tts = new TextToSpeech(this, (int status) -> {
|
||||||
|
ttsReady = status == TextToSpeech.SUCCESS && tts.setLanguage(Locale.getDefault())>=0;
|
||||||
|
});
|
||||||
infoViews[0]= new InfoViewHolder(findViewById(R.id.recordInfo1Title), findViewById(R.id.recordInfo1Value));
|
infoViews[0]= new InfoViewHolder(findViewById(R.id.recordInfo1Title), findViewById(R.id.recordInfo1Value));
|
||||||
infoViews[1]= new InfoViewHolder(findViewById(R.id.recordInfo2Title), findViewById(R.id.recordInfo2Value));
|
infoViews[1]= new InfoViewHolder(findViewById(R.id.recordInfo2Title), findViewById(R.id.recordInfo2Value));
|
||||||
infoViews[2]= new InfoViewHolder(findViewById(R.id.recordInfo3Title), findViewById(R.id.recordInfo3Value));
|
infoViews[2]= new InfoViewHolder(findViewById(R.id.recordInfo3Title), findViewById(R.id.recordInfo3Value));
|
||||||
@ -169,9 +178,7 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location
|
|||||||
try{
|
try{
|
||||||
while (recorder.isActive()){
|
while (recorder.isActive()){
|
||||||
Thread.sleep(1000);
|
Thread.sleep(1000);
|
||||||
if(isResumed){
|
mHandler.post(this::updateDescription);
|
||||||
mHandler.post(this::updateDescription);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}catch (InterruptedException e){
|
}catch (InterruptedException e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
@ -179,15 +186,38 @@ public class RecordWorkoutActivity extends FitoTrackActivity implements Location
|
|||||||
}).start();
|
}).start();
|
||||||
}
|
}
|
||||||
|
|
||||||
private int i = 0;
|
long lastSpokenUpdateTime = 0;
|
||||||
|
int lastSpokenUpdateDistance = 0;
|
||||||
|
|
||||||
private void updateDescription(){
|
private void updateDescription() {
|
||||||
i++;
|
long duration = recorder.getDuration();
|
||||||
timeView.setText(UnitUtils.getHourMinuteSecondTime(recorder.getDuration()));
|
int distanceInMeters = recorder.getDistance();
|
||||||
infoViews[0].setText(getString(R.string.workoutDistance), UnitUtils.getDistance(recorder.getDistance()));
|
final String distanceCaption = getString(R.string.workoutDistance);
|
||||||
infoViews[1].setText(getString(R.string.workoutBurnedEnergy), recorder.getCalories() + " kcal");
|
final String distance = UnitUtils.getDistance(distanceInMeters);
|
||||||
infoViews[2].setText(getString(R.string.workoutAvgSpeed), UnitUtils.getSpeed(Math.min(100d, recorder.getAvgSpeed())));
|
final String avgSpeedCaption = getString(R.string.workoutAvgSpeed);
|
||||||
infoViews[3].setText(getString(R.string.workoutPauseDuration), UnitUtils.getHourMinuteSecondTime(recorder.getPauseDuration()));
|
final String avgSpeed = UnitUtils.getSpeed(Math.min(100d, recorder.getAvgSpeed()));
|
||||||
|
if (isResumed) {
|
||||||
|
timeView.setText(UnitUtils.getHourMinuteSecondTime(duration));
|
||||||
|
infoViews[0].setText(distanceCaption, distance);
|
||||||
|
infoViews[1].setText(getString(R.string.workoutBurnedEnergy), recorder.getCalories() + " kcal");
|
||||||
|
infoViews[2].setText(avgSpeedCaption, avgSpeed);
|
||||||
|
infoViews[3].setText(getString(R.string.workoutPauseDuration), UnitUtils.getHourMinuteSecondTime(recorder.getPauseDuration()));
|
||||||
|
}
|
||||||
|
|
||||||
|
final UserPreferences prefs = Instance.getInstance(this).userPreferences;
|
||||||
|
final long intervalT = 60 * 1000 * prefs.getSpokenUpdateTimePeriod();
|
||||||
|
final int intervalInMeters = (int) (1000.0 / UnitUtils.CHOSEN_SYSTEM.getDistanceFromKilometers(1) * prefs.getSpokenUpdateDistancePeriod());
|
||||||
|
if (!ttsReady ||
|
||||||
|
(intervalT == 0 || duration / intervalT == lastSpokenUpdateTime / intervalT)
|
||||||
|
&& (intervalInMeters == 0 || distanceInMeters / intervalInMeters == lastSpokenUpdateDistance / intervalInMeters)
|
||||||
|
) return;
|
||||||
|
|
||||||
|
final String text = distanceCaption + ": " + distance + ". "
|
||||||
|
+ avgSpeedCaption + ": " + avgSpeed;
|
||||||
|
tts.speak(text, TextToSpeech.QUEUE_FLUSH, null, "updateDescription" + duration);
|
||||||
|
|
||||||
|
lastSpokenUpdateTime = duration;
|
||||||
|
lastSpokenUpdateDistance = distanceInMeters;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void stop(){
|
private void stop(){
|
||||||
|
|||||||
@ -165,6 +165,10 @@ public class SettingsActivity extends PreferenceActivity {
|
|||||||
showWeightPicker();
|
showWeightPicker();
|
||||||
return true;
|
return true;
|
||||||
});
|
});
|
||||||
|
findPreference("speech").setOnPreferenceClickListener(preference -> {
|
||||||
|
showSpeechConfig();
|
||||||
|
return true;
|
||||||
|
});
|
||||||
findPreference("import").setOnPreferenceClickListener(preference -> {
|
findPreference("import").setOnPreferenceClickListener(preference -> {
|
||||||
showImportDialog();
|
showImportDialog();
|
||||||
return true;
|
return true;
|
||||||
@ -285,7 +289,8 @@ public class SettingsActivity extends PreferenceActivity {
|
|||||||
np.setMaxValue((int) UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(150));
|
np.setMaxValue((int) UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(150));
|
||||||
np.setMinValue((int) UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(20));
|
np.setMinValue((int) UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(20));
|
||||||
np.setFormatter(value -> value + " " + UnitUtils.CHOSEN_SYSTEM.getWeightUnit());
|
np.setFormatter(value -> value + " " + UnitUtils.CHOSEN_SYSTEM.getWeightUnit());
|
||||||
np.setValue((int)Math.round(UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(preferences.getInt("weight", 80))));
|
final String preferenceVariable = "weight";
|
||||||
|
np.setValue((int)Math.round(UnitUtils.CHOSEN_SYSTEM.getWeightFromKilogram(preferences.getInt(preferenceVariable, 80))));
|
||||||
np.setWrapSelectorWheel(false);
|
np.setWrapSelectorWheel(false);
|
||||||
|
|
||||||
d.setView(v);
|
d.setView(v);
|
||||||
@ -294,7 +299,47 @@ public class SettingsActivity extends PreferenceActivity {
|
|||||||
d.setPositiveButton(R.string.okay, (dialog, which) -> {
|
d.setPositiveButton(R.string.okay, (dialog, which) -> {
|
||||||
int unitValue= np.getValue();
|
int unitValue= np.getValue();
|
||||||
int kilograms= (int)Math.round(UnitUtils.CHOSEN_SYSTEM.getKilogramFromUnit(unitValue));
|
int kilograms= (int)Math.round(UnitUtils.CHOSEN_SYSTEM.getKilogramFromUnit(unitValue));
|
||||||
preferences.edit().putInt("weight", kilograms).apply();
|
preferences.edit().putInt(preferenceVariable, kilograms).apply();
|
||||||
|
});
|
||||||
|
|
||||||
|
d.create().show();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean showSpeechConfig() {
|
||||||
|
UnitUtils.setUnit(this); // Maybe the user changed unit system
|
||||||
|
|
||||||
|
final AlertDialog.Builder d = new AlertDialog.Builder(this);
|
||||||
|
final SharedPreferences preferences= PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
|
d.setTitle(getString(R.string.pref_spoken_updates_summary));
|
||||||
|
View v= getLayoutInflater().inflate(R.layout.dialog_spoken_updates_picker, null);
|
||||||
|
|
||||||
|
NumberPicker npT = v.findViewById(R.id.spokenUpdatesTimePicker);
|
||||||
|
npT.setMaxValue(60);
|
||||||
|
npT.setMinValue(0);
|
||||||
|
npT.setFormatter(value -> value == 0 ? "No speech" : value + " min");
|
||||||
|
final String updateTimeVariable = "spokenUpdateTimePeriod";
|
||||||
|
npT.setValue(preferences.getInt(updateTimeVariable, 0));
|
||||||
|
npT.setWrapSelectorWheel(false);
|
||||||
|
|
||||||
|
final String distanceUnit = " " + UnitUtils.CHOSEN_SYSTEM.getLongDistanceUnit();
|
||||||
|
NumberPicker npD = v.findViewById(R.id.spokenUpdatesDistancePicker);
|
||||||
|
npD.setMaxValue(10);
|
||||||
|
npD.setMinValue(0);
|
||||||
|
npD.setFormatter(value -> value == 0 ? "No speech" : value + distanceUnit);
|
||||||
|
final String updateDistanceVariable = "spokenUpdateDistancePeriod";
|
||||||
|
npD.setValue(preferences.getInt(updateDistanceVariable, 0));
|
||||||
|
npD.setWrapSelectorWheel(false);
|
||||||
|
|
||||||
|
d.setView(v);
|
||||||
|
|
||||||
|
d.setNegativeButton(R.string.cancel, null);
|
||||||
|
d.setPositiveButton(R.string.okay, (dialog, which) -> {
|
||||||
|
preferences.edit()
|
||||||
|
.putInt(updateTimeVariable, npT.getValue())
|
||||||
|
.putInt(updateDistanceVariable, npD.getValue())
|
||||||
|
.apply();
|
||||||
});
|
});
|
||||||
|
|
||||||
d.create().show();
|
d.create().show();
|
||||||
|
|||||||
@ -35,6 +35,14 @@ public class UserPreferences {
|
|||||||
return preferences.getInt("weight", 80);
|
return preferences.getInt("weight", 80);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getSpokenUpdateTimePeriod(){
|
||||||
|
return preferences.getInt("spokenUpdateTimePeriod", 5);
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getSpokenUpdateDistancePeriod(){
|
||||||
|
return preferences.getInt("spokenUpdateDistancePeriod", 1);
|
||||||
|
}
|
||||||
|
|
||||||
public String getMapStyle(){
|
public String getMapStyle(){
|
||||||
return preferences.getString("mapStyle", "osm.mapnik");
|
return preferences.getString("mapStyle", "osm.mapnik");
|
||||||
}
|
}
|
||||||
|
|||||||
@ -62,7 +62,6 @@ public class MapManager {
|
|||||||
mapView.getLayerManager().redrawLayers();
|
mapView.getLayerManager().redrawLayers();
|
||||||
|
|
||||||
mapView.setZoomLevel((byte) 18);
|
mapView.setZoomLevel((byte) 18);
|
||||||
mapView.setCenter(new LatLong(52, 13));
|
|
||||||
|
|
||||||
return downloadLayer;
|
return downloadLayer;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -30,7 +30,7 @@ public class MapnikTileSource extends FitoTrackTileSource {
|
|||||||
"a.tile.openstreetmap.org", "b.tile.openstreetmap.org", "c.tile.openstreetmap.org"}, 443);
|
"a.tile.openstreetmap.org", "b.tile.openstreetmap.org", "c.tile.openstreetmap.org"}, 443);
|
||||||
private static final int PARALLEL_REQUESTS_LIMIT = 8;
|
private static final int PARALLEL_REQUESTS_LIMIT = 8;
|
||||||
private static final String PROTOCOL = "https";
|
private static final String PROTOCOL = "https";
|
||||||
private static final int ZOOM_LEVEL_MAX = 18;
|
private static final int ZOOM_LEVEL_MAX = 19;
|
||||||
private static final int ZOOM_LEVEL_MIN = 0;
|
private static final int ZOOM_LEVEL_MIN = 0;
|
||||||
private static final String NAME = "OSM Mapnik";
|
private static final String NAME = "OSM Mapnik";
|
||||||
|
|
||||||
|
|||||||
@ -47,7 +47,7 @@ public class WorkoutRecorder implements LocationListener.LocationChangeListener
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private static final int PAUSE_TIME= 10000;
|
private static final int PAUSE_TIME= 1000*1000;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Time after which the workout is stopped and saved automatically because there is no activity anymore
|
* Time after which the workout is stopped and saved automatically because there is no activity anymore
|
||||||
|
|||||||
40
app/src/main/res/layout/dialog_spoken_updates_picker.xml
Normal file
40
app/src/main/res/layout/dialog_spoken_updates_picker.xml
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!--
|
||||||
|
~ Copyright (c) 2020 Ruslan Sokolovski <russok@gmail.com>
|
||||||
|
~
|
||||||
|
~ This file is part of FitoTrack
|
||||||
|
~
|
||||||
|
~ FitoTrack is free software: you can redistribute it and/or modify
|
||||||
|
~ it under the terms of the GNU General Public License as published by
|
||||||
|
~ the Free Software Foundation, either version 3 of the License, or
|
||||||
|
~ (at your option) any later version.
|
||||||
|
~
|
||||||
|
~ FitoTrack is distributed in the hope that it will be useful,
|
||||||
|
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
~ GNU General Public License for more details.
|
||||||
|
~
|
||||||
|
~ You should have received a copy of the GNU General Public License
|
||||||
|
~ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
-->
|
||||||
|
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="fill_parent" >
|
||||||
|
|
||||||
|
<NumberPicker
|
||||||
|
android:id="@+id/spokenUpdatesTimePicker"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_margin="50dp"
|
||||||
|
android:layout_alignParentLeft="true"/>
|
||||||
|
|
||||||
|
<NumberPicker
|
||||||
|
android:id="@+id/spokenUpdatesDistancePicker"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:layout_margin="50dp"
|
||||||
|
android:layout_alignParentRight="true"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
@ -50,6 +50,11 @@
|
|||||||
<string name="pref_unit_system">Bevorzugtes Einheitensystem</string>
|
<string name="pref_unit_system">Bevorzugtes Einheitensystem</string>
|
||||||
<string name="pref_weight">Dein Gewicht</string>
|
<string name="pref_weight">Dein Gewicht</string>
|
||||||
<string name="pref_weight_summary">Dein Gewicht ist zur Kalorienberechnung wichtig</string>
|
<string name="pref_weight_summary">Dein Gewicht ist zur Kalorienberechnung wichtig</string>
|
||||||
|
|
||||||
|
<!-- please translate -->
|
||||||
|
<string name="pref_spoken_updates">Spoken Updates</string>
|
||||||
|
<string name="pref_spoken_updates_summary">Choose the time and distance between spoken updates</string>
|
||||||
|
|
||||||
<string name="preferences">Einstellungen</string>
|
<string name="preferences">Einstellungen</string>
|
||||||
<string name="recordWorkout">Workout aufzeichnen</string>
|
<string name="recordWorkout">Workout aufzeichnen</string>
|
||||||
<string name="restore">Wiederherstellen</string>
|
<string name="restore">Wiederherstellen</string>
|
||||||
@ -107,4 +112,4 @@
|
|||||||
<string name="uploadFailed">Upload fehlgeschlagen</string>
|
<string name="uploadFailed">Upload fehlgeschlagen</string>
|
||||||
<string name="uploadSuccessful">Upload erfolgreich</string>
|
<string name="uploadSuccessful">Upload erfolgreich</string>
|
||||||
<string name="uploadFailedOsmNotAuthorized">Nicht autorisiert, nocheinmal versuchen</string>
|
<string name="uploadFailedOsmNotAuthorized">Nicht autorisiert, nocheinmal versuchen</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@ -57,7 +57,7 @@
|
|||||||
<string name="workoutPace">Pace</string>
|
<string name="workoutPace">Pace</string>
|
||||||
<string name="workoutRoute">Route</string>
|
<string name="workoutRoute">Route</string>
|
||||||
<string name="workoutSpeed">Speed</string>
|
<string name="workoutSpeed">Speed</string>
|
||||||
<string name="workoutAvgSpeed">Avg. Speed</string>
|
<string name="workoutAvgSpeed">Average Speed</string>
|
||||||
<string name="workoutTopSpeed">Top Speed</string>
|
<string name="workoutTopSpeed">Top Speed</string>
|
||||||
<string name="workoutBurnedEnergy">Burned Energy</string>
|
<string name="workoutBurnedEnergy">Burned Energy</string>
|
||||||
<string name="workoutTotalEnergy">Total Energy</string>
|
<string name="workoutTotalEnergy">Total Energy</string>
|
||||||
@ -112,6 +112,8 @@
|
|||||||
<string name="exportAsGpxFile">Export as GPX-File</string>
|
<string name="exportAsGpxFile">Export as GPX-File</string>
|
||||||
<string name="pref_weight">Your Weight</string>
|
<string name="pref_weight">Your Weight</string>
|
||||||
<string name="pref_weight_summary">Your weight is needed to calculate the burned calories</string>
|
<string name="pref_weight_summary">Your weight is needed to calculate the burned calories</string>
|
||||||
|
<string name="pref_spoken_updates">Spoken Updates</string>
|
||||||
|
<string name="pref_spoken_updates_summary">Choose the time and distance between spoken updates</string>
|
||||||
<string name="pref_unit_system">Preferred system of units</string>
|
<string name="pref_unit_system">Preferred system of units</string>
|
||||||
<string name="settings">Settings</string>
|
<string name="settings">Settings</string>
|
||||||
<string name="exportData">Export Data</string>
|
<string name="exportData">Export Data</string>
|
||||||
|
|||||||
@ -40,6 +40,13 @@
|
|||||||
android:key="mapStyle"
|
android:key="mapStyle"
|
||||||
android:title="@string/mapStyle" />
|
android:title="@string/mapStyle" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="speech"
|
||||||
|
android:selectAllOnFocus="true"
|
||||||
|
android:singleLine="true"
|
||||||
|
android:summary="@string/pref_spoken_updates_summary"
|
||||||
|
android:title="@string/pref_spoken_updates" />
|
||||||
|
|
||||||
|
|
||||||
<PreferenceCategory android:title="@string/data">
|
<PreferenceCategory android:title="@string/data">
|
||||||
|
|
||||||
@ -54,4 +61,4 @@
|
|||||||
</PreferenceCategory>
|
</PreferenceCategory>
|
||||||
|
|
||||||
|
|
||||||
</PreferenceScreen>
|
</PreferenceScreen>
|
||||||
|
|||||||
@ -23,11 +23,11 @@ buildscript {
|
|||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
|
||||||
}
|
}
|
||||||
dependencies {
|
dependencies {
|
||||||
classpath 'com.android.tools.build:gradle:3.5.3'
|
classpath 'com.android.tools.build:gradle:3.5.3'
|
||||||
|
|
||||||
// NOTE: Do not place your application dependencies here; they belong
|
// NOTE: Do not place your application dependencies here; they belong
|
||||||
// in the individual module build.gradle files
|
// in the individual module build.gradle files
|
||||||
}
|
}
|
||||||
@ -37,7 +37,7 @@ allprojects {
|
|||||||
repositories {
|
repositories {
|
||||||
google()
|
google()
|
||||||
jcenter()
|
jcenter()
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user