Enable system installer directly on first start if FDroid is a system-app

This commit is contained in:
Dominik Schürmann 2015-05-17 14:39:56 +02:00
parent dbbad1c95c
commit c27d8f6287
2 changed files with 16 additions and 11 deletions

View File

@ -48,6 +48,7 @@ import org.fdroid.fdroid.compat.TabManager;
import org.fdroid.fdroid.data.AppProvider; import org.fdroid.fdroid.data.AppProvider;
import org.fdroid.fdroid.data.NewRepoConfig; import org.fdroid.fdroid.data.NewRepoConfig;
import org.fdroid.fdroid.installer.InstallIntoSystemDialogActivity; import org.fdroid.fdroid.installer.InstallIntoSystemDialogActivity;
import org.fdroid.fdroid.installer.Installer;
import org.fdroid.fdroid.views.AppListFragmentPagerAdapter; import org.fdroid.fdroid.views.AppListFragmentPagerAdapter;
import org.fdroid.fdroid.views.ManageReposActivity; import org.fdroid.fdroid.views.ManageReposActivity;
import org.fdroid.fdroid.views.swap.ConnectSwapActivity; import org.fdroid.fdroid.views.swap.ConnectSwapActivity;
@ -104,11 +105,16 @@ public class FDroid extends ActionBarActivity {
getContentResolver().registerContentObserver(uri, true, new AppObserver()); getContentResolver().registerContentObserver(uri, true, new AppObserver());
if (Preferences.get().isFirstTime()) { if (Preferences.get().isFirstTime()) {
if (Installer.hasSystemPermissions(this, this.getPackageManager())) {
Preferences.get().setSystemInstallerEnabled(true);
Preferences.get().setFirstTime(false);
} else {
Intent installIntent = new Intent(this, InstallIntoSystemDialogActivity.class); Intent installIntent = new Intent(this, InstallIntoSystemDialogActivity.class);
installIntent.setAction(InstallIntoSystemDialogActivity.ACTION_FIRST_TIME); installIntent.setAction(InstallIntoSystemDialogActivity.ACTION_FIRST_TIME);
startActivity(installIntent); startActivity(installIntent);
} }
} }
}
@Override @Override
protected void onResume() { protected void onResume() {

View File

@ -181,15 +181,14 @@ abstract public class Installer {
} }
public static boolean hasSystemPermissions(Context context, PackageManager pm) { public static boolean hasSystemPermissions(Context context, PackageManager pm) {
int checkInstallPermission = boolean hasInstallPermission =
pm.checkPermission(permission.INSTALL_PACKAGES, context.getPackageName()); (pm.checkPermission(permission.INSTALL_PACKAGES, context.getPackageName())
int checkDeletePermission = == PackageManager.PERMISSION_GRANTED);
pm.checkPermission(permission.DELETE_PACKAGES, context.getPackageName()); boolean hasDeletePermission =
boolean permissionsGranted = (pm.checkPermission(permission.DELETE_PACKAGES, context.getPackageName())
(checkInstallPermission == PackageManager.PERMISSION_GRANTED == PackageManager.PERMISSION_GRANTED);
&& checkDeletePermission == PackageManager.PERMISSION_GRANTED);
return permissionsGranted; return (hasInstallPermission && hasDeletePermission);
} }
public void installPackage(File apkFile) throws AndroidNotCompatibleException { public void installPackage(File apkFile) throws AndroidNotCompatibleException {