1
0
mirror of https://github.com/danog/Telegram.git synced 2024-12-11 08:59:48 +01:00
Telegram/Watch/Extension/TGInputController.m
2016-02-25 01:03:51 +01:00

195 lines
5.7 KiB
Objective-C

#import "TGInputController.h"
#import "TGBridgeCommon.h"
#import "TGInterfaceController.h"
#import "TGFileCache.h"
#import "TGExtensionDelegate.h"
#import "TGBridgePresetsSignals.h"
@implementation TGInputController
+ (void)presentPlainInputControllerForInterfaceController:(TGInterfaceController *)interfaceController completion:(void (^)(NSString *))completion;
{
[interfaceController presentTextInputControllerWithSuggestions:nil allowedInputMode:WKTextInputModePlain completion:^(NSArray *results)
{
if (completion != nil && results.count > 0 && [results.firstObject isKindOfClass:[NSString class]])
completion(results.firstObject);
}];
}
+ (void)presentInputControllerForInterfaceController:(TGInterfaceController *)interfaceController suggestionsForText:(NSString *)text completion:(void (^)(NSString *))completion
{
[interfaceController presentTextInputControllerWithSuggestions:[self suggestionsForText:text] allowedInputMode:WKTextInputModeAllowEmoji completion:^(NSArray *results)
{
if (completion != nil && results.count > 0 && [results.firstObject isKindOfClass:[NSString class]])
completion(results.firstObject);
}];
}
+ (void)presentAudioControllerForInterfaceController:(TGInterfaceController *)interfaceController completion:(void (^)(int64_t, int32_t, NSURL *))completion
{
NSDictionary *options = @
{
WKAudioRecorderControllerOptionsActionTitleKey: TGLocalized(@"Watch.Compose.Send"),
};
int64_t randomId = 0;
arc4random_buf(&randomId, sizeof(int64_t));
NSURL *url = [[TGExtensionDelegate instance].audioCache urlForKey:[NSString stringWithFormat:@"%lld", randomId]];
[interfaceController presentAudioRecorderControllerWithOutputURL:url preset:WKAudioRecorderPresetWideBandSpeech options:options completion:^(BOOL didSave, NSError * _Nullable error)
{
WKAudioFileAsset *asset = [WKAudioFileAsset assetWithURL:url];
if (didSave && !error)
completion(randomId, (int32_t)asset.duration, url);
}];
}
+ (NSArray *)suggestionsForText:(NSString *)text
{
return [self customSuggestions];
}
+ (NSArray *)old_customSuggestions
{
NSString *groupName = [TGBridgeCommon groupName];
NSUserDefaults *defaults = [[NSUserDefaults alloc] initWithSuiteName:groupName];
NSMutableArray *finalSuggestions = [[NSMutableArray alloc] initWithArray:[self generalSuggestions]];
[finalSuggestions addObjectsFromArray:[self laterSuggestions]];
for (NSInteger i = 0; i < 8; i++)
{
NSString *key = [NSString stringWithFormat:@"preset_%d", i + 1];
NSString *preset = [defaults stringForKey:key];
if (preset.length > 0)
[finalSuggestions replaceObjectAtIndex:i withObject:preset];
}
return finalSuggestions;
}
+ (NSArray *)customSuggestions
{
NSArray *presetIdentifiers = [self presetIdentifiers];
NSMutableArray *suggestions = [[NSMutableArray alloc] init];
NSDictionary *customPresets = [self customPresets];
for (NSString *identifier in presetIdentifiers)
{
NSString *preset = customPresets[identifier];
if (preset == nil)
preset = TGLocalized([NSString stringWithFormat:@"Watch.%@", identifier]);
[suggestions addObject:preset];
}
return suggestions;
}
+ (NSDictionary *)customPresets
{
NSData *data = [NSData dataWithContentsOfURL:[TGBridgePresetsSignals presetsURL]];
@try
{
id presets = [NSKeyedUnarchiver unarchiveObjectWithData:data];
if ([presets isKindOfClass:[NSDictionary class]])
return presets;
return nil;
}
@catch (NSException *exception)
{
return nil;
}
}
+ (NSArray *)presetIdentifiers
{
return @
[
@"Suggestion.OK",
@"Suggestion.Thanks",
@"Suggestion.WhatsUp",
@"Suggestion.TalkLater",
@"Suggestion.CantTalk",
@"Suggestion.HoldOn",
@"Suggestion.BRB",
@"Suggestion.OnMyWay"
];
}
+ (NSArray *)composeSuggestions
{
static NSArray *suggestions;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
suggestions = @
[
TGLocalized(@"Watch.Suggestion.WhatsUp"),
TGLocalized(@"Watch.Suggestion.OnMyWay"),
TGLocalized(@"Watch.Suggestion.OK"),
TGLocalized(@"Watch.Suggestion.CantTalk"),
TGLocalized(@"Watch.Suggestion.CallSoon"),
TGLocalized(@"Watch.Suggestion.Thanks")
];
});
return suggestions;
}
+ (NSArray *)generalSuggestions
{
static NSArray *suggestions;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
suggestions = @
[
TGLocalized(@"Watch.Suggestion.OK"),
TGLocalized(@"Watch.Suggestion.Thanks"),
TGLocalized(@"Watch.Suggestion.WhatsUp")
];
});
return suggestions;
}
+ (NSArray *)yesNoSuggestions
{
static NSArray *suggestions;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
suggestions = @
[
TGLocalized(@"Watch.Suggestion.Yes"),
TGLocalized(@"Watch.Suggestion.No"),
TGLocalized(@"Watch.Suggestion.Absolutely"),
TGLocalized(@"Watch.Suggestion.Nope")
];
});
return suggestions;
}
+ (NSArray *)laterSuggestions
{
static NSArray *suggestions;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^
{
suggestions = @
[
TGLocalized(@"Watch.Suggestion.TalkLater"),
TGLocalized(@"Watch.Suggestion.CantTalk"),
TGLocalized(@"Watch.Suggestion.HoldOn"),
TGLocalized(@"Watch.Suggestion.BRB"),
TGLocalized(@"Watch.Suggestion.OnMyWay")
];
});
return suggestions;
}
@end