mirror of
https://github.com/bluekitchen/btstack.git
synced 2025-01-01 00:28:18 +00:00
202 lines
6.0 KiB
Objective-C
202 lines
6.0 KiB
Objective-C
/*
|
|
* Copyright (C) 2011 by Matthias Ringwald
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions
|
|
* are met:
|
|
*
|
|
* 1. Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* 2. Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* 3. Neither the name of the copyright holders nor the names of
|
|
* contributors may be used to endorse or promote products derived
|
|
* from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY MATTHIAS RINGWALD AND CONTRIBUTORS
|
|
* ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
|
|
* FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MATTHIAS
|
|
* RINGWALD OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
|
|
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
|
|
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
|
|
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
|
|
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
|
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF
|
|
* THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
|
* SUCH DAMAGE.
|
|
*
|
|
*/
|
|
|
|
// adapted from Ryan Petrich's Activator preferences bundle
|
|
// https://github.com/rpetrich/libactivator/blob/master/Preferences.m
|
|
|
|
#import <UIKit/UIKit.h>
|
|
#include <dlfcn.h>
|
|
|
|
#import "BluetoothTableViewAdapter.h"
|
|
#import "BluetoothController.h"
|
|
|
|
// instead of #import <Preferences/Preferences.h>, minimal class definition
|
|
@interface PSViewController : NSObject
|
|
- (id)initForContentSize:(CGSize)size;
|
|
- (id)navigationItem;
|
|
- (void)viewWillBecomeVisible:(void *)source;
|
|
- (void)viewWillAppear:(BOOL)animated;
|
|
- (void)viewDidDisappear:(BOOL)animated;
|
|
@end
|
|
|
|
@interface PSViewController (OS32)
|
|
@property (nonatomic, retain) UIView *view;
|
|
- (void)viewDidLoad;
|
|
@end
|
|
|
|
@interface UIDevice (OS32)
|
|
- (BOOL)isWildcat;
|
|
@end
|
|
|
|
@interface BluetoothPSViewController : PSViewController {
|
|
BluetoothTableViewAdapter *tableViewAdapter;
|
|
BluetoothController *bluetoothController;
|
|
UIView *_wrapperView; // for < 3.2
|
|
UITableView *tableView;
|
|
BOOL initialized;
|
|
}
|
|
@end
|
|
|
|
@implementation BluetoothPSViewController
|
|
|
|
- (id)initForContentSize:(CGSize)size
|
|
{
|
|
// NSLog(@"initForContentSize");
|
|
initialized = NO;
|
|
if ([PSViewController instancesRespondToSelector:@selector(initForContentSize:)]) {
|
|
if ((self = [super initForContentSize:size])) {
|
|
CGRect frame;
|
|
frame.origin.x = 0.0f;
|
|
frame.origin.y = 0.0f;
|
|
frame.size = size;
|
|
_wrapperView = [[UIView alloc] initWithFrame:frame];
|
|
}
|
|
return self;
|
|
}
|
|
|
|
return [super init];
|
|
}
|
|
|
|
- (void)dealloc
|
|
{
|
|
// NSLog(@"dealloc");
|
|
|
|
[[BluetoothController sharedInstance] close];
|
|
[[BluetoothController sharedInstance] setListener:nil];
|
|
|
|
[tableViewAdapter release];
|
|
tableView.dataSource = nil;
|
|
tableView.delegate = nil;
|
|
[tableView release];
|
|
|
|
[_wrapperView release];
|
|
|
|
initialized = NO;
|
|
|
|
[super dealloc];
|
|
}
|
|
|
|
- (UIView *)view
|
|
{
|
|
return [super view] ? [super view] : _wrapperView;
|
|
}
|
|
|
|
-(void)myInit{
|
|
|
|
if (initialized) return;
|
|
|
|
initialized = YES;
|
|
|
|
// NSLog(@"myInit");
|
|
|
|
((UINavigationItem*)[super navigationItem]).title = @"BTstack";
|
|
|
|
UIView *view = [self view];
|
|
|
|
tableView = [[UITableView alloc] initWithFrame:view.bounds style:UITableViewStyleGrouped];
|
|
tableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
|
|
|
|
tableViewAdapter = [[BluetoothTableViewAdapter alloc] initWithTableView:tableView];
|
|
tableView.dataSource = tableViewAdapter;
|
|
tableView.delegate = tableViewAdapter;
|
|
|
|
[view addSubview:tableView];
|
|
|
|
[[BluetoothController sharedInstance] setListener:tableViewAdapter];
|
|
[[BluetoothController sharedInstance] open];
|
|
|
|
// register for backgrounding events on iOS 4+
|
|
NSString ** pUIApplicationDidEnterBackgroundNotification = nil;
|
|
NSString ** pUIApplicationWillEnterForegroundNotification = nil;
|
|
|
|
pUIApplicationDidEnterBackgroundNotification = dlsym(RTLD_DEFAULT, "UIApplicationDidEnterBackgroundNotification");
|
|
pUIApplicationWillEnterForegroundNotification = dlsym(RTLD_DEFAULT, "UIApplicationWillEnterForegroundNotification");
|
|
|
|
if (!pUIApplicationDidEnterBackgroundNotification) return;
|
|
if (!pUIApplicationWillEnterForegroundNotification) return;
|
|
|
|
[[NSNotificationCenter defaultCenter]
|
|
addObserver:self
|
|
selector:@selector(didEnterBackground:)
|
|
name:*pUIApplicationDidEnterBackgroundNotification
|
|
object:nil];
|
|
|
|
[[NSNotificationCenter defaultCenter]
|
|
addObserver:self
|
|
selector:@selector(willEnterForeground:)
|
|
name:*pUIApplicationWillEnterForegroundNotification
|
|
object:nil];
|
|
}
|
|
|
|
-(void)didEnterBackground:(id)object{
|
|
// NSLog(@"didEnterBackground");
|
|
// close connection to BTdaemon
|
|
[[BluetoothController sharedInstance] close];
|
|
}
|
|
|
|
-(void)willEnterForeground:(id)object{
|
|
// NSLog(@"willEnterForeground");
|
|
// open connection to BTdaemon
|
|
[self myInit];
|
|
[[BluetoothController sharedInstance] open];
|
|
}
|
|
|
|
|
|
- (void)viewWillAppear:(BOOL)animated
|
|
{
|
|
// NSLog(@"viewWillAppear");
|
|
[super viewWillAppear:animated];
|
|
[self myInit];
|
|
[[BluetoothController sharedInstance] open];
|
|
}
|
|
|
|
- (void)viewWillBecomeVisible:(void *)source
|
|
{
|
|
// NSLog(@"viewWillBecomeVisible %@", source);
|
|
[super viewWillBecomeVisible:source];
|
|
[self myInit];
|
|
}
|
|
|
|
-(void)viewDidDisappear:(BOOL)animated {
|
|
// NSLog(@"viewDidDisappear");
|
|
// close connection to BTdaemon
|
|
[[BluetoothController sharedInstance] close];
|
|
[super viewDidDisappear:animated];
|
|
}
|
|
|
|
-(void)viewDidLoad
|
|
{
|
|
// NSLog(@"viewDidLoad");
|
|
[super viewDidLoad];
|
|
[self myInit];
|
|
}
|
|
@end
|