Android Open Source - digital-ocean-swimmer Action Service






From Project

Back to project page digital-ocean-swimmer.

License

The source code is released under:

MIT License

If you think the Android project digital-ocean-swimmer listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

package com.yassirh.digitalocean.service;
//from   w w w. ja va 2s.c o m
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.support.v4.app.NotificationCompat;

import com.loopj.android.http.AsyncHttpResponseHandler;
import com.loopj.android.http.SyncHttpClient;
import com.yassirh.digitalocean.R;
import com.yassirh.digitalocean.data.DatabaseHelper;
import com.yassirh.digitalocean.data.DropletDao;
import com.yassirh.digitalocean.data.ImageDao;
import com.yassirh.digitalocean.data.RegionDao;
import com.yassirh.digitalocean.data.RegionTable;
import com.yassirh.digitalocean.model.Account;
import com.yassirh.digitalocean.model.Action;
import com.yassirh.digitalocean.utils.ApiHelper;

import org.apache.http.Header;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.text.ParseException;
import java.util.HashSet;
import java.util.Set;

public class ActionService {

  private static Thread t;

  public static void trackActions(final Context context){
    final Account currentAccount = ApiHelper.getCurrentAccount(context);
    if(currentAccount == null || t != null){
      return;
    }
    final String url = String.format("%s/actions", ApiHelper.API_URL); 
    t = new Thread(new Runnable() {
      NotificationManager notifyManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
      NotificationCompat.Builder builder;
      Set<Integer> shownNotifications = new HashSet<Integer>();
      @Override
      public void run() {
                while (!t.isInterrupted()) {
                    try {
                        SyncHttpClient client = new SyncHttpClient();
                        client.addHeader("Authorization", String.format("Bearer %s", currentAccount.getToken()));
                        client.get(url, new AsyncHttpResponseHandler() {

                            @Override
                            public void onSuccess(int statusCode, Header[] headers, byte[] responseBody) {
                                try {
                                    DropletDao dropletDao = new DropletDao(DatabaseHelper.getInstance(context));
                                    ImageDao imageDao = new ImageDao(DatabaseHelper.getInstance(context));
                                    RegionDao regionDao = new RegionDao(DatabaseHelper.getInstance(context));
                                    JSONObject jsonObject = new JSONObject(new String(responseBody));
                                    JSONArray actionsJSONArray = jsonObject.getJSONArray("actions");
                                    for (int i = 0; i < actionsJSONArray.length(); i++) {
                                        JSONObject actionJSONObject = actionsJSONArray.getJSONObject(i);
                                        Action action = jsonObjectToAction(actionJSONObject);
                                        if (action.getStatus().equals("in-progress")) {
                                            if (!shownNotifications.contains((int) action.getId())) {
                                                builder = new NotificationCompat.Builder(context);
                                                if (action.getResourceType().equals("droplet")) {
                                                    builder.setContentTitle(dropletDao.findById(action.getResourceId()).getName())
                                                            .setContentText(action.getType() + " - in progress")
                                                            .setSmallIcon(R.drawable.ic_launcher);
                                                    builder.setProgress(0, 0, true);
                                                }
                                                else if (action.getResourceType().equals("image")) {
                                                    String message = "";
                                                    if(action.getType().equals("transfer")){
                                                        message = String.format("Transferring image \"%s\" to %s", imageDao.findById(action.getResourceId()).getName(),
                                                                regionDao.findByProperty(RegionTable.REGION_SLUG, action.getRegion()).getName());
                                                    } else if(action.getType().equals("image_destroy")){
                                                        message = String.format("Deleting snapshot \"%s\"", imageDao.findById(action.getResourceId()).getName());
                                                    }
                                                    builder.setContentTitle(imageDao.findById(action.getResourceId()).getName())
                                                            .setContentText(message)
                                                            .setSmallIcon(R.drawable.ic_launcher);
                                                    builder.setProgress(0, 0, true);
                                                }

                                                builder.setContentIntent(PendingIntent.getActivity(context, 0, new Intent(), PendingIntent.FLAG_UPDATE_CURRENT));
                                                notifyManager.notify((int) action.getId(), builder.build());
                                                shownNotifications.add((int) action.getId());
                                            }
                                        } else {
                                            if (shownNotifications.contains((int) action.getId())) {
                                                new DropletService(context).getAllDropletsFromAPI(false, false);
                                                shownNotifications.remove((int) action.getId());
                                            }
                                            notifyManager.cancel((int) action.getId());
                                        }
                                    }
                                } catch (JSONException e) {
                                    e.printStackTrace();
                                }
                            }

                            @Override
                            public void onFailure(int statusCode, Header[] headers, byte[] responseBody, Throwable error) {
                            }
                        });
                        Thread.sleep(5000);
                    } catch (InterruptedException e) {
                        t.interrupt();
                        e.printStackTrace();
                    }
                }
      }
    });
    t.start();
  }
  
  

  private static Action jsonObjectToAction(JSONObject actionJSONObject) {
    Action action = new Action();
    try {
      action.setId(actionJSONObject.getLong("id"));
      action.setStatus(actionJSONObject.getString("status"));
      action.setType(actionJSONObject.getString("type"));
      action.setResourceId(actionJSONObject.getLong("resource_id"));
      action.setResourceType(actionJSONObject.getString("resource_type"));
      action.setRegion(actionJSONObject.getString("region"));
      if(!actionJSONObject.getString("started_at").equals("null")){
        action.setStartedAt(ApiHelper.iso8601Format.parse(actionJSONObject.getString("started_at").replace("Z", "")));
      }
      if(!actionJSONObject.getString("completed_at").equals("null")){
        action.setCompletedAt(ApiHelper.iso8601Format.parse(actionJSONObject.getString("completed_at").replace("Z", "")));
      }
    } catch (ParseException e) {
      e.printStackTrace();
    } catch (JSONException e) {
      e.printStackTrace();
    }
    return action;
  }
}




Java Source Code List

android.support.v4.preference.PreferenceFragment.java
android.support.v4.preference.PreferenceManagerCompat.java
com.yassirh.digitalocean.data.AccountDao.java
com.yassirh.digitalocean.data.AccountTable.java
com.yassirh.digitalocean.data.DatabaseHelper.java
com.yassirh.digitalocean.data.DomainDao.java
com.yassirh.digitalocean.data.DomainTable.java
com.yassirh.digitalocean.data.DropletDao.java
com.yassirh.digitalocean.data.DropletTable.java
com.yassirh.digitalocean.data.ImageDao.java
com.yassirh.digitalocean.data.ImageTable.java
com.yassirh.digitalocean.data.NetworkDao.java
com.yassirh.digitalocean.data.NetworkTable.java
com.yassirh.digitalocean.data.RecordDao.java
com.yassirh.digitalocean.data.RecordTable.java
com.yassirh.digitalocean.data.RegionDao.java
com.yassirh.digitalocean.data.RegionTable.java
com.yassirh.digitalocean.data.SSHKeyDao.java
com.yassirh.digitalocean.data.SSHKeyTable.java
com.yassirh.digitalocean.data.SizeDao.java
com.yassirh.digitalocean.data.SizeTable.java
com.yassirh.digitalocean.data.SqlDao.java
com.yassirh.digitalocean.data.TableHelper.java
com.yassirh.digitalocean.model.Account.java
com.yassirh.digitalocean.model.Action.java
com.yassirh.digitalocean.model.Domain.java
com.yassirh.digitalocean.model.Droplet.java
com.yassirh.digitalocean.model.Image.java
com.yassirh.digitalocean.model.Network.java
com.yassirh.digitalocean.model.Record.java
com.yassirh.digitalocean.model.Region.java
com.yassirh.digitalocean.model.SSHKey.java
com.yassirh.digitalocean.model.Size.java
com.yassirh.digitalocean.service.AccountService.java
com.yassirh.digitalocean.service.ActionService.java
com.yassirh.digitalocean.service.DomainService.java
com.yassirh.digitalocean.service.DropletService.java
com.yassirh.digitalocean.service.ImageService.java
com.yassirh.digitalocean.service.NotificationsIndexes.java
com.yassirh.digitalocean.service.RecordService.java
com.yassirh.digitalocean.service.RegionService.java
com.yassirh.digitalocean.service.SSHKeyService.java
com.yassirh.digitalocean.service.SizeService.java
com.yassirh.digitalocean.ui.AccountAdapter.java
com.yassirh.digitalocean.ui.AddAccountActivity.java
com.yassirh.digitalocean.ui.DomainAdapter.java
com.yassirh.digitalocean.ui.DomainDetailsDialogFragment.java
com.yassirh.digitalocean.ui.DomainsFragment.java
com.yassirh.digitalocean.ui.DrawerPositions.java
com.yassirh.digitalocean.ui.DropletAdapter.java
com.yassirh.digitalocean.ui.DropletDetailsDialogFragment.java
com.yassirh.digitalocean.ui.DropletResizeDialogFragment.java
com.yassirh.digitalocean.ui.DropletsFragment.java
com.yassirh.digitalocean.ui.ImageAdapter.java
com.yassirh.digitalocean.ui.ImagesFragment.java
com.yassirh.digitalocean.ui.MainActivity.java
com.yassirh.digitalocean.ui.NavigationDrawerAdapter.java
com.yassirh.digitalocean.ui.NewDropletActivity.java
com.yassirh.digitalocean.ui.PrefsFragment.java
com.yassirh.digitalocean.ui.RecordAdapter.java
com.yassirh.digitalocean.ui.RecordCreateDialogFragment.java
com.yassirh.digitalocean.ui.RecordTypeAdapter.java
com.yassirh.digitalocean.ui.RegionAdapter.java
com.yassirh.digitalocean.ui.RegionsFragment.java
com.yassirh.digitalocean.ui.SSHKeyAdapter.java
com.yassirh.digitalocean.ui.SSHKeyCreateDialogFragment.java
com.yassirh.digitalocean.ui.SSHKeyFragment.java
com.yassirh.digitalocean.ui.SettingsActivity.java
com.yassirh.digitalocean.ui.SizeAdapter.java
com.yassirh.digitalocean.ui.SizesFragment.java
com.yassirh.digitalocean.ui.SwitchAccountDialogFragment.java
com.yassirh.digitalocean.ui.Updatable.java
com.yassirh.digitalocean.ui.widget.MultiSelectSpinner.java
com.yassirh.digitalocean.utils.ApiHelper.java
com.yassirh.digitalocean.utils.AppRater.java
com.yassirh.digitalocean.utils.MyApplication.java
com.yassirh.digitalocean.utils.MyBroadcastReceiver.java
com.yassirh.digitalocean.utils.PreferencesHelper.java