Files
noo/lib/models/pick_request.dart
T
ayushya 44a23c3632
Build APK / build (push) Successful in 7m40s
Add GET_CONTENT picker support, fix account/login bugs, restyle selection UI
- Let Noo be picked as a source (Files + Photos) by other apps' native
  file/photo pickers via Android's GET_CONTENT intent, mirroring the
  existing "Share to Noo" plumbing: MainActivity.kt/PickIntentService/
  PickRequest, ServerProvider.pickRequest/confirmPick/cancelPick, and
  pick-mode tap handling in FilesView/PhotosView. While picking, the
  bottom nav and MoreTabsButton are restricted to Files/Photos only.
- Fix two account bugs: testConnection() failures no longer delete a
  still-valid stored app password (only an actual 401 does), and
  switchAccount() now retries a nominally-active-but-logged-out account
  instead of no-op'ing - both were silently locking users out of "Continue
  as" with no way back in except removing and re-adding the account
  (now exposed via login_view.dart's inline remove button).
- Fix the login WebView: clear cookies before every load so "Add Account"
  can't silently reuse an existing session, and push it as a
  non-animated route to avoid a known WebView-as-PlatformView black-screen-
  on-pop issue under Impeller.
- Redesign the Files/Photos selection toolbar to take over the top app bar
  entirely (SyncedHeaderScaffold.selectionBar) instead of sitting as a
  second bar under the controls row, with a horizontally-scrollable,
  uniformly-colored actions row and the same one-shot scroll-hint nudge
  the controls row uses.
- Redesign ShareUploadView to share the same SyncedHeaderScaffold chrome
  as every tab, with the uploading-file summary (marqueed via the new
  shared MarqueeTitle widget) and upload button grouped into one
  rounded/elevated bottom sheet.
- Restyle ShareSheet to open on the same DetailsHeader every other
  per-item sheet uses, and fix a couple of small design-language drifts
  (hardcoded text style, a non-rounded icon).
- Settings' account card: icon buttons with tooltips instead of text
  buttons for refresh/logout/remove, divider removed.
2026-09-17 23:36:54 -04:00

35 lines
1.0 KiB
Dart

/// Another app asking Noo (via Android's GET_CONTENT chooser) to pick a
/// file/photo and hand it back - see `PickIntentService`/`MainActivity.kt`.
class PickRequest {
final String mimeType;
final bool allowMultiple;
final String? callerLabel;
const PickRequest({
required this.mimeType,
required this.allowMultiple,
this.callerLabel,
});
factory PickRequest.fromMap(Map<dynamic, dynamic> map) {
return PickRequest(
mimeType: map['mimeType'] as String? ?? '*/*',
allowMultiple: map['allowMultiple'] as bool? ?? false,
callerLabel: map['callerLabel'] as String?,
);
}
/// Whether an item's mime type satisfies this request's filter (which may
/// be a wildcard like `image/*` or the catch-all `*/*`).
bool matches(String? itemMimeType) {
if (mimeType == '*/*') return true;
if (itemMimeType == null) return false;
if (mimeType.endsWith('/*')) {
return itemMimeType.startsWith(
mimeType.substring(0, mimeType.length - 1),
);
}
return itemMimeType == mimeType;
}
}