store "App Label" for Installed Apps, to show in Local Repo setup
Most people are going to know the "label" i.e. the display name rather than the packageName/id. So also store the label in the database and make it accessible via InstalledAppsProvider so SelectLocalAppsFragment can show a list of friendly names rather than packageNames.
This commit is contained in:
parent
3c005006ce
commit
584152d2fa
@ -21,7 +21,10 @@ package org.fdroid.fdroid;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
import org.fdroid.fdroid.data.InstalledAppProvider;
|
||||
@ -44,10 +47,12 @@ public class PackageAddedReceiver extends PackageReceiver {
|
||||
Log.d("FDroid", "Inserting installed app info for '" + appId + "' (v" + info.versionCode + ")");
|
||||
|
||||
Uri uri = InstalledAppProvider.getContentUri();
|
||||
ContentValues values = new ContentValues(3);
|
||||
ContentValues values = new ContentValues(4);
|
||||
values.put(InstalledAppProvider.DataColumns.APP_ID, appId);
|
||||
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode);
|
||||
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName);
|
||||
values.put(InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||
InstalledAppProvider.getApplicationLabel(context, appId));
|
||||
context.getContentResolver().insert(uri, values);
|
||||
}
|
||||
|
||||
|
@ -21,9 +21,13 @@ package org.fdroid.fdroid;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import org.fdroid.fdroid.data.InstalledAppProvider;
|
||||
|
||||
/**
|
||||
@ -46,10 +50,12 @@ public class PackageUpgradedReceiver extends PackageReceiver {
|
||||
Log.d("FDroid", "Updating installed app info for '" + appId + "' to v" + info.versionCode + " (" + info.versionName + ")");
|
||||
|
||||
Uri uri = InstalledAppProvider.getContentUri();
|
||||
ContentValues values = new ContentValues(1);
|
||||
values.put(InstalledAppProvider.DataColumns.APP_ID, info.packageName);
|
||||
ContentValues values = new ContentValues(4);
|
||||
values.put(InstalledAppProvider.DataColumns.APP_ID, appId);
|
||||
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode);
|
||||
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName);
|
||||
values.put(InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||
InstalledAppProvider.getApplicationLabel(context, appId));
|
||||
context.getContentResolver().insert(uri, values);
|
||||
}
|
||||
|
||||
|
@ -91,12 +91,13 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
public static final String TABLE_INSTALLED_APP = "fdroid_installedApp";
|
||||
private static final String CREATE_TABLE_INSTALLED_APP = "CREATE TABLE " + TABLE_INSTALLED_APP
|
||||
+ " ( "
|
||||
+ "appId TEXT NOT NULL PRIMARY KEY, "
|
||||
+ "versionCode INT NOT NULL, "
|
||||
+ "versionName TEXT NOT NULL "
|
||||
+ InstalledAppProvider.DataColumns.APP_ID + " TEXT NOT NULL PRIMARY KEY, "
|
||||
+ InstalledAppProvider.DataColumns.VERSION_CODE + " INT NOT NULL, "
|
||||
+ InstalledAppProvider.DataColumns.VERSION_NAME + " TEXT NOT NULL, "
|
||||
+ InstalledAppProvider.DataColumns.APPLICATION_LABEL + " TEXT NOT NULL "
|
||||
+ " );";
|
||||
|
||||
private static final int DB_VERSION = 44;
|
||||
private static final int DB_VERSION = 45;
|
||||
|
||||
private Context context;
|
||||
|
||||
@ -249,6 +250,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
addLastUpdatedToRepo(db, oldVersion);
|
||||
renameRepoId(db, oldVersion);
|
||||
populateRepoNames(db, oldVersion);
|
||||
upgradeInstalledApp(db, oldVersion);
|
||||
|
||||
if (oldVersion < 43) createInstalledApp(db);
|
||||
}
|
||||
@ -398,6 +400,14 @@ public class DBHelper extends SQLiteOpenHelper {
|
||||
db.execSQL(CREATE_TABLE_INSTALLED_APP);
|
||||
}
|
||||
|
||||
private void upgradeInstalledApp(SQLiteDatabase db, int oldVersion) {
|
||||
if (oldVersion < 45) {
|
||||
Log.i(TAG, "upgradeInstalledApp");
|
||||
// just wipe it out, so it'll get rebuilt from scratch
|
||||
db.execSQL("DELETE FROM fdroid_installedApp;");
|
||||
}
|
||||
}
|
||||
|
||||
private static boolean columnExists(SQLiteDatabase db,
|
||||
String table, String column) {
|
||||
return (db.rawQuery( "select * from " + table + " limit 0,1", null )
|
||||
|
@ -135,6 +135,8 @@ public class InstalledAppCacheUpdater {
|
||||
.withValue(InstalledAppProvider.DataColumns.APP_ID, info.packageName)
|
||||
.withValue(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode)
|
||||
.withValue(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName)
|
||||
.withValue(InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||
InstalledAppProvider.getApplicationLabel(context, info.packageName))
|
||||
.build();
|
||||
ops.add(op);
|
||||
}
|
||||
|
@ -3,9 +3,14 @@ package org.fdroid.fdroid.data;
|
||||
import android.content.ContentValues;
|
||||
import android.content.Context;
|
||||
import android.content.UriMatcher;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.PackageManager.NameNotFoundException;
|
||||
import android.content.res.Resources.NotFoundException;
|
||||
import android.database.Cursor;
|
||||
import android.net.Uri;
|
||||
import android.util.Log;
|
||||
|
||||
import org.fdroid.fdroid.R;
|
||||
|
||||
import java.util.HashMap;
|
||||
@ -49,8 +54,11 @@ public class InstalledAppProvider extends FDroidProvider {
|
||||
public static final String APP_ID = "appId";
|
||||
public static final String VERSION_CODE = "versionCode";
|
||||
public static final String VERSION_NAME = "versionName";
|
||||
public static final String APPLICATION_LABEL = "applicationLabel";
|
||||
|
||||
public static String[] ALL = { _ID, APP_ID, VERSION_CODE, VERSION_NAME };
|
||||
public static String[] ALL = {
|
||||
_ID, APP_ID, VERSION_CODE, VERSION_NAME, APPLICATION_LABEL,
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
@ -71,6 +79,20 @@ public class InstalledAppProvider extends FDroidProvider {
|
||||
return Uri.withAppendedPath(getContentUri(), appId);
|
||||
}
|
||||
|
||||
public static String getApplicationLabel(Context context, String packageName) {
|
||||
PackageManager pm = context.getPackageManager();
|
||||
ApplicationInfo appInfo;
|
||||
try {
|
||||
appInfo = pm.getApplicationInfo(packageName, PackageManager.GET_META_DATA);
|
||||
return appInfo.loadLabel(pm).toString();
|
||||
} catch (NameNotFoundException e) {
|
||||
e.printStackTrace();
|
||||
} catch (NotFoundException e) {
|
||||
Log.d("InstalledAppProvider", "getApplicationLabel: " + e.getMessage());
|
||||
}
|
||||
return packageName; // all else fails, return id
|
||||
}
|
||||
|
||||
@Override
|
||||
protected String getTableName() {
|
||||
return DBHelper.TABLE_INSTALLED_APP;
|
||||
|
@ -60,6 +60,7 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
||||
android.R.layout.simple_list_item_activated_1,
|
||||
null,
|
||||
new String[] {
|
||||
InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||
InstalledAppProvider.DataColumns.APP_ID,
|
||||
},
|
||||
new int[] {
|
||||
@ -91,8 +92,8 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
||||
if (mActionMode == null)
|
||||
mActionMode = selectLocalAppsActivity
|
||||
.startActionMode(selectLocalAppsActivity.mActionModeCallback);
|
||||
Cursor cursor = (Cursor) l.getAdapter().getItem(position);
|
||||
String packageName = cursor.getString(1);
|
||||
Cursor c = (Cursor) l.getAdapter().getItem(position);
|
||||
String packageName = c.getString(c.getColumnIndex(DataColumns.APP_ID));
|
||||
if (FDroidApp.selectedApps.contains(packageName)) {
|
||||
FDroidApp.selectedApps.remove(packageName);
|
||||
} else {
|
||||
@ -108,7 +109,7 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
||||
InstalledAppProvider.DataColumns.ALL,
|
||||
null,
|
||||
null,
|
||||
InstalledAppProvider.DataColumns.APP_ID);
|
||||
InstalledAppProvider.DataColumns.APPLICATION_LABEL);
|
||||
return loader;
|
||||
}
|
||||
|
||||
@ -123,7 +124,7 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
||||
Cursor c = ((Cursor) listView.getItemAtPosition(i));
|
||||
String packageName = c.getString(c.getColumnIndex(DataColumns.APP_ID));
|
||||
if (TextUtils.equals(packageName, fdroid)) {
|
||||
listView.setItemChecked(i, true);
|
||||
listView.setItemChecked(i, true); // always include FDroid
|
||||
} else {
|
||||
for (String selected : FDroidApp.selectedApps) {
|
||||
if (TextUtils.equals(packageName, selected)) {
|
||||
|
@ -9,9 +9,11 @@ import android.net.Uri;
|
||||
import android.os.Build;
|
||||
import android.provider.ContactsContract;
|
||||
import android.test.ProviderTestCase2MockContext;
|
||||
|
||||
import mock.MockContextEmptyComponents;
|
||||
import mock.MockContextSwappableComponents;
|
||||
import mock.MockFDroidResources;
|
||||
|
||||
import org.fdroid.fdroid.data.*;
|
||||
|
||||
import java.util.List;
|
||||
@ -151,6 +153,7 @@ public abstract class FDroidProviderTest<T extends FDroidProvider> extends Provi
|
||||
InstalledAppProvider.DataColumns.APP_ID,
|
||||
InstalledAppProvider.DataColumns.VERSION_CODE,
|
||||
InstalledAppProvider.DataColumns.VERSION_NAME,
|
||||
InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||
};
|
||||
|
||||
Cursor cursor = getMockContentResolver().query(uri, projection, null, null, null);
|
||||
|
Loading…
x
Reference in New Issue
Block a user