View index.js
1 2 3 4 5 6 7 8
var btnAction = Ti.UI.createButton({
title:"I'm a button",
backgroundColor:"#e7e7e8",
width:85, height:55, bottom:0, borderColor:"#999"
});
 
$.tbgroup.add(btnAction);
$.tbgroup.open();
View readme.md

This pull request adds support for a Apple Watch Extension to be able to openParentApplication and have a Titanium application reply.

This pull request is related to the Jira ticket TIMOB-18854.

This pull request consists of a few different parts.

1.Application Delegate

This pull request adds a delegate method to Tiapp.m this delegate raises the Ti.App.iOS watchkitextensionrequest event. The userInfo provided by the extension openParentApplication is passed through to the watchkitextensionrequest event. The reply method of the delegate is captured and placed into an NSDictionary. This allows for the reply message to later be called as part of the sendWatchExtensionReply method.

View readme.md

This gist outlines how to use an experimental build of the Ti SDK that includes the delegate needed for openParentApplication support

Steps:

  1. Download the latest master nightly build
  2. You need to replace the following four files in your nightly build with the ones listed below

https://github.com/benbahrenburg/titanium_mobile/blob/ca8083c3a99fd017a6656f33f2c99e0d7118c65c/iphone/Classes/TiApp.h https://github.com/benbahrenburg/titanium_mobile/blob/ca8083c3a99fd017a6656f33f2c99e0d7118c65c/iphone/Classes/TiApp.m https://github.com/benbahrenburg/titanium_mobile/blob/ca8083c3a99fd017a6656f33f2c99e0d7118c65c/iphone/Classes/TiAppiOSProxy.m

View app.js
1 2 3 4 5 6 7 8 9 10
var dir = Ti.Filesystem.getApplicationSupportDirectory();
console.log(dir);
var f = Titanium.Filesystem.getFile(Ti.Filesystem.applicationSupportDirectory);
console.log('Directory Exists: '+ (f.exists() ? 'Yes' : 'No'));
console.log('Needs to be yes to pass'));
 
var testfile = Ti.Filesystem.getFile(Ti.Filesystem.applicationSupportDirectory, 'text.txt');
if(testfile.exists()){
testfile.deleteFile();
}
View app.js
1 2 3 4 5 6 7 8 9 10
//To test the method use the following
 
var dir = Ti.Filesystem.getApplicationSupportDirectory();
console.log(dir);
var f = Titanium.Filesystem.getFile(Ti.Filesystem.applicationSupportDirectory);
console.log('Directory Exists: '+ (f.exists() ? 'Yes' : 'No'));
 
var testfile = Ti.Filesystem.getFile(Ti.Filesystem.applicationSupportDirectory, 'text.txt');
if(testfile.exists()){
testfile.deleteFile();
View gist:4f7794ece60831c14182
1 2 3 4 5 6 7 8 9 10
 
BOOL supportDirExists; // Add class level variable
 
//Update to FilesystemModule.m
//https://github.com/appcelerator/titanium_mobile/blob/master/iphone/Classes/FilesystemModule.m#L132
-(NSString*)applicationSupportDirectory
{
if(!supportDirExists){
NSString *supportDir = [NSSearchPathForDirectoriesInDomains(NSApplicationSupportDirectory, NSUserDomainMask, YES) lastObject];
if ([[NSFileManager defaultManager] fileExistsAtPath:supportDir isDirectory:NULL]) {
View gist:d4efb4fc6a2de91b1ba8
1 2 3 4 5 6 7 8 9 10
private boolean deviceHasPasscodeEnabled()
{
String LOCKSCREEN_UTILS = "com.android.internal.widget.LockPatternUtils";
try
{
Class<?> lockUtilsClass = Class.forName(LOCKSCREEN_UTILS);
// "this" is a Context, in my case an Activity
Object lockUtils = lockUtilsClass.getConstructor(Context.class).newInstance(this);
 
Method method = lockUtilsClass.getMethod("getActivePasswordQuality");
View delete.js
1 2 3 4 5 6 7 8 9 10
function del(id, user, request) {
var table = tables.getTable('noteEvents');
table.where({
id: id, userId : user.userId
}).read({
success: delItems
});
 
function delItems(items) {
if (items.length > 0) {
View read.js
1 2 3 4
function read(query, user, request) {
query.where({ userId: user.userId });
request.execute();
}
View gist:154c9e16180bd04b9a2f
1 2 3 4 5 6 7 8 9
function update(item, user, request) {
var table = tables.getTable('noteEvents');
table.where({
id: item.id,
userId : user.userId
}).read({
success: upsertItem
});
Something went wrong with that request. Please try again.