Skip to content

Commit 2320e5b

Browse files
committed
Added media-library support
1 parent 6f94a6a commit 2320e5b

File tree

6 files changed

+77
-1
lines changed

6 files changed

+77
-1
lines changed

Example/PAPermissionsApp.xcodeproj/project.pbxproj

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
objects = {
88

99
/* Begin PBXBuildFile section */
10+
0F5CC48F1F857B5700CCCB54 /* PAMediaLibraryPermissionsCheck.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0F5CC48E1F857B5700CCCB54 /* PAMediaLibraryPermissionsCheck.swift */; };
1011
40B2C1EB1D88851800731B20 /* InfoPlist.strings in Resources */ = {isa = PBXBuildFile; fileRef = 40B2C1EA1D88851800731B20 /* InfoPlist.strings */; };
1112
50E9DCD31D7DC370007D0ED5 /* AppDelegate.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E9DCD21D7DC370007D0ED5 /* AppDelegate.swift */; };
1213
50E9DCD51D7DC370007D0ED5 /* ViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 50E9DCD41D7DC370007D0ED5 /* ViewController.swift */; };
@@ -66,6 +67,7 @@
6667
/* End PBXCopyFilesBuildPhase section */
6768

6869
/* Begin PBXFileReference section */
70+
0F5CC48E1F857B5700CCCB54 /* PAMediaLibraryPermissionsCheck.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = PAMediaLibraryPermissionsCheck.swift; sourceTree = "<group>"; };
6971
40B2C1EA1D88851800731B20 /* InfoPlist.strings */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.plist.strings; path = InfoPlist.strings; sourceTree = "<group>"; };
7072
50E9DCCF1D7DC370007D0ED5 /* PAPermissionsApp.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = PAPermissionsApp.app; sourceTree = BUILT_PRODUCTS_DIR; };
7173
50E9DCD21D7DC370007D0ED5 /* AppDelegate.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AppDelegate.swift; sourceTree = "<group>"; };
@@ -210,6 +212,7 @@
210212
E642C3571DA1798500BC9133 /* PAPermissionsCheck.swift */,
211213
E642C3581DA1798500BC9133 /* PAPhotoLibraryPermissionsCheck.swift */,
212214
E642C3591DA1798500BC9133 /* PAUNNotificationPermissionsCheck.swift */,
215+
0F5CC48E1F857B5700CCCB54 /* PAMediaLibraryPermissionsCheck.swift */,
213216
);
214217
path = Checks;
215218
sourceTree = "<group>";
@@ -362,6 +365,7 @@
362365
E642C3661DA1798500BC9133 /* PAMicrophonePermissionsCheck.swift in Sources */,
363366
E642C36E1DA1798500BC9133 /* PAPermissionsViewController.swift in Sources */,
364367
E642C3671DA1798500BC9133 /* PAMotionFitnessPermissionsCheck.swift in Sources */,
368+
0F5CC48F1F857B5700CCCB54 /* PAMediaLibraryPermissionsCheck.swift in Sources */,
365369
E642C3601DA1798500BC9133 /* PAABAddressBookCheck.swift in Sources */,
366370
E642C36D1DA1798500BC9133 /* PAPermissionsView.swift in Sources */,
367371
E642C36B1DA1798500BC9133 /* PAUNNotificationPermissionsCheck.swift in Sources */,

