diff options
Diffstat (limited to 'main/src/cgeo/geocaching/activity/AbstractActivity.java')
| -rw-r--r-- | main/src/cgeo/geocaching/activity/AbstractActivity.java | 93 |
1 files changed, 66 insertions, 27 deletions
diff --git a/main/src/cgeo/geocaching/activity/AbstractActivity.java b/main/src/cgeo/geocaching/activity/AbstractActivity.java index 542dd05..e3df1f7 100644 --- a/main/src/cgeo/geocaching/activity/AbstractActivity.java +++ b/main/src/cgeo/geocaching/activity/AbstractActivity.java @@ -12,21 +12,31 @@ import cgeo.geocaching.utils.HtmlUtils; import cgeo.geocaching.utils.TranslationUtils; import org.apache.commons.lang3.StringUtils; +import org.eclipse.jdt.annotation.NonNull; +import rx.Subscription; +import rx.subscriptions.Subscriptions; + +import android.annotation.TargetApi; import android.content.Intent; import android.content.res.Resources; +import android.nfc.NdefMessage; +import android.nfc.NdefRecord; +import android.nfc.NfcAdapter; +import android.nfc.NfcEvent; +import android.os.Build; import android.os.Bundle; -import android.support.v4.app.FragmentActivity; -import android.view.ContextMenu; +import android.support.v7.app.ActionBarActivity; +import android.support.v7.view.ActionMode; +import android.view.Menu; import android.view.MenuItem; import android.view.View; +import android.view.Window; import android.widget.EditText; -import rx.Subscription; -import rx.subscriptions.Subscriptions; import java.util.Locale; -public abstract class AbstractActivity extends FragmentActivity implements IAbstractActivity { +public abstract class AbstractActivity extends ActionBarActivity implements IAbstractActivity { protected CgeoApplication app = null; protected Resources res = null; @@ -41,15 +51,6 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst this.keepScreenOn = keepScreenOn; } - @Override - final public void goHome(final View view) { - ActivityMixin.goHome(this); - } - - final protected void setTitle(final String title) { - ActivityMixin.setTitle(this, title); - } - final protected void showProgress(final boolean show) { ActivityMixin.showProgress(this, show); } @@ -71,7 +72,18 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); + supportRequestWindowFeature(Window.FEATURE_INDETERMINATE_PROGRESS); + initializeCommonFields(); + + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + if (item.getItemId() == android.R.id.home) { + return ActivityMixin.navigateUp(this); + } + return super.onOptionsItemSelected(item); } public void onResume(final Subscription resumeSubscription) { @@ -104,21 +116,14 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst } protected void onCreate(final Bundle savedInstanceState, final int resourceLayoutID) { - onCreate(savedInstanceState, resourceLayoutID, false); - } - - protected void onCreate(final Bundle savedInstanceState, final int resourceLayoutID, boolean useDialogTheme) { super.onCreate(savedInstanceState); initializeCommonFields(); // non declarative part of layout - if (useDialogTheme) { - setTheme(ActivityMixin.getDialogTheme()); - } else { - setTheme(); - } + setTheme(); + setContentView(resourceLayoutID); // create view variables @@ -151,9 +156,8 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst new Keyboard(this).show(view); } - protected void buildDetailsContextMenu(final ContextMenu menu, final CharSequence clickedItemText, final CharSequence fieldTitle, final boolean copyOnly) { - menu.setHeaderTitle(fieldTitle); - getMenuInflater().inflate(R.menu.details_context, menu); + protected void buildDetailsContextMenu(final ActionMode actionMode, final Menu menu, final CharSequence clickedItemText, final CharSequence fieldTitle, final boolean copyOnly) { + actionMode.setTitle(fieldTitle); menu.findItem(R.id.menu_translate_to_sys_lang).setVisible(!copyOnly); if (!copyOnly) { if (clickedItemText.length() > TranslationUtils.TRANSLATION_TEXT_LENGTH_WARN) { @@ -165,27 +169,62 @@ public abstract class AbstractActivity extends FragmentActivity implements IAbst menu.findItem(R.id.menu_translate_to_english).setVisible(!copyOnly && !localeIsEnglish); } - protected boolean onClipboardItemSelected(final MenuItem item, final CharSequence clickedItemText) { + protected boolean onClipboardItemSelected(@NonNull final ActionMode actionMode, final MenuItem item, final CharSequence clickedItemText) { switch (item.getItemId()) { // detail fields case R.id.menu_copy: ClipboardUtils.copyToClipboard(clickedItemText); showToast(res.getString(R.string.clipboard_copy_ok)); + actionMode.finish(); return true; case R.id.menu_translate_to_sys_lang: TranslationUtils.startActivityTranslate(this, Locale.getDefault().getLanguage(), HtmlUtils.extractText(clickedItemText)); + actionMode.finish(); return true; case R.id.menu_translate_to_english: TranslationUtils.startActivityTranslate(this, Locale.ENGLISH.getLanguage(), HtmlUtils.extractText(clickedItemText)); + actionMode.finish(); return true; case R.id.menu_cache_share_field: final Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain"); intent.putExtra(Intent.EXTRA_TEXT, clickedItemText.toString()); startActivity(Intent.createChooser(intent, res.getText(R.string.cache_share_field))); + actionMode.finish(); return true; default: return false; } } + + // Do not support older devices than Android 4.0 + // Although there even are 2.3 devices (Nexus S) + // these are so few that we don't want to deal with the older (non Android Beam) API + + public interface ActivitySharingInterface { + /** Return an URL that represent the current activity for sharing */ + public String getUri(); + } + + protected void initializeAndroidBeam(ActivitySharingInterface sharingInterface) { + if (Build.VERSION.SDK_INT > Build.VERSION_CODES.ICE_CREAM_SANDWICH) { + initializeICSAndroidBeam(sharingInterface); + } + } + + @TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH) + protected void initializeICSAndroidBeam(final ActivitySharingInterface sharingInterface) { + NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this); + if (nfcAdapter == null) { + return; + } + nfcAdapter.setNdefPushMessageCallback(new NfcAdapter.CreateNdefMessageCallback() { + @Override + public NdefMessage createNdefMessage(NfcEvent event) { + NdefRecord record = NdefRecord.createUri(sharingInterface.getUri()); + return new NdefMessage(new NdefRecord[]{record}); + } + }, this); + + } } |
