Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 147d51e7 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "support wrist orientation in recovery/fastbootd" into main am: 9a3616d2

parents e47edd1e 9a3616d2
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -503,6 +503,10 @@ void gr_rotate(GRRotation rot) {
  rotation = rot;
}

GRRotation gr_get_rotation() {
  return rotation;
}

bool gr_has_multiple_connectors() {
  return gr_backend->HasMultipleConnectors();
}
+3 −0
Original line number Diff line number Diff line
@@ -153,6 +153,9 @@ unsigned int gr_get_height(const GRSurface* surface);
// Sets rotation, flips gr_fb_width/height if 90 degree rotation difference
void gr_rotate(GRRotation rotation);

// Get current rotation
GRRotation gr_get_rotation();

// Returns the current PixelFormat being used.
PixelFormat gr_pixel_format();

+2 −0
Original line number Diff line number Diff line
@@ -26,6 +26,8 @@ class WearRecoveryUI : public ScreenRecoveryUI {
 public:
  WearRecoveryUI();

  bool Init(const std::string& locale) override;

  void SetStage(int current, int max) override;

 protected:
+21 −1
Original line number Diff line number Diff line
@@ -197,8 +197,23 @@ bool RecoveryUI::Init(const std::string& /* locale */) {
  return true;
}

enum SwipeDirection { UP, DOWN, RIGHT, LEFT };

static SwipeDirection FlipSwipeDirection(SwipeDirection direction) {
  switch (direction) {
    case UP:
      return SwipeDirection::DOWN;
    case DOWN:
      return SwipeDirection::UP;
    case RIGHT:
      return SwipeDirection::LEFT;
    case LEFT:
      return SwipeDirection::RIGHT;
  }
}

void RecoveryUI::OnTouchDetected(int dx, int dy) {
  enum SwipeDirection { UP, DOWN, RIGHT, LEFT } direction;
  SwipeDirection direction;

  // We only consider a valid swipe if:
  // - the delta along one axis is below touch_low_threshold_;
@@ -219,6 +234,11 @@ void RecoveryUI::OnTouchDetected(int dx, int dy) {
    return;
  }

  // Flip swipe direction if screen is rotated upside down
  if (gr_get_rotation() == GRRotation::DOWN) {
    direction = FlipSwipeDirection(direction);
  }

  LOG(DEBUG) << "Swipe direction=" << direction;
  switch (direction) {
    case SwipeDirection::UP:
+45 −0
Original line number Diff line number Diff line
@@ -22,6 +22,7 @@
#include <string>
#include <vector>

#include <android-base/logging.h>
#include <android-base/properties.h>
#include <android-base/strings.h>

@@ -44,6 +45,50 @@ WearRecoveryUI::WearRecoveryUI()
  touch_screen_allowed_ = true;
}

static void FlipOrientation() {
  auto rotation = gr_get_rotation();
  if (rotation == GRRotation::NONE) {
    gr_rotate(GRRotation::DOWN);
  } else if (rotation == GRRotation::DOWN) {
    gr_rotate(GRRotation::NONE);
  } else {
    LOG(WARNING) << "Unsupported rotation for wrist orientation" << static_cast<int>(rotation);
  }
}

// Match values in
// frameworks/opt/wear/src/com/android/clockwork/wristorientation/WristOrientationService.java
enum class WristOrientation : unsigned {
  LEFT_WRIST_ROTATION_0 = 0,
  LEFT_WRIST_ROTATION_180 = 1,
  RIGHT_WRIST_ROTATION_0 = 2,
  RIGHT_WRIST_ROTATION_180 = 3,
};

static void InitWristOrientation() {
  auto prop = android::base::GetUintProperty("ro.boot.wrist_orientation", 0u);
  WristOrientation orientation{ prop };
  if (orientation == WristOrientation::LEFT_WRIST_ROTATION_180 ||
      orientation == WristOrientation::RIGHT_WRIST_ROTATION_180) {
    LOG(INFO)
        << "InitWristOrientation(): flipping orientation because, 'ro.boot.wrist_orientation'="
        << prop;

    FlipOrientation();
  }
}

bool WearRecoveryUI::Init(const std::string& locale) {
  auto result = ScreenRecoveryUI::Init(locale);
  auto wrist_orientation_enabled =
      android::base::GetBoolProperty("config.enable_wristorientation", false);
  LOG(INFO) << "WearRecoveryUI::Init(): enable_wristorientation=" << wrist_orientation_enabled;
  if (wrist_orientation_enabled) {
    InitWristOrientation();
  }
  return result;
}

// Draw background frame on the screen.  Does not flip pages.
// Should only be called with updateMutex locked.
// TODO merge drawing routines with screen_ui