Explorar o código

MediaEditCell: adjusted the cell to be up to spec

Carola Nitz %!s(int64=6) %!d(string=hai) anos
pai
achega
3c8a00f20c
Modificáronse 22 ficheiros con 210 adicións e 178 borrados
  1. 88 0
      SharedSources/MediaEditCell.xib
  2. 5 0
      SharedSources/MediaLibraryModel/MediaLibraryBaseModel.swift
  3. 2 1
      Sources/MediaCategories/MediaCategoryViewController.swift
  4. 69 0
      Sources/MediaEditCell.swift
  5. 20 25
      Sources/VLCEditController.swift
  6. 0 136
      Sources/VLCMediaViewEditCell.swift
  7. 8 4
      VLC.xcodeproj/project.pbxproj
  8. 6 0
      vlc-ios/Images.xcassets/Library View/Contents.json
  9. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkbox.imageset/checkbox.png
  10. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkbox.imageset/checkbox@2x.png
  11. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkbox.imageset/checkbox@3x.png
  12. 6 6
      vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/Contents.json
  13. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxEmpty.png
  14. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxEmpty@2x.png
  15. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxEmpty@3x.png
  16. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxnotSelected.png
  17. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxnotSelected@2x.png
  18. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxnotSelected@3x.png
  19. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxSelected.imageset/CheckboxSelected.png
  20. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxSelected.imageset/CheckboxSelected@2x.png
  21. BIN=BIN
      vlc-ios/Images.xcassets/Library View/checkboxSelected.imageset/CheckboxSelected@3x.png
  22. 6 6
      vlc-ios/Images.xcassets/Library View/checkbox.imageset/Contents.json

+ 88 - 0
SharedSources/MediaEditCell.xib

