Restructure BackgroundModeExt as an internal cordova plugin

This commit is contained in:
Sebastián Katzer 2019-02-11 15:21:06 +01:00
parent 8fbf210e14
commit 2c4df332d3
7 changed files with 111 additions and 138 deletions

View File

@ -59,9 +59,11 @@
<!-- android --> <!-- android -->
<platform name="android"> <platform name="android">
<config-file target="res/xml/config.xml" parent="/*"> <config-file target="res/xml/config.xml" parent="/*">
<feature name="BackgroundMode" > <feature name="BackgroundMode">
<param name="android-package" <param name="android-package" value="de.appplant.cordova.plugin.background.BackgroundMode"/>
value="de.appplant.cordova.plugin.background.BackgroundMode"/> </feature>
<feature name="BackgroundModeExt">
<param name="android-package" value="de.appplant.cordova.plugin.background.BackgroundModeExt"/>
</feature> </feature>
</config-file> </config-file>
@ -82,7 +84,7 @@
target-dir="src/de/appplant/cordova/plugin/background" /> target-dir="src/de/appplant/cordova/plugin/background" />
<source-file <source-file
src="src/android/BackgroundExt.java" src="src/android/BackgroundModeExt.java"
target-dir="src/de/appplant/cordova/plugin/background" /> target-dir="src/de/appplant/cordova/plugin/background" />
<source-file <source-file

View File

