summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorandroid-build-team Robot <android-build-team-robot@google.com>2017-06-18 09:30:15 +0200
committerandroid-build-team Robot <android-build-team-robot@google.com>2017-06-18 09:30:15 +0200
commitd844da48bfbdfce819c372a659686b8e2cdbdfa2 (patch)
tree107bcb564994dfcf8df5e9191740847df93ff731
parentrelease-request-46bf7ca6-57e7-44b8-8edc-ea8830c1cb3b-for-git_oc-mr1-release-4090244 snap-temp-L07700000073092334 (diff)
parentMerge "Introduce VR recovery ui" am: 5efe2bca22 am: 850e00951a am: 8daabacce5 (diff)
downloadandroid_bootable_recovery-d844da48bfbdfce819c372a659686b8e2cdbdfa2.tar
android_bootable_recovery-d844da48bfbdfce819c372a659686b8e2cdbdfa2.tar.gz
android_bootable_recovery-d844da48bfbdfce819c372a659686b8e2cdbdfa2.tar.bz2
android_bootable_recovery-d844da48bfbdfce819c372a659686b8e2cdbdfa2.tar.lz
android_bootable_recovery-d844da48bfbdfce819c372a659686b8e2cdbdfa2.tar.xz
android_bootable_recovery-d844da48bfbdfce819c372a659686b8e2cdbdfa2.tar.zst
android_bootable_recovery-d844da48bfbdfce819c372a659686b8e2cdbdfa2.zip
-rw-r--r--Android.mk12
-rw-r--r--OWNERS3
-rw-r--r--recovery.cpp9
-rw-r--r--screen_ui.cpp17
-rw-r--r--screen_ui.h6
-rw-r--r--updater/updater.cpp6
-rw-r--r--vr_device.cpp23
-rw-r--r--vr_ui.cpp56
-rw-r--r--vr_ui.h38
9 files changed, 153 insertions, 17 deletions
diff --git a/Android.mk b/Android.mk
index e619db031..5348e365e 100644
--- a/Android.mk
+++ b/Android.mk
@@ -76,6 +76,7 @@ LOCAL_SRC_FILES := \
rotate_logs.cpp \
screen_ui.cpp \
ui.cpp \
+ vr_ui.cpp \
wear_ui.cpp \
wear_touch.cpp \
@@ -182,6 +183,17 @@ LOCAL_STATIC_LIBRARIES := \
LOCAL_CFLAGS := -Werror
include $(BUILD_STATIC_LIBRARY)
+# vr headset default device
+# ===============================
+include $(CLEAR_VARS)
+
+LOCAL_SRC_FILES := vr_device.cpp
+
+# should match TARGET_RECOVERY_UI_LIB set in BoardConfig.mk
+LOCAL_MODULE := librecovery_ui_vr
+
+include $(BUILD_STATIC_LIBRARY)
+
include \
$(LOCAL_PATH)/applypatch/Android.mk \
$(LOCAL_PATH)/boot_control/Android.mk \
diff --git a/OWNERS b/OWNERS
new file mode 100644
index 000000000..09754c650
--- /dev/null
+++ b/OWNERS
@@ -0,0 +1,3 @@
+enh+aosp-gerrit@google.com
+tbao@google.com
+xunchang@google.com
diff --git a/recovery.cpp b/recovery.cpp
index 122b89d0b..852f1e862 100644
--- a/recovery.cpp
+++ b/recovery.cpp
@@ -53,6 +53,7 @@
#include <healthd/BatteryMonitor.h>
#include <private/android_logger.h> /* private pmsg functions */
#include <private/android_filesystem_config.h> /* for AID_SYSTEM */
+#include <selinux/android.h>
#include <selinux/label.h>
#include <selinux/selinux.h>
#include <ziparchive/zip_archive.h>
@@ -1481,12 +1482,8 @@ int main(int argc, char **argv) {
ui->SetBackground(RecoveryUI::NONE);
if (show_text) ui->ShowText(true);
- struct selinux_opt seopts[] = {
- { SELABEL_OPT_PATH, "/file_contexts" }
- };
-
- sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1);
-
+ sehandle = selinux_android_file_context_handle();
+ selinux_android_set_sehandle(sehandle);
if (!sehandle) {
ui->Print("Warning: No file_contexts\n");
}
diff --git a/screen_ui.cpp b/screen_ui.cpp
index bb2772dd8..61ef5911f 100644
--- a/screen_ui.cpp
+++ b/screen_ui.cpp
@@ -256,6 +256,10 @@ void ScreenRecoveryUI::DrawHorizontalRule(int* y) {
*y += 4;
}
+void ScreenRecoveryUI::DrawHighlightBar(int x, int y, int width, int height) const {
+ gr_fill(x, y, x + width, y + height);
+}
+
void ScreenRecoveryUI::DrawTextLine(int x, int* y, const char* line, bool bold) const {
gr_text(gr_sys_font(), x, *y, line, bold);
*y += char_height_ + 4;
@@ -310,15 +314,14 @@ void ScreenRecoveryUI::draw_screen_locked() {
if (i == menu_sel) {
// Draw the highlight bar.
SetColor(IsLongPress() ? MENU_SEL_BG_ACTIVE : MENU_SEL_BG);
- gr_fill(0, y - 2, gr_fb_width(), y + char_height_ + 2);
+ DrawHighlightBar(0, y - 2, gr_fb_width(), char_height_ + 4);
// Bold white text for the selected item.
SetColor(MENU_SEL_FG);
- gr_text(gr_sys_font(), 4, y, menu_[i], true);
+ DrawTextLine(TEXT_INDENT, &y, menu_[i], true);
SetColor(MENU);
} else {
- gr_text(gr_sys_font(), 4, y, menu_[i], false);
+ DrawTextLine(TEXT_INDENT, &y, menu_[i], false);
}
- y += char_height_ + 4;
}
DrawHorizontalRule(&y);
}
@@ -329,10 +332,11 @@ void ScreenRecoveryUI::draw_screen_locked() {
SetColor(LOG);
int row = (text_top_ + text_rows_ - 1) % text_rows_;
size_t count = 0;
- for (int ty = gr_fb_height() - char_height_;
+ for (int ty = gr_fb_height() - char_height_ - log_bottom_offset_;
ty >= y && count < text_rows_;
ty -= char_height_, ++count) {
- gr_text(gr_sys_font(), 0, ty, text_[row], false);
+ int temp_y = ty;
+ DrawTextLine(0, &temp_y, text_[row], false);
--row;
if (row < 0) row = text_rows_ - 1;
}
@@ -453,6 +457,7 @@ bool ScreenRecoveryUI::InitTextParams() {
gr_font_size(gr_sys_font(), &char_width_, &char_height_);
text_rows_ = gr_fb_height() / char_height_;
text_cols_ = gr_fb_width() / char_width_;
+ log_bottom_offset_ = 0;
return true;
}
diff --git a/screen_ui.h b/screen_ui.h
index a2322c36c..bd99254f6 100644
--- a/screen_ui.h
+++ b/screen_ui.h
@@ -107,6 +107,7 @@ class ScreenRecoveryUI : public RecoveryUI {
// Log text overlay, displayed when a magic key is pressed.
char** text_;
size_t text_col_, text_row_, text_top_;
+ int log_bottom_offset_;
bool show_text;
bool show_text_ever; // has show_text ever been true?
@@ -165,8 +166,9 @@ class ScreenRecoveryUI : public RecoveryUI {
virtual int GetProgressBaseline();
virtual int GetTextBaseline();
- void DrawHorizontalRule(int* y);
- void DrawTextLine(int x, int* y, const char* line, bool bold) const;
+ virtual void DrawHorizontalRule(int* y);
+ virtual void DrawHighlightBar(int x, int y, int width, int height) const;
+ virtual void DrawTextLine(int x, int* y, const char* line, bool bold) const;
void DrawTextLines(int x, int* y, const char* const* lines) const;
};
diff --git a/updater/updater.cpp b/updater/updater.cpp
index f5ff6df91..1d8fa8e92 100644
--- a/updater/updater.cpp
+++ b/updater/updater.cpp
@@ -25,6 +25,7 @@
#include <android-base/logging.h>
#include <android-base/strings.h>
+#include <selinux/android.h>
#include <selinux/label.h>
#include <selinux/selinux.h>
#include <ziparchive/zip_archive.h>
@@ -139,9 +140,8 @@ int main(int argc, char** argv) {
return 6;
}
- struct selinux_opt seopts[] = { { SELABEL_OPT_PATH, "/file_contexts" } };
-
- sehandle = selabel_open(SELABEL_CTX_FILE, seopts, 1);
+ sehandle = selinux_android_file_context_handle();
+ selinux_android_set_sehandle(sehandle);
if (!sehandle) {
fprintf(cmd_pipe, "ui_print Warning: No file_contexts\n");
diff --git a/vr_device.cpp b/vr_device.cpp
new file mode 100644
index 000000000..61e15cbb6
--- /dev/null
+++ b/vr_device.cpp
@@ -0,0 +1,23 @@
+/*
+ * 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.
+ */
+
+#include "device.h"
+#include "vr_ui.h"
+
+Device* make_device() {
+ return new Device(new VrRecoveryUI);
+}
+
diff --git a/vr_ui.cpp b/vr_ui.cpp
new file mode 100644
index 000000000..b2c65e3af
--- /dev/null
+++ b/vr_ui.cpp
@@ -0,0 +1,56 @@
+/*
+ * 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.
+ */
+
+#include "vr_ui.h"
+
+#include <minui/minui.h>
+
+VrRecoveryUI::VrRecoveryUI() :
+ x_offset(400),
+ y_offset(400),
+ stereo_offset(100) {
+}
+
+bool VrRecoveryUI::InitTextParams() {
+ if (gr_init() < 0) {
+ return false;
+ }
+
+ gr_font_size(gr_sys_font(), &char_width_, &char_height_);
+ int mid_divide = gr_fb_width() / 2;
+ text_rows_ = (gr_fb_height() - 2 * y_offset) / char_height_;
+ text_cols_ = (mid_divide - x_offset - stereo_offset) / char_width_;
+ log_bottom_offset_ = gr_fb_height() - 2 * y_offset;
+ return true;
+}
+
+void VrRecoveryUI::DrawHorizontalRule(int* y) {
+ SetColor(MENU);
+ *y += 4;
+ gr_fill(0, *y + y_offset, gr_fb_width(), *y + y_offset + 2);
+ *y += 4;
+}
+
+void VrRecoveryUI::DrawHighlightBar(int x, int y, int width, int height) const {
+ gr_fill(x, y + y_offset, x + width, y + y_offset + height);
+}
+
+void VrRecoveryUI::DrawTextLine(int x, int* y, const char* line, bool bold) const {
+ int mid_divide = gr_fb_width() / 2;
+ gr_text(gr_sys_font(), x + x_offset + stereo_offset, *y + y_offset, line, bold);
+ gr_text(gr_sys_font(), x + x_offset - stereo_offset + mid_divide, *y + y_offset, line, bold);
+ *y += char_height_ + 4;
+}
diff --git a/vr_ui.h b/vr_ui.h
new file mode 100644
index 000000000..85c570815
--- /dev/null
+++ b/vr_ui.h
@@ -0,0 +1,38 @@
+/*
+ * 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.
+ */
+
+#ifndef RECOVERY_VR_UI_H
+#define RECOVERY_VR_UI_H
+
+#include "screen_ui.h"
+
+class VrRecoveryUI : public ScreenRecoveryUI {
+ public:
+ VrRecoveryUI();
+
+ protected:
+ // Pixel offsets to move drawing functions to visible range.
+ // Can vary per device depending on screen size and lens distortion.
+ int x_offset, y_offset, stereo_offset;
+
+ bool InitTextParams() override;
+
+ void DrawHorizontalRule(int* y) override;
+ void DrawHighlightBar(int x, int y, int width, int height) const override;
+ void DrawTextLine(int x, int* y, const char* line, bool bold) const override;
+};
+
+#endif // RECOVERY_VR_UI_H