@@ -0,0 +1,88 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.XIB" version="3.0" toolsVersion="14113" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" useSafeAreas="YES" colorMatched="YES">
+    <device id="retina4_7" orientation="portrait">
+        <adaptation id="fullscreen"/>
+    </device>
+    <dependencies>
+        <deployment identifier="iOS"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="14088"/>
+        <capability name="Aspect ratio constraints" minToolsVersion="5.1"/>
+        <capability name="Safe area layout guides" minToolsVersion="9.0"/>
+        <capability name="documents saved in the Xcode 8 format" minToolsVersion="8.0"/>
+    </dependencies>
+    <objects>
+        <placeholder placeholderIdentifier="IBFilesOwner" id="-1" userLabel="File's Owner"/>
+        <placeholder placeholderIdentifier="IBFirstResponder" id="-2" customClass="UIResponder"/>
+        <collectionReusableView opaque="NO" clipsSubviews="YES" multipleTouchEnabled="YES" contentMode="center" id="U0b-qz-VRr" customClass="MediaEditCell" customModule="VLC" customModuleProvider="target">
+            <rect key="frame" x="0.0" y="0.0" width="375" height="86"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMaxY="YES"/>
+            <subviews>
+                <stackView opaque="NO" contentMode="scaleToFill" alignment="center" spacing="20" translatesAutoresizingMaskIntoConstraints="NO" id="QHO-Op-40P">
+                    <rect key="frame" x="12" y="12" width="351" height="62"/>
+                    <subviews>
+                        <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" image="checkboxEmpty" translatesAutoresizingMaskIntoConstraints="NO" id="RHG-II-xmF">
+                            <rect key="frame" x="0.0" y="21" width="20" height="20"/>
+                            <constraints>
+                                <constraint firstAttribute="width" constant="20" id="KHh-bO-FPO"/>
+                                <constraint firstAttribute="width" secondItem="RHG-II-xmF" secondAttribute="height" id="p2u-hc-SRe"/>
+                            </constraints>
+                        </imageView>
+                        <imageView userInteractionEnabled="NO" contentMode="scaleToFill" horizontalHuggingPriority="251" verticalHuggingPriority="251" translatesAutoresizingMaskIntoConstraints="NO" id="W4f-6Y-az7">
+                            <rect key="frame" x="40" y="0.0" width="99" height="62"/>
+                            <color key="backgroundColor" white="0.66666666669999997" alpha="1" colorSpace="calibratedWhite"/>
+                            <constraints>
+                                <constraint firstAttribute="width" secondItem="W4f-6Y-az7" secondAttribute="height" multiplier="16:10" id="o2R-2I-WPK"/>
+                            </constraints>
+                        </imageView>
+                        <stackView opaque="NO" contentMode="scaleToFill" axis="vertical" alignment="top" spacing="5" translatesAutoresizingMaskIntoConstraints="NO" id="ZiN-xT-sWh">
+                            <rect key="frame" x="159" y="11.5" width="192" height="39"/>
+                            <subviews>
+                                <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" numberOfLines="2" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="22f-7o-NGo">
+                                    <rect key="frame" x="0.0" y="0.0" width="42" height="20.5"/>
+                                    <fontDescription key="fontDescription" type="system" pointSize="17"/>
+                                    <nil key="textColor"/>
+                                    <nil key="highlightedColor"/>
+                                </label>
+                                <stackView opaque="NO" contentMode="scaleToFill" spacing="8" translatesAutoresizingMaskIntoConstraints="NO" id="Gg7-zE-SB8">
+                                    <rect key="frame" x="0.0" y="25.5" width="68" height="13.5"/>
+                                    <subviews>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="eSL-7g-tbd" userLabel="duration">
+                                            <rect key="frame" x="0.0" y="0.0" width="30" height="13.5"/>
+                                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="11"/>
+                                            <nil key="textColor"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                        <label opaque="NO" userInteractionEnabled="NO" contentMode="left" horizontalHuggingPriority="251" verticalHuggingPriority="251" text="Label" textAlignment="natural" lineBreakMode="tailTruncation" baselineAdjustment="alignBaselines" adjustsFontSizeToFit="NO" translatesAutoresizingMaskIntoConstraints="NO" id="ZKc-bz-v5I" userLabel="Size">
+                                            <rect key="frame" x="38" y="0.0" width="30" height="13.5"/>
+                                            <fontDescription key="fontDescription" type="system" weight="semibold" pointSize="11"/>
+                                            <nil key="textColor"/>
+                                            <nil key="highlightedColor"/>
+                                        </label>
+                                    </subviews>
+                                </stackView>
+                            </subviews>
+                        </stackView>
+                    </subviews>
+                </stackView>
+            </subviews>
+            <constraints>
+                <constraint firstItem="QHO-Op-40P" firstAttribute="top" secondItem="Lgw-oV-ncW" secondAttribute="top" constant="12" id="W5v-NW-IE1"/>
+                <constraint firstItem="QHO-Op-40P" firstAttribute="leading" secondItem="Lgw-oV-ncW" secondAttribute="leading" constant="12" id="caY-MD-M4Q"/>
+                <constraint firstItem="QHO-Op-40P" firstAttribute="bottom" secondItem="Lgw-oV-ncW" secondAttribute="bottom" constant="-12" id="wd3-UE-Kr9"/>
+                <constraint firstItem="Lgw-oV-ncW" firstAttribute="trailing" secondItem="QHO-Op-40P" secondAttribute="trailing" constant="12" id="y6V-5A-beP"/>
+            </constraints>
+            <viewLayoutGuide key="safeArea" id="Lgw-oV-ncW"/>
+            <connections>
+                <outlet property="checkboxImageView" destination="RHG-II-xmF" id="F6Y-7m-fPb"/>
+                <outlet property="sizeLabel" destination="ZKc-bz-v5I" id="wmF-9r-Gew"/>
+                <outlet property="thumbnailImageView" destination="W4f-6Y-az7" id="qx7-8D-QJK"/>
+                <outlet property="timeLabel" destination="eSL-7g-tbd" id="qOK-gw-8qT"/>
+                <outlet property="titleLabel" destination="22f-7o-NGo" id="tOe-hv-WU6"/>
+            </connections>
+            <point key="canvasLocation" x="113.5" y="-207.5"/>
+        </collectionReusableView>
+    </objects>
+    <resources>
+        <image name="checkboxEmpty" width="22" height="22"/>
+    </resources>
+</document>

+ 5 - 0
SharedSources/MediaLibraryModel/MediaLibraryBaseModel.swift

@@ -19,6 +19,7 @@ protocol MediaLibraryBaseModel {
 
     var indicatorName: String { get }
     var cellType: BaseCollectionViewCell.Type { get }
+    var editCellType: BaseCollectionViewCell.Type { get }
 
     func append(_ item: VLCMLObject)
     func delete(_ items: [VLCMLObject])
@@ -46,6 +47,10 @@ protocol MLBaseModel: AnyObject, MediaLibraryBaseModel {
 
 extension MLBaseModel {
 
+    var editCellType: BaseCollectionViewCell.Type {
+        return MediaEditCell.self
+    }
+
     var anyfiles: [VLCMLObject] {
         return files
     }

+ 2 - 1
Sources/MediaCategories/MediaCategoryViewController.swift

@@ -95,7 +95,8 @@ class VLCMediaCategoryViewController: UICollectionViewController, UICollectionVi
     func setupCollectionView() {
         let cellNib = UINib(nibName: category.cellType.nibName, bundle: nil)
         collectionView?.register(cellNib, forCellWithReuseIdentifier: category.cellType.defaultReuseIdentifier)
-        collectionView?.register(VLCMediaViewEditCell.self, forCellWithReuseIdentifier: VLCMediaViewEditCell.identifier)
+        let editCellNib = UINib(nibName: category.editCellType.nibName, bundle: nil)
+        collectionView?.register(editCellNib, forCellWithReuseIdentifier: category.editCellType.defaultReuseIdentifier)
         collectionView?.backgroundColor = PresentationTheme.current.colors.background
         collectionView?.alwaysBounceVertical = true
         if #available(iOS 11.0, *) {

+ 69 - 0
Sources/MediaEditCell.swift

@@ -0,0 +1,69 @@
+/*****************************************************************************
+ * VLCMediaViewEditCell.swift
+ *
+ * Copyright © 2018 VLC authors and VideoLAN
+ * Copyright © 2018 Videolabs
+ *
+ * Authors: Soomin Lee <bubu@mikan.io>
+ *          Carola Nitz <nitz.carola@googlemail.com>
+ *
+ * Refer to the COPYING file of the official project for license.
+ *****************************************************************************/
+
+class MediaEditCell: BaseCollectionViewCell {
+
+    static let height: CGFloat = 88
+
+    @IBOutlet weak var checkboxImageView: UIImageView!
+    @IBOutlet weak var thumbnailImageView: UIImageView!
+    @IBOutlet weak var titleLabel: UILabel!
+    @IBOutlet weak var timeLabel: UILabel!
+    @IBOutlet weak var sizeLabel: UILabel!
+
+    override var media: VLCMLObject? {
+        didSet {
+            guard let media = media as? VLCMLMedia else {
+                fatalError("needs to be of Type VLCMLMedia")
+            }
+            update(media:media)
+        }
+    }
+
+    override func awakeFromNib() {
+        super.awakeFromNib()
+        thumbnailImageView.layer.cornerRadius = 3
+        thumbnailImageView.clipsToBounds = true
+        NotificationCenter.default.addObserver(self, selector: #selector(themeDidChange), name: .VLCThemeDidChangeNotification, object: nil)
+        themeDidChange()
+    }
+
+    @objc fileprivate func themeDidChange() {
+        backgroundColor = PresentationTheme.current.colors.background
+        titleLabel.textColor = PresentationTheme.current.colors.cellTextColor
+        timeLabel.textColor = PresentationTheme.current.colors.cellDetailTextColor
+        sizeLabel.textColor = PresentationTheme.current.colors.cellTextColor
+    }
+
+    func update(media: VLCMLMedia) {
+        titleLabel.text = media.title
+        timeLabel.text = media.mediaDuration()
+        sizeLabel.text = media.formatSize()
+        if media.isThumbnailGenerated() {
+            thumbnailImageView.image = UIImage(contentsOfFile: media.thumbnail.absoluteString)
+        }
+    }
+
+    var isChecked: Bool = false {
+         didSet {
+            checkboxImageView.image = isChecked ? UIImage(named: "checkboxEmpty") : UIImage(named: "checkboxSelected")
+        }
+    }
+
+    override func prepareForReuse() {
+        super.prepareForReuse()
+        titleLabel.text = ""
+        timeLabel.text = ""
+        sizeLabel.text = ""
+        thumbnailImageView.image = nil
+    }
+}

+ 20 - 25
Sources/VLCEditController.swift

@@ -18,21 +18,21 @@ class VLCEditController: NSObject {
     private let collectionView: UICollectionView
     private let category: MediaLibraryBaseModel
 
-//    private lazy var editToolbar: VLCEditToolbar = {
-//        let editToolbar = VLCEditToolbar(frame: CGRect(x: 0, y: 400,
-//                                                       width: collectionView.frame.width, height: 50))
-//        editToolbar.isHidden = true
-//        editToolbar.delegate = self
-//        return editToolbar
-//    }()
+    private lazy var editToolbar: VLCEditToolbar = {
+        let editToolbar = VLCEditToolbar(frame: CGRect(x: 0, y: 400,
+                                                       width: collectionView.frame.width, height: 50))
+        editToolbar.isHidden = true
+        editToolbar.delegate = self
+        return editToolbar
+    }()
 
     init(collectionView: UICollectionView, category: MediaLibraryBaseModel) {
         self.collectionView = collectionView
         self.category = category
         super.init()
 
-//        collectionView.addSubview(editToolbar)
-//        collectionView.bringSubview(toFront: editToolbar)
+        collectionView.addSubview(editToolbar)
+        collectionView.bringSubview(toFront: editToolbar)
     }
 }
 
@@ -40,15 +40,14 @@ class VLCEditController: NSObject {
 
 private extension VLCEditController {
     private func resetCell(at indexPath: IndexPath) {
-        if let cell = collectionView.cellForItem(at: indexPath) as? VLCMediaViewEditCell {
-            cell.checkView.isEnabled = false
+        if let cell = collectionView.cellForItem(at: indexPath) as? MediaEditCell {
+            cell.isChecked = false
         }
-        collectionView.reloadData()
     }
 
     private func resetAllVisibleCell() {
-        for case let cell as VLCMediaViewEditCell in collectionView.visibleCells {
-            cell.checkView.isEnabled = false
+        for case let cell as MediaEditCell in collectionView.visibleCells {
+            cell.isChecked = false
         }
     }
 
@@ -192,13 +191,9 @@ extension VLCEditController: UICollectionViewDataSource {
     }
 
     func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
-        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: VLCMediaViewEditCell.identifier,
-                                                         for: indexPath) as? VLCMediaViewEditCell {
-            if let media = category.anyfiles[indexPath.row] as? VLCMLMedia {
-                cell.titleLabel.text = media.title
-                cell.subInfoLabel.text = media.mediaDuration()
-                cell.sizeLabel.text = media.formatSize()
-            }
+        if let cell = collectionView.dequeueReusableCell(withReuseIdentifier: category.editCellType.defaultReuseIdentifier,
+                                                         for: indexPath) as? BaseCollectionViewCell {
+            cell.media = category.anyfiles[indexPath.row]
             return cell
         }
         return UICollectionViewCell()
@@ -209,9 +204,9 @@ extension VLCEditController: UICollectionViewDataSource {
 
 extension VLCEditController: UICollectionViewDelegate {
     func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
-        if let cell = collectionView.cellForItem(at: indexPath) as? VLCMediaViewEditCell {
-            cell.checkView.isEnabled = !cell.checkView.isEnabled
-            if cell.checkView.isEnabled {
+        if let cell = collectionView.cellForItem(at: indexPath) as? MediaEditCell {
+            cell.isChecked = !cell.isChecked
+            if cell.isChecked {
                 // cell selected, saving indexPath
                 selectedCellIndexPaths.insert(indexPath)
             } else {
@@ -228,6 +223,6 @@ extension VLCEditController: UICollectionViewDelegateFlowLayout {
         let contentInset = collectionView.contentInset
         // FIXME: 5 should be cell padding, but not usable maybe static?
         let insetToRemove = contentInset.left + contentInset.right + (5 * 2)
-        return CGSize(width: collectionView.frame.width - insetToRemove, height: VLCMediaViewEditCell.height)
+        return CGSize(width: collectionView.frame.width - insetToRemove, height: MediaEditCell.height)
     }
 }

+ 0 - 136
Sources/VLCMediaViewEditCell.swift

@@ -1,136 +0,0 @@
-/*****************************************************************************
- * VLCMediaViewEditCell.swift
- *
- * Copyright © 2018 VLC authors and VideoLAN
- * Copyright © 2018 Videolabs
- *
- * Authors: Soomin Lee <bubu@mikan.io>
- *
- * Refer to the COPYING file of the official project for license.
- *****************************************************************************/
-
-struct VLCCheckView {
-    var isEnabled: Bool {
-        didSet {
-            let backgroundColor: UIColor = isEnabled ? .orange : .clear
-            let borderColor: UIColor = isEnabled ? .clear : .lightGray
-            view.backgroundColor = backgroundColor
-            view.layer.borderColor = borderColor.cgColor
-        }
-    }
-
-    var view: UIView = {
-        let view = UIView(frame: CGRect(x: 0, y: 0, width: 20, height: 20))
-        view.translatesAutoresizingMaskIntoConstraints = false
-        view.clipsToBounds = true
-        view.layer.cornerRadius = view.frame.width / 2
-        view.layer.borderColor = UIColor.lightGray.cgColor
-        view.layer.borderWidth = 1
-        return view
-    }()
-
-    init(isEnabled: Bool) {
-        self.isEnabled = isEnabled
-    }
-}
-
-class VLCMediaViewEditCell: UICollectionViewCell {
-
-    static let identifier = String(describing: VLCMediaViewEditCell.self)
-
-    static let height: CGFloat = 56
-
-    var checkView = VLCCheckView(isEnabled: false)
-
-    let thumbnailImageView: UIImageView = {
-        let thumbnailImageView = UIImageView()
-        thumbnailImageView.translatesAutoresizingMaskIntoConstraints = false
-        thumbnailImageView.contentMode = .scaleAspectFit
-        thumbnailImageView.clipsToBounds = true
-        thumbnailImageView.layer.cornerRadius = 3
-        return thumbnailImageView
-    }()
-
-    let titleLabel: UILabel = {
-        let titleLabel = UILabel()
-        titleLabel.textColor = PresentationTheme.current.colors.cellTextColor
-        titleLabel.font = UIFont.systemFont(ofSize: 17)
-        titleLabel.translatesAutoresizingMaskIntoConstraints = false
-        return titleLabel
-    }()
-
-    let subInfoLabel: UILabel = {
-        let subInfoLabel = UILabel()
-        subInfoLabel.textColor = PresentationTheme.current.colors.cellTextColor
-        subInfoLabel.font = UIFont.systemFont(ofSize: 13)
-        subInfoLabel.translatesAutoresizingMaskIntoConstraints = false
-        return subInfoLabel
-    }()
-
-    let sizeLabel: UILabel = {
-        let sizeLabel = UILabel()
-        sizeLabel.textColor = PresentationTheme.current.colors.cellTextColor
-        sizeLabel.font = UIFont.systemFont(ofSize: 11)
-        sizeLabel.translatesAutoresizingMaskIntoConstraints = false
-        return sizeLabel
-    }()
-
-    let mainStackView: UIStackView = {
-        let mainStackView = UIStackView()
-        mainStackView.spacing = 20.0
-        mainStackView.axis = .horizontal
-        mainStackView.alignment = .center
-        mainStackView.translatesAutoresizingMaskIntoConstraints = false
-        return mainStackView
-    }()
-
-    let mediaInfoStackView: UIStackView = {
-        let mediaInfoStackView = UIStackView()
-        mediaInfoStackView.spacing = 5.0
-        mediaInfoStackView.axis = .vertical
-        mediaInfoStackView.alignment = .leading
-        mediaInfoStackView.translatesAutoresizingMaskIntoConstraints = false
-        return mediaInfoStackView
-    }()
-
-    override init(frame: CGRect) {
-        super.init(frame: frame)
-        setupViews()
-    }
-
-    required init?(coder aDecoder: NSCoder) {
-        super.init(coder: aDecoder)
-        setupViews()
-    }
-
-    private func setupViews() {
-
-        mediaInfoStackView.addArrangedSubview(titleLabel)
-        mediaInfoStackView.addArrangedSubview(subInfoLabel)
-        mediaInfoStackView.addArrangedSubview(sizeLabel)
-
-        mainStackView.addArrangedSubview(checkView.view)
-        mainStackView.addArrangedSubview(thumbnailImageView)
-        mainStackView.addArrangedSubview(mediaInfoStackView)
-
-        addSubview(mainStackView)
-
-        var guide: LayoutAnchorContainer = self
-
-        if #available(iOS 11.0, *) {
-            guide = safeAreaLayoutGuide
-        }
-        NSLayoutConstraint.activate([
-            checkView.view.heightAnchor.constraint(equalToConstant: 20),
-            checkView.view.widthAnchor.constraint(equalTo: checkView.view.heightAnchor),
-
-            thumbnailImageView.heightAnchor.constraint(equalToConstant: VLCMediaViewEditCell.height),
-            thumbnailImageView.widthAnchor.constraint(equalTo: thumbnailImageView.heightAnchor),
-
-            mainStackView.leadingAnchor.constraint(equalTo: guide.leadingAnchor, constant: 20),
-            mainStackView.trailingAnchor.constraint(equalTo: guide.trailingAnchor, constant: -20),
-            mainStackView.heightAnchor.constraint(equalTo: heightAnchor),
-            mainStackView.topAnchor.constraint(equalTo: topAnchor)
-            ])
-    }
-}

+ 8 - 4
VLC.xcodeproj/project.pbxproj

@@ -47,6 +47,7 @@
 		419A2C661F37A4B70069D224 /* VLCStringsForLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = 419A2C651F37A4B70069D224 /* VLCStringsForLocalization.m */; };
 		419A2C681F37A4B70069D224 /* VLCStringsForLocalization.m in Sources */ = {isa = PBXBuildFile; fileRef = 419A2C651F37A4B70069D224 /* VLCStringsForLocalization.m */; };
 		419D7F051F54176900AF69A2 /* VLCTimeNavigationTitleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = 419D7F041F54176900AF69A2 /* VLCTimeNavigationTitleView.xib */; };
+		41B4DA3E21400E8E000BA27D /* MediaEditCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41B4DA3D21400E8E000BA27D /* MediaEditCell.xib */; };
 		41B93C011A53833B00102E8B /* VLCProgressView.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B93C001A53833B00102E8B /* VLCProgressView.m */; };
 		41B93C051A53835300102E8B /* VLCCloudServiceCell.m in Sources */ = {isa = PBXBuildFile; fileRef = 41B93C031A53835300102E8B /* VLCCloudServiceCell.m */; };
 		41B93C081A53853B00102E8B /* VLCCloudServiceCell.xib in Resources */ = {isa = PBXBuildFile; fileRef = 41B93C071A53853B00102E8B /* VLCCloudServiceCell.xib */; };
@@ -248,7 +249,7 @@
 		7DF90B4A1BE7A8110059C0E3 /* IASKSettingsReader.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF90B471BE7A8110059C0E3 /* IASKSettingsReader.m */; };
 		7DF90B4B1BE7A8110059C0E3 /* IASKSpecifier.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF90B491BE7A8110059C0E3 /* IASKSpecifier.m */; };
 		7DF9352F1958AB0600E60FD4 /* UIColor+Presets.m in Sources */ = {isa = PBXBuildFile; fileRef = 7DF9352E1958AB0600E60FD4 /* UIColor+Presets.m */; };
-		8D222DC220F779F1009C0D34 /* VLCMediaViewEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D222DC120F779F1009C0D34 /* VLCMediaViewEditCell.swift */; };
+		8D222DC220F779F1009C0D34 /* MediaEditCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D222DC120F779F1009C0D34 /* MediaEditCell.swift */; };
 		8D43712D2056AF1600F36458 /* VLCRendererDiscovererManager.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D43712C2056AF1600F36458 /* VLCRendererDiscovererManager.swift */; };
 		8D437154205808FF00F36458 /* VLCActionSheet.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D437153205808FF00F36458 /* VLCActionSheet.swift */; };
 		8D4F9B472141630000E478BE /* MediaModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = 8D4F9B462141630000E478BE /* MediaModel.swift */; };
@@ -547,6 +548,7 @@
 		419D7F041F54176900AF69A2 /* VLCTimeNavigationTitleView.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = VLCTimeNavigationTitleView.xib; path = Resources/VLCTimeNavigationTitleView.xib; sourceTree = SOURCE_ROOT; };
 		41B0BC861F73ED7D0063BA26 /* VLC-iOSUITests.xctest */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = "VLC-iOSUITests.xctest"; sourceTree = BUILT_PRODUCTS_DIR; };
 		41B0BC8A1F73ED7D0063BA26 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = "<group>"; };
