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

Commit 32810a3a authored by Felix Bechstein's avatar Felix Bechstein
Browse files

migrate vibrator to silent mode settings (1/2)

Change profiles:
* remove deprecated vibrator settings
* add silent mode settings

Available modes:
* off
* vibrate
* silent

Patch Set 1:
Initial patch with plain ListPreference

Patch Set 2:
Use Checkbox + Dialog like ConnectionSettings

Patch Set 3:
Fix code style

Change-Id: Ic5ec3486070866b7358f843a0843ccd0753e8c72
parent 36698b47
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;
        }
    }

}