Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8339e085 authored by David van Tonder's avatar David van Tonder Committed by Gerrit Code Review
Browse files

Merge "migrate vibrator to silent mode settings (1/2)" into mr1-staging

parents 6cb6a6af 32810a3a
Loading
Loading
Loading
Loading
+20 −40
Original line number Diff line number Diff line
@@ -70,7 +70,7 @@ 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 SilentModeSettings mSilentMode = new SilentModeSettings();

    private int mScreenLockMode = LockMode.DEFAULT;

@@ -190,7 +190,7 @@ 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.writeParcelable(mSilentMode, flags);
        dest.writeInt(mScreenLockMode);
        dest.writeInt(mAirplaneMode);
    }
@@ -222,10 +222,7 @@ 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);
        }
        mSilentMode = (SilentModeSettings) in.readParcelable(null);
        mScreenLockMode = in.readInt();
        mAirplaneMode = in.readInt();
    }
@@ -293,6 +290,15 @@ public final class Profile implements Parcelable, Comparable {
        mDirty = true;
    }

    public SilentModeSettings getSilentMode() {
        return mSilentMode;
    }

    public void setSilentMode(SilentModeSettings descriptor) { // FIXME
        mSilentMode = descriptor;
        mDirty = true;
    }

    public int getScreenLockMode() {
        return mScreenLockMode;
    }
@@ -339,11 +345,6 @@ public final class Profile implements Parcelable, Comparable {
                return true;
            }
        }
        for (VibratorSettings vibrator : vibrators.values()) {
            if (vibrator.isDirty()) {
                return true;
            }
        }
        return false;
    }

@@ -385,6 +386,8 @@ public final class Profile implements Parcelable, Comparable {
        builder.append(mAirplaneMode);
        builder.append("</airplane-mode>\n");

        mSilentMode.getXmlString(builder, context);

        for (ProfileGroup pGroup : profileGroups.values()) {
            pGroup.getXmlString(builder, context);
        }
@@ -394,9 +397,6 @@ 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;
    }
@@ -475,6 +475,10 @@ public final class Profile implements Parcelable, Comparable {
                if (name.equals("profiletype")) {
                    profile.setProfileType(xpp.nextText().equals("toggle") ? TOGGLE_TYPE : CONDITIONAL_TYPE);
                }
                if (name.equals("silentModeDescriptor")) {
                    SilentModeSettings smd = SilentModeSettings.fromXml(xpp, context);
                    profile.setSilentMode(smd);
                }
                if (name.equals("screen-lock-mode")) {
                    profile.setScreenLockMode(Integer.valueOf(xpp.nextText()));
                }
@@ -493,10 +497,6 @@ 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();
        }
@@ -522,12 +522,8 @@ public final class Profile implements Parcelable, Comparable {
                cs.processOverride(context);
            }
        }
        // Set vibrators
        for (VibratorSettings vs : vibrators.values()) {
            if (vs.isOverride()) {
                vs.processOverride(context);
            }
        }
        // Set silent mode
        mSilentMode.processOverride(context);
        // Set airplane mode
        doSelectAirplaneMode(context);
    }
@@ -561,22 +557,6 @@ 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);
+135 −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 org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;

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;
public final class SilentModeSettings implements Parcelable {
    private static final String SILENT_MODE_OFF = "off";
    private static final String SILENT_MODE_VIBRATE = "vibrate";
    private static final String SILENT_MODE_MUTE = "mute";

    private int mVibratorId;
    private int mValue;
    private String 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);
    public static final Parcelable.Creator<SilentModeSettings> CREATOR = new Parcelable.Creator<SilentModeSettings>() {
        public SilentModeSettings createFromParcel(Parcel in) {
            return new SilentModeSettings(in);
        }

        @Override
        public VibratorSettings[] newArray(int size) {
            return new VibratorSettings[size];
        public SilentModeSettings[] newArray(int size) {
            return new SilentModeSettings[size];
        }
    };


    public VibratorSettings(Parcel parcel) {
    public SilentModeSettings(Parcel parcel) {
        readFromParcel(parcel);
    }

    public VibratorSettings(int vibratorId) {
        this(vibratorId, 0, false);
    public SilentModeSettings() {
        this(SILENT_MODE_OFF, false);
    }

    public VibratorSettings(int vibratorId, int value, boolean override) {
        mVibratorId = vibratorId;
    public SilentModeSettings(String value, boolean override) {
        mValue = value;
        mOverride = override;
        mDirty = false;
    }

    public int getVibratorId() {
        return mVibratorId;
    }

    public int getValue() {
    public String getValue() {
        return mValue;
    }

    public void setValue(int value) {
    public void setValue(String value) {
        mValue = value;
        mDirty = true;
    }
@@ -78,37 +70,45 @@ public final class VibratorSettings implements Parcelable{
        return mDirty;
    }

    public void processOverride(Context context) {
        if (isOverride()) {
            int ringerMode = AudioManager.RINGER_MODE_NORMAL;
            if (mValue.equals(SILENT_MODE_MUTE)) {
                ringerMode = AudioManager.RINGER_MODE_SILENT;
            } else if (mValue.equals(SILENT_MODE_VIBRATE)) {
                ringerMode = AudioManager.RINGER_MODE_VIBRATE;
            }
            AudioManager amgr = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
            amgr.setRingerMode(ringerMode);
        }
    }

    /** @hide */
    public static VibratorSettings fromXml(XmlPullParser xpp, Context context)
    public static SilentModeSettings 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")) {
        SilentModeSettings connectionDescriptor = new SilentModeSettings();
        while (event != XmlPullParser.END_TAG) {
            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());
                if (name.equals("value")) {
                    connectionDescriptor.mValue = xpp.nextText();
                } else if (name.equals("override")) {
                    vibratorDescriptor.mOverride = Boolean.parseBoolean(xpp.nextText());
                    connectionDescriptor.mOverride = Boolean.parseBoolean(xpp.nextText());
                }
            }
            event = xpp.next();
        }
        return vibratorDescriptor;
        return connectionDescriptor;
    }

    /** @hide */
    public void getXmlString(StringBuilder builder, Context context) {
        builder.append("<vibratorDescriptor>\n<vibratorId>");
        builder.append(mVibratorId);
        builder.append("</vibratorId>\n<value>");
        builder.append("<silentModeDescriptor>\n<value>");
        builder.append(mValue);
        builder.append("</value>\n<override>");
        builder.append(mOverride);
        builder.append("</override>\n</vibratorDescriptor>\n");
        mDirty = false;
        builder.append("</override>\n</silentModeDescriptor>\n");
    }

    @Override
@@ -119,32 +119,17 @@ public final class VibratorSettings implements Parcelable{
    /** @hide */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mVibratorId);
        dest.writeInt(mOverride ? 1 : 0);
        dest.writeInt(mValue);
        dest.writeString(mValue);
        dest.writeInt(mDirty ? 1 : 0);
    }

    /** @hide */
    public void readFromParcel(Parcel in) {
        mVibratorId = in.readInt();
        mOverride = in.readInt() != 0;
        mValue = in.readInt();
        mValue = in.readString();
        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;
        }
    }

}