Reimplemented API Provider
To try to fix NullPointerException on mApi reported in Play Store
This commit is contained in:
		| @@ -18,12 +18,12 @@ | |||||||
| apply plugin: 'com.android.application' | apply plugin: 'com.android.application' | ||||||
|  |  | ||||||
| android { | android { | ||||||
|     compileSdkVersion 30 |     compileSdkVersion 31 | ||||||
|  |  | ||||||
|     defaultConfig { |     defaultConfig { | ||||||
|         applicationId "it.danieleverducci.nextcloudmaps" |         applicationId "it.danieleverducci.nextcloudmaps" | ||||||
|         minSdkVersion 23 |         minSdkVersion 23 | ||||||
|         targetSdkVersion 30 |         targetSdkVersion 31 | ||||||
|         versionCode 6 |         versionCode 6 | ||||||
|         versionName "0.3.4" |         versionName "0.3.4" | ||||||
|  |  | ||||||
| @@ -54,7 +54,7 @@ repositories { | |||||||
| dependencies { | dependencies { | ||||||
|     implementation fileTree(dir: "libs", include: ["*.jar"]) |     implementation fileTree(dir: "libs", include: ["*.jar"]) | ||||||
|  |  | ||||||
|     implementation 'com.android.support:design:30.0.1' |     implementation 'com.android.support:design:31.0.0' | ||||||
|     implementation 'androidx.appcompat:appcompat:1.3.1' |     implementation 'androidx.appcompat:appcompat:1.3.1' | ||||||
|     implementation 'androidx.recyclerview:recyclerview:1.2.1' |     implementation 'androidx.recyclerview:recyclerview:1.2.1' | ||||||
|     implementation "androidx.cardview:cardview:1.0.0" |     implementation "androidx.cardview:cardview:1.0.0" | ||||||
| @@ -70,7 +70,7 @@ dependencies { | |||||||
|     implementation 'com.squareup.retrofit2:converter-gson:2.6.1' |     implementation 'com.squareup.retrofit2:converter-gson:2.6.1' | ||||||
|  |  | ||||||
|     // Nextcloud SSO |     // Nextcloud SSO | ||||||
|     implementation "com.github.nextcloud:Android-SingleSignOn:0.5.6" |     implementation "com.github.nextcloud:Android-SingleSignOn:0.6.1" | ||||||
|  |  | ||||||
|     // OSMDroid |     // OSMDroid | ||||||
|     implementation 'org.osmdroid:osmdroid-android:6.1.10' |     implementation 'org.osmdroid:osmdroid-android:6.1.10' | ||||||
|   | |||||||
| @@ -35,21 +35,24 @@ | |||||||
|         android:supportsRtl="true" |         android:supportsRtl="true" | ||||||
|         android:theme="@style/AppTheme"> |         android:theme="@style/AppTheme"> | ||||||
|  |  | ||||||
|         <activity android:name=".activity.login.LoginActivity"> |         <activity android:name=".activity.login.LoginActivity" | ||||||
|  |             android:exported="true"> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.MAIN" /> |                 <action android:name="android.intent.action.MAIN" /> | ||||||
|                 <category android:name="android.intent.category.LAUNCHER" /> |                 <category android:name="android.intent.category.LAUNCHER" /> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|         </activity> |         </activity> | ||||||
|  |  | ||||||
|         <activity android:name=".activity.main.MainActivity"> |         <activity android:name=".activity.main.MainActivity" | ||||||
|  |             android:exported="true"> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.VIEW" /> |                 <action android:name="android.intent.action.VIEW" /> | ||||||
|             </intent-filter> |             </intent-filter> | ||||||
|         </activity> |         </activity> | ||||||
|  |  | ||||||
|         <activity |         <activity | ||||||
|             android:name=".activity.detail.GeofavoriteDetailActivity"> |             android:name=".activity.detail.GeofavoriteDetailActivity" | ||||||
|  |             android:exported="true"> | ||||||
|             <!-- standard "geo" scheme --> |             <!-- standard "geo" scheme --> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.VIEW"/> |                 <action android:name="android.intent.action.VIEW"/> | ||||||
| @@ -89,6 +92,7 @@ | |||||||
|         </activity> |         </activity> | ||||||
|  |  | ||||||
|         <activity android:name=".activity.mappicker.MapPickerActivity" |         <activity android:name=".activity.mappicker.MapPickerActivity" | ||||||
|  |             android:exported="true" | ||||||
|             android:theme="@style/AppTheme"> |             android:theme="@style/AppTheme"> | ||||||
|             <intent-filter> |             <intent-filter> | ||||||
|                 <action android:name="android.intent.action.VIEW" /> |                 <action android:name="android.intent.action.VIEW" /> | ||||||
|   | |||||||
| @@ -119,7 +119,7 @@ public class GeofavoriteDetailActivity extends NextcloudMapsStyledActivity imple | |||||||
|         }); |         }); | ||||||
|  |  | ||||||
|         mViewModel = new ViewModelProvider(this).get(GeofavoriteDetailActivityViewModel.class); |         mViewModel = new ViewModelProvider(this).get(GeofavoriteDetailActivityViewModel.class); | ||||||
|         mViewModel.init(); |         mViewModel.init(getApplicationContext()); | ||||||
|         mViewModel.getCategories().observe(this, new Observer<HashSet<String>>() { |         mViewModel.getCategories().observe(this, new Observer<HashSet<String>>() { | ||||||
|             @Override |             @Override | ||||||
|             public void onChanged(HashSet<String> categories) { |             public void onChanged(HashSet<String> categories) { | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| package it.danieleverducci.nextcloudmaps.activity.detail; | package it.danieleverducci.nextcloudmaps.activity.detail; | ||||||
|  |  | ||||||
|  | import android.content.Context; | ||||||
|  |  | ||||||
| import androidx.lifecycle.LiveData; | import androidx.lifecycle.LiveData; | ||||||
| import androidx.lifecycle.MutableLiveData; | import androidx.lifecycle.MutableLiveData; | ||||||
| import androidx.lifecycle.ViewModel; | import androidx.lifecycle.ViewModel; | ||||||
| @@ -14,8 +16,8 @@ import it.danieleverducci.nextcloudmaps.repository.GeofavoriteRepository; | |||||||
| public class GeofavoriteDetailActivityViewModel extends ViewModel { | public class GeofavoriteDetailActivityViewModel extends ViewModel { | ||||||
|     private GeofavoriteRepository mRepo; |     private GeofavoriteRepository mRepo; | ||||||
|  |  | ||||||
|     public void init() { |     public void init(Context applicationContext) { | ||||||
|         mRepo = GeofavoriteRepository.getInstance(); |         mRepo = GeofavoriteRepository.getInstance(applicationContext); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public Geofavorite getGeofavorite(int id) { |     public Geofavorite getGeofavorite(int id) { | ||||||
|   | |||||||
| @@ -41,11 +41,11 @@ import com.nextcloud.android.sso.ui.UiExceptionManager; | |||||||
| import it.danieleverducci.nextcloudmaps.R; | import it.danieleverducci.nextcloudmaps.R; | ||||||
| import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity; | import it.danieleverducci.nextcloudmaps.activity.NextcloudMapsStyledActivity; | ||||||
| import it.danieleverducci.nextcloudmaps.activity.main.MainActivity; | import it.danieleverducci.nextcloudmaps.activity.main.MainActivity; | ||||||
|  | import it.danieleverducci.nextcloudmaps.api.API; | ||||||
| import it.danieleverducci.nextcloudmaps.api.ApiProvider; | import it.danieleverducci.nextcloudmaps.api.ApiProvider; | ||||||
|  |  | ||||||
| public class LoginActivity extends NextcloudMapsStyledActivity { | public class LoginActivity extends NextcloudMapsStyledActivity { | ||||||
|  |  | ||||||
|     protected ApiProvider mApi; |  | ||||||
|     protected ProgressBar progress; |     protected ProgressBar progress; | ||||||
|     protected Button button; |     protected Button button; | ||||||
|  |  | ||||||
| @@ -115,9 +115,6 @@ public class LoginActivity extends NextcloudMapsStyledActivity { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void accountAccessDone() { |     private void accountAccessDone() { | ||||||
|         Context l_context = getApplicationContext(); |  | ||||||
|         mApi = new ApiProvider(l_context); |  | ||||||
|  |  | ||||||
|         Intent intent = new Intent(LoginActivity.this, MainActivity.class); |         Intent intent = new Intent(LoginActivity.this, MainActivity.class); | ||||||
|         startActivity(intent); |         startActivity(intent); | ||||||
|  |  | ||||||
|   | |||||||
| @@ -58,6 +58,7 @@ import it.danieleverducci.nextcloudmaps.activity.login.LoginActivity; | |||||||
| import it.danieleverducci.nextcloudmaps.activity.main.NavigationAdapter.NavigationItem; | import it.danieleverducci.nextcloudmaps.activity.main.NavigationAdapter.NavigationItem; | ||||||
| import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment.OnSortingOrderListener; | import it.danieleverducci.nextcloudmaps.activity.main.SortingOrderDialogFragment.OnSortingOrderListener; | ||||||
| import it.danieleverducci.nextcloudmaps.activity.mappicker.MapPickerActivity; | import it.danieleverducci.nextcloudmaps.activity.mappicker.MapPickerActivity; | ||||||
|  | import it.danieleverducci.nextcloudmaps.api.ApiProvider; | ||||||
| import it.danieleverducci.nextcloudmaps.model.Geofavorite; | import it.danieleverducci.nextcloudmaps.model.Geofavorite; | ||||||
| import it.danieleverducci.nextcloudmaps.utils.GeoUriParser; | import it.danieleverducci.nextcloudmaps.utils.GeoUriParser; | ||||||
| import it.danieleverducci.nextcloudmaps.utils.IntentGenerator; | import it.danieleverducci.nextcloudmaps.utils.IntentGenerator; | ||||||
| @@ -140,7 +141,7 @@ public class MainActivity extends NextcloudMapsStyledActivity implements OnSorti | |||||||
|  |  | ||||||
|  |  | ||||||
|         mMainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class); |         mMainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class); | ||||||
|         mMainActivityViewModel.init(); |         mMainActivityViewModel.init(getApplicationContext()); | ||||||
|         mMainActivityViewModel.getIsUpdating().observe(this, new Observer<Boolean>() { |         mMainActivityViewModel.getIsUpdating().observe(this, new Observer<Boolean>() { | ||||||
|             @Override |             @Override | ||||||
|             public void onChanged(@Nullable Boolean aBoolean) { |             public void onChanged(@Nullable Boolean aBoolean) { | ||||||
| @@ -155,7 +156,7 @@ public class MainActivity extends NextcloudMapsStyledActivity implements OnSorti | |||||||
|         mMainActivityViewModel.getOnFinished().observe(this, new Observer<Boolean>() { |         mMainActivityViewModel.getOnFinished().observe(this, new Observer<Boolean>() { | ||||||
|             @Override |             @Override | ||||||
|             public void onChanged(@Nullable Boolean success) { |             public void onChanged(@Nullable Boolean success) { | ||||||
|                 if(!success){ |                 if(success == null || !success){ | ||||||
|                     Toast.makeText(MainActivity.this, R.string.list_geofavorite_connection_error, Toast.LENGTH_LONG).show(); |                     Toast.makeText(MainActivity.this, R.string.list_geofavorite_connection_error, Toast.LENGTH_LONG).show(); | ||||||
|                 } |                 } | ||||||
|             } |             } | ||||||
| @@ -297,9 +298,11 @@ public class MainActivity extends NextcloudMapsStyledActivity implements OnSorti | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     private void switch_account() { |     private void switch_account() { | ||||||
|  |         ApiProvider.logout(); | ||||||
|         SingleAccountHelper.setCurrentAccount(this, null); |         SingleAccountHelper.setCurrentAccount(this, null); | ||||||
|         Intent intent = new Intent(MainActivity.this, LoginActivity.class); |         Intent intent = new Intent(MainActivity.this, LoginActivity.class); | ||||||
|         startActivity(intent); |         startActivity(intent); | ||||||
|  |         finish(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     @Override |     @Override | ||||||
|   | |||||||
| @@ -1,5 +1,7 @@ | |||||||
| package it.danieleverducci.nextcloudmaps.activity.main; | package it.danieleverducci.nextcloudmaps.activity.main; | ||||||
|  |  | ||||||
|  | import android.content.Context; | ||||||
|  |  | ||||||
| import androidx.lifecycle.LiveData; | import androidx.lifecycle.LiveData; | ||||||
| import androidx.lifecycle.MutableLiveData; | import androidx.lifecycle.MutableLiveData; | ||||||
| import androidx.lifecycle.ViewModel; | import androidx.lifecycle.ViewModel; | ||||||
| @@ -12,8 +14,8 @@ import it.danieleverducci.nextcloudmaps.repository.GeofavoriteRepository; | |||||||
| public class MainActivityViewModel extends ViewModel { | public class MainActivityViewModel extends ViewModel { | ||||||
|     private GeofavoriteRepository mRepo; |     private GeofavoriteRepository mRepo; | ||||||
|  |  | ||||||
|     public void init() { |     public void init(Context applicationContext) { | ||||||
|         mRepo = GeofavoriteRepository.getInstance(); |         mRepo = GeofavoriteRepository.getInstance(applicationContext); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public LiveData<List<Geofavorite>> getGeofavorites(){ |     public LiveData<List<Geofavorite>> getGeofavorites(){ | ||||||
|   | |||||||
| @@ -24,6 +24,7 @@ import android.content.Context; | |||||||
| import android.util.Log; | import android.util.Log; | ||||||
|  |  | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
|  | import androidx.annotation.Nullable; | ||||||
|  |  | ||||||
| import com.google.gson.GsonBuilder; | import com.google.gson.GsonBuilder; | ||||||
| import com.nextcloud.android.sso.api.NextcloudAPI; | import com.nextcloud.android.sso.api.NextcloudAPI; | ||||||
| @@ -35,47 +36,27 @@ import com.nextcloud.android.sso.model.SingleSignOnAccount; | |||||||
| import retrofit2.NextcloudRetrofitApiBuilder; | import retrofit2.NextcloudRetrofitApiBuilder; | ||||||
|  |  | ||||||
| public class ApiProvider { | public class ApiProvider { | ||||||
|     private final String TAG = ApiProvider.class.getCanonicalName(); |     private static final String TAG = ApiProvider.class.getCanonicalName(); | ||||||
|  |  | ||||||
|     @NonNull |  | ||||||
|     protected Context context; |  | ||||||
|     protected static API mApi; |     protected static API mApi; | ||||||
|  |  | ||||||
|     protected static String ssoAccountName; |     @Nullable | ||||||
|  |     public static API getAPI(Context context) { | ||||||
|     public ApiProvider(Context context) { |         if (mApi == null) { | ||||||
|         this.context = context; |  | ||||||
|         initSsoApi(new NextcloudAPI.ApiConnectedListener() { |  | ||||||
|             @Override |  | ||||||
|             public void onConnected() { |  | ||||||
|                 Log.d(TAG, "Connected to Nextcloud instance"); |  | ||||||
|             } |  | ||||||
|  |  | ||||||
|             @Override |  | ||||||
|             public void onError(Exception ex) { |  | ||||||
|                 Log.d(TAG, "Unable to connect to Nextcloud instance: " + ex.toString()); |  | ||||||
|             } |  | ||||||
|         }); |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     public void initSsoApi(final NextcloudAPI.ApiConnectedListener callback) { |  | ||||||
|             try { |             try { | ||||||
|                 SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(context); |                 SingleSignOnAccount ssoAccount = SingleAccountHelper.getCurrentSingleSignOnAccount(context); | ||||||
|             NextcloudAPI nextcloudAPI = new NextcloudAPI(context, ssoAccount, new GsonBuilder().create(), callback); |                 NextcloudAPI nextcloudAPI = new NextcloudAPI(context, ssoAccount, new GsonBuilder().create()); | ||||||
|  |  | ||||||
|             ssoAccountName = ssoAccount.name; |  | ||||||
|                 mApi = new NextcloudRetrofitApiBuilder(nextcloudAPI, API.mApiEndpoint).create(API.class); |                 mApi = new NextcloudRetrofitApiBuilder(nextcloudAPI, API.mApiEndpoint).create(API.class); | ||||||
|             } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { |             } catch (NextcloudFilesAppAccountNotFoundException | NoCurrentAccountSelectedException e) { | ||||||
|                 Log.d(TAG, "setAccout() called with: ex = [" + e + "]"); |                 Log.d(TAG, "setAccout() called with: ex = [" + e + "]"); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|  |  | ||||||
|     public static API getAPI() { |  | ||||||
|         return mApi; |         return mApi; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     public static String getAccountName() { |     public static void logout() { | ||||||
|         return ssoAccountName; |         mApi = null; | ||||||
|     } |     } | ||||||
|  |  | ||||||
| } | } | ||||||
| @@ -1,9 +1,9 @@ | |||||||
| package it.danieleverducci.nextcloudmaps.repository; | package it.danieleverducci.nextcloudmaps.repository; | ||||||
|  |  | ||||||
|  | import android.content.Context; | ||||||
| import android.util.Log; | import android.util.Log; | ||||||
|  |  | ||||||
| import androidx.annotation.NonNull; | import androidx.annotation.NonNull; | ||||||
| import androidx.appcompat.app.AppCompatActivity; |  | ||||||
| import androidx.lifecycle.MutableLiveData; | import androidx.lifecycle.MutableLiveData; | ||||||
|  |  | ||||||
| import java.util.ArrayList; | import java.util.ArrayList; | ||||||
| @@ -29,9 +29,15 @@ public class GeofavoriteRepository { | |||||||
|     private MutableLiveData<Boolean> mIsUpdating = new MutableLiveData<>(false); |     private MutableLiveData<Boolean> mIsUpdating = new MutableLiveData<>(false); | ||||||
|     private SingleLiveEvent<Boolean> mOnFinished = new SingleLiveEvent<>(); |     private SingleLiveEvent<Boolean> mOnFinished = new SingleLiveEvent<>(); | ||||||
|  |  | ||||||
|     public static GeofavoriteRepository getInstance() { |     private Context applicationContext; | ||||||
|  |  | ||||||
|  |     public GeofavoriteRepository(Context applicationContext) { | ||||||
|  |         this.applicationContext = applicationContext; | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     public static GeofavoriteRepository getInstance(Context applicationContext) { | ||||||
|         if(instance == null){ |         if(instance == null){ | ||||||
|             instance = new GeofavoriteRepository(); |             instance = new GeofavoriteRepository(applicationContext); | ||||||
|         } |         } | ||||||
|         return instance; |         return instance; | ||||||
|     } |     } | ||||||
| @@ -59,7 +65,7 @@ public class GeofavoriteRepository { | |||||||
|     public void updateGeofavorites() { |     public void updateGeofavorites() { | ||||||
|         mIsUpdating.postValue(true); |         mIsUpdating.postValue(true); | ||||||
|         // Obtain geofavorites |         // Obtain geofavorites | ||||||
|         Call<List<Geofavorite>> call = ApiProvider.getAPI().getGeofavorites(); |         Call<List<Geofavorite>> call = ApiProvider.getAPI(this.applicationContext).getGeofavorites(); | ||||||
|         call.enqueue(new Callback<List<Geofavorite>>() { |         call.enqueue(new Callback<List<Geofavorite>>() { | ||||||
|             @Override |             @Override | ||||||
|             public void onResponse(@NonNull Call<List<Geofavorite>> call, @NonNull Response<List<Geofavorite>> response) { |             public void onResponse(@NonNull Call<List<Geofavorite>> call, @NonNull Response<List<Geofavorite>> response) { | ||||||
| @@ -94,10 +100,10 @@ public class GeofavoriteRepository { | |||||||
|         Call<Geofavorite> call; |         Call<Geofavorite> call; | ||||||
|         if (geofav.getId() == 0) { |         if (geofav.getId() == 0) { | ||||||
|             // New geofavorite |             // New geofavorite | ||||||
|             call = ApiProvider.getAPI().createGeofavorite(geofav); |             call = ApiProvider.getAPI(this.applicationContext).createGeofavorite(geofav); | ||||||
|         } else { |         } else { | ||||||
|             // Update existing geofavorite |             // Update existing geofavorite | ||||||
|             call = ApiProvider.getAPI().updateGeofavorite(geofav.getId(), geofav); |             call = ApiProvider.getAPI(this.applicationContext).updateGeofavorite(geofav.getId(), geofav); | ||||||
|         } |         } | ||||||
|         call.enqueue(new Callback<Geofavorite>() { |         call.enqueue(new Callback<Geofavorite>() { | ||||||
|             @Override |             @Override | ||||||
| @@ -129,7 +135,7 @@ public class GeofavoriteRepository { | |||||||
|     public void deleteGeofavorite(Geofavorite geofav) { |     public void deleteGeofavorite(Geofavorite geofav) { | ||||||
|         mIsUpdating.postValue(true); |         mIsUpdating.postValue(true); | ||||||
|         // Delete Geofavorite |         // Delete Geofavorite | ||||||
|         Call<Geofavorite> call = ApiProvider.getAPI().deleteGeofavorite(geofav.getId()); |         Call<Geofavorite> call = ApiProvider.getAPI(this.applicationContext).deleteGeofavorite(geofav.getId()); | ||||||
|         call.enqueue(new Callback<Geofavorite>() { |         call.enqueue(new Callback<Geofavorite>() { | ||||||
|             @Override |             @Override | ||||||
|             public void onResponse(Call<Geofavorite> call, Response<Geofavorite> response) { |             public void onResponse(Call<Geofavorite> call, Response<Geofavorite> response) { | ||||||
|   | |||||||
| @@ -25,7 +25,7 @@ buildscript { | |||||||
|         jcenter() |         jcenter() | ||||||
|     } |     } | ||||||
|     dependencies { |     dependencies { | ||||||
|         classpath 'com.android.tools.build:gradle:4.2.2' |         classpath 'com.android.tools.build:gradle:7.1.1' | ||||||
|  |  | ||||||
|         // 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 | ||||||
|   | |||||||
							
								
								
									
										23
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										23
									
								
								gradle/wrapper/gradle-wrapper.properties
									
									
									
									
										vendored
									
									
								
							| @@ -1,23 +1,6 @@ | |||||||
| # | #Sun Feb 20 08:50:37 CET 2022 | ||||||
| # Nextcloud Geofavorites for Android |  | ||||||
| # |  | ||||||
| # This program 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. |  | ||||||
| # |  | ||||||
| # This program 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/>. |  | ||||||
| # |  | ||||||
|  |  | ||||||
| #Mon Oct 05 23:27:18 ART 2020 |  | ||||||
| distributionBase=GRADLE_USER_HOME | distributionBase=GRADLE_USER_HOME | ||||||
|  | distributionUrl=https\://services.gradle.org/distributions/gradle-7.2-bin.zip | ||||||
| distributionPath=wrapper/dists | distributionPath=wrapper/dists | ||||||
| zipStoreBase=GRADLE_USER_HOME |  | ||||||
| zipStorePath=wrapper/dists | zipStorePath=wrapper/dists | ||||||
| distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-all.zip | zipStoreBase=GRADLE_USER_HOME | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user