Quantcast
Channel: Appcelerator Developer Center Q&A Unanswered Questions 20
Viewing all articles
Browse latest Browse all 8068

Reading and displaying from the native calendar

$
0
0

Hello, I am using Titanium Studio Classic to make an app. Right now, I am trying to figure out how to display calendar events from the native calendar in my app. I am wanting to display the information(events and reminders) in a list separated by category that is easy for users to understand. I have read the documentation on Calendar and have tried out the code in the documentation but the result is not very readable and if there is a way to organize the information better that would be helpful.

Code part 1 of 2:

function CalendarPage() {
    var win = Ti.UI.createWindow({
        backgroundColor: '#A6B97B',
        layout: 'vertical',
        navBarHidden : true
    });
 
    var ButtonBar = require("/uiElements/ButtonBar");
    var buttonBar = new ButtonBar();
    win.add(buttonBar);
 
    buttonBar.addEventListener('onClick', function(e) {
        Ti.API.info("button "+e.id+" clicked");
    });
 
    var Button = require('/uiElements/Button');
    var leftButton = new Button('signInButton');
    var rightButton = new Button('settingsButton');
 
    win.setLeftNavButton(leftButton);
    win.setRightNavButton(rightButton);
 
    leftButton.addEventListener('click', function(e){
        Ti.API.info("leftButton clicked");
    });
    //Button Bar 2
 
var ButtonBar2 = require("/uiElements/ButtonBar2");
var buttonBar2 = new ButtonBar2();
win.add(buttonBar2);
 
buttonBar2.addEventListener('onClick', function(e) {
    Ti.API.info("button "+e.id+" clicked");
});
 
var SecondSetButton = require('/uiElements/Button2');
var leftButton2 = new SecondSetButton('backButton');
var rightButton2 = new SecondSetButton('logsButton');
 
win.setLeftNavButton(leftButton2);
win.setRightNavButton(rightButton2);
 
leftButton2.addEventListener('click', function(e){
    Ti.API.info("leftButton clicked");
});
 
var calendars = [];
var selectedCalendarName;
var selectedid;
var pickerData = [];
var osname = Ti.Platform.osname;
 
//**read events from calendar*******
function performCalendarReadFunctions(){
    var scrollView = Ti.UI.createScrollView({
      backgroundColor: '#eee',
      height: 500,
      top: 20
    });
 
    var label = Ti.UI.createLabel({
      backgroundColor: 'white',
      text: 'Click on the button to display the events for the selected calendar',
      textAlign: Ti.UI.TEXT_ALIGNMENT_CENTER,
      top: 20
    });
    scrollView.add(label);
 
    var selectableCalendars = Ti.Calendar.allCalendars;
    for (var i = 0, ilen = selectableCalendars.length; i < ilen; i++) {
      calendars.push({ name: selectableCalendars[i].name, id: selectableCalendars[i].id });
      pickerData.push( Ti.UI.createPickerRow({ title: calendars[i].name }) );
      if(i === 0){
        selectedCalendarName = selectableCalendars[i].name;
        selectedid = selectableCalendars[i].id;
      }
    }
 
    if(!calendars.length){
      label.text = 'No calendars available. Select at least one in the native calendar before using this app';
    } else {
      label.text = 'Click button to view calendar events';
 
      var picker = Ti.UI.createPicker({
        top:20
      });
 
      picker.add(pickerData);
      win.add(picker);
 
      picker.addEventListener('change', function(e){
        for (var i = 0, ilen = calendars.length; i < ilen; i++) {
          if(calendars[i].name === e.row.title){
            selectedCalendarName = calendars[i].name;
            selectedid = calendars[i].id;
            Ti.API.info('Selected calendar that we are going to fetch is :: '+ selectedid + ' name:' + selectedCalendarName);
          }
        }
      });
 
      var button = Ti.UI.createButton({
        title: 'View events',
        top: 20
      });
      win.add(button);
 
      button.addEventListener('click', function(e){
        label.text = 'Generating...';
 
        var currentYear = new Date().getFullYear();
 
        var consoleString = '';
 
        function print(s) {
          if (consoleString.length) {
            consoleString = consoleString + '\n';
          }
          consoleString = consoleString + s;
        }
 
        var calendar = Ti.Calendar.getCalendarById(selectedid);
        Ti.API.info('Calendar was of type' + calendar);
        Ti.API.info('calendar that we are going to fetch is :: '+ calendar.id + ' name:' + calendar.name);
 
        function printReminder(r) {
            if (osname === 'android') {
                var typetext = '[method unknown]';
                if (r.method == Ti.Calendar.METHOD_EMAIL) {
                    typetext = 'Email';
                } else if (r.method == Ti.Calendar.METHOD_SMS) {
                    typetext = 'SMS';
                } else if (r.method == Ti.Calendar.METHOD_ALERT) {
                    typetext = 'Alert';
                } else if (r.method == Ti.Calendar.METHOD_DEFAULT) {
                    typetext = '[default reminder method]';
                }
                print(typetext + ' reminder to be sent ' + r.minutes + ' minutes before the event');
            }
        }
 
        function printAlert(a) {
            if (osname === 'android') {
                print('Alert id ' + a.id + ' begin ' + a.begin + '; end ' + a.end + '; alarmTime ' + a.alarmTime + '; minutes ' + a.minutes);
            } else if (osname === 'iphone' || osname === 'ipad') {
                print('Alert absoluteDate ' + a.absoluteDate + ' relativeOffset ' + a.relativeOffset);
            }
        }
Part 2 of 2:
function printEvent(event) {
          if (event.allDay) {
            print('Event: ' + event.title + '; ' + event.begin + ' (all day)');
          } else {
            print('Event: ' + event.title + '; ' + event.begin + ' ' + event.begin+ '-' + event.end);
          }
 
          var reminders = event.reminders;
          if (reminders && reminders.length) {
            print('There is/are ' + reminders.length + ' reminder(s)');
            for (var i = 0; i < reminders.length; i++) {
                printReminder(reminders[i]);
            }
          }
          print('hasAlarm? ' + event.hasAlarm);
          var alerts = event.alerts;
          if (alerts && alerts.length) {
            for (var i = 0; i < alerts.length; i++) {
              printAlert(alerts[i]);
            }
          }
 
          var status = event.status;
          if (status == Ti.Calendar.STATUS_TENTATIVE) {
            print('This event is tentative');
          }
          if (status == Ti.Calendar.STATUS_CONFIRMED) {
            print('This event is confirmed');
          }
          if (status == Ti.Calendar.STATUS_CANCELED) {
            print('This event was canceled');
          }
        }
 
        var events = calendar.getEventsInYear(currentYear);
        if (events && events.length) {
          print(events.length + ' event(s) in ' + currentYear);
          print('');
          for (var i = 0; i < events.length; i++) {
            printEvent(events[i]);
            print('');
          }
        } else {
          print('No events');
        }
 
        label.text = consoleString;
      });
    }
 
    win.add(scrollView);
}
 
 
var win = Ti.UI.createWindow({
  backgroundColor: 'white',
  exitOnClose: true,
  fullscreen: false,
  layout: 'vertical',
  title: 'Calendar Demo'
});
 
if (osname === 'android') {
    performCalendarReadFunctions();
} else if (osname === 'iphone' || osname === 'ipad') {
    if (Ti.Calendar.eventsAuthorization == Ti.Calendar.AUTHORIZATION_AUTHORIZED) {
        performCalendarReadFunctions();
    } else {
        Ti.Calendar.requestEventsAuthorization(function(e){
            if (e.success) {
                performCalendarReadFunctions();
            } else {
                alert('Access to calendar is not allowed');
            }
        });
    }
}
    return win; 
 
}
 
module.exports = CalendarPage;
Does anyone have any ideas on how to display the information in a readable list or in a calendar view? I am not sure how to convert the data it is showing currently into an easily understandable view.

Thanks!

Jessica


Viewing all articles
Browse latest Browse all 8068

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>