Skip to content

Commit

Permalink
Migrate preferences to AndroidX
Browse files Browse the repository at this point in the history
  • Loading branch information
yvolk committed Feb 9, 2020
1 parent 7f5d260 commit 27cce2c
Show file tree
Hide file tree
Showing 22 changed files with 297 additions and 246 deletions.
1 change: 1 addition & 0 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -58,6 +58,7 @@ android {
dependencies {
implementation "joda-time:joda-time:$jodaTimeVersion"
implementation "androidx.appcompat:appcompat:$appCompatVersion"
implementation "androidx.preference:preference:$preferenceVersion"
implementation project(':colorpicker')

androidTestImplementation "junit:junit:$junitVersion"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,20 @@
import android.os.Bundle;
import android.os.Handler;
import android.os.ParcelFileDescriptor;
import android.preference.PreferenceActivity;
import android.util.Log;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentTransaction;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;

import org.andstatus.todoagenda.prefs.AllSettings;
import org.andstatus.todoagenda.prefs.ApplicationPreferences;
import org.andstatus.todoagenda.prefs.InstanceSettings;
import org.andstatus.todoagenda.prefs.RootFragment;
import org.andstatus.todoagenda.provider.WidgetData;
import org.andstatus.todoagenda.util.PermissionsUtil;
import org.json.JSONException;
Expand All @@ -26,14 +31,15 @@
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.util.List;
import java.nio.charset.StandardCharsets;

public class WidgetConfigurationActivity extends PreferenceActivity {
public class WidgetConfigurationActivity extends AppCompatActivity implements
PreferenceFragmentCompat.OnPreferenceStartFragmentCallback {
private static final String TAG = WidgetConfigurationActivity.class.getSimpleName();
public static final String FRAGMENT_TAG = "settings_fragment";

public static final int REQUEST_ID_RESTORE_SETTINGS = 1;
public static final int REQUEST_ID_BACKUP_SETTINGS = 2;
private static final String PREFERENCES_PACKAGE_NAME = "org.andstatus.todoagenda.prefs";
private int widgetId = 0;
private boolean saveOnPause = true;

Expand Down Expand Up @@ -63,11 +69,32 @@ protected void onResume() {

@Override
protected void onCreate(Bundle savedInstanceState) {
if (openThisActivity(getIntent())) {
super.onCreate(savedInstanceState);
if (!openThisActivity(getIntent())) return;

setContentView(R.layout.activity_settings);
super.onCreate(savedInstanceState);

setTitle(ApplicationPreferences.getWidgetInstanceName(this));

if (savedInstanceState == null) {
// Create the fragment only when the activity is created for the first time.
// ie. not after orientation changes
Fragment fragment = getSupportFragmentManager().findFragmentByTag(FRAGMENT_TAG);
if (fragment == null) {
fragment = new RootFragment();
}

FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.replace(R.id.settings_container, fragment, FRAGMENT_TAG);
ft.commit();
}
}

@Override
public boolean onPreferenceStartFragment(PreferenceFragmentCompat caller, Preference pref) {
return false;
}

private boolean openThisActivity(Intent newIntent) {
int newWidgetId = newIntent.getIntExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, 0);
if (newWidgetId == 0) {
Expand Down Expand Up @@ -99,20 +126,6 @@ private void restartIfNeeded() {
}
}

@Override
public void onBuildHeaders(List<Header> target) {
loadHeadersFromResource(R.xml.preferences_header, target);
setTitle(ApplicationPreferences.getWidgetInstanceName(this));
}

@Override
protected boolean isValidFragment(String fragmentName) {
if (fragmentName.startsWith(PREFERENCES_PACKAGE_NAME)) {
return true;
}
return super.isValidFragment(fragmentName);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
switch (requestCode) {
Expand Down Expand Up @@ -194,7 +207,7 @@ private JSONObject readJson(Uri uri) {
char[] buffer = new char[BUFFER_LENGTH];
StringBuilder builder = new StringBuilder();
int count;
reader = new InputStreamReader(in, "UTF-8");
reader = new InputStreamReader(in, StandardCharsets.UTF_8);
while ((count = reader.read(buffer)) != -1) {
builder.append(buffer, 0, count);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import androidx.preference.PreferenceManager;
import android.text.TextUtils;

import org.andstatus.todoagenda.EndedSomeTimeAgo;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,33 @@

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;

import androidx.fragment.app.DialogFragment;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;

import com.rarepebble.colorpicker.ColorPreference;
import com.rarepebble.colorpicker.ColorPreferenceDialog;

import org.andstatus.todoagenda.R;
import org.andstatus.todoagenda.TextShading;
import org.andstatus.todoagenda.widget.TimeSection;

public class ColorsPreferencesFragment extends PreferenceFragment
import static org.andstatus.todoagenda.WidgetConfigurationActivity.FRAGMENT_TAG;

/** AndroidX version created by yvolk@yurivolkov.com
* based on this answer: https://stackoverflow.com/a/53290775/297710
* and on the code of https://github.com/koji-1009/ChronoDialogPreference
*/
public class ColorsPreferencesFragment extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener {

private boolean hidePast;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences_colors);
}

Expand Down Expand Up @@ -62,4 +71,19 @@ private void showShading(TextShadingPref prefs) {
preference.setSummary(getActivity().getString(shading.titleResId));
}
}

@Override
public void onDisplayPreferenceDialog(Preference preference) {
DialogFragment dialogFragment = null;
if (preference instanceof ColorPreference) {
dialogFragment = new ColorPreferenceDialog((ColorPreference) preference);
}

if (dialogFragment != null) {
dialogFragment.setTargetFragment(this, 0);
dialogFragment.show(getFragmentManager(), FRAGMENT_TAG);
} else {
super.onDisplayPreferenceDialog(preference);
}
}
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
package org.andstatus.todoagenda.prefs;

import android.os.Bundle;
import android.preference.PreferenceFragment;

import androidx.preference.PreferenceFragmentCompat;

import org.andstatus.todoagenda.R;

public class EventDetailsPreferencesFragment extends PreferenceFragment {
public class EventDetailsPreferencesFragment extends PreferenceFragmentCompat {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences_event_details);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,19 @@

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;

import androidx.preference.EditTextPreference;
import androidx.preference.ListPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;

import org.andstatus.todoagenda.R;

public class EventFiltersPreferencesFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener {
public class EventFiltersPreferencesFragment extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences_event_filters);
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,37 +1,36 @@
package org.andstatus.todoagenda.prefs;

import android.app.Fragment;
import android.graphics.LightingColorFilter;
import android.graphics.drawable.Drawable;
import android.os.Build;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;
import android.util.Log;

import androidx.fragment.app.Fragment;
import androidx.preference.CheckBoxPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;
import androidx.preference.PreferenceScreen;

import org.andstatus.todoagenda.R;
import org.andstatus.todoagenda.provider.EventProviderType;

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;

public class EventSourcesPreferencesFragment extends PreferenceFragment {
public class EventSourcesPreferencesFragment extends PreferenceFragmentCompat {
private static final String TAG = EventSourcesPreferencesFragment.class.getSimpleName();
private static final String SOURCE_ID = "sourceId";

List<OrderedEventSource> savedActiveSources = Collections.emptyList();
List<EventSource> clickedSources = new ArrayList<>();

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences_event_sources);
}


private void addAsPreference(EventSource source, boolean isChecked ) {
CheckBoxPreference checkboxPref = new CheckBoxPreference(getActivity());
checkboxPref.setTitle((source.isAvailable ? "" : getText(R.string.not_found) + ": ") + source.getTitle());
Expand Down Expand Up @@ -141,7 +140,7 @@ private List<EventSource> getCheckedSources(PreferenceScreen preferenceScreen, i

private void loadSelectedInOtherInstances() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
for (Fragment fragment: getActivity().getFragmentManager().getFragments()) {
for (Fragment fragment: getActivity().getSupportFragmentManager().getFragments()) {
if (fragment instanceof EventSourcesPreferencesFragment && fragment != this) {
Log.i(TAG, this.toString() + "\nFound loaded " + fragment);
((EventSourcesPreferencesFragment) fragment).loadActiveSources();
Expand All @@ -151,13 +150,13 @@ private void loadSelectedInOtherInstances() {
}

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
public boolean onPreferenceTreeClick(Preference preference) {
if (preference instanceof CheckBoxPreference) {
EventSource source = EventSource.fromStoredString(preference.getExtras().getString(SOURCE_ID));
clickedSources.remove(source);
clickedSources.add(source); // last clicked is the last in the list
showAllSources(getSelectedSources());
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
return super.onPreferenceTreeClick(preference);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

import android.content.Intent;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceScreen;

import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;

import org.andstatus.todoagenda.R;
import org.andstatus.todoagenda.provider.QueryResultsStorage;
Expand All @@ -14,15 +14,15 @@
import static org.andstatus.todoagenda.WidgetConfigurationActivity.REQUEST_ID_RESTORE_SETTINGS;
import static org.andstatus.todoagenda.util.DateUtil.formatLogDateTime;

public class FeedbackPreferencesFragment extends PreferenceFragment {
public class FeedbackPreferencesFragment extends PreferenceFragmentCompat {
private static final String TAG = FeedbackPreferencesFragment.class.getSimpleName();

private static final String KEY_SHARE_EVENTS_FOR_DEBUGGING = "shareEventsForDebugging";
private static final String KEY_BACKUP_SETTINGS = "backupSettings";
private static final String KEY_RESTORE_SETTINGS = "restoreSettings";

@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
public boolean onPreferenceTreeClick(Preference preference) {
int widgetId = ApplicationPreferences.getWidgetId(getActivity());
ApplicationPreferences.save(getActivity(), widgetId);
switch (preference.getKey()) {
Expand Down Expand Up @@ -53,12 +53,11 @@ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preferen
default:
break;
}
return super.onPreferenceTreeClick(preferenceScreen, preference);
return super.onPreferenceTreeClick(preference);
}

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences_feedback);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,17 @@

import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.Preference;
import android.preference.PreferenceFragment;

import androidx.preference.Preference;
import androidx.preference.PreferenceFragmentCompat;

import org.andstatus.todoagenda.R;

public class LayoutPreferencesFragment extends PreferenceFragment
public class LayoutPreferencesFragment extends PreferenceFragmentCompat
implements SharedPreferences.OnSharedPreferenceChangeListener {

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
addPreferencesFromResource(R.xml.preferences_layout);
}

Expand Down
Loading

0 comments on commit 27cce2c

Please sign in to comment.