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.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
import org.fdroid.fdroid.data.InstalledAppProvider;
|
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 + ")");
|
Log.d("FDroid", "Inserting installed app info for '" + appId + "' (v" + info.versionCode + ")");
|
||||||
|
|
||||||
Uri uri = InstalledAppProvider.getContentUri();
|
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.APP_ID, appId);
|
||||||
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode);
|
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode);
|
||||||
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName);
|
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName);
|
||||||
|
values.put(InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||||
|
InstalledAppProvider.getApplicationLabel(context, appId));
|
||||||
context.getContentResolver().insert(uri, values);
|
context.getContentResolver().insert(uri, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -21,9 +21,13 @@ package org.fdroid.fdroid;
|
|||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
|
import android.content.pm.ApplicationInfo;
|
||||||
import android.content.pm.PackageInfo;
|
import android.content.pm.PackageInfo;
|
||||||
|
import android.content.pm.PackageManager;
|
||||||
|
import android.content.pm.PackageManager.NameNotFoundException;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.fdroid.fdroid.data.InstalledAppProvider;
|
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 + ")");
|
Log.d("FDroid", "Updating installed app info for '" + appId + "' to v" + info.versionCode + " (" + info.versionName + ")");
|
||||||
|
|
||||||
Uri uri = InstalledAppProvider.getContentUri();
|
Uri uri = InstalledAppProvider.getContentUri();
|
||||||
ContentValues values = new ContentValues(1);
|
ContentValues values = new ContentValues(4);
|
||||||
values.put(InstalledAppProvider.DataColumns.APP_ID, info.packageName);
|
values.put(InstalledAppProvider.DataColumns.APP_ID, appId);
|
||||||
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode);
|
values.put(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode);
|
||||||
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName);
|
values.put(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName);
|
||||||
|
values.put(InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||||
|
InstalledAppProvider.getApplicationLabel(context, appId));
|
||||||
context.getContentResolver().insert(uri, values);
|
context.getContentResolver().insert(uri, values);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -91,12 +91,13 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||||||
public static final String TABLE_INSTALLED_APP = "fdroid_installedApp";
|
public static final String TABLE_INSTALLED_APP = "fdroid_installedApp";
|
||||||
private static final String CREATE_TABLE_INSTALLED_APP = "CREATE TABLE " + TABLE_INSTALLED_APP
|
private static final String CREATE_TABLE_INSTALLED_APP = "CREATE TABLE " + TABLE_INSTALLED_APP
|
||||||
+ " ( "
|
+ " ( "
|
||||||
+ "appId TEXT NOT NULL PRIMARY KEY, "
|
+ InstalledAppProvider.DataColumns.APP_ID + " TEXT NOT NULL PRIMARY KEY, "
|
||||||
+ "versionCode INT NOT NULL, "
|
+ InstalledAppProvider.DataColumns.VERSION_CODE + " INT NOT NULL, "
|
||||||
+ "versionName TEXT 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;
|
private Context context;
|
||||||
|
|
||||||
@ -249,6 +250,7 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||||||
addLastUpdatedToRepo(db, oldVersion);
|
addLastUpdatedToRepo(db, oldVersion);
|
||||||
renameRepoId(db, oldVersion);
|
renameRepoId(db, oldVersion);
|
||||||
populateRepoNames(db, oldVersion);
|
populateRepoNames(db, oldVersion);
|
||||||
|
upgradeInstalledApp(db, oldVersion);
|
||||||
|
|
||||||
if (oldVersion < 43) createInstalledApp(db);
|
if (oldVersion < 43) createInstalledApp(db);
|
||||||
}
|
}
|
||||||
@ -398,6 +400,14 @@ public class DBHelper extends SQLiteOpenHelper {
|
|||||||
db.execSQL(CREATE_TABLE_INSTALLED_APP);
|
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,
|
private static boolean columnExists(SQLiteDatabase db,
|
||||||
String table, String column) {
|
String table, String column) {
|
||||||
return (db.rawQuery( "select * from " + table + " limit 0,1", null )
|
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.APP_ID, info.packageName)
|
||||||
.withValue(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode)
|
.withValue(InstalledAppProvider.DataColumns.VERSION_CODE, info.versionCode)
|
||||||
.withValue(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName)
|
.withValue(InstalledAppProvider.DataColumns.VERSION_NAME, info.versionName)
|
||||||
|
.withValue(InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||||
|
InstalledAppProvider.getApplicationLabel(context, info.packageName))
|
||||||
.build();
|
.build();
|
||||||
ops.add(op);
|
ops.add(op);
|
||||||
}
|
}
|
||||||
|
@ -3,9 +3,14 @@ package org.fdroid.fdroid.data;
|
|||||||
import android.content.ContentValues;
|
import android.content.ContentValues;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.UriMatcher;
|
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.database.Cursor;
|
||||||
import android.net.Uri;
|
import android.net.Uri;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
|
||||||
import org.fdroid.fdroid.R;
|
import org.fdroid.fdroid.R;
|
||||||
|
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
@ -49,8 +54,11 @@ public class InstalledAppProvider extends FDroidProvider {
|
|||||||
public static final String APP_ID = "appId";
|
public static final String APP_ID = "appId";
|
||||||
public static final String VERSION_CODE = "versionCode";
|
public static final String VERSION_CODE = "versionCode";
|
||||||
public static final String VERSION_NAME = "versionName";
|
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);
|
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
|
@Override
|
||||||
protected String getTableName() {
|
protected String getTableName() {
|
||||||
return DBHelper.TABLE_INSTALLED_APP;
|
return DBHelper.TABLE_INSTALLED_APP;
|
||||||
|
@ -60,6 +60,7 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
|||||||
android.R.layout.simple_list_item_activated_1,
|
android.R.layout.simple_list_item_activated_1,
|
||||||
null,
|
null,
|
||||||
new String[] {
|
new String[] {
|
||||||
|
InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||||
InstalledAppProvider.DataColumns.APP_ID,
|
InstalledAppProvider.DataColumns.APP_ID,
|
||||||
},
|
},
|
||||||
new int[] {
|
new int[] {
|
||||||
@ -91,8 +92,8 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
|||||||
if (mActionMode == null)
|
if (mActionMode == null)
|
||||||
mActionMode = selectLocalAppsActivity
|
mActionMode = selectLocalAppsActivity
|
||||||
.startActionMode(selectLocalAppsActivity.mActionModeCallback);
|
.startActionMode(selectLocalAppsActivity.mActionModeCallback);
|
||||||
Cursor cursor = (Cursor) l.getAdapter().getItem(position);
|
Cursor c = (Cursor) l.getAdapter().getItem(position);
|
||||||
String packageName = cursor.getString(1);
|
String packageName = c.getString(c.getColumnIndex(DataColumns.APP_ID));
|
||||||
if (FDroidApp.selectedApps.contains(packageName)) {
|
if (FDroidApp.selectedApps.contains(packageName)) {
|
||||||
FDroidApp.selectedApps.remove(packageName);
|
FDroidApp.selectedApps.remove(packageName);
|
||||||
} else {
|
} else {
|
||||||
@ -108,7 +109,7 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
|||||||
InstalledAppProvider.DataColumns.ALL,
|
InstalledAppProvider.DataColumns.ALL,
|
||||||
null,
|
null,
|
||||||
null,
|
null,
|
||||||
InstalledAppProvider.DataColumns.APP_ID);
|
InstalledAppProvider.DataColumns.APPLICATION_LABEL);
|
||||||
return loader;
|
return loader;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -123,7 +124,7 @@ public class SelectLocalAppsFragment extends ListFragment implements LoaderCallb
|
|||||||
Cursor c = ((Cursor) listView.getItemAtPosition(i));
|
Cursor c = ((Cursor) listView.getItemAtPosition(i));
|
||||||
String packageName = c.getString(c.getColumnIndex(DataColumns.APP_ID));
|
String packageName = c.getString(c.getColumnIndex(DataColumns.APP_ID));
|
||||||
if (TextUtils.equals(packageName, fdroid)) {
|
if (TextUtils.equals(packageName, fdroid)) {
|
||||||
listView.setItemChecked(i, true);
|
listView.setItemChecked(i, true); // always include FDroid
|
||||||
} else {
|
} else {
|
||||||
for (String selected : FDroidApp.selectedApps) {
|
for (String selected : FDroidApp.selectedApps) {
|
||||||
if (TextUtils.equals(packageName, selected)) {
|
if (TextUtils.equals(packageName, selected)) {
|
||||||
|
@ -9,9 +9,11 @@ import android.net.Uri;
|
|||||||
import android.os.Build;
|
import android.os.Build;
|
||||||
import android.provider.ContactsContract;
|
import android.provider.ContactsContract;
|
||||||
import android.test.ProviderTestCase2MockContext;
|
import android.test.ProviderTestCase2MockContext;
|
||||||
|
|
||||||
import mock.MockContextEmptyComponents;
|
import mock.MockContextEmptyComponents;
|
||||||
import mock.MockContextSwappableComponents;
|
import mock.MockContextSwappableComponents;
|
||||||
import mock.MockFDroidResources;
|
import mock.MockFDroidResources;
|
||||||
|
|
||||||
import org.fdroid.fdroid.data.*;
|
import org.fdroid.fdroid.data.*;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
@ -151,6 +153,7 @@ public abstract class FDroidProviderTest<T extends FDroidProvider> extends Provi
|
|||||||
InstalledAppProvider.DataColumns.APP_ID,
|
InstalledAppProvider.DataColumns.APP_ID,
|
||||||
InstalledAppProvider.DataColumns.VERSION_CODE,
|
InstalledAppProvider.DataColumns.VERSION_CODE,
|
||||||
InstalledAppProvider.DataColumns.VERSION_NAME,
|
InstalledAppProvider.DataColumns.VERSION_NAME,
|
||||||
|
InstalledAppProvider.DataColumns.APPLICATION_LABEL,
|
||||||
};
|
};
|
||||||
|
|
||||||
Cursor cursor = getMockContentResolver().query(uri, projection, null, null, null);
|
Cursor cursor = getMockContentResolver().query(uri, projection, null, null, null);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user