Recovery選項選單迴圈切換選項

2021-12-29 20:50:34 字數 1764 閱讀 7081

在recovery模式首頁,recovery系統通過呼叫getmenuitems()函式向我們展示了乙個選項列表,當有按鍵操作發生時,系統會通過handlemenukey()函式來處理按鍵操作。通常情況下我們可以通過操作volumeup和volumedown來切換選項。原生環境下,如果當前選項為首項或尾項,我們想要切換至尾項或首項時,不得不頻繁操作volumeup和volumedown進行切換。影響使用者體驗。那麼如果當前選項為首項或尾項時,我們如何通過一次操作進行首尾項的切換呢?

首先我們來看recovery系統處理按鍵的函式handlemenukey()。

int handlemenukey(int key, int visible) else else if (!menu_only) {

chosen_item = action;

ui->endmenu();

return chosen_item;

上面標註為紅色的**也就是recovery系統相應按鍵作出的選項切換的動作。也就是說如果當前使用者按下一次volumeup健,recovery系統就會向上切換選項選單。但是如果當前選項選單處於首項或尾項時,recovery系統就會呼叫screen_ui.cpp中的selectmenu()函式進行進一步的處理。

原始碼位址:

int screenrecoveryui::selectmenu(int sel) {

int old_sel;

pthread_mutex_lock(&updatemutex);

if (show_menu > 0) {

old_sel = menu_sel;

menu_sel = sel;

if (menu_sel < 0) menu_sel = 0;//這裡表示如果當前項為首項,按鍵操作為向上切換時,保持首項不變。

if (menu_sel >= menu_items) menu_sel = menu_items-1;//這裡表示如果當前項為尾項,按鍵操作為向下切換時,保持尾項不變。

sel = menu_sel;

if (menu_sel != old_sel) update_screen_locked();//重繪screen重新整理介面

pthread_mutex_unlock(&updatemutex);

return sel;

上面紅色部分即原生對當前項為首項或尾項時,切換選項所作出的處理。對於處理的方法在上面的備註中已經有相應的注釋。那麼我們想要實現迴圈切換選項的突破口也就是這個函式了。下面是修改後的函式:

int screenrecoveryui::selectmenu(int sel) {

int old_sel;

pthread_mutex_lock(&updatemutex);

if (show_menu > 0) {

old_sel = menu_sel;

menu_sel = sel;

if (menu_sel < 0) {

menu_sel = menu_items-1;//這裡表示如果當前項為首項,按鍵操作為向上切換時,切換至尾項

else if (menu_sel >= menu_items){

menu_sel = 0;//這裡表示如果當前項為尾項,按鍵操作為向下切換時,切換至首項

sel = menu_sel;

if (menu_sel != old_sel) update_screen_locked();//重繪screen重新整理介面

pthread_mutex_unlock(&updatemutex);

return sel;

listView長安出現選項選單

最近自己做了個東西,裡面需要長按listview出現選項選單來進行對這個list的操作,在網上查了許多方法,最後選擇了乙個可以跟list中某個指定的item互動的方法 public class myonitemlongclicklistener implements adapterview.onit...

清除右鍵選單多餘的選項

依次選擇 開始 執行 在 開啟 對話框框中輸入 regedit 單擊 確定 按鈕,開啟 登錄檔編輯器 視窗,展開 hkey classes root shellex contextmenuhandlers 分支,在其下找到要刪除的無用項,然後右鍵單擊該 項,再單擊 刪除 將其刪除即可清除右鍵選單中的...

恢復右鍵選單的「新建」選項

剛剛在用網上下的乙個右鍵選單管理工具,結果折騰的右鍵選單裡面 新建 沒有了,只好求助網路了。還好很快找到了解決辦法 主要就是安裝乙個inf檔案,主要 是 version signature chicago defaultinstall addreg my.add.reg my.add.reg hkc...