fix locking bag / refuse device admin

This commit is contained in:
Nazar 2019-06-27 19:40:34 +03:00
parent d7dd44fea3
commit 0bbea17f56
8 changed files with 56 additions and 39 deletions

View file

@ -708,6 +708,5 @@ interface IOsmAndAidlInterface {
boolean setCustomization(in CustomizationInfoParams params);
long registerForVoiceRouterMessages(in ANavigationVoiceRouterMessageParams params, IOsmAndAidlCallback callback);
boolean isMapActivityActive();
boolean changeMapActivityKeyguardFlags(in boolean enable);
}

View file

@ -1163,17 +1163,6 @@ public class OsmandAidlService extends Service implements AidlCallbackListener {
return UNKNOWN_API_ERROR;
}
}
@Override
public boolean isMapActivityActive() {
try {
OsmandAidlApi api = getApi("isMapActivityActive");
return api != null && api.isUpdateAllowed();
} catch (Exception e) {
handleException(e);
return false;
}
}
@Override
public boolean changeMapActivityKeyguardFlags(boolean enable) {

View file

@ -3,6 +3,7 @@
package="net.osmand.turnScreenOn">
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.GET_TASKS" />
<application
android:name=".app.TurnScreenApp"
@ -11,8 +12,9 @@
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".OsmandInstallActivity"
android:theme="@style/AppTheme.NoActionBar"></activity>
android:theme="@style/AppTheme.NoActionBar"/>
<activity
android:name=".PluginDescriptionActivity"
android:theme="@style/AppTheme.NoActionBar" />

View file

@ -709,6 +709,5 @@ interface IOsmAndAidlInterface {
boolean setCustomization(in CustomizationInfoParams params);
long registerForVoiceRouterMessages(in ANavigationVoiceRouterMessageParams params, IOsmAndAidlCallback callback);
boolean isMapActivityActive();
boolean changeMapActivityKeyguardFlags(in boolean enable);
}

View file

@ -1,15 +1,23 @@
package net.osmand.turnScreenOn.helpers;
import android.Manifest;
import android.app.ActivityManager;
import android.app.KeyguardManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.graphics.ColorMatrix;
import android.graphics.ColorMatrixColorFilter;
import android.graphics.Paint;
import android.os.Build;
import android.os.PowerManager;
import android.support.v4.content.ContextCompat;
import android.util.TypedValue;
import java.util.List;
import static android.content.Context.ACTIVITY_SERVICE;
import static android.content.Context.POWER_SERVICE;
import static android.util.TypedValue.COMPLEX_UNIT_DIP;
@ -33,12 +41,39 @@ public class AndroidUtils {
public static boolean isScreenOn(Context context) {
PowerManager powerManager = (PowerManager) context.getSystemService(POWER_SERVICE);
return Build.VERSION.SDK_INT>= Build.VERSION_CODES.KITKAT_WATCH&&powerManager.isInteractive()
|| Build.VERSION.SDK_INT< Build.VERSION_CODES.KITKAT_WATCH&&powerManager.isScreenOn();
return Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT_WATCH && powerManager.isInteractive()
|| Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT_WATCH && powerManager.isScreenOn();
}
public static boolean isScreenLocked(Context context) {
KeyguardManager keyguardManager = (KeyguardManager) context.getSystemService(Context.KEYGUARD_SERVICE);
return keyguardManager.inKeyguardRestrictedInputMode();
}
public static boolean isOnForeground(Context ctx, String appPackage) {
if (ContextCompat.checkSelfPermission(ctx, Manifest.permission.GET_TASKS)
== PackageManager.PERMISSION_GRANTED) {
ActivityManager manager = (ActivityManager) ctx.getSystemService(ACTIVITY_SERVICE);
List<ActivityManager.RunningTaskInfo> runningTaskInfo = manager.getRunningTasks(1);
ComponentName componentInfo = runningTaskInfo.get(0).topActivity;
if (componentInfo.getPackageName().equals(appPackage)) {
return true;
}
}
return false;
}
public static boolean isOpened(Context ctx, String appPackage) {
ActivityManager am = (ActivityManager) ctx.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningAppProcessInfo> runningAppProcessInfo = am.getRunningAppProcesses();
for (int i = 0; i < runningAppProcessInfo.size(); i++) {
if (runningAppProcessInfo.get(i).processName.equals(appPackage)) {
return true;
}
}
return false;
}
}

View file

@ -5,6 +5,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.os.PowerManager;
import android.util.Log;
import net.osmand.turnScreenOn.app.TurnScreenApp;
import net.osmand.turnScreenOn.listener.LockObservable;
@ -35,7 +36,9 @@ public class LockHelper implements LockObservable {
private void releaseWakeLocks() {
if (wakeLock != null) {
wakeLock.release();
if (wakeLock.isHeld()) {
wakeLock.release();
}
wakeLock = null;
}
}
@ -44,26 +47,26 @@ public class LockHelper implements LockObservable {
if (readyToLock()) {
notifyOnLock();
releaseWakeLocks();
if (functionEnable && !AndroidUtils.isScreenLocked(app)) {
/*if (functionEnable) {
mDevicePolicyManager.lockNow();
}
}*/
}
}
public void unlock() {
public void unlock(long timeInMills) {
if (readyToUnlock()) {
notifyOnUnlock();
PowerManager pm = (PowerManager) app.getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.FULL_WAKE_LOCK
| PowerManager.ACQUIRE_CAUSES_WAKEUP
| PowerManager.ON_AFTER_RELEASE, "tso:wakelocktag");
wakeLock.acquire();
| PowerManager.ACQUIRE_CAUSES_WAKEUP, "tso:wakelocktag");
wakeLock.acquire(timeInMills);
}
}
public void timedUnlock(long millis) {
Log.d("ttpl", "timedUnlock: try to unlock");
uiHandler.removeCallbacks(lockRunnable);
unlock();
unlock(millis);
uiHandler.postDelayed(lockRunnable, millis);
}
@ -74,6 +77,7 @@ public class LockHelper implements LockObservable {
}
private boolean readyToUnlock() {
releaseWakeLocks();
return wakeLock == null;
}

View file

@ -130,16 +130,6 @@ public class OsmAndAidlHelper implements MessageObservable {
}
}
public boolean isMapActivityActive() {
try {
if (mIOsmAndAidlInterface != null) {
return mIOsmAndAidlInterface.isMapActivityActive();
}
} catch (RemoteException e) {
}
return false;
}
public void changeMapActivityKeyguardFlags(boolean newState) {
try {
if (mIOsmAndAidlInterface != null) {

View file

@ -4,12 +4,10 @@ import net.osmand.turnScreenOn.PluginSettings;
import net.osmand.turnScreenOn.app.TurnScreenApp;
import net.osmand.turnScreenOn.helpers.AndroidUtils;
import net.osmand.turnScreenOn.helpers.LockHelper;
import net.osmand.turnScreenOn.helpers.OsmAndAidlHelper;
public class UnlockMessageListener implements OnMessageListener {
private TurnScreenApp app;
private PluginSettings settings;
private OsmAndAidlHelper osmAndAidlHelper;
private LockHelper lockHelper;
public UnlockMessageListener(TurnScreenApp app) {
@ -17,14 +15,15 @@ public class UnlockMessageListener implements OnMessageListener {
settings = app.getSettings();
lockHelper = app.getLockHelper();
osmAndAidlHelper = app.getOsmAndAidlHelper();
}
@Override
public void onMessageReceive() {
boolean isScreenOn = AndroidUtils.isScreenOn(app);
boolean isScreenLocked = AndroidUtils.isScreenLocked(app);
if ((!isScreenOn || isScreenLocked) && osmAndAidlHelper.isMapActivityActive()) {
boolean isOnForeground = AndroidUtils.isOpened(app, settings.getOsmandVersion().getPath());
if ((!isScreenOn || isScreenLocked) && isOnForeground) {
if (settings != null && lockHelper != null) {
if (settings.isAdminDevicePermissionAvailable()) {
PluginSettings.UnlockTime time = settings.getTime();