v0.5.2
This commit is contained in:
parent
3e8585aa93
commit
c1bdcbf963
48 changed files with 1333 additions and 1229 deletions
|
@ -7,8 +7,10 @@ import java.util.Map;
|
|||
import android.content.pm.PackageManager;
|
||||
import android.content.Context;
|
||||
import android.Manifest.permission;
|
||||
import android.support.v4.app.ActivityCompat;
|
||||
import android.support.v4.content.ContextCompat;
|
||||
//import android.support.v4.app.ActivityCompat;
|
||||
//import android.support.v4.content.ContextCompat;
|
||||
import androidx.core.app.ActivityCompat;
|
||||
import androidx.core.content.ContextCompat;
|
||||
|
||||
/** An alternative Activity class for Qt applicaiton.
|
||||
|
||||
|
|
|
@ -1,23 +1,69 @@
|
|||
package androidnative;
|
||||
import android.os.Build;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.app.PendingIntent;
|
||||
import android.content.Context;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import android.util.Log;
|
||||
import android.app.Notification.Builder;
|
||||
import android.app.Notification;
|
||||
import android.app.job.JobScheduler;
|
||||
import org.qtproject.qt5.android.bindings.QtService;
|
||||
import org.qtproject.qt5.android.QtNative;
|
||||
import org.qtproject.friendiqa.R;
|
||||
import androidnative.friendiqa.FriendiqaActivity;
|
||||
|
||||
public class AndroidNativeService extends QtService
|
||||
{
|
||||
private static String TAG = "AndroidNative";
|
||||
|
||||
public void startQtService(Context ctx) {
|
||||
Log.d(TAG,"Friendiqa QtService");
|
||||
ctx.startService(new Intent(ctx, AndroidNativeService.class));
|
||||
Log.d(TAG, "QtActivity active "+String.valueOf(QtNative.activity()!=null));
|
||||
if (QtNative.activity()==null){
|
||||
//Log.d(TAG,"Friendiqasync Stop existing QtService");
|
||||
ctx.stopService(new Intent(ctx, AndroidNativeService.class));
|
||||
|
||||
}
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
//Log.d(TAG,"Friendiqasync startForegroundService");
|
||||
ctx.startForegroundService(new Intent(ctx, AndroidNativeService.class));
|
||||
} else {
|
||||
ctx.startService(new Intent(ctx, AndroidNativeService.class));
|
||||
}
|
||||
}
|
||||
|
||||
public static void stopQtService(Context ctx) {
|
||||
Log.d(TAG,"Friendiqa QtServiceStop");
|
||||
|
||||
//Log.d(TAG,"Friendiqasync QtServiceStop");
|
||||
ctx.stopService(new Intent(ctx, AndroidNativeService.class));
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public void onCreate()
|
||||
{
|
||||
Context context;
|
||||
context = this.getApplicationContext();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
|
||||
Intent intent = new Intent(context,FriendiqaActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
|
||||
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, intent, 0);
|
||||
String CHANNEL_ID = "channel_02";
|
||||
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
|
||||
"Sync Channel",
|
||||
NotificationManager.IMPORTANCE_DEFAULT);
|
||||
channel.setSound(null,null);
|
||||
((NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE)).createNotificationChannel(channel);
|
||||
//Log.d(TAG,"Friendiqa onCreate Notification");
|
||||
Notification notification = new Notification.Builder(context,CHANNEL_ID)
|
||||
.setSmallIcon(R.drawable.friendiqanotification)
|
||||
.setContentTitle("Friendiqa")
|
||||
.setContentText("Background Sync")
|
||||
.setContentIntent(pendingIntent).build();
|
||||
startForeground(1, notification);}
|
||||
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
jobScheduler.cancel(1);
|
||||
super.onCreate();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,8 +11,10 @@ import android.content.ComponentName;
|
|||
import android.app.job.JobScheduler;
|
||||
import android.app.job.JobInfo;
|
||||
import android.app.PendingIntent;
|
||||
import android.support.v4.app.NotificationCompat;
|
||||
import android.support.v4.app.NotificationManagerCompat;
|
||||
import android.app.NotificationChannel;
|
||||
import android.app.NotificationManager;
|
||||
import androidx.core.app.NotificationCompat;
|
||||
import androidx.core.app.NotificationManagerCompat;
|
||||
import org.qtproject.qt5.android.QtNative;
|
||||
import androidnative.friendiqa.FriendiqaService;
|
||||
import androidnative.friendiqa.FriendiqaStopService;
|
||||
|
@ -120,32 +122,46 @@ public class Util {
|
|||
final String textTitle = (String) message.get("title");
|
||||
final String textContent = (String) message.get("message");
|
||||
final int notificationId = (int) message.get("id");
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
|
||||
.setSmallIcon(R.drawable.friendiqanotification)
|
||||
.setContentIntent(pendingIntent)
|
||||
.setContentTitle(textTitle)
|
||||
.setContentText(textContent)
|
||||
.setStyle(new NotificationCompat.BigTextStyle()
|
||||
.bigText(textContent))
|
||||
|
||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||
.setAutoCancel(true);
|
||||
|
||||
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
|
||||
|
||||
NotificationManagerCompat notificationManager = NotificationManagerCompat.from(context);
|
||||
notificationManager.notify(notificationId, builder.build());
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
|
||||
final String CHANNEL_ID = "channel_01";
|
||||
NotificationChannel channel = new NotificationChannel(CHANNEL_ID,
|
||||
"Channel for Friendiqa News",
|
||||
NotificationManagerCompat.IMPORTANCE_LOW);
|
||||
notificationManager.createNotificationChannel(channel);
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(context,CHANNEL_ID)
|
||||
.setSmallIcon(R.drawable.friendiqanotification)
|
||||
.setContentIntent(pendingIntent)
|
||||
.setContentTitle(textTitle)
|
||||
.setContentText(textContent)
|
||||
.setStyle(new NotificationCompat.BigTextStyle()
|
||||
.bigText(textContent))
|
||||
.setAutoCancel(true);
|
||||
notificationManager.notify(notificationId, builder.build());
|
||||
|
||||
} else {
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(context)
|
||||
.setSmallIcon(R.drawable.friendiqanotification)
|
||||
.setContentIntent(pendingIntent)
|
||||
.setContentTitle(textTitle)
|
||||
.setContentText(textContent)
|
||||
.setStyle(new NotificationCompat.BigTextStyle()
|
||||
.bigText(textContent))
|
||||
|
||||
.setPriority(NotificationCompat.PRIORITY_DEFAULT)
|
||||
.setAutoCancel(true);
|
||||
notificationManager.notify(notificationId, builder.build());
|
||||
}
|
||||
}
|
||||
|
||||
static void setSchedule(Map message) {
|
||||
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
|
||||
return;
|
||||
}
|
||||
if (Build.VERSION.SDK_INT > Build.VERSION_CODES.O) {
|
||||
return;
|
||||
}
|
||||
//Log.d(TAG,"Friendiqa schedule Androidnative service");
|
||||
|
||||
final Integer value = (Integer) message.get("value");
|
||||
//final Activity activity = QtNative.activity();
|
||||
//final Service service = QtNative.service();
|
||||
//final int JOB_ID = 1;
|
||||
final int ONE_MIN = 60 * 1000;
|
||||
Context context;
|
||||
|
@ -155,34 +171,49 @@ public class Util {
|
|||
} else {
|
||||
context = QtNative.activity().getApplicationContext();
|
||||
}
|
||||
ComponentName component = new ComponentName(context, FriendiqaService.class);
|
||||
JobInfo.Builder builder = new JobInfo.Builder(2, component)
|
||||
// schedule it to run any time between 1 - 5 minutes
|
||||
.setMinimumLatency(value * ONE_MIN)
|
||||
.setOverrideDeadline((value + 5)*ONE_MIN)
|
||||
//.setPeriodic(value * ONE_MIN)
|
||||
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY);
|
||||
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
jobScheduler.schedule(builder.build());
|
||||
|
||||
if (QtNative.service() != null){
|
||||
//Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service");
|
||||
ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class);
|
||||
JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper)
|
||||
.setMinimumLatency(50)
|
||||
.setOverrideDeadline(100);
|
||||
if (value==0){
|
||||
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
jobScheduler.cancelAll();
|
||||
//Log.d(TAG,"Friendiqasync deleting Androidnative jobscheduler");
|
||||
} else {
|
||||
//Log.d(TAG,"Friendiqasync schedule Androidnative jobscheduler");
|
||||
ComponentName component = new ComponentName(context, FriendiqaService.class);
|
||||
JobScheduler jobScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
//Log.d(TAG,"Jobinfolist size " + String.valueOf(jobScheduler.getAllPendingJobs().size()));
|
||||
if (jobScheduler.getAllPendingJobs().size()==0){
|
||||
JobInfo.Builder builder = new JobInfo.Builder(2, component)
|
||||
.setPeriodic(value * ONE_MIN)
|
||||
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
|
||||
.setPersisted(true)
|
||||
.setPrefetch(true);
|
||||
//Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
|
||||
jobScheduler.schedule(builder.build());
|
||||
} else {
|
||||
for ( JobInfo jobInfo : jobScheduler.getAllPendingJobs() ) {
|
||||
//Log.d(TAG,"Jobinfo current interval " + String.valueOf(jobInfo.getIntervalMillis ()));
|
||||
if (jobInfo.getIntervalMillis ()!=(value * ONE_MIN)){
|
||||
JobInfo.Builder builder = new JobInfo.Builder(2, component)
|
||||
.setPeriodic(value * ONE_MIN)
|
||||
.setRequiredNetworkType(JobInfo.NETWORK_TYPE_ANY)
|
||||
.setPersisted(true)
|
||||
.setPrefetch(true);
|
||||
//Log.d(TAG,"Friendiqa schedule Androidnative sync schedule"+ (value * ONE_MIN));
|
||||
jobScheduler.schedule(builder.build());
|
||||
}
|
||||
}
|
||||
}
|
||||
//Log.d(TAG,"Active service " + String.valueOf(QtNative.service()!=null));
|
||||
if (QtNative.service() != null){
|
||||
//Log.d(TAG,"Schedule Stopping Friendiqa Androidnative service");
|
||||
ComponentName componentStopper = new ComponentName(context, FriendiqaStopService.class);
|
||||
JobInfo.Builder stopbuilder = new JobInfo.Builder(1, componentStopper)
|
||||
.setMinimumLatency(50)
|
||||
.setOverrideDeadline(100);
|
||||
|
||||
JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
jobStopScheduler.schedule(stopbuilder.build());
|
||||
|
||||
|
||||
//AndroidNativeService.stopQtService(context);
|
||||
JobScheduler jobStopScheduler = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
|
||||
jobStopScheduler.schedule(stopbuilder.build());
|
||||
}
|
||||
}
|
||||
//context.stopService(new Intent(context, AndroidNativeService.class));
|
||||
}
|
||||
|
||||
/**static void stopService(Map message){
|
||||
this.stopService(new Intent(this, AndroidNativeService.class));
|
||||
}
|
||||
**/
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue