EmbASP-Java
DLVAndroidService.java
1 package it.unical.mat.embasp.specializations.dlv.android;
2 
3 import android.app.ActivityManager;
4 import android.content.BroadcastReceiver;
5 import android.content.Context;
6 import android.content.Intent;
7 import android.content.IntentFilter;
8 import android.os.Bundle;
9 import android.util.Log;
10 import java.util.List;
11 import it.unical.mat.embasp.base.Callback;
12 import it.unical.mat.embasp.base.InputProgram;
13 import it.unical.mat.embasp.base.OptionDescriptor;
14 import it.unical.mat.embasp.platforms.android.AndroidService;
15 import it.unical.mat.embasp.specializations.dlv.DLVAnswerSets;
16 
17 
20 public class DLVAndroidService extends AndroidService{
21 
22  public DLVAndroidService(Context c) {
23  super(c);
24  }
25 
26 
27  private class Receiver extends BroadcastReceiver {
28  private Callback asCallback;
29  public Receiver(Callback callback){
30  asCallback = callback;
31  }
32 
33  @Override
34  public void onReceive(Context context, Intent intent) {
35  context.unregisterReceiver(this);
36  Bundle bundle = intent.getExtras();
37  if (bundle != null) {
38  String ASPResult = bundle.getString(DLVAndroidReasoner.SOLVER_RESULT);
39  if (ASPResult != null) {
40  asCallback.callback(new DLVAnswerSets(ASPResult));
41  }
42  }
43  }
44  }
45 
46 
47 
48  @Override
49  public void startAsync(Callback callback, List<InputProgram> programs, List<OptionDescriptor> options) {
50  stopDlvService(context);
51  Intent intent = new Intent(context, DLVAndroidReasoner.class);
52  String input_options = new String();
53 
54  input_options+="-silent ";
55 
56  for (OptionDescriptor o : options) {
57 
58  input_options+= o.getOptions();
59  }
60 
61  intent.putExtra(DLVAndroidReasoner.OPTION,input_options);
62 
63 
64  String final_program = new String();
65  String files = new String();
66 
67  for (InputProgram p : programs) {
68  final_program += p.getPrograms();
69  String program_file = p.getStringOfFilesPaths();
70 
71  if (program_file != null) {
72  files += program_file;
73  }
74  }
75 
76  intent.setAction(DLVAndroidReasoner.ACTION_SOLVE);
77  intent.putExtra(DLVAndroidReasoner.PROGRAM, final_program);
78  intent.putExtra(DLVAndroidReasoner.FILES, files);
79  context.registerReceiver(new Receiver(callback), new IntentFilter(DLVAndroidReasoner.RESULT_NOTIFICATION));
80  context.startService(intent);
81 
82  }
83 
84 
85  void stopDlvService(Context context){
86 
87  boolean isServiceRunning = true;
88  while (isServiceRunning) {
89  //get device active service list
90  ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
91 
92  isServiceRunning = false;
93  //see if DLVService is in running service list
94  for (ActivityManager.RunningServiceInfo processInfo : manager.getRunningServices(Integer.MAX_VALUE)) {
95  if (processInfo.service.getClassName().equals(DLVAndroidReasoner.class.getName())) {
96  isServiceRunning = true;
97  break;
98  }
99  }
100 
101  try {
102  Thread.sleep(100);
103  } catch (InterruptedException e) {
104  e.printStackTrace();
105  }
106 
107  }
108  }
109 }
it.unical.mat.embasp.base.InputProgram
Definition: InputProgram.java:9
it.unical.mat.embasp.base.Callback
Definition: Callback.java:8
it.unical.mat.embasp.specializations.dlv.android.DLVAndroidService.startAsync
void startAsync(Callback callback, List< InputProgram > programs, List< OptionDescriptor > options)
Definition: DLVAndroidService.java:49
it.unical.mat.embasp.specializations.dlv.android.DLVAndroidService
Definition: DLVAndroidService.java:20
it.unical.mat.embasp.platforms.android.AndroidService
Definition: AndroidService.java:13
it.unical.mat.embasp.specializations.dlv.DLVAnswerSets
Definition: DLVAnswerSets.java:6
it.unical.mat.embasp.specializations.dlv.android.DLVAndroidReasoner
Definition: DLVAndroidReasoner.java:10
it.unical.mat.embasp.base.OptionDescriptor
Definition: OptionDescriptor.java:4