Apply active profile if user enables system profiles
Ensures the active profile is applied when user enables system profiles. The profile will be automatically applied upon activation if: - No triggers are defined (i.e the profile does not respond to events) - A ON_CONNECT WiFi/BT trigger is defined and the device is currently connected to such network/device If system profiles are already enabled and a WiFi/BT event is fired, apply the profile overrides Change-Id: I362893151e52d35636d2ac05ab35e986d1f7237e TICKET: CYNGNOS-3104
This commit is contained in:
parent
052af0a76d
commit
50571ba8bb
@ -16,11 +16,17 @@
|
|||||||
|
|
||||||
package org.cyanogenmod.platform.internal;
|
package org.cyanogenmod.platform.internal;
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
|
import android.bluetooth.BluetoothDevice;
|
||||||
import android.content.ComponentName;
|
import android.content.ComponentName;
|
||||||
import android.content.ServiceConnection;
|
import android.content.ServiceConnection;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
|
import android.net.wifi.WifiInfo;
|
||||||
|
import android.net.wifi.WifiManager;
|
||||||
|
import android.net.wifi.WifiSsid;
|
||||||
import android.os.Message;
|
import android.os.Message;
|
||||||
|
import android.util.ArraySet;
|
||||||
import com.android.internal.policy.IKeyguardService;
|
import com.android.internal.policy.IKeyguardService;
|
||||||
import cyanogenmod.providers.CMSettings;
|
import cyanogenmod.providers.CMSettings;
|
||||||
import org.xmlpull.v1.XmlPullParser;
|
import org.xmlpull.v1.XmlPullParser;
|
||||||
@ -58,7 +64,9 @@ import java.io.FileWriter;
|
|||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/** @hide */
|
/** @hide */
|
||||||
@ -144,13 +152,69 @@ public class ProfileManagerService extends CMSystemService {
|
|||||||
|
|
||||||
mContext.sendBroadcastAsUser(newState, UserHandle.ALL);
|
mContext.sendBroadcastAsUser(newState, UserHandle.ALL);
|
||||||
|
|
||||||
|
if (ProfileManager.PROFILES_STATE_ENABLED == msg.arg1) {
|
||||||
|
maybeApplyActiveProfile();
|
||||||
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
private void maybeApplyActiveProfile() {
|
||||||
|
final List<Profile.ProfileTrigger> wiFiTriggers
|
||||||
|
= mActiveProfile.getTriggersFromType(Profile.TriggerType.WIFI);
|
||||||
|
final List<Profile.ProfileTrigger> blueToothTriggers
|
||||||
|
= mActiveProfile.getTriggersFromType(Profile.TriggerType.BLUETOOTH);
|
||||||
|
|
||||||
|
boolean selectProfile = false;
|
||||||
|
if (wiFiTriggers.size() == 0 && blueToothTriggers.size() == 0) {
|
||||||
|
selectProfile = true;
|
||||||
|
} else {
|
||||||
|
final String activeSSID = getActiveSSID();
|
||||||
|
if (activeSSID != null) {
|
||||||
|
for (Profile.ProfileTrigger trigger : wiFiTriggers) {
|
||||||
|
if (trigger.getState() == Profile.TriggerState.ON_CONNECT
|
||||||
|
&& trigger.getId().equals(activeSSID)) {
|
||||||
|
selectProfile = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!selectProfile && blueToothTriggers.size() > 0) {
|
||||||
|
final BluetoothAdapter mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
|
||||||
|
final Set<BluetoothDevice> pairedDevices = mBluetoothAdapter.getBondedDevices();
|
||||||
|
final Set<String> connectedBTDevices = new ArraySet<>();
|
||||||
|
for (BluetoothDevice device : pairedDevices) {
|
||||||
|
if (device.isConnected()) connectedBTDevices.add(device.getAddress());
|
||||||
|
}
|
||||||
|
for (Profile.ProfileTrigger trigger : blueToothTriggers) {
|
||||||
|
if (connectedBTDevices.contains(trigger.getId())
|
||||||
|
&& trigger.getState() == Profile.TriggerState.ON_CONNECT) {
|
||||||
|
selectProfile = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (selectProfile) mActiveProfile.doSelect(mContext, mKeyguardService);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getActiveSSID() {
|
||||||
|
final WifiManager wifiManager
|
||||||
|
= (WifiManager) mContext.getSystemService(Context.WIFI_SERVICE);
|
||||||
|
final WifiInfo wifiinfo = wifiManager.getConnectionInfo();
|
||||||
|
if (wifiinfo == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
final WifiSsid ssid = wifiinfo.getWifiSsid();
|
||||||
|
if (ssid == null) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return ssid.toString();
|
||||||
|
}
|
||||||
|
|
||||||
private class ProfilesObserver extends ContentObserver {
|
private class ProfilesObserver extends ContentObserver {
|
||||||
public ProfilesObserver(Handler handler) {
|
public ProfilesObserver(Handler handler) {
|
||||||
super(handler);
|
super(handler);
|
||||||
|
@ -16,13 +16,13 @@
|
|||||||
|
|
||||||
package org.cyanogenmod.platform.internal;
|
package org.cyanogenmod.platform.internal;
|
||||||
|
|
||||||
|
import android.bluetooth.BluetoothAdapter;
|
||||||
import android.bluetooth.BluetoothDevice;
|
import android.bluetooth.BluetoothDevice;
|
||||||
import android.content.BroadcastReceiver;
|
import android.content.BroadcastReceiver;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.IntentFilter;
|
import android.content.IntentFilter;
|
||||||
import android.database.ContentObserver;
|
import android.database.ContentObserver;
|
||||||
import android.net.NetworkInfo;
|
|
||||||
import android.net.wifi.WifiInfo;
|
import android.net.wifi.WifiInfo;
|
||||||
import android.net.wifi.WifiManager;
|
import android.net.wifi.WifiManager;
|
||||||
import android.net.wifi.WifiSsid;
|
import android.net.wifi.WifiSsid;
|
||||||
@ -30,11 +30,14 @@ import android.os.Bundle;
|
|||||||
import android.os.Handler;
|
import android.os.Handler;
|
||||||
import android.os.UserHandle;
|
import android.os.UserHandle;
|
||||||
import android.text.TextUtils;
|
import android.text.TextUtils;
|
||||||
|
import android.util.ArraySet;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import cyanogenmod.app.Profile;
|
import cyanogenmod.app.Profile;
|
||||||
|
import cyanogenmod.app.Profile.ProfileTrigger;
|
||||||
import cyanogenmod.app.ProfileManager;
|
import cyanogenmod.app.ProfileManager;
|
||||||
import cyanogenmod.providers.CMSettings;
|
import cyanogenmod.providers.CMSettings;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -163,14 +166,23 @@ public class ProfileTriggerHelper extends BroadcastReceiver {
|
|||||||
|
|
||||||
if (!newProfileSelected) {
|
if (!newProfileSelected) {
|
||||||
//Does the active profile actually cares about this event?
|
//Does the active profile actually cares about this event?
|
||||||
for (Profile.ProfileTrigger trigger : activeProfile.getTriggersFromType(type)) {
|
for (ProfileTrigger trigger : activeProfile.getTriggersFromType(type)) {
|
||||||
if (trigger.getId().equals(id)) {
|
final String triggerID = trigger.getId();
|
||||||
|
if (triggerID.equals(id)) {
|
||||||
Intent intent
|
Intent intent
|
||||||
= new Intent(ProfileManager.INTENT_ACTION_PROFILE_TRIGGER_STATE_CHANGED);
|
= new Intent(ProfileManager.INTENT_ACTION_PROFILE_TRIGGER_STATE_CHANGED);
|
||||||
intent.putExtra(ProfileManager.EXTRA_TRIGGER_ID, id);
|
intent.putExtra(ProfileManager.EXTRA_TRIGGER_ID, id);
|
||||||
intent.putExtra(ProfileManager.EXTRA_TRIGGER_TYPE, type);
|
intent.putExtra(ProfileManager.EXTRA_TRIGGER_TYPE, type);
|
||||||
intent.putExtra(ProfileManager.EXTRA_TRIGGER_STATE, newState);
|
intent.putExtra(ProfileManager.EXTRA_TRIGGER_STATE, newState);
|
||||||
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
|
mContext.sendBroadcastAsUser(intent, UserHandle.ALL);
|
||||||
|
|
||||||
|
final int triggerState = trigger.getState();
|
||||||
|
if ((newState == Profile.TriggerState.ON_CONNECT
|
||||||
|
&& triggerState == Profile.TriggerState.ON_CONNECT) ||
|
||||||
|
(newState == Profile.TriggerState.ON_DISCONNECT
|
||||||
|
&& triggerState == Profile.TriggerState.ON_DISCONNECT)) {
|
||||||
|
activeProfile.doSelect(mContext, null);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user