mirror of
https://github.com/MatomoCamp/matomocamp-companion-android.git
synced 2024-09-19 16:13:46 +02:00
No more reflection hacks: replaced PreferenceFragment with AppCompatPreferenceActivity
This commit is contained in:
parent
19c6fa9d97
commit
6246671c38
6 changed files with 189 additions and 332 deletions
|
@ -1,247 +0,0 @@
|
||||||
package android.support.v4.preference;
|
|
||||||
|
|
||||||
import java.lang.reflect.Constructor;
|
|
||||||
import java.lang.reflect.Method;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.app.Activity;
|
|
||||||
import android.content.Context;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Build;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.os.Handler;
|
|
||||||
import android.os.Message;
|
|
||||||
import android.preference.Preference;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.preference.PreferenceScreen;
|
|
||||||
import android.support.v4.app.Fragment;
|
|
||||||
import android.view.LayoutInflater;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.ViewGroup;
|
|
||||||
import android.widget.ListView;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* A PreferenceFragment for the support library. Based on the platform's code with some removed features and a basic ListView layout.
|
|
||||||
*
|
|
||||||
* @author Christophe Beyls
|
|
||||||
*/
|
|
||||||
public abstract class PreferenceFragment extends Fragment {
|
|
||||||
|
|
||||||
private static final int FIRST_REQUEST_CODE = 100;
|
|
||||||
static final int MSG_BIND_PREFERENCES = 1;
|
|
||||||
static final int MSG_REQUEST_FOCUS = 2;
|
|
||||||
private static final String PREFERENCES_TAG = "android:preferences";
|
|
||||||
private static final float HC_HORIZONTAL_PADDING = 16f;
|
|
||||||
|
|
||||||
@SuppressLint("HandlerLeak")
|
|
||||||
private final Handler mHandler = new Handler() {
|
|
||||||
@Override
|
|
||||||
public void handleMessage(Message msg) {
|
|
||||||
switch (msg.what) {
|
|
||||||
case MSG_BIND_PREFERENCES:
|
|
||||||
bindPreferences();
|
|
||||||
break;
|
|
||||||
case MSG_REQUEST_FOCUS:
|
|
||||||
mList.focusableViewAvailable(mList);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
private boolean mHavePrefs;
|
|
||||||
private boolean mInitDone;
|
|
||||||
ListView mList;
|
|
||||||
private PreferenceManager mPreferenceManager;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
try {
|
|
||||||
Constructor<PreferenceManager> c = PreferenceManager.class.getDeclaredConstructor(Activity.class, int.class);
|
|
||||||
c.setAccessible(true);
|
|
||||||
mPreferenceManager = c.newInstance(this.getActivity(), FIRST_REQUEST_CODE);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public View onCreateView(LayoutInflater layoutInflater, ViewGroup viewGroup, Bundle savedInstanceState) {
|
|
||||||
ListView listView = new ListView(getActivity());
|
|
||||||
listView.setId(android.R.id.list);
|
|
||||||
if ((Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) && (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP)) {
|
|
||||||
final int horizontalPadding = (int) (HC_HORIZONTAL_PADDING * getResources().getDisplayMetrics().density + 0.5f);
|
|
||||||
listView.setPadding(horizontalPadding, 0, horizontalPadding, 0);
|
|
||||||
listView.setClipToPadding(false);
|
|
||||||
listView.setScrollBarStyle(View.SCROLLBARS_OUTSIDE_OVERLAY);
|
|
||||||
}
|
|
||||||
return listView;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityCreated(Bundle savedInstanceState) {
|
|
||||||
super.onActivityCreated(savedInstanceState);
|
|
||||||
|
|
||||||
if (mHavePrefs) {
|
|
||||||
bindPreferences();
|
|
||||||
}
|
|
||||||
|
|
||||||
mInitDone = true;
|
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
|
||||||
Bundle container = savedInstanceState.getBundle(PREFERENCES_TAG);
|
|
||||||
if (container != null) {
|
|
||||||
final PreferenceScreen preferenceScreen = getPreferenceScreen();
|
|
||||||
if (preferenceScreen != null) {
|
|
||||||
preferenceScreen.restoreHierarchyState(container);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onStop() {
|
|
||||||
super.onStop();
|
|
||||||
try {
|
|
||||||
Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityStop");
|
|
||||||
m.setAccessible(true);
|
|
||||||
m.invoke(mPreferenceManager);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDestroyView() {
|
|
||||||
mList = null;
|
|
||||||
mHandler.removeCallbacksAndMessages(null);
|
|
||||||
super.onDestroyView();
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onDestroy() {
|
|
||||||
super.onDestroy();
|
|
||||||
try {
|
|
||||||
Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityDestroy");
|
|
||||||
m.setAccessible(true);
|
|
||||||
m.invoke(mPreferenceManager);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onSaveInstanceState(Bundle outState) {
|
|
||||||
super.onSaveInstanceState(outState);
|
|
||||||
PreferenceScreen preferenceScreen = getPreferenceScreen();
|
|
||||||
if (preferenceScreen != null) {
|
|
||||||
Bundle container = new Bundle();
|
|
||||||
preferenceScreen.saveHierarchyState(container);
|
|
||||||
outState.putBundle(PREFERENCES_TAG, container);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
try {
|
|
||||||
Method m = PreferenceManager.class.getDeclaredMethod("dispatchActivityResult", int.class, int.class, Intent.class);
|
|
||||||
m.setAccessible(true);
|
|
||||||
m.invoke(mPreferenceManager, requestCode, resultCode, data);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreferenceManager getPreferenceManager() {
|
|
||||||
return mPreferenceManager;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void setPreferenceScreen(PreferenceScreen screen) {
|
|
||||||
try {
|
|
||||||
Method m = PreferenceManager.class.getDeclaredMethod("setPreferences", PreferenceScreen.class);
|
|
||||||
m.setAccessible(true);
|
|
||||||
boolean result = (Boolean) m.invoke(mPreferenceManager, screen);
|
|
||||||
if (result && (screen != null)) {
|
|
||||||
mHavePrefs = true;
|
|
||||||
if (mInitDone) {
|
|
||||||
postBindPreferences();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public PreferenceScreen getPreferenceScreen() {
|
|
||||||
try {
|
|
||||||
Method m = PreferenceManager.class.getDeclaredMethod("getPreferenceScreen");
|
|
||||||
m.setAccessible(true);
|
|
||||||
return (PreferenceScreen) m.invoke(mPreferenceManager);
|
|
||||||
} catch (Exception e) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addPreferencesFromIntent(Intent intent) {
|
|
||||||
requirePreferenceManager();
|
|
||||||
try {
|
|
||||||
Method m = PreferenceManager.class.getDeclaredMethod("inflateFromIntent", Intent.class, PreferenceScreen.class);
|
|
||||||
m.setAccessible(true);
|
|
||||||
PreferenceScreen screen = (PreferenceScreen) m.invoke(mPreferenceManager, intent, getPreferenceScreen());
|
|
||||||
setPreferenceScreen(screen);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public void addPreferencesFromResource(int resId) {
|
|
||||||
requirePreferenceManager();
|
|
||||||
try {
|
|
||||||
Method m = PreferenceManager.class.getDeclaredMethod("inflateFromResource", Context.class, int.class, PreferenceScreen.class);
|
|
||||||
m.setAccessible(true);
|
|
||||||
PreferenceScreen screen = (PreferenceScreen) m.invoke(mPreferenceManager, getActivity(), resId, getPreferenceScreen());
|
|
||||||
setPreferenceScreen(screen);
|
|
||||||
} catch (Exception ignored) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public Preference findPreference(CharSequence key) {
|
|
||||||
if (mPreferenceManager == null) {
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
return mPreferenceManager.findPreference(key);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void requirePreferenceManager() {
|
|
||||||
if (this.mPreferenceManager == null) {
|
|
||||||
throw new RuntimeException("This should be called after super.onCreate.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void postBindPreferences() {
|
|
||||||
if (!mHandler.hasMessages(MSG_BIND_PREFERENCES)) {
|
|
||||||
mHandler.sendEmptyMessage(MSG_BIND_PREFERENCES);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void bindPreferences() {
|
|
||||||
final PreferenceScreen preferenceScreen = getPreferenceScreen();
|
|
||||||
if (preferenceScreen != null) {
|
|
||||||
preferenceScreen.bind(getListView());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public ListView getListView() {
|
|
||||||
ensureList();
|
|
||||||
return mList;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ensureList() {
|
|
||||||
if (mList != null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
View root = getView();
|
|
||||||
if (root == null) {
|
|
||||||
throw new IllegalStateException("Content view not yet created");
|
|
||||||
}
|
|
||||||
View rawListView = root.findViewById(android.R.id.list);
|
|
||||||
if (rawListView == null) {
|
|
||||||
throw new RuntimeException("Your content must have a ListView whose id attribute is 'android.R.id.list'");
|
|
||||||
}
|
|
||||||
if (!(rawListView instanceof ListView)) {
|
|
||||||
throw new RuntimeException("Content has view with id attribute 'android.R.id.list' that is not a ListView class");
|
|
||||||
}
|
|
||||||
mList = (ListView) rawListView;
|
|
||||||
mHandler.sendEmptyMessage(MSG_REQUEST_FOCUS);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -0,0 +1,128 @@
|
||||||
|
package be.digitalia.fosdem.activities;
|
||||||
|
|
||||||
|
import android.content.res.Configuration;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceActivity;
|
||||||
|
import android.support.annotation.IdRes;
|
||||||
|
import android.support.annotation.LayoutRes;
|
||||||
|
import android.support.annotation.Nullable;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.support.v7.app.AppCompatDelegate;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.MenuInflater;
|
||||||
|
import android.view.View;
|
||||||
|
import android.view.ViewGroup;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
|
||||||
|
* to be used with AppCompat.
|
||||||
|
*/
|
||||||
|
public class AppCompatPreferenceActivity extends PreferenceActivity {
|
||||||
|
|
||||||
|
private AppCompatDelegate mDelegate;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
getDelegate().installViewFactory();
|
||||||
|
getDelegate().onCreate(savedInstanceState);
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostCreate(@Nullable Bundle savedInstanceState) {
|
||||||
|
super.onPostCreate(savedInstanceState);
|
||||||
|
getDelegate().onPostCreate(savedInstanceState);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Nullable
|
||||||
|
public ActionBar getSupportActionBar() {
|
||||||
|
return getDelegate().getSupportActionBar();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSupportActionBar(@Nullable Toolbar toolbar) {
|
||||||
|
getDelegate().setSupportActionBar(toolbar);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public MenuInflater getMenuInflater() {
|
||||||
|
return getDelegate().getMenuInflater();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setContentView(@LayoutRes int layoutResID) {
|
||||||
|
getDelegate().setContentView(layoutResID);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setContentView(View view) {
|
||||||
|
getDelegate().setContentView(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setContentView(View view, ViewGroup.LayoutParams params) {
|
||||||
|
getDelegate().setContentView(view, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void addContentView(View view, ViewGroup.LayoutParams params) {
|
||||||
|
getDelegate().addContentView(view, params);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConfigurationChanged(Configuration newConfig) {
|
||||||
|
super.onConfigurationChanged(newConfig);
|
||||||
|
getDelegate().onConfigurationChanged(newConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onStop() {
|
||||||
|
super.onStop();
|
||||||
|
getDelegate().onStop();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostResume() {
|
||||||
|
super.onPostResume();
|
||||||
|
getDelegate().onPostResume();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@Nullable
|
||||||
|
public View findViewById(@IdRes int id) {
|
||||||
|
return getDelegate().findViewById(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDestroy() {
|
||||||
|
super.onDestroy();
|
||||||
|
getDelegate().onDestroy();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onTitleChanged(CharSequence title, int color) {
|
||||||
|
super.onTitleChanged(title, color);
|
||||||
|
getDelegate().setTitle(title);
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean supportRequestWindowFeature(int featureId) {
|
||||||
|
return getDelegate().requestWindowFeature(featureId);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void invalidateOptionsMenu() {
|
||||||
|
getDelegate().invalidateOptionsMenu();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onSaveInstanceState(Bundle outState) {
|
||||||
|
super.onSaveInstanceState(outState);
|
||||||
|
getDelegate().onSaveInstanceState(outState);
|
||||||
|
}
|
||||||
|
|
||||||
|
private AppCompatDelegate getDelegate() {
|
||||||
|
if (mDelegate == null) {
|
||||||
|
mDelegate = AppCompatDelegate.create(this, null);
|
||||||
|
}
|
||||||
|
return mDelegate;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,25 +1,31 @@
|
||||||
package be.digitalia.fosdem.activities;
|
package be.digitalia.fosdem.activities;
|
||||||
|
|
||||||
|
import android.content.SharedPreferences;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.support.v7.app.AppCompatActivity;
|
import android.preference.ListPreference;
|
||||||
|
import android.preference.PreferenceManager;
|
||||||
import android.view.MenuItem;
|
import android.view.MenuItem;
|
||||||
|
|
||||||
import be.digitalia.fosdem.R;
|
import be.digitalia.fosdem.R;
|
||||||
import be.digitalia.fosdem.fragments.SettingsFragment;
|
import be.digitalia.fosdem.utils.TwoStatePreferenceCompat;
|
||||||
|
|
||||||
public class SettingsActivity extends AppCompatActivity {
|
public class SettingsActivity extends AppCompatPreferenceActivity implements SharedPreferences.OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
|
public static final String KEY_PREF_NOTIFICATIONS_ENABLED = "notifications_enabled";
|
||||||
|
public static final String KEY_PREF_NOTIFICATIONS_VIBRATE = "notifications_vibrate";
|
||||||
|
public static final String KEY_PREF_NOTIFICATIONS_LED = "notifications_led";
|
||||||
|
public static final String KEY_PREF_NOTIFICATIONS_DELAY = "notifications_delay";
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
@Override
|
@Override
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
super.onCreate(savedInstanceState);
|
super.onCreate(savedInstanceState);
|
||||||
setContentView(R.layout.content);
|
|
||||||
|
|
||||||
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
|
||||||
if (savedInstanceState == null) {
|
addPreferencesFromResource(R.xml.settings);
|
||||||
SettingsFragment f = SettingsFragment.newInstance();
|
updateNotificationsEnabled();
|
||||||
getSupportFragmentManager().beginTransaction().add(R.id.content, f).commit();
|
updateNotificationsDelaySummary();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -37,4 +43,38 @@ public class SettingsActivity extends AppCompatActivity {
|
||||||
super.onBackPressed();
|
super.onBackPressed();
|
||||||
overridePendingTransition(R.anim.partial_zoom_in, R.anim.slide_out_right);
|
overridePendingTransition(R.anim.partial_zoom_in, R.anim.slide_out_right);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(this).registerOnSharedPreferenceChangeListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPause() {
|
||||||
|
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
|
||||||
|
super.onPause();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
|
if (KEY_PREF_NOTIFICATIONS_ENABLED.equals(key)) {
|
||||||
|
updateNotificationsEnabled();
|
||||||
|
} else if (KEY_PREF_NOTIFICATIONS_DELAY.equals(key)) {
|
||||||
|
updateNotificationsDelaySummary();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressWarnings("deprecation")
|
||||||
|
private void updateNotificationsEnabled() {
|
||||||
|
boolean notificationsEnabled = TwoStatePreferenceCompat.isChecked(findPreference(KEY_PREF_NOTIFICATIONS_ENABLED));
|
||||||
|
findPreference(KEY_PREF_NOTIFICATIONS_VIBRATE).setEnabled(notificationsEnabled);
|
||||||
|
findPreference(KEY_PREF_NOTIFICATIONS_LED).setEnabled(notificationsEnabled);
|
||||||
|
findPreference(KEY_PREF_NOTIFICATIONS_DELAY).setEnabled(notificationsEnabled);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateNotificationsDelaySummary() {
|
||||||
|
ListPreference notificationsDelayPreference = (ListPreference) findPreference(KEY_PREF_NOTIFICATIONS_DELAY);
|
||||||
|
notificationsDelayPreference.setSummary(notificationsDelayPreference.getEntry());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,8 +8,9 @@ import android.content.SharedPreferences;
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
import android.support.v4.content.LocalBroadcastManager;
|
import android.support.v4.content.LocalBroadcastManager;
|
||||||
|
|
||||||
|
import be.digitalia.fosdem.activities.SettingsActivity;
|
||||||
import be.digitalia.fosdem.db.DatabaseManager;
|
import be.digitalia.fosdem.db.DatabaseManager;
|
||||||
import be.digitalia.fosdem.fragments.SettingsFragment;
|
|
||||||
import be.digitalia.fosdem.services.AlarmIntentService;
|
import be.digitalia.fosdem.services.AlarmIntentService;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -59,7 +60,7 @@ public class FosdemAlarmManager implements OnSharedPreferenceChangeListener {
|
||||||
private FosdemAlarmManager(Context context) {
|
private FosdemAlarmManager(Context context) {
|
||||||
this.context = context;
|
this.context = context;
|
||||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
isEnabled = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_NOTIFICATIONS_ENABLED, false);
|
isEnabled = sharedPreferences.getBoolean(SettingsActivity.KEY_PREF_NOTIFICATIONS_ENABLED, false);
|
||||||
if (isEnabled) {
|
if (isEnabled) {
|
||||||
registerReceivers();
|
registerReceivers();
|
||||||
}
|
}
|
||||||
|
@ -72,8 +73,8 @@ public class FosdemAlarmManager implements OnSharedPreferenceChangeListener {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
||||||
if (SettingsFragment.KEY_PREF_NOTIFICATIONS_ENABLED.equals(key)) {
|
if (SettingsActivity.KEY_PREF_NOTIFICATIONS_ENABLED.equals(key)) {
|
||||||
isEnabled = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_NOTIFICATIONS_ENABLED, false);
|
isEnabled = sharedPreferences.getBoolean(SettingsActivity.KEY_PREF_NOTIFICATIONS_ENABLED, false);
|
||||||
if (isEnabled) {
|
if (isEnabled) {
|
||||||
registerReceivers();
|
registerReceivers();
|
||||||
startUpdateAlarms();
|
startUpdateAlarms();
|
||||||
|
@ -81,7 +82,7 @@ public class FosdemAlarmManager implements OnSharedPreferenceChangeListener {
|
||||||
unregisterReceivers();
|
unregisterReceivers();
|
||||||
startDisableAlarms();
|
startDisableAlarms();
|
||||||
}
|
}
|
||||||
} else if (SettingsFragment.KEY_PREF_NOTIFICATIONS_DELAY.equals(key)) {
|
} else if (SettingsActivity.KEY_PREF_NOTIFICATIONS_DELAY.equals(key)) {
|
||||||
startUpdateAlarms();
|
startUpdateAlarms();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
package be.digitalia.fosdem.fragments;
|
|
||||||
|
|
||||||
import android.content.SharedPreferences;
|
|
||||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.preference.ListPreference;
|
|
||||||
import android.preference.PreferenceManager;
|
|
||||||
import android.support.v4.preference.PreferenceFragment;
|
|
||||||
|
|
||||||
import be.digitalia.fosdem.R;
|
|
||||||
import be.digitalia.fosdem.utils.TwoStatePreferenceCompat;
|
|
||||||
|
|
||||||
public class SettingsFragment extends PreferenceFragment implements OnSharedPreferenceChangeListener {
|
|
||||||
|
|
||||||
public static final String KEY_PREF_NOTIFICATIONS_ENABLED = "notifications_enabled";
|
|
||||||
public static final String KEY_PREF_NOTIFICATIONS_VIBRATE = "notifications_vibrate";
|
|
||||||
public static final String KEY_PREF_NOTIFICATIONS_LED = "notifications_led";
|
|
||||||
public static final String KEY_PREF_NOTIFICATIONS_DELAY = "notifications_delay";
|
|
||||||
|
|
||||||
public static SettingsFragment newInstance() {
|
|
||||||
return new SettingsFragment();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
addPreferencesFromResource(R.xml.settings);
|
|
||||||
updateNotificationsEnabled();
|
|
||||||
updateNotificationsDelaySummary();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
PreferenceManager.getDefaultSharedPreferences(getActivity()).registerOnSharedPreferenceChangeListener(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onPause() {
|
|
||||||
PreferenceManager.getDefaultSharedPreferences(getActivity()).unregisterOnSharedPreferenceChangeListener(this);
|
|
||||||
super.onPause();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
|
|
||||||
if (KEY_PREF_NOTIFICATIONS_ENABLED.equals(key)) {
|
|
||||||
updateNotificationsEnabled();
|
|
||||||
} else if (KEY_PREF_NOTIFICATIONS_DELAY.equals(key)) {
|
|
||||||
updateNotificationsDelaySummary();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateNotificationsEnabled() {
|
|
||||||
boolean notificationsEnabled = TwoStatePreferenceCompat.isChecked(findPreference(KEY_PREF_NOTIFICATIONS_ENABLED));
|
|
||||||
findPreference(KEY_PREF_NOTIFICATIONS_VIBRATE).setEnabled(notificationsEnabled);
|
|
||||||
findPreference(KEY_PREF_NOTIFICATIONS_LED).setEnabled(notificationsEnabled);
|
|
||||||
findPreference(KEY_PREF_NOTIFICATIONS_DELAY).setEnabled(notificationsEnabled);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void updateNotificationsDelaySummary() {
|
|
||||||
ListPreference notificationsDelayPreference = (ListPreference) findPreference(KEY_PREF_NOTIFICATIONS_DELAY);
|
|
||||||
notificationsDelayPreference.setSummary(notificationsDelayPreference.getEntry());
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -26,8 +26,8 @@ import be.digitalia.fosdem.R;
|
||||||
import be.digitalia.fosdem.activities.EventDetailsActivity;
|
import be.digitalia.fosdem.activities.EventDetailsActivity;
|
||||||
import be.digitalia.fosdem.activities.MainActivity;
|
import be.digitalia.fosdem.activities.MainActivity;
|
||||||
import be.digitalia.fosdem.activities.RoomImageDialogActivity;
|
import be.digitalia.fosdem.activities.RoomImageDialogActivity;
|
||||||
|
import be.digitalia.fosdem.activities.SettingsActivity;
|
||||||
import be.digitalia.fosdem.db.DatabaseManager;
|
import be.digitalia.fosdem.db.DatabaseManager;
|
||||||
import be.digitalia.fosdem.fragments.SettingsFragment;
|
|
||||||
import be.digitalia.fosdem.model.Event;
|
import be.digitalia.fosdem.model.Event;
|
||||||
import be.digitalia.fosdem.receivers.AlarmReceiver;
|
import be.digitalia.fosdem.receivers.AlarmReceiver;
|
||||||
import be.digitalia.fosdem.utils.StringUtils;
|
import be.digitalia.fosdem.utils.StringUtils;
|
||||||
|
@ -151,7 +151,7 @@ public class AlarmIntentService extends IntentService {
|
||||||
|
|
||||||
int defaultFlags = Notification.DEFAULT_SOUND;
|
int defaultFlags = Notification.DEFAULT_SOUND;
|
||||||
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
|
||||||
if (sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_NOTIFICATIONS_VIBRATE, false)) {
|
if (sharedPreferences.getBoolean(SettingsActivity.KEY_PREF_NOTIFICATIONS_VIBRATE, false)) {
|
||||||
defaultFlags |= Notification.DEFAULT_VIBRATE;
|
defaultFlags |= Notification.DEFAULT_VIBRATE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -195,7 +195,7 @@ public class AlarmIntentService extends IntentService {
|
||||||
.setCategory(NotificationCompat.CATEGORY_EVENT);
|
.setCategory(NotificationCompat.CATEGORY_EVENT);
|
||||||
|
|
||||||
// Blink the LED with FOSDEM color if enabled in the options
|
// Blink the LED with FOSDEM color if enabled in the options
|
||||||
if (sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_NOTIFICATIONS_LED, false)) {
|
if (sharedPreferences.getBoolean(SettingsActivity.KEY_PREF_NOTIFICATIONS_LED, false)) {
|
||||||
notificationBuilder.setLights(notificationColor, 1000, 5000);
|
notificationBuilder.setLights(notificationColor, 1000, 5000);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -243,7 +243,7 @@ public class AlarmIntentService extends IntentService {
|
||||||
|
|
||||||
private long getDelay() {
|
private long getDelay() {
|
||||||
String delayString = PreferenceManager.getDefaultSharedPreferences(this).getString(
|
String delayString = PreferenceManager.getDefaultSharedPreferences(this).getString(
|
||||||
SettingsFragment.KEY_PREF_NOTIFICATIONS_DELAY, "0");
|
SettingsActivity.KEY_PREF_NOTIFICATIONS_DELAY, "0");
|
||||||
// Convert from minutes to milliseconds
|
// Convert from minutes to milliseconds
|
||||||
return Long.parseLong(delayString) * DateUtils.MINUTE_IN_MILLIS;
|
return Long.parseLong(delayString) * DateUtils.MINUTE_IN_MILLIS;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue