1
wxr
2021-11-23 1635e5b2e6d853ef5d89f6ca3ef18edece91e7b1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
using Foundation;
using Intents;
using System;
using System.Linq;
 
namespace Other.Siri
{
    public class SceneDateManager : DataManager<NSMutableArray<SiriScene>>
    {
        public SceneDateManager() : base(new UserDefaultsStorageDescriptor(NSUserDefaultsHelper.StorageKeys.OrderHistory), new NSMutableArray<SiriScene>()) { }
 
        // Converts an `Order` into `OrderSoupIntent` and donates it as an 
        // interaction to the system so that this order can be suggested in the 
        // future or turned into a voice shortcut for quickly placing the same 
        // order in the future.
        void DonateInteraction(SiriScene order)
        {
            var interaction = new INInteraction(order.Intent, null);
            interaction.Identifier = order.Id.ToString();
            interaction.DonateInteraction((error) =>
            {
                if (!(error is null))
                {
                    Console.WriteLine($"Interaction donation failed: {error}");
                }
                else
                {
                    Console.WriteLine("Successfully donated interaction.");
                }
            });
        }
 
        #region Public API for clients of `SoupOrderDataManager`
        // Convenience method to access the data with a property name that makes 
        // sense in the caller's context.
        public NSMutableArray<SiriScene> OrderHistory
        {
            get
            {
                return ManagedData as NSMutableArray<SiriScene>;
            }
        }
 
        public void PlaceOrder(SiriScene order)
        {
            // Access to `ManagedDataBackingInstance` is only valid on 
            // `DataAccessQueue`.
            DataAccessQueue.DispatchSync(() =>
            {
                if (ManagedDataBackingInstance.Count == 0)
                {
                    // Getting an error trying to insert at 0 for an empty
                    // NSMutableArray<Order>
                    ManagedDataBackingInstance.Add(order);
                }
                else
                {
                    ManagedDataBackingInstance.Insert(order, 0);
                }
            });
 
            // Access to UserDefaults is gated behind a separate access queue.
            WriteData();
 
            // Donate an interaction to the system.
            DonateInteraction(order);
        }
        #endregion
 
        #region Support methods for unarchiving saved data
        override protected void FinishUnarchiving(NSObject unarchivedData)
        {
            var array = (NSArray)unarchivedData;
            SiriScene[] orders = NSArray.FromArray<SiriScene>(array);
            ManagedDataBackingInstance = new NSMutableArray<SiriScene>(orders);
        }
        #endregion
 
 
        public void SetIsLoginValue(bool value)
        {
            UserDefaults.SetBool(value, NSUserDefaultsHelper.StorageKeys.GLOBAL_GIsLogin);
        }
        public void SetAccessTokenValue(string accessToken)
        {
            UserDefaults.SetString(accessToken, NSUserDefaultsHelper.StorageKeys.GLOBAL_GAccessToken);
        }
        public void SetRefreshTokenValue(string refreshToken)
        {
            UserDefaults.SetString(refreshToken, NSUserDefaultsHelper.StorageKeys.GLOBAL_GRefreshToken);
        }
        public void SetRegionUrlValue(string regionUrl)
        {
            UserDefaults.SetString(regionUrl, NSUserDefaultsHelper.StorageKeys.GLOBAL_GRegionUrl);
        }
    }
}