218 lines
8.0 KiB
Java

package com.cradle.iitc_mobile.share;
import android.app.ActionBar;
import android.app.FragmentTransaction;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.v4.app.FragmentActivity;
import android.support.v4.app.NavUtils;
import android.support.v4.view.ViewPager;
import android.view.MenuItem;
import com.cradle.iitc_mobile.Log;
import com.cradle.iitc_mobile.R;
import java.io.File;
import java.util.ArrayList;
public class ShareActivity extends FragmentActivity implements ActionBar.TabListener {
private static final String EXTRA_TYPE = "share-type";
private static final String TYPE_FILE = "file";
private static final String TYPE_PERMALINK = "permalink";
private static final String TYPE_PORTAL_LINK = "portal_link";
private static final String TYPE_STRING = "string";
public static Intent forFile(final Context context, final File file, final String type) {
return new Intent(context, ShareActivity.class)
.putExtra(EXTRA_TYPE, TYPE_FILE)
.putExtra("uri", Uri.fromFile(file))
.putExtra("type", type);
}
public static Intent forPosition(final Context context, final double lat, final double lng, final int zoom,
final String title, final boolean isPortal) {
return new Intent(context, ShareActivity.class)
.putExtra(EXTRA_TYPE, isPortal ? TYPE_PORTAL_LINK : TYPE_PERMALINK)
.putExtra("lat", lat)
.putExtra("lng", lng)
.putExtra("zoom", zoom)
.putExtra("title", title)
.putExtra("isPortal", isPortal);
}
public static Intent forString(final Context context, final String str) {
return new Intent(context, ShareActivity.class)
.putExtra(EXTRA_TYPE, TYPE_STRING)
.putExtra("shareString", str);
}
private IntentComparator mComparator;
private FragmentAdapter mFragmentAdapter;
private IntentGenerator mGenerator;
private SharedPreferences mSharedPrefs = null;
private String mTitle;
private ViewPager mViewPager;
private void addTab(final ArrayList<Intent> intents, final int label, final int icon) {
final IntentListFragment fragment = new IntentListFragment();
final Bundle args = new Bundle();
args.putParcelableArrayList("intents", intents);
args.putString("title", getString(label));
args.putInt("icon", icon);
fragment.setArguments(args);
mFragmentAdapter.add(fragment);
}
private String getIntelUrl(final String ll, final int zoom, final boolean isPortal) {
String url = "http://www.ingress.com/intel?ll=" + ll + "&z=" + zoom;
if (isPortal) {
url += "&pll=" + ll;
}
return url;
}
private void setSelected(final int position) {
// Activity not fully loaded yet (may occur during tab creation)
if (mSharedPrefs == null) return;
mSharedPrefs
.edit()
.putInt("pref_share_selected_tab", position)
.apply();
}
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_share);
mComparator = new IntentComparator(this);
mGenerator = new IntentGenerator(this);
mFragmentAdapter = new FragmentAdapter(getSupportFragmentManager());
final ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
final Intent intent = getIntent();
final String type = intent.getStringExtra(EXTRA_TYPE);
// from portallinks/permalinks we build 3 intents (share / geo / vanilla-intel-link)
if (TYPE_PERMALINK.equals(type) || TYPE_PORTAL_LINK.equals(type)) {
mTitle = intent.getStringExtra("title");
final String ll = intent.getDoubleExtra("lat", 0) + "," + intent.getDoubleExtra("lng", 0);
final int zoom = intent.getIntExtra("zoom", 0);
final String url = getIntelUrl(ll, zoom, TYPE_PORTAL_LINK.equals(type));
actionBar.setTitle(mTitle);
addTab(mGenerator.getShareIntents(mTitle, url),
R.string.tab_share,
R.drawable.ic_action_share);
addTab(mGenerator.getGeoIntents(mTitle, ll, zoom),
R.string.tab_map,
R.drawable.ic_action_place);
addTab(mGenerator.getBrowserIntents(mTitle, url),
R.string.tab_browser,
R.drawable.ic_action_web_site);
} else if (TYPE_STRING.equals(type)) {
mTitle = getString(R.string.app_name);
final String shareString = intent.getStringExtra("shareString");
addTab(mGenerator.getShareIntents(mTitle, shareString), R.string.tab_share, R.drawable.ic_action_share);
} else if (TYPE_FILE.equals(type)) {
mTitle = "Screenshot";
final Uri uri = intent.getParcelableExtra("uri");
final String mime = intent.getStringExtra("type");
addTab(mGenerator.getShareIntents(mTitle, uri, mime), R.string.tab_share, R.drawable.ic_action_share);
} else {
Log.w("Unknown sharing type: " + type);
finish();
return;
}
mViewPager = (ViewPager) findViewById(R.id.pager);
mViewPager.setAdapter(mFragmentAdapter);
mViewPager.setOnPageChangeListener(new ViewPager.SimpleOnPageChangeListener() {
@Override
public void onPageSelected(final int position) {
if (actionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_STANDARD) {
actionBar.setSelectedNavigationItem(position);
}
setSelected(position);
}
});
for (int i = 0; i < mFragmentAdapter.getCount(); i++) {
final IntentListFragment fragment = (IntentListFragment) mFragmentAdapter.getItem(i);
actionBar.addTab(actionBar
.newTab()
.setText(fragment.getTitle())
.setIcon(fragment.getIcon())
.setTabListener(this));
}
if (mFragmentAdapter.getCount() > 1) {
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
}
mSharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
final int selected = mSharedPrefs.getInt("pref_share_selected_tab", 0);
if (selected < mFragmentAdapter.getCount()) {
mViewPager.setCurrentItem(selected);
if (actionBar.getNavigationMode() != ActionBar.NAVIGATION_MODE_STANDARD) {
actionBar.setSelectedNavigationItem(selected);
}
}
}
@Override
protected void onDestroy() {
super.onDestroy();
mComparator.save();
}
public IntentComparator getIntentComparator() {
return mComparator;
}
public void launch(final Intent intent) {
mComparator.trackIntentSelection(intent);
mGenerator.cleanup(intent);
startActivity(intent);
finish();
}
@Override
public boolean onOptionsItemSelected(final MenuItem item) {
switch (item.getItemId()) {
case android.R.id.home:
NavUtils.navigateUpFromSameTask(this);
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onTabReselected(final ActionBar.Tab tab, final FragmentTransaction fragmentTransaction) {
}
@Override
public void onTabSelected(final ActionBar.Tab tab, final FragmentTransaction fragmentTransaction) {
final int position = tab.getPosition();
mViewPager.setCurrentItem(position);
setSelected(position);
}
@Override
public void onTabUnselected(final ActionBar.Tab tab, final FragmentTransaction fragmentTransaction) {
}
}