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" /> + +