diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index 0a372cd23..7185fa2d9 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -203,6 +203,9 @@
android:launchMode="singleTop"
android:parentActivityName=".FDroid"
android:screenOrientation="portrait" >
+
+ android:windowSoftInputMode="stateHidden">
+
+
= 16) {
doOnJellybean(intent);
diff --git a/src/org/fdroid/fdroid/PreferencesActivity.java b/src/org/fdroid/fdroid/PreferencesActivity.java
index 9bf66d4b0..cc7c4940b 100644
--- a/src/org/fdroid/fdroid/PreferencesActivity.java
+++ b/src/org/fdroid/fdroid/PreferencesActivity.java
@@ -19,288 +19,42 @@
package org.fdroid.fdroid;
import android.os.Bundle;
-import android.preference.Preference;
-import android.preference.Preference.OnPreferenceClickListener;
-import android.preference.PreferenceActivity;
-import android.preference.CheckBoxPreference;
-import android.preference.EditTextPreference;
-import android.preference.ListPreference;
-import android.app.AlertDialog;
-import android.content.SharedPreferences;
-import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
-import android.view.MenuItem;
+import android.support.v4.app.FragmentManager;
import android.support.v4.app.NavUtils;
+import android.support.v7.app.ActionBarActivity;
+import android.view.MenuItem;
+import android.widget.LinearLayout;
+import org.fdroid.fdroid.views.fragments.PreferenceFragment;
-import org.fdroid.fdroid.Preferences;
-import org.fdroid.fdroid.compat.ActionBarCompat;
-import org.fdroid.fdroid.installer.CheckRootAsyncTask;
-import org.fdroid.fdroid.installer.CheckRootAsyncTask.CheckRootCallback;
-import org.fdroid.fdroid.installer.Installer;
-
-public class PreferencesActivity extends PreferenceActivity implements
- OnSharedPreferenceChangeListener {
+public class PreferencesActivity extends ActionBarActivity {
public static final int RESULT_RESTART = 4;
- private int result = 0;
-
- private static String[] summariesToUpdate = {
- Preferences.PREF_UPD_INTERVAL,
- Preferences.PREF_UPD_WIFI_ONLY,
- Preferences.PREF_UPD_NOTIFY,
- Preferences.PREF_UPD_HISTORY,
- Preferences.PREF_ROOTED,
- Preferences.PREF_INCOMP_VER,
- Preferences.PREF_THEME,
- Preferences.PREF_PERMISSIONS,
- Preferences.PREF_COMPACT_LAYOUT,
- Preferences.PREF_IGN_TOUCH,
- Preferences.PREF_LOCAL_REPO_BONJOUR,
- Preferences.PREF_LOCAL_REPO_NAME,
- Preferences.PREF_LOCAL_REPO_HTTPS,
- Preferences.PREF_CACHE_APK,
- Preferences.PREF_EXPERT,
- Preferences.PREF_ROOT_INSTALLER,
- Preferences.PREF_SYSTEM_INSTALLER
- };
@Override
protected void onCreate(Bundle savedInstanceState) {
+
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
+ FragmentManager fm = getSupportFragmentManager();
+ if (fm.findFragmentById(android.R.id.content) == null) {
+ // Need to set a dummy view (which will get overridden by the fragment manager
+ // below) so that we can call setContentView(). This is a work around for
+ // a (bug?) thing in 3.0, 3.1 which requires setContentView to be invoked before
+ // the actionbar is played with:
+ // http://blog.perpetumdesign.com/2011/08/strange-case-of-dr-action-and-mr-bar.html
+ setContentView( new LinearLayout(this) );
+
+ PreferenceFragment preferenceFragment = new PreferenceFragment();
+ fm.beginTransaction()
+ .add(android.R.id.content, preferenceFragment)
+ .commit();
+ }
+
// Actionbar cannot be accessed until after setContentView (on 3.0 and 3.1 devices)
// see: http://blog.perpetumdesign.com/2011/08/strange-case-of-dr-action-and-mr-bar.html
// for reason why.
- ActionBarCompat.create(this).setDisplayHomeAsUpEnabled(true);
-
- addPreferencesFromResource(R.xml.preferences);
- }
-
- protected void onoffSummary(String key, int on, int off) {
- CheckBoxPreference pref = (CheckBoxPreference)findPreference(key);
- if (pref.isChecked()) {
- pref.setSummary(on);
- } else {
- pref.setSummary(off);
- }
- }
-
- protected void entrySummary(String key) {
- ListPreference pref = (ListPreference)findPreference(key);
- pref.setSummary(pref.getEntry());
- }
-
- protected void textSummary(String key, int resId) {
- EditTextPreference pref = (EditTextPreference)findPreference(key);
- pref.setSummary(getString(resId, pref.getText()));
- }
-
- protected void updateSummary(String key, boolean changing) {
-
- if (key.equals(Preferences.PREF_UPD_INTERVAL)) {
- ListPreference pref = (ListPreference)findPreference(
- Preferences.PREF_UPD_INTERVAL);
- int interval = Integer.parseInt(pref.getValue().toString());
- Preference onlyOnWifi = findPreference(
- Preferences.PREF_UPD_WIFI_ONLY);
- onlyOnWifi.setEnabled(interval > 0);
- if (interval == 0) {
- pref.setSummary(R.string.update_interval_zero);
- } else {
- pref.setSummary(pref.getEntry());
- }
-
- } else if (key.equals(Preferences.PREF_UPD_WIFI_ONLY)) {
- onoffSummary(key, R.string.automatic_scan_wifi_on,
- R.string.automatic_scan_wifi_off);
-
- } else if (key.equals(Preferences.PREF_UPD_NOTIFY)) {
- onoffSummary(key, R.string.notify_on,
- R.string.notify_off);
-
- } else if (key.equals(Preferences.PREF_UPD_HISTORY)) {
- textSummary(key, R.string.update_history_summ);
-
- } else if (key.equals(Preferences.PREF_PERMISSIONS)) {
- onoffSummary(key, R.string.showPermissions_on,
- R.string.showPermissions_off);
-
- } else if (key.equals(Preferences.PREF_COMPACT_LAYOUT)) {
- onoffSummary(key, R.string.compactlayout_on,
- R.string.compactlayout_off);
-
- } else if (key.equals(Preferences.PREF_THEME)) {
- entrySummary(key);
- if (changing) {
- result |= RESULT_RESTART;
- setResult(result);
- }
-
- } else if (key.equals(Preferences.PREF_INCOMP_VER)) {
- onoffSummary(key, R.string.show_incompat_versions_on,
- R.string.show_incompat_versions_off);
-
- } else if (key.equals(Preferences.PREF_ROOTED)) {
- onoffSummary(key, R.string.rooted_on,
- R.string.rooted_off);
-
- } else if (key.equals(Preferences.PREF_IGN_TOUCH)) {
- onoffSummary(key, R.string.ignoreTouch_on,
- R.string.ignoreTouch_off);
-
- } else if (key.equals(Preferences.PREF_LOCAL_REPO_BONJOUR)) {
- onoffSummary(key, R.string.local_repo_bonjour_on,
- R.string.local_repo_bonjour_off);
-
- } else if (key.equals(Preferences.PREF_LOCAL_REPO_NAME)) {
- textSummary(key, R.string.local_repo_name_summary);
-
- } else if (key.equals(Preferences.PREF_LOCAL_REPO_HTTPS)) {
- onoffSummary(key, R.string.local_repo_https_on,
- R.string.local_repo_https_off);
-
- } else if (key.equals(Preferences.PREF_CACHE_APK)) {
- onoffSummary(key, R.string.cache_downloaded_on,
- R.string.cache_downloaded_off);
-
- } else if (key.equals(Preferences.PREF_EXPERT)) {
- onoffSummary(key, R.string.expert_on,
- R.string.expert_off);
-
- } else if (key.equals(Preferences.PREF_ROOT_INSTALLER)) {
- onoffSummary(key, R.string.root_installer_on,
- R.string.root_installer_off);
-
- } else if (key.equals(Preferences.PREF_SYSTEM_INSTALLER)) {
- onoffSummary(key, R.string.system_installer_on,
- R.string.system_installer_off);
-
- }
- }
-
- /**
- * Initializes RootInstaller preference. This method ensures that the preference can only be checked and persisted
- * when the user grants root access for F-Droid.
- */
- protected void initRootInstallerPreference() {
- CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_ROOT_INSTALLER);
-
- // we are handling persistence ourself!
- pref.setPersistent(false);
-
- pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- final CheckBoxPreference pref = (CheckBoxPreference) preference;
-
- if (pref.isChecked()) {
- CheckRootAsyncTask checkTask = new CheckRootAsyncTask(PreferencesActivity.this, new CheckRootCallback() {
-
- @Override
- public void onRootCheck(boolean rootGranted) {
- if (rootGranted) {
- // root access granted
- SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
- editor.putBoolean(Preferences.PREF_ROOT_INSTALLER, true);
- editor.commit();
- pref.setChecked(true);
- } else {
- // root access denied
- SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
- editor.putBoolean(Preferences.PREF_ROOT_INSTALLER, false);
- editor.commit();
- pref.setChecked(false);
-
- AlertDialog.Builder alertBuilder = new AlertDialog.Builder(PreferencesActivity.this);
- alertBuilder.setTitle(R.string.root_access_denied_title);
- alertBuilder.setMessage(PreferencesActivity.this.getString(R.string.root_access_denied_body));
- alertBuilder.setNeutralButton(android.R.string.ok, null);
- alertBuilder.create().show();
- }
- }
- });
- checkTask.execute();
- } else {
- SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
- editor.putBoolean(Preferences.PREF_ROOT_INSTALLER, false);
- editor.commit();
- pref.setChecked(false);
- }
-
- return true;
- }
- });
- }
-
- /**
- * Initializes SystemInstaller preference, which can only be enabled when F-Droid is installed as a system-app
- */
- protected void initSystemInstallerPreference() {
- CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_SYSTEM_INSTALLER);
-
- // we are handling persistence ourself!
- pref.setPersistent(false);
-
- pref.setOnPreferenceClickListener(new OnPreferenceClickListener() {
-
- @Override
- public boolean onPreferenceClick(Preference preference) {
- final CheckBoxPreference pref = (CheckBoxPreference) preference;
-
- if (pref.isChecked()) {
- if (Installer.hasSystemPermissions(PreferencesActivity.this, PreferencesActivity.this.getPackageManager())) {
- // system-permission are granted, i.e. F-Droid is a system-app
- SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
- editor.putBoolean(Preferences.PREF_SYSTEM_INSTALLER, true);
- editor.commit();
- pref.setChecked(true);
- } else {
- // system-permission not available
- SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
- editor.putBoolean(Preferences.PREF_SYSTEM_INSTALLER, false);
- editor.commit();
- pref.setChecked(false);
-
- AlertDialog.Builder alertBuilder = new AlertDialog.Builder(PreferencesActivity.this);
- alertBuilder.setTitle(R.string.system_permission_denied_title);
- alertBuilder.setMessage(PreferencesActivity.this.getString(R.string.system_permission_denied_body));
- alertBuilder.setNeutralButton(android.R.string.ok, null);
- alertBuilder.create().show();
- }
- } else {
- SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
- editor.putBoolean(Preferences.PREF_SYSTEM_INSTALLER, false);
- editor.commit();
- pref.setChecked(false);
- }
-
- return true;
- }
- });
- }
-
- @Override
- protected void onResume() {
- super.onResume();
-
- getPreferenceScreen().getSharedPreferences()
- .registerOnSharedPreferenceChangeListener(this);
-
- for (String key : summariesToUpdate) {
- updateSummary(key, false);
- }
-
- initRootInstallerPreference();
- initSystemInstallerPreference();
- }
-
- @Override
- protected void onPause() {
- super.onPause();
-
- getPreferenceScreen().getSharedPreferences()
- .unregisterOnSharedPreferenceChangeListener(this);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
}
@Override
@@ -313,10 +67,4 @@ public class PreferencesActivity extends PreferenceActivity implements
return super.onOptionsItemSelected(item);
}
- @Override
- public void onSharedPreferenceChanged(
- SharedPreferences sharedPreferences, String key) {
- updateSummary(key, true);
- }
-
}
diff --git a/src/org/fdroid/fdroid/SearchResults.java b/src/org/fdroid/fdroid/SearchResults.java
index 545401a7a..08bab2480 100644
--- a/src/org/fdroid/fdroid/SearchResults.java
+++ b/src/org/fdroid/fdroid/SearchResults.java
@@ -20,14 +20,13 @@ package org.fdroid.fdroid;
import android.content.Intent;
import android.os.Bundle;
-import android.support.v7.app.ActionBarActivity;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.NavUtils;
import android.support.v4.view.MenuItemCompat;
+import android.support.v7.app.ActionBarActivity;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.LinearLayout;
-import org.fdroid.fdroid.compat.ActionBarCompat;
import org.fdroid.fdroid.views.fragments.SearchResultsFragment;
public class SearchResults extends ActionBarActivity {
@@ -38,7 +37,6 @@ public class SearchResults extends ActionBarActivity {
public void onCreate(Bundle savedInstanceState) {
((FDroidApp) getApplication()).applyTheme(this);
-
super.onCreate(savedInstanceState);
// Start a search by just typing
diff --git a/src/org/fdroid/fdroid/views/LocalRepoActivity.java b/src/org/fdroid/fdroid/views/LocalRepoActivity.java
index e596c4d27..0741eb182 100644
--- a/src/org/fdroid/fdroid/views/LocalRepoActivity.java
+++ b/src/org/fdroid/fdroid/views/LocalRepoActivity.java
@@ -60,8 +60,8 @@ public class LocalRepoActivity extends ActionBarActivity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
((FDroidApp) getApplication()).applyTheme(this);
+ super.onCreate(savedInstanceState);
setContentView(R.layout.local_repo_activity);
enableWifiButton = (Button) findViewById(R.id.enable_wifi);
diff --git a/src/org/fdroid/fdroid/views/QrWizardDownloadActivity.java b/src/org/fdroid/fdroid/views/QrWizardDownloadActivity.java
index 4ebfbf0f2..dbdd9b4f9 100644
--- a/src/org/fdroid/fdroid/views/QrWizardDownloadActivity.java
+++ b/src/org/fdroid/fdroid/views/QrWizardDownloadActivity.java
@@ -24,8 +24,8 @@ public class QrWizardDownloadActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
((FDroidApp) getApplication()).applyTheme(this);
+ super.onCreate(savedInstanceState);
setContentView(R.layout.qr_wizard_activity);
TextView instructions = (TextView) findViewById(R.id.qrWizardInstructions);
instructions.setText(R.string.qr_wizard_download_instructions);
diff --git a/src/org/fdroid/fdroid/views/QrWizardWifiNetworkActivity.java b/src/org/fdroid/fdroid/views/QrWizardWifiNetworkActivity.java
index 3f5c8dc4c..5d7419e82 100644
--- a/src/org/fdroid/fdroid/views/QrWizardWifiNetworkActivity.java
+++ b/src/org/fdroid/fdroid/views/QrWizardWifiNetworkActivity.java
@@ -28,12 +28,13 @@ public class QrWizardWifiNetworkActivity extends ActionBarActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
+ ((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
+
wifiManager = (WifiManager) getSystemService(WIFI_SERVICE);
wifiManager.setWifiEnabled(true);
FDroidApp.startLocalRepoService(this);
- ((FDroidApp) getApplication()).applyTheme(this);
setContentView(R.layout.qr_wizard_activity);
TextView instructions = (TextView) findViewById(R.id.qrWizardInstructions);
instructions.setText(R.string.qr_wizard_wifi_network_instructions);
diff --git a/src/org/fdroid/fdroid/views/RepoDetailsActivity.java b/src/org/fdroid/fdroid/views/RepoDetailsActivity.java
index f0daf679d..495603692 100644
--- a/src/org/fdroid/fdroid/views/RepoDetailsActivity.java
+++ b/src/org/fdroid/fdroid/views/RepoDetailsActivity.java
@@ -10,19 +10,19 @@ import android.nfc.NfcAdapter;
import android.os.Build;
import android.os.Bundle;
import android.os.Parcelable;
-import android.support.v4.app.FragmentActivity;
+import android.support.v4.app.NavUtils;
+import android.support.v7.app.ActionBarActivity;
import android.util.Log;
+import android.view.MenuItem;
import android.widget.LinearLayout;
import android.widget.Toast;
-
import org.fdroid.fdroid.FDroidApp;
import org.fdroid.fdroid.Utils;
-import org.fdroid.fdroid.compat.ActionBarCompat;
import org.fdroid.fdroid.data.Repo;
import org.fdroid.fdroid.data.RepoProvider;
import org.fdroid.fdroid.views.fragments.RepoDetailsFragment;
-public class RepoDetailsActivity extends FragmentActivity {
+public class RepoDetailsActivity extends ActionBarActivity {
public static final String TAG = "RepoDetailsActivity";
private Repo repo;
@@ -33,7 +33,6 @@ public class RepoDetailsActivity extends FragmentActivity {
protected void onCreate(Bundle savedInstanceState) {
((FDroidApp) getApplication()).applyTheme(this);
-
super.onCreate(savedInstanceState);
long repoId = getIntent().getLongExtra(RepoDetailsFragment.ARG_REPO_ID, 0);
@@ -62,7 +61,7 @@ public class RepoDetailsActivity extends FragmentActivity {
};
repo = RepoProvider.Helper.findById(this, repoId, projection);
- ActionBarCompat.create(this).setDisplayHomeAsUpEnabled(true);
+ getSupportActionBar().setDisplayHomeAsUpEnabled(true);
setTitle(repo.getName());
}
@@ -123,4 +122,15 @@ public class RepoDetailsActivity extends FragmentActivity {
finish();
}
}
+
+ @Override
+ public boolean onOptionsItemSelected(MenuItem item) {
+ switch (item.getItemId()) {
+ case android.R.id.home:
+ NavUtils.navigateUpFromSameTask(this);
+ return true;
+ }
+ return super.onOptionsItemSelected(item);
+ }
+
}
diff --git a/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java b/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java
index d61f95d4d..b438915ec 100644
--- a/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java
+++ b/src/org/fdroid/fdroid/views/SelectLocalAppsActivity.java
@@ -23,8 +23,8 @@ public class SelectLocalAppsActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
((FDroidApp) getApplication()).applyTheme(this);
+ super.onCreate(savedInstanceState);
setContentView(R.layout.select_local_apps_activity);
}
diff --git a/src/org/fdroid/fdroid/views/fragments/PreferenceFragment.java b/src/org/fdroid/fdroid/views/fragments/PreferenceFragment.java
new file mode 100644
index 000000000..5ef5ca048
--- /dev/null
+++ b/src/org/fdroid/fdroid/views/fragments/PreferenceFragment.java
@@ -0,0 +1,279 @@
+package org.fdroid.fdroid.views.fragments;
+
+import android.app.AlertDialog;
+import android.content.SharedPreferences;
+import android.os.Bundle;
+import android.preference.CheckBoxPreference;
+import android.preference.EditTextPreference;
+import android.preference.ListPreference;
+import android.preference.Preference;
+import org.fdroid.fdroid.Preferences;
+import org.fdroid.fdroid.PreferencesActivity;
+import org.fdroid.fdroid.R;
+import org.fdroid.fdroid.installer.CheckRootAsyncTask;
+import org.fdroid.fdroid.installer.Installer;
+
+public class PreferenceFragment
+ extends android.support.v4.preference.PreferenceFragment
+ implements SharedPreferences.OnSharedPreferenceChangeListener {
+
+ private static String[] summariesToUpdate = {
+ Preferences.PREF_UPD_INTERVAL,
+ Preferences.PREF_UPD_WIFI_ONLY,
+ Preferences.PREF_UPD_NOTIFY,
+ Preferences.PREF_UPD_HISTORY,
+ Preferences.PREF_ROOTED,
+ Preferences.PREF_INCOMP_VER,
+ Preferences.PREF_THEME,
+ Preferences.PREF_PERMISSIONS,
+ Preferences.PREF_COMPACT_LAYOUT,
+ Preferences.PREF_IGN_TOUCH,
+ Preferences.PREF_LOCAL_REPO_BONJOUR,
+ Preferences.PREF_LOCAL_REPO_NAME,
+ Preferences.PREF_LOCAL_REPO_HTTPS,
+ Preferences.PREF_CACHE_APK,
+ Preferences.PREF_EXPERT,
+ Preferences.PREF_ROOT_INSTALLER,
+ Preferences.PREF_SYSTEM_INSTALLER
+ };
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ addPreferencesFromResource(R.xml.preferences);
+ }
+
+ protected void onoffSummary(String key, int on, int off) {
+ CheckBoxPreference pref = (CheckBoxPreference)findPreference(key);
+ if (pref.isChecked()) {
+ pref.setSummary(on);
+ } else {
+ pref.setSummary(off);
+ }
+ }
+
+ protected void entrySummary(String key) {
+ ListPreference pref = (ListPreference)findPreference(key);
+ pref.setSummary(pref.getEntry());
+ }
+
+ protected void textSummary(String key, int resId) {
+ EditTextPreference pref = (EditTextPreference)findPreference(key);
+ pref.setSummary(getString(resId, pref.getText()));
+ }
+
+ protected void updateSummary(String key, boolean changing) {
+
+ int result = 0;
+
+ if (key.equals(Preferences.PREF_UPD_INTERVAL)) {
+ ListPreference pref = (ListPreference)findPreference(
+ Preferences.PREF_UPD_INTERVAL);
+ int interval = Integer.parseInt(pref.getValue());
+ Preference onlyOnWifi = findPreference(
+ Preferences.PREF_UPD_WIFI_ONLY);
+ onlyOnWifi.setEnabled(interval > 0);
+ if (interval == 0) {
+ pref.setSummary(R.string.update_interval_zero);
+ } else {
+ pref.setSummary(pref.getEntry());
+ }
+
+ } else if (key.equals(Preferences.PREF_UPD_WIFI_ONLY)) {
+ onoffSummary(key, R.string.automatic_scan_wifi_on,
+ R.string.automatic_scan_wifi_off);
+
+ } else if (key.equals(Preferences.PREF_UPD_NOTIFY)) {
+ onoffSummary(key, R.string.notify_on,
+ R.string.notify_off);
+
+ } else if (key.equals(Preferences.PREF_UPD_HISTORY)) {
+ textSummary(key, R.string.update_history_summ);
+
+ } else if (key.equals(Preferences.PREF_PERMISSIONS)) {
+ onoffSummary(key, R.string.showPermissions_on,
+ R.string.showPermissions_off);
+
+ } else if (key.equals(Preferences.PREF_COMPACT_LAYOUT)) {
+ onoffSummary(key, R.string.compactlayout_on,
+ R.string.compactlayout_off);
+
+ } else if (key.equals(Preferences.PREF_THEME)) {
+ entrySummary(key);
+ if (changing) {
+ result |= PreferencesActivity.RESULT_RESTART;
+ getActivity().setResult(result);
+ }
+
+ } else if (key.equals(Preferences.PREF_INCOMP_VER)) {
+ onoffSummary(key, R.string.show_incompat_versions_on,
+ R.string.show_incompat_versions_off);
+
+ } else if (key.equals(Preferences.PREF_ROOTED)) {
+ onoffSummary(key, R.string.rooted_on,
+ R.string.rooted_off);
+
+ } else if (key.equals(Preferences.PREF_IGN_TOUCH)) {
+ onoffSummary(key, R.string.ignoreTouch_on,
+ R.string.ignoreTouch_off);
+
+ } else if (key.equals(Preferences.PREF_LOCAL_REPO_BONJOUR)) {
+ onoffSummary(key, R.string.local_repo_bonjour_on,
+ R.string.local_repo_bonjour_off);
+
+ } else if (key.equals(Preferences.PREF_LOCAL_REPO_NAME)) {
+ textSummary(key, R.string.local_repo_name_summary);
+
+ } else if (key.equals(Preferences.PREF_LOCAL_REPO_HTTPS)) {
+ onoffSummary(key, R.string.local_repo_https_on,
+ R.string.local_repo_https_off);
+
+ } else if (key.equals(Preferences.PREF_CACHE_APK)) {
+ onoffSummary(key, R.string.cache_downloaded_on,
+ R.string.cache_downloaded_off);
+
+ } else if (key.equals(Preferences.PREF_EXPERT)) {
+ onoffSummary(key, R.string.expert_on,
+ R.string.expert_off);
+
+ } else if (key.equals(Preferences.PREF_ROOT_INSTALLER)) {
+ onoffSummary(key, R.string.root_installer_on,
+ R.string.root_installer_off);
+
+ } else if (key.equals(Preferences.PREF_SYSTEM_INSTALLER)) {
+ onoffSummary(key, R.string.system_installer_on,
+ R.string.system_installer_off);
+
+ }
+ }
+
+ /**
+ * Initializes RootInstaller preference. This method ensures that the preference can only be checked and persisted
+ * when the user grants root access for F-Droid.
+ */
+ protected void initRootInstallerPreference() {
+ CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_ROOT_INSTALLER);
+
+ // we are handling persistence ourself!
+ pref.setPersistent(false);
+
+ pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ final CheckBoxPreference pref = (CheckBoxPreference) preference;
+
+ if (pref.isChecked()) {
+ CheckRootAsyncTask checkTask = new CheckRootAsyncTask(getActivity(), new CheckRootAsyncTask.CheckRootCallback() {
+
+ @Override
+ public void onRootCheck(boolean rootGranted) {
+ if (rootGranted) {
+ // root access granted
+ SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
+ editor.putBoolean(Preferences.PREF_ROOT_INSTALLER, true);
+ editor.commit();
+ pref.setChecked(true);
+ } else {
+ // root access denied
+ SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
+ editor.putBoolean(Preferences.PREF_ROOT_INSTALLER, false);
+ editor.commit();
+ pref.setChecked(false);
+
+ AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
+ alertBuilder.setTitle(R.string.root_access_denied_title);
+ alertBuilder.setMessage(getActivity().getString(R.string.root_access_denied_body));
+ alertBuilder.setNeutralButton(android.R.string.ok, null);
+ alertBuilder.create().show();
+ }
+ }
+ });
+ checkTask.execute();
+ } else {
+ SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
+ editor.putBoolean(Preferences.PREF_ROOT_INSTALLER, false);
+ editor.commit();
+ pref.setChecked(false);
+ }
+
+ return true;
+ }
+ });
+ }
+
+ /**
+ * Initializes SystemInstaller preference, which can only be enabled when F-Droid is installed as a system-app
+ */
+ protected void initSystemInstallerPreference() {
+ CheckBoxPreference pref = (CheckBoxPreference) findPreference(Preferences.PREF_SYSTEM_INSTALLER);
+
+ // we are handling persistence ourself!
+ pref.setPersistent(false);
+
+ pref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
+
+ @Override
+ public boolean onPreferenceClick(Preference preference) {
+ final CheckBoxPreference pref = (CheckBoxPreference) preference;
+
+ if (pref.isChecked()) {
+ if (Installer.hasSystemPermissions(getActivity(), getActivity().getPackageManager())) {
+ // system-permission are granted, i.e. F-Droid is a system-app
+ SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
+ editor.putBoolean(Preferences.PREF_SYSTEM_INSTALLER, true);
+ editor.commit();
+ pref.setChecked(true);
+ } else {
+ // system-permission not available
+ SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
+ editor.putBoolean(Preferences.PREF_SYSTEM_INSTALLER, false);
+ editor.commit();
+ pref.setChecked(false);
+
+ AlertDialog.Builder alertBuilder = new AlertDialog.Builder(getActivity());
+ alertBuilder.setTitle(R.string.system_permission_denied_title);
+ alertBuilder.setMessage(getActivity().getString(R.string.system_permission_denied_body));
+ alertBuilder.setNeutralButton(android.R.string.ok, null);
+ alertBuilder.create().show();
+ }
+ } else {
+ SharedPreferences.Editor editor = pref.getSharedPreferences().edit();
+ editor.putBoolean(Preferences.PREF_SYSTEM_INSTALLER, false);
+ editor.commit();
+ pref.setChecked(false);
+ }
+
+ return true;
+ }
+ });
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ getPreferenceScreen().getSharedPreferences().registerOnSharedPreferenceChangeListener(this);
+
+ for (String key : summariesToUpdate) {
+ updateSummary(key, false);
+ }
+
+ initRootInstallerPreference();
+ initSystemInstallerPreference();
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ getPreferenceScreen().getSharedPreferences().unregisterOnSharedPreferenceChangeListener(this);
+ }
+
+ @Override
+ public void onSharedPreferenceChanged(
+ SharedPreferences sharedPreferences, String key) {
+ updateSummary(key, true);
+ }
+
+
+}