Skip to content

Commit ef5333b

Browse files
committed
Fix dailytext widget
1 parent c83cb7e commit ef5333b

8 files changed

Lines changed: 178 additions & 138 deletions

File tree

app/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ dependencies {
7070
compileOnly 'org.projectlombok:lombok:1.18.32'
7171
annotationProcessor 'org.projectlombok:lombok:1.18.32'
7272
implementation "androidx.core:core-splashscreen:1.0.1"
73-
implementation("com.squareup.okhttp3:okhttp:4.9.1")
73+
implementation("com.squareup.okhttp3:okhttp:4.10.0")
7474
implementation 'com.github.bumptech.glide:glide:4.16.0'
7575

7676
}

app/src/main/java/tk/phili/dienst/dienst/MinistryApplication.java

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,22 @@
11
package tk.phili.dienst.dienst;
22

33
import androidx.multidex.MultiDexApplication;
4+
import androidx.work.ExistingPeriodicWorkPolicy;
5+
import androidx.work.OneTimeWorkRequest;
6+
import androidx.work.PeriodicWorkRequest;
7+
import androidx.work.WorkManager;
48

59
import com.downloader.PRDownloader;
610

11+
import java.time.LocalDate;
12+
import java.time.LocalTime;
13+
import java.time.ZoneId;
714
import java.util.Timer;
815
import java.util.TimerTask;
16+
import java.util.concurrent.TimeUnit;
917

1018
import tk.phili.dienst.dienst.calendar.CalendarWorker;
19+
import tk.phili.dienst.dienst.dailytext.widget.DailytextWorker;
1120

1221
public class MinistryApplication extends MultiDexApplication {
1322

@@ -20,6 +29,8 @@ public void onCreate() {
2029
runTimer();
2130

2231
PRDownloader.initialize(getApplicationContext());
32+
33+
startDailyWork();
2334
}
2435

2536
public void runTimer() {
@@ -34,4 +45,40 @@ public void run() {
3445
}
3546
}
3647

48+
49+
private void startDailyWork() {
50+
// Start one time worker
51+
OneTimeWorkRequest nowRequest = new OneTimeWorkRequest.Builder(DailytextWorker.class).build();
52+
WorkManager.getInstance(this).enqueue(nowRequest);
53+
54+
// Start periodic work
55+
LocalTime targetTime = LocalTime.of(1, 0);
56+
long currentMillis = System.currentTimeMillis();
57+
long targetMillisToday = LocalDate.now()
58+
.atTime(targetTime)
59+
.atZone(ZoneId.systemDefault())
60+
.toInstant()
61+
.toEpochMilli();
62+
63+
if (currentMillis > targetMillisToday) {
64+
// Zielzeit heute schon vorbei -> morgen starten
65+
targetMillisToday += TimeUnit.DAYS.toMillis(1);
66+
}
67+
long initialDelay = targetMillisToday - currentMillis;
68+
69+
PeriodicWorkRequest workRequest = new PeriodicWorkRequest.Builder(
70+
DailytextWorker.class,
71+
1, TimeUnit.DAYS
72+
)
73+
.setInitialDelay(initialDelay, TimeUnit.MILLISECONDS)
74+
.build();
75+
76+
WorkManager.getInstance(this).enqueueUniquePeriodicWork(
77+
"TagestextUpdate",
78+
ExistingPeriodicWorkPolicy.UPDATE,
79+
workRequest
80+
);
81+
}
82+
83+
3784
}

