Loading app/src/main/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /> Loading app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java +16 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,8 @@ public class FetchHomeWorker extends Worker { int call = 0; String max_id = null; MastodonTimelinesService mastodonTimelinesService = init(account.instance); int insertValue = 0; StatusCache lastStatusCache = null; while (canContinue && call < max_calls) { Call<List<Status>> homeCall = mastodonTimelinesService.getHome(account.token, max_id, null, null, status_per_page, null); if (homeCall != null) { Loading @@ -184,12 +186,14 @@ public class FetchHomeWorker extends Worker { statusCache.status = status; statusCache.type = Timeline.TimeLineEnum.HOME; statusCache.status_id = status.id; lastStatusCache = statusCache; try { statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue()); insertValue = statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue()); } catch (DBException e) { e.printStackTrace(); } } Pagination pagination = MastodonHelper.getPagination(homeResponse.headers()); if (pagination.max_id != null) { max_id = pagination.max_id; Loading @@ -211,6 +215,17 @@ public class FetchHomeWorker extends Worker { } call++; } //insertValue is for last status and equals zero if updated or 1 if inserted if (lastStatusCache != null && insertValue == 1) { //Last inserted message was not in cache. StatusCache statusCacheDAO = new StatusCache(getApplicationContext()); lastStatusCache.status.isFetchMore = true; lastStatusCache.status.positionFetchMore = Status.PositionFetchMore.TOP; try { statusCacheDAO.updateIfExists(lastStatusCache); } catch (DBException e) { throw new RuntimeException(e); } } } } Loading app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentNotificationsSettings.java +26 −0 Original line number Diff line number Diff line Loading @@ -14,12 +14,16 @@ package app.fedilab.android.mastodon.ui.fragment.settings; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import static android.content.Context.POWER_SERVICE; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.provider.Settings; import androidx.annotation.NonNull; Loading Loading @@ -121,6 +125,28 @@ public class FragmentNotificationsSettings extends PreferenceFragmentCompat impl } } Preference SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS = findPreference(getString(R.string.SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS)); if (SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PowerManager pm = (PowerManager) requireActivity().getSystemService(POWER_SERVICE); String packageName = requireActivity().getPackageName(); if (!pm.isIgnoringBatteryOptimizations(packageName)) { SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(); String packageName1 = requireActivity().getPackageName(); intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName1)); startActivity(intent); return false; }); } else { preferenceScreen.removePreferenceRecursively(getString(R.string.SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS)); } } else { preferenceScreen.removePreferenceRecursively(getString(R.string.SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS)); } } Preference button_mention = findPreference("button_mention"); assert button_mention != null; button_mention.setOnPreferenceClickListener(preference -> { Loading app/src/main/res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -840,6 +840,8 @@ <string name="SET_NOTIFICATION_TYPE" translatable="false">SET_NOTIFICATION_TYPE</string> <string name="SET_LOAD_MEDIA_TYPE" translatable="false">SET_LOAD_MEDIA_TYPE</string> <string name="SET_NOTIFICATION_DELAY_VALUE" translatable="false">SET_NOTIFICATION_DELAY_VALUE</string> <string name="SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS" translatable="false">SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS</string> <string name="SET_PUSH_DISTRIBUTOR" translatable="false">SET_PUSH_DISTRIBUTOR</string> <string-array name="SET_NOTIFICATION_TYPE_VALUE" translatable="false"> <item>PUSH_NOTIFICATIONS</item> Loading Loading @@ -1923,4 +1925,5 @@ <string name="set_alt_text_mandatory_warn">Warn only</string> <string name="set_alt_text_mandatory_description_warn">If there are missing media a dialog will be displayed with the ability to send the message without media description</string> <string name="send_anyway">Send anyway</string> <string name="set_remove_battery">Ignore battery optimizations</string> </resources> No newline at end of file app/src/main/res/xml/pref_notifications.xml +5 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,11 @@ app:key="@string/SET_PUSH_DISTRIBUTOR" app:title="@string/push_distributors" app:useSimpleSummaryProvider="true" /> <Preference app:iconSpaceReserved="false" app:key="@string/SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS" app:title="@string/set_remove_battery" /> </PreferenceCategory> Loading Loading
app/src/main/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -6,6 +6,7 @@ <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /> Loading
app/src/main/java/app/fedilab/android/mastodon/jobs/FetchHomeWorker.java +16 −1 Original line number Diff line number Diff line Loading @@ -169,6 +169,8 @@ public class FetchHomeWorker extends Worker { int call = 0; String max_id = null; MastodonTimelinesService mastodonTimelinesService = init(account.instance); int insertValue = 0; StatusCache lastStatusCache = null; while (canContinue && call < max_calls) { Call<List<Status>> homeCall = mastodonTimelinesService.getHome(account.token, max_id, null, null, status_per_page, null); if (homeCall != null) { Loading @@ -184,12 +186,14 @@ public class FetchHomeWorker extends Worker { statusCache.status = status; statusCache.type = Timeline.TimeLineEnum.HOME; statusCache.status_id = status.id; lastStatusCache = statusCache; try { statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue()); insertValue = statusCacheDAO.insertOrUpdate(statusCache, Timeline.TimeLineEnum.HOME.getValue()); } catch (DBException e) { e.printStackTrace(); } } Pagination pagination = MastodonHelper.getPagination(homeResponse.headers()); if (pagination.max_id != null) { max_id = pagination.max_id; Loading @@ -211,6 +215,17 @@ public class FetchHomeWorker extends Worker { } call++; } //insertValue is for last status and equals zero if updated or 1 if inserted if (lastStatusCache != null && insertValue == 1) { //Last inserted message was not in cache. StatusCache statusCacheDAO = new StatusCache(getApplicationContext()); lastStatusCache.status.isFetchMore = true; lastStatusCache.status.positionFetchMore = Status.PositionFetchMore.TOP; try { statusCacheDAO.updateIfExists(lastStatusCache); } catch (DBException e) { throw new RuntimeException(e); } } } } Loading
app/src/main/java/app/fedilab/android/mastodon/ui/fragment/settings/FragmentNotificationsSettings.java +26 −0 Original line number Diff line number Diff line Loading @@ -14,12 +14,16 @@ package app.fedilab.android.mastodon.ui.fragment.settings; * You should have received a copy of the GNU General Public License along with Fedilab; if not, * see <http://www.gnu.org/licenses>. */ import static android.content.Context.POWER_SERVICE; import android.app.NotificationChannel; import android.app.NotificationManager; import android.content.Intent; import android.content.SharedPreferences; import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.os.PowerManager; import android.provider.Settings; import androidx.annotation.NonNull; Loading Loading @@ -121,6 +125,28 @@ public class FragmentNotificationsSettings extends PreferenceFragmentCompat impl } } Preference SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS = findPreference(getString(R.string.SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS)); if (SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS != null) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) { PowerManager pm = (PowerManager) requireActivity().getSystemService(POWER_SERVICE); String packageName = requireActivity().getPackageName(); if (!pm.isIgnoringBatteryOptimizations(packageName)) { SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS.setOnPreferenceClickListener(preference -> { Intent intent = new Intent(); String packageName1 = requireActivity().getPackageName(); intent.setAction(Settings.ACTION_REQUEST_IGNORE_BATTERY_OPTIMIZATIONS); intent.setData(Uri.parse("package:" + packageName1)); startActivity(intent); return false; }); } else { preferenceScreen.removePreferenceRecursively(getString(R.string.SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS)); } } else { preferenceScreen.removePreferenceRecursively(getString(R.string.SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS)); } } Preference button_mention = findPreference("button_mention"); assert button_mention != null; button_mention.setOnPreferenceClickListener(preference -> { Loading
app/src/main/res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -840,6 +840,8 @@ <string name="SET_NOTIFICATION_TYPE" translatable="false">SET_NOTIFICATION_TYPE</string> <string name="SET_LOAD_MEDIA_TYPE" translatable="false">SET_LOAD_MEDIA_TYPE</string> <string name="SET_NOTIFICATION_DELAY_VALUE" translatable="false">SET_NOTIFICATION_DELAY_VALUE</string> <string name="SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS" translatable="false">SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS</string> <string name="SET_PUSH_DISTRIBUTOR" translatable="false">SET_PUSH_DISTRIBUTOR</string> <string-array name="SET_NOTIFICATION_TYPE_VALUE" translatable="false"> <item>PUSH_NOTIFICATIONS</item> Loading Loading @@ -1923,4 +1925,5 @@ <string name="set_alt_text_mandatory_warn">Warn only</string> <string name="set_alt_text_mandatory_description_warn">If there are missing media a dialog will be displayed with the ability to send the message without media description</string> <string name="send_anyway">Send anyway</string> <string name="set_remove_battery">Ignore battery optimizations</string> </resources> No newline at end of file
app/src/main/res/xml/pref_notifications.xml +5 −0 Original line number Diff line number Diff line Loading @@ -33,6 +33,11 @@ app:key="@string/SET_PUSH_DISTRIBUTOR" app:title="@string/push_distributors" app:useSimpleSummaryProvider="true" /> <Preference app:iconSpaceReserved="false" app:key="@string/SET_KEY_IGNORE_BATTERY_OPTIMIZATIONS" app:title="@string/set_remove_battery" /> </PreferenceCategory> Loading