Migrating activities to appcompat-v7

The only remaining activity is the AppDetails acvitity, which will require
a little more than just making it extend ActionBarActivity. Currently,
it extends ListActivity. To support appcompat-v7, it really should have
two fragments - the details one and the list one. Then, when the orientation
is changed, it should load a different layout with the fragments side by side.

Although Google is encouraging people to make old devices run apps
with the action bar (via appcompat-v7), they haven't provided a way
for people to create preference/setting screens with an action bar.

There are plenty of issues in the Android issue tracker relating
to this, but it doesn't yet seem to be on the radar of the Android
devs.

Until there is a native implementation of PreferenceFragment in
the appcompat-v7 support library, this submodule provides is a 3rd
party solution. It is actually a fork of the first repo in github,
though that was a bit of an upload and dump, without accepting MR's.
This fork includes gradle support.
This commit is contained in:
Peter Serwylo 2014-06-03 08:19:26 +09:30 committed by Hans-Christoph Steiner
parent 59b9fd6a8c
commit 3050e3dbc5
12 changed files with 338 additions and 292 deletions

View File

@ -203,6 +203,9 @@
android:launchMode="singleTop"
android:parentActivityName=".FDroid"
android:screenOrientation="portrait" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".FDroid" />
</activity>
<activity
android:name=".views.SelectLocalAppsActivity"
@ -216,7 +219,11 @@
android:name=".views.RepoDetailsActivity"
android:label="@string/menu_manage"
android:parentActivityName=".ManageRepo"
android:windowSoftInputMode="stateHidden" />
android:windowSoftInputMode="stateHidden">
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".ManageRepo" />
</activity>
<activity
android:name=".AppDetails"

View File

@ -91,10 +91,10 @@ public class FDroidApp extends Application {
switch (curTheme) {
case dark:
activity.setTheme(R.style.AppThemeDark);
return;
break;
case light:
activity.setTheme(R.style.AppThemeLight);
return;
break;
}
}

View File

@ -52,9 +52,9 @@ public class ManageRepo extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
FragmentManager fm = getSupportFragmentManager();
if (fm.findFragmentById(android.R.id.content) == null) {

View File

@ -36,7 +36,10 @@ public class NfcNotEnabledActivity extends ActionBarActivity
@Override
public void onCreate(Bundle savedInstanceState) {
((FDroidApp) getApplication()).applyTheme(this);
super.onCreate(savedInstanceState);
final Intent intent = new Intent();
if (Build.VERSION.SDK_INT >= 16) {
doOnJellybean(intent);

View File

@ -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);
}
}

View File

@ -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

View File

@ -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);

View File

@ -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);

View File

@ -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);

View File

@ -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);
}
}

View File

@ -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);
}

View File

@ -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);
}
}