소스 검색

Merge pull request #1351 from deltachat/last_selected_chat

persist last selected account
bjoern 3 년 전
부모
커밋
5541bb8621
3개의 변경된 파일21개의 추가작업 그리고 4개의 파일을 삭제
  1. 8 0
      deltachat-ios/Controller/SettingsController.swift
  2. 12 4
      deltachat-ios/Controller/WelcomeViewController.swift
  3. 1 0
      deltachat-ios/Helper/Constants.swift

+ 8 - 0
deltachat-ios/Controller/SettingsController.swift

@@ -483,6 +483,7 @@ internal final class SettingsViewController: UITableViewController, ProgressAler
         let selectedAccountId = dcAccounts.getSelected().id
         guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
 
+        let prefs = UserDefaults.standard
         // switch account
         let menu = UIAlertController(title: String.localized("switch_account"), message: nil, preferredStyle: .safeActionSheet)
         for accountId in accountIds {
@@ -491,6 +492,7 @@ internal final class SettingsViewController: UITableViewController, ProgressAler
             title = (selectedAccountId==accountId ? "✔︎ " : "") + title
             menu.addAction(UIAlertAction(title: title, style: .default, handler: { [weak self] _ in
                 guard let self = self else { return }
+                prefs.setValue(selectedAccountId, forKey: Constants.Keys.lastSelectedAccountKey)
                 _ = self.dcAccounts.select(id: accountId)
                 appDelegate.reloadDcContext()
             }))
@@ -499,6 +501,7 @@ internal final class SettingsViewController: UITableViewController, ProgressAler
         // add account
         menu.addAction(UIAlertAction(title: String.localized("add_account"), style: .default, handler: { [weak self] _ in
             guard let self = self else { return }
+            prefs.setValue(selectedAccountId, forKey: Constants.Keys.lastSelectedAccountKey)
             _ = self.dcAccounts.add()
             appDelegate.reloadDcContext()
         }))
@@ -518,6 +521,11 @@ internal final class SettingsViewController: UITableViewController, ProgressAler
                     INInteraction.delete(with: "\(selectedAccountId)", completion: nil)
                     if self.dcAccounts.getAll().isEmpty {
                         _ = self.dcAccounts.add()
+                    } else {
+                        let lastSelectedAccountId = prefs.integer(forKey: Constants.Keys.lastSelectedAccountKey)
+                        if lastSelectedAccountId != 0 {
+                            _ = self.dcAccounts.select(id: lastSelectedAccountId)
+                        }
                     }
                     appDelegate.reloadDcContext()
                 }))

+ 12 - 4
deltachat-ios/Controller/WelcomeViewController.swift

@@ -125,9 +125,13 @@ class WelcomeViewController: UIViewController, ProgressAlertHandler {
     // MARK: - actions
 
     private func createAccountFromQRCode(qrCode: String) {
-        // ensure we're configuring on an empty new account
-        let accountId = dcAccounts.getSelected().isConfigured() ?
-            dcAccounts.add() : dcAccounts.getSelected().id
+        if dcAccounts.getSelected().isConfigured() {
+            UserDefaults.standard.setValue(dcAccounts.getSelected().id, forKey: Constants.Keys.lastSelectedAccountKey)
+
+            // ensure we're configuring on an empty new account
+            _ = dcAccounts.add()
+        }
+        let accountId = dcAccounts.getSelected().id
 
         if accountId != 0 {
             self.dcContext = dcAccounts.get(id: accountId)
@@ -160,7 +164,6 @@ class WelcomeViewController: UIViewController, ProgressAlertHandler {
 
     @objc private func cancelButtonPressed() {
         guard let appDelegate = UIApplication.shared.delegate as? AppDelegate else { return }
-
         // take a bit care on account removal:
         // remove only unconfigured and make sure, there is another account
         // (normally, both checks are not needed, however, some resilience wrt future program-flow-changes seems to be reasonable here)
@@ -172,6 +175,11 @@ class WelcomeViewController: UIViewController, ProgressAlertHandler {
             }
         }
 
+        let lastSelectedAccountId = UserDefaults.standard.integer(forKey: Constants.Keys.lastSelectedAccountKey)
+        if lastSelectedAccountId != 0 {
+            _ = dcAccounts.select(id: lastSelectedAccountId)
+        }
+
         appDelegate.reloadDcContext()
     }
 }

+ 1 - 0
deltachat-ios/Helper/Constants.swift

@@ -9,6 +9,7 @@ struct Constants {
         static let deltachatUserProvidedCredentialsKey = "__DELTACHAT_USER_PROVIDED_CREDENTIALS_KEY__"
         static let deltachatImapEmailKey = "__DELTACHAT_IMAP_EMAIL_KEY__"
         static let deltachatImapPasswordKey = "__DELTACHAT_IMAP_PASSWORD_KEY__"
+        static let lastSelectedAccountKey = "__DELTACHAT_LAST_SELECTED_ACCOUNT_KEY__"
     }
 
     static let notificationIdentifier = "deltachat-ios-local-notifications"