X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=src%2Forg%2Ffedorahosted%2Ffreeotp%2FMainActivity.java;h=1eb632abed79154c96584a1a1da425b1b3413d2f;hb=7c623216cb4072ead174d48f1bd5ce55e78433e4;hp=5a2f5a7289e6d95c3a45b476d179a177054f698f;hpb=275e1b17b97a635ab0e88856e4952619a62c9fc3;p=~andy%2Ffreeotp diff --git a/src/org/fedorahosted/freeotp/MainActivity.java b/src/org/fedorahosted/freeotp/MainActivity.java index 5a2f5a7..1eb632a 100644 --- a/src/org/fedorahosted/freeotp/MainActivity.java +++ b/src/org/fedorahosted/freeotp/MainActivity.java @@ -36,22 +36,12 @@ package org.fedorahosted.freeotp; -import java.util.Arrays; -import java.util.List; - import org.fedorahosted.freeotp.Token.TokenUriInvalidException; import org.fedorahosted.freeotp.adapters.TokenAdapter; import android.app.Activity; -import android.app.AlertDialog; -import android.content.ActivityNotFoundException; -import android.content.DialogInterface; -import android.content.DialogInterface.OnClickListener; -import android.content.Intent; import android.content.pm.PackageManager; -import android.content.pm.ResolveInfo; import android.database.DataSetObserver; -import android.net.Uri; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; @@ -60,139 +50,78 @@ import android.view.View; import android.widget.GridView; import android.widget.Toast; -public class MainActivity extends Activity { - private static final String ACTION_SCAN = "com.google.zxing.client.android.SCAN"; - private static final List PROVIDERS = Arrays.asList(new String[] { - "com.google.zxing.client.android", // Barcode Scanner - "com.srowen.bs.android", // Barcode Scanner+ - "com.srowen.bs.android.simple", // Barcode Scanner+ Simple - "com.google.android.apps.unveil" // Google Goggles - }); - - private TokenAdapter ta; - - private String findAppPackage(Intent i) { - PackageManager pm = getPackageManager(); - List ril = pm.queryIntentActivities(i, PackageManager.MATCH_DEFAULT_ONLY); - if (ril != null) { - for (ResolveInfo ri : ril) { - if (PROVIDERS.contains(ri.activityInfo.packageName)) - return ri.activityInfo.packageName; - } - } - - return null; - } +public class MainActivity extends Activity implements OnMenuItemClickListener { + private TokenAdapter mTokenAdapter; + private DataSetObserver mDataSetObserver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); - ta = new TokenAdapter(this); - ((GridView) findViewById(R.id.grid)).setAdapter(ta); + mTokenAdapter = new TokenAdapter(this); + ((GridView) findViewById(R.id.grid)).setAdapter(mTokenAdapter); - DataSetObserver dso = new DataSetObserver() { + mDataSetObserver = new DataSetObserver() { @Override public void onChanged() { super.onChanged(); - if (ta.getCount() == 0) + if (mTokenAdapter.getCount() == 0) findViewById(android.R.id.empty).setVisibility(View.VISIBLE); else findViewById(android.R.id.empty).setVisibility(View.GONE); } }; - ta.registerDataSetObserver(dso); - dso.onChanged(); + mTokenAdapter.registerDataSetObserver(mDataSetObserver); + mDataSetObserver.onChanged(); } + @Override + protected void onDestroy() { + super.onDestroy(); + mTokenAdapter.unregisterDataSetObserver(mDataSetObserver); + } + @Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); - - menu.findItem(R.id.action_add).setOnMenuItemClickListener(new OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - AlertDialog ad = new AddTokenDialog(MainActivity.this) { - @Override - public void addToken(String uri) { - try { - ta.add(uri); - } catch (TokenUriInvalidException e) { - Toast.makeText(MainActivity.this, R.string.invalid_token, Toast.LENGTH_SHORT).show(); - e.printStackTrace(); - } - } - }; - - ad.setButton(AlertDialog.BUTTON_NEUTRAL, getString(R.string.scan_qr_code), new OnClickListener() { - @Override - public void onClick(DialogInterface dialog, int which) { - Intent i = new Intent(ACTION_SCAN); - i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET); - i.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); - i.addCategory(Intent.CATEGORY_DEFAULT); - i.putExtra("SCAN_MODE", "QR_CODE_MODE"); - i.putExtra("SAVE_HISTORY", false); - - String pkg = findAppPackage(i); - if (pkg != null) { - i.setPackage(pkg); - startActivityForResult(i, 0); - return; - } - - new AlertDialog.Builder(MainActivity.this) - .setTitle(R.string.install_title) - .setMessage(R.string.install_message) - .setPositiveButton(R.string.yes, new OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - Uri uri = Uri.parse("market://details?id=" + PROVIDERS.get(0)); - Intent intent = new Intent(Intent.ACTION_VIEW, uri); - try { - startActivity(intent); - } catch (ActivityNotFoundException e) { - e.printStackTrace(); - } - } - }) - .setNegativeButton(R.string.no, new OnClickListener() { - @Override - public void onClick(DialogInterface dialogInterface, int i) { - return; - } - }) - .create().show(); - } - }); - - ad.show(); - - return true; - } - }); - - menu.findItem(R.id.action_about).setOnMenuItemClickListener(new OnMenuItemClickListener() { - @Override - public boolean onMenuItemClick(MenuItem item) { - new AboutDialog(MainActivity.this).show(); - return true; - } - }); - + menu.findItem(R.id.action_add).setOnMenuItemClickListener(this); + menu.findItem(R.id.action_about).setOnMenuItemClickListener(this); return true; } @Override - public void onActivityResult(int requestCode, int resultCode, Intent intent) { - if (resultCode == RESULT_OK) { - try { - ta.add(intent.getStringExtra("SCAN_RESULT")); - } catch (TokenUriInvalidException e) { - Toast.makeText(this, R.string.invalid_token, Toast.LENGTH_SHORT).show(); - e.printStackTrace(); + public boolean onMenuItemClick(MenuItem item) { + switch (item.getItemId()) { + case R.id.action_add: + // If the device has a camera available, try to scan for QR code + PackageManager pm = getPackageManager(); + if (pm.hasSystemFeature(PackageManager.FEATURE_CAMERA) && + pm.hasSystemFeature(PackageManager.FEATURE_CAMERA_AUTOFOCUS)) { + new CameraDialogFragment().show(getFragmentManager(), + CameraDialogFragment.FRAGMENT_TAG); + } else { + new ManualDialogFragment().show(getFragmentManager(), + ManualDialogFragment.FRAGMENT_TAG); } + + return true; + + case R.id.action_about: + new AboutDialogFragment().show(getFragmentManager(), + AboutDialogFragment.FRAGMENT_TAG); + return true; + } + + return false; + } + + public void tokenURIReceived(String uri) { + try { + mTokenAdapter.add(uri); + } catch (TokenUriInvalidException e) { + Toast.makeText(this, R.string.invalid_token, Toast.LENGTH_SHORT).show(); + e.printStackTrace(); } } }