Step 2 in refactoring DatabaseIndexingManager. This step moves the insertion of data into the database into a new class. This removes the remaining bulk of the code outside of DIM, but it does not fix the actual issue with the indexing code. The indexing code still chains functions together to insert data into the database at the end of the functions. It is exceedingly hard to read, and hard to track down bugs. I would like the converter to eventually return a list of IndexData objects, which lets us dissociate the database from the data collection. I.e. we can store the database in the Search app, and just pass IndexData objects via IPC.Fixing this requires more of a refactor, and will be done in a subsquent CL. Bug: 33577327 Test: make RunSettingsRoboTests Test: Took a database dump before and after change, and they were the same. Cool. Change-Id: Ia9bb815657b76f6cb9163014e746ec5eb6db8c5e
160 lines
5.1 KiB
Java
160 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.
|
|
*/
|
|
private 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;
|
|
}
|
|
|
|
public String getKey() {
|
|
return mSettingKey;
|
|
}
|
|
} |