giovedì 29 novembre 2012

Messaggio "ok cancel" in Android

In un app android si vuole far comparire un messaggio di testo e i due classici pulsanti "ok" e "cancel" per eseguire operazioni diverse.
L'esempio seguente puo' essere integrato e modificato nel progetto:
AlertDialog.Builder alertbox = new AlertDialog.Builder(Question.this);
alertbox.setMessage(getString(R.string.lbl_msg_sure)); //read next
alertbox.setPositiveButton("Ok", new DialogInterface.OnClickListener() {   
 public void onClick(DialogInterface arg0, int arg1) {
  /* ...call something for Ok click */
 }
});  
alertbox.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {   
 public void onClick(DialogInterface arg0, int arg1) {
  /* ...call something for Cancel click */
  }             
 });      
alertbox.show(); 
Variabile "lbl_msg_sure" definita nel file xml sotto la directory "values"
<string name="lbl_msg_sure">Are you sure?</string>

lunedì 26 novembre 2012

Rendere oggetti visibili o non visibili su di un pdf

Su di un pdf è possibile rendere degli oggetti visibili o non visibili allo scatenarsi di un evento di un oggetto.
In questo esempio a seconda dell'item selezionato su di una DropDownList è possibile rendere invisibili o visibili degli oggetti come un rettangolo, un cerchio e una textfield contenuti su di un pdf.
Il suggerimento quindi è nel creare una "subform" per l'oggetto sui cui si vuole eseguire l'operazione e una "subform" che contenga gli altri oggetti
Di seguito il codice da inserire all'evento "exit" del "DropDownList":
if (xfa.form.form1.sub1.DropDownList1.rawValue == "Hidden objects"){
 xfa.form.form1.sub2.presence = "hidden";
}
if (xfa.form.form1.sub1.DropDownList1.rawValue == "View objects"){
 xfa.form.form1.sub2.presence = "visible";
}
Creazione form:


Oggetti visibili:


Oggetti invisibili:


giovedì 22 novembre 2012

Colorare un rettangolo con RadioButton

Un semplice esempio javascript di come colorare un rettangolo su di un pdf all'evento click di un RadioButton (in questo caso il sorgente del pdf è l'xdp).
Ad esclusione se viene premuto il primo pulsante il rettangolo si colorerà di verde, se verrà premuto il secondo il colore sarà arancione e per il terzo sarà rosso.

Tool utilizzato in questo esempio: Adobe LiveCycle Designer ES3, ma codice utilizzabile anche in altre versioni antecedenti al ES3

/* form1.sub1.RadioButtonList.#field[0]::click - (JavaScript, client) */
this.resolveNode("Rectangle1").value.rectangle.fill.color.value  = "0, 209, 0"; //green

/* form1.sub1.RadioButtonList.#field[1]::click - (JavaScript, client) */
this.resolveNode("Rectangle1").value.rectangle.fill.color.value  = "255, 106, 0"; //orange

/* form1.sub1.RadioButtonList.#field[2]::click - (JavaScript, client) */
this.resolveNode("Rectangle1").value.rectangle.fill.color.value  = "255, 0, 0"; //red



lunedì 19 novembre 2012

News per i download di QUIZ

Quiz arriva oggi a 50.007 download in quasi 6 mesi senza campagne a pagamento con una media di 200 al giorno!
Il flip per switchare tra le due classifiche lo aggiornerò tra qualche tempo permettendo di flippare anche con il dito sulle liste dei giocatori (piccola miglioria).
Per ora va bene così flippando in alto e in basso e per il resto sembra proprio che vada bene.

domenica 18 novembre 2012

Aggiornamento Word Scramble Lite

Aggiornata Word Scramble Lite sul market di Android.

Di seguito gli aggiornamenti:
- inserite le classifiche online TOP OF THE WEEK (i migliori 20 giocatori della settimana) e TOP 20 WORLD (classifiche valide solo nella versione lite); punteggio massimo 10.000;
- aggiornata la versione android con possibilità di installare l'app su memory card oppure sul telefono.

venerdì 16 novembre 2012