+		41B4DA3D21400E8E000BA27D /* MediaEditCell.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = MediaEditCell.xib; path = SharedSources/MediaEditCell.xib; sourceTree = "<group>"; };
 		41B93BFF1A53833B00102E8B /* VLCProgressView.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCProgressView.h; path = Sources/VLCProgressView.h; sourceTree = SOURCE_ROOT; };
 		41B93C001A53833B00102E8B /* VLCProgressView.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = VLCProgressView.m; path = Sources/VLCProgressView.m; sourceTree = SOURCE_ROOT; };
 		41B93C021A53835300102E8B /* VLCCloudServiceCell.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; name = VLCCloudServiceCell.h; path = Sources/VLCCloudServiceCell.h; sourceTree = SOURCE_ROOT; };
@@ -913,7 +915,7 @@
 		7DF9352E1958AB0600E60FD4 /* UIColor+Presets.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; name = "UIColor+Presets.m"; path = "Sources/UIColor+Presets.m"; sourceTree = SOURCE_ROOT; };
 		7FC9CCF39DD8843873A42D34 /* Pods-VLC-iOSTests.release.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC-iOSTests.release.xcconfig"; path = "Pods/Target Support Files/Pods-VLC-iOSTests/Pods-VLC-iOSTests.release.xcconfig"; sourceTree = "<group>"; };
 		8C707B9BB2C5681D50CC9B99 /* Pods-VLC-tvOS-Debug.distribution.xcconfig */ = {isa = PBXFileReference; includeInIndex = 1; lastKnownFileType = text.xcconfig; name = "Pods-VLC-tvOS-Debug.distribution.xcconfig"; path = "Pods/Target Support Files/Pods-VLC-tvOS-Debug/Pods-VLC-tvOS-Debug.distribution.xcconfig"; sourceTree = "<group>"; };
