diff --git a/AndroidManifest.xml b/AndroidManifest.xml index c5ea5b12a..0dfe06b06 100644 --- a/AndroidManifest.xml +++ b/AndroidManifest.xml @@ -38,13 +38,6 @@ - - - - - - - + @@ -63,6 +57,21 @@ + + + + + + + + + + + + + + + diff --git a/res/values/strings.xml b/res/values/strings.xml index 9be6ec288..d9ade7be9 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -108,6 +108,7 @@ Run + Share Install Uninstall Website diff --git a/src/org/fdroid/fdroid/AppDetails.java b/src/org/fdroid/fdroid/AppDetails.java index dcc2f81bb..3d6574d9e 100644 --- a/src/org/fdroid/fdroid/AppDetails.java +++ b/src/org/fdroid/fdroid/AppDetails.java @@ -163,6 +163,7 @@ public class AppDetails extends ListActivity { private static final int MARKET = Menu.FIRST + 5; private static final int DONATE = Menu.FIRST + 6; private static final int LAUNCH = Menu.FIRST + 7; + private static final int SHARE = Menu.FIRST + 8; private DB.App app; private int app_currentvercode; @@ -192,7 +193,13 @@ public class AppDetails extends ListActivity { appid = ""; Uri data = getIntent().getData(); if (data != null) { - appid = data.getEncodedSchemeSpecificPart(); + if (data.isHierarchical()) + // fdroid://details?id=app.id + // market://details?id=app.id + appid = data.getQueryParameter("id"); + else + // fdroid.app:app.id (old scheme) + appid = data.getEncodedSchemeSpecificPart(); Log.d("FDroid", "AppDetails launched from link, for '" + appid + "'"); } else if (!i.hasExtra("appid")) { @@ -552,10 +559,13 @@ public class AppDetails extends ListActivity { android.R.drawable.ic_menu_delete)); if (mPm.getLaunchIntentForPackage(app.id) != null) { - toShow.add(menu.add( Menu.NONE, LAUNCH, 1, R.string.menu_launch ).setIcon( + toShow.add(menu.add( Menu.NONE, LAUNCH, 1, R.string.menu_launch).setIcon( android.R.drawable.ic_media_play)); } } + toShow.add(menu.add( Menu.NONE, SHARE, 1, R.string.menu_share).setIcon( + android.R.drawable.ic_menu_share)); + if (app.detail_webURL.length() > 0) { menu.add(Menu.NONE, WEBSITE, 2, R.string.menu_website).setIcon( android.R.drawable.ic_menu_view); @@ -602,6 +612,10 @@ public class AppDetails extends ListActivity { launchApk(app.id); return true; + case SHARE: + shareApp(app); + return true; + case INSTALL: // Note that this handles updating as well as installing. curapk = app.getCurrentVersion(); @@ -728,6 +742,16 @@ public class AppDetails extends ListActivity { startActivity(intent); } + private void shareApp(DB.App app) { + Intent shareIntent = new Intent(Intent.ACTION_SEND); + shareIntent.setType("text/plain"); + + shareIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, app.name); + shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "fdroid://details?id="+app.id); + + startActivity(Intent.createChooser(shareIntent, getString(R.string.menu_share))); + } + private ProgressDialog createProgressDialog(String file, int p, int max) { final ProgressDialog pd = new ProgressDialog(this); pd.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); diff --git a/src/org/fdroid/fdroid/FDroid.java b/src/org/fdroid/fdroid/FDroid.java index fb871c7e0..bb7f3ac70 100644 --- a/src/org/fdroid/fdroid/FDroid.java +++ b/src/org/fdroid/fdroid/FDroid.java @@ -83,12 +83,7 @@ public class FDroid extends FragmentActivity { setDefaultKeyMode(DEFAULT_KEYS_SEARCH_LOCAL); Intent i = getIntent(); - Uri data = i.getData(); - if (data != null && data.getScheme().equals("market")) { - Intent call = new Intent(this, AppDetails.class); - call.putExtra("appid", data.getQueryParameter("id")); - startActivityForResult(call, REQUEST_APPDETAILS); - } else if (i.hasExtra("uri")) { + if (i.hasExtra("uri")) { Intent call = new Intent(this, ManageRepo.class); call.putExtra("uri", i.getStringExtra("uri")); startActivityForResult(call, REQUEST_MANAGEREPOS); diff --git a/src/org/fdroid/fdroid/views/fragments/AppListFragment.java b/src/org/fdroid/fdroid/views/fragments/AppListFragment.java index 6e73824a9..249b2f438 100644 --- a/src/org/fdroid/fdroid/views/fragments/AppListFragment.java +++ b/src/org/fdroid/fdroid/views/fragments/AppListFragment.java @@ -49,7 +49,7 @@ abstract class AppListFragment extends Fragment implements AdapterView.OnItemCli protected ListView createAppListView() { ListView list = new ListView(getActivity()); - list.setVerticalScrollBarEnabled(false); + list.setFastScrollEnabled(true); list.setOnItemClickListener(this); list.setAdapter(getAppListAdapter()); return list;