Example/PAPermissionsApp/CustomPermissionsViewController.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ class CustomPermissionsViewController: PAPermissionsViewController {
1717
let motionFitnessCheck = PAMotionFitnessPermissionsCheck()
1818
let cameraCheck = PACameraPermissionsCheck()
1919
let photoLibraryCheck = PAPhotoLibraryPermissionsCheck()
20+
let mediaLibraryCheck = PAMediaLibraryPermissionsCheck()
2021
lazy var notificationsCheck : PAPermissionsCheck = {
2122
if #available(iOS 10.0, *) {
2223
return PAUNNotificationPermissionsCheck()
@@ -44,12 +45,12 @@ class CustomPermissionsViewController: PAPermissionsViewController {
4445
PAPermissionsItem.itemForType(.calendar, reason: PAPermissionDefaultReason)!,
4546
PAPermissionsItem.itemForType(.reminders, reason: PAPermissionDefaultReason)!,
4647
PAPermissionsItem.itemForType(.contacts, reason: PAPermissionDefaultReason)!,
47-
4848
PAPermissionsItem.itemForType(.bluetooth, reason: PAPermissionDefaultReason)!,
4949
PAPermissionsItem.itemForType(.location, reason: PAPermissionDefaultReason)!,
5050
PAPermissionsItem.itemForType(.microphone, reason: PAPermissionDefaultReason)!,
5151
PAPermissionsItem.itemForType(.motionFitness, reason: PAPermissionDefaultReason)!,
5252
PAPermissionsItem.itemForType(.photoLibrary, reason: PAPermissionDefaultReason)!,
53+
PAPermissionsItem.itemForType(.mediaLibrary, reason: PAPermissionDefaultReason)!,
5354
PAPermissionsItem.itemForType(.notifications, reason: "Required to send you great updates")!,
5455
PAPermissionsItem.itemForType(.camera, reason: PAPermissionDefaultReason)!,
5556
PAPermissionsItem(type: .custom, identifier: "my-custom-permission", title: "Custom Option", reason: "Optional", icon: UIImage(named: "pa_checkmark_icon", in: Bundle(for: PAPermissionsViewController.self), compatibleWith: nil)!, canBeDisabled: true)]
@@ -63,6 +64,7 @@ class CustomPermissionsViewController: PAPermissionsViewController {
6364
PAPermissionsType.microphone.rawValue: self.microphoneCheck,
6465
PAPermissionsType.motionFitness.rawValue: self.motionFitnessCheck,
6566
PAPermissionsType.photoLibrary.rawValue: self.photoLibraryCheck,
67+
PAPermissionsType.mediaLibrary.rawValue: self.mediaLibraryCheck,
6668
PAPermissionsType.camera.rawValue: self.cameraCheck,
6769
PAPermissionsType.notifications.rawValue: self.notificationsCheck,
6870
"my-custom-permission": self.customCheck]

Example/PAPermissionsApp/InfoPlist.strings

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,3 +17,5 @@ NSMicrophoneUsageDescription = "Required to hear your beautiful voice";
1717
NSCameraUsageDescription = "Required to shoot awesome photos";
1818
NSMotionUsageDescription = "Required to monitor motion & fitness";
1919
NSPhotoLibraryUsageDescription = "Required to access your Photo Library";
20+
NSAppleMusicUsageDescription = "Required to access your Media Library";
21+
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
//
2+
// PAMediaLibraryPermissionsCheck.swift
3+
// Pods
4+
//
5+
// Created by Tom Major on 10/04/17.
6+
// template taken from PAPhotoLibraryPermissionsCheck.swift
7+
//
8+
//
9+
10+
import UIKit
11+
import MediaPlayer
12+
13+
public class PAMediaLibraryPermissionsCheck: PAPermissionsCheck {
14+
15+
public override func checkStatus() {
16+
let currentStatus = self.status
17+
18+
if #available(iOS 9.3, *) {
19+
self.updatePermissions(status: MPMediaLibrary.authorizationStatus())
20+
} else {
21+
self.status = .unavailable
22+
}
23+
24+
if self.status != currentStatus {
25+
self.updateStatus()
26+
}
27+
}
28+
29+
public override func defaultAction() {
30+
31+
if #available(iOS 9.3, *) {
32+
// PHPhotoLibrary.requestAuthorization({ (status: MPMediaLibraryAuthorizationStatus) in
33+
MPMediaLibrary.requestAuthorization({ (result) in
34+
self.updatePermissions(status: result)
35+
self.updateStatus()
36+
})
37+
} else {
38+
// Photo Library Only available above iOS 9.2
39+
}
40+
}
41+
42+
@available(iOS 9.3, *)
43+
private func updatePermissions(status: MPMediaLibraryAuthorizationStatus) {
44+
45+
let oldStatus = self.status
46+
47+
switch status {
48+
case .authorized:
49+
self.status = .enabled
50+
case .denied:
51+
self.status = .denied
52+
case .notDetermined:
53+
self.status = .disabled
54+
case .restricted:
55+
self.status = .unavailable
56+
}
57+
58+
if oldStatus == .denied && self.status == .denied {
59+
self.openSettings()
60+
}
61+
}
62+
63+
}

PAPermissions/Classes/PAPermissionsView.swift

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public enum PAPermissionsType: String {
3838
case camera = "camera"
3939
case custom = "custom"
4040
case photoLibrary = "photo library"
41+
case mediaLibrary = "media library"
4142
}
4243

4344
public class PAPermissionsItem {
@@ -70,6 +71,7 @@ public class PAPermissionsItem {
7071
case .contacts: key = Constants.InfoPlistKeys.contacts
7172
case .motionFitness: key = Constants.InfoPlistKeys.motionFitness
7273
case .photoLibrary: key = Constants.InfoPlistKeys.photoLibrary
74+
case .mediaLibrary: key = Constants.InfoPlistKeys.mediaLibrary
7375
case .location:
7476
if let _ = Bundle.main.object(forInfoDictionaryKey: Constants.InfoPlistKeys.locationAlways) {
7577
key = Constants.InfoPlistKeys.locationAlways
@@ -118,6 +120,8 @@ public class PAPermissionsItem {
118120
return PAPermissionsItem(type: type, identifier: type.rawValue, title: NSLocalizedString("Contacts", comment: ""), reason: localReason, icon: UIImage(named: "pa_contacts_icon", in: Bundle(for: PAPermissionsViewController.self), compatibleWith: nil)!, canBeDisabled: false)
119121
case .photoLibrary:
120122
return PAPermissionsItem(type: type, identifier: type.rawValue, title: NSLocalizedString("Photo Library", comment: ""), reason: localReason, icon: UIImage(named: "pa_photo_library_icon", in: Bundle(for: PAPermissionsViewController.self), compatibleWith: nil)!, canBeDisabled: false)
123+
case .mediaLibrary:
124+
return PAPermissionsItem(type: type, identifier: type.rawValue, title: NSLocalizedString("Media Library", comment: ""), reason: localReason, icon: UIImage(named: "pa_photo_library_icon", in: Bundle(for: PAPermissionsViewController.self), compatibleWith: nil)!, canBeDisabled: false)
121125
default:
122126
return nil
123127
}

PAPermissions/Classes/PAPermissionsViewController.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ public enum Constants {
1919
static let microphone = "NSMicrophoneUsageDescription"
2020
static let motionFitness = "NSMotionUsageDescription"
2121
static let photoLibrary = "NSPhotoLibraryUsageDescription"
22+
static let mediaLibrary = "NSAppleMusicUsageDescription"
2223
static let bluetooth = "NSBluetoothPeripheralUsageDescription"
2324
}
2425
}

0 commit comments

Comments
 (0)