@ -1,22 +1,22 @@
/* /*
Copyright 2013-2017 appPlant GmbH Copyright 2013 Sebastián Katzer
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
distributed with this work for additional information distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the KIND, either express or implied. See the License for the
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
*/ */
package de.appplant.cordova.plugin.background; package de.appplant.cordova.plugin.background;
@ -35,7 +35,7 @@ import org.json.JSONObject;
import de.appplant.cordova.plugin.background.ForegroundService.ForegroundBinder; import de.appplant.cordova.plugin.background.ForegroundService.ForegroundBinder;
import static android.content.Context.BIND_AUTO_CREATE; import static android.content.Context.BIND_AUTO_CREATE;
import static de.appplant.cordova.plugin.background.BackgroundExt.clearKeyguardFlags; import static de.appplant.cordova.plugin.background.BackgroundModeExt.clearKeyguardFlags;
public class BackgroundMode extends CordovaPlugin { public class BackgroundMode extends CordovaPlugin {
@ -104,17 +104,6 @@ public class BackgroundMode extends CordovaPlugin {
case "disable": case "disable":
disableMode(); disableMode();
break; break;
case "webviewoptimizations":
case "batteryoptimizations":
case "appstart":
case "background":
case "foreground":
case "tasklist":
case "dimmed":
case "wakeup":
case "unlock":
BackgroundExt.execute(this, action, args, callback);
break;
default: default:
validAction = false; validAction = false;
} }

View File

@ -1,22 +1,22 @@
/* /*
Copyright 2013-2017 appPlant GmbH Copyright 2013 Sebastián Katzer
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
distributed with this work for additional information distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the KIND, either express or implied. See the License for the
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
*/ */
package de.appplant.cordova.plugin.background; package de.appplant.cordova.plugin.background;
@ -37,9 +37,7 @@ import android.os.PowerManager;
import android.view.View; import android.view.View;
import org.apache.cordova.CallbackContext; import org.apache.cordova.CallbackContext;
import org.apache.cordova.CordovaInterface;
import org.apache.cordova.CordovaPlugin; import org.apache.cordova.CordovaPlugin;
import org.apache.cordova.CordovaWebView;
import org.apache.cordova.PluginResult; import org.apache.cordova.PluginResult;
import org.apache.cordova.PluginResult.Status; import org.apache.cordova.PluginResult.Status;
import org.json.JSONArray; import org.json.JSONArray;
@ -66,7 +64,7 @@ import static android.view.WindowManager.LayoutParams.FLAG_TURN_SCREEN_ON;
* Implements extended functions around the main purpose * Implements extended functions around the main purpose
* of infinite execution in the background. * of infinite execution in the background.
*/ */
class BackgroundExt { public class BackgroundModeExt extends CordovaPlugin {
// List of intents for various manufactures to adjust the power saver mode. // List of intents for various manufactures to adjust the power saver mode.
private static final List<Intent> APPSTART_INTENTS = Arrays.asList( private static final List<Intent> APPSTART_INTENTS = Arrays.asList(
@ -91,40 +89,9 @@ class BackgroundExt {
new Intent().setComponent(new ComponentName("com.zui.safecenter", "com.lenovo.safecenter.MainTab.LeSafeMainActivity")) new Intent().setComponent(new ComponentName("com.zui.safecenter", "com.lenovo.safecenter.MainTab.LeSafeMainActivity"))
); );
// Reference to the cordova interface passed by the plugin
private final CordovaInterface cordova;
// Reference to the cordova web view passed by the plugin
private final CordovaWebView webView;
// To keep the device awake // To keep the device awake
private PowerManager.WakeLock wakeLock; private PowerManager.WakeLock wakeLock;
/**
* Initialize the extension to perform non-background related tasks.
*
* @param plugin The cordova plugin.
*/
private BackgroundExt (CordovaPlugin plugin)
{
this.cordova = plugin.cordova;
this.webView = plugin.webView;
}
/**
* Executes the request within a thread.
*
* @param action The action to execute.
* @param args The exec() arguments.
* @param callback The callback context used when
* calling back into JavaScript.
*/
static void execute (CordovaPlugin plugin, String action, JSONArray args,
CallbackContext callback)
{
plugin.cordova.getThreadPool().execute(() -> new BackgroundExt(plugin).execute(action, args, callback));
}
/** /**
* Executes the request. * Executes the request.
* *
@ -132,16 +99,21 @@ class BackgroundExt {
* @param args The exec() arguments. * @param args The exec() arguments.
* @param callback The callback context used when * @param callback The callback context used when
* calling back into JavaScript. * calling back into JavaScript.
*
* @return Returning false results in a "MethodNotFound" error.
*/ */
private void execute (String action, JSONArray args, @Override
CallbackContext callback) public boolean execute (String action, JSONArray args,
CallbackContext callback)
{ {
boolean validAction = true;
switch (action) switch (action)
{ {
case "batteryoptimizations": case "battery":
disableBatteryOptimizations(); disableBatteryOptimizations();
break; break;
case "webviewoptimizations": case "webview":
disableWebViewOptimizations(); disableWebViewOptimizations();
break; break;
case "appstart": case "appstart":
@ -166,7 +138,17 @@ class BackgroundExt {
wakeup(); wakeup();
unlock(); unlock();
break; break;
default:
validAction = false;
} }
if (validAction) {
callback.success();
} else {
callback.error("Invalid action: " + action);
}
return validAction;
} }
/** /**

View File

@ -1,22 +1,22 @@
/* /*
Copyright 2013-2017 appPlant GmbH Copyright 2013 Sebastián Katzer
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
distributed with this work for additional information distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the KIND, either express or implied. See the License for the
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
*/ */
package de.appplant.cordova.plugin.background; package de.appplant.cordova.plugin.background;

View File

@ -1,22 +1,22 @@
/* /*
Copyright 2013-2017 appPlant GmbH Copyright 2013 Sebastián Katzer
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
distributed with this work for additional information distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the KIND, either express or implied. See the License for the
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
*/ */
/** /**

View File

@ -1,22 +1,22 @@
/* /*
Copyright 2013-2017 appPlant GmbH Copyright 2013 Sebastián Katzer
Licensed to the Apache Software Foundation (ASF) under one Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file or more contributor license agreements. See the NOTICE file
distributed with this work for additional information distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance "License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0 http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the KIND, either express or implied. See the License for the
specific language governing permissions and limitations specific language governing permissions and limitations
under the License. under the License.
*/ */
var plugin = cordova.plugins.backgroundMode; var plugin = cordova.plugins.backgroundMode;

View File

@ -160,7 +160,7 @@ exports.disableWebViewOptimizations = function()
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'webviewoptimizations', []); cordova.exec(null, null, 'BackgroundModeExt', 'webview', []);
} }
}; };
@ -173,7 +173,7 @@ exports.disableBatteryOptimizations = function()
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'batteryoptimizations', []); cordova.exec(null, null, 'BackgroundModeExt', 'battery', []);
} }
}; };
@ -190,7 +190,7 @@ exports.openAppStartSettings = function (options)
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'appstart', [options]); cordova.exec(null, null, 'BackgroundModeExt', 'appstart', [options]);
} }
}; };
@ -203,7 +203,7 @@ exports.moveToBackground = function()
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'background', []); cordova.exec(null, null, 'BackgroundModeExt', 'background', []);
} }
}; };
@ -216,7 +216,7 @@ exports.moveToForeground = function()
{ {
if (this.isActive() && this._isAndroid) if (this.isActive() && this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'foreground', []); cordova.exec(null, null, 'BackgroundModeExt', 'foreground', []);
} }
}; };
@ -229,7 +229,7 @@ exports.excludeFromTaskList = function()
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'tasklist', []); cordova.exec(null, null, 'BackgroundModeExt', 'tasklist', []);
} }
}; };
@ -257,7 +257,7 @@ exports.isScreenOff = function (fn)
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(fn, null, 'BackgroundMode', 'dimmed', []); cordova.exec(fn, null, 'BackgroundModeExt', 'dimmed', []);
} }
else else
{ {
@ -274,7 +274,7 @@ exports.wakeUp = function()
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'wakeup', []); cordova.exec(null, null, 'BackgroundModeExt', 'wakeup', []);
} }
}; };
@ -287,7 +287,7 @@ exports.unlock = function()
{ {
if (this._isAndroid) if (this._isAndroid)
{ {
cordova.exec(null, null, 'BackgroundMode', 'unlock', []); cordova.exec(null, null, 'BackgroundModeExt', 'unlock', []);
} }
}; };