Android e un "alter table" su database SQLite

Ci sono diversi modi di eseguire un "alter table" su SQLite di Android nel caso manchi o si voglia aggiornare un campo su di una tabella.
Eccone un esempio dove prima viene effettuato un test di esistenza del campo e in caso negativo si procede alla sua creazione:

SQLiteDatabase db;
OpenHelper openHelper = new OpenHelper(this.context); 
this.db = openHelper.getWritableDatabase(); 

try{
 /* check if field exists */
 String sql ="select sql from sqlite_master where " + 
  "tbl_name = 'tbl_example' and sql like '%field_price INTEGER%'";    
 
 long lngResult = DatabaseUtils.longForQuery(arg0,sql, null);
 
}catch(SQLException e){
 upgradeToVersion(this.db);
}
 
private void upgradeToVersion(SQLiteDatabase db) {
 try{
  /* add an integer field */
  db.execSQL("ALTER TABLE tbl_example " ADD " + 
   "field_price INTEGER");
 }catch(SQLException e){}
}

martedì 13 novembre 2012

Disabilitare tutti gli oggetti in un pdf con un click

Con questo esempio è possibile disabilitare tutti gli oggetti posizionati su di una form con un "solo colpo".
Provare ad inserire queste righe di codice nell'evento onclick di un pulsante Button.
for (var nPageCount = 0; nPageCount < xfa.host.numPages; nPageCount++) {
 var oFields = xfa.layout.pageContent(nPageCount, "field");
 var nNodesLength = oFields.length;
 for (var nNodeCount = 0; nNodeCount < nNodesLength; nNodeCount++) {
  oFields.item(nNodeCount).access = "readOnly";
 }
}
Designer:

Output:

domenica 11 novembre 2012

Creazione e popolamento dati in una DropDownList in una .aspx

In questo esempio è rappresentata la creazione di una DropDownList e di un suo popolamento statico (ossia non da db o da file) di 10 numeri in un ciclo for in c#.
Nella prima parte viene indicato l'oggetto nella pagina, nella seconda il codice da integrare per il caricamento di esempio.

Parte da integrare nella pagina .aspx
<asp:DropDownList ID="DropDownList1" runat="server"
 DataValueField="example_value" DataTextField="example_value" 
 AutoPostBack="False">
</asp:DropDownList>
Codice da integrare nel file .aspx.cs
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        PopulateDropDownList();
    }

    protected void PopulateDropDownList()
    {
        DataTable dataTable = null;
        try
        {
            dataTable = new DataTable("dt");
            dataTable.Columns.Add(new DataColumn("example_value", typeof(string)));
            DataRow dataRow = dataTable.NewRow();

            DateTime date;
            date = DateTime.Now;

            dataRow = dataTable.NewRow();
            dataRow["example_value"] = "";
            dataTable.Rows.Add(dataRow);
            for (int i = 1; i < 11; i++)
            {
                dataRow = dataTable.NewRow();
                dataRow["example_value"] = i.ToString();
                dataTable.Rows.Add(dataRow);
            }

            DropDownList1.DataSource = dataTable;
            DropDownList1.DataBind();
        }
        catch (Exception ex)
        {
            //log.Error(ex);
        }
        if (dataTable != null)
            dataTable.Dispose();
    }
}
Output:


venerdì 9 novembre 2012

Cambio focus tra campi testo in un pdf

L'esempio seguente permette di far passare il focus da un campo testo ad un altro in un pdf, come il giorno mese anno per un data.
Non appena inserite due cifre per il giorno il cursore automaticamente passa all'altro campo per inserire il mese e successivamente l'anno.
Inserire tre campi testo su di un pdf, inserire il codice nell'evento onchange dei primi due campi testo.
/* evento onchange del primo campo testo */
var focusText =  xfa.event.fullText ;
if (focusText.length>1)
 xfa.host.setFocus("xfa.form.form1.subform1.TextField2");
 
/* evento onchange del secondo campo testo */
var focusText =  xfa.event.fullText ;
if (focusText.length>1)
 xfa.host.setFocus("xfa.form.form1.subform1.TextField3");
