filter dialog

This commit is contained in:
danijoo
2016-01-06 20:58:41 +01:00
parent d481d216c9
commit d4417fa2d8
6 changed files with 175 additions and 5 deletions

View File

@@ -0,0 +1,71 @@
package net.headlezz.notificationlogger.notificationlist;
import android.content.Context;
import android.content.DialogInterface;
import android.os.Bundle;
import android.support.v7.app.AlertDialog;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.EditText;
import net.headlezz.notificationlogger.R;
import butterknife.Bind;
import butterknife.ButterKnife;
public class NotificationListFilterDialog extends AlertDialog implements DialogInterface.OnClickListener {
NotificationListFilterDialogCallbacks mCallbacks;
@Bind(R.id.notification_filter_etTitle)
EditText etTitle;
@Bind(R.id.notification_filter_etMessage)
EditText etMessage;
@Bind(R.id.notification_filter_etAppName)
EditText etAppName;
@Bind(R.id.notification_filter_etPackage)
EditText etPackageName;
interface NotificationListFilterDialogCallbacks {
void onFilterNotificationList(
String title,
String message,
String appName,
String packageName
);
}
public NotificationListFilterDialog(Context context, NotificationListFilterDialogCallbacks cb) {
super(context);
mCallbacks = cb;
setButton(BUTTON_POSITIVE, context.getString(R.string.filter_dialog_ok), this);
setButton(BUTTON_NEGATIVE, context.getString(R.string.filter_dialog_cancel), this);
View view = LayoutInflater.from(getContext()).inflate(R.layout.notification_list_filter_dialog, null);
setView(view);
setTitle(context.getString(R.string.filter_dialog_title));
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
ButterKnife.bind(this);
}
@Override
public void onClick(DialogInterface dialog, int which) {
if(which == BUTTON_POSITIVE)
mCallbacks.onFilterNotificationList(
etTitle.getText().toString(),
etMessage.getText().toString(),
etAppName.getText().toString(),
etPackageName.getText().toString()
);
}
}

View File

@@ -22,7 +22,7 @@ import butterknife.Bind;
import butterknife.ButterKnife;
import timber.log.Timber;
public class NotificationListFragment extends Fragment implements NotificationListLoaderCallbacks.NotificationListView, NotificationListAdapter.NotificationClickListener {
public class NotificationListFragment extends Fragment implements NotificationListLoaderCallbacks.NotificationListView, NotificationListAdapter.NotificationClickListener, NotificationListFilterDialog.NotificationListFilterDialogCallbacks {
@Bind(R.id.nList_emptyView)
View mEmptyView;
@@ -76,8 +76,7 @@ public class NotificationListFragment extends Fragment implements NotificationLi
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.menu_filter:
mLoaderManager.loadNotificationsUnfiltered();
setIsFiltered(true);
new NotificationListFilterDialog(getContext(), this).show();
return true;
case R.id.menu_clear_filter:
mLoaderManager.loadNotificationsUnfiltered();
@@ -116,4 +115,11 @@ public class NotificationListFragment extends Fragment implements NotificationLi
new NotificationInfoDialog(getContext(), notification).show();
}
@Override
public void onFilterNotificationList(String title, String message, String appName, String packageName) {
Timber.d("Selected filter: " + title + "/" + message + "/" + appName + "/" + packageName);
setIsFiltered(true);
mLoaderManager.loadNotificationsFiltered(title, message, appName, packageName);
}
}

View File

@@ -9,6 +9,9 @@ import android.support.v4.content.Loader;
import net.headlezz.notificationlogger.logger.Logged_notificationTable;
import java.util.ArrayList;
import java.util.List;
import timber.log.Timber;
public class NotificationListLoaderCallbacks implements LoaderManager.LoaderCallbacks<Cursor> {
@@ -27,13 +30,44 @@ public class NotificationListLoaderCallbacks implements LoaderManager.LoaderCall
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
// TODO apply filters
Timber.d("Loader created.");
String titleFilter = args.containsKey(Logged_notificationTable.FIELD_TITLE) ? args.getString(Logged_notificationTable.FIELD_TITLE) : "";
String messageFilter = args.containsKey(Logged_notificationTable.FIELD_MESSAGE) ? args.getString(Logged_notificationTable.FIELD_MESSAGE) : "";
String appNameFilter = args.containsKey(Logged_notificationTable.FIELD_APP_NAME) ? args.getString(Logged_notificationTable.FIELD_APP_NAME) : "";
String packageFilter = args.containsKey(Logged_notificationTable.FIELD_PACKAGE_NAME) ? args.getString(Logged_notificationTable.FIELD_PACKAGE_NAME) : "";
StringBuilder selectionClauseBuilder = new StringBuilder();
List<String> selectionParams = new ArrayList<>();
if(!titleFilter.isEmpty()) {
selectionClauseBuilder.append(Logged_notificationTable.FIELD_TITLE + " like ?");
selectionParams.add("%" + titleFilter + "%");
}
if(!messageFilter.isEmpty()) {
if(selectionClauseBuilder.length() > 0)
selectionClauseBuilder.append(" AND ");
selectionClauseBuilder.append(Logged_notificationTable.FIELD_MESSAGE + " like ?");
selectionParams.add("%" + messageFilter + "%");
}
if(!appNameFilter.isEmpty()) {
if(selectionClauseBuilder.length() > 0)
selectionClauseBuilder.append(" AND ");
selectionClauseBuilder.append(Logged_notificationTable.FIELD_APP_NAME + " like ?");
selectionParams.add("%" + appNameFilter + "%");
}
if(!packageFilter.isEmpty()) {
if(selectionClauseBuilder.length() > 0)
selectionClauseBuilder.append(" AND ");
selectionClauseBuilder.append(Logged_notificationTable.FIELD_PACKAGE_NAME + " like ?");
selectionParams.add("%" + packageFilter + "%");
}
return new CursorLoader(
mContext,
Logged_notificationTable.CONTENT_URI,
null,
null,
null,
selectionClauseBuilder.toString(),
selectionParams.toArray(new String[selectionParams.size()]),
Logged_notificationTable.FIELD_DATE + " DESC"
);
}

View File

@@ -2,8 +2,11 @@ package net.headlezz.notificationlogger.notificationlist;
import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.LoaderManager;
import net.headlezz.notificationlogger.logger.Logged_notificationTable;
public class NotificationListLoaderManager {
final int LOADER_ID = 124;
@@ -20,4 +23,24 @@ public class NotificationListLoaderManager {
mLoaderManager.restartLoader(LOADER_ID, Bundle.EMPTY, mLoaderCallbacks);
}
void loadNotificationsFiltered(@Nullable String titleFilter, @Nullable String messageFilter, @Nullable String appNameFilter, @Nullable String packageFilter) {
Bundle bundle = new Bundle();
if(titleFilter != null && !titleFilter.isEmpty())
bundle.putString(Logged_notificationTable.FIELD_TITLE, titleFilter);
if(messageFilter != null && !messageFilter .isEmpty())
bundle.putString(Logged_notificationTable.FIELD_MESSAGE, messageFilter);
if(appNameFilter != null && !appNameFilter.isEmpty())
bundle.putString(Logged_notificationTable.FIELD_APP_NAME, appNameFilter);
if(packageFilter != null && !packageFilter.isEmpty())
bundle.putString(Logged_notificationTable.FIELD_PACKAGE_NAME, packageFilter);
mLoaderManager.restartLoader(LOADER_ID, bundle, mLoaderCallbacks);
}
}