-		8D222DC120F779F1009C0D34 /* VLCMediaViewEditCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = VLCMediaViewEditCell.swift; path = Sources/VLCMediaViewEditCell.swift; sourceTree = "<group>"; };
+		8D222DC120F779F1009C0D34 /* MediaEditCell.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = MediaEditCell.swift; path = Sources/MediaEditCell.swift; sourceTree = "<group>"; };
 		8D43712C2056AF1600F36458 /* VLCRendererDiscovererManager.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; name = VLCRendererDiscovererManager.swift; path = Sources/VLCRendererDiscovererManager.swift; sourceTree = "<group>"; };
 		8D437153205808FF00F36458 /* VLCActionSheet.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = VLCActionSheet.swift; sourceTree = "<group>"; };
 		8D4F9B462141630000E478BE /* MediaModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MediaModel.swift; sourceTree = "<group>"; };
@@ -1453,9 +1455,10 @@
 				8DD651B0208F62B70052EE68 /* VLCActionSheet */,
 				4144156920ECD2620078EC37 /* VLCSectionTableHeaderView.swift */,
 				4144156B20ECE6330078EC37 /* VLCFileServerSectionTableHeaderView.swift */,
-				8D222DC120F779F1009C0D34 /* VLCMediaViewEditCell.swift */,
+				8D222DC120F779F1009C0D34 /* MediaEditCell.swift */,
 				8DF9669C2113317100D0FCD6 /* VLCEditToolbar.swift */,
 				8DF966B021188BDB00D0FCD6 /* VLCEditController.swift */,
