55import android .app .Activity ;
66import android .content .Context ;
77import android .content .DialogInterface ;
8- import android .content .Intent ;
98import android .content .SharedPreferences ;
109import android .content .pm .PackageManager ;
1110import android .os .AsyncTask ;
@@ -193,8 +192,8 @@ public boolean onItemLongClick(AdapterView<?> parent, View view, int position, l
193192 swipeContainer .setOnRefreshListener (new SwipeRefreshLayout .OnRefreshListener () {
194193 @ Override
195194 public void onRefresh () {
196- preRefresh (refreshButton );
197- refresh ();
195+ softRefresh (refreshButton );
196+ hardRefresh ();
198197 }
199198 });
200199
@@ -224,12 +223,17 @@ public void onClick(DialogInterface dialog, int which) {
224223 return view ;
225224 }
226225
226+ @ Override
227+ public void onDestroy () {
228+ super .onDestroy ();
229+
230+ CacheProvider .getInstance (getActivity ()).unregisterCacheOverlayListener (this );
231+ }
232+
227233 @ Override
228234 public void onResume () {
229235 super .onResume ();
230236
231- CacheProvider .getInstance (getActivity ()).registerCacheOverlayListener (this , false );
232-
233237 downloadManager .onResume ();
234238
235239 synchronized (timerLock ) {
@@ -260,24 +264,26 @@ public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
260264 refreshButton = menu .findItem (R .id .tile_overlay_refresh );
261265 refreshButton .setEnabled (true );
262266
263- preRefresh (refreshButton );
264- refresh ();
267+ CacheProvider .getInstance (getActivity ()).registerCacheOverlayListener (this , false );
268+ softRefresh (refreshButton );
269+ refreshLocalDownloadableLayers ();
270+ CacheProvider .getInstance (getActivity ().getApplicationContext ()).refreshTileOverlays ();
265271 }
266272
267273 @ Override
268274 public boolean onOptionsItemSelected (MenuItem item ) {
269275 switch (item .getItemId ()) {
270276 case R .id .tile_overlay_refresh :
271- preRefresh (item );
272- refresh ();
277+ softRefresh (item );
278+ hardRefresh ();
273279 return true ;
274280 default :
275281 return super .onOptionsItemSelected (item );
276282 }
277283 }
278284
279285 @ MainThread
280- private void preRefresh (MenuItem item ){
286+ private void softRefresh (MenuItem item ){
281287 item .setEnabled (false );
282288
283289 synchronized (adapterLock ) {
@@ -297,14 +303,33 @@ private void preRefresh(MenuItem item){
297303 * Attempt to pull all the layers from the remote server as well as refreshing any local overlays
298304 *
299305 */
300- private void refresh () {
306+ private void hardRefresh () {
301307
302- @ SuppressLint ("StaticFieldLeak" ) AsyncTask <Void , Void , List < Layer >> fetcher = new AsyncTask <Void , Void , List < Layer > >() {
308+ @ SuppressLint ("StaticFieldLeak" ) AsyncTask <Void , Void , Void > fetcher = new AsyncTask <Void , Void , Void >() {
303309 @ Override
304- protected List < Layer > doInBackground (Void ... objects ) {
310+ protected Void doInBackground (Void ... objects ) {
305311 fetchRemoteGeopackageLayers ();
306312 fetchRemoteStaticLayers ();
307313
314+ return null ;
315+ }
316+
317+ @ Override
318+ protected void onPostExecute (Void v ) {
319+ super .onPostExecute (v );
320+
321+ refreshLocalDownloadableLayers ();
322+ CacheProvider .getInstance (getActivity ().getApplicationContext ()).refreshTileOverlays ();
323+
324+ }
325+ };
326+ fetcher .execute ();
327+ }
328+
329+ private void refreshLocalDownloadableLayers (){
330+ @ SuppressLint ("StaticFieldLeak" ) AsyncTask <Void , Void , List <Layer >> fetcher = new AsyncTask <Void , Void , List <Layer >>() {
331+ @ Override
332+ protected List <Layer > doInBackground (Void ... objects ) {
308333 final Event event = EventHelper .getInstance (getActivity ().getApplicationContext ()).getCurrentEvent ();
309334
310335 List <Layer > layers = new ArrayList <>();
@@ -333,9 +358,6 @@ protected void onPostExecute(List<Layer> layers) {
333358 adapter .getDownloadableLayers ().addAll (layers );
334359 Collections .sort (adapter .getDownloadableLayers (), new LayerNameComparator ());
335360 }
336-
337- CacheProvider .getInstance (getActivity ().getApplicationContext ()).refreshTileOverlays ();
338-
339361 }
340362 };
341363 fetcher .execute ();
@@ -585,7 +607,7 @@ private void deleteFile(File base) {
585607 @ MainThread
586608 private void deleteCacheOverlay (final CacheOverlay cacheOverlay ){
587609
588- preRefresh (refreshButton );
610+ softRefresh (refreshButton );
589611
590612 @ SuppressLint ("StaticFieldLeak" ) AsyncTask <Void , Void , Void > deleteTask = new AsyncTask <Void , Void , Void >() {
591613 @ Override
@@ -605,7 +627,7 @@ protected Void doInBackground(Void... voids) {
605627 break ;
606628 }
607629
608- refresh ();
630+ hardRefresh ();
609631
610632 return null ;
611633 }
0 commit comments