Tuesday, 28 July 2015

Android Trusting all certificates using HttpClient over HTTPS| Access all secure and in-secure https connection in Android and Java

Hello Friends,
          Today, I am going to share a blog post on "HTTPS". Using this blog we can easily access all
secure and non secure "HTTPS" connection in java as well as android too.


1. Add "InSecureSSLSocketFactory.java" class

import java.io.IOException;
import java.net.Socket;
import java.net.UnknownHostException;
import java.security.KeyManagementException;
import java.security.KeyStore;
import java.security.KeyStoreException;
import java.security.NoSuchAlgorithmException;
import java.security.UnrecoverableKeyException;
import java.security.cert.CertificateException;
import java.security.cert.X509Certificate;

import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager;
import javax.net.ssl.X509TrustManager;

import org.apache.http.conn.ssl.SSLSocketFactory;
public class InSecureSSLSocketFactory extends SSLSocketFactory {
    SSLContext sslContext = SSLContext.getInstance("TLS");

    public InSecureSSLSocketFactory(KeyStore truststore) throws NoSuchAlgorithmException, KeyManagementException, KeyStoreException, UnrecoverableKeyException {
        super(truststore);

        TrustManager tm = new X509TrustManager() {
            public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {
            }

            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };

        sslContext.init(null, new TrustManager[] { tm }, null);
    }

    @Override
    public Socket createSocket(Socket socket, String host, int port, boolean autoClose) throws IOException, UnknownHostException {
        return sslContext.getSocketFactory().createSocket(socket, host, port, autoClose);
    }

    @Override
    public Socket createSocket() throws IOException {
        return sslContext.getSocketFactory().createSocket();
    }
} 


2. Create a new HTTP client using the above InSecureSSLSocketFactory class, for making
     connection.

public HttpClient getNewHttpClient() {
    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);

        InSecureSSLSocketFactory sf = new InSecureSSLSocketFactory(trustStore);
        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

        return new DefaultHttpClient(ccm, params);
    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}
3. Finally hitting the service url(https://) using getNewHttpClient() , which helps to feth data
    from server.

public static String networkHitForGetJsonData(String url)
{
 String websiteData = null;
 try {
  HttpParams httpParameters = new BasicHttpParams();
  HttpConnectionParams.setConnectionTimeout(httpParameters, 10000);
  HttpClient client = getNewHttpClient();
  URI uri = new URI(url);
  HttpGet method = new HttpGet(uri);
  method.addHeader("Content-Type", "text/html");
  HttpResponse res = client.execute(method);
  InputStream data = res.getEntity().getContent();
  websiteData = generateString(data);
  Log.e("response","response---> "+websiteData);
 } catch (ClientProtocolException e) {
  e.printStackTrace();
  websiteData = null;
 } catch (IOException e)
 {
  e.printStackTrace();
  websiteData = null;
 } catch (URISyntaxException e)
 {
  e.printStackTrace();
  websiteData = null;
 }
 return websiteData;
}  



Hope, this will helps some one.
Enjoy coding....... :)

Monday, 6 July 2015

Android add calendar event Programatically | Android Codes: Insertion and Deletion of Calendar Events | Configure email notification with Calendar app in Android

Hello Friends,
          Today, I am sharing my another android tutorial which covers following things:

1. Android- Adding events to calendar via your android application
2. Programmatically add reminder in android calendara
3. Configure email notification with Calendar app in Android


A. For adding event on Calendar

