forked from jens/Automation
306 lines
8.4 KiB
Java
306 lines
8.4 KiB
Java
package com.jens.automation2;
|
|
|
|
import android.annotation.SuppressLint;
|
|
import android.app.Activity;
|
|
import android.app.PendingIntent;
|
|
import android.app.ProgressDialog;
|
|
import android.content.DialogInterface;
|
|
import android.content.DialogInterface.OnCancelListener;
|
|
import android.content.Intent;
|
|
import android.content.IntentFilter;
|
|
import android.nfc.NfcAdapter;
|
|
import android.nfc.Tag;
|
|
import android.os.Bundle;
|
|
import android.view.View;
|
|
import android.view.View.OnClickListener;
|
|
import android.widget.Button;
|
|
import android.widget.EditText;
|
|
import android.widget.TextView;
|
|
import android.widget.Toast;
|
|
|
|
import com.jens.automation2.receivers.NfcReceiver;
|
|
|
|
@SuppressLint("NewApi")
|
|
public class ActivityManageTriggerNfc extends Activity
|
|
{
|
|
public static String generatedId = null;
|
|
private static Tag discoveredTag = null;
|
|
|
|
EditText etNewNfcIdValue;
|
|
Button bReadNfcTag, bUseValueCurrentlyStored, bWriteNfcTag;
|
|
TextView tvCurrentNfcId;
|
|
|
|
private static int currentStatus = 0;
|
|
private static ProgressDialog progressDialog = null;
|
|
|
|
// Check if NFC is activated
|
|
|
|
@Override
|
|
protected void onCreate(Bundle savedInstanceState)
|
|
{
|
|
super.onCreate(savedInstanceState);
|
|
setContentView(R.layout.activity_manage_trigger_nfc);
|
|
|
|
etNewNfcIdValue = (EditText)findViewById(R.id.etNewNfcIdValue);
|
|
bReadNfcTag = (Button)findViewById(R.id.bReadNfcTag);
|
|
bUseValueCurrentlyStored = (Button)findViewById(R.id.bUseValueCurrentlyStored);
|
|
bWriteNfcTag = (Button)findViewById(R.id.bWriteNfcTag);
|
|
tvCurrentNfcId = (TextView)findViewById(R.id.tvCurrentNfcId);
|
|
|
|
bReadNfcTag.setOnClickListener(new OnClickListener()
|
|
{
|
|
@Override
|
|
public void onClick(View v)
|
|
{
|
|
if(discoveredTag != null)
|
|
{
|
|
generatedId = NfcReceiver.readTag(discoveredTag);
|
|
tvCurrentNfcId.setText(generatedId);
|
|
}
|
|
else
|
|
{
|
|
progressDialog = ProgressDialog.show(ActivityManageTriggerNfc.this, null, getResources().getString(R.string.nfcBringTagIntoRange), false, true, new OnCancelListener()
|
|
{
|
|
@Override
|
|
public void onCancel(DialogInterface dialog)
|
|
{
|
|
progressDialog.dismiss();
|
|
progressDialog = null;
|
|
currentStatus = 0;
|
|
}
|
|
});
|
|
}
|
|
}
|
|
});
|
|
|
|
bUseValueCurrentlyStored.setOnClickListener(new OnClickListener()
|
|
{
|
|
@Override
|
|
public void onClick(View v)
|
|
{
|
|
if(discoveredTag != null)
|
|
{
|
|
if(checkEnteredText(false))
|
|
{
|
|
setResult(RESULT_OK);
|
|
finish();
|
|
}
|
|
}
|
|
else
|
|
{
|
|
progressDialog = ProgressDialog.show(ActivityManageTriggerNfc.this, null, getResources().getString(R.string.nfcBringTagIntoRange), false, true, new OnCancelListener()
|
|
{
|
|
@Override
|
|
public void onCancel(DialogInterface dialog)
|
|
{
|
|
progressDialog.dismiss();
|
|
progressDialog = null;
|
|
currentStatus = 0;
|
|
}
|
|
});
|
|
|
|
currentStatus = 1;
|
|
}
|
|
}
|
|
});
|
|
|
|
bWriteNfcTag.setOnClickListener(new OnClickListener()
|
|
{
|
|
@Override
|
|
public void onClick(View v)
|
|
{
|
|
if(checkEnteredText(true))
|
|
{
|
|
// ActivityPermissions.requestSpecificPermission("android.permission.NFC");
|
|
if(discoveredTag != null)
|
|
{
|
|
tryWrite();
|
|
}
|
|
else
|
|
{
|
|
progressDialog = ProgressDialog.show(ActivityManageTriggerNfc.this, null, getResources().getString(R.string.nfcBringTagIntoRange), false, true, new OnCancelListener()
|
|
{
|
|
@Override
|
|
public void onCancel(DialogInterface dialog)
|
|
{
|
|
progressDialog.dismiss();
|
|
progressDialog = null;
|
|
currentStatus = 0;
|
|
}
|
|
});
|
|
|
|
currentStatus = 2;
|
|
|
|
// Toast.makeText(ActivityManageNfc.this, "No tag.", Toast.LENGTH_LONG).show();
|
|
// Miscellaneous.logEvent("w", "NFC", "No tag.", 2);
|
|
}
|
|
}
|
|
}
|
|
});
|
|
|
|
if(generatedId != null)
|
|
etNewNfcIdValue.setText(generatedId);
|
|
}
|
|
|
|
public static void enableForegroundDispatch(final Activity activity)
|
|
{
|
|
NfcAdapter nfcAdapter = NfcReceiver.getNfcAdapter(activity);
|
|
|
|
final Intent intent = new Intent(activity.getApplicationContext(), activity.getClass());
|
|
intent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
|
|
|
|
final PendingIntent pendingIntent = PendingIntent.getActivity(activity.getApplicationContext(), 0, intent, 0);
|
|
|
|
IntentFilter[] filters = new IntentFilter[1];
|
|
String[][] techList = new String[][]{};
|
|
|
|
// Notice that this is the same filter as in our manifest.
|
|
filters[0] = new IntentFilter();
|
|
filters[0].addAction(NfcAdapter.ACTION_NDEF_DISCOVERED);
|
|
filters[0].addAction(NfcAdapter.ACTION_TAG_DISCOVERED);
|
|
filters[0].addAction(NfcAdapter.ACTION_TECH_DISCOVERED);
|
|
filters[0].addCategory(Intent.CATEGORY_DEFAULT);
|
|
// try
|
|
// {
|
|
// filters[0].addDataType(NfcReceiver.MIME_TEXT_PLAIN);
|
|
// }
|
|
// catch (MalformedMimeTypeException e)
|
|
// {
|
|
// throw new RuntimeException("Check your mime type.");
|
|
// }
|
|
|
|
nfcAdapter.enableForegroundDispatch(activity, pendingIntent, filters, techList);
|
|
|
|
Miscellaneous.logEvent("i", "NFC", "Enabled foreground dispatch.", 5);
|
|
}
|
|
|
|
public static void disableForegroundDispatch(final Activity activity)
|
|
{
|
|
NfcAdapter nfcAdapter = NfcReceiver.getNfcAdapter(activity);
|
|
nfcAdapter.disableForegroundDispatch(activity);
|
|
Miscellaneous.logEvent("i", "NFC", "Disabled foreground dispatch.", 5);
|
|
}
|
|
|
|
@Override
|
|
protected void onPause()
|
|
{
|
|
/**
|
|
* Call this before onPause, otherwise an IllegalArgumentException is thrown as well.
|
|
*/
|
|
disableForegroundDispatch(this);
|
|
|
|
super.onPause();
|
|
}
|
|
|
|
@Override
|
|
protected void onResume()
|
|
{
|
|
super.onResume();
|
|
/**
|
|
* It's important, that the activity is in the foreground (resumed). Otherwise
|
|
* an IllegalStateException is thrown.
|
|
*/
|
|
enableForegroundDispatch(this);
|
|
|
|
// NfcReceiver.checkIntentForNFC(this, new Intent(this.getApplicationContext(), this.getClass()));
|
|
}
|
|
|
|
@Override
|
|
protected void onNewIntent(Intent intent)
|
|
{
|
|
Miscellaneous.logEvent("i", "NFC", "ActivityManageNfc->onNewIntent().", 5);
|
|
|
|
Tag tag = intent.getParcelableExtra(NfcAdapter.EXTRA_TAG);
|
|
|
|
if(tag == null)
|
|
{
|
|
tvCurrentNfcId.setText(getResources().getString(R.string.nfcNoTag));
|
|
}
|
|
else
|
|
{
|
|
Miscellaneous.logEvent("i", "NFC", getResources().getString(R.string.nfcTagDiscovered), 4);
|
|
Toast.makeText(this, getResources().getString(R.string.nfcTagDiscovered), Toast.LENGTH_LONG).show();
|
|
discoveredTag = tag;
|
|
if(progressDialog != null)
|
|
{
|
|
progressDialog.dismiss();
|
|
progressDialog = null;
|
|
}
|
|
|
|
if(currentStatus == 0)
|
|
{
|
|
generatedId = NfcReceiver.readTag(discoveredTag);
|
|
if(generatedId != null && generatedId.length() > 0)
|
|
tvCurrentNfcId.setText(generatedId);
|
|
else
|
|
tvCurrentNfcId.setText(getResources().getString(R.string.nfcTagDataNotUsable));
|
|
}
|
|
else if(currentStatus == 1)
|
|
{
|
|
tryRead();
|
|
}
|
|
else if(currentStatus == 2)
|
|
if(checkEnteredText(true))
|
|
tryWrite();
|
|
}
|
|
|
|
// NfcReceiver.checkIntentForNFC(this, intent);
|
|
}
|
|
|
|
private boolean checkEnteredText(boolean checkGuiValue)
|
|
{
|
|
if(checkGuiValue)
|
|
generatedId = etNewNfcIdValue.getText().toString();
|
|
|
|
if(generatedId.length() == 0)
|
|
{
|
|
generatedId = null;
|
|
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcEnterValidIdentifier), Toast.LENGTH_LONG).show();
|
|
return false;
|
|
}
|
|
else
|
|
return true;
|
|
}
|
|
|
|
private void tryWrite()
|
|
{
|
|
if(NfcReceiver.writeTag(generatedId, discoveredTag))
|
|
{
|
|
currentStatus = 0;
|
|
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcTagWrittenSuccessfully), Toast.LENGTH_LONG).show();
|
|
setResult(RESULT_OK);
|
|
finish();
|
|
}
|
|
else
|
|
{
|
|
currentStatus = 0;
|
|
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcTagWriteError), Toast.LENGTH_LONG).show();
|
|
Miscellaneous.logEvent("e", "NFC", getResources().getString(R.string.nfcTagWriteError), 2);
|
|
}
|
|
}
|
|
|
|
private void tryRead()
|
|
{
|
|
generatedId = NfcReceiver.readTag(discoveredTag);
|
|
if(checkEnteredText(false))
|
|
{
|
|
currentStatus = 0;
|
|
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcTagReadSuccessfully), Toast.LENGTH_LONG).show();
|
|
setResult(RESULT_OK);
|
|
finish();
|
|
}
|
|
else
|
|
{
|
|
currentStatus = 0;
|
|
Toast.makeText(ActivityManageTriggerNfc.this, getResources().getString(R.string.nfcValueNotSuitable), Toast.LENGTH_LONG).show();
|
|
generatedId = null;
|
|
}
|
|
}
|
|
|
|
@Override
|
|
protected void onDestroy()
|
|
{
|
|
super.onDestroy();
|
|
discoveredTag = null;
|
|
}
|
|
} |