mirror of https://github.com/tasks/tasks
parent
9ef29ae303
commit
f99bea58a9
@ -0,0 +1,162 @@
|
|||||||
|
/**
|
||||||
|
* Copyright (c) 2012 Todoroo Inc
|
||||||
|
*
|
||||||
|
* See the file "LICENSE" for the full license governing this code.
|
||||||
|
*/
|
||||||
|
package com.todoroo.astrid.actfm;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.DialogInterface;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.support.v7.app.ActionBar;
|
||||||
|
import android.support.v7.app.AlertDialog;
|
||||||
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.Menu;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.inputmethod.InputMethodManager;
|
||||||
|
import android.widget.EditText;
|
||||||
|
|
||||||
|
import com.todoroo.andlib.utility.AndroidUtilities;
|
||||||
|
import com.todoroo.astrid.api.AstridApiConstants;
|
||||||
|
import com.todoroo.astrid.api.CustomFilter;
|
||||||
|
import com.todoroo.astrid.dao.StoreObjectDao;
|
||||||
|
|
||||||
|
import org.tasks.R;
|
||||||
|
import org.tasks.injection.InjectingAppCompatActivity;
|
||||||
|
import org.tasks.preferences.ActivityPreferences;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import butterknife.InjectView;
|
||||||
|
|
||||||
|
import static android.text.TextUtils.isEmpty;
|
||||||
|
|
||||||
|
public class FilterSettingsActivity extends InjectingAppCompatActivity {
|
||||||
|
|
||||||
|
public static final String TOKEN_FILTER = "token_filter";
|
||||||
|
|
||||||
|
private CustomFilter filter;
|
||||||
|
|
||||||
|
@Inject ActivityPreferences preferences;
|
||||||
|
@Inject StoreObjectDao storeObjectDao;
|
||||||
|
|
||||||
|
@InjectView(R.id.tag_name) EditText filterName;
|
||||||
|
@InjectView(R.id.toolbar) Toolbar toolbar;
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
preferences.applyThemeAndStatusBarColor();
|
||||||
|
setContentView(R.layout.tag_settings_activity);
|
||||||
|
ButterKnife.inject(this);
|
||||||
|
|
||||||
|
filter = getIntent().getParcelableExtra(TOKEN_FILTER);
|
||||||
|
|
||||||
|
setSupportActionBar(toolbar);
|
||||||
|
ActionBar supportActionBar = getSupportActionBar();
|
||||||
|
if (supportActionBar != null) {
|
||||||
|
supportActionBar.setDisplayHomeAsUpEnabled(true);
|
||||||
|
supportActionBar.setHomeAsUpIndicator(R.drawable.ic_close_white_24dp);
|
||||||
|
supportActionBar.setTitle(filter.listingTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
filterName.setText(filter.listingTitle);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void save() {
|
||||||
|
String oldName = filter.listingTitle;
|
||||||
|
String newName = filterName.getText().toString().trim();
|
||||||
|
|
||||||
|
if (isEmpty(newName)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean nameChanged = !oldName.equals(newName);
|
||||||
|
if (nameChanged) {
|
||||||
|
filter.listingTitle = newName;
|
||||||
|
storeObjectDao.update(filter.toStoreObject());
|
||||||
|
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_RENAMED).putExtra(TOKEN_FILTER, filter));
|
||||||
|
}
|
||||||
|
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void finish() {
|
||||||
|
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
|
||||||
|
imm.hideSoftInputFromWindow(filterName.getWindowToken(), 0);
|
||||||
|
super.finish();
|
||||||
|
AndroidUtilities.callOverridePendingTransition(this, R.anim.slide_right_in, R.anim.slide_right_out);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onCreateOptionsMenu(Menu menu) {
|
||||||
|
getMenuInflater().inflate(R.menu.tag_settings_activity, menu);
|
||||||
|
return super.onCreateOptionsMenu(menu);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onBackPressed() {
|
||||||
|
discard();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
discard();
|
||||||
|
break;
|
||||||
|
case R.id.menu_save:
|
||||||
|
save();
|
||||||
|
break;
|
||||||
|
case R.id.delete:
|
||||||
|
deleteTag();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
private void deleteTag() {
|
||||||
|
new AlertDialog.Builder(this, R.style.Tasks_Dialog)
|
||||||
|
.setMessage(getString(R.string.delete_tag_confirmation, filter.listingTitle))
|
||||||
|
.setPositiveButton(R.string.delete, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
storeObjectDao.delete(filter.getId());
|
||||||
|
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED).putExtra(TOKEN_FILTER, filter));
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void discard() {
|
||||||
|
String tagName = this.filterName.getText().toString().trim();
|
||||||
|
if (filter.listingTitle.equals(tagName)) {
|
||||||
|
finish();
|
||||||
|
} else {
|
||||||
|
new AlertDialog.Builder(this, R.style.Tasks_Dialog)
|
||||||
|
.setMessage(R.string.discard_changes)
|
||||||
|
.setPositiveButton(R.string.discard, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
finish();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.setNegativeButton(android.R.string.cancel, new DialogInterface.OnClickListener() {
|
||||||
|
@Override
|
||||||
|
public void onClick(DialogInterface dialog, int which) {
|
||||||
|
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.show();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,76 @@
|
|||||||
|
package com.todoroo.astrid.api;
|
||||||
|
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.os.Parcel;
|
||||||
|
import android.os.Parcelable;
|
||||||
|
|
||||||
|
import com.todoroo.andlib.utility.AndroidUtilities;
|
||||||
|
import com.todoroo.astrid.core.SavedFilter;
|
||||||
|
import com.todoroo.astrid.data.StoreObject;
|
||||||
|
|
||||||
|
public class CustomFilter extends Filter {
|
||||||
|
private long id;
|
||||||
|
|
||||||
|
private CustomFilter() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public CustomFilter(String listingTitle, String sql, ContentValues contentValues, long id) {
|
||||||
|
super(listingTitle, sql, contentValues);
|
||||||
|
this.id = id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public StoreObject toStoreObject() {
|
||||||
|
return new StoreObject() {{
|
||||||
|
setId(id);
|
||||||
|
setValue(SavedFilter.NAME, listingTitle);
|
||||||
|
setValue(SavedFilter.SQL, sqlQuery);
|
||||||
|
if (valuesForNewTasks != null && valuesForNewTasks.size() > 0) {
|
||||||
|
setValue(SavedFilter.VALUES, AndroidUtilities.contentValuesToSerializedString(valuesForNewTasks));
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getId() {
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public void writeToParcel(Parcel dest, int flags) {
|
||||||
|
super.writeToParcel(dest, flags);
|
||||||
|
dest.writeLong(id);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void readFromParcel(Parcel source) {
|
||||||
|
super.readFromParcel(source);
|
||||||
|
id = source.readLong();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Parcelable Creator Object
|
||||||
|
*/
|
||||||
|
public static final Parcelable.Creator<CustomFilter> CREATOR = new Parcelable.Creator<CustomFilter>() {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CustomFilter createFromParcel(Parcel source) {
|
||||||
|
CustomFilter item = new CustomFilter();
|
||||||
|
item.readFromParcel(source);
|
||||||
|
return item;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
@Override
|
||||||
|
public CustomFilter[] newArray(int size) {
|
||||||
|
return new CustomFilter[size];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
@ -1,63 +0,0 @@
|
|||||||
package com.todoroo.astrid.core;
|
|
||||||
|
|
||||||
import android.content.DialogInterface;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.os.Bundle;
|
|
||||||
|
|
||||||
import com.todoroo.andlib.utility.DialogUtilities;
|
|
||||||
import com.todoroo.astrid.api.AstridApiConstants;
|
|
||||||
import com.todoroo.astrid.api.Filter;
|
|
||||||
import com.todoroo.astrid.dao.StoreObjectDao;
|
|
||||||
import com.todoroo.astrid.data.StoreObject;
|
|
||||||
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.injection.InjectingActivity;
|
|
||||||
|
|
||||||
import javax.inject.Inject;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Simple activity for deleting stuff
|
|
||||||
*
|
|
||||||
* @author Tim Su <tim@todoroo.com>
|
|
||||||
*/
|
|
||||||
public class DeleteFilterActivity extends InjectingActivity {
|
|
||||||
|
|
||||||
public static final String TOKEN_STORE_OBJECT = "store_object";
|
|
||||||
|
|
||||||
@Inject StoreObjectDao storeObjectDao;
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
final long id = getIntent().getLongExtra(CustomFilterExposer.TOKEN_FILTER_ID, -1);
|
|
||||||
if (id == -1) {
|
|
||||||
finish();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
final StoreObject storeObject = storeObjectDao.getById(id);
|
|
||||||
final Filter filter = SavedFilter.load(storeObject);
|
|
||||||
final String name = filter.title;
|
|
||||||
|
|
||||||
DialogUtilities.okCancelDialog(this,
|
|
||||||
getString(R.string.DLG_delete_this_item_question, name),
|
|
||||||
new DialogInterface.OnClickListener() {
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
storeObjectDao.delete(id);
|
|
||||||
setResult(RESULT_OK, new Intent(AstridApiConstants.BROADCAST_EVENT_FILTER_DELETED) {{
|
|
||||||
putExtra(TOKEN_STORE_OBJECT, storeObject);
|
|
||||||
}});
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
},
|
|
||||||
new DialogInterface.OnClickListener() {
|
|
||||||
@Override
|
|
||||||
public void onClick(DialogInterface dialog, int which) {
|
|
||||||
setResult(RESULT_CANCELED);
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,32 +1,37 @@
|
|||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
|
||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
<menu xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
xmlns:tasks="http://schemas.android.com/apk/res-auto">
|
xmlns:app="http://schemas.android.com/apk/res-auto">
|
||||||
|
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_voice_add"
|
android:id="@+id/menu_voice_add"
|
||||||
android:title="@string/EPr_voiceInputEnabled_title"
|
android:title="@string/EPr_voiceInputEnabled_title"
|
||||||
android:icon="@drawable/ic_mic_white_24dp"
|
android:icon="@drawable/ic_mic_white_24dp"
|
||||||
tasks:showAsAction="ifRoom"/>
|
app:showAsAction="ifRoom"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_search"
|
android:id="@+id/menu_search"
|
||||||
android:title="@string/TLA_menu_search"
|
android:title="@string/TLA_menu_search"
|
||||||
android:icon="@drawable/ic_search_white_24dp"
|
android:icon="@drawable/ic_search_white_24dp"
|
||||||
tasks:showAsAction="ifRoom|collapseActionView"
|
app:showAsAction="ifRoom|collapseActionView"
|
||||||
tasks:actionViewClass="android.support.v7.widget.SearchView"/>
|
app:actionViewClass="android.support.v7.widget.SearchView"/>
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_sort"
|
android:id="@+id/menu_sort"
|
||||||
android:title="@string/TLA_menu_sort"
|
android:title="@string/TLA_menu_sort"
|
||||||
android:icon="@drawable/ic_sort_white_24dp"
|
android:icon="@drawable/ic_sort_white_24dp"
|
||||||
tasks:showAsAction="ifRoom" />
|
app:showAsAction="ifRoom" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_clear_completed"
|
android:id="@+id/menu_clear_completed"
|
||||||
android:title="@string/gtasks_GTA_clear_completed"
|
android:title="@string/gtasks_GTA_clear_completed"
|
||||||
android:visible="false"
|
android:visible="false"
|
||||||
tasks:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
<item
|
<item
|
||||||
android:id="@+id/menu_tag_settings"
|
android:id="@+id/menu_tag_settings"
|
||||||
android:title="@string/tag_settings"
|
android:title="@string/tag_settings"
|
||||||
android:visible="false"
|
android:visible="false"
|
||||||
tasks:showAsAction="never" />
|
app:showAsAction="never" />
|
||||||
|
<item
|
||||||
|
android:id="@+id/menu_filter_settings"
|
||||||
|
android:title="@string/filter_settings"
|
||||||
|
android:visible="false"
|
||||||
|
app:showAsAction="never" />
|
||||||
</menu>
|
</menu>
|
Loading…
Reference in New Issue