Loading app/build.gradle +6 −6 Original line number Diff line number Diff line Loading @@ -10,13 +10,13 @@ apply plugin: 'com.android.application' android { compileSdkVersion 30 buildToolsVersion '30.0.3' compileSdkVersion 31 buildToolsVersion '31.0.0' defaultConfig { applicationId 'net.fabiszewski.ulogger' minSdkVersion 19 targetSdkVersion 30 targetSdkVersion 31 versionCode 305 versionName '3.5' } Loading Loading @@ -45,8 +45,8 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.exifinterface:exifinterface:1.3.2' testImplementation 'junit:junit:4.13' implementation 'androidx.exifinterface:exifinterface:1.3.3' testImplementation 'junit:junit:4.13.2' } app/src/main/AndroidManifest.xml +4 −1 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ </queries> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- For writing camera images API <= 28 --> Loading Loading @@ -39,7 +40,9 @@ android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="UnusedAttribute"> <activity android:name=".MainActivity"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> Loading app/src/main/java/net/fabiszewski/ulogger/DbAccess.java +25 −25 Original line number Diff line number Diff line Loading @@ -562,15 +562,15 @@ class DbAccess implements AutoCloseable { if (positions.moveToFirst()) { double distance = 0.0; long count = 1; double startLon = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LONGITUDE)); double startLat = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LATITUDE)); long startTime = positions.getLong(positions.getColumnIndex(DbContract.Positions.COLUMN_TIME)); double startLon = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LONGITUDE)); double startLat = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LATITUDE)); long startTime = positions.getLong(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); long endTime = startTime; while (positions.moveToNext()) { count++; double endLon = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LONGITUDE)); double endLat = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LATITUDE)); endTime = positions.getLong(positions.getColumnIndex(DbContract.Positions.COLUMN_TIME)); double endLon = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LONGITUDE)); double endLat = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LATITUDE)); endTime = positions.getLong(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); float[] results = new float[1]; Location.distanceBetween(startLat, startLon, endLat, endLon, results); distance += results[0]; Loading Loading @@ -629,7 +629,7 @@ class DbAccess implements AutoCloseable { * @return String accuracy */ static String getAccuracy(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_ACCURACY)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ACCURACY)); } /** Loading @@ -639,7 +639,7 @@ class DbAccess implements AutoCloseable { * @return True if has accuracy data */ static boolean hasAccuracy(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_ACCURACY)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ACCURACY)); } /** Loading @@ -649,7 +649,7 @@ class DbAccess implements AutoCloseable { * @return String speed */ static String getSpeed(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_SPEED)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_SPEED)); } /** Loading @@ -659,7 +659,7 @@ class DbAccess implements AutoCloseable { * @return True if has speed data */ static boolean hasSpeed(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_SPEED)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_SPEED)); } /** Loading @@ -669,7 +669,7 @@ class DbAccess implements AutoCloseable { * @return String bearing */ static String getBearing(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_BEARING)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_BEARING)); } /** Loading @@ -679,7 +679,7 @@ class DbAccess implements AutoCloseable { * @return True if has bearing data */ static boolean hasBearing(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_BEARING)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_BEARING)); } /** Loading @@ -689,7 +689,7 @@ class DbAccess implements AutoCloseable { * @return String altitude */ static String getAltitude(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_ALTITUDE)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ALTITUDE)); } /** Loading @@ -699,7 +699,7 @@ class DbAccess implements AutoCloseable { * @return True if has altitude data */ static boolean hasAltitude(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_ALTITUDE)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ALTITUDE)); } /** Loading @@ -709,7 +709,7 @@ class DbAccess implements AutoCloseable { * @return String provider */ static String getProvider(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_PROVIDER)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_PROVIDER)); } /** Loading @@ -719,7 +719,7 @@ class DbAccess implements AutoCloseable { * @return True if has provider data */ static boolean hasProvider(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_PROVIDER)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_PROVIDER)); } /** Loading @@ -729,7 +729,7 @@ class DbAccess implements AutoCloseable { * @return String comment */ static String getComment(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_COMMENT)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_COMMENT)); } /** Loading @@ -739,7 +739,7 @@ class DbAccess implements AutoCloseable { * @return True if has image URI */ static boolean hasImageUri(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_IMAGE_URI)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_IMAGE_URI)); } /** Loading @@ -749,7 +749,7 @@ class DbAccess implements AutoCloseable { * @return String URI */ static String getImageUri(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_IMAGE_URI)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_IMAGE_URI)); } /** Loading @@ -759,7 +759,7 @@ class DbAccess implements AutoCloseable { * @return True if has comment data */ static boolean hasComment(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_COMMENT)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_COMMENT)); } /** Loading @@ -769,7 +769,7 @@ class DbAccess implements AutoCloseable { * @return String latitude */ static String getLatitude(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_LATITUDE)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LATITUDE)); } /** Loading @@ -779,7 +779,7 @@ class DbAccess implements AutoCloseable { * @return String longitude */ static String getLongitude(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_LONGITUDE)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LONGITUDE)); } /** Loading @@ -789,7 +789,7 @@ class DbAccess implements AutoCloseable { * @return String time */ static String getTime(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_TIME)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); } /** Loading @@ -799,7 +799,7 @@ class DbAccess implements AutoCloseable { * @return String time */ static String getTimeISO8601(Cursor cursor) { long timestamp = cursor.getLong(cursor.getColumnIndex(DbContract.Positions.COLUMN_TIME)); long timestamp = cursor.getLong(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); return getTimeISO8601(timestamp); } Loading @@ -810,7 +810,7 @@ class DbAccess implements AutoCloseable { * @return String ID */ static String getID(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions._ID)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions._ID)); } /** Loading app/src/main/java/net/fabiszewski/ulogger/WebSyncService.java +3 −3 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ package net.fabiszewski.ulogger; import static android.app.PendingIntent.FLAG_ONE_SHOT; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; Loading @@ -31,8 +33,6 @@ import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; import static android.app.PendingIntent.FLAG_ONE_SHOT; /** * Service synchronizing local database positions with remote server. * Loading Loading @@ -142,7 +142,7 @@ public class WebSyncService extends JobIntentService { // iterate over positions in db try (Cursor cursor = db.getUnsynced()) { while (cursor.moveToNext()) { int rowId = cursor.getInt(cursor.getColumnIndex(DbContract.Positions._ID)); int rowId = cursor.getInt(cursor.getColumnIndexOrThrow(DbContract.Positions._ID)); Map<String, String> params = cursorToMap(cursor); params.put(WebHelper.PARAM_TRACKID, String.valueOf(trackId)); web.postPosition(params); Loading build.gradle +3 −3 Original line number Diff line number Diff line Loading @@ -3,10 +3,10 @@ buildscript { repositories { google() jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:4.1.2' classpath 'com.android.tools.build:gradle:7.0.3' } } Loading @@ -16,7 +16,7 @@ allprojects { } repositories { google() jcenter() mavenCentral() } } Loading Loading
app/build.gradle +6 −6 Original line number Diff line number Diff line Loading @@ -10,13 +10,13 @@ apply plugin: 'com.android.application' android { compileSdkVersion 30 buildToolsVersion '30.0.3' compileSdkVersion 31 buildToolsVersion '31.0.0' defaultConfig { applicationId 'net.fabiszewski.ulogger' minSdkVersion 19 targetSdkVersion 30 targetSdkVersion 31 versionCode 305 versionName '3.5' } Loading Loading @@ -45,8 +45,8 @@ android { dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation 'androidx.appcompat:appcompat:1.2.0' implementation 'androidx.appcompat:appcompat:1.4.0' implementation 'androidx.preference:preference:1.1.1' implementation 'androidx.exifinterface:exifinterface:1.3.2' testImplementation 'junit:junit:4.13' implementation 'androidx.exifinterface:exifinterface:1.3.3' testImplementation 'junit:junit:4.13.2' }
app/src/main/AndroidManifest.xml +4 −1 Original line number Diff line number Diff line Loading @@ -10,6 +10,7 @@ </queries> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- For writing camera images API <= 28 --> Loading Loading @@ -39,7 +40,9 @@ android:supportsRtl="true" android:theme="@style/AppTheme" tools:ignore="UnusedAttribute"> <activity android:name=".MainActivity"> <activity android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> Loading
app/src/main/java/net/fabiszewski/ulogger/DbAccess.java +25 −25 Original line number Diff line number Diff line Loading @@ -562,15 +562,15 @@ class DbAccess implements AutoCloseable { if (positions.moveToFirst()) { double distance = 0.0; long count = 1; double startLon = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LONGITUDE)); double startLat = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LATITUDE)); long startTime = positions.getLong(positions.getColumnIndex(DbContract.Positions.COLUMN_TIME)); double startLon = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LONGITUDE)); double startLat = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LATITUDE)); long startTime = positions.getLong(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); long endTime = startTime; while (positions.moveToNext()) { count++; double endLon = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LONGITUDE)); double endLat = positions.getDouble(positions.getColumnIndex(DbContract.Positions.COLUMN_LATITUDE)); endTime = positions.getLong(positions.getColumnIndex(DbContract.Positions.COLUMN_TIME)); double endLon = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LONGITUDE)); double endLat = positions.getDouble(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LATITUDE)); endTime = positions.getLong(positions.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); float[] results = new float[1]; Location.distanceBetween(startLat, startLon, endLat, endLon, results); distance += results[0]; Loading Loading @@ -629,7 +629,7 @@ class DbAccess implements AutoCloseable { * @return String accuracy */ static String getAccuracy(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_ACCURACY)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ACCURACY)); } /** Loading @@ -639,7 +639,7 @@ class DbAccess implements AutoCloseable { * @return True if has accuracy data */ static boolean hasAccuracy(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_ACCURACY)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ACCURACY)); } /** Loading @@ -649,7 +649,7 @@ class DbAccess implements AutoCloseable { * @return String speed */ static String getSpeed(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_SPEED)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_SPEED)); } /** Loading @@ -659,7 +659,7 @@ class DbAccess implements AutoCloseable { * @return True if has speed data */ static boolean hasSpeed(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_SPEED)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_SPEED)); } /** Loading @@ -669,7 +669,7 @@ class DbAccess implements AutoCloseable { * @return String bearing */ static String getBearing(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_BEARING)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_BEARING)); } /** Loading @@ -679,7 +679,7 @@ class DbAccess implements AutoCloseable { * @return True if has bearing data */ static boolean hasBearing(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_BEARING)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_BEARING)); } /** Loading @@ -689,7 +689,7 @@ class DbAccess implements AutoCloseable { * @return String altitude */ static String getAltitude(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_ALTITUDE)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ALTITUDE)); } /** Loading @@ -699,7 +699,7 @@ class DbAccess implements AutoCloseable { * @return True if has altitude data */ static boolean hasAltitude(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_ALTITUDE)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_ALTITUDE)); } /** Loading @@ -709,7 +709,7 @@ class DbAccess implements AutoCloseable { * @return String provider */ static String getProvider(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_PROVIDER)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_PROVIDER)); } /** Loading @@ -719,7 +719,7 @@ class DbAccess implements AutoCloseable { * @return True if has provider data */ static boolean hasProvider(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_PROVIDER)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_PROVIDER)); } /** Loading @@ -729,7 +729,7 @@ class DbAccess implements AutoCloseable { * @return String comment */ static String getComment(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_COMMENT)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_COMMENT)); } /** Loading @@ -739,7 +739,7 @@ class DbAccess implements AutoCloseable { * @return True if has image URI */ static boolean hasImageUri(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_IMAGE_URI)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_IMAGE_URI)); } /** Loading @@ -749,7 +749,7 @@ class DbAccess implements AutoCloseable { * @return String URI */ static String getImageUri(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_IMAGE_URI)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_IMAGE_URI)); } /** Loading @@ -759,7 +759,7 @@ class DbAccess implements AutoCloseable { * @return True if has comment data */ static boolean hasComment(Cursor cursor) { return !cursor.isNull(cursor.getColumnIndex(DbContract.Positions.COLUMN_COMMENT)); return !cursor.isNull(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_COMMENT)); } /** Loading @@ -769,7 +769,7 @@ class DbAccess implements AutoCloseable { * @return String latitude */ static String getLatitude(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_LATITUDE)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LATITUDE)); } /** Loading @@ -779,7 +779,7 @@ class DbAccess implements AutoCloseable { * @return String longitude */ static String getLongitude(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_LONGITUDE)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_LONGITUDE)); } /** Loading @@ -789,7 +789,7 @@ class DbAccess implements AutoCloseable { * @return String time */ static String getTime(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions.COLUMN_TIME)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); } /** Loading @@ -799,7 +799,7 @@ class DbAccess implements AutoCloseable { * @return String time */ static String getTimeISO8601(Cursor cursor) { long timestamp = cursor.getLong(cursor.getColumnIndex(DbContract.Positions.COLUMN_TIME)); long timestamp = cursor.getLong(cursor.getColumnIndexOrThrow(DbContract.Positions.COLUMN_TIME)); return getTimeISO8601(timestamp); } Loading @@ -810,7 +810,7 @@ class DbAccess implements AutoCloseable { * @return String ID */ static String getID(Cursor cursor) { return cursor.getString(cursor.getColumnIndex(DbContract.Positions._ID)); return cursor.getString(cursor.getColumnIndexOrThrow(DbContract.Positions._ID)); } /** Loading
app/src/main/java/net/fabiszewski/ulogger/WebSyncService.java +3 −3 Original line number Diff line number Diff line Loading @@ -9,6 +9,8 @@ package net.fabiszewski.ulogger; import static android.app.PendingIntent.FLAG_ONE_SHOT; import android.app.AlarmManager; import android.app.PendingIntent; import android.content.Context; Loading @@ -31,8 +33,6 @@ import java.net.UnknownHostException; import java.util.HashMap; import java.util.Map; import static android.app.PendingIntent.FLAG_ONE_SHOT; /** * Service synchronizing local database positions with remote server. * Loading Loading @@ -142,7 +142,7 @@ public class WebSyncService extends JobIntentService { // iterate over positions in db try (Cursor cursor = db.getUnsynced()) { while (cursor.moveToNext()) { int rowId = cursor.getInt(cursor.getColumnIndex(DbContract.Positions._ID)); int rowId = cursor.getInt(cursor.getColumnIndexOrThrow(DbContract.Positions._ID)); Map<String, String> params = cursorToMap(cursor); params.put(WebHelper.PARAM_TRACKID, String.valueOf(trackId)); web.postPosition(params); Loading
build.gradle +3 −3 Original line number Diff line number Diff line Loading @@ -3,10 +3,10 @@ buildscript { repositories { google() jcenter() mavenCentral() } dependencies { classpath 'com.android.tools.build:gradle:4.1.2' classpath 'com.android.tools.build:gradle:7.0.3' } } Loading @@ -16,7 +16,7 @@ allprojects { } repositories { google() jcenter() mavenCentral() } } Loading