Loading core/java/android/app/Profile.java +90 −1 Original line number Diff line number Diff line Loading @@ -17,10 +17,12 @@ package android.app; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.os.Parcel; import android.os.ParcelUuid; import android.os.Parcelable; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; Loading Loading @@ -64,8 +66,12 @@ public final class Profile implements Parcelable, Comparable { private Map<Integer, ConnectionSettings> connections = new HashMap<Integer, ConnectionSettings>(); private Map<Integer, VibratorSettings> vibrators = new HashMap<Integer, VibratorSettings>(); private int mScreenLockMode = LockMode.DEFAULT; private int mAirplaneMode = AirplaneMode.DEFAULT; /** @hide */ public static class LockMode { public static final int DEFAULT = 0; Loading @@ -73,6 +79,13 @@ public final class Profile implements Parcelable, Comparable { public static final int DISABLE = 2; } /** @hide */ public static class AirplaneMode { public static final int DEFAULT = 0; public static final int ENABLE = 1; public static final int DISABLE = 2; } /** @hide */ public static final Parcelable.Creator<Profile> CREATOR = new Parcelable.Creator<Profile>() { public Profile createFromParcel(Parcel in) { Loading Loading @@ -168,7 +181,9 @@ public final class Profile implements Parcelable, Comparable { streams.values().toArray(new Parcelable[streams.size()]), flags); dest.writeParcelableArray( connections.values().toArray(new Parcelable[connections.size()]), flags); dest.writeParcelableArray(vibrators.values().toArray(new Parcelable[vibrators.size()]), flags); dest.writeInt(mScreenLockMode); dest.writeInt(mAirplaneMode); } /** @hide */ Loading @@ -194,7 +209,12 @@ public final class Profile implements Parcelable, Comparable { ConnectionSettings connection = (ConnectionSettings) parcel; connections.put(connection.getConnectionId(), connection); } for (Parcelable parcel : in.readParcelableArray(null)) { VibratorSettings vibrator = (VibratorSettings) parcel; vibrators.put(vibrator.getVibratorId(), vibrator); } mScreenLockMode = in.readInt(); mAirplaneMode = in.readInt(); } public String getName() { Loading Loading @@ -254,6 +274,19 @@ public final class Profile implements Parcelable, Comparable { mDirty = true; } public int getAirplaneMode() { return mAirplaneMode; } public void setAirplaneMode(int airplaneMode) { if (airplaneMode < AirplaneMode.DEFAULT || airplaneMode > AirplaneMode.DISABLE) { mAirplaneMode = AirplaneMode.DEFAULT; } else { mAirplaneMode = airplaneMode; } mDirty = true; } /** @hide */ public boolean isDirty() { if (mDirty) { Loading @@ -274,6 +307,11 @@ public final class Profile implements Parcelable, Comparable { return true; } } for (VibratorSettings vibrator : vibrators.values()) { if (vibrator.isDirty()) { return true; } } return false; } Loading Loading @@ -301,7 +339,11 @@ public final class Profile implements Parcelable, Comparable { builder.append("<screen-lock-mode>"); builder.append(mScreenLockMode); builder.append("</screen-lock-mode>"); builder.append("</screen-lock-mode>\n"); builder.append("<airplane-mode>"); builder.append(mAirplaneMode); builder.append("</airplane-mode>\n"); for (ProfileGroup pGroup : profileGroups.values()) { pGroup.getXmlString(builder, context); Loading @@ -312,6 +354,9 @@ public final class Profile implements Parcelable, Comparable { for (ConnectionSettings cs : connections.values()) { cs.getXmlString(builder, context); } for (VibratorSettings vs : vibrators.values()) { vs.getXmlString(builder, context); } builder.append("</profile>\n"); mDirty = false; } Loading Loading @@ -367,6 +412,9 @@ public final class Profile implements Parcelable, Comparable { if (name.equals("screen-lock-mode")) { profile.setScreenLockMode(Integer.valueOf(xpp.nextText())); } if (name.equals("airplane-mode")) { profile.setAirplaneMode(Integer.valueOf(xpp.nextText())); } if (name.equals("profileGroup")) { ProfileGroup pg = ProfileGroup.fromXml(xpp, context); profile.addProfileGroup(pg); Loading @@ -379,6 +427,10 @@ public final class Profile implements Parcelable, Comparable { ConnectionSettings cs = ConnectionSettings.fromXml(xpp, context); profile.connections.put(cs.getConnectionId(), cs); } if (name.equals("vibratorDescriptor")) { VibratorSettings vs = VibratorSettings.fromXml(xpp, context); profile.setVibratorSettings(vs); } } event = xpp.next(); } Loading @@ -404,6 +456,27 @@ public final class Profile implements Parcelable, Comparable { cs.processOverride(context); } } // Set vibrators for (VibratorSettings vs : vibrators.values()) { if (vs.isOverride()) { vs.processOverride(context); } } // Set airplane mode doSelectAirplaneMode(context); } private void doSelectAirplaneMode(Context context) { if (getAirplaneMode() != AirplaneMode.DEFAULT) { int current = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0); int target = getAirplaneMode(); if (current == 1 && target == AirplaneMode.DISABLE || current == 0 && target == AirplaneMode.ENABLE) { Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1 - current); Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", target != AirplaneMode.DISABLE); context.sendBroadcast(intent); } } } /** @hide */ Loading @@ -422,6 +495,22 @@ public final class Profile implements Parcelable, Comparable { return streams.values(); } /** @hide */ public VibratorSettings getSettingsForVibrator(int vibratorId) { return vibrators.get(vibratorId); } /** @hide */ public void setVibratorSettings(VibratorSettings descriptor) { vibrators.put(descriptor.getVibratorId(), descriptor); mDirty = true; } /** @hide */ public Collection<VibratorSettings> getVibratorSettings() { return vibrators.values(); } /** @hide */ public ConnectionSettings getSettingsForConnection(int connectionId){ return connections.get(connectionId); Loading core/java/android/app/VibratorSettings.java 0 → 100644 +150 −0 Original line number Diff line number Diff line package android.app; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.Context; import android.media.AudioManager; import android.os.Parcel; import android.os.Parcelable; import java.io.IOException; /** @hide */ public final class VibratorSettings implements Parcelable{ public static final int OFF = 0; public static final int SILENT = 1; public static final int ON = 2; private int mVibratorId; private int mValue; private boolean mOverride; private boolean mDirty; /** @hide */ public static final Parcelable.Creator<VibratorSettings> CREATOR = new Parcelable.Creator<VibratorSettings>() { public VibratorSettings createFromParcel(Parcel in) { return new VibratorSettings(in); } @Override public VibratorSettings[] newArray(int size) { return new VibratorSettings[size]; } }; public VibratorSettings(Parcel parcel) { readFromParcel(parcel); } public VibratorSettings(int vibratorId) { this(vibratorId, 0, false); } public VibratorSettings(int vibratorId, int value, boolean override) { mVibratorId = vibratorId; mValue = value; mOverride = override; mDirty = false; } public int getVibratorId() { return mVibratorId; } public int getValue() { return mValue; } public void setValue(int value) { mValue = value; mDirty = true; } public void setOverride(boolean override) { mOverride = override; mDirty = true; } public boolean isOverride() { return mOverride; } /** @hide */ public boolean isDirty() { return mDirty; } /** @hide */ public static VibratorSettings fromXml(XmlPullParser xpp, Context context) throws XmlPullParserException, IOException { int event = xpp.next(); VibratorSettings vibratorDescriptor = new VibratorSettings(0); while (event != XmlPullParser.END_TAG || !xpp.getName().equals("vibratorDescriptor")) { if (event == XmlPullParser.START_TAG) { String name = xpp.getName(); if (name.equals("vibratorId")) { vibratorDescriptor.mVibratorId = Integer.parseInt(xpp.nextText()); } else if (name.equals("value")) { vibratorDescriptor.mValue = Integer.parseInt(xpp.nextText()); } else if (name.equals("override")) { vibratorDescriptor.mOverride = Boolean.parseBoolean(xpp.nextText()); } } event = xpp.next(); } return vibratorDescriptor; } /** @hide */ public void getXmlString(StringBuilder builder, Context context) { builder.append("<vibratorDescriptor>\n<vibratorId>"); builder.append(mVibratorId); builder.append("</vibratorId>\n<value>"); builder.append(mValue); builder.append("</value>\n<override>"); builder.append(mOverride); builder.append("</override>\n</vibratorDescriptor>\n"); mDirty = false; } @Override public int describeContents() { return 0; } /** @hide */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mVibratorId); dest.writeInt(mOverride ? 1 : 0); dest.writeInt(mValue); dest.writeInt(mDirty ? 1 : 0); } /** @hide */ public void readFromParcel(Parcel in) { mVibratorId = in.readInt(); mOverride = in.readInt() != 0; mValue = in.readInt(); mDirty = in.readInt() != 0; } /** @hide */ public void processOverride(Context context) { AudioManager amgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); switch (mValue) { case OFF: amgr.setVibrateSetting(mVibratorId, AudioManager.VIBRATE_SETTING_OFF); break; case SILENT: amgr.setVibrateSetting(mVibratorId, AudioManager.VIBRATE_SETTING_ONLY_SILENT); default: amgr.setVibrateSetting(mVibratorId, AudioManager.VIBRATE_SETTING_ON); break; } } } Loading
core/java/android/app/Profile.java +90 −1 Original line number Diff line number Diff line Loading @@ -17,10 +17,12 @@ package android.app; import android.content.Context; import android.content.Intent; import android.media.AudioManager; import android.os.Parcel; import android.os.ParcelUuid; import android.os.Parcelable; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; Loading Loading @@ -64,8 +66,12 @@ public final class Profile implements Parcelable, Comparable { private Map<Integer, ConnectionSettings> connections = new HashMap<Integer, ConnectionSettings>(); private Map<Integer, VibratorSettings> vibrators = new HashMap<Integer, VibratorSettings>(); private int mScreenLockMode = LockMode.DEFAULT; private int mAirplaneMode = AirplaneMode.DEFAULT; /** @hide */ public static class LockMode { public static final int DEFAULT = 0; Loading @@ -73,6 +79,13 @@ public final class Profile implements Parcelable, Comparable { public static final int DISABLE = 2; } /** @hide */ public static class AirplaneMode { public static final int DEFAULT = 0; public static final int ENABLE = 1; public static final int DISABLE = 2; } /** @hide */ public static final Parcelable.Creator<Profile> CREATOR = new Parcelable.Creator<Profile>() { public Profile createFromParcel(Parcel in) { Loading Loading @@ -168,7 +181,9 @@ public final class Profile implements Parcelable, Comparable { streams.values().toArray(new Parcelable[streams.size()]), flags); dest.writeParcelableArray( connections.values().toArray(new Parcelable[connections.size()]), flags); dest.writeParcelableArray(vibrators.values().toArray(new Parcelable[vibrators.size()]), flags); dest.writeInt(mScreenLockMode); dest.writeInt(mAirplaneMode); } /** @hide */ Loading @@ -194,7 +209,12 @@ public final class Profile implements Parcelable, Comparable { ConnectionSettings connection = (ConnectionSettings) parcel; connections.put(connection.getConnectionId(), connection); } for (Parcelable parcel : in.readParcelableArray(null)) { VibratorSettings vibrator = (VibratorSettings) parcel; vibrators.put(vibrator.getVibratorId(), vibrator); } mScreenLockMode = in.readInt(); mAirplaneMode = in.readInt(); } public String getName() { Loading Loading @@ -254,6 +274,19 @@ public final class Profile implements Parcelable, Comparable { mDirty = true; } public int getAirplaneMode() { return mAirplaneMode; } public void setAirplaneMode(int airplaneMode) { if (airplaneMode < AirplaneMode.DEFAULT || airplaneMode > AirplaneMode.DISABLE) { mAirplaneMode = AirplaneMode.DEFAULT; } else { mAirplaneMode = airplaneMode; } mDirty = true; } /** @hide */ public boolean isDirty() { if (mDirty) { Loading @@ -274,6 +307,11 @@ public final class Profile implements Parcelable, Comparable { return true; } } for (VibratorSettings vibrator : vibrators.values()) { if (vibrator.isDirty()) { return true; } } return false; } Loading Loading @@ -301,7 +339,11 @@ public final class Profile implements Parcelable, Comparable { builder.append("<screen-lock-mode>"); builder.append(mScreenLockMode); builder.append("</screen-lock-mode>"); builder.append("</screen-lock-mode>\n"); builder.append("<airplane-mode>"); builder.append(mAirplaneMode); builder.append("</airplane-mode>\n"); for (ProfileGroup pGroup : profileGroups.values()) { pGroup.getXmlString(builder, context); Loading @@ -312,6 +354,9 @@ public final class Profile implements Parcelable, Comparable { for (ConnectionSettings cs : connections.values()) { cs.getXmlString(builder, context); } for (VibratorSettings vs : vibrators.values()) { vs.getXmlString(builder, context); } builder.append("</profile>\n"); mDirty = false; } Loading Loading @@ -367,6 +412,9 @@ public final class Profile implements Parcelable, Comparable { if (name.equals("screen-lock-mode")) { profile.setScreenLockMode(Integer.valueOf(xpp.nextText())); } if (name.equals("airplane-mode")) { profile.setAirplaneMode(Integer.valueOf(xpp.nextText())); } if (name.equals("profileGroup")) { ProfileGroup pg = ProfileGroup.fromXml(xpp, context); profile.addProfileGroup(pg); Loading @@ -379,6 +427,10 @@ public final class Profile implements Parcelable, Comparable { ConnectionSettings cs = ConnectionSettings.fromXml(xpp, context); profile.connections.put(cs.getConnectionId(), cs); } if (name.equals("vibratorDescriptor")) { VibratorSettings vs = VibratorSettings.fromXml(xpp, context); profile.setVibratorSettings(vs); } } event = xpp.next(); } Loading @@ -404,6 +456,27 @@ public final class Profile implements Parcelable, Comparable { cs.processOverride(context); } } // Set vibrators for (VibratorSettings vs : vibrators.values()) { if (vs.isOverride()) { vs.processOverride(context); } } // Set airplane mode doSelectAirplaneMode(context); } private void doSelectAirplaneMode(Context context) { if (getAirplaneMode() != AirplaneMode.DEFAULT) { int current = Settings.System.getInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 0); int target = getAirplaneMode(); if (current == 1 && target == AirplaneMode.DISABLE || current == 0 && target == AirplaneMode.ENABLE) { Settings.System.putInt(context.getContentResolver(), Settings.System.AIRPLANE_MODE_ON, 1 - current); Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED); intent.putExtra("state", target != AirplaneMode.DISABLE); context.sendBroadcast(intent); } } } /** @hide */ Loading @@ -422,6 +495,22 @@ public final class Profile implements Parcelable, Comparable { return streams.values(); } /** @hide */ public VibratorSettings getSettingsForVibrator(int vibratorId) { return vibrators.get(vibratorId); } /** @hide */ public void setVibratorSettings(VibratorSettings descriptor) { vibrators.put(descriptor.getVibratorId(), descriptor); mDirty = true; } /** @hide */ public Collection<VibratorSettings> getVibratorSettings() { return vibrators.values(); } /** @hide */ public ConnectionSettings getSettingsForConnection(int connectionId){ return connections.get(connectionId); Loading
core/java/android/app/VibratorSettings.java 0 → 100644 +150 −0 Original line number Diff line number Diff line package android.app; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import android.content.Context; import android.media.AudioManager; import android.os.Parcel; import android.os.Parcelable; import java.io.IOException; /** @hide */ public final class VibratorSettings implements Parcelable{ public static final int OFF = 0; public static final int SILENT = 1; public static final int ON = 2; private int mVibratorId; private int mValue; private boolean mOverride; private boolean mDirty; /** @hide */ public static final Parcelable.Creator<VibratorSettings> CREATOR = new Parcelable.Creator<VibratorSettings>() { public VibratorSettings createFromParcel(Parcel in) { return new VibratorSettings(in); } @Override public VibratorSettings[] newArray(int size) { return new VibratorSettings[size]; } }; public VibratorSettings(Parcel parcel) { readFromParcel(parcel); } public VibratorSettings(int vibratorId) { this(vibratorId, 0, false); } public VibratorSettings(int vibratorId, int value, boolean override) { mVibratorId = vibratorId; mValue = value; mOverride = override; mDirty = false; } public int getVibratorId() { return mVibratorId; } public int getValue() { return mValue; } public void setValue(int value) { mValue = value; mDirty = true; } public void setOverride(boolean override) { mOverride = override; mDirty = true; } public boolean isOverride() { return mOverride; } /** @hide */ public boolean isDirty() { return mDirty; } /** @hide */ public static VibratorSettings fromXml(XmlPullParser xpp, Context context) throws XmlPullParserException, IOException { int event = xpp.next(); VibratorSettings vibratorDescriptor = new VibratorSettings(0); while (event != XmlPullParser.END_TAG || !xpp.getName().equals("vibratorDescriptor")) { if (event == XmlPullParser.START_TAG) { String name = xpp.getName(); if (name.equals("vibratorId")) { vibratorDescriptor.mVibratorId = Integer.parseInt(xpp.nextText()); } else if (name.equals("value")) { vibratorDescriptor.mValue = Integer.parseInt(xpp.nextText()); } else if (name.equals("override")) { vibratorDescriptor.mOverride = Boolean.parseBoolean(xpp.nextText()); } } event = xpp.next(); } return vibratorDescriptor; } /** @hide */ public void getXmlString(StringBuilder builder, Context context) { builder.append("<vibratorDescriptor>\n<vibratorId>"); builder.append(mVibratorId); builder.append("</vibratorId>\n<value>"); builder.append(mValue); builder.append("</value>\n<override>"); builder.append(mOverride); builder.append("</override>\n</vibratorDescriptor>\n"); mDirty = false; } @Override public int describeContents() { return 0; } /** @hide */ @Override public void writeToParcel(Parcel dest, int flags) { dest.writeInt(mVibratorId); dest.writeInt(mOverride ? 1 : 0); dest.writeInt(mValue); dest.writeInt(mDirty ? 1 : 0); } /** @hide */ public void readFromParcel(Parcel in) { mVibratorId = in.readInt(); mOverride = in.readInt() != 0; mValue = in.readInt(); mDirty = in.readInt() != 0; } /** @hide */ public void processOverride(Context context) { AudioManager amgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); switch (mValue) { case OFF: amgr.setVibrateSetting(mVibratorId, AudioManager.VIBRATE_SETTING_OFF); break; case SILENT: amgr.setVibrateSetting(mVibratorId, AudioManager.VIBRATE_SETTING_ONLY_SILENT); default: amgr.setVibrateSetting(mVibratorId, AudioManager.VIBRATE_SETTING_ON); break; } } }