Files
lineage-sdk/sdk/src/java/lineageos/profiles/LockSettings.java
Michael Bestas 5a577dc607 sdk: Make it REUSE compatible
Change-Id: Iba2bcaf5e677eafebc48c6aca3d3625f821d6e27
2024-11-07 13:28:42 +00:00

169 lines
4.7 KiB
Java

/*
* SPDX-FileCopyrightText: 2015 The CyanogenMod Project
* SPDX-License-Identifier: Apache-2.0
*/
package lineageos.profiles;
import android.app.admin.DevicePolicyManager;
import android.content.Context;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.RemoteException;
import android.util.Log;
/* import android.view.WindowManagerPolicyControl; */
import com.android.internal.policy.IKeyguardService;
/* import com.android.internal.policy.PolicyManager; */
import lineageos.app.Profile;
import lineageos.os.Build;
import lineageos.os.Concierge;
import lineageos.os.Concierge.ParcelInfo;
/**
* The {@link LockSettings} class allows for overriding and setting the
* current Lock screen state/security level. Value should be one a constant from
* of {@link Profile.LockMode}
*
* <p>Example for disabling lockscreen security:
* <pre class="prettyprint">
* LockSettings lock = new LockSettings(Profile.LockMode.INSECURE);
* profile.setScreenLockMode(lock);
* </pre>
*/
public final class LockSettings implements Parcelable {
private static final String TAG = LockSettings.class.getSimpleName();
private int mValue;
private boolean mDirty;
/** @hide */
public static final Creator<LockSettings> CREATOR
= new Creator<LockSettings>() {
public LockSettings createFromParcel(Parcel in) {
return new LockSettings(in);
}
@Override
public LockSettings[] newArray(int size) {
return new LockSettings[size];
}
};
/**
* Unwrap {@link LockSettings} from a parcel.
* @param parcel
*/
public LockSettings(Parcel parcel) {
readFromParcel(parcel);
}
/**
* Construct a {@link LockSettings} with a default value of {@link Profile.LockMode.DEFAULT}.
*/
public LockSettings() {
this(Profile.LockMode.DEFAULT);
}
/**
* Construct a {@link LockSettings} with a default value.
*/
public LockSettings(int value) {
mValue = value;
mDirty = false;
}
/**
* Get the value for the {@link LockSettings}
* @return a constant from {@link Profile.LockMode}
*/
public int getValue() {
return mValue;
}
/**
* Set the value for the {@link LockSettings}
*
* see {@link Profile.LockMode}
*/
public void setValue(int value) {
mValue = value;
mDirty = true;
}
/** @hide */
public boolean isDirty() {
return mDirty;
}
/** @hide */
public void processOverride(Context context, IKeyguardService keyguard) {
boolean enable;
final DevicePolicyManager devicePolicyManager =
(DevicePolicyManager) context.getSystemService(Context.DEVICE_POLICY_SERVICE);
if (devicePolicyManager != null && devicePolicyManager.requireSecureKeyguard()) {
enable = true;
} else {
switch (mValue) {
default:
case Profile.LockMode.DEFAULT:
case Profile.LockMode.INSECURE:
enable = true;
break;
case Profile.LockMode.DISABLE:
enable = false;
break;
}
}
try {
keyguard.setKeyguardEnabled(enable);
} catch (RemoteException e) {
Log.w(TAG, "unable to set keyguard enabled state to: " + enable, e);
}
}
/** @hide */
public void writeXmlString(StringBuilder builder, Context context) {
builder.append(mValue);
}
@Override
public int describeContents() {
return 0;
}
/** @hide */
@Override
public void writeToParcel(Parcel dest, int flags) {
// Tell the concierge to prepare the parcel
ParcelInfo parcelInfo = Concierge.prepareParcel(dest);
// === BOYSENBERRY ===
dest.writeInt(mValue);
dest.writeInt(mDirty ? 1 : 0);
// Complete the parcel info for the concierge
parcelInfo.complete();
}
/** @hide */
public void readFromParcel(Parcel in) {
// Read parcelable version via the Concierge
ParcelInfo parcelInfo = Concierge.receiveParcel(in);
int parcelableVersion = parcelInfo.getParcelVersion();
// Pattern here is that all new members should be added to the end of
// the writeToParcel method. Then we step through each version, until the latest
// API release to help unravel this parcel
if (parcelableVersion >= Build.LINEAGE_VERSION_CODES.BOYSENBERRY) {
mValue = in.readInt();
mDirty = in.readInt() != 0;
}
// Complete parcel info for the concierge
parcelInfo.complete();
}
}