+				41B4DA3D21400E8E000BA27D /* MediaEditCell.xib */,
 			);
 			name = "UI Elements";
 			sourceTree = "<group>";
@@ -2816,6 +2819,7 @@
 				7DF04F4F1961F2B8004A5429 /* web-open-fixed.png in Resources */,
 				7DBBF19A183AB4300009A339 /* VLCCloudStorageTableViewCell~ipad.xib in Resources */,
 				7D1516421868D7E0004B18F3 /* VLCFirstStepsFifthPageViewController.xib in Resources */,
+				41B4DA3E21400E8E000BA27D /* MediaEditCell.xib in Resources */,
 				7D9870641A3E03D5009CF27D /* papasscode_background.png in Resources */,
 				7D0117F1187F4BA400C5671C /* VLCFirstStepsFirstPageViewController~ipad.xib in Resources */,
 				7D63C1991877504B00BD5256 /* VLCFirstStepsSixthPageViewController~ipad.xib in Resources */,
@@ -3148,7 +3152,7 @@
 				413EC98B201B4F2C00BF412F /* PresentationTheme.swift in Sources */,
 				DD1CB0321BB9E005006EDDE6 /* VLCMovieViewControlPanelView.m in Sources */,
 				DDF908D01CF4CCAA00108B70 /* VLCNetworkLoginViewButtonCell.m in Sources */,
