OtaView

Struct OtaView 

Source
pub struct OtaView {
    id: Id,
    rect: Rectangle,
    children: Vec<Box<dyn View>>,
    view_id: ViewId,
    github_token: Option<SecretString>,
    keyboard_index: Option<usize>,
    pending_download: Option<PendingDownload>,
    status_label_index: Option<usize>,
    progress_bar_index: Option<usize>,
}
Expand description

UI view for downloading and installing OTA updates from GitHub.

Manages two screens:

  1. Source selection dialog - asks where to download from (Stable Release, Main Branch, or PR Build)
  2. PR input screen - prompts for PR number input (only for PR Build)

Once a download starts, the view transitions to a full-screen progress screen showing a status label and a ProgressBar. On successful deployment the label updates to “Rebooting…” and the app reboots automatically via Event::Select with EntryId::Reboot.

When a GitHub token is required but not present, the view pushes a DeviceAuthView child to guide the user through device flow authentication. Once authorized, the pending download resumes automatically.

§Security

The GitHub token is securely stored using SecretString to prevent accidental exposure in logs or debug output.

Fields§

§id: Id§rect: Rectangle§children: Vec<Box<dyn View>>§view_id: ViewId§github_token: Option<SecretString>§keyboard_index: Option<usize>§pending_download: Option<PendingDownload>§status_label_index: Option<usize>

Index into children of the status Label shown during download.

§progress_bar_index: Option<usize>

Index into children of the ProgressBar shown during download.

Implementations§

Source§

impl OtaView

Source

pub fn new(context: &mut Context) -> OtaView

Creates a new OTA view.

Attempts to load a previously saved GitHub token from disk. If none is found the view will prompt for device flow authentication when a token-gated download is requested.

Initially displays the source selection dialog asking where to download updates from.

§Arguments
  • context - Application context containing fonts and device information
Source

fn build_source_selection_dialog(context: &mut Context) -> Dialog

Builds the source selection dialog.

Source

fn build_pr_input_screen(&mut self, context: &mut Context)

Builds the PR input screen with title, input field, and keyboard.

Source

fn build_progress_screen(&mut self, status: &str, context: &mut Context)

Builds the full-screen progress screen shown during download/deployment.

Clears all existing children and adds:

  1. A white full-screen Filler background
  2. A centered Label with the given status text
  3. A centered ProgressBar below the label

The indices of the label and progress bar are stored so they can be updated incrementally as progress events arrive.

Source

fn toggle_keyboard( &mut self, visible: bool, hub: &Hub, rq: &mut RenderQueue, context: &mut Context, )

Toggles keyboard visibility based on focus state.

Source

fn handle_pr_submission( &mut self, text: &str, hub: &Hub, rq: &mut RenderQueue, context: &mut Context, )

Handles submission of PR number from input field.

Validates the input, transitions to the progress screen, and initiates the download. The view stays alive so it can receive progress events and handle token-invalid errors.

Source

fn handle_outside_tap(&self, tap_position: Point, context: &Context, hub: &Hub)

Handles tap gesture outside the dialog and keyboard areas.

Closes the view when user taps outside to dismiss.

§Arguments
  • tap_position - The position where the tap occurred
  • context - Application context containing keyboard rectangle
  • hub - Event hub for sending close event
Source

fn require_github_token( &mut self, pending: PendingDownload, hub: &Hub, rq: &mut RenderQueue, context: &mut Context, ) -> bool

Checks that a GitHub token is available.

Returns true if a token is present and the caller may proceed. If no token is found, pushes a DeviceAuthView child to guide the user through device flow authentication and returns false.

Source

fn start_pr_download(&mut self, pr_number: u32, hub: &Hub)

Initiates the PR artifact download in a background thread.

Sends Event::OtaDownloadProgress during the download. On success, updates the status label to “Rebooting…” and sends Event::Select with EntryId::Reboot to trigger an automatic reboot. On a 401 response, sends Event::Github with GithubEvent::TokenInvalid without closing the view so re-authentication can proceed.

Source

fn start_default_branch_download(&mut self, hub: &Hub)

Initiates the default branch download in a background thread.

Sends Event::OtaDownloadProgress during the download. On success, updates the status label to “Rebooting…” and sends Event::Select with EntryId::Reboot to trigger an automatic reboot. On a 401 response, sends Event::Github with GithubEvent::TokenInvalid without closing the view so re-authentication can proceed.

Source

fn start_stable_release_download(&mut self, hub: &Hub)

Initiates the stable release download in a background thread.

Sends Event::OtaDownloadProgress during the download. On success, updates the status label to “Rebooting…” and sends Event::Select with EntryId::Reboot to trigger an automatic reboot. On a 401 response, sends Event::Github with GithubEvent::TokenInvalid without closing the view so re-authentication can proceed.

GitHub authentication is not required for this operation.

§Arguments
  • hub - Event hub for sending notifications and status updates
Source§

impl OtaView

Source

fn on_select_default_branch( &mut self, hub: &Hub, rq: &mut RenderQueue, context: &mut Context, ) -> bool

Source

fn on_select_stable_release(&mut self, hub: &Hub) -> bool

Source

fn on_show_pr_input( &mut self, hub: &Hub, rq: &mut RenderQueue, context: &mut Context, ) -> bool

Source

fn on_download_progress( &mut self, label: &str, percent: u8, rq: &mut RenderQueue, ) -> bool

Source

fn on_device_auth_complete( &mut self, token: &SecretString, hub: &Hub, rq: &mut RenderQueue, context: &mut Context, ) -> bool

Source

fn on_token_invalid( &mut self, hub: &Hub, rq: &mut RenderQueue, context: &mut Context, ) -> bool

Source

fn on_device_auth_expired(&mut self, hub: &Hub) -> bool

Source

fn on_device_auth_error(&mut self, msg: &str, hub: &Hub) -> bool

Trait Implementations§

Source§

impl View for OtaView

Source§

fn handle_event( &mut self, evt: &Event, hub: &Hub, _bus: &mut Bus, rq: &mut RenderQueue, context: &mut Context, ) -> bool

Source§

fn render( &self, _fb: &mut dyn Framebuffer, _rect: Rectangle, _fonts: &mut Fonts, )

Source§

fn rect(&self) -> &Rectangle

Source§

fn rect_mut(&mut self) -> &mut Rectangle

Source§

fn children(&self) -> &Vec<Box<dyn View>>

Source§

fn children_mut(&mut self) -> &mut Vec<Box<dyn View>>

Source§

fn id(&self) -> Id

Source§

fn view_id(&self) -> Option<ViewId>

Source§

fn resize( &mut self, _rect: Rectangle, _hub: &Hub, _rq: &mut RenderQueue, _context: &mut Context, )

Source§

fn render_rect(&self, _rect: &Rectangle) -> Rectangle

Source§

fn child(&self, index: usize) -> &dyn View

Source§

fn child_mut(&mut self, index: usize) -> &mut dyn View

Source§

fn len(&self) -> usize

Source§

fn might_skip(&self, _evt: &Event) -> bool

Source§

fn might_rotate(&self) -> bool

Source§

fn is_background(&self) -> bool

Auto Trait Implementations§

§

impl Freeze for OtaView

§

impl !RefUnwindSafe for OtaView

§

impl !Send for OtaView

§

impl !Sync for OtaView

§

impl Unpin for OtaView

§

impl !UnwindSafe for OtaView

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more