2525import android .app .Notification ;
2626import android .app .NotificationManager ;
2727import android .app .PendingIntent ;
28- import android .content .ComponentName ;
2928import android .content .Context ;
3029import android .content .Intent ;
3130import android .content .pm .PackageManager ;
4544import com .leanplum .internal .Constants .Params ;
4645import com .leanplum .internal .JsonConverter ;
4746import com .leanplum .internal .LeanplumInternal ;
47+ import com .leanplum .internal .LeanplumManifestHelper ;
4848import com .leanplum .internal .Log ;
4949import com .leanplum .internal .Request ;
5050import com .leanplum .internal .Util ;
@@ -100,15 +100,13 @@ public class LeanplumPushService {
100100 private static final String LEANPLUM_PUSH_LISTENER_SERVICE_CLASS =
101101 "com.leanplum.LeanplumPushListenerService" ;
102102 private static final String GCM_RECEIVER_CLASS = "com.google.android.gms.gcm.GcmReceiver" ;
103-
104- private static Class <? extends Activity > callbackClass ;
105- private static LeanplumCloudMessagingProvider provider ;
106- private static boolean isFirebaseEnabled = false ;
107103 private static final int NOTIFICATION_ID = 1 ;
108-
109104 private static final String OPEN_URL = "Open URL" ;
110105 private static final String URL = "URL" ;
111106 private static final String OPEN_ACTION = "Open" ;
107+ private static Class <? extends Activity > callbackClass ;
108+ private static LeanplumCloudMessagingProvider provider ;
109+ private static boolean isFirebaseEnabled = false ;
112110 private static LeanplumPushNotificationCustomizer customizer ;
113111
114112 /**
@@ -660,6 +658,9 @@ static void onStart() {
660658 }
661659 }
662660
661+ /**
662+ * Initialize push service.
663+ */
663664 private static void initPushService () {
664665 if (isFirebaseEnabled ()) {
665666 if (!enableFcmServices ()) {
@@ -683,173 +684,71 @@ private static void initPushService() {
683684 registerInBackground ();
684685 }
685686
687+ /**
688+ * Enables Firebase services. By default, all Firebase services are disabled.
689+ *
690+ * @return true if services are successfully enabled, false otherwise
691+ */
686692 private static boolean enableFcmServices () {
687693 Context context = Leanplum .getContext ();
688694 if (context == null ) {
689695 Log .i ("Failed to enable FCM services, context is null." );
690696 return false ;
691697 }
698+
692699 PackageManager packageManager = context .getPackageManager ();
700+ if (packageManager == null ) {
701+ Log .i ("Failed to enable FCM services, PackageManager is null." );
702+ return false ;
703+ }
693704
694705 if (isFirebaseEnabled ()) {
695- Class fcmListenerClass = getClassForName (LEANPLUM_PUSH_FCM_LISTENER_SERVICE_CLASS );
706+ Class fcmListenerClass = LeanplumManifestHelper . getClassForName (LEANPLUM_PUSH_FCM_LISTENER_SERVICE_CLASS );
696707 if (fcmListenerClass == null ) {
708+ Log .e ("Failed to setup Firebase, please compile Firebase library." );
697709 return false ;
698710 }
699711
700- if (!wasComponentEnabled (context , packageManager , fcmListenerClass )) {
701- if (!enableServiceAndStart (context , packageManager , PUSH_FIREBASE_MESSAGING_SERVICE_CLASS )
702- || !enableServiceAndStart (context , packageManager , fcmListenerClass )) {
712+ if (!LeanplumManifestHelper . wasComponentEnabled (context , packageManager , fcmListenerClass )) {
713+ if (!LeanplumManifestHelper . enableServiceAndStart (context , packageManager , PUSH_FIREBASE_MESSAGING_SERVICE_CLASS )
714+ || !LeanplumManifestHelper . enableServiceAndStart (context , packageManager , fcmListenerClass )) {
703715 return false ;
704716 }
705717 }
706718 }
707719 return true ;
708720 }
709721
722+ /**
723+ * Enables GCM services. By default, all GCM services are disabled.
724+ *
725+ * @return true if services are successfully enabled, false otherwise
726+ */
710727 private static boolean enableGcmServices () {
711728 Context context = Leanplum .getContext ();
712729 if (context == null ) {
713730 Log .i ("Failed to enable FCM services, context is null." );
714731 return false ;
715732 }
716- PackageManager packageManager = context .getPackageManager ();
717- Class gcmPushInstanceIDClass = getClassForName (LEANPLUM_PUSH_INSTANCE_ID_SERVICE_CLASS );
718- if (gcmPushInstanceIDClass == null ) {
719- return false ;
720- }
721-
722- if (!wasComponentEnabled (context , packageManager , gcmPushInstanceIDClass )) {
723- if (!enableComponent (context , packageManager , LEANPLUM_PUSH_LISTENER_SERVICE_CLASS ) ||
724- !enableComponent (context , packageManager , gcmPushInstanceIDClass ) ||
725- !enableComponent (context , packageManager , GCM_RECEIVER_CLASS )) {
726- return false ;
727- }
728-
729- }
730- return true ;
731- }
732-
733- /**
734- * Gets Class for name.
735- *
736- * @param className - class name.
737- * @return Class for provided class name.
738- */
739- private static Class getClassForName (String className ) {
740- try {
741- return Class .forName (className );
742- } catch (Throwable t ) {
743- if (isFirebaseEnabled ) {
744- Log .e ("Please compile FCM library." );
745- } else {
746- Log .e ("Please compile GCM library." );
747- }
748- return null ;
749- }
750- }
751-
752- /**
753- * Enables and starts service for provided class name.
754- *
755- * @param context Current Context.
756- * @param packageManager Current PackageManager.
757- * @param className Name of Class that needs to be enabled and started.
758- * @return True if service was enabled and started.
759- */
760- private static boolean enableServiceAndStart (Context context , PackageManager packageManager ,
761- String className ) {
762- Class clazz ;
763- try {
764- clazz = Class .forName (className );
765- } catch (Throwable t ) {
766- return false ;
767- }
768- return enableServiceAndStart (context , packageManager , clazz );
769- }
770-
771- /**
772- * Enables and starts service for provided class name.
773- *
774- * @param context Current Context.
775- * @param packageManager Current PackageManager.
776- * @param clazz Class of service that needs to be enabled and started.
777- * @return True if service was enabled and started.
778- */
779- private static boolean enableServiceAndStart (Context context , PackageManager packageManager ,
780- Class clazz ) {
781- if (!enableComponent (context , packageManager , clazz )) {
782- return false ;
783- }
784- try {
785- context .startService (new Intent (context , clazz ));
786- } catch (Throwable t ) {
787- Log .w ("Could not start service " + clazz .getName ());
788- return false ;
789- }
790- return true ;
791- }
792-
793- /**
794- * Enables component for provided class name.
795- *
796- * @param context Current Context.
797- * @param packageManager Current PackageManager.
798- * @param className Name of Class for enable.
799- * @return True if component was enabled.
800- */
801- private static boolean enableComponent (Context context , PackageManager packageManager ,
802- String className ) {
803- try {
804- Class clazz = Class .forName (className );
805- return enableComponent (context , packageManager , clazz );
806- } catch (Throwable t ) {
807- return false ;
808- }
809- }
810733
811- /**
812- * Enables component for provided class.
813- *
814- * @param context Current Context.
815- * @param packageManager Current PackageManager.
816- * @param clazz Class for enable.
817- * @return True if component was enabled.
818- */
819- private static boolean enableComponent (Context context , PackageManager packageManager ,
820- Class clazz ) {
821- if (clazz == null || context == null || packageManager == null ) {
734+ PackageManager packageManager = context .getPackageManager ();
735+ if (packageManager == null ) {
736+ Log .i ("Failed to enable FCM services, PackageManager is null." );
822737 return false ;
823738 }
824739
825- try {
826- packageManager .setComponentEnabledSetting (new ComponentName (context , clazz ),
827- PackageManager .COMPONENT_ENABLED_STATE_ENABLED , PackageManager .DONT_KILL_APP );
828- } catch (Throwable t ) {
829- Log .w ("Could not enable component " + clazz .getName ());
740+ Class gcmPushInstanceIDClass = LeanplumManifestHelper .getClassForName (LEANPLUM_PUSH_INSTANCE_ID_SERVICE_CLASS );
741+ if (gcmPushInstanceIDClass == null ) {
742+ Log .e ("Failed to setup GCM, please compile GCM library." );
830743 return false ;
831744 }
832- return true ;
833- }
834745
835- /**
836- * Checks if component for provided class enabled before.
837- *
838- * @param context Current Context.
839- * @param packageManager Current PackageManager.
840- * @param clazz Class for check.
841- * @return True if component was enabled before.
842- */
843- private static boolean wasComponentEnabled (Context context , PackageManager packageManager ,
844- Class clazz ) {
845- if (clazz == null || context == null || packageManager == null ) {
846- return false ;
847- }
848- int componentStatus = packageManager .getComponentEnabledSetting (new ComponentName (context ,
849- clazz ));
850- if (PackageManager .COMPONENT_ENABLED_STATE_DEFAULT == componentStatus ||
851- PackageManager .COMPONENT_ENABLED_STATE_DISABLED == componentStatus ) {
852- return false ;
746+ if (!LeanplumManifestHelper .wasComponentEnabled (context , packageManager , gcmPushInstanceIDClass )) {
747+ if (!LeanplumManifestHelper .enableComponent (context , packageManager , LEANPLUM_PUSH_LISTENER_SERVICE_CLASS ) ||
748+ !LeanplumManifestHelper .enableComponent (context , packageManager , gcmPushInstanceIDClass ) ||
749+ !LeanplumManifestHelper .enableComponent (context , packageManager , GCM_RECEIVER_CLASS )) {
750+ return false ;
751+ }
853752 }
854753 return true ;
855754 }
0 commit comments