Output:


mercoledì 7 novembre 2012

Tabella dinamica nel pdf: aggiunta ed eliminazione righe

L'esempio mostra come creare una tabella dinamica su di un pdf con due pulsanti e due campi testo.
Si possono quindi aggiungere o togliere righe dalla tabella e inserire del testo nei campi predisposti.
Prima di creare il pdf (fatto da una tabella con inclusi un pulsante e due campi testo) e scrivere del codice, ricordarsi di settare alcune impostazioni come rappresentato nelle figure successive.
Tool utilizzato: Adobe LiveCycle Designer e file xdp sorgente del pdf.

Script per aggiunta di una riga:
Table1._Row1.addInstance(true);
Script per eliminazione di una riga:
Table1._Row1.removeInstance(this.parent.index);
Figure:




Output:


lunedì 5 novembre 2012

Binding xml con un pdf in c#

L'esempio seguente permette di fare un binding tra un file xml e un pdf in ambiente .Net con linguaggio c#.
Immaginiamo un file .aspx con due soli campi: una listbox e un pulsante.
All'evento click del pulsante alcuni "campi testo" di un documento pdf "example.pdf" verranno popolati con dei valori presenti in un file xml "example.xml" e verrà creato su di un path (ad esempio c:\).
La listbox è per il tracciamento delle operazioni.
Tool/ambienti utilizzati: .Net 2005, Acrobat Professional e SDK 9 di Adobe.
Sorgente e immagini:

protected void btnExample_Click(object sender, EventArgs e)
{
 Object newDoc = new Object();

 string sourceDocument = @"" + Server.HtmlEncode(Request.PhysicalApplicationPath) +
  "example.pdf"; //where is pdf
 string outputString = @"c:\\";  //path output pdf
 string pathXmlToMerge = @"C:\example.xml";//is file temp

 //create a file xml to merge
 CreateXmlFileNamePdf(pathXmlToMerge, ddlist.Text);

 bool booleOpenDocument;

 AcroAVDoc avDoc = new AcroAVDoc();
 CAcroApp acroApp = new AcroAppClass();

 booleOpenDocument = avDoc.Open(sourceDocument, "");
 if (!booleOpenDocument)
  listOperation.Items.Add("Failed to open source document.");

 CAcroPDDoc pdDoc = (CAcroPDDoc)avDoc.GetPDDoc();

 Object jsObj = pdDoc.GetJSObject();

 object[] getTemplateParam = { "Templates:1" };
 Object template = new Object();

 Type T = jsObj.GetType();
 template = T.InvokeMember(
  "getTemplate",
  BindingFlags.InvokeMethod |
  BindingFlags.Public |
  BindingFlags.Instance,
  null, jsObj, getTemplateParam);

 if (template == null)
 {
  template = T.InvokeMember(
   "createTemplate",
   BindingFlags.InvokeMethod |
   BindingFlags.Public |
   BindingFlags.Instance,
   null, jsObj, getTemplateParam);
 }

 if (template == null)
 {
  listOperation.Items.Add("Failed to acquire form template.");
  avDoc.Close(1);
  acroApp.CloseAllDocs();
  acroApp.Exit();
 }
 object[] spawnParam = { 1, false, false };

 try
 {
  for (int i = 0; i < 1; i++)
  {
   Type templateType = template.GetType();
   templateType.InvokeMember(
    "spawn",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, template, spawnParam);

   object[] extractPagesParam = { 1 };
   newDoc = T.InvokeMember(
    "extractPages",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, jsObj, extractPagesParam);

   //merge xml to pdf
   object[] importTextDataParam = { pathXmlToMerge, 0 };
   T.InvokeMember(
    "importXFAData",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, newDoc, importTextDataParam);

   //save pdf
   object[] saveAsParam = { outputString + "example_" + nameFilePdf +
    ".pdf" };
   T.InvokeMember(
    "saveAs",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, newDoc, saveAsParam);

   bool formDataExists = true;

   object[] closeDocParam = { !formDataExists };
   T.InvokeMember(
    "closeDoc",
    BindingFlags.InvokeMethod |
    BindingFlags.Public |
    BindingFlags.Instance,
    null, newDoc, closeDocParam);
  }
  avDoc.Close(1);
  acroApp.CloseAllDocs();
  acroApp.Exit();
  listOperation.Items.Add("File PDF created.");
 }
 catch (Exception ex)
 {
  listOperation.Items.Add("Error: " + ex.Message);
 }
}

