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

Commit 0aa2c7f8 authored by Felix Bechstein's avatar Felix Bechstein
Browse files

Profiles: Airplanmode Settings with Checkbox (1/2)

Change Airplanemode Settings to look like Connection/SilentMode etc.

Change-Id: Ic340c4eac22b1c94dd5f7a94a9608e98c76a0e98
parent 6c356cc4
Loading
Loading
Loading
Loading
+133 −0
Original line number Diff line number Diff line
package android.app;

import android.content.Context;
import android.content.Intent;
import android.provider.Settings;
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 AirplaneModeSettings implements Parcelable {

    private int mValue;
    private boolean mOverride;
    private boolean mDirty;

    /** @hide */
    public static final Parcelable.Creator<AirplaneModeSettings> CREATOR = new Parcelable.Creator<AirplaneModeSettings>() {
        public AirplaneModeSettings createFromParcel(Parcel in) {
            return new AirplaneModeSettings(in);
        }

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


    public AirplaneModeSettings(Parcel parcel) {
        readFromParcel(parcel);
    }

    public AirplaneModeSettings() {
        this(0, false);
    }

    public AirplaneModeSettings(int value, boolean override) {
        mValue = value;
        mOverride = override;
        mDirty = false;
    }

    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;
    }

    public void processOverride(Context context) {
        if (isOverride()) {
            int current = Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
            if (current != mValue) {
                Settings.Global.putInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, mValue);
                Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
                intent.putExtra("state", mValue == 1);
                context.sendBroadcast(intent);
            }
        }
    }

    /** @hide */
    public static AirplaneModeSettings fromXml(XmlPullParser xpp, Context context)
            throws XmlPullParserException, IOException {
        int event = xpp.next();
        AirplaneModeSettings connectionDescriptor = new AirplaneModeSettings();
        while (event != XmlPullParser.END_TAG) {
            if (event == XmlPullParser.START_TAG) {
                String name = xpp.getName();
                if (name.equals("value")) {
                    connectionDescriptor.mValue = Integer.parseInt(xpp.nextText());
                } else if (name.equals("override")) {
                    connectionDescriptor.mOverride = Boolean.parseBoolean(xpp.nextText());
                }
            }
            event = xpp.next();
        }
        return connectionDescriptor;
    }

    /** @hide */
    public void getXmlString(StringBuilder builder, Context context) {
        builder.append("<airplaneModeDescriptor>\n<value>");
        builder.append(mValue);
        builder.append("</value>\n<override>");
        builder.append(mOverride);
        builder.append("</override>\n</airplaneModeDescriptor>\n");
    }

    @Override
    public int describeContents() {
        return 0;
    }

    /** @hide */
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mOverride ? 1 : 0);
        dest.writeInt(mValue);
        dest.writeInt(mDirty ? 1 : 0);
    }

    /** @hide */
    public void readFromParcel(Parcel in) {
        mOverride = in.readInt() != 0;
        mValue = in.readInt();
        mDirty = in.readInt() != 0;
    }


}
+19 −38
Original line number Diff line number Diff line
@@ -17,12 +17,10 @@
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;

@@ -72,9 +70,9 @@ public final class Profile implements Parcelable, Comparable {

    private SilentModeSettings mSilentMode = new SilentModeSettings();

    private int mScreenLockMode = LockMode.DEFAULT;
    private AirplaneModeSettings mAirplaneMode = new AirplaneModeSettings();

    private int mAirplaneMode = AirplaneMode.DEFAULT;
    private int mScreenLockMode = LockMode.DEFAULT;

    /** @hide */
    public static class LockMode {
@@ -83,13 +81,6 @@ 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) {
@@ -191,8 +182,8 @@ public final class Profile implements Parcelable, Comparable {
        dest.writeParcelableArray(
                connections.values().toArray(new Parcelable[connections.size()]), flags);
        dest.writeParcelable(mSilentMode, flags);
        dest.writeParcelable(mAirplaneMode, flags);
        dest.writeInt(mScreenLockMode);
        dest.writeInt(mAirplaneMode);
    }

    /** @hide */
@@ -223,8 +214,8 @@ public final class Profile implements Parcelable, Comparable {
            connections.put(connection.getConnectionId(), connection);
        }
        mSilentMode = (SilentModeSettings) in.readParcelable(null);
        mAirplaneMode = (AirplaneModeSettings) in.readParcelable(null);
        mScreenLockMode = in.readInt();
        mAirplaneMode = in.readInt();
    }

    public String getName() {
@@ -294,7 +285,7 @@ public final class Profile implements Parcelable, Comparable {
        return mSilentMode;
    }

    public void setSilentMode(SilentModeSettings descriptor) { // FIXME
    public void setSilentMode(SilentModeSettings descriptor) {
        mSilentMode = descriptor;
        mDirty = true;
    }
@@ -312,16 +303,12 @@ public final class Profile implements Parcelable, Comparable {
        mDirty = true;
    }

    public int getAirplaneMode() {
    public AirplaneModeSettings getAirplaneMode() {
        return mAirplaneMode;
    }

    public void setAirplaneMode(int airplaneMode) {
        if (airplaneMode < AirplaneMode.DEFAULT || airplaneMode > AirplaneMode.DISABLE) {
            mAirplaneMode = AirplaneMode.DEFAULT;
        } else {
            mAirplaneMode = airplaneMode;
        }
    public void setAirplaneMode(AirplaneModeSettings descriptor) {
        mAirplaneMode = descriptor;
        mDirty = true;
    }

@@ -345,6 +332,12 @@ public final class Profile implements Parcelable, Comparable {
                return true;
            }
        }
        if (mSilentMode.isDirty()) {
            return true;
        }
        if (mAirplaneMode.isDirty()) {
            return true;
        }
        return false;
    }

@@ -479,12 +472,13 @@ public final class Profile implements Parcelable, Comparable {
                    SilentModeSettings smd = SilentModeSettings.fromXml(xpp, context);
                    profile.setSilentMode(smd);
                }
                if (name.equals("airplaneModeDescriptor")) {
                    AirplaneModeSettings amd = AirplaneModeSettings.fromXml(xpp, context);
                    profile.setAirplaneMode(amd);
                }
                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);
@@ -525,20 +519,7 @@ public final class Profile implements Parcelable, Comparable {
        // Set silent mode
        mSilentMode.processOverride(context);
        // Set airplane mode
        doSelectAirplaneMode(context);
    }

    private void doSelectAirplaneMode(Context context) {
        if (getAirplaneMode() != AirplaneMode.DEFAULT) {
            int current = Settings.Global.getInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 0);
            int target = getAirplaneMode();
            if (current == 1 && target == AirplaneMode.DISABLE || current == 0 && target == AirplaneMode.ENABLE) {
                Settings.Global.putInt(context.getContentResolver(), Settings.Global.AIRPLANE_MODE_ON, 1 - current);
                Intent intent = new Intent(Intent.ACTION_AIRPLANE_MODE_CHANGED);
                intent.putExtra("state", target != AirplaneMode.DISABLE);
                context.sendBroadcast(intent);
            }
        }
        mAirplaneMode.processOverride(context);
    }

    /** @hide */