diff --git a/app/src/basic/res/menu/main_activity_screens.xml b/app/src/basic/res/menu/main_activity_screens.xml index b4a139661..aa90a0cd5 100644 --- a/app/src/basic/res/menu/main_activity_screens.xml +++ b/app/src/basic/res/menu/main_activity_screens.xml @@ -7,7 +7,7 @@ app:showAsAction="ifRoom|withText" android:id="@+id/whats_new" /> diff --git a/app/src/full/res/menu/main_activity_screens.xml b/app/src/full/res/menu/main_activity_screens.xml index a172646df..c7c174d7e 100644 --- a/app/src/full/res/menu/main_activity_screens.xml +++ b/app/src/full/res/menu/main_activity_screens.xml @@ -17,7 +17,7 @@ app:showAsAction="ifRoom|withText" android:id="@+id/nearby" /> diff --git a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java index b7558cce6..5a4af4d7b 100644 --- a/app/src/main/java/org/fdroid/fdroid/FDroidApp.java +++ b/app/src/main/java/org/fdroid/fdroid/FDroidApp.java @@ -343,14 +343,21 @@ public class FDroidApp extends Application { public void onTrimMemory(int level) { super.onTrimMemory(level); if (level >= TRIM_MEMORY_BACKGROUND) { - ImageLoader.getInstance().clearMemoryCache(); + clearImageLoaderMemoryCache(); } } @Override public void onLowMemory() { super.onLowMemory(); - ImageLoader.getInstance().clearMemoryCache(); + clearImageLoaderMemoryCache(); + } + + private void clearImageLoaderMemoryCache() { + ImageLoader imageLoader = ImageLoader.getInstance(); + if (imageLoader.isInited()) { + imageLoader.clearMemoryCache(); + } } @Override diff --git a/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java b/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java index 231484639..243613425 100644 --- a/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java +++ b/app/src/main/java/org/fdroid/fdroid/net/HttpDownloader.java @@ -147,9 +147,9 @@ public class HttpDownloader extends Downloader { } else { String calcedETag = String.format("\"%x-%x\"", tmpConn.getLastModified() / 1000, contentLength); - if (calcedETag.equals(headETag)) { + if (cacheTag.equals(calcedETag)) { Utils.debugLog(TAG, urlString + " cached based on calced ETag, not downloading: " + - headETag); + calcedETag); return; } } diff --git a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesViewBinder.java b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesViewBinder.java index 1a8bf2a56..fecfe188b 100644 --- a/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesViewBinder.java +++ b/app/src/main/java/org/fdroid/fdroid/views/updates/UpdatesViewBinder.java @@ -1,5 +1,10 @@ package org.fdroid.fdroid.views.updates; +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.support.v4.content.LocalBroadcastManager; import android.support.v4.widget.SwipeRefreshLayout; import android.support.v7.app.AppCompatActivity; import android.support.v7.widget.LinearLayoutManager; @@ -8,8 +13,8 @@ import android.support.v7.widget.helper.ItemTouchHelper; import android.view.View; import android.widget.FrameLayout; import android.widget.ImageView; +import android.widget.ProgressBar; import android.widget.TextView; - import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; import org.fdroid.fdroid.Utils; @@ -20,8 +25,11 @@ public class UpdatesViewBinder { private final RecyclerView list; private final TextView emptyState; private final ImageView emptyImage; + private final ProgressBar emptyUpdatingProgress; + private final AppCompatActivity activity; public UpdatesViewBinder(final AppCompatActivity activity, FrameLayout parent) { + this.activity = activity; View view = activity.getLayoutInflater().inflate(R.layout.main_tab_updates, parent, true); adapter = new UpdatesAdapter(activity); @@ -37,6 +45,7 @@ public class UpdatesViewBinder { emptyState = (TextView) view.findViewById(R.id.empty_state); emptyImage = (ImageView) view.findViewById(R.id.image); + emptyUpdatingProgress = view.findViewById(R.id.empty_updating_progress); final SwipeRefreshLayout swipeToRefresh = (SwipeRefreshLayout) view.findViewById(R.id.swipe_to_refresh); Utils.applySwipeLayoutColors(swipeToRefresh); @@ -61,12 +70,16 @@ public class UpdatesViewBinder { private void updateEmptyState() { if (adapter.getItemCount() == 0) { list.setVisibility(View.GONE); - emptyState.setVisibility(View.VISIBLE); emptyImage.setVisibility(View.VISIBLE); + setUpEmptyUpdatingProgress(UpdateService.isUpdating()); + LocalBroadcastManager.getInstance(activity).registerReceiver(updateServiceStatusReceiver, + new IntentFilter(UpdateService.LOCAL_ACTION_STATUS)); } else { list.setVisibility(View.VISIBLE); emptyState.setVisibility(View.GONE); emptyImage.setVisibility(View.GONE); + LocalBroadcastManager.getInstance(activity).unregisterReceiver(updateServiceStatusReceiver); + emptyUpdatingProgress.setVisibility(View.GONE); } } @@ -87,4 +100,23 @@ public class UpdatesViewBinder { updateEmptyState(); } }; + + private final BroadcastReceiver updateServiceStatusReceiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + // Anything other than a STATUS_INFO broadcast signifies that it was complete + boolean isUpdating = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, 0) == UpdateService.STATUS_INFO; + setUpEmptyUpdatingProgress(isUpdating); + } + }; + + private void setUpEmptyUpdatingProgress(boolean isUpdating) { + if (isUpdating) { + emptyState.setVisibility(View.GONE); + emptyUpdatingProgress.setVisibility(View.VISIBLE); + } else { + emptyState.setVisibility(View.VISIBLE); + emptyUpdatingProgress.setVisibility(View.GONE); + } + } } diff --git a/app/src/main/res/layout/main_tab_updates.xml b/app/src/main/res/layout/main_tab_updates.xml index e201a42c1..95a187d68 100644 --- a/app/src/main/res/layout/main_tab_updates.xml +++ b/app/src/main/res/layout/main_tab_updates.xml @@ -36,6 +36,15 @@ android:visibility="gone" android:text="@string/empty_can_update_app_list" /> + + Suche löschen Neueste Kategorien - Aktualisierungen + Aufgaben Direkt Version %1$s (Empfohlen) Neu