Remove deprecated host migration example

This was used for cm 12.1 to 13.0 migration testing.

Change-Id: I93c6e49d963c7ea9862392219148ab641f37b133
This commit is contained in:
Michael Bestas
2023-07-22 18:48:19 +03:00
parent 17d6d41753
commit 1f91203cf5
18 changed files with 0 additions and 2267 deletions

View File

@@ -1,20 +0,0 @@
//
// Copyright (C) 2018 The LineageOS 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.
//
java_library_host {
name: "migration-interface",
srcs: ["**/*.java"],
}

View File

@@ -1,13 +0,0 @@
## LineageSettings Migration Test
The tests host library contains a simple interface which calls down to a client interface on the device
to take a snapshot of the current settings, forces an update with the current build defined in params,
then verifies the settings post migration.
To run the test (on a live device):
``` java -cp /Volumes/CM/CM13/out/host/darwin-x86/framework/migration-interface.jar MigrationTest \
--settings <example settings> --bootimg <boot.img> --systemimg <system.img> ```
To generate example settings to be written against 12.1 device during migration:
```java -cp /Volumes/CM/CM13/out/host/<platform>/framework/migration-interface.jar GenerateExampleSettings <output file path> ```

View File

@@ -1,122 +0,0 @@
# Settings which are to be moved to LineageSettings
# Automatically generated by lineage-sdk/host/migration/src/GenerateExampleSettingsGenerateExampleSettings.java.
Row: 0 name=status_bar_battery_style, type=s, value=2, type=s
Row: 1 name=enable_forward_lookup, type=s, value=1, type=s
Row: 2 name=enable_people_lookup, type=s, value=1, type=s
Row: 3 name=enable_reverse_lookup, type=s, value=1, type=s
Row: 4 name=qs_quick_pulldown, type=s, value=1, type=s
Row: 5 name=display_auto_outdoor_mode, type=s, value=-1, type=s
Row: 6 name=home_wake_screen, type=s, value=1, type=s
Row: 7 name=back_wake_screen, type=s, value=0, type=s
Row: 8 name=menu_wake_screen, type=s, value=0, type=s
Row: 9 name=assist_wake_screen, type=s, value=0, type=s
Row: 10 name=app_switch_wake_screen, type=s, value=0, type=s
Row: 11 name=status_bar_clock, type=s, value=2, type=s
Row: 12 name=status_bar_show_battery_percent, type=s, value=1, type=s
Row: 13 name=reverse_lookup_provider, type=s, value=OpenCnam, type=s
Row: 14 name=live_display_hinted, type=s, value=1, type=s
Row: 15 name=status_bar_ime_switcher, type=s, value=1, type=s
Row: 16 name=edge_service_for_gestures, type=s, value=1, type=s
Row: 17 name=people_lookup_provider, type=s, value=WhitePages, type=s
Row: 18 name=forward_lookup_provider, type=s, value=Google, type=s
Row: 19 name=status_bar_show_weather, type=s, value=1, type=s
Row: 20 name=system_profiles_enabled, type=s, value=1, type=s
Row: 21 name=proximity_on_wake, type=s, value=0, type=s
Row: 22 name=display_low_power, type=s, value=1, type=s
Row: 23 name=display_color_enhance, type=s, value=1, type=s
Row: 24 name=increasing_ring_ramp_up_time, type=s, value=10, type=s
Row: 25 name=increasing_ring_start_vol, type=s, value=0.487, type=s
Row: 26 name=display_temperature_night, type=s, value=2800, type=s
Row: 27 name=camera_launch, type=s, value=1, type=s
Row: 28 name=nav_buttons, type=s, value=empty|back|home|recent|empty|menu0, type=s
Row: 29 name=increasing_ring, type=s, value=1, type=s
Row: 30 name=volume_adjust_sounds_enabled, type=s, value=1, type=s
Row: 31 name=display_temperature_mode, type=s, value=2, type=s
Row: 32 name=display_temperature_day, type=s, value=5600, type=s
Row: 33 name=display_color_adjustment, type=s, value=0.999982 0.999982 0.999982, type=s
Row: 34 name=double_tap_sleep_gesture, type=s, value=1, type=s
Row: 35 name=recents_show_search_bar, type=s, value=0, type=s
Row: 36 name=battery_light_enabled, type=s, value=1, type=s
Row: 37 name=battery_light_pulse, type=s, value=1, type=s
Row: 38 name=battery_light_low_color, type=s, value=-55513, type=s
Row: 39 name=battery_light_medium_color, type=s, value=-113, type=s
Row: 40 name=battery_light_full_color, type=s, value=-16722688, type=s
Row: 41 name=notification_light_pulse_default_color, type=s, value=-848184, type=s
Row: 42 name=notification_light_pulse_default_led_on, type=s, value=1000, type=s
Row: 43 name=notification_light_pulse_default_led_off, type=s, value=6000, type=s
Row: 44 name=notification_light_screen_on_enable, type=s, value=0, type=s
Row: 45 name=notification_light_pulse_call_color, type=s, value=-4288625, type=s
Row: 46 name=notification_light_pulse_call_led_on, type=s, value=1000, type=s
Row: 47 name=notification_light_pulse_call_led_off, type=s, value=6000, type=s
Row: 48 name=notification_light_pulse_vmail_color, type=s, value=-4568759, type=s
Row: 49 name=notification_light_pulse_vmail_led_on, type=s, value=1000, type=s
Row: 50 name=notification_light_pulse_vmail_led_off, type=s, value=6000, type=s
Row: 51 name=notification_light_pulse_custom_enable, type=s, value=0, type=s
Row: 52 name=lockscreen_scramble_pin_layout, type=s, value=1, type=s
Row: 53 name=navigation_bar_left, type=s, value=0, type=s
Row: 54 name=navigation_bar_menu_arrow_keys, type=s, value=0, type=s
Row: 55 name=camera_sleep_on_release, type=s, value=0, type=s
Row: 56 name=camera_wake_screen, type=s, value=0, type=s
Row: 57 name=volume_wake_screen, type=s, value=0, type=s
Row: 58 name=volbtn_music_controls, type=s, value=1, type=s
Row: 59 name=volume_keys_control_ring_stream, type=s, value=1, type=s
Row: 60 name=stylus_icon_enabled, type=s, value=1, type=s
Row: 60 name=swap_volume_keys_on_rotation, type=s, value=0, type=s
Row: 61 name=status_bar_brightness_control, type=s, value=0, type=s
Row: 62 name=status_bar_notif_count, type=s, value=1, type=s
Row: 63 name=dev_force_show_navbar, type=s, value=0, type=s
Row: 64 name=stats_collection, type=s, value=1, type=s
Row: 65 name=advanced_mode, type=s, value=1, type=s
Row: 66 name=default_theme_package, type=s, value=com.cyngn.hexo, type=s
Row: 67 name=default_theme_components, type=s, value=mods_overlays|mods_status_bar|mods_navigation_bar|mods_icons|mods_homescreen|mods_fonts, type=s
Row: 68 name=live_display_color_matrix, type=s, value=NULL, type=NULL
Row: 69 name=navigation_ring_targets_0, type=s, value=assist, type=s
Row: 70 name=navigation_ring_targets_1, type=s, value=assist, type=s
Row: 71 name=navigation_ring_targets_2, type=s, value=assist, type=s
Row: 72 name=theme_prev_boot_api_level, type=s, value=22, type=s
Row: 73 name=qs_show_brightness_slider, type=s, value=1, type=s
Row: 74 name=recents_long_press_activity, type=s, value=torch, type=s
Row: 75 name=lockscreen_target_actions, type=s, value=default|#Intent;actionandroid.intent.action.MAIN;categoryandroid.intent.category.LAUNCHER;componentcom.snapchat.android/.LandingPageActivity;end, type=s
Row: 76 name=device_hostname, type=s, value=android-932989077997886b, type=s
Row: 77 name=sysui_qs_main_tiles, type=s, value=1, type=s
Row: 78 name=privacy_guard_default, type=s, value=1, type=s
Row: 79 name=protected_components, type=s, value=null, type=s
Row: 80 name=adb_notify, type=s, value=1, type=s
Row: 81 name=development_shortcut, type=s, value=0, type=s
Row: 82 name=app_perf_profiles_enabled, type=s, value=1, type=s
Row: 83 name=performance_profile, type=s, value=1, type=s
Row: 84 name=sysui_qs_tiles, type=s, value=wifi, type=s
Row: 85 name=volume_link_notification, type=s, value=0, type=s
Row: 86 name=power_notifications_ringtone, type=s, value=content://settings/system/notification_sound, type=s
Row: 87 name=power_notifications_vibrate, type=s, value=0, type=s
Row: 88 name=power_notifications_enabled, type=s, value=0, type=s
Row: 89 name=wake_when_plugged_or_unplugged, type=s, value=1, type=s
Row: 90 name=zen_disable_ducking_during_media_playback, type=s, value=0, type=s
Row: 91 name=bluetooth_accept_all_files, type=s, value=0, type=s
Row: 92 name=call_recording_format, type=s, value=0, type=s
Row: 93 name=dialer_opencnam_account_sid, type=s, value=0, type=s
Row: 94 name=dialer_opencnam_auth_token, type=s, value=0, type=s
Row: 95 name=enable_mwi_notification, type=s, value=0, type=s
Row: 96 name=key_app_switch_action, type=s, value=0, type=s
Row: 97 name=key_app_switch_long_press_action, type=s, value=0, type=s
Row: 98 name=key_assist_action, type=s, value=0, type=s
Row: 99 name=key_assist_long_press_action, type=s, value=0, type=s
Row: 100 name=key_home_double_tap_action, type=s, value=0, type=s
Row: 101 name=key_home_long_press_action, type=s, value=0, type=s
Row: 102 name=key_menu_action, type=s, value=0, type=s
Row: 103 name=key_menu_long_press_action, type=s, value=0, type=s
Row: 104 name=notification_light_brightness_level, type=s, value=0, type=s
Row: 105 name=notification_light_multiple_leds_enable, type=s, value=0, type=s
Row: 106 name=notification_light_pulse_custom_values, type=s, value=0, type=s
Row: 107 name=advanced_reboot, type=s, value=0, type=s
Row: 108 name=button_backlight_timeout, type=s, value=0, type=s
Row: 109 name=button_brightness, type=s, value=255, type=s
Row: 110 name=keyboard_brightness, type=s, value=255, type=s
Row: 111 name=kill_app_longpress_back, type=s, value=0, type=s
Row: 112 name=power_menu_actions, type=s, value=blah, type=s
Row: 113 name=wifi_auto_priority, type=s, value=0, type=s
Row: 114 name=ring_home_button_behavior, type=s, value=1, type=s
Row: 115 name=show_alarm_icon, type=s, value=1, type=s
Row: 116 name=status_bar_am_pm, type=s, value=1, type=s
Row: 117 name=status_bar_quick_qs_pulldown, type=s, value=1, type=s
Row: 118 name=t9_search_input_locale, type=s, value=enUS, type=s

