Files
packages_apps_Settings/src/com/android/settings/search/InlinePayload.java
Matthew Fritze 73056522b3 Add default value to inline payloads
If we try to set an inline result when it has not yet been
accessed in settings, nothing is read from Settings.
Thus, include a default value for a fallback.

Change-Id: I8a593d9ff3308b2d0cd5bc65658d160abf55b07e
Fixes: 63955012
Test: robotests
2017-07-25 14:37:05 -07:00

157 lines
5.1 KiB
Java

/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
package com.android.settings.search;
import android.content.Intent;
import android.content.Context;
import android.os.Parcel;
import android.provider.Settings;
import com.android.internal.annotations.VisibleForTesting;
/**
* Abstract Payload for inline settings results.
*/
public abstract class InlinePayload extends ResultPayload {
public static final int FALSE = 0;
public static final int TRUE = 1;
/**
* Defines the key to access and store the Setting the inline result represents.
*/
@VisibleForTesting
final String mSettingKey;
/**
* Defines where the Setting is stored.
*/
@SettingsSource final int mSettingSource;
/**
* True when the setting is available for the device.
*/
final boolean mIsDeviceSupported;
/**
* The default value for the setting.
*/
final int mDefaultvalue;
/**
* @param key uniquely identifies the stored setting.
* @param source of the setting. Used to determine where to get and set the setting.
* @param intent to the setting page.
* @param isDeviceSupported is true when the setting is valid for the given device.
*/
public InlinePayload(String key, @SettingsSource int source, Intent intent,
boolean isDeviceSupported, int defaultValue) {
super(intent);
mSettingKey = key;
mSettingSource = source;
mIsDeviceSupported = isDeviceSupported;
mDefaultvalue = defaultValue;
}
InlinePayload(Parcel parcel) {
super(parcel.readParcelable(Intent.class.getClassLoader()));
mSettingKey = parcel.readString();
mSettingSource = parcel.readInt();
mIsDeviceSupported = parcel.readInt() == TRUE;
mDefaultvalue = parcel.readInt();
}
@Override
public void writeToParcel(Parcel dest, int flags) {
super.writeToParcel(dest, flags);
dest.writeString(mSettingKey);
dest.writeInt(mSettingSource);
dest.writeInt(mIsDeviceSupported ? TRUE : FALSE);
dest.writeInt(mDefaultvalue);
}
@Override
@PayloadType public abstract int getType();
/**
* @returns the status of the underlying setting. See {@link ResultPayload.Availability} for
* possible values.
*/
@Availability public int getAvailability() {
if (mIsDeviceSupported) {
return Availability.AVAILABLE;
}
return Availability.DISABLED_UNSUPPORTED;
}
/**
* Checks if the input is valid for the given setting.
*
* @param input The number to be get or set for the setting.
* @return {@param input} mapped to the public-facing API for settings.
* @throws IllegalArgumentException when the input is not valid for the given inline type.
*/
protected abstract int standardizeInput(int input) throws IllegalArgumentException;
/**
* @returns the current value of the setting.
*/
public int getValue(Context context) {
int settingsValue = -1;
switch(mSettingSource) {
case SettingsSource.SECURE:
settingsValue = Settings.Secure.getInt(context.getContentResolver(),
mSettingKey, mDefaultvalue);
break;
case SettingsSource.SYSTEM:
settingsValue = Settings.System.getInt(context.getContentResolver(),
mSettingKey, mDefaultvalue);
break;
case SettingsSource.GLOBAL:
settingsValue = Settings.Global.getInt(context.getContentResolver(),
mSettingKey, mDefaultvalue);
break;
}
return standardizeInput(settingsValue);
}
/**
* Attempts to set the setting value.
*
* @param newValue is the requested value for the setting.
* @returns true when the setting was changed, and false otherwise.
*/
public boolean setValue(Context context, int newValue) {
newValue = standardizeInput(newValue);
switch(mSettingSource) {
case SettingsSource.GLOBAL:
return Settings.Global.putInt(context.getContentResolver(), mSettingKey, newValue);
case SettingsSource.SECURE:
return Settings.Secure.putInt(context.getContentResolver(), mSettingKey, newValue);
case SettingsSource.SYSTEM:
return Settings.System.putInt(context.getContentResolver(), mSettingKey, newValue);
case SettingsSource.UNKNOWN:
return false;
}
return false;
}
}