Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/stefan-niedermann/nextcloud-deck.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/app/src
diff options
context:
space:
mode:
authorstefan-niedermann <info@niedermann.it>2019-12-13 22:41:28 +0300
committerstefan-niedermann <info@niedermann.it>2019-12-13 22:41:28 +0300
commitad65764004faa5f502f57a77dde7dfc923112239 (patch)
treec87cfb9c0d0096324f5b68b07fd7f36d4153debe /app/src
parent46d4a856ae842a51e103a6fc3c4798b5434825be (diff)
Implement basic background sync job
Diffstat (limited to 'app/src')
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java2
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java40
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java13
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java15
-rw-r--r--app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java6
-rw-r--r--app/src/main/res/layout/fragment_about_credits_tab.xml26
-rw-r--r--app/src/main/res/values/setup.xml1
-rw-r--r--app/src/main/res/values/strings.xml1
8 files changed, 85 insertions, 19 deletions
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
index 5926bf0fc..13f16a951 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncManager.java
@@ -75,7 +75,7 @@ public class SyncManager {
}
boolean synchronizeEverything() {
- // TODO do some magic here, but wait with implementation for PoC
+ // TODO do some magic here
try {
Thread.sleep(2000);
return true;
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java
index e3b398e6e..6d92a1549 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/persistence/sync/SyncWorker.java
@@ -1,16 +1,26 @@
package it.niedermann.nextcloud.deck.persistence.sync;
import android.content.Context;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
import androidx.annotation.NonNull;
+import androidx.work.Constraints;
+import androidx.work.ExistingPeriodicWorkPolicy;
+import androidx.work.NetworkType;
+import androidx.work.PeriodicWorkRequest;
+import androidx.work.WorkManager;
import androidx.work.Worker;
import androidx.work.WorkerParameters;
+import java.util.concurrent.TimeUnit;
+
import it.niedermann.nextcloud.deck.DeckLog;
+import it.niedermann.nextcloud.deck.R;
public class SyncWorker extends Worker {
- public static final String TAG = SyncWorker.class.getSimpleName();
+ private static final String TAG = SyncWorker.class.getSimpleName();
public SyncWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
super(context, workerParams);
@@ -20,9 +30,29 @@ public class SyncWorker extends Worker {
@Override
public Result doWork() {
SyncManager syncManager = new SyncManager(getApplicationContext(), null);
- DeckLog.log("Starting background synchronization");
- boolean success = syncManager.synchronizeEverything();
- DeckLog.log("Finishing background synchronization with result " + success);
- return success ? Result.failure() : Result.success();
+ if (syncManager.hasInternetConnection()) {
+ DeckLog.log("Starting background synchronization");
+ SharedPreferences.Editor editor = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()).edit();
+ editor.putLong(getApplicationContext().getString(R.string.shared_preference_last_background_sync), System.currentTimeMillis());
+ editor.apply();
+ boolean success = syncManager.synchronizeEverything();
+ DeckLog.log("Finishing background synchronization with result " + success);
+ return success ? Result.failure() : Result.success();
+ }
+ return Result.success();
+ }
+
+ public static void register(@NonNull Context context) {
+ Constraints constraints = new Constraints.Builder()
+ .setRequiredNetworkType(NetworkType.CONNECTED)
+ .build();
+ PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(SyncWorker.class, PeriodicWorkRequest.MIN_PERIODIC_INTERVAL_MILLIS, TimeUnit.MILLISECONDS)
+ .setConstraints(constraints)
+ .build();
+ WorkManager.getInstance(context.getApplicationContext()).enqueueUniquePeriodicWork(SyncWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, work);
+ }
+
+ public static void deregister(@NonNull Context context) {
+ WorkManager.getInstance(context.getApplicationContext()).cancelAllWorkByTag(TAG);
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java
index 22622899a..4bbe77b2e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/DrawerActivity.java
@@ -31,10 +31,6 @@ import androidx.appcompat.widget.Toolbar;
import androidx.coordinatorlayout.widget.CoordinatorLayout;
import androidx.core.view.GravityCompat;
import androidx.drawerlayout.widget.DrawerLayout;
-import androidx.work.Constraints;
-import androidx.work.ExistingPeriodicWorkPolicy;
-import androidx.work.PeriodicWorkRequest;
-import androidx.work.WorkManager;
import com.bumptech.glide.Glide;
import com.bumptech.glide.request.RequestOptions;
@@ -53,7 +49,6 @@ import com.nextcloud.android.sso.ui.UiExceptionManager;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
-import java.util.concurrent.TimeUnit;
import butterknife.BindInt;
import butterknife.BindString;
@@ -176,13 +171,7 @@ public abstract class DrawerActivity extends AppCompatActivity implements Naviga
editor.remove(sharedPreferenceLastAccount);
editor.commit(); // Has to be done synchronously
} else {
- Constraints constraints = new Constraints.Builder()
- .setRequiresCharging(true)
- .build();
- PeriodicWorkRequest work = new PeriodicWorkRequest.Builder(SyncWorker.class, 30, TimeUnit.MINUTES)
- .setConstraints(constraints)
- .build();
- WorkManager.getInstance(getApplicationContext()).enqueueUniquePeriodicWork(SyncWorker.TAG, ExistingPeriodicWorkPolicy.KEEP, work);
+ SyncWorker.register(getApplicationContext());
accountIsGettingImportedSnackbar.show();
}
}
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java
index adacda0e5..dea80d283 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/ui/about/AboutFragmentCreditsTab.java
@@ -1,9 +1,12 @@
package it.niedermann.nextcloud.deck.ui.about;
+import android.content.SharedPreferences;
import android.graphics.Typeface;
import android.os.Bundle;
+import android.preference.PreferenceManager;
import android.text.Spannable;
import android.text.SpannableString;
+import android.text.format.DateUtils;
import android.text.style.ForegroundColorSpan;
import android.text.style.StyleSpan;
import android.view.LayoutInflater;
@@ -26,6 +29,7 @@ import it.niedermann.nextcloud.deck.api.IResponseCallback;
import it.niedermann.nextcloud.deck.exceptions.OfflineException;
import it.niedermann.nextcloud.deck.model.ocs.Capabilities;
import it.niedermann.nextcloud.deck.persistence.sync.SyncManager;
+import it.niedermann.nextcloud.deck.util.DateUtil;
import it.niedermann.nextcloud.deck.util.LinkUtil;
public class AboutFragmentCreditsTab extends Fragment {
@@ -38,7 +42,11 @@ public class AboutFragmentCreditsTab extends Fragment {
TextView aboutMaintainer;
@BindView(R.id.about_translators)
TextView aboutTranslators;
+ @BindView(R.id.last_background_sync)
+ TextView lastBackgroundSyncExecutionTime;
+ @BindString(R.string.shared_preference_last_background_sync)
+ String sharedPreferencesLastBackgroundSync;
@BindString(R.string.you_are_currently_offline)
String offlineText;
@BindString(R.string.strong_start)
@@ -65,6 +73,9 @@ public class AboutFragmentCreditsTab extends Fragment {
offlineTextSpannable.setSpan(new ForegroundColorSpan(ContextCompat.getColor(Objects.requireNonNull(getContext()), R.color.fg_secondary)), 0, offlineTextSpannable.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
aboutServerAppVersion.setText(offlineTextSpannable);
}
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(Objects.requireNonNull(getContext()).getApplicationContext());
+ long lastBackgroundSync = sharedPreferences.getLong(sharedPreferencesLastBackgroundSync, 0);
+ LinkUtil.setHtml(lastBackgroundSyncExecutionTime, getLastBackgroundSyncStrongTag(lastBackgroundSync));
LinkUtil.setHtml(aboutMaintainer, LinkUtil.concatenateResources(v.getResources(),
R.string.anchor_start, R.string.url_maintainer, R.string.anchor_middle, R.string.about_maintainer, R.string.anchor_end));
LinkUtil.setHtml(aboutTranslators,
@@ -77,4 +88,8 @@ public class AboutFragmentCreditsTab extends Fragment {
private String getVersionStrongTag(String version) {
return strongStart + "v" + version + strongEnd;
}
+
+ private String getLastBackgroundSyncStrongTag(long lastBackgroundSync) {
+ return strongStart + DateUtil.getRelativeDateTimeString(getContext(), lastBackgroundSync, DateUtils.SECOND_IN_MILLIS) + strongEnd;
+ }
} \ No newline at end of file
diff --git a/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java b/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java
index d21ff3620..dc5dc574e 100644
--- a/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java
+++ b/app/src/main/java/it/niedermann/nextcloud/deck/util/DateUtil.java
@@ -56,6 +56,10 @@ public final class DateUtil {
}
public static CharSequence getRelativeDateTimeString(Context context, long time) {
+ return getRelativeDateTimeString(context, time, DateUtils.DAY_IN_MILLIS);
+ }
+
+ public static CharSequence getRelativeDateTimeString(Context context, long time, long minResolution) {
if ((System.currentTimeMillis() - time) < 60 * 1000 && System.currentTimeMillis() > time) {
// < 60 seconds -> seconds ago
return context.getString(R.string.seconds_ago);
@@ -64,7 +68,7 @@ public final class DateUtil {
CharSequence dateString = DateUtils.getRelativeDateTimeString(
context,
time,
- DateUtils.DAY_IN_MILLIS,
+ minResolution,
DateUtils.WEEK_IN_MILLIS,
0
);
diff --git a/app/src/main/res/layout/fragment_about_credits_tab.xml b/app/src/main/res/layout/fragment_about_credits_tab.xml
index fa3ef489b..c505d559a 100644
--- a/app/src/main/res/layout/fragment_about_credits_tab.xml
+++ b/app/src/main/res/layout/fragment_about_credits_tab.xml
@@ -21,6 +21,32 @@
android:textAppearance="?android:attr/textAppearanceMedium"
android:textSize="26sp" />
+ <LinearLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content">
+
+ <TextView
+ style="?android:attr/editTextPreferenceStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="10dp"
+ android:paddingEnd="0dp"
+ android:paddingRight="0dp"
+ android:text="@string/last_background_sync"
+ tools:ignore="RtlSymmetry" />
+
+ <TextView
+ android:id="@+id/last_background_sync"
+ style="?android:attr/editTextPreferenceStyle"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:padding="10dp"
+ android:paddingStart="5dp"
+ android:paddingLeft="5dp"
+ tools:hint="20 seconds ago"
+ tools:ignore="RtlSymmetry" />
+ </LinearLayout>
+
<TextView
style="?android:attr/listSeparatorTextViewStyle"
android:layout_width="match_parent"
diff --git a/app/src/main/res/values/setup.xml b/app/src/main/res/values/setup.xml
index 4da70f773..f25e3291b 100644
--- a/app/src/main/res/values/setup.xml
+++ b/app/src/main/res/values/setup.xml
@@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="shared_preference_last_sync" translatable="false">it.niedermann.nextcloud.deck.last_sync</string>
+ <string name="shared_preference_last_background_sync" translatable="false">it.niedermann.nextcloud.deck.last_background_sync</string>
<string name="shared_preference_last_account" translatable="false">it.niedermann.nextcloud.deck.last_account</string>
<string name="pref_key_wifi_only" translatable="false">wifiOnly</string>
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 4e4fd8693..d571b42cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -148,4 +148,5 @@
<string name="attachment_delete_message">This will permanently delete this attachment.</string>
<string name="delete_attachment">Delete %1$s</string>
<string name="no_content">No content yet</string>
+ <string name="last_background_sync">Last background sync:</string>
</resources>