show progress spinner on Updates Tab if index is being updated

The "Congrats, your apps are up to date" message isn't quite right in this
context.

closes 
This commit is contained in:
Hans-Christoph Steiner 2019-05-15 15:24:21 +02:00
parent dffc8e5925
commit 1cc14b3499
2 changed files with 43 additions and 2 deletions
app/src/main
java/org/fdroid/fdroid/views/updates
res/layout

@ -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);
}
}
}

@ -36,6 +36,15 @@
android:visibility="gone"
android:text="@string/empty_can_update_app_list" />
<ProgressBar
android:id="@+id/empty_updating_progress"
android:layout_width="0dp"
android:layout_height="wrap_content"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintTop_toBottomOf="@+id/banner_updating_repos"
android:visibility="gone"/>
<ImageView
android:id="@+id/image"
android:layout_width="0dp"