add Share button to "Installed Apps" to export CSV list

refs #1484
This commit is contained in:
Hans-Christoph Steiner 2018-08-17 14:48:40 +02:00
parent aead26f02c
commit efd577b36b
4 changed files with 55 additions and 2 deletions

View File

@ -6,7 +6,6 @@ import android.support.annotation.Nullable;
import android.support.v7.widget.RecyclerView;
import android.view.View;
import android.view.ViewGroup;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.Schema;
@ -58,4 +57,13 @@ class InstalledAppListAdapter extends RecyclerView.Adapter<InstalledAppListItemC
this.cursor = cursor;
notifyDataSetChanged();
}
@Nullable
public App getItem(int position) {
if (cursor == null) {
return null;
}
cursor.moveToPosition(position);
return new App(cursor);
}
}

View File

@ -22,17 +22,20 @@ package org.fdroid.fdroid.views.installed;
import android.database.Cursor;
import android.os.Bundle;
import android.support.v4.app.LoaderManager;
import android.support.v4.app.ShareCompat;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.widget.TextView;
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.R;
import org.fdroid.fdroid.data.App;
import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.Schema;
@ -100,4 +103,35 @@ public class InstalledAppsActivity extends AppCompatActivity implements LoaderMa
adapter.setApps(null);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.installed_apps, menu);
return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_share:
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append("packageName,versionCode,versionName\n");
for (int i = 0; i < adapter.getItemCount(); i++) {
App app = adapter.getItem(i);
if (app != null) {
stringBuilder.append(app.packageName).append(',')
.append(app.installedVersionCode).append(',')
.append(app.installedVersionName).append('\n');
}
}
ShareCompat.IntentBuilder intentBuilder = ShareCompat.IntentBuilder.from(this)
.setSubject(getString(R.string.send_installed_apps))
.setChooserTitle(R.string.send_installed_apps)
.setText(stringBuilder.toString())
.setType("text/csv");
startActivity(intentBuilder.getIntent());
break;
}
return super.onOptionsItemSelected(item);
}
}

View File

@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item
android:id="@+id/menu_share"
android:icon="@drawable/ic_share_white"
android:title="@string/menu_share"
app:showAsAction="ifRoom"/>
</menu>

View File

@ -110,6 +110,8 @@ This often occurs with apps installed via Google Play or other sources, if they
<string name="app_list__dismiss_downloading_app">Download canceled</string>
<string name="installed_apps__activity_title">Installed Apps</string>
<string name="send_installed_apps">Share installed apps</string>
<string name="send_installed_apps_csv">Apps installed by F-Droid as CSV file</string>
<string name="installed_app__updates_ignored">Updates ignored</string>
<string name="installed_app__updates_ignored_for_suggested_version">Updates ignored for Version %1$s</string>
<!-- The inline download button shown in the "Updates" screen only uses an icon and so requires