-				8D222DC220F779F1009C0D34 /* VLCMediaViewEditCell.swift in Sources */,
+				8D222DC220F779F1009C0D34 /* MediaEditCell.swift in Sources */,
 				DD3EFF3D1BDEBCE500B68579 /* VLCLocalNetworkServiceBrowserHTTP.m in Sources */,
 				DDEAECBE1BDEBF6700756C83 /* VLCNetworkServerLoginInformation.m in Sources */,
 				418DFE9F211C93C6005D3652 /* VLCPlaybackController+VLCDialogProvider.swift in Sources */,

+ 6 - 0
vlc-ios/Images.xcassets/Library View/Contents.json

@@ -0,0 +1,6 @@
+{
+  "info" : {
+    "version" : 1,
+    "author" : "xcode"
+  }
+}

BIN=BIN
vlc-ios/Images.xcassets/Library View/checkbox.imageset/checkbox.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkbox.imageset/checkbox@2x.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkbox.imageset/checkbox@3x.png


+ 6 - 6
vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "checkboxEmpty.png"
+      "filename" : "checkboxnotSelected.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "scale" : "2x",
-      "filename" : "checkboxEmpty@2x.png"
+      "filename" : "checkboxnotSelected@2x.png",
+      "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "checkboxEmpty@3x.png"
+      "filename" : "checkboxnotSelected@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {

BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxEmpty.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxEmpty@2x.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxEmpty@3x.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxnotSelected.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxnotSelected@2x.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxEmpty.imageset/checkboxnotSelected@3x.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxSelected.imageset/CheckboxSelected.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxSelected.imageset/CheckboxSelected@2x.png


BIN=BIN
vlc-ios/Images.xcassets/Library View/checkboxSelected.imageset/CheckboxSelected@3x.png


+ 6 - 6
vlc-ios/Images.xcassets/Library View/checkbox.imageset/Contents.json

@@ -2,18 +2,18 @@
   "images" : [
     {
       "idiom" : "universal",
-      "scale" : "1x",
-      "filename" : "checkbox.png"
+      "filename" : "CheckboxSelected.png",
+      "scale" : "1x"
     },
     {
       "idiom" : "universal",
-      "scale" : "2x",
-      "filename" : "checkbox@2x.png"
+      "filename" : "CheckboxSelected@2x.png",
+      "scale" : "2x"
     },
     {
       "idiom" : "universal",
-      "scale" : "3x",
-      "filename" : "checkbox@3x.png"
+      "filename" : "CheckboxSelected@3x.png",
+      "scale" : "3x"
     }
   ],
   "info" : {