Added support for flash image in both slots
Change-Id: Iafda62a5f77f7c1f564f1a2ec0a59aefaf5e1266
diff --git a/gui/Android.mk b/gui/Android.mk
index c4d938a..32c0d5b 100755
--- a/gui/Android.mk
+++ b/gui/Android.mk
@@ -103,6 +103,9 @@
ifeq ($(TW_EXCLUDE_NANO), true)
LOCAL_CFLAGS += -DTW_EXCLUDE_NANO
endif
+ifeq ($(AB_OTA_UPDATER),true)
+ LOCAL_CFLAGS += -DAB_OTA_UPDATER=1
+endif
LOCAL_C_INCLUDES += \
bionic \
diff --git a/gui/action.cpp b/gui/action.cpp
index 29fa945..2ca2161 100755
--- a/gui/action.cpp
+++ b/gui/action.cpp
@@ -1817,16 +1817,41 @@
int GUIAction::flashimage(std::string arg __unused)
{
int op_status = 0;
+ bool flag = true;
operation_start("Flash Image");
string path, filename;
DataManager::GetValue("tw_zip_location", path);
DataManager::GetValue("tw_file", filename);
- if (PartitionManager.Flash_Image(path, filename))
- op_status = 0; // success
- else
- op_status = 1; // fail
+#ifdef AB_OTA_UPDATER
+ string target = DataManager::GetStrValue("tw_flash_partition");
+ unsigned int pos = target.find_last_of(';');
+ string mount_point = pos != string::npos ? target.substr(0, pos) : "";
+ TWPartition* t_part = PartitionManager.Find_Partition_By_Path(mount_point);
+ bool flash_in_both_slots = DataManager::GetIntValue("tw_flash_both_slots") ? true : false;
+
+ if (t_part != NULL && (flash_in_both_slots && t_part->SlotSelect))
+ {
+ string current_slot = PartitionManager.Get_Active_Slot_Display();
+ bool pre_op_status = PartitionManager.Flash_Image(path, filename);
+
+ PartitionManager.Set_Active_Slot(current_slot == "A" ? "B" : "A");
+ op_status = (int) !(pre_op_status && PartitionManager.Flash_Image(path, filename));
+ PartitionManager.Set_Active_Slot(current_slot);
+
+ DataManager::SetValue("tw_flash_both_slots", 0);
+ flag = false;
+ }
+#endif
+ if (flag)
+ {
+ if (PartitionManager.Flash_Image(path, filename))
+ op_status = 0; // success
+ else
+ op_status = 1; // fail
+ }
+
operation_end(op_status);
return 0;
}
diff --git a/gui/partitionlist.cpp b/gui/partitionlist.cpp
index 16e0997..9c5b58e 100644
--- a/gui/partitionlist.cpp
+++ b/gui/partitionlist.cpp
@@ -179,6 +179,8 @@
pos = variablelist.find(searchvalue);
if (pos != string::npos) {
mList.at(i).selected = 1;
+ TWPartition* t_part = PartitionManager.Find_Partition_By_Path(mList.at(i).Mount_Point);
+ DataManager::SetValue("tw_is_slot_part", t_part != NULL ? (int) t_part->SlotSelect : 0);
} else {
mList.at(i).selected = 0;
}
@@ -272,6 +274,8 @@
mList.at(item_selected).selected = 0;
else
mList.at(item_selected).selected = 1;
+ TWPartition* t_part = PartitionManager.Find_Partition_By_Path(mList.at(item_selected).Mount_Point);
+ DataManager::SetValue("tw_is_slot_part", t_part != NULL ? (int) t_part->SlotSelect : 0);
int i;
string variablelist;
diff --git a/gui/theme/common/landscape.xml b/gui/theme/common/landscape.xml
index 5d3f5ea..4be49ea 100755
--- a/gui/theme/common/landscape.xml
+++ b/gui/theme/common/landscape.xml
@@ -372,7 +372,10 @@
<condition var1="tw_selectimage" var2="1"/>
<condition var1="tw_filename" op="modified"/>
</conditions>
- <action function="page">flashimage_confirm</action>
+ <actions>
+ <action function="set">tw_is_slot_part=0</action>
+ <action function="page">flashimage_confirm</action>
+ </actions>
</action>
<action>
@@ -711,6 +714,30 @@
<listtype name="flashimg"/>
</partitionlist>
+ <button style="checkbox">
+ <conditions>
+ <condition var1="tw_is_slot_part" op="=" var2="1"/>
+ <condition var1="tw_flash_both_slots" op="=" var2="0"/>
+ <condition var1="tw_has_boot_slots" var2="1"/>
+ </conditions>
+ <placement x="%col1_x_left%" y="%row14a_y%" textplacement="6"/>
+ <text>{@flash_ab_both_slots=Flash to both slots}</text>
+ <image resource="checkbox_false"/>
+ <action function="set">tw_flash_both_slots=1</action>
+ </button>
+
+ <button style="checkbox">
+ <conditions>
+ <condition var1="tw_is_slot_part" op="=" var2="1"/>
+ <condition var1="tw_flash_both_slots" op="=" var2="1"/>
+ <condition var1="tw_has_boot_slots" var2="1"/>
+ </conditions>
+ <placement x="%col1_x_left%" y="%row14a_y%" textplacement="6"/>
+ <text>{@flash_ab_both_slots=Flash to both slots}</text>
+ <image resource="checkbox_true"/>
+ <action function="set">tw_flash_both_slots=0</action>
+ </button>
+
<slider>
<text>{@swipe_flash=Swipe to confirm Flash}</text>
<actions>
diff --git a/gui/theme/common/languages/en.xml b/gui/theme/common/languages/en.xml
index 868dbea..a6074fd 100755
--- a/gui/theme/common/languages/en.xml
+++ b/gui/theme/common/languages/en.xml
@@ -740,6 +740,7 @@
<string name="unmount_system_err">Failed unmounting System</string>
<string name="flash_ab_inactive">Flashing A/B zip to inactive slot: {1}</string>
<string name="flash_ab_reboot">To flash additional zips, please reboot recovery to switch to the updated slot.</string>
+ <string name="flash_ab_both_slots">Flash to both slots</string>
<string name="ozip_decrypt_decryption">Starting Ozip Decryption...</string>
<string name="ozip_decrypt_finish">Ozip Decryption Finished!</string>
<string name="restore_system_context">Unable to get default context for {1} -- Android may not boot.</string>
diff --git a/gui/theme/common/portrait.xml b/gui/theme/common/portrait.xml
index 4bcaf57..80ee07d 100755
--- a/gui/theme/common/portrait.xml
+++ b/gui/theme/common/portrait.xml
@@ -329,7 +329,10 @@
<condition var1="tw_selectimage" var2="1"/>
<condition var1="tw_filename" op="modified"/>
</conditions>
- <action function="page">flashimage_confirm</action>
+ <actions>
+ <action function="set">tw_is_slot_part=0</action>
+ <action function="page">flashimage_confirm</action>
+ </actions>
</action>
<action>
@@ -662,6 +665,30 @@
<listtype name="flashimg"/>
</partitionlist>
+ <button style="checkbox">
+ <conditions>
+ <condition var1="tw_is_slot_part" op="=" var2="1"/>
+ <condition var1="tw_flash_both_slots" op="=" var2="0"/>
+ <condition var1="tw_has_boot_slots" var2="1"/>
+ </conditions>
+ <placement x="%indent%" y="%row19a_y%" textplacement="6"/>
+ <text>{@flash_ab_both_slots=Flash to both slots}</text>
+ <image resource="checkbox_false"/>
+ <action function="set">tw_flash_both_slots=1</action>
+ </button>
+
+ <button style="checkbox">
+ <conditions>
+ <condition var1="tw_is_slot_part" op="=" var2="1"/>
+ <condition var1="tw_flash_both_slots" op="=" var2="1"/>
+ <condition var1="tw_has_boot_slots" var2="1"/>
+ </conditions>
+ <placement x="%indent%" y="%row19a_y%" textplacement="6"/>
+ <text>{@flash_ab_both_slots=Flash to both slots}</text>
+ <image resource="checkbox_true"/>
+ <action function="set">tw_flash_both_slots=0</action>
+ </button>
+
<slider>
<text>{@swipe_flash=Swipe to confirm Flash}</text>
<actions>
diff --git a/gui/theme/common/watch.xml b/gui/theme/common/watch.xml
index 4ff783a..8b8fdd7 100755
--- a/gui/theme/common/watch.xml
+++ b/gui/theme/common/watch.xml
@@ -442,7 +442,10 @@
<condition var1="tw_selectimage" var2="1"/>
<condition var1="tw_filename" op="modified"/>
</conditions>
- <action function="page">flashimage_type</action>
+ <actions>
+ <action function="set">tw_is_slot_part=0</action>
+ <action function="page">flashimage_type</action>
+ </actions>
</action>
<action>
@@ -860,6 +863,30 @@
<listtype name="flashimg"/>
</partitionlist>
+ <button style="checkbox">
+ <conditions>
+ <condition var1="tw_is_slot_part" op="=" var2="1"/>
+ <condition var1="tw_flash_both_slots" op="=" var2="0"/>
+ <condition var1="tw_has_boot_slots" var2="1"/>
+ </conditions>
+ <placement x="%col2_x_left%" y="%row11_y%" textplacement="6"/>
+ <text>{@flash_ab_both_slots=Flash to both slots}</text>
+ <image resource="checkbox_false"/>
+ <action function="set">tw_flash_both_slots=1</action>
+ </button>
+
+ <button style="checkbox">
+ <conditions>
+ <condition var1="tw_is_slot_part" op="=" var2="1"/>
+ <condition var1="tw_flash_both_slots" op="=" var2="1"/>
+ <condition var1="tw_has_boot_slots" var2="1"/>
+ </conditions>
+ <placement x="%col2_x_left%" y="%row11_y%" textplacement="6"/>
+ <text>{@flash_ab_both_slots=Flash to both slots}</text>
+ <image resource="checkbox_true"/>
+ <action function="set">tw_flash_both_slots=0</action>
+ </button>
+
<button>
<placement x="%col1_x_left%" y="%row11_y%"/>
<highlight color="%highlight_color%"/>