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;