View File

@@ -1,131 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by adnan on 11/29/15.
*/
public class AdbCommand extends Command {
private static final int MAX_RETRIES = 20;
private static final String[] ADB_REBOOT_BOOTLOADER = new String[] {
"adb", "reboot", "bootloader"
};
private static final String[] ADB_CHECK_BOOT_COMPLETE = new String[] {
"adb", "shell", "getprop", "sys.boot_completed"
};
private String[] baseCommand;
public AdbCommand(int command) {
switch (command) {
case Types.REBOOT_BOOTLOADER:
baseCommand = ADB_REBOOT_BOOTLOADER;
break;
case Types.CHECK_BOOT_COMPLETE:
baseCommand = ADB_CHECK_BOOT_COMPLETE;
break;
default:
throw new UnsupportedOperationException("Unsupported operation " + command);
}
}
@Override
public void run() {
List<String> commandList = new ArrayList<String>(
baseCommand.length + 1);
commandList.addAll(Arrays.asList(baseCommand));
String[] commands = commandList.toArray(new String[0]);
if (MigrationTest.DEBUG) {
System.out.println("Using commands: " + Arrays.toString(commands));
}
try {
Process process = Runtime.getRuntime().exec(commands);
final InputStream err = process.getErrorStream();
// Send error output to stderr.
Thread errThread = new Thread() {
@Override
public void run() {
copy(err, System.err);
}
};
errThread.setDaemon(true);
errThread.start();
BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String rx = in.readLine();
if (!baseCommand.equals(ADB_CHECK_BOOT_COMPLETE)) {
if (rx != null) {
if (MigrationTest.DEBUG) {
System.out.println("Received response " + rx);
}
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
in.close();
err.close();
process.destroy();
} else {
for (int i = 1; i < MAX_RETRIES; i++) {
process = Runtime.getRuntime().exec(commands);
in = new BufferedReader(new InputStreamReader(process.getInputStream()));
if ((rx = in.readLine()) != null) {
if (rx.equals("1")) {
in.close();
process.destroy();
try {
System.out.println("Device up detected...");
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
break;
}
}
try {
System.out.println("Waiting for device to come up...");
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
in.close();
process.destroy();
}
}
} catch (IOException e) {
System.err.println("Error ");
e.printStackTrace();
}
}
public final class Types {
public static final int REBOOT_BOOTLOADER = 0;
public static final int CHECK_BOOT_COMPLETE = 1;
}
}

View File

@@ -1,77 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
/**
* Created by adnan on 11/13/15.
*/
public class Command implements Runnable {
private String authority;
/**
* Override for execution
*/
@Override
public void run() {
}
/**
* Copies from one stream to another.
*/
protected static void copy(InputStream in, OutputStream out) {
byte[] buffer = new byte[1024];
int read;
try {
while ((read = in.read(buffer)) > -1) {
out.write(buffer, 0, read);
}
} catch (IOException e) {
e.printStackTrace();
}
}
protected static boolean filter(String uri, Setting setting) {
switch (uri) {
case SettingsConstants.SYSTEM:
if (!LineageSettings.System.isLegacySetting(setting.getKey())) {
return true;
}
break;
case SettingsConstants.SECURE:
if (!LineageSettings.Secure.isLegacySetting(setting.getKey())) {
return true;
}
break;
case SettingsConstants.GLOBAL:
if (!LineageSettings.Global.isLegacySetting(setting.getKey())) {
return true;
}
break;
}
return false;
}
public void prepend(String authority) {
this.authority = authority;
}
public String getAuthority() {
return authority;
}
}

View File

@@ -1,22 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
/**
* Created by adnan on 11/16/15.
*/
public interface CommandExecutor {
public void execute();
}

View File

@@ -1,45 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.util.ArrayList;
/**
* Created by adnan on 11/29/15.
*/
public class DebuggingCommands implements CommandExecutor {
private ArrayList<Command> commandHistory = new ArrayList<Command>();
@Override
public void execute() {
for (Command commandWithTimeout : commandHistory) {
commandWithTimeout.run();
}
}
private void addCommand(Command commandWithTimeout) {
commandHistory.add(commandWithTimeout);
}
public void addFastboot(int command, String[] arguments) {
FastbootCommand fastbootCommand = new FastbootCommand(command, arguments);
addCommand(fastbootCommand);
}
public void addAdb(int command) {
AdbCommand adbCommand = new AdbCommand(command);
addCommand(adbCommand);
}
}

View File

@@ -1,123 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by adnan on 11/17/15.
*/
public class FastbootCommand extends Command {
private static final String FASTBOOT_COMMAND = "fastboot";
private static final String REBOOT = "reboot";
private static final String DEVICES = "devices";
private static final String FLASH = "flash";
private String[] baseCommand;
private String baseArg;
private String image;
private String targetImage;
public FastbootCommand(int command, String[] args) {
switch (command) {
case Types.FASTBOOT_FLASH:
baseCommand = new String[] { FASTBOOT_COMMAND };
baseArg = FLASH;
image = args[0];
targetImage = args[1];
break;
case Types.FASTBOOT_DEVICES:
baseCommand = new String[] { FASTBOOT_COMMAND };
baseArg = DEVICES;
break;
case Types.FASTBOOT_REBOOT:
baseCommand = new String[] { FASTBOOT_COMMAND };
baseArg = REBOOT;
break;
default:
throw new UnsupportedOperationException("Unsupported operation " + command);
}
}
@Override
public void run() {
List<String> commandList = new ArrayList<String>(
baseCommand.length + 1);
commandList.addAll(Arrays.asList(baseCommand));
if (baseArg != null && baseArg.length() > 0) {
commandList.add(baseArg);
}
if (image != null &&image.length() > 0) {
commandList.add(image);
}
if (targetImage != null &&targetImage.length() > 0) {
commandList.add(targetImage);
}
String[] commands = commandList.toArray(new String[commandList.size()]);
if (MigrationTest.DEBUG) {
System.out.println("Using commands: " + Arrays.toString(commands));
}
try {
final Process process = Runtime.getRuntime().exec(commands);
final InputStream err = process.getErrorStream();
// Send error output to stderr.
Thread errThread = new Thread() {
@Override
public void run() {
copy(err, System.err);
}
};
errThread.setDaemon(true);
errThread.start();
BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String rx = in.readLine();
if (rx != null) {
if (MigrationTest.DEBUG) {
System.out.println("Received response " + rx);
}
}
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
in.close();
err.close();
//Gross
process.destroy();
} catch (IOException e) {
System.err.println("Error ");
e.printStackTrace();
}
}
public final class Types {
public static final int FASTBOOT_FLASH = 0;
public static final int FASTBOOT_DEVICES = 1;
public static final int FASTBOOT_REBOOT = 2;
}
}

View File

@@ -1,89 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.IOException;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.nio.charset.Charset;
import java.util.ArrayList;
/**
* This is to be run on a live Lineage 12.1 device.
*/
public class GenerateExampleSettings {
private static ArrayList<Setting> androidSystemSettingList = new ArrayList<Setting>();
private static ArrayList<Setting> androidSecureSettingList = new ArrayList<Setting>();
private static ArrayList<Setting> androidGlobalSettingList = new ArrayList<Setting>();
private static ArrayList<Setting> defaultSettings = new ArrayList<Setting>();
public static void main(String[] args) throws IOException, ClassNotFoundException {
if (args.length != 1) {
System.err.println("Usage: GenerateExampleSettings [target file]");
System.exit(-1);
}
String rootFile = args[0];
SettingImageCommands androidSettingImage =
new SettingImageCommands(SettingsConstants.SETTINGS_AUTHORITY);
androidSettingImage.addQuery(SettingsConstants.SYSTEM, androidSystemSettingList);
androidSettingImage.addQuery(SettingsConstants.SECURE, androidSecureSettingList);
androidSettingImage.addQuery(SettingsConstants.GLOBAL, androidGlobalSettingList);
androidSettingImage.execute();
for (Setting system : androidSystemSettingList) {
if (LineageSettings.System.isLegacySetting(system.getKey())) {
defaultSettings.add(system);
}
}
for (Setting secure : androidSecureSettingList) {
if (LineageSettings.Secure.isLegacySetting(secure.getKey())) {
defaultSettings.add(secure);
}
}
for (Setting global : androidGlobalSettingList) {
if (LineageSettings.Global.isLegacySetting(global.getKey())) {
defaultSettings.add(global);
}
}
Writer out = new BufferedWriter(new OutputStreamWriter(
new FileOutputStream(rootFile),
Charset.forName("US-ASCII")));
out.write("# Settings which are to be moved to LineageSettings\n");
out.write("# Automatically generated by " +
"lineage-sdk/host/migration/src/GenerateExampleSettings"
+ GenerateExampleSettings.class.getSimpleName() + ".java.\n");
// Write settings to file for output.
for (int i = 0; i < defaultSettings.size(); i++) {
Setting defaultSetting = defaultSettings.get(i);
// This is the same format as what is spit out by system/bin/content
out.write("Row: " + i + " name=" + defaultSetting.getKey()
+ ", type=" + defaultSetting.getKeyType()
+ ", value=" + defaultSetting.getValue()
+ ", type=" + defaultSetting.getValueType() + "\n");
}
out.close();
System.out.println("Settings written: " + rootFile.toString());
}
}

View File

@@ -1,95 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Essentially:
* adb shell content insert --uri content://settings/secure
* --bind name:s:new_setting --bind value:s:new_value
*/
public class InsertCommand extends Command {
private static final String[] INSERT_SETTINGS = {
"adb", "shell", "content", "insert", "--uri" };
private String targetUri;
private Setting targetSetting;
public InsertCommand(String targetUri, Setting targetSetting) {
this.targetUri = targetUri;
this.targetSetting = targetSetting;
}
@Override
public void run() {
System.out.println("\nWriting setting " + targetSetting.getKey() + " for authority "
+ getAuthority() + " for target uri " + targetUri + "...");
insert(targetUri, targetSetting);
synchronized (this) {
notifyAll();
}
}
private void insert(String uri, Setting setting) {
String[] commands = INSERT_SETTINGS;
List<String> commandList = new ArrayList<String>(
INSERT_SETTINGS.length + 1);
commandList.addAll(Arrays.asList(commands));
commandList.add(SettingsConstants.CONTENT_URI + getAuthority() + uri);
commandList.add("--bind name:" + setting.getKeyType() + ":" + setting.getKey());
commandList.add("--bind value:" + setting.getValueType() + ":"
+ "\"" + setting.getValue() + "\"");
commands = commandList.toArray(new String[0]);
if (MigrationTest.DEBUG) {
System.out.println("Using commands: " + Arrays.toString(commands));
}
try {
final Process process = Runtime.getRuntime().exec(commands);
final InputStream err = process.getErrorStream();
// Send error output to stderr.
Thread errThread = new Thread() {
@Override
public void run() {
copy(err, System.err);
}
};
errThread.setDaemon(true);
errThread.start();
BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String rx = in.readLine();
if (rx != null) {
if (MigrationTest.DEBUG) {
System.out.println("Received response " + rx);
}
}
in.close();
err.close();
process.destroy();
} catch (IOException e) {
System.err.println("Error ");
e.printStackTrace();
}
}
}

View File

@@ -1,901 +0,0 @@
/**
* Copyright (C) 2015 The CyanogenMod Project
* 2019-2022 The LineageOS 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.
*/
import java.util.Arrays;
/**
* LineageSettings contains Lineage specific preferences in System, Secure, and Global.
*/
public final class LineageSettings {
public static final String AUTHORITY = "lineagesettings";
/**
* System settings, containing miscellaneous Lineage system preferences. This table holds simple
* name/value pairs. There are convenience functions for accessing individual settings entries.
*/
public static final class System {
// region System Settings
/**
* Quick Settings Quick Pulldown
* 0 = off, 1 = right, 2 = left
* @hide
*/
public static final String QS_QUICK_PULLDOWN = "qs_quick_pulldown";
/**
* Whether to attach a queue to media notifications.
* 0 = 0ff, 1 = on
* @hide
*/
public static final String NOTIFICATION_PLAY_QUEUE = "notification_play_queue";
/**
* Whether the HighTouchSensitivity is activated or not.
* 0 = off, 1 = on
* @hide
*/
public static final String HIGH_TOUCH_SENSITIVITY_ENABLE =
"high_touch_sensitivity_enable";
/**
* Show the pending notification counts as overlays on the status bar
* @hide
*/
public static final String SYSTEM_PROFILES_ENABLED = "system_profiles_enabled";
/**
* Whether to show the clock in the right or left position or show it in the center
* 0: show the clock in the right position (LTR)
* 1: show the clock in the center
* 2: show the clock in the left position (LTR)
* default: 0
* @hide
*/
public static final String STATUS_BAR_CLOCK = "status_bar_clock";
/**
* Display style of AM/PM next to clock in status bar
* 0: Normal display (Eclair stock)
* 1: Small display (Froyo stock)
* 2: No display (Gingerbread/ICS stock)
* default: 2
* @hide
*/
public static final String STATUS_BAR_AM_PM = "status_bar_am_pm";
/**
* Display style of the status bar battery information
* 0: Display the battery an icon in portrait mode
* 1: Display the battery as a circle
* 2: Display the battery as plain text
* default: 0
* @hide
*/
public static final String STATUS_BAR_BATTERY_STYLE = "status_bar_battery_style";
/**
* Status bar battery %
* 0: Hide the battery percentage
* 1: Display the battery percentage inside the icon
* 2: Display the battery percentage next to the icon
* @hide
*/
public static final String STATUS_BAR_SHOW_BATTERY_PERCENT = "status_bar_show_battery_percent";
// endregion
/**
* Whether the phone ringtone should be played in an increasing manner
* @hide
*/
public static final String INCREASING_RING = "increasing_ring";
/**
* Start volume fraction for increasing ring volume
* @hide
*/
public static final String INCREASING_RING_START_VOLUME = "increasing_ring_start_vol";
/**
* Ramp up time (seconds) for increasing ring
* @hide
*/
public static final String INCREASING_RING_RAMP_UP_TIME = "increasing_ring_ramp_up_time";
/**
* Volume Adjust Sounds Enable, This is the noise made when using volume hard buttons
* Defaults to 1 - sounds enabled
* @hide
*/
public static final String VOLUME_ADJUST_SOUNDS_ENABLED = "volume_adjust_sounds_enabled";
/**
* Navigation controls to Use
* @hide
*/
public static final String NAV_BUTTONS = "nav_buttons";
/**
* boolean value. toggles using arrow key locations on nav bar
* as left and right dpad keys
* @hide
*/
public static final String NAVIGATION_BAR_MENU_ARROW_KEYS = "navigation_bar_menu_arrow_keys";
/**
* Action to perform when the home key is long-pressed.
* (Default can be configured via config_longPressOnHomeBehavior)
* 0 - Nothing
* 1 - Menu
* 2 - App-switch
* 3 - Search
* 4 - Voice search
* 5 - In-app search
* 6 - Launch Camera
* 7 - Action Sleep
* 8 - Last app
* @hide
*/
public static final String KEY_HOME_LONG_PRESS_ACTION = "key_home_long_press_action";
/**
* Action to perform when the home key is double-tapped.
* (Default can be configured via config_doubleTapOnHomeBehavior)
* (See KEY_HOME_LONG_PRESS_ACTION for valid values)
* @hide
*/
public static final String KEY_HOME_DOUBLE_TAP_ACTION = "key_home_double_tap_action";
/**
* Whether to wake the screen with the back key, the value is boolean.
* @hide
*/
public static final String BACK_WAKE_SCREEN = "back_wake_screen";
/**
* Whether to wake the screen with the menu key, the value is boolean.
* @hide
*/
public static final String MENU_WAKE_SCREEN = "menu_wake_screen";
/**
* Whether to wake the screen with the volume keys, the value is boolean.
* @hide
*/
public static final String VOLUME_WAKE_SCREEN = "volume_wake_screen";
/**
* Action to perform when the menu key is pressed. (Default is 1)
* (See KEY_HOME_LONG_PRESS_ACTION for valid values)
* @hide
*/
public static final String KEY_MENU_ACTION = "key_menu_action";
/**
* Action to perform when the menu key is long-pressed.
* (Default is 0 on devices with a search key, 3 on devices without)
* (See KEY_HOME_LONG_PRESS_ACTION for valid values)
* @hide
*/
public static final String KEY_MENU_LONG_PRESS_ACTION = "key_menu_long_press_action";
/**
* Action to perform when the assistant (search) key is pressed. (Default is 3)
* (See KEY_HOME_LONG_PRESS_ACTION for valid values)
* @hide
*/
public static final String KEY_ASSIST_ACTION = "key_assist_action";
/**
* Action to perform when the assistant (search) key is long-pressed. (Default is 4)
* (See KEY_HOME_LONG_PRESS_ACTION for valid values)
* @hide
*/
public static final String KEY_ASSIST_LONG_PRESS_ACTION = "key_assist_long_press_action";
/**
* Action to perform when the app switch key is pressed. (Default is 2)
* (See KEY_HOME_LONG_PRESS_ACTION for valid values)
* @hide
*/
public static final String KEY_APP_SWITCH_ACTION = "key_app_switch_action";
/**
* Action to perform when the app switch key is long-pressed. (Default is 0)
* (See KEY_HOME_LONG_PRESS_ACTION for valid values)
* @hide
*/
public static final String KEY_APP_SWITCH_LONG_PRESS_ACTION = "key_app_switch_long_press_action";
/**
* Whether to wake the screen with the home key, the value is boolean.
* @hide
*/
public static final String HOME_WAKE_SCREEN = "home_wake_screen";
/**
* Whether to wake the screen with the assist key, the value is boolean.
* @hide
*/
public static final String ASSIST_WAKE_SCREEN = "assist_wake_screen";
/**
* Whether to wake the screen with the app switch key, the value is boolean.
* @hide
*/
public static final String APP_SWITCH_WAKE_SCREEN = "app_switch_wake_screen";
/**
* Whether to wake the screen with the camera key half-press.
* @hide
*/
public static final String CAMERA_WAKE_SCREEN = "camera_wake_screen";
/**
* Whether or not to send device back to sleep if Camera button is released ("Peek")
* @hide
*/
public static final String CAMERA_SLEEP_ON_RELEASE = "camera_sleep_on_release";
/**
* Whether to launch secure camera app when key is longpressed
* @hide
*/
public static final String CAMERA_LAUNCH = "camera_launch";
/**
* Show icon when stylus is used
* The value is boolean (1 or 0).
* @hide
*/
public static final String STYLUS_ICON_ENABLED = "stylus_icon_enabled";
/**
* Swap volume buttons when the screen is rotated
* 0 - Disabled
* 1 - Enabled (screen is rotated by 90 or 180 degrees: phone, hybrid)
* 2 - Enabled (screen is rotated by 180 or 270 degrees: tablet)
* @hide
*/
public static final String SWAP_VOLUME_KEYS_ON_ROTATION = "swap_volume_keys_on_rotation";
/**
* Whether the battery light should be enabled (if hardware supports it)
* The value is boolean (1 or 0).
* @hide
*/
public static final String BATTERY_LIGHT_ENABLED = "battery_light_enabled";
/**
* Whether the battery LED should repeatedly flash when the battery is low
* on charge. The value is boolean (1 or 0).
* @hide
*/
public static final String BATTERY_LIGHT_PULSE = "battery_light_pulse";
/**
* What color to use for the battery LED while charging - low
* @hide
*/
public static final String BATTERY_LIGHT_LOW_COLOR = "battery_light_low_color";
/**
* What color to use for the battery LED while charging - medium
* @hide
*/
public static final String BATTERY_LIGHT_MEDIUM_COLOR = "battery_light_medium_color";
/**
* What color to use for the battery LED while charging - full
* @hide
*/
public static final String BATTERY_LIGHT_FULL_COLOR = "battery_light_full_color";
/**
* Sprint MWI Quirk: Show message wait indicator notifications
* @hide
*/
public static final String ENABLE_MWI_NOTIFICATION = "enable_mwi_notification";
/**
* Check the proximity sensor during wakeup
* @hide
*/
public static final String PROXIMITY_ON_WAKE = "proximity_on_wake";
/**
* Whether wifi settings will connect to access point automatically
* 0 = automatically
* 1 = manually
* @hide
*/
public static final String WIFI_AUTO_CONNECT_TYPE = "wifi_auto_connect_type";
/**
* Color temperature of the display during the day
* @hide
*/
public static final String DISPLAY_TEMPERATURE_DAY = "display_temperature_day";
/**
* Color temperature of the display at night
* @hide
*/
public static final String DISPLAY_TEMPERATURE_NIGHT = "display_temperature_night";
/**
* Display color temperature adjustment mode, one of DAY (default), NIGHT, or AUTO.
* @hide
*/
public static final String DISPLAY_TEMPERATURE_MODE = "display_temperature_mode";
/**
* Automatic outdoor mode
* @hide
*/
public static final String DISPLAY_AUTO_OUTDOOR_MODE = "display_auto_outdoor_mode";
/**
* Use color enhancement feature of display
* @hide
*/
public static final String DISPLAY_COLOR_ENHANCE = "display_color_enhance";
/**
* Manual display color adjustments (RGB values as floats, separated by spaces)
* @hide
*/
public static final String DISPLAY_COLOR_ADJUSTMENT = "display_color_adjustment";
/**
* Did we tell about how they can stop breaking their eyes?
* @hide
*/
public static final String LIVE_DISPLAY_HINTED = "live_display_hinted";
/**
* Enable statusbar double tap gesture on to put device to sleep
* @hide
*/
public static final String DOUBLE_TAP_SLEEP_GESTURE = "double_tap_sleep_gesture";
/**
* Show search bar in recents
* @hide
*/
public static final String RECENTS_SHOW_SEARCH_BAR = "recents_show_search_bar";
/**
* Whether navigation bar is placed on the left side in landscape mode
* @hide
*/
public static final String NAVBAR_LEFT_IN_LANDSCAPE = "navigation_bar_left";
/**
* Locale for secondary overlay on dialer for t9 search input
* @hide
*/
public static final String T9_SEARCH_INPUT_LOCALE = "t9_search_input_locale";
/**
* If all file types can be accepted over Bluetooth OBEX.
* @hide
*/
public static final String BLUETOOTH_ACCEPT_ALL_FILES =
"bluetooth_accept_all_files";
/**
* Whether to scramble a pin unlock layout
* @hide
*/
public static final String LOCKSCREEN_PIN_SCRAMBLE_LAYOUT =
"lockscreen_scramble_pin_layout";
/**
* Whether keyguard will rotate to landscape mode
* @hide
*/
public static final String LOCKSCREEN_ROTATION = "lockscreen_rotation";
/**
* @hide
*/
public static final String SHOW_ALARM_ICON = "show_alarm_icon";
/**
* Whether to show the IME switcher in the status bar
* @hide
*/
public static final String STATUS_BAR_IME_SWITCHER = "status_bar_ime_switcher";
/** Whether to allow one finger quick settings expansion on the right side of the statusbar.
*
* @hide
*/
public static final String STATUS_BAR_QUICK_QS_PULLDOWN = "status_bar_quick_qs_pulldown";
/** Whether to show the brightness slider in quick settings panel.
*
* @hide
*/
public static final String QS_SHOW_BRIGHTNESS_SLIDER = "qs_show_brightness_slider";
/**
* Whether to control brightness from status bar
*
* @hide
*/
public static final String STATUS_BAR_BRIGHTNESS_CONTROL = "status_bar_brightness_control";
/**
* Whether or not volume button music controls should be enabled to seek media tracks
* @hide
*/
public static final String VOLBTN_MUSIC_CONTROLS = "volbtn_music_controls";
/**
* Use EdgeGesture Service for system gestures in PhoneWindowManager
* @hide
*/
public static final String USE_EDGE_SERVICE_FOR_GESTURES = "edge_service_for_gestures";
/**
* Call recording format value
* 0: AMR_WB
* 1: MPEG_4
* Default: 0
* @hide
*/
public static final String CALL_RECORDING_FORMAT = "call_recording_format";
/**
* Contains the notifications light maximum brightness to use.
* @hide
*/
public static final String NOTIFICATION_LIGHT_BRIGHTNESS_LEVEL =
"notification_light_brightness_level";
/**
* Whether to allow notifications with the screen on or DayDreams.
* The value is boolean (1 or 0). Default will always be false.
* @hide
*/
public static final String NOTIFICATION_LIGHT_SCREEN_ON =
"notification_light_screen_on_enable";
/**
* What color to use for the notification LED by default
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_DEFAULT_COLOR =
"notification_light_pulse_default_color";
/**
* How long to flash the notification LED by default
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_DEFAULT_LED_ON =
"notification_light_pulse_default_led_on";
/**
* How long to wait between flashes for the notification LED by default
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_DEFAULT_LED_OFF =
"notification_light_pulse_default_led_off";
/**
* What color to use for the missed call notification LED
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_CALL_COLOR =
"notification_light_pulse_call_color";
/**
* How long to flash the missed call notification LED
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_CALL_LED_ON =
"notification_light_pulse_call_led_on";
/**
* How long to wait between flashes for the missed call notification LED
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_CALL_LED_OFF =
"notification_light_pulse_call_led_off";
/**
* What color to use for the voicemail notification LED
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_VMAIL_COLOR =
"notification_light_pulse_vmail_color";
/**
* How long to flash the voicemail notification LED
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_VMAIL_LED_ON =
"notification_light_pulse_vmail_led_on";
/**
* How long to wait between flashes for the voicemail notification LED
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_VMAIL_LED_OFF =
"notification_light_pulse_vmail_led_off";
/**
* Whether to use the custom LED values for the notification pulse LED.
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_CUSTOM_ENABLE =
"notification_light_pulse_custom_enable";
/**
* Which custom LED values to use for the notification pulse LED.
* @hide
*/
public static final String NOTIFICATION_LIGHT_PULSE_CUSTOM_VALUES =
"notification_light_pulse_custom_values";
/**
* @hide
*/
public static final String[] LEGACY_SYSTEM_SETTINGS = new String[]{
LineageSettings.System.QS_QUICK_PULLDOWN,
LineageSettings.System.NAV_BUTTONS,
LineageSettings.System.KEY_HOME_LONG_PRESS_ACTION,
LineageSettings.System.KEY_HOME_DOUBLE_TAP_ACTION,
LineageSettings.System.BACK_WAKE_SCREEN,
LineageSettings.System.MENU_WAKE_SCREEN,
LineageSettings.System.VOLUME_WAKE_SCREEN,
LineageSettings.System.KEY_MENU_ACTION,
LineageSettings.System.KEY_MENU_LONG_PRESS_ACTION,
LineageSettings.System.KEY_ASSIST_ACTION,
LineageSettings.System.KEY_ASSIST_LONG_PRESS_ACTION,
LineageSettings.System.KEY_APP_SWITCH_ACTION,
LineageSettings.System.KEY_APP_SWITCH_LONG_PRESS_ACTION,
LineageSettings.System.HOME_WAKE_SCREEN,
LineageSettings.System.ASSIST_WAKE_SCREEN,
LineageSettings.System.APP_SWITCH_WAKE_SCREEN,
LineageSettings.System.CAMERA_WAKE_SCREEN,
LineageSettings.System.CAMERA_SLEEP_ON_RELEASE,
LineageSettings.System.CAMERA_LAUNCH,
LineageSettings.System.STYLUS_ICON_ENABLED,
LineageSettings.System.SWAP_VOLUME_KEYS_ON_ROTATION,
LineageSettings.System.BATTERY_LIGHT_ENABLED,
LineageSettings.System.BATTERY_LIGHT_PULSE,
LineageSettings.System.BATTERY_LIGHT_LOW_COLOR,
LineageSettings.System.BATTERY_LIGHT_MEDIUM_COLOR,
LineageSettings.System.BATTERY_LIGHT_FULL_COLOR,
LineageSettings.System.ENABLE_MWI_NOTIFICATION,
LineageSettings.System.PROXIMITY_ON_WAKE,
LineageSettings.System.DISPLAY_TEMPERATURE_DAY,
LineageSettings.System.DISPLAY_TEMPERATURE_NIGHT,
LineageSettings.System.DISPLAY_TEMPERATURE_MODE,
LineageSettings.System.DISPLAY_AUTO_OUTDOOR_MODE,
LineageSettings.System.DISPLAY_COLOR_ENHANCE,
LineageSettings.System.DISPLAY_COLOR_ADJUSTMENT,
LineageSettings.System.LIVE_DISPLAY_HINTED,
LineageSettings.System.DOUBLE_TAP_SLEEP_GESTURE,
LineageSettings.System.RECENTS_SHOW_SEARCH_BAR,
LineageSettings.System.NAVBAR_LEFT_IN_LANDSCAPE,
LineageSettings.System.T9_SEARCH_INPUT_LOCALE,
LineageSettings.System.BLUETOOTH_ACCEPT_ALL_FILES,
LineageSettings.System.LOCKSCREEN_PIN_SCRAMBLE_LAYOUT,
LineageSettings.System.LOCKSCREEN_ROTATION,
LineageSettings.System.SHOW_ALARM_ICON,
LineageSettings.System.STATUS_BAR_IME_SWITCHER,
LineageSettings.System.QS_SHOW_BRIGHTNESS_SLIDER,
LineageSettings.System.STATUS_BAR_BRIGHTNESS_CONTROL,
LineageSettings.System.VOLBTN_MUSIC_CONTROLS,
LineageSettings.System.SWAP_VOLUME_KEYS_ON_ROTATION,
LineageSettings.System.USE_EDGE_SERVICE_FOR_GESTURES,
LineageSettings.System.CALL_RECORDING_FORMAT,
LineageSettings.System.NOTIFICATION_LIGHT_BRIGHTNESS_LEVEL,
LineageSettings.System.NOTIFICATION_LIGHT_SCREEN_ON,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_DEFAULT_COLOR,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_DEFAULT_LED_ON,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_DEFAULT_LED_OFF,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_CALL_COLOR,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_CALL_LED_ON,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_CALL_LED_OFF,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_VMAIL_COLOR,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_VMAIL_LED_ON,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_VMAIL_LED_OFF,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_CUSTOM_ENABLE,
LineageSettings.System.NOTIFICATION_LIGHT_PULSE_CUSTOM_VALUES,
LineageSettings.System.STATUS_BAR_QUICK_QS_PULLDOWN,
LineageSettings.System.VOLUME_ADJUST_SOUNDS_ENABLED,
LineageSettings.System.SYSTEM_PROFILES_ENABLED,
LineageSettings.System.INCREASING_RING,
LineageSettings.System.INCREASING_RING_START_VOLUME,
LineageSettings.System.INCREASING_RING_RAMP_UP_TIME,
LineageSettings.System.STATUS_BAR_CLOCK,
LineageSettings.System.STATUS_BAR_AM_PM,
LineageSettings.System.STATUS_BAR_BATTERY_STYLE,
LineageSettings.System.STATUS_BAR_SHOW_BATTERY_PERCENT,
LineageSettings.System.NAVIGATION_BAR_MENU_ARROW_KEYS,
};
/**
* @hide
*/
public static boolean isLegacySetting(String key) {
return Arrays.asList(LEGACY_SYSTEM_SETTINGS).contains(key);
}
}
/**
* Secure settings, containing miscellaneous Lineage secure preferences. This
* table holds simple name/value pairs. There are convenience
* functions for accessing individual settings entries.
*/
public static final class Secure {
// region Secure Settings
/**
* The time in ms to keep the button backlight on after pressing a button.
* A value of 0 will keep the buttons on for as long as the screen is on.
* @hide
*/
public static final String BUTTON_BACKLIGHT_TIMEOUT = "button_backlight_timeout";
/**
* The button brightness to be used while the screen is on or after a button press,
* depending on the value of {@link BUTTON_BACKLIGHT_TIMEOUT}.
* Valid value range is between 0 and {@link PowerManager#getMaximumButtonBrightness()}
* @hide
*/
public static final String BUTTON_BRIGHTNESS = "button_brightness";
/**
* The keyboard brightness to be used while the screen is on.
* Valid value range is between 0 and {@link PowerManager#getMaximumKeyboardBrightness()}
* @hide
*/
public static final String KEYBOARD_BRIGHTNESS = "keyboard_brightness";
/**
* Custom navring actions
* @hide
*/
public static final String[] NAVIGATION_RING_TARGETS = new String[] {
"navigation_ring_targets_0",
"navigation_ring_targets_1",
"navigation_ring_targets_2",
};
/**
* String to contain power menu actions
* @hide
*/
public static final String POWER_MENU_ACTIONS = "power_menu_actions";
/**
* Whether to show the brightness slider in quick settings panel.
* @hide
*/
public static final String QS_SHOW_BRIGHTNESS_SLIDER = "qs_show_brightness_slider";
/**
* List of QS tile names
* @hide
*/
public static final String QS_TILES = "sysui_qs_tiles";
/**
* Use "main" tiles on the first row of the quick settings panel
* 0 = no, 1 = yes
* @hide
*/
public static final String QS_USE_MAIN_TILES = "sysui_qs_main_tiles";
/**
* Global stats collection
* @hide
*/
public static final String STATS_COLLECTION = "stats_collection";
/**
* Boolean value whether to link ringtone and notification volume
*
* @hide
*/
public static final String VOLUME_LINK_NOTIFICATION = "volume_link_notification";
/**
* The global recents long press activity chosen by the user.
* This setting is stored as a flattened component name as
* per {@link ComponentName#flattenToString()}.
*
* @hide
*/
public static final String RECENTS_LONG_PRESS_ACTIVITY = "recents_long_press_activity";
/**
* What happens when the user presses the Home button when the
* phone is ringing.<br/>
* <b>Values:</b><br/>
* 1 - Nothing happens. (Default behavior)<br/>
* 2 - The Home button answer the current call.<br/>
*
* @hide
*/
public static final String RING_HOME_BUTTON_BEHAVIOR = "ring_home_button_behavior";
/**
* RING_HOME_BUTTON_BEHAVIOR value for "do nothing".
* @hide
*/
public static final int RING_HOME_BUTTON_BEHAVIOR_DO_NOTHING = 0x1;
/**
* RING_HOME_BUTTON_BEHAVIOR value for "answer".
* @hide
*/
public static final int RING_HOME_BUTTON_BEHAVIOR_ANSWER = 0x2;
/**
* RING_HOME_BUTTON_BEHAVIOR default value.
* @hide
*/
public static final int RING_HOME_BUTTON_BEHAVIOR_DEFAULT =
RING_HOME_BUTTON_BEHAVIOR_DO_NOTHING;
/**
* Launch actions for left/right lockscreen targets
* @hide
*/
public static final String LOCKSCREEN_TARGETS = "lockscreen_target_actions";
/**
* Whether to display a menu containing 'Wipe data', 'Force close' and other options
* in the notification area and in the recent app list
* @hide
*/
public static final String DEVELOPMENT_SHORTCUT = "development_shortcut";
/**
* What happens when the user presses the Power button while in-call
* and the screen is on.<br/>
* <b>Values:</b><br/>
* 1 - The Power button turns off the screen and locks the device. (Default behavior)<br/>
* 2 - The Power button hangs up the current call.<br/>
*
* @hide
*/
public static final String INCALL_POWER_BUTTON_BEHAVIOR = "incall_power_button_behavior";
/**
* INCALL_POWER_BUTTON_BEHAVIOR value for "turn off screen".
* @hide
*/
public static final int INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF = 0x1;
/**
* INCALL_POWER_BUTTON_BEHAVIOR value for "hang up".
* @hide
*/
public static final int INCALL_POWER_BUTTON_BEHAVIOR_HANGUP = 0x2;
/**
* INCALL_POWER_BUTTON_BEHAVIOR default value.
* @hide
*/
public static final int INCALL_POWER_BUTTON_BEHAVIOR_DEFAULT =
INCALL_POWER_BUTTON_BEHAVIOR_SCREEN_OFF;
/**
* Stored color matrix for LiveDisplay. This is used to allow co-existence with
* display tuning done by DisplayAdjustmentUtils when hardware support isn't
* available.
* @hide
*/
public static final String LIVE_DISPLAY_COLOR_MATRIX = "live_display_color_matrix";
/**
* Whether to include options in power menu for rebooting into recovery or bootloader
* @hide
*/
public static final String ADVANCED_REBOOT = "advanced_reboot";
// endregion
/**
* @hide
*/
public static final String[] LEGACY_SECURE_SETTINGS = new String[]{
LineageSettings.Secure.BUTTON_BACKLIGHT_TIMEOUT,
LineageSettings.Secure.BUTTON_BRIGHTNESS,
LineageSettings.Secure.DEV_FORCE_SHOW_NAVBAR,
LineageSettings.Secure.KEYBOARD_BRIGHTNESS,
LineageSettings.Secure.POWER_MENU_ACTIONS,
LineageSettings.Secure.STATS_COLLECTION,
LineageSettings.Secure.QS_SHOW_BRIGHTNESS_SLIDER,
LineageSettings.Secure.QS_TILES,
LineageSettings.Secure.QS_USE_MAIN_TILES,
LineageSettings.Secure.VOLUME_LINK_NOTIFICATION,
LineageSettings.Secure.NAVIGATION_RING_TARGETS[0],
LineageSettings.Secure.NAVIGATION_RING_TARGETS[1],
LineageSettings.Secure.NAVIGATION_RING_TARGETS[2],
LineageSettings.Secure.RECENTS_LONG_PRESS_ACTIVITY,
LineageSettings.Secure.LIVE_DISPLAY_COLOR_MATRIX,
LineageSettings.Secure.ADVANCED_REBOOT,
LineageSettings.Secure.LOCKSCREEN_TARGETS,
LineageSettings.Secure.RING_HOME_BUTTON_BEHAVIOR,
LineageSettings.Secure.DEVELOPMENT_SHORTCUT};
/**
* @hide
*/
public static boolean isLegacySetting(String key) {
return Arrays.asList(LEGACY_SECURE_SETTINGS).contains(key);
}
}
/**
* Global settings, containing miscellaneous Lineage global preferences. This
* table holds simple name/value pairs. There are convenience
* functions for accessing individual settings entries.
*/
public static final class Global {
// region Global Settings
/**
* Whether to wake the display when plugging or unplugging the charger
*
* @hide
*/
public static final String WAKE_WHEN_PLUGGED_OR_UNPLUGGED =
"wake_when_plugged_or_unplugged";
/** {@hide} */
public static final String
BLUETOOTH_A2DP_SRC_PRIORITY_PREFIX = "bluetooth_a2dp_src_priority_";
/**
* @hide
*/
public static final String ZEN_DISABLE_DUCKING_DURING_MEDIA_PLAYBACK =
"zen_disable_ducking_during_media_playback";
/**
* Whether the system auto-configure the priority of the wifi ap's or use
* the manual settings established by the user.
* <> 0 to autoconfigure, 0 to manual settings. Default is <> 0.
* @hide
*/
public static final String WIFI_AUTO_PRIORITIES_CONFIGURATION = "wifi_auto_priority";
// endregion
/**
* @hide
*/
public static final String[] LEGACY_GLOBAL_SETTINGS = new String[]{
LineageSettings.Global.WAKE_WHEN_PLUGGED_OR_UNPLUGGED,
LineageSettings.Global.ZEN_DISABLE_DUCKING_DURING_MEDIA_PLAYBACK,
LineageSettings.Global.WIFI_AUTO_PRIORITIES_CONFIGURATION};
/**
* @hide
*/
public static boolean isLegacySetting(String key) {
return Arrays.asList(LEGACY_GLOBAL_SETTINGS).contains(key);
}
}
}

View File

@@ -1,200 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Collections;
/**
* A verbose settings migration test
*/
class MigrationTest {
private static final String ARGUMENT_SETTINGS = "--settings";
private static final String ARGUMENT_BOOT_IMG = "--bootimg";
private static final String ARGUMENT_SYSTEM_IMG = "--systemimg";
private static final String ARGUMENT_PREFIX = "--";
public static final boolean DEBUG = true;
private static ArrayList<Setting> lineageSystemSettingList = new ArrayList<Setting>();
private static ArrayList<Setting> lineageSecureSettingList = new ArrayList<Setting>();
private static ArrayList<Setting> lineageGlobalSettingList = new ArrayList<Setting>();
private static ArrayList<Setting> legacySystemSettings = new ArrayList<Setting>();
private static ArrayList<Setting> legacySecureSettings = new ArrayList<Setting>();
private static ArrayList<Setting> legacyGlobalSettings = new ArrayList<Setting>();
private static Tokenizer tokenizer;
public static void main(String[] args) throws IOException {
if (args.length < 1) {
showUsage();
System.exit(-1);
}
tokenizer = new Tokenizer(args);
String settingFileName = null;
String bootImage = null;
String systemImage = null;
for (String argument; (argument = tokenizer.nextArg())!= null;) {
if (ARGUMENT_SETTINGS.equals(argument)) {
settingFileName = argumentValueRequired(argument);
} else if (ARGUMENT_BOOT_IMG.equals(argument)) {
bootImage = argumentValueRequired(argument);
} else if (ARGUMENT_SYSTEM_IMG.equals(argument)) {
systemImage = argumentValueRequired(argument);
}
}
if (!new File(settingFileName).exists()) {
System.err.print("Invalid file provided " + settingFileName);
System.exit(-1);
}
SettingImageCommands legacySettings =
new SettingImageCommands(SettingsConstants.SETTINGS_AUTHORITY);
legacySettings.addRead(settingFileName, SettingsConstants.SYSTEM, legacySystemSettings);
legacySettings.addRead(settingFileName, SettingsConstants.SECURE, legacySecureSettings);
legacySettings.addRead(settingFileName, SettingsConstants.GLOBAL, legacyGlobalSettings);
//Read settings
legacySettings.execute();
SettingImageCommands legacyToLineageSettings =
new SettingImageCommands(SettingsConstants.SETTINGS_AUTHORITY);
//For each example setting in the table, add inserts
for (Setting setting : legacySystemSettings) {
legacyToLineageSettings.addInsert(SettingsConstants.SYSTEM, setting);
}
for (Setting setting : legacySecureSettings) {
legacyToLineageSettings.addInsert(SettingsConstants.SECURE, setting);
}
for (Setting setting : legacyGlobalSettings) {
legacyToLineageSettings.addInsert(SettingsConstants.GLOBAL, setting);
}
//Write them to the database for verification later
legacyToLineageSettings.execute();
//Force update
DebuggingCommands updateRom = new DebuggingCommands();
updateRom.addAdb(AdbCommand.Types.REBOOT_BOOTLOADER);
updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_DEVICES, null);
updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_FLASH,
new String[]{"boot", bootImage});
updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_FLASH,
new String[]{"system", systemImage});
updateRom.addFastboot(FastbootCommand.Types.FASTBOOT_REBOOT, null);
updateRom.addAdb(AdbCommand.Types.CHECK_BOOT_COMPLETE);
updateRom.execute();
//Requery
SettingImageCommands lineageSettingImage =
new SettingImageCommands(SettingsConstants.LINEAGESETTINGS_AUTHORITY);
lineageSettingImage.addQuery(SettingsConstants.SYSTEM, lineageSystemSettingList);
lineageSettingImage.addQuery(SettingsConstants.SECURE, lineageSecureSettingList);
lineageSettingImage.addQuery(SettingsConstants.GLOBAL, lineageGlobalSettingList);
lineageSettingImage.execute();
//Validate
System.out.println("\n\nValidating " + SettingsConstants.SYSTEM + "...");
validate(legacySystemSettings, lineageSystemSettingList);
System.out.println("\n\nValidating " + SettingsConstants.SECURE + "...");
validate(legacySecureSettings, lineageSecureSettingList);
System.out.println("\n\nValidating " + SettingsConstants.GLOBAL + "...");
validate(legacyGlobalSettings, lineageGlobalSettingList);
System.exit(0);
}
private static void showUsage() {
System.err.println("Usage: MigrationTest --settings [example setting file] "
+ "--bootimg [image]"
+ "--systemimg [image]");
}
private static class Tokenizer {
private final String[] mArgs;
private int mNextArg;
public Tokenizer(String[] args) {
mArgs = args;
}
private String nextArg() {
if (mNextArg < mArgs.length) {
return mArgs[mNextArg++];
} else {
return null;
}
}
}
private static String argumentValueRequired(String argument) {
String value = tokenizer.nextArg();
if (value == null || value.length() == 0 || value.startsWith(ARGUMENT_PREFIX)) {
throw new IllegalArgumentException("No value for argument: " + argument);
}
return value;
}
private static void validate(ArrayList<Setting> legacySettings, ArrayList<Setting> lineageSettings) {
Collections.sort(legacySettings);
Collections.sort(lineageSettings);
if (legacySettings.size() != lineageSettings.size()) {
System.err.println("Warning: Size mismatch: " + " legacy "
+ legacySettings.size() + " lineage " + lineageSettings.size());
}
for (int i = 0; i < legacySettings.size(); i++) {
Setting legacySetting = legacySettings.get(i);
Setting lineageSetting = lineageSettings.get(i);
int error = 0;
System.out.println("Comparing: legacy " + legacySetting.getKey() + " and lineagesetting "
+ lineageSetting.getKey());
if (!legacySetting.getKey().equals(lineageSetting.getKey())) {
System.err.println(" Key mismatch: " + legacySetting.getKey() + " and "
+ lineageSetting.getKey());
error = 1;
}
if (!legacySetting.getKeyType().equals(lineageSetting.getKeyType())) {
System.err.println(" Key type mismatch: " + legacySetting.getKeyType() + " and "
+ lineageSetting.getKeyType());
error = 1;
}
if (legacySetting.getValue().length() > 0) {
if (!legacySetting.getValue().equals(lineageSetting.getValue())) {
System.err.println(" Value mismatch: " + legacySetting.getValue() + " and "
+ lineageSetting.getValue());
error = 1;
}
}
if (!legacySetting.getValueType().equals(lineageSetting.getValueType())) {
System.err.println(" Value type mismatch: " + legacySetting.getValueType()
+ " and " + lineageSetting.getValueType());
error = 1;
}
if (error > 0) {
System.exit(-1);
} else {
System.out.println("...OK");
}
}
}
}