app/src/main/java/tk/phili/dienst/dienst/dailytext/DailytextFragment.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ public void onPause() {
116116

117117
public void showLink(){
118118
String jwLang = sp.getString("tt_locale", languageService.getCurrentLanguage("E").getLangcode());
119-
String url = "https://www.jw.org/finder?srcid=jwlshare&wtlocale="+ jwLang +"&alias=daily-text&date="+LocalDate.now().toString();
119+
String url = "https://www.jw.org/finder?srcid=jwlshare&wtlocale=" + jwLang + "&alias=daily-text&date=" + LocalDate.now().toString();
120120
try {
121121
requireActivity().unregisterReceiver(mBroadcastReceiver);
122122
}catch(Exception e){ }

app/src/main/java/tk/phili/dienst/dienst/dailytext/DailytextJSONAsyncFetcher.java

Lines changed: 0 additions & 53 deletions
This file was deleted.
Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
package tk.phili.dienst.dienst.dailytext.widget;
2+
3+
import android.appwidget.AppWidgetManager;
4+
import android.content.ComponentName;
5+
import android.content.Context;
6+
import android.content.SharedPreferences;
7+
import android.util.Log;
8+
9+
import androidx.annotation.NonNull;
10+
import androidx.work.Worker;
11+
import androidx.work.WorkerParameters;
12+
13+
import org.jetbrains.annotations.NotNull;
14+
import org.jsoup.Jsoup;
15+
import org.jsoup.nodes.Document;
16+
import org.jsoup.nodes.Element;
17+
18+
import java.io.IOException;
19+
import java.time.LocalDate;
20+
import java.util.concurrent.TimeUnit;
21+
22+
import okhttp3.Call;
23+
import okhttp3.Callback;
24+
import okhttp3.Dns;
25+
import okhttp3.OkHttpClient;
26+
import okhttp3.Request;
27+
import okhttp3.Response;
28+
import tk.phili.dienst.dienst.utils.JWLanguageService;
29+
30+
public class DailytextWorker extends Worker {
31+
32+
public DailytextWorker(@NonNull Context context, @NonNull WorkerParameters params) {
33+
super(context, params);
34+
}
35+
36+
@NonNull
37+
@Override
38+
public Result doWork() {
39+
try {
40+
41+
SharedPreferences sp = getApplicationContext().getSharedPreferences("MainActivity", Context.MODE_PRIVATE);
42+
43+
JWLanguageService languageService = new JWLanguageService(getApplicationContext());
44+
String jwLang = sp.getString("tt_locale", languageService.getCurrentLanguage("E").getLangcode());
45+
String url = "https://www.jw.org/finder?srcid=jwlshare&wtlocale=" + jwLang + "&alias=daily-text&date=" + LocalDate.now().toString();
46+
47+
OkHttpClient client = new OkHttpClient.Builder()
48+
.connectTimeout(60, TimeUnit.SECONDS)
49+
.readTimeout(60, TimeUnit.SECONDS)
50+
.callTimeout(60, TimeUnit.SECONDS)
51+
.followRedirects(true)
52+
.followSslRedirects(true)
53+
.dns(Dns.SYSTEM)
54+
.build();
55+
Request request = new Request.Builder()
56+
.url(url)
57+
.build();
58+
59+
// OkHttp Request
60+
Response response = client.newCall(request).execute();
61+
62+
if (response.isSuccessful() && response.body() != null) {
63+
Document document = Jsoup.parse(response.body().string());
64+
65+
Element contentElement = document.getElementsByClass("tabContent").get(1);
66+
Element dayElement = contentElement.getElementsByTag("h2").get(0);
67+
Element textElement = contentElement.getElementsByClass("themeScrp").get(0);
68+
69+
String day = dayElement.text();
70+
String text = textElement.text();
71+
72+
// Hier den Tagestext ins SharedPreferences speichern
73+
sp.edit().putString("dailytext_day", day).apply();
74+
sp.edit().putString("dailytext_text", text).apply();
75+
76+
// Widget aktualisieren
77+
AppWidgetManager manager = AppWidgetManager.getInstance(getApplicationContext());
78+
ComponentName widget = new ComponentName(getApplicationContext(), TagestextWidget.class);
79+
for (int appWidgetId : manager.getAppWidgetIds(widget)) {
80+
TagestextWidget.updateAppWidget(getApplicationContext(), manager, appWidgetId);
81+
}
82+
83+
return Result.success();
84+
} else {
85+
return Result.retry();
86+
}
87+
} catch (Exception e) {
88+
e.printStackTrace();
89+
return Result.retry();
90+
}
91+
}
92+
}

0 commit comments

Comments
 (0)