try {
 String eventUriString = "content://com.android.calendar/events";
 ContentValues eventValues = new ContentValues();
 eventValues.put("calendar_id", 1); // id, We need to choose from
     // our mobile for primary its 1
 eventValues.put("title", title);
 eventValues.put("description", desc);
 eventValues.put("eventLocation", place);

 long endDate = startDate + 1000 * 10 * 10; // For next 10min
 eventValues.put("dtstart", startDate);
 eventValues.put("dtend", endDate);

 // values.put("allDay", 1); //If it is bithday alarm or such
 // kind (which should remind me for whole day) 0 for false, 1
 // for true
  eventValues.put("eventStatus", status); // This information is
   // sufficient for most
   // entries tentative (0),
   // confirmed (1) or canceled
   // (2):
 eventValues.put("eventTimezone", "UTC/GMT +5:30");
 /*
  * Comment below visibility and transparency column to avoid
  * java.lang.IllegalArgumentException column visibility is invalid
  * error
  */
 // eventValues.put("allDay", 1);
 // eventValues.put("visibility", 0); // visibility to default (0),
   // confidential (1), private
   // (2), or public (3):
   // eventValues.put("transparency", 0); // You can control whether
   // an event consumes time
   // opaque (0) or transparent
   // (1).
 eventValues.put("hasAlarm", 1); // 0 for false, 1 for true

 Uri eventUri = curActivity.getApplicationContext()
    .getContentResolver()
    .insert(Uri.parse(eventUriString), eventValues);
 eventID = Long.parseLong(eventUri.getLastPathSegment()); 
} catch (Exception ex) {
 log.error("Error in adding event on calendar" + ex.getMessage());
}


B. Set Reminder for above added event id:

if (needReminder) {
/***************** Event: Reminder(with alert) Adding reminder to event *******************/
        String reminderUriString = "content://com.android.calendar/reminders";
 ContentValues reminderValues = new ContentValues();
 reminderValues.put("event_id", eventID);
 reminderValues.put("minutes", 5); // Default value 
       //set time in min which occur before event start   
 reminderValues.put("method", 1); // Alert Methods: Default(0),
     // Alert(1), Email(2),SMS(3)
 Uri reminderUri = curActivity.getApplicationContext()
      .getContentResolver()
    .insert(Uri.parse(reminderUriString), reminderValues);
}
 

C: Send mail to user for attending the meeting added on calendar

/***************** Event: Meeting(without alert) Adding Attendies to the meeting *******************/

if (needMailService) {
 String attendeuesesUriString = "content://com.android.calendar/attendees";

 /********
  * To add multiple attendees need to insert ContentValues
  * multiple times
  ***********/
 ContentValues attendeesValues = new ContentValues();
 attendeesValues.put("event_id", eventID);
 attendeesValues.put("attendeeName", "xxxxx"); // Attendees name
 attendeesValues.put("attendeeEmail", "yyyy@gmail.com");// Attendee email
 attendeesValues.put("attendeeRelationship", 0); // Relationship_Attendee(1),
       // Relationship_None(0),
       // Organizer(2),
       // Performer(3),
       // Speaker(4)
 attendeesValues.put("attendeeType", 0); // None(0), Optional(1),
      // Required(2),
      // Resource(3)
 attendeesValues.put("attendeeStatus", 0); // NOne(0),
          // Accepted(1),
        // Decline(2),
        // Invited(3),
        // Tentative(4)

 Uri eventsUri = Uri.parse("content://calendar/events");
 Uri url = curActivity.getApplicationContext()
    .getContentResolver()
    .insert(eventsUri, attendeesValues);

 // Uri attendeuesesUri = curActivity.getApplicationContext()
    // .getContentResolver()
    // .insert(Uri.parse(attendeuesesUriString), attendeesValues);
} 

D: For deletion of calendar event: Here "id" is event id.

Uri uri = ContentUris.withAppendedId(CALENDAR_URI, Integer.parseInt(id));
getContentResolver().delete(uri, null, null); 

Finally All together: Add this method in your activity class

public long addAppointmentsToCalender(Activity curActivity, String title,
   String desc, String place, int status, long startDate,
   boolean needReminder, boolean needMailService) {
/***************** Event: add event *******************/
long eventID = -1;
try {
        String eventUriString = "content://com.android.calendar/events";
 ContentValues eventValues = new ContentValues();
 eventValues.put("calendar_id", 1); // id, We need to choose from
              // our mobile for primary its 1
 eventValues.put("title", title);
 eventValues.put("description", desc);
 eventValues.put("eventLocation", place);

 long endDate = startDate + 1000 * 10 * 10; // For next 10min
 eventValues.put("dtstart", startDate);
 eventValues.put("dtend", endDate);

 // values.put("allDay", 1); //If it is bithday alarm or such
   // kind (which should remind me for whole day) 0 for false, 1
   // for true
 eventValues.put("eventStatus", status); // This information is
   // sufficient for most
   // entries tentative (0),
   // confirmed (1) or canceled
   // (2):
 eventValues.put("eventTimezone", "UTC/GMT +5:30");
 /*
  * Comment below visibility and transparency column to avoid
  * java.lang.IllegalArgumentException column visibility is invalid
  * error
  */
 // eventValues.put("allDay", 1);
 // eventValues.put("visibility", 0); // visibility to default (0),
                                      // confidential (1), private
                                      // (2), or public (3):
 // eventValues.put("transparency", 0); // You can control whether
                                        // an event consumes time
                          // opaque (0) or transparent (1).
   
        eventValues.put("hasAlarm", 1); // 0 for false, 1 for true

 Uri eventUri = curActivity.getApplicationContext()
    .getContentResolver()
    .insert(Uri.parse(eventUriString), eventValues);
 eventID = Long.parseLong(eventUri.getLastPathSegment());

 if (needReminder) {
 /***************** Event: Reminder(with alert) Adding reminder to event ***********        ********/
 
        String reminderUriString = "content://com.android.calendar/reminders";
        ContentValues reminderValues = new ContentValues();
 reminderValues.put("event_id", eventID);
 reminderValues.put("minutes", 5); // Default value of the
       // system. Minutes is a integer
 reminderValues.put("method", 1); // Alert Methods: Default(0),
     // Alert(1), Email(2),SMS(3)

 Uri reminderUri = curActivity.getApplicationContext()
     .getContentResolver()
     .insert(Uri.parse(reminderUriString), reminderValues);
 }

/***************** Event: Meeting(without alert) Adding Attendies to the meeting *******************/

 if (needMailService) {
 String attendeuesesUriString = "content://com.android.calendar/attendees";
 /********
  * To add multiple attendees need to insert ContentValues
  * multiple times
  ***********/
 ContentValues attendeesValues = new ContentValues();
 attendeesValues.put("event_id", eventID);
 attendeesValues.put("attendeeName", "xxxxx"); // Attendees name
 attendeesValues.put("attendeeEmail", "yyyy@gmail.com");// Attendee Email
 attendeesValues.put("attendeeRelationship", 0); // Relationship_Attendee(1),
       // Relationship_None(0),
       // Organizer(2),
       // Performer(3),
       // Speaker(4)
 attendeesValues.put("attendeeType", 0); // None(0), Optional(1),
      // Required(2),
      // Resource(3)
 attendeesValues.put("attendeeStatus", 0); // NOne(0),
        // Accepted(1),
        // Decline(2),
        // Invited(3),
        // Tentative(4)

 Uri eventsUri = Uri.parse("content://calendar/events");
 Uri url = curActivity.getApplicationContext()
    .getContentResolver()
    .insert(eventsUri, attendeesValues);

 // Uri attendeuesesUri = curActivity.getApplicationContext()
    // .getContentResolver()
    // .insert(Uri.parse(attendeuesesUriString), attendeesValues);
 }
} catch (Exception ex) {
 log.error("Error in adding event on calendar" + ex.getMessage());
}

return eventID;

}
 

Also need to add following permission in your AndroidManifest.xml file

<uses-permission android:name="android.permission.READ_CALENDAR" />
<uses-permission android:name="android.permission.WRITE_CALENDAR" />


Hope this will help some one.

Enjoy Coding :)

 

Copyright @ 2013 Android Developer Blog.