Android Open Source - SuiviConsoFreeMobile Suivi Conso Free Mobile Activity






From Project

Back to project page SuiviConsoFreeMobile.

License

The source code is released under:

Ce logiciel est dans le domaine public.

If you think the Android project SuiviConsoFreeMobile 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 net.yvesd.scfm;
/*  www .j  av a 2s  .c om*/
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import android.app.ListActivity;
import android.app.ProgressDialog;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.ColorFilter;
import android.graphics.LightingColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.Parcelable;
import android.text.Html;
import android.util.Log;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.TextView;
import android.widget.Toast;

/**
 * Activit principale du programme
 * 
 * @author Yves Dessertine <yves.dessertine2@gmail.com>
 */
public class SuiviConsoFreeMobileActivity extends ListActivity implements
    CanWaitForStream {

  public static final String PREFS_NAME = "SuiviConsoFreeMobilePrefs";
  public static final String PREF_KEY_LISTE_COMPTES = "liste_comptes";
  public static final String PREF_KEY_DERNIER_COMPTE = "dernier_compte";
  public static final String PREF_KEY_THEME = "theme";
  public static final String PREF_KEY_COULEUR_ICONE_VOIX = "couleur_icone.conso_voix";
  public static final String PREF_KEY_COULEUR_ICONE_NUM_SPECIAUX = "couleur_icone.conso_num_speciaux";
  public static final String PREF_KEY_COULEUR_ICONE_SMS_MMS = "couleur_icone.conso_sms_mms";
  public static final String PREF_KEY_COULEUR_ICONE_DATA = "couleur_icone.conso_data";
  public static final String PREF_KEY_COULEUR_ICONE_HORSFORFAIT = "couleur_icone.hors_forfait";
  public static final String PREF_KEYPREFIX_PWD_ABO = "pwd_abo.";
  public static final String PREF_KEYPREFIX_PSEUDO_ABO = "pseudo_abo.";
  protected static final String CLE_BUNDLE_SAUVEGARDE_ETAT = "net.yvesd.scfm.donneesConso";

  String loginAbo = "";
  String pwdAbo = "";
  ProgressDialog progressDialog;
  List<String> progressMessages = new ArrayList<String>(); // TODO refactor
  SharedPreferences settings;
  Map<MenuItem, String> menuItemMap = new HashMap<MenuItem, String>();

  /**
   * Donns de suivi conso  afficher
   */
  DonnesCompteur[] donneesConso = new DonnesCompteur[] {};

  @Override
  public void onCreate(Bundle configurationSauvegardee) {

    chargerPreferences();

    GestionnaireThemes gt = new GestionnaireThemes(this);
    gt.chargerThemeChoisi();

    super.onCreate(configurationSauvegardee);

    setContentView(R.layout.main_layout);

    chargerLoginPwd();

    if (configurationSauvegardee == null) {

      lancerRequete();

    } else {

      Parcelable[] donnesConsoParcel = configurationSauvegardee
          .getParcelableArray(CLE_BUNDLE_SAUVEGARDE_ETAT);

      if (donnesConsoParcel != null
          && donnesConsoParcel instanceof DonnesCompteur[]) {

        donneesConso = (DonnesCompteur[]) donnesConsoParcel;
        displayData(donneesConso);

      } else {
        // TODO comprendre pourquoi on arrive dans ce cas
        // (ClassCastException : ne peut caster un Parcelable[] en
        // DonneesConso[]). Est-ce parce que la Activity est tue ?
        //
        // Contournement : on relance la requte, comme lors du premier
        // dmarrage

        lancerRequete();
      }
    }
  }

  @Override
  protected void onResume() {
    super.onResume();

    chargerPreferences();

    // Ceci afin de grer correctement la suppression de compte. Si
    // l'utilisateur supprime le compte actuellement slectionn, il faut
    // que ce changement soit rpercut dans cette activit. Ajout en v8
    chargerLoginPwd();

    displayData(donneesConso); // TODO refactor. Doublon avec handleResult
  }

  /**
   * Charge le login/password depuis les prfrences
   */
  private void chargerLoginPwd() {
    // Restaurer prfrences ou lancer premire configuration
    if (settings.contains(PREF_KEY_DERNIER_COMPTE)) {

      loginAbo = settings.getString(PREF_KEY_DERNIER_COMPTE, "");
      pwdAbo = settings.getString(PREF_KEYPREFIX_PWD_ABO + loginAbo, "");

    } else {
      // Pour viter que, lorsque l'on supprime le compte actuellement
      // affich, le soft croie encore qu'il a un compte (alors que plus
      // aucun compte n'est slectionn)
      loginAbo = "";
      pwdAbo = "";

      Toast.makeText(this, R.string.infobulle_appuyezmenu,
          Toast.LENGTH_LONG).show();
    }
  }

  protected void chargerPreferences() {
    settings = getSharedPreferences(PREFS_NAME, 0);
  }

  @Override
  protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);

    outState.putParcelableArray(CLE_BUNDLE_SAUVEGARDE_ETAT, donneesConso);
  }

  protected void lancerRequete() {
    displayData(new DonnesCompteur[] {});
    progressMessages.clear();

    progressDialog = new ProgressDialog(this);
    progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
    progressDialog.setTitle(getString(R.string.app_name));
    progressDialog.setMessage(""); // Contournement d'un problme : pas de
                    // messages sinon
    progressDialog.show();

    // Arrt si aucun compte n'est slectionn
    if ("".equals(loginAbo)) {
      addToProgress(getString(R.string.log_aucuncompte));
      setProgressStatus(100);

      return;
    }

    addToProgress("Identification auprs de Free Mobile"); // TODO
                                // externalize
                                // string
    setProgressStatus(12);

    TelechargeurDonnesConso dataRecuperator = new TelechargeurDonnesConso(
        this, new MyHttpClient(this));
    // DataRecuperatorMock dataRecuperator = new DataRecuperatorMock(this);
    DataRecuperatorParams params = new DataRecuperatorParams();
    params.setLoginAbo(loginAbo);
    params.setPwdAbo(pwdAbo);
    dataRecuperator.execute(params);
  }

  protected void addToProgress(String... strings) {
    for (String value : strings)
      progressMessages.add(value);

    String displayed = "";
    for (String message : progressMessages) {
      displayed += "* " + message + "\n";
    }
    progressDialog.setMessage(displayed);
  }

  @Override
  public void addToProgress(int res, Object... args) {
    addToProgress(getString(res, args));
  }

  @Override
  public void setProgressStatus(int p) {
    progressDialog.setProgress(p);
  }

  @Override
  public void handleResult(List<String> results) {

    try {
      String rawHtmlData = results.get(0);

      if (rawHtmlData == null)
        return;

      donneesConso = DataInterpreter.interpret(rawHtmlData);

      displayData(donneesConso);
      progressDialog.dismiss();

    } catch (Exception e) {
      Log.w("", "Suivi conso illisible", e);
      addToProgress(getString(R.string.log_suiviconsoillisible));
      setProgressStatus(100);
      return;
    }

  }

  private void displayData(DonnesCompteur[] interpret) {

    setListAdapter(new ArrayAdapter<DonnesCompteur>(this,
        R.layout.list_item, R.id.compteur, interpret) {

      @Override
      public View getView(int position, View convertView, ViewGroup parent) {

        if (convertView == null) {
          convertView = super.getView(position, convertView, parent);
        }

        TextView tv = (TextView) convertView;

        DonnesCompteur donnesCompteur = getItem(position);

        if (donnesCompteur.getRessourceId() == null) {

          tv.setCompoundDrawablesWithIntrinsicBounds(0, 0, 0, 0);

        } else {

          Drawable drawbl;

          Resources r = getResources();
          drawbl = r.getDrawable(donnesCompteur.getRessourceId());

          // POC colorize TODO REFACTOR
          String nomClePreference = donnesCompteur
              .getNomClePreference();
          int couleur;
          if (nomClePreference != null) {
            couleur = settings.getInt(nomClePreference,
                donnesCompteur.getCouleurDefaut());
          } else {
            couleur = donnesCompteur.getCouleurDefaut();
          }
          ColorFilter cf = new LightingColorFilter(couleur,
              Color.BLACK);
          drawbl.setColorFilter(cf);
          // Fin POC colorize

          tv.setCompoundDrawablesWithIntrinsicBounds(drawbl, null,
              null, null);
        }

        tv.setText(Html.fromHtml(donnesCompteur.getTexte()));
        return tv;
      }

    });
  }

  static class ViewVolder {
    Drawable drawable;
  }

  @Override
  public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main_menu, menu);
    return true;
  }

  @Override
  public boolean onPrepareOptionsMenu(Menu menu) {

    menuItemMap.clear();
    menu.removeGroup(1);
    String[] comptes = settings.getString(PREF_KEY_LISTE_COMPTES, "")
        .split(",");
    for (String compte : comptes) {
      if (!("".equals(compte))) {

        String pseudo = settings.getString(PREF_KEYPREFIX_PSEUDO_ABO
            + compte, "");
        String nomAffichage = "";

        if ("".equals(pseudo))
          nomAffichage = compte;
        else
          nomAffichage = pseudo;

        MenuItem mi = menu.add(1, Menu.NONE, Menu.FIRST,
            getString(R.string.menuitem_voircompte, nomAffichage));
        mi.setIcon(android.R.drawable.ic_menu_view);
        menuItemMap.put(mi, compte);
      }
    }

    return super.onPrepareOptionsMenu(menu);
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {

    Intent intent;

    if (menuItemMap.containsKey(item)) {
      // C'est une entre de menu de visualisation d'un compte

      loginAbo = menuItemMap.get(item);
      pwdAbo = settings.getString(PREF_KEYPREFIX_PWD_ABO + loginAbo, "");

      SharedPreferences.Editor ed = settings.edit();
      ed.putString(PREF_KEY_DERNIER_COMPTE, loginAbo);
      ed.commit();

      lancerRequete();

      return true;
    }

    switch (item.getItemId()) {
    case R.id.menuitem_afficherConsoDetaillee:

      intent = new Intent(this, AfficherSuiviconsoDetailleActivity.class);

      intent.putExtra(
          AfficherSuiviconsoDetailleActivity.CLE_BUNDLE_LOGIN,
          loginAbo);
      intent.putExtra(AfficherSuiviconsoDetailleActivity.CLE_BUNDLE_PWD,
          pwdAbo);

      startActivity(intent);

      return true;

    case R.id.editAccounts:

      intent = new Intent(this, EditAccountsActivity.class);

      startActivity(intent);

      return true;

    case R.id.basculerTheme:

      GestionnaireThemes gt = new GestionnaireThemes(this);
      gt.basculerTheme();
      rechargerActivite();
      return true;

    case R.id.options:
      intent = new Intent(this, OptionActivity.class);
      startActivity(intent);

    default:

      return false;
    }
  }

  protected void rechargerActivite() {

    // Les lignes commentes sont utilisables a partir de l'API 5

    Intent intent = getIntent();
    // overridePendingTransition(0, 0);
    // intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION);
    finish();

    // overridePendingTransition(0, 0);
    startActivity(intent);

  }
}




Java Source Code List

net.yvesd.scfm.AfficherSuiviconsoDetailleActivity.java
net.yvesd.scfm.CanWaitForStream.java
net.yvesd.scfm.DataInterpreter.java
net.yvesd.scfm.DataRecuperatorMock.java
net.yvesd.scfm.DataRecuperatorParams.java
net.yvesd.scfm.DonnesCompteur.java
net.yvesd.scfm.EditAccountActivity.java
net.yvesd.scfm.EditAccountsActivity.java
net.yvesd.scfm.ExtracteurErreur.java
net.yvesd.scfm.GestionIcones.java
net.yvesd.scfm.GestionnaireThemes.java
net.yvesd.scfm.MyHttpClient.java
net.yvesd.scfm.OptionActivity.java
net.yvesd.scfm.SuiviConsoFreeMobileActivity.java
net.yvesd.scfm.TelechargeurDonnesConso.java
net.yvesd.scfm.TelechargeurGenerique.java
net.yvesd.scfm.TelechargeurSuiviConsoDetaille.java