mirror of
https://github.com/f-droid/fdroidclient.git
synced 2026-06-16 11:50:09 -04:00
This name is used in the RepoList, the local repo website title, the Bonjour broadcast, etc. By default, a name is generated using the make and model of the phone plus a random number.
318 lines
13 KiB
Java
318 lines
13 KiB
Java
/*
|
|
* Copyright (C) 2010-12 Ciaran Gultnieks, ciaran@ciarang.com
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 3
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
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.NavUtils;
|
|
|
|
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 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_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);
|
|
|
|
// 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_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);
|
|
}
|
|
|
|
@Override
|
|
public boolean onOptionsItemSelected(MenuItem item) {
|
|
switch (item.getItemId()) {
|
|
case android.R.id.home:
|
|
NavUtils.navigateUpFromSameTask(this);
|
|
return true;
|
|
}
|
|
return super.onOptionsItemSelected(item);
|
|
}
|
|
|
|
@Override
|
|
public void onSharedPreferenceChanged(
|
|
SharedPreferences sharedPreferences, String key) {
|
|
updateSummary(key, true);
|
|
}
|
|
|
|
}
|