Configurazione progetto:


Operazioni:


Output su pdf:


sabato 3 novembre 2012

Campo testo a pettine su pdf

Ecco come creare un campo testo con un numero di celle tante quanti sono i caratteri da inserire.
Supponiamo ad esempio di aver bisogno di un codice di 5 caratteri (oppure un codice fiscale) e farlo apparire in un campo testo come se fossero 5 celle distinte.
Con LiveCycle Designer, nel momento della creazione del pdf, esiste la proprietà "comb" che permette di splittare il testo in n celle.
Nelle figure successive:

La proprietà comb


L'output

giovedì 1 novembre 2012

Inserimento dei banner AdMob in Android

Nella speranza di poter dare un aiuto a chi si cimenterà ad inserire i banner AdMob in un app Android, scrivo una piccola guida suddivisa in step di operazioni da effettuare:

- scaricare l'sdk da Google qui
- inserire il pacchetto jar nella directory "libs" e referenziarlo (con Eclipse tasto destro sul progetto - properties - java build path - add JARs)
- modificare l' AndroidManifest.xml
- creare il file attrs.xml sotto la directory "values"
- inserire nel layout dove comparirà il banner la proprietà xmlns:app="http://schemas.android.com/apk/lib/com.google.ads"
- integrare e modificare nel layout dove comparirà il banner il codice successivamente riportato
- modificare la classe dove verrà attivato il banner (l' onCreate in questo caso)
- modificare il metodo "onDestroy"

AndroidManifest.xml di esempio (modificare il codice ADMOB_PUBLISHER_ID)
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.mypackage.myapp"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".Main" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.google.ads.AdActivity"
android:configChanges="keyboard|keyboardHidden|orientation"/> 
<meta-data android:name="ADMOB_PUBLISHER_ID" android:value="123456789012345"/>
<meta-data android:name="ADMOB_ALLOW_LOCATION_FOR_ADS" android:value="false"/>
</application>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> 
</manifest> 
Classe di esempio:
public class Main implements AdListener{
private AdView mAdView;

public void onCreate(Bundle savedInstanceState) {
 super.onCreate(savedInstanceState);
 setContentView(R.layout.main);

 AdRequest ar = new AdRequest();
 mAdView = (AdView) findViewById(R.id.ad);
 
 mAdView.setAdListener(this); 
 mAdView.loadAd(ar);
}

@Override
protected void onDestroy() {
 if (mAdView != null) 
  mAdView.destroy();
 super.onDestroy();
}

}
File attrs.xml
<?xml version="1.0" encoding="utf-8"?> 
<resources>
<declare-styleable name="com.google.ads.AdView">
<attr name="backgroundColor" format="color" />
<attr name="primaryTextColor" format="color" />
<attr name="secondaryTextColor" format="color" />
<attr name="adSize">
<enum name="BANNER" value="1" />
<enum name="IAB_MRECT" value="2" />
<enum name="IAB_BANNER" value="3" />
<enum name="IAB_LEADERBOARD" value="4" />
</attr> 
<attr name="adUnitId" format="string"/>       
</declare-styleable>
</resources>
Integrare ed eventualmente modificare il layout dove comparirà il banner con (aggiornare adUnitId) :
<com.google.ads.AdView android:id="@+id/ad" 
android:layout_gravity="bottom"  
android:layout_width="fill_parent" 
android:layout_height="wrap_content" 
app:backgroundColor="#000000"
app:primaryTextColor="#FFFFFF" 
app:secondaryTextColor="#CCCCCC"
app:adUnitId="123456789012345"
app:adSize="BANNER"/>