Show "Updating repositories" banner in main UI.
Previously this was only shown in the notifications. This does not show the full progress of the update, but at least it provides a rudimentary level of feedback. In the future it can be modified to show more substantial feedback if required.
This commit is contained in:
parent
01f27ac404
commit
d83c15d0d4
@ -90,6 +90,8 @@ public class UpdateService extends IntentService {
|
||||
private NotificationCompat.Builder notificationBuilder;
|
||||
private AppUpdateStatusManager appUpdateStatusManager;
|
||||
|
||||
private static boolean updating;
|
||||
|
||||
public UpdateService() {
|
||||
super("UpdateService");
|
||||
}
|
||||
@ -136,6 +138,14 @@ public class UpdateService extends IntentService {
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Whether or not a repo update is currently in progress. Used to show feedback throughout
|
||||
* the app to users, so they know something is happening.
|
||||
*/
|
||||
public static boolean isUpdating() {
|
||||
return updating;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate() {
|
||||
super.onCreate();
|
||||
@ -365,6 +375,7 @@ public class UpdateService extends IntentService {
|
||||
return;
|
||||
}
|
||||
|
||||
updating = true;
|
||||
notificationManager.notify(NOTIFY_ID_UPDATING, notificationBuilder.build());
|
||||
LocalBroadcastManager.getInstance(this).registerReceiver(updateStatusReceiver,
|
||||
new IntentFilter(LOCAL_ACTION_STATUS));
|
||||
@ -452,6 +463,8 @@ public class UpdateService extends IntentService {
|
||||
} catch (Exception e) {
|
||||
Log.e(TAG, "Exception during update processing", e);
|
||||
sendStatus(this, STATUS_ERROR_GLOBAL, e.getMessage());
|
||||
} finally {
|
||||
updating = false;
|
||||
}
|
||||
|
||||
long time = System.currentTimeMillis() - startTime;
|
||||
|
@ -0,0 +1,81 @@
|
||||
package org.fdroid.fdroid.views;
|
||||
|
||||
import android.content.BroadcastReceiver;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.support.v4.content.LocalBroadcastManager;
|
||||
import android.util.AttributeSet;
|
||||
import android.view.Gravity;
|
||||
import android.view.View;
|
||||
|
||||
import org.fdroid.fdroid.R;
|
||||
import org.fdroid.fdroid.UpdateService;
|
||||
|
||||
/**
|
||||
* Widget which reflects whether or not a repo update is currently in progress or not. If so, shows
|
||||
* some sort of feedback to the user.
|
||||
*/
|
||||
public class BannerUpdatingRepos extends android.support.v7.widget.AppCompatTextView {
|
||||
|
||||
public BannerUpdatingRepos(Context context) {
|
||||
this(context, null);
|
||||
}
|
||||
|
||||
public BannerUpdatingRepos(Context context, AttributeSet attrs) {
|
||||
this(context, attrs, android.R.attr.textViewStyle);
|
||||
}
|
||||
|
||||
public BannerUpdatingRepos(Context context, AttributeSet attrs, int defStyleAttr) {
|
||||
super(context, attrs, defStyleAttr);
|
||||
int padding = (int) getResources().getDimension(R.dimen.banner__padding);
|
||||
setPadding(padding, padding, padding, padding);
|
||||
setBackgroundColor(0xFF4A4A4A);
|
||||
setGravity(Gravity.CENTER_VERTICAL | Gravity.CENTER_HORIZONTAL);
|
||||
setText(R.string.update_notification_title);
|
||||
setTextColor(0xFFFFFFFF);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onAttachedToWindow() {
|
||||
super.onAttachedToWindow();
|
||||
monitorRepoUpdates();
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onDetachedFromWindow() {
|
||||
super.onDetachedFromWindow();
|
||||
stopMonitoringRepoUpdates();
|
||||
}
|
||||
|
||||
private void monitorRepoUpdates() {
|
||||
if (isInEditMode()) {
|
||||
return;
|
||||
}
|
||||
|
||||
LocalBroadcastManager.getInstance(getContext()).registerReceiver(onRepoFeedback, new IntentFilter(UpdateService.LOCAL_ACTION_STATUS));
|
||||
setBannerIsVisible(UpdateService.isUpdating());
|
||||
}
|
||||
|
||||
private void setBannerIsVisible(boolean isUpdating) {
|
||||
if (isUpdating) {
|
||||
setVisibility(View.VISIBLE);
|
||||
} else {
|
||||
setVisibility(View.GONE);
|
||||
}
|
||||
}
|
||||
|
||||
private void stopMonitoringRepoUpdates() {
|
||||
LocalBroadcastManager.getInstance(getContext()).unregisterReceiver(onRepoFeedback);
|
||||
}
|
||||
|
||||
private final BroadcastReceiver onRepoFeedback = new BroadcastReceiver() {
|
||||
@Override
|
||||
public void onReceive(Context context, Intent intent) {
|
||||
// Anything other than a STATUS_INFO broadcast signifies that it was complete (and out
|
||||
// banner should be removed).
|
||||
boolean isInfo = intent.getIntExtra(UpdateService.EXTRA_STATUS_CODE, 0) == UpdateService.STATUS_INFO;
|
||||
setBannerIsVisible(isInfo);
|
||||
}
|
||||
};
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<android.support.design.widget.CoordinatorLayout
|
||||
<android.support.constraint.ConstraintLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:app="http://schemas.android.com/apk/res-auto"
|
||||
xmlns:tools="http://schemas.android.com/tools"
|
||||
@ -7,16 +7,34 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent">
|
||||
|
||||
<org.fdroid.fdroid.views.BannerUpdatingRepos
|
||||
android:id="@+id/banner_updating_repos"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
tools:layout_editor_absoluteX="8dp" />
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/category_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="0dp"
|
||||
tools:listitem="@layout/category_item"
|
||||
app:layout_constraintTop_toBottomOf="@+id/banner_updating_repos"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:scrollbars="vertical" />
|
||||
app:layout_constraintStart_toStartOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:scrollbars="vertical"
|
||||
tools:layout_editor_absoluteX="0dp" />
|
||||
|
||||
<include layout="@layout/fab_search" />
|
||||
<include layout="@layout/fab_search"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_width="wrap_content"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintEnd_toEndOf="parent"
|
||||
android:layout_marginBottom="@dimen/fab_margin"
|
||||
android:layout_marginEnd="@dimen/fab_margin"
|
||||
android:layout_marginRight="@dimen/fab_margin" />
|
||||
|
||||
</android.support.design.widget.CoordinatorLayout>
|
||||
</android.support.constraint.ConstraintLayout>
|
@ -12,15 +12,23 @@
|
||||
android:layout_height="match_parent"
|
||||
android:id="@+id/swipe_to_refresh">
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/app_list"
|
||||
<LinearLayout
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:listitem="@layout/app_card_normal"
|
||||
app:layout_constraintBottom_toBottomOf="parent"
|
||||
app:layout_constraintLeft_toRightOf="parent"
|
||||
app:layout_constraintTop_toTopOf="parent"
|
||||
android:scrollbars="vertical" />
|
||||
android:orientation="vertical">
|
||||
|
||||
<org.fdroid.fdroid.views.BannerUpdatingRepos
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content" />
|
||||
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/app_list"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"
|
||||
tools:listitem="@layout/app_card_normal"
|
||||
android:scrollbars="vertical" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</android.support.v4.widget.SwipeRefreshLayout>
|
||||
|
||||
|
@ -30,4 +30,6 @@
|
||||
<dimen name="category_preview__app_list__padding__horizontal">4dp</dimen>
|
||||
<dimen name="category_preview__app_list__padding__horizontal__first">72dp</dimen>
|
||||
<dimen name="category_preview__app_list__padding__vertical">18dp</dimen>
|
||||
|
||||
<dimen name="banner__padding">4dp</dimen>
|
||||
</resources>
|
||||
|
Loading…
x
Reference in New Issue
Block a user