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