Java tutorial
/* * Copyright (C) 2013 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package my.location; import motojob.jsonclass.GcmMsgJsonClass; import motojob.service.AppServService; import motojob.service.DateFormatService; import motojob.sqlite.LoginSqlite; import android.app.IntentService; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.media.RingtoneManager; import android.os.Bundle; import android.support.v4.app.NotificationCompat; import android.util.Log; import com.google.android.gms.gcm.GoogleCloudMessaging; import com.google.gson.Gson; /** * This {@code IntentService} does the actual handling of the GCM message. * {@code GcmBroadcastReceiver} (a {@code WakefulBroadcastReceiver}) holds a * partial wake lock for this service while the service does its work. When the * service is finished, it calls {@code completeWakefulIntent()} to release the * wake lock. */ public class GcmIntentService extends IntentService { public static final int NOTIFICATION_ID = 1; private NotificationManager mNotificationManager; private NotificationCompat.Builder builder; public GcmIntentService() { super("GcmIntentService"); } public static final String TAG = "GCM Demo"; @Override protected void onHandleIntent(Intent intent) { Bundle extras = intent.getExtras(); GoogleCloudMessaging gcm = GoogleCloudMessaging.getInstance(this); // The getMessageType() intent parameter must be the intent you received // in your BroadcastReceiver. String messageType = gcm.getMessageType(intent); if (!extras.isEmpty()) { // has effect of unparcelling Bundle /* * Filter messages based on message type. Since it is likely that GCM will be * extended in the future with new message types, just ignore any message types you're * not interested in, or that you don't recognize. */ if (GoogleCloudMessaging.MESSAGE_TYPE_SEND_ERROR.equals(messageType)) { sendNotification("Send error: " + extras.toString()); } else if (GoogleCloudMessaging.MESSAGE_TYPE_DELETED.equals(messageType)) { sendNotification("Deleted messages on server: " + extras.toString()); // If it's a regular GCM message, do some work. } else if (GoogleCloudMessaging.MESSAGE_TYPE_MESSAGE.equals(messageType)) { // This loop represents the service doing some work. // for (int i = 0; i < 5; i++) { // Log.i(TAG, "Working... " + (i + 1) // + "/5 @ " + SystemClock.elapsedRealtime()); // try { // Thread.sleep(5000); // } catch (InterruptedException e) { // } // } // Log.i(TAG, "Completed work @ " + SystemClock.elapsedRealtime()); // Post notification of received message. sendNotification(extras.getString("message")); Log.i(TAG, "Received: " + extras.toString()); } } // Release the wake lock provided by the WakefulBroadcastReceiver. GcmBroadcastReceiver.completeWakefulIntent(intent); } // Put the message into a notification and post it. // This is just one simple example of what you might choose to do with // a GCM message. private void sendNotification(String message) { LoginSqlite loginSqlite = new LoginSqlite(this.getApplicationContext()); Intent it = null; mNotificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); GcmMsgJsonClass gcmMsgJsonClass = new Gson().fromJson(message, GcmMsgJsonClass.class); if (gcmMsgJsonClass.getNotificationUserType() != null && (gcmMsgJsonClass.isBusiness() && gcmMsgJsonClass.getNotificationUserType().equals("motoboy")) // condition to evaluate user registered with both motoboy and business usertype registrations. // It prevents this user to create an intent-activity that the user is not currently logged on // It was created to let DEVELOPERS navigate from one usertype to another during testing. // Realistically, a user wouldn't post nor confirm a service to itself. // || gcmMsgJsonClass.isMotoboy() && gcmMsgJsonClass.getNotificationUserType().equals("business") ) { it = new Intent(this, MainBusinActivity.class); Bundle params = new Bundle(); params.putLong("businessId", gcmMsgJsonClass.getBusinId()); params.putString("username", gcmMsgJsonClass.getBusinUsername()); it.putExtras(params); it.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); } else if (gcmMsgJsonClass.getNotificationUserType() != null && (gcmMsgJsonClass.isMotoboy() && gcmMsgJsonClass.getNotificationUserType().equals("business")) // condition to evaluate user registered with both motoboy and business usertype registrations. // It prevents this user to create an intent-activity that the user is not currently logged on // It was created to let DEVELOPERS navigate from one usertype to another during testing. // Realistically, a user wouldn't post nor confirm a service to itself. // || gcmMsgJsonClass.isBusiness() && gcmMsgJsonClass.getNotificationUserType().equals("motoboy") ) { it = new Intent(this, MainMotoActivity.class); Bundle params = new Bundle(); params.putLong("motoboyId", gcmMsgJsonClass.getMotoId()); params.putString("username", gcmMsgJsonClass.getMotoUsername()); it.putExtras(params); it.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); // when used by itself activity will not be reloaded // it.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP); } else if (gcmMsgJsonClass.isConInvitMoto()) { it = new Intent(this, TabsMotoboyActivity.class); Bundle params = new Bundle(); params.putString("motoboyId", String.valueOf(gcmMsgJsonClass.getMotoId())); params.putString("username", gcmMsgJsonClass.getMotoUsername()); params.putString("currentTab", gcmMsgJsonClass.getCurrentTab()); it.putExtras(params); } else if (gcmMsgJsonClass.isConAcceptInvitMoto()) { it = new Intent(this, TabsMotoboyActivity.class); Bundle params = new Bundle(); params.putString("motoboyId", String.valueOf(gcmMsgJsonClass.getMotoId())); params.putString("username", gcmMsgJsonClass.getMotoUsername()); params.putString("currentTab", gcmMsgJsonClass.getCurrentTab()); it.putExtras(params); } else if (gcmMsgJsonClass.isConInvitBusin()) { it = new Intent(this, TabsBusinessActivity.class); Bundle params = new Bundle(); params.putString("businessId", String.valueOf(gcmMsgJsonClass.getBusinId())); params.putString("username", gcmMsgJsonClass.getBusinUsername()); params.putString("currentTab", gcmMsgJsonClass.getCurrentTab()); it.putExtras(params); } else if (gcmMsgJsonClass.isConAcceptInvitBusin()) { it = new Intent(this, TabsBusinessActivity.class); Bundle params = new Bundle(); params.putString("businessId", String.valueOf(gcmMsgJsonClass.getBusinId())); params.putString("username", gcmMsgJsonClass.getBusinUsername()); params.putString("currentTab", gcmMsgJsonClass.getCurrentTab()); it.putExtras(params); } else if (gcmMsgJsonClass.isResetPassword()) { it = new Intent(this, ResetPasswordActivity.class); Bundle params = new Bundle(); params.putLong("businessId", gcmMsgJsonClass.getBusinId()); params.putString("username", gcmMsgJsonClass.getBusinUsername()); params.putString("navigate", gcmMsgJsonClass.getNavigate()); it.putExtras(params); } PendingIntent contentIntent = PendingIntent.getActivity(this, 0, it, 0); NotificationCompat.Builder mBuilder = new NotificationCompat.Builder(this).setAutoCancel(true) .setSound(RingtoneManager.getDefaultUri(RingtoneManager.TYPE_RINGTONE)) .setSmallIcon(R.drawable.motorcycle_notification); if (gcmMsgJsonClass.isMotoboy()) { mBuilder.setContentTitle(gcmMsgJsonClass.getBusinUsername()) .setStyle(new NotificationCompat.BigTextStyle().bigText(gcmMsgJsonClass.getToAddress())) // + // gcmMsgJsonClass.getServiceDescription())) // .setContentText( // getResources().getText(R.string.service_title_address) // + "\n" + // gcmMsgJsonClass.getToAddress() // + "\n" + // getResources().getText(R.string.service_request) // + "\n" + // gcmMsgJsonClass.getServiceDescription()) .setTicker(gcmMsgJsonClass.getBusinUsername()); } else if (gcmMsgJsonClass.isBusiness()) { mBuilder.setContentTitle(gcmMsgJsonClass.getMotoUsername()) .setStyle(new NotificationCompat.BigTextStyle().bigText( getResources().getText(R.string.service_time_estimated_pickup).toString().concat(" ") .concat(DateFormatService .time24hourFormatString(gcmMsgJsonClass.getEstimatedDeliveryTime())) .concat("."))) .setContentText( getResources().getText(R.string.service_time_estimated_pickup).toString().concat(" ") .concat(DateFormatService .time24hourFormatString(gcmMsgJsonClass.getEstimatedDeliveryTime()) .concat("."))) .setTicker(gcmMsgJsonClass.getMotoUsername()); } else if (gcmMsgJsonClass.isConInvitMoto()) { mBuilder.setContentTitle(getResources().getText(R.string.invitation_title).toString()) .setStyle(new NotificationCompat.BigTextStyle() .bigText(getResources().getText(R.string.invitation).toString().concat(" ") .concat(gcmMsgJsonClass.getBusinUsername()).concat("."))) .setTicker(gcmMsgJsonClass.getBusinUsername().concat(" ") .concat(getResources().getText(R.string.invitation_ticker).toString())); } else if (gcmMsgJsonClass.isConAcceptInvitMoto()) { mBuilder.setContentTitle(getResources().getText(R.string.acceptInvitation_title).toString()) .setStyle(new NotificationCompat.BigTextStyle().bigText(gcmMsgJsonClass.getBusinUsername() .concat(" ").concat(getResources().getText(R.string.acceptInvitation).toString()))) .setTicker(gcmMsgJsonClass.getBusinUsername().concat(" ") .concat(getResources().getText(R.string.acceptInvitation_ticker).toString())); } else if (gcmMsgJsonClass.isConInvitBusin()) { mBuilder.setContentTitle(getResources().getText(R.string.invitation_title).toString()) .setStyle(new NotificationCompat.BigTextStyle() .bigText(getResources().getText(R.string.invitation).toString().concat(" ") .concat(gcmMsgJsonClass.getMotoUsername()).concat("."))) .setTicker(gcmMsgJsonClass.getMotoUsername().concat(" ") .concat(getResources().getText(R.string.invitation_ticker).toString())); } else if (gcmMsgJsonClass.isConAcceptInvitBusin()) { mBuilder.setContentTitle(getResources().getText(R.string.acceptInvitation_title).toString()) .setStyle(new NotificationCompat.BigTextStyle().bigText(gcmMsgJsonClass.getMotoUsername() .concat(" ").concat(getResources().getText(R.string.acceptInvitation).toString()))) .setTicker(gcmMsgJsonClass.getMotoUsername().concat(" ") .concat(getResources().getText(R.string.acceptInvitation_ticker).toString())); } else if (gcmMsgJsonClass.isResetPassword()) { mBuilder.setContentTitle(getResources().getText(R.string.password_create_title).toString()) .setStyle(new NotificationCompat.BigTextStyle().bigText(gcmMsgJsonClass.getBusinUsername() .concat(" ").concat(getResources().getText(R.string.password_create).toString()))) .setTicker(getResources().getText(R.string.password_create_ticker).toString()); } mBuilder.setContentIntent(contentIntent); mNotificationManager.notify(NOTIFICATION_ID, mBuilder.build()); } }