Skip to content

Commit

Permalink
Refactor: Port ignore battery optimizations (Android) (#1212)
Browse files Browse the repository at this point in the history
* Port Android `Manifest.permission` and `Manifest.permission_group` (#1196)

* Port `Manifest.permission` and `Manifest.permission_group`

* Use Dart conventions for `Manifest` variables

* Implement `checkPermissionStatus`

* Change entry point of getting an `Activity`, implement `requestPermission`

* Expose `requestCode`

* Update tests

* Update main.dart

* Update CHANGELOG.md

* Elaborate on concern

* Replace `AndroidActivity` with `ActivityAware`

* Delete test

* Apply small fixes

* Elaborate on missing Android activity

* Regenerate pigeon files

* Make small adjustments based on review

* Update documentation

* Update documentation

* Implement `Settings` mirror

* Implement `Uri` mirror

* Add `Intent` constructor and update `Uri` implementation

* Implement `Intent` methods

* Implement `startActivity`, `getPackageName` for `Context`

* Copy new `Context` methods to `Activity`

* Implement `openAppSettings` in `PermissionHandlerAndroid`

* Follow-up changes

* Run `dart format .`

* Add `startActivityForResult`

* Add actions to `Settings`

* Update TODOs

* Run `dart format .`

* Implement `getSystemService`

* Add `Build`

* Implement `PowerManager`

* Fix bug with `PowerManager`, update `PermissionHandlerAndroid`

* Run `dart format .`

* Add sdk check to `isIgnoringBatteryOptimizations`
  • Loading branch information
JeroenWeener authored Nov 9, 2023
1 parent 8e4488b commit b1bf5fc
Show file tree
Hide file tree
Showing 19 changed files with 1,680 additions and 281 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.app.Activity;
import android.content.Intent;
import android.os.PowerManager;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
Expand Down Expand Up @@ -53,6 +54,8 @@ public class ActivityHostApiImpl implements

private final InstanceManager instanceManager;

private final PowerManagerFlutterApiImpl powerManagerFlutterApi;

/**
* Callbacks to complete a pending permission request.
* <p>
Expand All @@ -62,7 +65,7 @@ public class ActivityHostApiImpl implements
private final Map<Integer, Result<PermissionRequestResult>> pendingPermissionsRequestMap = new HashMap<>();

/**
* Callback to complete a pending activity-for-result request.
* Callbacks to complete a pending activity-for-result request.
* <p>
* These callbacks are set in {@link this#startActivityForResult(String, String, Long, Result)},
* and are completed in {@link this#onActivityResult(int, int, Intent)}.
Expand All @@ -76,9 +79,11 @@ public class ActivityHostApiImpl implements
* @param instanceManager maintains instances stored to communicate with attached Dart objects
*/
public ActivityHostApiImpl(
@NonNull PowerManagerFlutterApiImpl powerManagerFlutterApi,
@NonNull BinaryMessenger binaryMessenger,
@NonNull InstanceManager instanceManager
) {
this.powerManagerFlutterApi = powerManagerFlutterApi;
this.binaryMessenger = binaryMessenger;
this.instanceManager = instanceManager;
}
Expand Down Expand Up @@ -219,4 +224,22 @@ public boolean onActivityResult(

return true;
}

@Override
@NonNull public String getSystemService(
@NonNull String instanceId,
@NonNull String name
) {
final UUID instanceUuid = UUID.fromString(instanceId);
final Activity activity = instanceManager.getInstance(instanceUuid);

final Object systemService = activity.getSystemService(name);

if (systemService instanceof PowerManager) {
powerManagerFlutterApi.create((PowerManager) systemService);
}

final UUID systemServiceUuid = instanceManager.getIdentifierForStrongReference(systemService);
return systemServiceUuid.toString();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package com.baseflow.permissionhandler;

import android.os.Build;

import androidx.annotation.NonNull;

import com.baseflow.permissionhandler.PermissionHandlerPigeon.BuildVersionHostApi;

/**
* Host API implementation for `Build.VERSION`.
*
* <p>This class may handle instantiating and adding native object instances that are attached to a
* Dart instance or handle method calls on the associated native class or an instance of the class.
*/
public class BuildVersionHostApiImpl implements BuildVersionHostApi {
@NonNull
@Override
public Long sdkInt() {
return (long) Build.VERSION.SDK_INT;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@

import android.content.Context;
import android.content.Intent;
import android.os.PowerManager;

import androidx.annotation.NonNull;
import androidx.core.content.ContextCompat;
Expand All @@ -26,16 +27,20 @@ public class ContextHostApiImpl implements ContextHostApi {

private final InstanceManager instanceManager;

private final PowerManagerFlutterApiImpl powerManagerFlutterApi;

/**
* Constructs an {@link ContextHostApiImpl}.
*
* @param binaryMessenger used to communicate with Dart over asynchronous messages
* @param instanceManager maintains instances stored to communicate with attached Dart objects
*/
public ContextHostApiImpl(
@NonNull PowerManagerFlutterApiImpl powerManagerFlutterApi,
@NonNull BinaryMessenger binaryMessenger,
@NonNull InstanceManager instanceManager
) {
this.powerManagerFlutterApi = powerManagerFlutterApi;
this.binaryMessenger = binaryMessenger;
this.instanceManager = instanceManager;
}
Expand Down Expand Up @@ -74,4 +79,22 @@ public void startActivity(

return context.getPackageName();
}

@Override
@NonNull public String getSystemService(
@NonNull String instanceId,
@NonNull String name
) {
final UUID instanceUuid = UUID.fromString(instanceId);
final Context context = instanceManager.getInstance(instanceUuid);

final Object systemService = context.getSystemService(name);

if (systemService instanceof PowerManager) {
powerManagerFlutterApi.create((PowerManager) systemService);
}

final UUID systemServiceUuid = instanceManager.getIdentifierForStrongReference(systemService);
return systemServiceUuid.toString();
}
}
Loading

0 comments on commit b1bf5fc

Please sign in to comment.