View File

@@ -1,108 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Essentially:
* adb shell content query --uri content://settings/secure --projection name:value
* --where \"name=\'new_setting\'\" --sort \"name ASC\"\n"
*/
public class QueryCommand extends Command {
private static final String[] QUERY_SETTINGS = {
"adb", "shell", "content", "query", "--uri" };
private static final String PROJECTION = "name:value";
private ArrayList<Setting> targetList;
private String targetUri;
protected QueryCommand(String targetUri,
ArrayList<Setting> targetList) {
this.targetUri = targetUri;
this.targetList = targetList;
}
@Override
public void run() {
System.out.println("\nQuerying settings for authority "
+ getAuthority() + " for target uri " + targetUri + "...");
query(targetUri, targetList);
synchronized (this) {
notifyAll();
}
}
private void query(String uri, ArrayList<Setting> arrayList) {
String[] commands = QUERY_SETTINGS;
List<String> commandList = new ArrayList<String>(
QUERY_SETTINGS.length + 1);
commandList.addAll(Arrays.asList(commands));
commandList.add(SettingsConstants.CONTENT_URI + getAuthority() + uri);
commandList.add("--projection");
commandList.add(PROJECTION);
commandList.add("--show-type"); //this is totally awesomely lineage specific
commandList.add("true");
commands = commandList.toArray(new String[0]);
if (MigrationTest.DEBUG) {
System.out.println("Using commands: " + Arrays.toString(commands));
}
try {
final Process process = Runtime.getRuntime().exec(commands);
final InputStream err = process.getErrorStream();
// Send error output to stderr.
Thread errThread = new Thread() {
@Override
public void run() {
copy(err, System.err);
}
};
errThread.setDaemon(true);
errThread.start();
BufferedReader in = new BufferedReader(
new InputStreamReader(process.getInputStream()));
String line;
while ((line = in.readLine()) != null) {
if (!line.startsWith("Row: ")) {
throw new IOException("Unable to read settings");
}
if (MigrationTest.DEBUG) {
System.out.println("LINE: " + line);
}
Setting setting = RowParser.parseAndPopulate(true, line);
if (filter(uri, setting)) {
continue;
}
arrayList.add(setting);
}
in.close();
err.close();
process.destroy();
} catch (IOException e) {
System.err.println("Error ");
e.printStackTrace();
}
}
}

