Add auto-update feature
This commit is contained in:
parent
d33d881834
commit
7498fed8dc
|
@ -31,4 +31,5 @@ dependencies {
|
||||||
implementation 'com.android.support:appcompat-v7:28.0.0'
|
implementation 'com.android.support:appcompat-v7:28.0.0'
|
||||||
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
|
||||||
implementation 'com.android.support:design:28.0.0'
|
implementation 'com.android.support:design:28.0.0'
|
||||||
|
implementation 'android.arch.work:work-runtime:1.0.1'
|
||||||
}
|
}
|
||||||
|
|
|
@ -20,6 +20,13 @@ public class MainActivity extends AppCompatActivity {
|
||||||
notificationsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
notificationsSwitch.setOnCheckedChangeListener((buttonView, isChecked)
|
||||||
-> CallReceiver.setEnabled(MainActivity.this, isChecked));
|
-> CallReceiver.setEnabled(MainActivity.this, isChecked));
|
||||||
|
|
||||||
|
SwitchCompat autoUpdateSwitch = findViewById(R.id.autoUpdateEnabledSwitch);
|
||||||
|
autoUpdateSwitch.setChecked(Updater.isAutoUpdateScheduled());
|
||||||
|
autoUpdateSwitch.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
|
if (isChecked) Updater.scheduleAutoUpdateWorker();
|
||||||
|
else Updater.cancelAutoUpdateWorker();
|
||||||
|
});
|
||||||
|
|
||||||
PermissionHelper.checkPermissions(this);
|
PermissionHelper.checkPermissions(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,32 @@
|
||||||
|
package dummydomain.yetanothercallblocker;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.support.annotation.NonNull;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import androidx.work.Worker;
|
||||||
|
import androidx.work.WorkerParameters;
|
||||||
|
import dummydomain.yetanothercallblocker.sia.DatabaseSingleton;
|
||||||
|
|
||||||
|
public class UpdateWorker extends Worker {
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(UpdateWorker.class);
|
||||||
|
|
||||||
|
public UpdateWorker(@NonNull Context context, @NonNull WorkerParameters workerParams) {
|
||||||
|
super(context, workerParams);
|
||||||
|
}
|
||||||
|
|
||||||
|
@NonNull
|
||||||
|
@Override
|
||||||
|
public Result doWork() {
|
||||||
|
LOG.info("doWork() started");
|
||||||
|
|
||||||
|
DatabaseSingleton.getCommunityDatabase().updateSecondaryDb();
|
||||||
|
|
||||||
|
LOG.info("doWork() finished");
|
||||||
|
return Result.success();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,62 @@
|
||||||
|
package dummydomain.yetanothercallblocker;
|
||||||
|
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import androidx.work.Constraints;
|
||||||
|
import androidx.work.NetworkType;
|
||||||
|
import androidx.work.PeriodicWorkRequest;
|
||||||
|
import androidx.work.WorkInfo;
|
||||||
|
import androidx.work.WorkManager;
|
||||||
|
|
||||||
|
public class Updater {
|
||||||
|
|
||||||
|
private static final String AUTO_UPDATE_WORK_TAG = "autoUpdateWork";
|
||||||
|
|
||||||
|
private static final Logger LOG = LoggerFactory.getLogger(Updater.class);
|
||||||
|
|
||||||
|
public static void scheduleAutoUpdateWorker() {
|
||||||
|
if (isAutoUpdateScheduled()) return;
|
||||||
|
|
||||||
|
Constraints constraints = new Constraints.Builder()
|
||||||
|
.setRequiredNetworkType(NetworkType.CONNECTED)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
PeriodicWorkRequest updateRequest =
|
||||||
|
new PeriodicWorkRequest.Builder(UpdateWorker.class, 1, TimeUnit.DAYS)
|
||||||
|
.addTag(AUTO_UPDATE_WORK_TAG)
|
||||||
|
.setConstraints(constraints)
|
||||||
|
.build();
|
||||||
|
|
||||||
|
WorkManager.getInstance().enqueue(updateRequest);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void cancelAutoUpdateWorker() {
|
||||||
|
WorkManager.getInstance().cancelAllWorkByTag(AUTO_UPDATE_WORK_TAG);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static boolean isAutoUpdateScheduled() {
|
||||||
|
return findScheduled() != null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static WorkInfo findScheduled() {
|
||||||
|
for (WorkInfo workInfo : getWorkInfoList()) {
|
||||||
|
if (workInfo.getState() == WorkInfo.State.ENQUEUED) return workInfo;
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
private static List<WorkInfo> getWorkInfoList() {
|
||||||
|
try {
|
||||||
|
return WorkManager.getInstance().getWorkInfosByTag(AUTO_UPDATE_WORK_TAG).get();
|
||||||
|
} catch (Exception e) {
|
||||||
|
LOG.warn("getWorkInfoList()", e);
|
||||||
|
}
|
||||||
|
return new ArrayList<>();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -12,4 +12,10 @@
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:text="@string/incoming_call_notifications_enabled" />
|
android:text="@string/incoming_call_notifications_enabled" />
|
||||||
|
|
||||||
|
<android.support.v7.widget.SwitchCompat
|
||||||
|
android:id="@+id/autoUpdateEnabledSwitch"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/auto_update_enabled" />
|
||||||
</LinearLayout>
|
</LinearLayout>
|
|
@ -42,6 +42,7 @@
|
||||||
<string name="title_activity_reviews">Reviews</string>
|
<string name="title_activity_reviews">Reviews</string>
|
||||||
|
|
||||||
<string name="incoming_call_notifications_enabled">Incoming call notifications enabled</string>
|
<string name="incoming_call_notifications_enabled">Incoming call notifications enabled</string>
|
||||||
|
<string name="auto_update_enabled">Auto-update enabled</string>
|
||||||
|
|
||||||
<string name="open_debug_activity">Open debug screen</string>
|
<string name="open_debug_activity">Open debug screen</string>
|
||||||
<string name="debug_activity_label">Debug</string>
|
<string name="debug_activity_label">Debug</string>
|
||||||
|
|
Loading…
Reference in New Issue