diff options
-rw-r--r-- | .tx/config | 74 | ||||
-rw-r--r-- | app/build.gradle | 1 | ||||
-rw-r--r-- | app/src/main/java/de/danoeh/antennapod/activity/WidgetConfigActivity.java | 4 | ||||
-rw-r--r-- | core/build.gradle | 6 | ||||
-rw-r--r-- | core/lint.xml | 8 | ||||
-rw-r--r-- | core/src/main/AndroidManifest.xml | 5 | ||||
-rw-r--r-- | core/src/main/java/androidx/core/app/SafeJobIntentService.java | 118 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java | 8 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterJobService.java | 33 | ||||
-rw-r--r-- | core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java | 59 | ||||
-rw-r--r-- | settings.gradle | 1 | ||||
-rw-r--r-- | ui/i18n/README.md | 3 | ||||
-rw-r--r-- | ui/i18n/build.gradle | 15 | ||||
-rw-r--r-- | ui/i18n/lint.xml | 10 | ||||
-rw-r--r-- | ui/i18n/src/main/AndroidManifest.xml | 1 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-ar/strings.xml (renamed from core/src/main/res/values-ar/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-ast/strings.xml (renamed from core/src/main/res/values-ast/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-br/strings.xml (renamed from core/src/main/res/values-br/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-ca/strings.xml (renamed from core/src/main/res/values-ca/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-cs/strings.xml (renamed from core/src/main/res/values-cs/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-da/strings.xml (renamed from core/src/main/res/values-da/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-de/strings.xml (renamed from core/src/main/res/values-de/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-es/strings.xml (renamed from core/src/main/res/values-es/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-et/strings.xml (renamed from core/src/main/res/values-et/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-eu/strings.xml (renamed from core/src/main/res/values-eu/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-fa/strings.xml (renamed from core/src/main/res/values-fa/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-fi/strings.xml (renamed from core/src/main/res/values-fi/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-fr/strings.xml (renamed from core/src/main/res/values-fr/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-gl/strings.xml (renamed from core/src/main/res/values-gl/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-hu/strings.xml (renamed from core/src/main/res/values-hu/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-it/strings.xml (renamed from core/src/main/res/values-it/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-iw/strings.xml (renamed from core/src/main/res/values-iw/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-ja/strings.xml (renamed from core/src/main/res/values-ja/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-ko/strings.xml (renamed from core/src/main/res/values-ko/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-lt/strings.xml (renamed from core/src/main/res/values-lt/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-nb/strings.xml (renamed from core/src/main/res/values-nb/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-nl/strings.xml (renamed from core/src/main/res/values-nl/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-pl/strings.xml (renamed from core/src/main/res/values-pl/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-pt-rBR/strings.xml (renamed from core/src/main/res/values-pt-rBR/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-pt/strings.xml (renamed from core/src/main/res/values-pt/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-ro/strings.xml (renamed from core/src/main/res/values-ro/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-ru/strings.xml (renamed from core/src/main/res/values-ru/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-sk/strings.xml (renamed from core/src/main/res/values-sk/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-sl/strings.xml (renamed from core/src/main/res/values-sl/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-sv/strings.xml (renamed from core/src/main/res/values-sv/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-tr/strings.xml (renamed from core/src/main/res/values-tr/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-uk/strings.xml (renamed from core/src/main/res/values-uk/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-zh-rCN/strings.xml (renamed from core/src/main/res/values-zh-rCN/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values-zh-rTW/strings.xml (renamed from core/src/main/res/values-zh-rTW/strings.xml) | 0 | ||||
-rw-r--r-- | ui/i18n/src/main/res/values/strings.xml (renamed from core/src/main/res/values/strings.xml) | 0 |
50 files changed, 136 insertions, 210 deletions
diff --git a/.tx/config b/.tx/config index 5a24aecaf..601e24dbd 100644 --- a/.tx/config +++ b/.tx/config @@ -2,44 +2,44 @@ host = https://www.transifex.com [antennapod.core-values] -source_file = core/src/main/res/values/strings.xml +source_file = ui/i18n/src/main/res/values/strings.xml source_lang = en -trans.ar = core/src/main/res/values-ar/strings.xml -trans.ast_ES = core/src/main/res/values-ast/strings.xml -trans.br = core/src/main/res/values-br/strings.xml -trans.ca = core/src/main/res/values-ca/strings.xml -trans.cs_CZ = core/src/main/res/values-cs/strings.xml -trans.da = core/src/main/res/values-da/strings.xml -trans.de = core/src/main/res/values-de/strings.xml -trans.es = core/src/main/res/values-es/strings.xml -trans.et = core/src/main/res/values-et/strings.xml -trans.eu = core/src/main/res/values-eu/strings.xml -trans.fa = core/src/main/res/values-fa/strings.xml -trans.fi = core/src/main/res/values-fi/strings.xml -trans.fr = core/src/main/res/values-fr/strings.xml -trans.gl = core/src/main/res/values-gl/strings.xml -trans.he_IL = core/src/main/res/values-iw/strings.xml -trans.hi_IN = core/src/main/res/values-hi/strings.xml -trans.hu = core/src/main/res/values-hu/strings.xml -trans.it_IT = core/src/main/res/values-it/strings.xml -trans.ja = core/src/main/res/values-ja/strings.xml -trans.ko = core/src/main/res/values-ko/strings.xml -trans.lt = core/src/main/res/values-lt/strings.xml -trans.nb_NO = core/src/main/res/values-nb/strings.xml -trans.nl = core/src/main/res/values-nl/strings.xml -trans.pl_PL = core/src/main/res/values-pl/strings.xml -trans.pt = core/src/main/res/values-pt/strings.xml -trans.pt_BR = core/src/main/res/values-pt-rBR/strings.xml -trans.ro_RO = core/src/main/res/values-ro/strings.xml -trans.ru_RU = core/src/main/res/values-ru/strings.xml -trans.sk = core/src/main/res/values-sk/strings.xml -trans.sl_SI = core/src/main/res/values-sl/strings.xml -trans.sv_SE = core/src/main/res/values-sv/strings.xml -trans.tr = core/src/main/res/values-tr/strings.xml -trans.uk_UA = core/src/main/res/values-uk/strings.xml -trans.zh_CN = core/src/main/res/values-zh-rCN/strings.xml -trans.zh_TW = core/src/main/res/values-zh-rTW/strings.xml -trans.zh_HK = core/src/main/res/values-zh-rHK/strings.xml +trans.ar = ui/i18n/src/main/res/values-ar/strings.xml +trans.ast_ES = ui/i18n/src/main/res/values-ast/strings.xml +trans.br = ui/i18n/src/main/res/values-br/strings.xml +trans.ca = ui/i18n/src/main/res/values-ca/strings.xml +trans.cs_CZ = ui/i18n/src/main/res/values-cs/strings.xml +trans.da = ui/i18n/src/main/res/values-da/strings.xml +trans.de = ui/i18n/src/main/res/values-de/strings.xml +trans.es = ui/i18n/src/main/res/values-es/strings.xml +trans.et = ui/i18n/src/main/res/values-et/strings.xml +trans.eu = ui/i18n/src/main/res/values-eu/strings.xml +trans.fa = ui/i18n/src/main/res/values-fa/strings.xml +trans.fi = ui/i18n/src/main/res/values-fi/strings.xml +trans.fr = ui/i18n/src/main/res/values-fr/strings.xml +trans.gl = ui/i18n/src/main/res/values-gl/strings.xml +trans.he_IL = ui/i18n/src/main/res/values-iw/strings.xml +trans.hi_IN = ui/i18n/src/main/res/values-hi/strings.xml +trans.hu = ui/i18n/src/main/res/values-hu/strings.xml +trans.it_IT = ui/i18n/src/main/res/values-it/strings.xml +trans.ja = ui/i18n/src/main/res/values-ja/strings.xml +trans.ko = ui/i18n/src/main/res/values-ko/strings.xml +trans.lt = ui/i18n/src/main/res/values-lt/strings.xml +trans.nb_NO = ui/i18n/src/main/res/values-nb/strings.xml +trans.nl = ui/i18n/src/main/res/values-nl/strings.xml +trans.pl_PL = ui/i18n/src/main/res/values-pl/strings.xml +trans.pt = ui/i18n/src/main/res/values-pt/strings.xml +trans.pt_BR = ui/i18n/src/main/res/values-pt-rBR/strings.xml +trans.ro_RO = ui/i18n/src/main/res/values-ro/strings.xml +trans.ru_RU = ui/i18n/src/main/res/values-ru/strings.xml +trans.sk = ui/i18n/src/main/res/values-sk/strings.xml +trans.sl_SI = ui/i18n/src/main/res/values-sl/strings.xml +trans.sv_SE = ui/i18n/src/main/res/values-sv/strings.xml +trans.tr = ui/i18n/src/main/res/values-tr/strings.xml +trans.uk_UA = ui/i18n/src/main/res/values-uk/strings.xml +trans.zh_CN = ui/i18n/src/main/res/values-zh-rCN/strings.xml +trans.zh_TW = ui/i18n/src/main/res/values-zh-rTW/strings.xml +trans.zh_HK = ui/i18n/src/main/res/values-zh-rHK/strings.xml [antennapod.description] source_file = app/src/main/play/listings/en-US/full-description.txt diff --git a/app/build.gradle b/app/build.gradle index 7b324e878..40759dd56 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -120,6 +120,7 @@ dependencies { implementation project(':playback:cast') implementation project(':ui:app-start-intent') implementation project(':ui:common') + implementation project(':ui:i18n') annotationProcessor "androidx.annotation:annotation:$annotationVersion" implementation "androidx.appcompat:appcompat:$appcompatVersion" diff --git a/app/src/main/java/de/danoeh/antennapod/activity/WidgetConfigActivity.java b/app/src/main/java/de/danoeh/antennapod/activity/WidgetConfigActivity.java index 4cf925860..7245ce675 100644 --- a/app/src/main/java/de/danoeh/antennapod/activity/WidgetConfigActivity.java +++ b/app/src/main/java/de/danoeh/antennapod/activity/WidgetConfigActivity.java @@ -12,7 +12,7 @@ import androidx.appcompat.app.AppCompatActivity; import de.danoeh.antennapod.R; import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.receiver.PlayerWidget; -import de.danoeh.antennapod.core.widget.WidgetUpdaterJobService; +import de.danoeh.antennapod.core.widget.WidgetUpdaterWorker; public class WidgetConfigActivity extends AppCompatActivity { private int appWidgetId = AppWidgetManager.INVALID_APPWIDGET_ID; @@ -109,7 +109,7 @@ public class WidgetConfigActivity extends AppCompatActivity { resultValue.putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId); setResult(RESULT_OK, resultValue); finish(); - WidgetUpdaterJobService.performBackgroundUpdate(this); + WidgetUpdaterWorker.enqueueWork(this); } private int getColorWithAlpha(int color, int opacity) { diff --git a/core/build.gradle b/core/build.gradle index af0e2a7a7..13489f996 100644 --- a/core/build.gradle +++ b/core/build.gradle @@ -7,9 +7,8 @@ apply from: "../playFlavor.gradle" android { lintOptions { disable "InvalidPeriodicWorkRequestInterval", "ObsoleteLintCustomCheck", "DefaultLocale", "UnusedAttribute", - "ParcelClassLoader", "Typos", "ExtraTranslation", "ImpliedQuantity", "CheckResult", - "PluralsCandidate", "UnusedQuantity", "StringFormatCount", "TrustAllX509TrustManager", - "StaticFieldLeak", "TypographyEllipsis", "IconDensities", "IconDuplicates" + "ParcelClassLoader", "CheckResult", "TrustAllX509TrustManager", + "StaticFieldLeak", "IconDensities", "IconDuplicates" } defaultConfig { @@ -33,6 +32,7 @@ dependencies { implementation project(':playback:cast') implementation project(':ui:app-start-intent') implementation project(':ui:common') + implementation project(':ui:i18n') implementation project(':ui:png-icons') annotationProcessor "androidx.annotation:annotation:$annotationVersion" diff --git a/core/lint.xml b/core/lint.xml index aa2c50677..f3cb24810 100644 --- a/core/lint.xml +++ b/core/lint.xml @@ -4,12 +4,4 @@ <ignore path="res/drawable/ic_settings.xml" /> <ignore path="res/drawable/ic_settings_white.xml" /> </issue> - - <issue id="MissingDefaultResource"> - <ignore path="**/values-**/strings.xml" /> - </issue> - - <issue id="UnusedResources" severity="error"> - <ignore path="**/values-**/strings.xml" /> - </issue> </lint> diff --git a/core/src/main/AndroidManifest.xml b/core/src/main/AndroidManifest.xml index 7478eb48a..9b23acd1d 100644 --- a/core/src/main/AndroidManifest.xml +++ b/core/src/main/AndroidManifest.xml @@ -46,11 +46,6 @@ android:label="@string/feed_update_receiver_name" android:exported="true" tools:ignore="ExportedReceiver" /> <!-- allow feeds update to be triggered by external apps --> - - <service - android:name=".widget.WidgetUpdaterJobService" - android:permission="android.permission.BIND_JOB_SERVICE" - android:exported="true"/> </application> <queries> diff --git a/core/src/main/java/androidx/core/app/SafeJobIntentService.java b/core/src/main/java/androidx/core/app/SafeJobIntentService.java deleted file mode 100644 index aedc9418b..000000000 --- a/core/src/main/java/androidx/core/app/SafeJobIntentService.java +++ /dev/null @@ -1,118 +0,0 @@ -package androidx.core.app; - -import android.app.job.JobParameters; -import android.app.job.JobServiceEngine; -import android.app.job.JobWorkItem; -import android.content.Intent; -import android.os.Build; -import android.os.IBinder; -import androidx.annotation.RequiresApi; -import android.util.Log; - - -public abstract class SafeJobIntentService extends JobIntentService { - - @Override - public void onCreate() { - super.onCreate(); - if (Build.VERSION.SDK_INT >= 26) { - mJobImpl = new SafeJobServiceEngineImpl(this); - } - } - - /** - * Implementation of a safe JobServiceEngine for interaction with JobIntentService. - */ - @RequiresApi(26) - static final class SafeJobServiceEngineImpl extends JobServiceEngine - implements JobIntentService.CompatJobEngine { - static final String TAG = "JobServiceEngineImpl"; - - static final boolean DEBUG = false; - - final JobIntentService mService; - final Object mLock = new Object(); - JobParameters mParams; - - final class WrapperWorkItem implements JobIntentService.GenericWorkItem { - final JobWorkItem mJobWork; - - WrapperWorkItem(JobWorkItem jobWork) { - mJobWork = jobWork; - } - - @Override - public Intent getIntent() { - return mJobWork.getIntent(); - } - - @Override - public void complete() { - synchronized (mLock) { - if (mParams != null) { - try { - mParams.completeWork(mJobWork); - } catch (SecurityException e) { - Log.e(TAG, Log.getStackTraceString(e)); - } - } - } - } - } - - SafeJobServiceEngineImpl(JobIntentService service) { - super(service); - mService = service; - } - - @Override - public IBinder compatGetBinder() { - return getBinder(); - } - - @Override - public boolean onStartJob(JobParameters params) { - if (DEBUG) Log.d(TAG, "onStartJob: " + params); - mParams = params; - // We can now start dequeuing work! - mService.ensureProcessorRunningLocked(false); - return true; - } - - @Override - public boolean onStopJob(JobParameters params) { - if (DEBUG) Log.d(TAG, "onStartJob: " + params); - boolean result = mService.doStopCurrentWork(); - synchronized (mLock) { - // Once we return, the job is stopped, so its JobParameters are no - // longer valid and we should not be doing anything with them. - mParams = null; - } - return result; - } - - /** - * Dequeue some work. - */ - @Override - public JobIntentService.GenericWorkItem dequeueWork() { - JobWorkItem work = null; - synchronized (mLock) { - if (mParams == null) { - return null; - } - try { - work = mParams.dequeueWork(); - } catch (SecurityException e) { - Log.e(TAG, Log.getStackTraceString(e)); - } - } - if (work != null) { - work.getIntent().setExtrasClassLoader(mService.getClassLoader()); - return new WrapperWorkItem(work); - } else { - return null; - } - } - } -} diff --git a/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java b/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java index cf0debed2..842dcdf75 100644 --- a/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java +++ b/core/src/main/java/de/danoeh/antennapod/core/receiver/PlayerWidget.java @@ -9,7 +9,7 @@ import android.util.Log; import java.util.Arrays; -import de.danoeh.antennapod.core.widget.WidgetUpdaterJobService; +import de.danoeh.antennapod.core.widget.WidgetUpdaterWorker; public class PlayerWidget extends AppWidgetProvider { private static final String TAG = "PlayerWidget"; @@ -25,7 +25,7 @@ public class PlayerWidget extends AppWidgetProvider { public void onReceive(Context context, Intent intent) { Log.d(TAG, "onReceive"); super.onReceive(context, intent); - WidgetUpdaterJobService.performBackgroundUpdate(context); + WidgetUpdaterWorker.enqueueWork(context); } @Override @@ -33,14 +33,14 @@ public class PlayerWidget extends AppWidgetProvider { super.onEnabled(context); Log.d(TAG, "Widget enabled"); setEnabled(context, true); - WidgetUpdaterJobService.performBackgroundUpdate(context); + WidgetUpdaterWorker.enqueueWork(context); } @Override public void onUpdate(Context context, AppWidgetManager appWidgetManager, int[] appWidgetIds) { Log.d(TAG, "onUpdate() called with: " + "context = [" + context + "], appWidgetManager = [" + appWidgetManager + "], appWidgetIds = [" + Arrays.toString(appWidgetIds) + "]"); - WidgetUpdaterJobService.performBackgroundUpdate(context); + WidgetUpdaterWorker.enqueueWork(context); } @Override diff --git a/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterJobService.java b/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterJobService.java deleted file mode 100644 index 598544a0c..000000000 --- a/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterJobService.java +++ /dev/null @@ -1,33 +0,0 @@ -package de.danoeh.antennapod.core.widget; - -import android.content.Context; -import android.content.Intent; -import androidx.annotation.NonNull; -import androidx.core.app.SafeJobIntentService; -import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils; -import de.danoeh.antennapod.model.playback.Playable; -import de.danoeh.antennapod.core.util.playback.PlayableUtils; -import de.danoeh.antennapod.playback.base.PlayerStatus; - -public class WidgetUpdaterJobService extends SafeJobIntentService { - private static final int JOB_ID = -17001; - - /** - * Loads the current media from the database and updates the widget in a background job. - */ - public static void performBackgroundUpdate(Context context) { - enqueueWork(context, WidgetUpdaterJobService.class, - WidgetUpdaterJobService.JOB_ID, new Intent(context, WidgetUpdaterJobService.class)); - } - - @Override - protected void onHandleWork(@NonNull Intent intent) { - Playable media = PlayableUtils.createInstanceFromPreferences(getApplicationContext()); - if (media != null) { - WidgetUpdater.updateWidget(this, new WidgetUpdater.WidgetState(media, PlayerStatus.STOPPED, - media.getPosition(), media.getDuration(), PlaybackSpeedUtils.getCurrentPlaybackSpeed(media))); - } else { - WidgetUpdater.updateWidget(this, new WidgetUpdater.WidgetState(PlayerStatus.STOPPED)); - } - } -}
\ No newline at end of file diff --git a/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java b/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java new file mode 100644 index 000000000..3b8546a8e --- /dev/null +++ b/core/src/main/java/de/danoeh/antennapod/core/widget/WidgetUpdaterWorker.java @@ -0,0 +1,59 @@ +package de.danoeh.antennapod.core.widget; + +import android.content.Context; +import android.util.Log; + +import androidx.annotation.NonNull; +import androidx.work.OneTimeWorkRequest; +import androidx.work.WorkManager; +import androidx.work.WorkRequest; +import androidx.work.Worker; +import androidx.work.WorkerParameters; + +import de.danoeh.antennapod.core.feed.util.PlaybackSpeedUtils; +import de.danoeh.antennapod.core.util.playback.PlayableUtils; +import de.danoeh.antennapod.model.playback.Playable; +import de.danoeh.antennapod.playback.base.PlayerStatus; + +public class WidgetUpdaterWorker extends Worker { + + private static final String TAG = "WidgetUpdaterWorker"; + + public WidgetUpdaterWorker(@NonNull final Context context, + @NonNull final WorkerParameters workerParams) { + super(context, workerParams); + } + + public static void enqueueWork(final Context context) { + final WorkRequest workRequest = new OneTimeWorkRequest.Builder(WidgetUpdaterWorker.class).build(); + WorkManager.getInstance(context).enqueue(workRequest); + } + + @NonNull + @Override + public Result doWork() { + try { + updateWidget(); + } catch (final Exception e) { + Log.d(TAG, "Failed to update AntennaPod widget: ", e); + return Result.failure(); + } + return Result.success(); + } + + /** + * Loads the current media from the database and updates the widget in a background job. + */ + private void updateWidget() { + final Playable media = PlayableUtils.createInstanceFromPreferences(getApplicationContext()); + if (media != null) { + WidgetUpdater.updateWidget(getApplicationContext(), + new WidgetUpdater.WidgetState(media, PlayerStatus.STOPPED, + media.getPosition(), media.getDuration(), + PlaybackSpeedUtils.getCurrentPlaybackSpeed(media))); + } else { + WidgetUpdater.updateWidget(getApplicationContext(), + new WidgetUpdater.WidgetState(PlayerStatus.STOPPED)); + } + } +} diff --git a/settings.gradle b/settings.gradle index c7f5e6449..96989ab69 100644 --- a/settings.gradle +++ b/settings.gradle @@ -15,4 +15,5 @@ include ':playback:cast' include ':ui:app-start-intent' include ':ui:common' +include ':ui:i18n' include ':ui:png-icons' diff --git a/ui/i18n/README.md b/ui/i18n/README.md new file mode 100644 index 000000000..a15c38807 --- /dev/null +++ b/ui/i18n/README.md @@ -0,0 +1,3 @@ +# :ui:i18n + +The abbreviation i18n stands for internationalization. This module contains the app's main texts that are translated to different languages. Most modules that show UI depend on this module. diff --git a/ui/i18n/build.gradle b/ui/i18n/build.gradle new file mode 100644 index 000000000..a1ace417b --- /dev/null +++ b/ui/i18n/build.gradle @@ -0,0 +1,15 @@ +plugins { + id("com.android.library") +} +apply from: "../../common.gradle" + +android { + lintOptions { + disable "Typos", "ExtraTranslation", "ImpliedQuantity", + "PluralsCandidate", "UnusedQuantity", "TypographyEllipsis" + } +} + +dependencies { + annotationProcessor "androidx.annotation:annotation:$annotationVersion" +} diff --git a/ui/i18n/lint.xml b/ui/i18n/lint.xml new file mode 100644 index 000000000..e35ec9859 --- /dev/null +++ b/ui/i18n/lint.xml @@ -0,0 +1,10 @@ +<?xml version="1.0" encoding="UTF-8"?> +<lint> + <issue id="MissingDefaultResource"> + <ignore path="**/values-**/strings.xml" /> + </issue> + + <issue id="UnusedResources" severity="error"> + <ignore path="**/values-**/strings.xml" /> + </issue> +</lint> diff --git a/ui/i18n/src/main/AndroidManifest.xml b/ui/i18n/src/main/AndroidManifest.xml new file mode 100644 index 000000000..8729444b0 --- /dev/null +++ b/ui/i18n/src/main/AndroidManifest.xml @@ -0,0 +1 @@ +<manifest package="de.danoeh.antennapod.ui.i18n" /> diff --git a/core/src/main/res/values-ar/strings.xml b/ui/i18n/src/main/res/values-ar/strings.xml index 01d2b04bb..01d2b04bb 100644 --- a/core/src/main/res/values-ar/strings.xml +++ b/ui/i18n/src/main/res/values-ar/strings.xml diff --git a/core/src/main/res/values-ast/strings.xml b/ui/i18n/src/main/res/values-ast/strings.xml index e9d1ea593..e9d1ea593 100644 --- a/core/src/main/res/values-ast/strings.xml +++ b/ui/i18n/src/main/res/values-ast/strings.xml diff --git a/core/src/main/res/values-br/strings.xml b/ui/i18n/src/main/res/values-br/strings.xml index ef69b8099..ef69b8099 100644 --- a/core/src/main/res/values-br/strings.xml +++ b/ui/i18n/src/main/res/values-br/strings.xml diff --git a/core/src/main/res/values-ca/strings.xml b/ui/i18n/src/main/res/values-ca/strings.xml index 72cd0f33a..72cd0f33a 100644 --- a/core/src/main/res/values-ca/strings.xml +++ b/ui/i18n/src/main/res/values-ca/strings.xml diff --git a/core/src/main/res/values-cs/strings.xml b/ui/i18n/src/main/res/values-cs/strings.xml index 69736be49..69736be49 100644 --- a/core/src/main/res/values-cs/strings.xml +++ b/ui/i18n/src/main/res/values-cs/strings.xml diff --git a/core/src/main/res/values-da/strings.xml b/ui/i18n/src/main/res/values-da/strings.xml index a6fec5b82..a6fec5b82 100644 --- a/core/src/main/res/values-da/strings.xml +++ b/ui/i18n/src/main/res/values-da/strings.xml diff --git a/core/src/main/res/values-de/strings.xml b/ui/i18n/src/main/res/values-de/strings.xml index d3f6ded98..d3f6ded98 100644 --- a/core/src/main/res/values-de/strings.xml +++ b/ui/i18n/src/main/res/values-de/strings.xml diff --git a/core/src/main/res/values-es/strings.xml b/ui/i18n/src/main/res/values-es/strings.xml index 922154cb5..922154cb5 100644 --- a/core/src/main/res/values-es/strings.xml +++ b/ui/i18n/src/main/res/values-es/strings.xml diff --git a/core/src/main/res/values-et/strings.xml b/ui/i18n/src/main/res/values-et/strings.xml index 0427fe34a..0427fe34a 100644 --- a/core/src/main/res/values-et/strings.xml +++ b/ui/i18n/src/main/res/values-et/strings.xml diff --git a/core/src/main/res/values-eu/strings.xml b/ui/i18n/src/main/res/values-eu/strings.xml index bddbee895..bddbee895 100644 --- a/core/src/main/res/values-eu/strings.xml +++ b/ui/i18n/src/main/res/values-eu/strings.xml diff --git a/core/src/main/res/values-fa/strings.xml b/ui/i18n/src/main/res/values-fa/strings.xml index e6145d62b..e6145d62b 100644 --- a/core/src/main/res/values-fa/strings.xml +++ b/ui/i18n/src/main/res/values-fa/strings.xml diff --git a/core/src/main/res/values-fi/strings.xml b/ui/i18n/src/main/res/values-fi/strings.xml index 28d17bfdc..28d17bfdc 100644 --- a/core/src/main/res/values-fi/strings.xml +++ b/ui/i18n/src/main/res/values-fi/strings.xml diff --git a/core/src/main/res/values-fr/strings.xml b/ui/i18n/src/main/res/values-fr/strings.xml index b0ffcb348..b0ffcb348 100644 --- a/core/src/main/res/values-fr/strings.xml +++ b/ui/i18n/src/main/res/values-fr/strings.xml diff --git a/core/src/main/res/values-gl/strings.xml b/ui/i18n/src/main/res/values-gl/strings.xml index a524d722d..a524d722d 100644 --- a/core/src/main/res/values-gl/strings.xml +++ b/ui/i18n/src/main/res/values-gl/strings.xml diff --git a/core/src/main/res/values-hu/strings.xml b/ui/i18n/src/main/res/values-hu/strings.xml index 4eabe54bb..4eabe54bb 100644 --- a/core/src/main/res/values-hu/strings.xml +++ b/ui/i18n/src/main/res/values-hu/strings.xml diff --git a/core/src/main/res/values-it/strings.xml b/ui/i18n/src/main/res/values-it/strings.xml index a93e0527c..a93e0527c 100644 --- a/core/src/main/res/values-it/strings.xml +++ b/ui/i18n/src/main/res/values-it/strings.xml diff --git a/core/src/main/res/values-iw/strings.xml b/ui/i18n/src/main/res/values-iw/strings.xml index 1dc4cbb32..1dc4cbb32 100644 --- a/core/src/main/res/values-iw/strings.xml +++ b/ui/i18n/src/main/res/values-iw/strings.xml diff --git a/core/src/main/res/values-ja/strings.xml b/ui/i18n/src/main/res/values-ja/strings.xml index 44d0b42e1..44d0b42e1 100644 --- a/core/src/main/res/values-ja/strings.xml +++ b/ui/i18n/src/main/res/values-ja/strings.xml diff --git a/core/src/main/res/values-ko/strings.xml b/ui/i18n/src/main/res/values-ko/strings.xml index bffc8059c..bffc8059c 100644 --- a/core/src/main/res/values-ko/strings.xml +++ b/ui/i18n/src/main/res/values-ko/strings.xml diff --git a/core/src/main/res/values-lt/strings.xml b/ui/i18n/src/main/res/values-lt/strings.xml index ffa272965..ffa272965 100644 --- a/core/src/main/res/values-lt/strings.xml +++ b/ui/i18n/src/main/res/values-lt/strings.xml diff --git a/core/src/main/res/values-nb/strings.xml b/ui/i18n/src/main/res/values-nb/strings.xml index 389ab6a41..389ab6a41 100644 --- a/core/src/main/res/values-nb/strings.xml +++ b/ui/i18n/src/main/res/values-nb/strings.xml diff --git a/core/src/main/res/values-nl/strings.xml b/ui/i18n/src/main/res/values-nl/strings.xml index 31f030290..31f030290 100644 --- a/core/src/main/res/values-nl/strings.xml +++ b/ui/i18n/src/main/res/values-nl/strings.xml diff --git a/core/src/main/res/values-pl/strings.xml b/ui/i18n/src/main/res/values-pl/strings.xml index 97a138113..97a138113 100644 --- a/core/src/main/res/values-pl/strings.xml +++ b/ui/i18n/src/main/res/values-pl/strings.xml diff --git a/core/src/main/res/values-pt-rBR/strings.xml b/ui/i18n/src/main/res/values-pt-rBR/strings.xml index c994b55ac..c994b55ac 100644 --- a/core/src/main/res/values-pt-rBR/strings.xml +++ b/ui/i18n/src/main/res/values-pt-rBR/strings.xml diff --git a/core/src/main/res/values-pt/strings.xml b/ui/i18n/src/main/res/values-pt/strings.xml index 646f9cdc2..646f9cdc2 100644 --- a/core/src/main/res/values-pt/strings.xml +++ b/ui/i18n/src/main/res/values-pt/strings.xml diff --git a/core/src/main/res/values-ro/strings.xml b/ui/i18n/src/main/res/values-ro/strings.xml index b9cf03cb8..b9cf03cb8 100644 --- a/core/src/main/res/values-ro/strings.xml +++ b/ui/i18n/src/main/res/values-ro/strings.xml diff --git a/core/src/main/res/values-ru/strings.xml b/ui/i18n/src/main/res/values-ru/strings.xml index 01dd6fe81..01dd6fe81 100644 --- a/core/src/main/res/values-ru/strings.xml +++ b/ui/i18n/src/main/res/values-ru/strings.xml diff --git a/core/src/main/res/values-sk/strings.xml b/ui/i18n/src/main/res/values-sk/strings.xml index 3de3327c2..3de3327c2 100644 --- a/core/src/main/res/values-sk/strings.xml +++ b/ui/i18n/src/main/res/values-sk/strings.xml diff --git a/core/src/main/res/values-sl/strings.xml b/ui/i18n/src/main/res/values-sl/strings.xml index 2415c1625..2415c1625 100644 --- a/core/src/main/res/values-sl/strings.xml +++ b/ui/i18n/src/main/res/values-sl/strings.xml diff --git a/core/src/main/res/values-sv/strings.xml b/ui/i18n/src/main/res/values-sv/strings.xml index caabb24cf..caabb24cf 100644 --- a/core/src/main/res/values-sv/strings.xml +++ b/ui/i18n/src/main/res/values-sv/strings.xml diff --git a/core/src/main/res/values-tr/strings.xml b/ui/i18n/src/main/res/values-tr/strings.xml index aa0305e66..aa0305e66 100644 --- a/core/src/main/res/values-tr/strings.xml +++ b/ui/i18n/src/main/res/values-tr/strings.xml diff --git a/core/src/main/res/values-uk/strings.xml b/ui/i18n/src/main/res/values-uk/strings.xml index 8660a5b38..8660a5b38 100644 --- a/core/src/main/res/values-uk/strings.xml +++ b/ui/i18n/src/main/res/values-uk/strings.xml diff --git a/core/src/main/res/values-zh-rCN/strings.xml b/ui/i18n/src/main/res/values-zh-rCN/strings.xml index 5ad647f98..5ad647f98 100644 --- a/core/src/main/res/values-zh-rCN/strings.xml +++ b/ui/i18n/src/main/res/values-zh-rCN/strings.xml diff --git a/core/src/main/res/values-zh-rTW/strings.xml b/ui/i18n/src/main/res/values-zh-rTW/strings.xml index 616c1d0d9..616c1d0d9 100644 --- a/core/src/main/res/values-zh-rTW/strings.xml +++ b/ui/i18n/src/main/res/values-zh-rTW/strings.xml diff --git a/core/src/main/res/values/strings.xml b/ui/i18n/src/main/res/values/strings.xml index 197d0c636..197d0c636 100644 --- a/core/src/main/res/values/strings.xml +++ b/ui/i18n/src/main/res/values/strings.xml |