Request remove battery optimization

This commit is contained in:
Thomas 2023-02-28 16:10:24 +01:00
parent 7195f03501
commit a655cab7ae
6 changed files with 53 additions and 2 deletions

View File

@ -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" />

View File

@ -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) {
@ -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;
@ -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);
}
}
}
}

View File

@ -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;
@ -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 -> {

View File

@ -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>
@ -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>

View File

@ -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>

View File

@ -1,10 +1,11 @@
Added:
- Settings compose: display a dialog to warn if there are missing media description (default disabled)
- Settings > Notification: disable battery optimization
Changed:
-
Fixed:
- Fix an issue with cache and fetch more
- Cache view with large fonts
- Bad behaviors with truncated messages