mirror of https://github.com/tasks/tasks
New sort activity
parent
0af1a45f38
commit
4e70a84982
@ -1,144 +0,0 @@
|
||||
/**
|
||||
* Copyright (c) 2012 Todoroo Inc
|
||||
*
|
||||
* See the file "LICENSE" for the full license governing this code.
|
||||
*/
|
||||
package com.todoroo.astrid.activity;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.DialogInterface.OnClickListener;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.ContextThemeWrapper;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.widget.CheckBox;
|
||||
import android.widget.RadioButton;
|
||||
|
||||
import com.todoroo.astrid.core.SortHelper;
|
||||
|
||||
import org.tasks.R;
|
||||
import org.tasks.preferences.ActivityPreferences;
|
||||
import org.tasks.preferences.Preferences;
|
||||
|
||||
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastHoneycomb;
|
||||
|
||||
/**
|
||||
* Shows the sort / hidden dialog
|
||||
*
|
||||
* @author Tim Su <tim@todoroo.com>
|
||||
*
|
||||
*/
|
||||
public class SortSelectionActivity {
|
||||
|
||||
public interface OnSortSelectedListener {
|
||||
void onSortSelected(boolean manualSettingChanged);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create the dialog
|
||||
*/
|
||||
public static AlertDialog createDialog(Activity activity, boolean showDragDrop, ActivityPreferences activityPreferences,
|
||||
OnSortSelectedListener listener) {
|
||||
int editDialogTheme = activityPreferences.getEditDialogTheme();
|
||||
ContextThemeWrapper contextThemeWrapper = new ContextThemeWrapper(activity, editDialogTheme);
|
||||
LayoutInflater themedInflater = activity.getLayoutInflater().cloneInContext(contextThemeWrapper);
|
||||
View body = themedInflater.inflate(R.layout.sort_selection_dialog, null);
|
||||
|
||||
if (activityPreferences.getBoolean(R.string.p_reverse_sort, false)) {
|
||||
((CheckBox) body.findViewById(R.id.reverse)).setChecked(true);
|
||||
}
|
||||
|
||||
if(!showDragDrop) {
|
||||
body.findViewById(R.id.sort_drag).setVisibility(View.GONE);
|
||||
}
|
||||
|
||||
if(showDragDrop && activityPreferences.getBoolean(R.string.p_manual_sort, false)) {
|
||||
((RadioButton) body.findViewById(R.id.sort_drag)).setChecked(true);
|
||||
} else {
|
||||
switch(activityPreferences.getSortMode()) {
|
||||
case SortHelper.SORT_ALPHA:
|
||||
((RadioButton)body.findViewById(R.id.sort_alpha)).setChecked(true);
|
||||
break;
|
||||
case SortHelper.SORT_DUE:
|
||||
((RadioButton)body.findViewById(R.id.sort_due)).setChecked(true);
|
||||
break;
|
||||
case SortHelper.SORT_IMPORTANCE:
|
||||
((RadioButton)body.findViewById(R.id.sort_importance)).setChecked(true);
|
||||
break;
|
||||
case SortHelper.SORT_MODIFIED:
|
||||
((RadioButton)body.findViewById(R.id.sort_modified)).setChecked(true);
|
||||
break;
|
||||
default:
|
||||
((RadioButton)body.findViewById(R.id.sort_smart)).setChecked(true);
|
||||
}
|
||||
}
|
||||
|
||||
body.findViewById(R.id.sort_drag).setOnClickListener(new View.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(View v) {
|
||||
// disable reverse
|
||||
}
|
||||
});
|
||||
|
||||
AlertDialog.Builder builder = atLeastHoneycomb()
|
||||
? new AlertDialog.Builder(activity, editDialogTheme)
|
||||
: new AlertDialog.Builder(activity);
|
||||
AlertDialog dialog = builder.
|
||||
setTitle(R.string.TLA_menu_sort).
|
||||
setView(body).
|
||||
setPositiveButton(R.string.TLA_menu_sort, new DialogOkListener(activityPreferences, body, listener)).
|
||||
setNegativeButton(android.R.string.cancel, new OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
}
|
||||
}).
|
||||
create();
|
||||
dialog.setOwnerActivity(activity);
|
||||
return dialog;
|
||||
}
|
||||
|
||||
// --- internal implementation
|
||||
|
||||
private SortSelectionActivity() {
|
||||
// use the static method
|
||||
}
|
||||
|
||||
private static class DialogOkListener implements OnClickListener {
|
||||
private final OnSortSelectedListener listener;
|
||||
private Preferences preferences;
|
||||
private final View body;
|
||||
|
||||
public DialogOkListener(Preferences preferences, View body, OnSortSelectedListener listener) {
|
||||
this.preferences = preferences;
|
||||
this.body = body;
|
||||
this.listener = listener;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onClick(DialogInterface view, int button) {
|
||||
int sort;
|
||||
|
||||
boolean wasManual = preferences.getBoolean(R.string.p_manual_sort, false);
|
||||
boolean isManual = ((RadioButton) body.findViewById(R.id.sort_drag)).isChecked();
|
||||
preferences.setBoolean(R.string.p_manual_sort, isManual);
|
||||
preferences.setBoolean(R.string.p_reverse_sort, ((CheckBox) body.findViewById(R.id.reverse)).isChecked());
|
||||
|
||||
if(((RadioButton)body.findViewById(R.id.sort_alpha)).isChecked()) {
|
||||
sort = SortHelper.SORT_ALPHA;
|
||||
} else if(((RadioButton)body.findViewById(R.id.sort_due)).isChecked()) {
|
||||
sort = SortHelper.SORT_DUE;
|
||||
} else if(((RadioButton)body.findViewById(R.id.sort_importance)).isChecked()) {
|
||||
sort = SortHelper.SORT_IMPORTANCE;
|
||||
} else if(((RadioButton)body.findViewById(R.id.sort_modified)).isChecked()) {
|
||||
sort = SortHelper.SORT_MODIFIED;
|
||||
} else {
|
||||
sort = SortHelper.SORT_AUTO;
|
||||
}
|
||||
|
||||
preferences.setSortMode(sort);
|
||||
|
||||
listener.onSortSelected(wasManual != isManual);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,167 @@
|
||||
package org.tasks.activities;
|
||||
|
||||
import android.content.DialogInterface;
|
||||
import android.content.Intent;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.app.AlertDialog;
|
||||
import android.view.View;
|
||||
import android.widget.ArrayAdapter;
|
||||
import android.widget.Button;
|
||||
|
||||
import com.todoroo.astrid.core.SortHelper;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.tasks.R;
|
||||
import org.tasks.injection.InjectingFragmentActivity;
|
||||
import org.tasks.preferences.Preferences;
|
||||
|
||||
import javax.inject.Inject;
|
||||
|
||||
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastLollipop;
|
||||
|
||||
public class SortActivity extends InjectingFragmentActivity {
|
||||
|
||||
private static final Logger log = LoggerFactory.getLogger(SortActivity.class);
|
||||
|
||||
public static final String EXTRA_MANUAL_ENABLED = "extra_manual_enabled";
|
||||
public static final String EXTRA_TOGGLE_MANUAL = "extra_toggle_manual";
|
||||
|
||||
@Inject Preferences preferences;
|
||||
|
||||
private boolean manualEnabled;
|
||||
private AlertDialog alertDialog;
|
||||
private int selectedIndex;
|
||||
|
||||
@Override
|
||||
protected void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
manualEnabled = getIntent().getBooleanExtra(EXTRA_MANUAL_ENABLED, false);
|
||||
|
||||
ArrayAdapter<String> adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_single_choice);
|
||||
|
||||
if (manualEnabled) {
|
||||
adapter.add(getString(R.string.SSD_sort_drag));
|
||||
}
|
||||
|
||||
adapter.add(getString(R.string.SSD_sort_auto));
|
||||
adapter.add(getString(R.string.SSD_sort_due));
|
||||
adapter.add(getString(R.string.SSD_sort_importance));
|
||||
adapter.add(getString(R.string.SSD_sort_alpha));
|
||||
adapter.add(getString(R.string.SSD_sort_modified));
|
||||
|
||||
selectedIndex = getIndex(preferences.getSortMode());
|
||||
if (manualEnabled) {
|
||||
if (preferences.getBoolean(R.string.p_manual_sort, false)) {
|
||||
selectedIndex = 0;
|
||||
}
|
||||
} else {
|
||||
selectedIndex -= 1;
|
||||
}
|
||||
|
||||
alertDialog = new AlertDialog.Builder(this, R.style.Tasks_Dialog)
|
||||
.setSingleChoiceItems(adapter, selectedIndex, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
selectedIndex = which;
|
||||
enableReverse();
|
||||
}
|
||||
})
|
||||
.setPositiveButton(R.string.TLA_menu_sort, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
setSelection(false);
|
||||
}
|
||||
})
|
||||
.setNeutralButton(R.string.reverse, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
setSelection(true);
|
||||
}
|
||||
})
|
||||
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
finish();
|
||||
}
|
||||
})
|
||||
.setOnDismissListener(new DialogInterface.OnDismissListener() {
|
||||
@Override
|
||||
public void onDismiss(DialogInterface dialog) {
|
||||
finish();
|
||||
}
|
||||
})
|
||||
.show();
|
||||
|
||||
enableReverse();
|
||||
}
|
||||
|
||||
private void enableReverse() {
|
||||
if (manualEnabled) {
|
||||
Button reverse = alertDialog.getButton(DialogInterface.BUTTON_NEUTRAL);
|
||||
if (atLeastLollipop()) {
|
||||
reverse.setEnabled(selectedIndex != 0);
|
||||
} else {
|
||||
reverse.setVisibility(selectedIndex == 0 ? View.GONE : View.VISIBLE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void setSelection(boolean reverse) {
|
||||
preferences.setBoolean(R.string.p_reverse_sort, reverse);
|
||||
|
||||
final boolean wasManual = preferences.getBoolean(R.string.p_manual_sort, false);
|
||||
final boolean isManual = manualEnabled && selectedIndex == 0;
|
||||
|
||||
preferences.setBoolean(R.string.p_manual_sort, isManual);
|
||||
|
||||
if (!isManual) {
|
||||
preferences.setSortMode(getSortMode(manualEnabled ? selectedIndex : selectedIndex + 1));
|
||||
}
|
||||
|
||||
setResult(RESULT_OK, new Intent() {{
|
||||
if (wasManual != isManual) {
|
||||
putExtra(EXTRA_TOGGLE_MANUAL, isManual);
|
||||
}
|
||||
}});
|
||||
|
||||
finish();
|
||||
}
|
||||
|
||||
private int getIndex(int sortMode) {
|
||||
switch (sortMode) {
|
||||
case SortHelper.SORT_AUTO:
|
||||
return 1;
|
||||
case SortHelper.SORT_DUE:
|
||||
return 2;
|
||||
case SortHelper.SORT_IMPORTANCE:
|
||||
return 3;
|
||||
case SortHelper.SORT_ALPHA:
|
||||
return 4;
|
||||
case SortHelper.SORT_MODIFIED:
|
||||
return 5;
|
||||
}
|
||||
|
||||
log.error("Invalid sort mode: {}", sortMode);
|
||||
return 1;
|
||||
}
|
||||
|
||||
private int getSortMode(int index) {
|
||||
switch (index) {
|
||||
case 1:
|
||||
return SortHelper.SORT_AUTO;
|
||||
case 2:
|
||||
return SortHelper.SORT_DUE;
|
||||
case 3:
|
||||
return SortHelper.SORT_IMPORTANCE;
|
||||
case 4:
|
||||
return SortHelper.SORT_ALPHA;
|
||||
case 5:
|
||||
return SortHelper.SORT_MODIFIED;
|
||||
}
|
||||
|
||||
log.error("Invalid sort mode: {}", index);
|
||||
return SortHelper.SORT_ALPHA;
|
||||
}
|
||||
}
|
@ -1,64 +0,0 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!--
|
||||
** Copyright (c) 2012 Todoroo Inc
|
||||
**
|
||||
** See the file "LICENSE" for the full license governing this code.
|
||||
-->
|
||||
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:paddingLeft="10dip"
|
||||
android:paddingRight="10dip">
|
||||
|
||||
<LinearLayout
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<!-- Sorting -->
|
||||
|
||||
<RadioGroup
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:orientation="vertical">
|
||||
|
||||
<RadioButton android:id="@+id/sort_drag"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/SSD_sort_drag" />
|
||||
|
||||
<RadioButton android:id="@+id/sort_smart"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/SSD_sort_auto" />
|
||||
|
||||
<RadioButton android:id="@+id/sort_due"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/SSD_sort_due" />
|
||||
|
||||
<RadioButton android:id="@+id/sort_importance"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/SSD_sort_importance" />
|
||||
|
||||
<RadioButton android:id="@+id/sort_alpha"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/SSD_sort_alpha" />
|
||||
|
||||
<RadioButton android:id="@+id/sort_modified"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/SSD_sort_modified" />
|
||||
|
||||
</RadioGroup>
|
||||
|
||||
<CheckBox android:id="@+id/reverse"
|
||||
android:layout_width="fill_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:text="@string/SSD_sort_reverse" />
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
</ScrollView>
|
Loading…
Reference in New Issue