View File

@@ -1,76 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.ArrayList;
/**
* Created by adnan on 11/17/15.
*/
public class ReadCommand extends Command {
private String targetFile;
private ArrayList<Setting> targetList;
private String targetUri;
protected ReadCommand(String targetFile, String targetUri, ArrayList<Setting> targetList) {
this.targetFile = targetFile;
this.targetUri = targetUri;
this.targetList = targetList;
}
@Override
public void run() {
System.out.println("\nReading settings for authority "
+ getAuthority() + " for target uri " + targetUri + " from file "
+ targetFile +"...");
read(targetFile, targetUri, targetList);
synchronized (this) {
notifyAll();
}
}
private void read(String fileName, String uri, ArrayList<Setting> arrayList) {
try {
BufferedReader in = new BufferedReader(
new FileReader(fileName));
String line;
//Skip first two lines of header
for (int i = 0; i < 2; i++) {
in.readLine();
}
while ((line = in.readLine()) != null) {
if (!line.startsWith("Row: ")) {
throw new IOException("Unable to read settings");
}
if (MigrationTest.DEBUG) {
System.out.println("LINE: " + line);
}
Setting setting = RowParser.parseAndPopulate(false, line);
//Sanitize
if (filter(uri, setting)) {
continue;
}
arrayList.add(setting);
}
in.close();
} catch (IOException e) {
System.err.println("Error ");
e.printStackTrace();
}
}
}

View File

@@ -1,50 +0,0 @@
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Created by adnan on 11/17/15.
*/
public class RowParser {
private static final String REGEX = "=(.+)";
private static Pattern p = Pattern.compile(REGEX);
public static Setting parseAndPopulate(boolean fromCursor, String line) {
Setting setting = new Setting();
String[] splitStrings = line.split(",");
for (int i = 0; i < 4; i++) {
Matcher matcher = p.matcher(splitStrings[i]);
while (matcher.find()) {
String value = matcher.group(0).replace("=", "").trim();
switch (i) {
case 0:
setting.setKey(value);
break;
case 1:
//Seriously?
if (fromCursor) {
setting.setKeyType(
Setting.SettingType.mapNumericToType(
Integer.parseInt(value)));
} else {
setting.setKeyType(value);
}
break;
case 2:
setting.setValue(value);
break;
case 3:
//Who the fuck decided to do this?
if (fromCursor) {
setting.setValueType(
Setting.SettingType.mapNumericToType(
Integer.parseInt(value)));
} else {
setting.setValueType(value);
}
break;
}
}
}
return setting;
}
}

View File

@@ -1,110 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.io.Serializable;
/**
* A simple concept of a "setting" within the provider
*/
public class Setting implements Serializable, Comparable<Setting> {
private static final long serialVersionUID = 0;
private String key;
private String value;
private String keyType;
private String valueType;
public Setting() {
this.keyType = SettingType.TYPE_NULL;
this.valueType = SettingType.TYPE_NULL;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getKeyType() {
return keyType;
}
public void setKeyType(String type) {
this.keyType = type;
}
public String getValueType() {
return valueType;
}
public void setValueType(String valueType) {
this.valueType = valueType;
}
/** s - string, i - integer, f - float */
public static class SettingType {
private static final String TYPE_NULL = "NULL";
private static final String TYPE_STRING = "s";
private static final String TYPE_INTEGER = "i";
private static final String TYPE_FLOAT = "f";
private static final String TYPE_BLOB = "d";
//THIS IS FROM CURSOR.JAVA, DO NOT MODIFY
/** Value returned by {@link #getType(int)} if the specified column is null */
static final int FIELD_TYPE_NULL = 0;
/** Value returned by {@link #getType(int)} if the specified column type is integer */
static final int FIELD_TYPE_INTEGER = 1;
/** Value returned by {@link #getType(int)} if the specified column type is float */
static final int FIELD_TYPE_FLOAT = 2;
/** Value returned by {@link #getType(int)} if the specified column type is string */
static final int FIELD_TYPE_STRING = 3;
/** Value returned by {@link #getType(int)} if the specified column type is blob */
static final int FIELD_TYPE_BLOB = 4;
public static String mapNumericToType(int numeric) {
switch (numeric) {
case FIELD_TYPE_NULL:
return TYPE_NULL;
case FIELD_TYPE_STRING:
return TYPE_STRING;
case FIELD_TYPE_INTEGER:
return TYPE_INTEGER;
case FIELD_TYPE_FLOAT:
return TYPE_FLOAT;
case FIELD_TYPE_BLOB:
return TYPE_BLOB;
default:
return TYPE_NULL;
}
}
}
@Override
public int compareTo(Setting o) {
return this.key.compareTo(o.getKey());
}
}

View File

@@ -1,56 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.util.ArrayList;
/**
* Created by adnan on 11/16/15.
*/
public class SettingImageCommands implements CommandExecutor {
private ArrayList<Command> commandHistory = new ArrayList<Command>();
private String authority;
public SettingImageCommands(String authority) {
this.authority = authority;
}
@Override
public void execute() {
for (Command commandWithTimeout : commandHistory) {
commandWithTimeout.run();
}
}
private void addCommand(Command commandWithTimeout) {
commandWithTimeout.prepend(authority);
commandHistory.add(commandWithTimeout);
}
public void addQuery(String uri, ArrayList<Setting> settings) {
QueryCommand queryCommand = new QueryCommand(uri, settings);
addCommand(queryCommand);
}
public void addInsert(String uri, Setting setting) {
InsertCommand insertCommand = new InsertCommand(uri, setting);
addCommand(insertCommand);
}
public void addRead(String fileName, String uri, ArrayList<Setting> settings) {
ReadCommand readCommand = new ReadCommand(fileName, uri, settings);
addCommand(readCommand);
}
}

View File

@@ -1,29 +0,0 @@
/*
* Copyright (C) 2015 The CyanogenMod 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.
*/
import java.util.ArrayList;
/**
* Created by adnan on 11/16/15.
*/
public class SettingsConstants {
public static final String LINEAGESETTINGS_AUTHORITY = "lineagesettings";
public static final String SETTINGS_AUTHORITY = "settings";
public static final String CONTENT_URI = "content://";
public static final String SYSTEM = "/system";
public static final String SECURE = "/secure";
public static final String GLOBAL = "/global";
}