184 lines
5.5 KiB
Java
184 lines
5.5 KiB
Java
package net.indivia.hacklabbo.statusreader;
|
|
|
|
import java.text.SimpleDateFormat;
|
|
import java.util.Calendar;
|
|
import java.util.Locale;
|
|
|
|
import org.json.JSONException;
|
|
import org.json.JSONObject;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.annotation.TargetApi;
|
|
import android.app.Notification;
|
|
import android.app.NotificationManager;
|
|
import android.app.PendingIntent;
|
|
import android.app.Service;
|
|
import android.content.Context;
|
|
import android.content.Intent;
|
|
import android.content.res.Resources;
|
|
import android.net.ConnectivityManager;
|
|
import android.net.Uri;
|
|
import android.os.Build;
|
|
import android.os.IBinder;
|
|
import android.provider.Settings;
|
|
import android.util.Log;
|
|
|
|
@SuppressLint("NewApi")
|
|
public class StatusUpdate extends Service {
|
|
// private final static String app_site =
|
|
// "http://isopen.hacklabbo.indivia.net/";
|
|
private final static String app_site = "http://ginex.indivia.net/";
|
|
private final static String LOG_TAG = "StatusUpdate";
|
|
// public final static String DEF_SITE =
|
|
// "http://isopen.hacklabbo.indivia.net/hacklabbo/state.json";
|
|
public final static String DEF_SITE = "http://ginex.indivia.net/state.json";
|
|
private final static String app_www_current_apk = "latest.apk";
|
|
|
|
public final static int NOTIFY_APP_UPDATE = 2;
|
|
|
|
private BgThread bgThread;
|
|
private NotificationManager notificationManager;
|
|
private Notification notification;
|
|
private PendingIntent pIntent;
|
|
private int notificationNumber;
|
|
private Resources res;
|
|
private static String serverName;
|
|
private static Boolean oldStatus, isCicleService;
|
|
private static int refreshTime;
|
|
private ConnectivityManager cm;
|
|
@Override
|
|
public void onCreate() {
|
|
super.onCreate();
|
|
res = getResources();
|
|
cm = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
|
|
|
|
bgThread = new BgThread();
|
|
bgThread.start();
|
|
|
|
String app_uri = app_site + app_www_current_apk;
|
|
Intent i = new Intent(this, MainActivity.class);
|
|
i.putExtra("checkUpdate", NOTIFY_APP_UPDATE);
|
|
i.setData(Uri.parse(app_uri));
|
|
i.putExtra("urlpath", app_uri);
|
|
|
|
pIntent = PendingIntent.getActivity(this, 0, i,
|
|
PendingIntent.FLAG_UPDATE_CURRENT);
|
|
|
|
notificationManager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
|
|
|
|
Log.i(LOG_TAG, "Service Created");
|
|
}
|
|
|
|
@TargetApi(Build.VERSION_CODES.HONEYCOMB)
|
|
public void notifyBuilder(String status) {
|
|
notification = new Notification.Builder(this)
|
|
.setSound(Settings.System.DEFAULT_NOTIFICATION_URI)
|
|
// .setContentTitle(getString(R.string.app_update_notify_title))
|
|
.setContentTitle("StatusReader: cambio di stato")
|
|
.setContentText("Stato cambiato a: " + status)
|
|
.setLights(0xFFFF0000, 500, 500)
|
|
// TODO: cambiare l'icona
|
|
.setSmallIcon(R.drawable.software).setContentIntent(pIntent)
|
|
.setAutoCancel(true).build();
|
|
}
|
|
|
|
// TODO: cambiare titolo icone
|
|
@SuppressWarnings("deprecation")
|
|
public void getNotify() {
|
|
notification = new Notification(R.drawable.software,
|
|
getString(R.string.app_update_notify_title),
|
|
System.currentTimeMillis());
|
|
notification.flags |= Notification.FLAG_AUTO_CANCEL;
|
|
|
|
}
|
|
|
|
@SuppressWarnings("deprecation")
|
|
public void sendNotification(int newVersion) {
|
|
notification.number = ++notificationNumber;
|
|
notification.setLatestEventInfo(this,
|
|
res.getString(R.string.app_update_notify_title),
|
|
res.getString(R.string.app_update_new_version), pIntent);
|
|
|
|
notificationManager.notify(NOTIFY_APP_UPDATE, notification);
|
|
}
|
|
|
|
private final class BgThread extends Thread {
|
|
public void run() {
|
|
do {
|
|
if (SNetwork.isConnected(cm)) {
|
|
Log.i(LOG_TAG, "Service Cicle");
|
|
String json = SNetwork.GET(serverName);
|
|
try {
|
|
JSONObject jObject = new JSONObject(json);
|
|
boolean newStatus = jObject.getBoolean("open");
|
|
String statusChange = jObject.getString("date");
|
|
|
|
Calendar c = Calendar.getInstance();
|
|
SimpleDateFormat dateFormat = new SimpleDateFormat(
|
|
"yyyy-MM-dd'T'HH:mm:ssZZZZZ", Locale.ITALY);
|
|
String last_refresh = dateFormat.format(c.getTime());
|
|
|
|
if (newStatus != oldStatus) {
|
|
String status = res.getString(R.string.close);
|
|
if (newStatus)
|
|
status = res.getString(R.string.open);
|
|
|
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
|
|
notifyBuilder(status);
|
|
notificationManager.notify(0, notification);
|
|
} else {
|
|
getNotify();
|
|
sendNotification(1);
|
|
}
|
|
}
|
|
SUtility.saveState(getApplicationContext(), newStatus,
|
|
last_refresh, statusChange);
|
|
|
|
if (!isCicleService) {
|
|
stopSelf();
|
|
Log.i(LOG_TAG, "Service stop");
|
|
// setDisplay(newStatus, last_refresh, statusChange);
|
|
}
|
|
|
|
try {
|
|
Thread.sleep(refreshTime);
|
|
} catch (InterruptedException ie) {
|
|
Log.d(LOG_TAG,
|
|
"Qualcosa è andato storto con il timer.\n"
|
|
+ ie.toString());
|
|
}
|
|
} catch (JSONException e) {
|
|
e.printStackTrace();
|
|
}
|
|
} else {
|
|
Log.d(LOG_TAG, "Non c'è connessione");
|
|
}
|
|
} while (isCicleService);
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public int onStartCommand(Intent intent, int flags, int startId) {
|
|
isCicleService = intent.getBooleanExtra("isCicleService", false);
|
|
if (isCicleService)
|
|
refreshTime = intent.getIntExtra("refreshTime", 0);
|
|
|
|
serverName = intent.getStringExtra("serverName");
|
|
oldStatus = intent.getBooleanExtra("oldStatus", false);
|
|
|
|
Log.i(LOG_TAG, "Service Started");
|
|
return super.onStartCommand(intent, flags, startId);
|
|
}
|
|
|
|
@Override
|
|
public void onDestroy() {
|
|
super.onDestroy();
|
|
Log.i(LOG_TAG, "Service Destroyed");
|
|
}
|
|
|
|
@Override
|
|
public IBinder onBind(Intent intent) {
|
|
return null;
|
|
}
|
|
|
|
}
|