mirror of https://github.com/tasks/tasks
Convert MainActivity to Kotlin
parent
47d414f20f
commit
1d1f132806
@ -1,561 +0,0 @@
|
|||||||
/*
|
|
||||||
* Copyright (c) 2012 Todoroo Inc
|
|
||||||
*
|
|
||||||
* See the file "LICENSE" for the full license governing this code.
|
|
||||||
*/
|
|
||||||
|
|
||||||
package com.todoroo.astrid.activity;
|
|
||||||
|
|
||||||
import static com.todoroo.andlib.utility.AndroidUtilities.assertMainThread;
|
|
||||||
import static com.todoroo.andlib.utility.AndroidUtilities.atLeastNougat;
|
|
||||||
import static com.todoroo.astrid.activity.TaskEditFragment.newTaskEditFragment;
|
|
||||||
import static com.todoroo.astrid.activity.TaskListFragment.newTaskListFragment;
|
|
||||||
import static org.tasks.Strings.isNullOrEmpty;
|
|
||||||
import static org.tasks.location.LocationPickerActivity.EXTRA_PLACE;
|
|
||||||
import static org.tasks.tasklist.ActionUtils.applySupportActionModeColor;
|
|
||||||
import static org.tasks.ui.NavigationDrawerFragment.REQUEST_NEW_LIST;
|
|
||||||
import static org.tasks.ui.NavigationDrawerFragment.REQUEST_NEW_PLACE;
|
|
||||||
|
|
||||||
import android.annotation.SuppressLint;
|
|
||||||
import android.content.Intent;
|
|
||||||
import android.content.res.Configuration;
|
|
||||||
import android.net.Uri;
|
|
||||||
import android.os.Bundle;
|
|
||||||
import android.view.View;
|
|
||||||
import android.view.inputmethod.InputMethodManager;
|
|
||||||
import androidx.annotation.NonNull;
|
|
||||||
import androidx.annotation.Nullable;
|
|
||||||
import androidx.appcompat.view.ActionMode;
|
|
||||||
import androidx.drawerlayout.widget.DrawerLayout;
|
|
||||||
import androidx.fragment.app.FragmentManager;
|
|
||||||
import androidx.lifecycle.ViewModelProvider;
|
|
||||||
import com.todoroo.astrid.api.Filter;
|
|
||||||
import com.todoroo.astrid.dao.TaskDao;
|
|
||||||
import com.todoroo.astrid.data.Task;
|
|
||||||
import com.todoroo.astrid.service.TaskCreator;
|
|
||||||
import com.todoroo.astrid.timers.TimerControlSet;
|
|
||||||
import io.reactivex.Single;
|
|
||||||
import io.reactivex.android.schedulers.AndroidSchedulers;
|
|
||||||
import io.reactivex.disposables.CompositeDisposable;
|
|
||||||
import io.reactivex.schedulers.Schedulers;
|
|
||||||
import javax.inject.Inject;
|
|
||||||
import org.tasks.BuildConfig;
|
|
||||||
import org.tasks.LocalBroadcastManager;
|
|
||||||
import org.tasks.R;
|
|
||||||
import org.tasks.activities.TagSettingsActivity;
|
|
||||||
import org.tasks.billing.Inventory;
|
|
||||||
import org.tasks.data.Place;
|
|
||||||
import org.tasks.databinding.TaskListActivityBinding;
|
|
||||||
import org.tasks.dialogs.SortDialog;
|
|
||||||
import org.tasks.dialogs.WhatsNewDialog;
|
|
||||||
import org.tasks.filters.PlaceFilter;
|
|
||||||
import org.tasks.fragments.CommentBarFragment;
|
|
||||||
import org.tasks.gtasks.PlayServices;
|
|
||||||
import org.tasks.injection.ActivityComponent;
|
|
||||||
import org.tasks.injection.InjectingAppCompatActivity;
|
|
||||||
import org.tasks.intents.TaskIntents;
|
|
||||||
import org.tasks.preferences.DefaultFilterProvider;
|
|
||||||
import org.tasks.preferences.Preferences;
|
|
||||||
import org.tasks.receivers.RepeatConfirmationReceiver;
|
|
||||||
import org.tasks.themes.ColorProvider;
|
|
||||||
import org.tasks.themes.Theme;
|
|
||||||
import org.tasks.themes.ThemeColor;
|
|
||||||
import org.tasks.ui.DeadlineControlSet;
|
|
||||||
import org.tasks.ui.EmptyTaskEditFragment;
|
|
||||||
import org.tasks.ui.NavigationDrawerFragment;
|
|
||||||
import org.tasks.ui.RemoteListFragment;
|
|
||||||
import org.tasks.ui.TaskListViewModel;
|
|
||||||
|
|
||||||
public class MainActivity extends InjectingAppCompatActivity
|
|
||||||
implements TaskListFragment.TaskListFragmentCallbackHandler,
|
|
||||||
RemoteListFragment.OnListChanged,
|
|
||||||
TimerControlSet.TimerControlSetCallback,
|
|
||||||
DeadlineControlSet.DueDateChangeListener,
|
|
||||||
TaskEditFragment.TaskEditFragmentCallbackHandler,
|
|
||||||
CommentBarFragment.CommentBarFragmentCallback,
|
|
||||||
SortDialog.SortDialogCallback {
|
|
||||||
|
|
||||||
/** For indicating the new list screen should be launched at fragment setup time */
|
|
||||||
public static final String TOKEN_CREATE_NEW_LIST_NAME = "newListName"; // $NON-NLS-1$
|
|
||||||
|
|
||||||
public static final String OPEN_FILTER = "open_filter"; // $NON-NLS-1$
|
|
||||||
public static final String LOAD_FILTER = "load_filter";
|
|
||||||
public static final String CREATE_TASK = "open_task"; // $NON-NLS-1$
|
|
||||||
public static final String OPEN_TASK = "open_new_task"; // $NON-NLS-1$
|
|
||||||
private static final String FRAG_TAG_TASK_LIST = "frag_tag_task_list";
|
|
||||||
private static final String FRAG_TAG_WHATS_NEW = "frag_tag_whats_new";
|
|
||||||
private static final String EXTRA_FILTER = "extra_filter";
|
|
||||||
|
|
||||||
@Inject Preferences preferences;
|
|
||||||
@Inject RepeatConfirmationReceiver repeatConfirmationReceiver;
|
|
||||||
@Inject DefaultFilterProvider defaultFilterProvider;
|
|
||||||
@Inject Theme theme;
|
|
||||||
@Inject TaskDao taskDao;
|
|
||||||
@Inject LocalBroadcastManager localBroadcastManager;
|
|
||||||
@Inject TaskCreator taskCreator;
|
|
||||||
@Inject PlayServices playServices;
|
|
||||||
@Inject Inventory inventory;
|
|
||||||
@Inject ColorProvider colorProvider;
|
|
||||||
|
|
||||||
private CompositeDisposable disposables;
|
|
||||||
private NavigationDrawerFragment navigationDrawer;
|
|
||||||
private int currentNightMode;
|
|
||||||
private boolean currentPro;
|
|
||||||
|
|
||||||
private Filter filter;
|
|
||||||
private ActionMode actionMode = null;
|
|
||||||
|
|
||||||
private TaskListActivityBinding binding;
|
|
||||||
|
|
||||||
/** @see android.app.Activity#onCreate(Bundle) */
|
|
||||||
@Override
|
|
||||||
protected void onCreate(Bundle savedInstanceState) {
|
|
||||||
super.onCreate(savedInstanceState);
|
|
||||||
|
|
||||||
TaskListViewModel viewModel = new ViewModelProvider(this).get(TaskListViewModel.class);
|
|
||||||
getComponent().inject(viewModel);
|
|
||||||
|
|
||||||
currentNightMode = getNightMode();
|
|
||||||
currentPro = inventory.hasPro();
|
|
||||||
|
|
||||||
binding = TaskListActivityBinding.inflate(getLayoutInflater());
|
|
||||||
setContentView(binding.getRoot());
|
|
||||||
|
|
||||||
if (savedInstanceState != null) {
|
|
||||||
filter = savedInstanceState.getParcelable(EXTRA_FILTER);
|
|
||||||
applyTheme();
|
|
||||||
}
|
|
||||||
|
|
||||||
navigationDrawer = getNavigationDrawerFragment();
|
|
||||||
navigationDrawer.setUp(binding.drawerLayout);
|
|
||||||
|
|
||||||
binding.drawerLayout.addDrawerListener(
|
|
||||||
new DrawerLayout.SimpleDrawerListener() {
|
|
||||||
@Override
|
|
||||||
public void onDrawerStateChanged(int newState) {
|
|
||||||
finishActionMode();
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onActivityResult(int requestCode, int resultCode, Intent data) {
|
|
||||||
if (requestCode == NavigationDrawerFragment.REQUEST_SETTINGS) {
|
|
||||||
if (atLeastNougat()) {
|
|
||||||
recreate();
|
|
||||||
} else {
|
|
||||||
finish();
|
|
||||||
startActivity(TaskIntents.getTaskListIntent(this, filter));
|
|
||||||
}
|
|
||||||
} else if (requestCode == REQUEST_NEW_LIST) {
|
|
||||||
if (resultCode == RESULT_OK && data != null) {
|
|
||||||
Filter filter = data.getParcelableExtra(MainActivity.OPEN_FILTER);
|
|
||||||
if (filter != null) {
|
|
||||||
startActivity(TaskIntents.getTaskListIntent(this, filter));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (requestCode == REQUEST_NEW_PLACE) {
|
|
||||||
if (resultCode == RESULT_OK && data != null) {
|
|
||||||
Place place = data.getParcelableExtra(EXTRA_PLACE);
|
|
||||||
if (place != null) {
|
|
||||||
startActivity(TaskIntents.getTaskListIntent(this, new PlaceFilter(place)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
super.onActivityResult(requestCode, resultCode, data);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onNewIntent(Intent intent) {
|
|
||||||
super.onNewIntent(intent);
|
|
||||||
|
|
||||||
setIntent(intent);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onSaveInstanceState(@NonNull Bundle outState) {
|
|
||||||
super.onSaveInstanceState(outState);
|
|
||||||
|
|
||||||
outState.putParcelable(EXTRA_FILTER, filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void clearUi() {
|
|
||||||
finishActionMode();
|
|
||||||
navigationDrawer.closeDrawer();
|
|
||||||
}
|
|
||||||
|
|
||||||
private @Nullable Task getTaskToLoad(Filter filter) {
|
|
||||||
Intent intent = getIntent();
|
|
||||||
if (intent.hasExtra(CREATE_TASK)) {
|
|
||||||
intent.removeExtra(CREATE_TASK);
|
|
||||||
return taskCreator.createWithValues(filter, "");
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intent.hasExtra(OPEN_TASK)) {
|
|
||||||
Task task = intent.getParcelableExtra(OPEN_TASK);
|
|
||||||
intent.removeExtra(OPEN_TASK);
|
|
||||||
return task;
|
|
||||||
}
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openTask(Filter filter) {
|
|
||||||
Task task = getTaskToLoad(filter);
|
|
||||||
if (task != null) {
|
|
||||||
onTaskListItemClicked(task);
|
|
||||||
} else if (getTaskEditFragment() == null) {
|
|
||||||
hideDetailFragment();
|
|
||||||
} else {
|
|
||||||
showDetailFragment();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void handleIntent() {
|
|
||||||
Intent intent = getIntent();
|
|
||||||
|
|
||||||
boolean openFilter = intent.hasExtra(OPEN_FILTER);
|
|
||||||
boolean loadFilter = intent.hasExtra(LOAD_FILTER);
|
|
||||||
|
|
||||||
TaskEditFragment tef = getTaskEditFragment();
|
|
||||||
if (tef != null && (openFilter || loadFilter)) {
|
|
||||||
tef.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
if (loadFilter || (!openFilter && filter == null)) {
|
|
||||||
disposables.add(
|
|
||||||
Single.fromCallable(
|
|
||||||
() -> {
|
|
||||||
String filter = intent.getStringExtra(LOAD_FILTER);
|
|
||||||
intent.removeExtra(LOAD_FILTER);
|
|
||||||
return isNullOrEmpty(filter)
|
|
||||||
? defaultFilterProvider.getDefaultFilter()
|
|
||||||
: defaultFilterProvider.getFilterFromPreference(filter);
|
|
||||||
})
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(
|
|
||||||
filter -> {
|
|
||||||
clearUi();
|
|
||||||
openTaskListFragment(filter);
|
|
||||||
openTask(filter);
|
|
||||||
}));
|
|
||||||
} else if (openFilter) {
|
|
||||||
Filter filter = intent.getParcelableExtra(OPEN_FILTER);
|
|
||||||
intent.removeExtra(OPEN_FILTER);
|
|
||||||
clearUi();
|
|
||||||
openTaskListFragment(filter);
|
|
||||||
openTask(filter);
|
|
||||||
} else {
|
|
||||||
TaskListFragment existing = getTaskListFragment();
|
|
||||||
openTaskListFragment(
|
|
||||||
existing == null || existing.getFilter() != filter
|
|
||||||
? newTaskListFragment(getApplicationContext(), filter)
|
|
||||||
: existing,
|
|
||||||
false);
|
|
||||||
openTask(filter);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (intent.hasExtra(TOKEN_CREATE_NEW_LIST_NAME)) {
|
|
||||||
final String listName = intent.getStringExtra(TOKEN_CREATE_NEW_LIST_NAME);
|
|
||||||
intent.removeExtra(TOKEN_CREATE_NEW_LIST_NAME);
|
|
||||||
Intent activityIntent = new Intent(MainActivity.this, TagSettingsActivity.class);
|
|
||||||
activityIntent.putExtra(TagSettingsActivity.TOKEN_AUTOPOPULATE_NAME, listName);
|
|
||||||
startActivityForResult(activityIntent, REQUEST_NEW_LIST);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void showDetailFragment() {
|
|
||||||
if (isSinglePaneLayout()) {
|
|
||||||
binding.detail.setVisibility(View.VISIBLE);
|
|
||||||
binding.master.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void hideDetailFragment() {
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.replace(R.id.detail, EmptyTaskEditFragment.Companion.newEmptyTaskEditFragment(filter))
|
|
||||||
.commit();
|
|
||||||
|
|
||||||
if (isSinglePaneLayout()) {
|
|
||||||
binding.master.setVisibility(View.VISIBLE);
|
|
||||||
binding.detail.setVisibility(View.GONE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openTaskListFragment(Filter filter) {
|
|
||||||
openTaskListFragment(filter, false);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openTaskListFragment(Filter filter, boolean force) {
|
|
||||||
openTaskListFragment(newTaskListFragment(getApplicationContext(), filter), force);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openTaskListFragment(@NonNull TaskListFragment taskListFragment, boolean force) {
|
|
||||||
assertMainThread();
|
|
||||||
|
|
||||||
Filter newFilter = taskListFragment.getFilter();
|
|
||||||
if (filter != null
|
|
||||||
&& !force
|
|
||||||
&& filter.areItemsTheSame(newFilter)
|
|
||||||
&& filter.areContentsTheSame(newFilter)) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
filter = newFilter;
|
|
||||||
navigationDrawer.setSelected(filter);
|
|
||||||
applyTheme();
|
|
||||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
|
||||||
fragmentManager
|
|
||||||
.beginTransaction()
|
|
||||||
.replace(R.id.master, taskListFragment, FRAG_TAG_TASK_LIST)
|
|
||||||
.commit();
|
|
||||||
fragmentManager.executePendingTransactions();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void applyTheme() {
|
|
||||||
ThemeColor filterColor = getFilterColor();
|
|
||||||
filterColor.setStatusBarColor(binding.drawerLayout);
|
|
||||||
filterColor.applyToNavigationBar(this);
|
|
||||||
filterColor.applyTaskDescription(
|
|
||||||
this, filter == null ? getString(R.string.app_name) : filter.listingTitle);
|
|
||||||
theme.withThemeColor(filterColor).applyToContext(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
private ThemeColor getFilterColor() {
|
|
||||||
return filter != null && filter.tint != 0
|
|
||||||
? colorProvider.getThemeColor(filter.tint, true)
|
|
||||||
: theme.getThemeColor();
|
|
||||||
}
|
|
||||||
|
|
||||||
private NavigationDrawerFragment getNavigationDrawerFragment() {
|
|
||||||
return (NavigationDrawerFragment)
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.findFragmentById(NavigationDrawerFragment.FRAGMENT_NAVIGATION_DRAWER);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onResume() {
|
|
||||||
super.onResume();
|
|
||||||
|
|
||||||
if (currentNightMode != getNightMode() || currentPro != inventory.hasPro()) {
|
|
||||||
recreate();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
localBroadcastManager.registerRepeatReceiver(repeatConfirmationReceiver);
|
|
||||||
|
|
||||||
if (BuildConfig.DEBUG && disposables != null && !disposables.isDisposed()) {
|
|
||||||
throw new IllegalStateException();
|
|
||||||
}
|
|
||||||
|
|
||||||
disposables = new CompositeDisposable(playServices.check(this));
|
|
||||||
|
|
||||||
if (preferences.getBoolean(R.string.p_just_updated, false)) {
|
|
||||||
if (preferences.getBoolean(R.string.p_show_whats_new, true)) {
|
|
||||||
FragmentManager fragmentManager = getSupportFragmentManager();
|
|
||||||
if (fragmentManager.findFragmentByTag(FRAG_TAG_WHATS_NEW) == null) {
|
|
||||||
new WhatsNewDialog().show(fragmentManager, FRAG_TAG_WHATS_NEW);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
preferences.setBoolean(R.string.p_just_updated, false);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onResumeFragments() {
|
|
||||||
super.onResumeFragments();
|
|
||||||
|
|
||||||
handleIntent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private int getNightMode() {
|
|
||||||
return getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK;
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void inject(ActivityComponent component) {
|
|
||||||
component.inject(this);
|
|
||||||
theme.applyTheme(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
protected void onPause() {
|
|
||||||
super.onPause();
|
|
||||||
|
|
||||||
localBroadcastManager.unregisterReceiver(repeatConfirmationReceiver);
|
|
||||||
|
|
||||||
if (disposables != null) {
|
|
||||||
disposables.dispose();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onTaskListItemClicked(Task task) {
|
|
||||||
assertMainThread();
|
|
||||||
|
|
||||||
if (task == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskEditFragment taskEditFragment = getTaskEditFragment();
|
|
||||||
|
|
||||||
if (taskEditFragment != null) {
|
|
||||||
taskEditFragment.save();
|
|
||||||
}
|
|
||||||
|
|
||||||
clearUi();
|
|
||||||
|
|
||||||
if (task.isNew()) {
|
|
||||||
openTask(task);
|
|
||||||
} else {
|
|
||||||
disposables.add(
|
|
||||||
Single.fromCallable(() -> taskDao.fetch(task.getId()))
|
|
||||||
.subscribeOn(Schedulers.io())
|
|
||||||
.observeOn(AndroidSchedulers.mainThread())
|
|
||||||
.subscribe(this::openTask));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void openTask(Task task) {
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.beginTransaction()
|
|
||||||
.replace(
|
|
||||||
R.id.detail,
|
|
||||||
newTaskEditFragment(task, getFilterColor()),
|
|
||||||
TaskEditFragment.TAG_TASKEDIT_FRAGMENT)
|
|
||||||
.addToBackStack(TaskEditFragment.TAG_TASKEDIT_FRAGMENT)
|
|
||||||
.commit();
|
|
||||||
|
|
||||||
showDetailFragment();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onNavigationIconClicked() {
|
|
||||||
hideKeyboard();
|
|
||||||
navigationDrawer.openDrawer();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onBackPressed() {
|
|
||||||
if (navigationDrawer.isDrawerOpen()) {
|
|
||||||
navigationDrawer.closeDrawer();
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskEditFragment taskEditFragment = getTaskEditFragment();
|
|
||||||
if (taskEditFragment != null) {
|
|
||||||
if (preferences.backButtonSavesTask()) {
|
|
||||||
taskEditFragment.save();
|
|
||||||
} else {
|
|
||||||
taskEditFragment.discardButtonClick();
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TaskListFragment taskListFragment = getTaskListFragment();
|
|
||||||
if (taskListFragment != null && taskListFragment.collapseSearchView()) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
finish();
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskListFragment getTaskListFragment() {
|
|
||||||
return (TaskListFragment) getSupportFragmentManager().findFragmentByTag(FRAG_TAG_TASK_LIST);
|
|
||||||
}
|
|
||||||
|
|
||||||
public TaskEditFragment getTaskEditFragment() {
|
|
||||||
return (TaskEditFragment)
|
|
||||||
getSupportFragmentManager().findFragmentByTag(TaskEditFragment.TAG_TASKEDIT_FRAGMENT);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Task stopTimer() {
|
|
||||||
return getTaskEditFragment().stopTimer();
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public Task startTimer() {
|
|
||||||
return getTaskEditFragment().startTimer();
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean isSinglePaneLayout() {
|
|
||||||
return !getResources().getBoolean(R.bool.two_pane_layout);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void removeTaskEditFragment() {
|
|
||||||
getSupportFragmentManager()
|
|
||||||
.popBackStackImmediate(
|
|
||||||
TaskEditFragment.TAG_TASKEDIT_FRAGMENT, FragmentManager.POP_BACK_STACK_INCLUSIVE);
|
|
||||||
hideDetailFragment();
|
|
||||||
hideKeyboard();
|
|
||||||
getTaskListFragment().loadTaskListContent();
|
|
||||||
}
|
|
||||||
|
|
||||||
private void hideKeyboard() {
|
|
||||||
View view = getCurrentFocus();
|
|
||||||
if (view != null) {
|
|
||||||
InputMethodManager inputMethodManager =
|
|
||||||
(InputMethodManager) getSystemService(INPUT_METHOD_SERVICE);
|
|
||||||
inputMethodManager.hideSoftInputFromWindow(view.getWindowToken(), 0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void addComment(String message, Uri picture) {
|
|
||||||
TaskEditFragment taskEditFragment = getTaskEditFragment();
|
|
||||||
if (taskEditFragment != null) {
|
|
||||||
taskEditFragment.addComment(message, picture);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void sortChanged(boolean reload) {
|
|
||||||
localBroadcastManager.broadcastRefresh();
|
|
||||||
if (reload) {
|
|
||||||
openTaskListFragment(filter, true);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onSupportActionModeStarted(@NonNull ActionMode mode) {
|
|
||||||
super.onSupportActionModeStarted(mode);
|
|
||||||
|
|
||||||
actionMode = mode;
|
|
||||||
|
|
||||||
ThemeColor filterColor = getFilterColor();
|
|
||||||
|
|
||||||
applySupportActionModeColor(filterColor, mode);
|
|
||||||
|
|
||||||
filterColor.setStatusBarColor(this);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
@SuppressLint("NewApi")
|
|
||||||
public void onSupportActionModeFinished(@NonNull ActionMode mode) {
|
|
||||||
super.onSupportActionModeFinished(mode);
|
|
||||||
|
|
||||||
getWindow().setStatusBarColor(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void finishActionMode() {
|
|
||||||
if (actionMode != null) {
|
|
||||||
actionMode.finish();
|
|
||||||
actionMode = null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void dueDateChanged(long dateTime) {
|
|
||||||
getTaskEditFragment().onDueDateChanged(dateTime);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Override
|
|
||||||
public void onListchanged(@Nullable Filter filter) {
|
|
||||||
getTaskEditFragment().onRemoteListChanged(filter);
|
|
||||||
}
|
|
||||||
}
|
|
@ -0,0 +1,451 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (c) 2012 Todoroo Inc
|
||||||
|
*
|
||||||
|
* See the file "LICENSE" for the full license governing this code.
|
||||||
|
*/
|
||||||
|
package com.todoroo.astrid.activity
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint
|
||||||
|
import android.app.Activity
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import android.content.res.Configuration
|
||||||
|
import android.net.Uri
|
||||||
|
import android.os.Bundle
|
||||||
|
import android.view.View
|
||||||
|
import android.view.inputmethod.InputMethodManager
|
||||||
|
import androidx.appcompat.view.ActionMode
|
||||||
|
import androidx.drawerlayout.widget.DrawerLayout.SimpleDrawerListener
|
||||||
|
import androidx.fragment.app.FragmentManager
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
|
import com.todoroo.andlib.utility.AndroidUtilities
|
||||||
|
import com.todoroo.astrid.activity.TaskEditFragment.TaskEditFragmentCallbackHandler
|
||||||
|
import com.todoroo.astrid.activity.TaskListFragment.TaskListFragmentCallbackHandler
|
||||||
|
import com.todoroo.astrid.api.Filter
|
||||||
|
import com.todoroo.astrid.dao.TaskDao
|
||||||
|
import com.todoroo.astrid.data.Task
|
||||||
|
import com.todoroo.astrid.service.TaskCreator
|
||||||
|
import com.todoroo.astrid.timers.TimerControlSet.TimerControlSetCallback
|
||||||
|
import io.reactivex.Single
|
||||||
|
import io.reactivex.android.schedulers.AndroidSchedulers
|
||||||
|
import io.reactivex.disposables.CompositeDisposable
|
||||||
|
import io.reactivex.schedulers.Schedulers
|
||||||
|
import org.tasks.BuildConfig
|
||||||
|
import org.tasks.LocalBroadcastManager
|
||||||
|
import org.tasks.R
|
||||||
|
import org.tasks.Strings.isNullOrEmpty
|
||||||
|
import org.tasks.activities.TagSettingsActivity
|
||||||
|
import org.tasks.billing.Inventory
|
||||||
|
import org.tasks.data.Place
|
||||||
|
import org.tasks.databinding.TaskListActivityBinding
|
||||||
|
import org.tasks.dialogs.SortDialog.SortDialogCallback
|
||||||
|
import org.tasks.dialogs.WhatsNewDialog
|
||||||
|
import org.tasks.filters.PlaceFilter
|
||||||
|
import org.tasks.fragments.CommentBarFragment.CommentBarFragmentCallback
|
||||||
|
import org.tasks.gtasks.PlayServices
|
||||||
|
import org.tasks.injection.ActivityComponent
|
||||||
|
import org.tasks.injection.InjectingAppCompatActivity
|
||||||
|
import org.tasks.intents.TaskIntents
|
||||||
|
import org.tasks.location.LocationPickerActivity
|
||||||
|
import org.tasks.preferences.DefaultFilterProvider
|
||||||
|
import org.tasks.preferences.Preferences
|
||||||
|
import org.tasks.receivers.RepeatConfirmationReceiver
|
||||||
|
import org.tasks.tasklist.ActionUtils
|
||||||
|
import org.tasks.themes.ColorProvider
|
||||||
|
import org.tasks.themes.Theme
|
||||||
|
import org.tasks.themes.ThemeColor
|
||||||
|
import org.tasks.ui.DeadlineControlSet.DueDateChangeListener
|
||||||
|
import org.tasks.ui.EmptyTaskEditFragment.Companion.newEmptyTaskEditFragment
|
||||||
|
import org.tasks.ui.NavigationDrawerFragment
|
||||||
|
import org.tasks.ui.RemoteListFragment.OnListChanged
|
||||||
|
import org.tasks.ui.TaskListViewModel
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
class MainActivity : InjectingAppCompatActivity(), TaskListFragmentCallbackHandler, OnListChanged, TimerControlSetCallback, DueDateChangeListener, TaskEditFragmentCallbackHandler, CommentBarFragmentCallback, SortDialogCallback {
|
||||||
|
@Inject lateinit var preferences: Preferences
|
||||||
|
@Inject lateinit var repeatConfirmationReceiver: RepeatConfirmationReceiver
|
||||||
|
@Inject lateinit var defaultFilterProvider: DefaultFilterProvider
|
||||||
|
@Inject lateinit var theme: Theme
|
||||||
|
@Inject lateinit var taskDao: TaskDao
|
||||||
|
@Inject lateinit var localBroadcastManager: LocalBroadcastManager
|
||||||
|
@Inject lateinit var taskCreator: TaskCreator
|
||||||
|
@Inject lateinit var playServices: PlayServices
|
||||||
|
@Inject lateinit var inventory: Inventory
|
||||||
|
@Inject lateinit var colorProvider: ColorProvider
|
||||||
|
private var disposables: CompositeDisposable? = null
|
||||||
|
private lateinit var navigationDrawer: NavigationDrawerFragment
|
||||||
|
private var currentNightMode = 0
|
||||||
|
private var currentPro = false
|
||||||
|
private var filter: Filter? = null
|
||||||
|
private var actionMode: ActionMode? = null
|
||||||
|
private lateinit var binding: TaskListActivityBinding
|
||||||
|
|
||||||
|
/** @see android.app.Activity.onCreate
|
||||||
|
*/
|
||||||
|
override fun onCreate(savedInstanceState: Bundle?) {
|
||||||
|
super.onCreate(savedInstanceState)
|
||||||
|
val viewModel = ViewModelProvider(this).get(TaskListViewModel::class.java)
|
||||||
|
component.inject(viewModel)
|
||||||
|
currentNightMode = nightMode
|
||||||
|
currentPro = inventory.hasPro()
|
||||||
|
binding = TaskListActivityBinding.inflate(layoutInflater)
|
||||||
|
setContentView(binding.root)
|
||||||
|
if (savedInstanceState != null) {
|
||||||
|
filter = savedInstanceState.getParcelable(EXTRA_FILTER)
|
||||||
|
applyTheme()
|
||||||
|
}
|
||||||
|
navigationDrawer = navigationDrawerFragment
|
||||||
|
navigationDrawer.setUp(binding.drawerLayout)
|
||||||
|
binding.drawerLayout.addDrawerListener(
|
||||||
|
object : SimpleDrawerListener() {
|
||||||
|
override fun onDrawerStateChanged(newState: Int) {
|
||||||
|
finishActionMode()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
public override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
|
||||||
|
if (requestCode == NavigationDrawerFragment.REQUEST_SETTINGS) {
|
||||||
|
if (AndroidUtilities.atLeastNougat()) {
|
||||||
|
recreate()
|
||||||
|
} else {
|
||||||
|
finish()
|
||||||
|
startActivity(TaskIntents.getTaskListIntent(this, filter))
|
||||||
|
}
|
||||||
|
} else if (requestCode == NavigationDrawerFragment.REQUEST_NEW_LIST) {
|
||||||
|
if (resultCode == Activity.RESULT_OK && data != null) {
|
||||||
|
val filter: Filter? = data.getParcelableExtra(OPEN_FILTER)
|
||||||
|
if (filter != null) {
|
||||||
|
startActivity(TaskIntents.getTaskListIntent(this, filter))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (requestCode == NavigationDrawerFragment.REQUEST_NEW_PLACE) {
|
||||||
|
if (resultCode == Activity.RESULT_OK && data != null) {
|
||||||
|
val place: Place? = data.getParcelableExtra(LocationPickerActivity.EXTRA_PLACE)
|
||||||
|
if (place != null) {
|
||||||
|
startActivity(TaskIntents.getTaskListIntent(this, PlaceFilter(place)))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
super.onActivityResult(requestCode, resultCode, data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onNewIntent(intent: Intent) {
|
||||||
|
super.onNewIntent(intent)
|
||||||
|
setIntent(intent)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSaveInstanceState(outState: Bundle) {
|
||||||
|
super.onSaveInstanceState(outState)
|
||||||
|
outState.putParcelable(EXTRA_FILTER, filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun clearUi() {
|
||||||
|
finishActionMode()
|
||||||
|
navigationDrawer.closeDrawer()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun getTaskToLoad(filter: Filter?): Task? {
|
||||||
|
val intent = intent
|
||||||
|
if (intent.hasExtra(CREATE_TASK)) {
|
||||||
|
intent.removeExtra(CREATE_TASK)
|
||||||
|
return taskCreator.createWithValues(filter, "")
|
||||||
|
}
|
||||||
|
if (intent.hasExtra(OPEN_TASK)) {
|
||||||
|
val task: Task? = intent.getParcelableExtra(OPEN_TASK)
|
||||||
|
intent.removeExtra(OPEN_TASK)
|
||||||
|
return task
|
||||||
|
}
|
||||||
|
return null
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun openTask(filter: Filter?) {
|
||||||
|
val task = getTaskToLoad(filter)
|
||||||
|
when {
|
||||||
|
task != null -> onTaskListItemClicked(task)
|
||||||
|
taskEditFragment == null -> hideDetailFragment()
|
||||||
|
else -> showDetailFragment()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun handleIntent() {
|
||||||
|
val intent = intent
|
||||||
|
val openFilter = intent.hasExtra(OPEN_FILTER)
|
||||||
|
val loadFilter = intent.hasExtra(LOAD_FILTER)
|
||||||
|
val tef = taskEditFragment
|
||||||
|
if (tef != null && (openFilter || loadFilter)) {
|
||||||
|
tef.save()
|
||||||
|
}
|
||||||
|
if (loadFilter || !openFilter && filter == null) {
|
||||||
|
disposables!!.add(
|
||||||
|
Single.fromCallable {
|
||||||
|
val filter = intent.getStringExtra(LOAD_FILTER)
|
||||||
|
intent.removeExtra(LOAD_FILTER)
|
||||||
|
if (isNullOrEmpty(filter)) defaultFilterProvider.defaultFilter else defaultFilterProvider.getFilterFromPreference(filter)
|
||||||
|
}
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe { filter: Filter? ->
|
||||||
|
clearUi()
|
||||||
|
openTaskListFragment(filter)
|
||||||
|
openTask(filter)
|
||||||
|
})
|
||||||
|
} else if (openFilter) {
|
||||||
|
val filter: Filter? = intent.getParcelableExtra(OPEN_FILTER)
|
||||||
|
intent.removeExtra(OPEN_FILTER)
|
||||||
|
clearUi()
|
||||||
|
openTaskListFragment(filter)
|
||||||
|
openTask(filter)
|
||||||
|
} else {
|
||||||
|
val existing = taskListFragment
|
||||||
|
openTaskListFragment(
|
||||||
|
if (existing == null || existing.filter !== filter) TaskListFragment.newTaskListFragment(applicationContext, filter) else existing,
|
||||||
|
false)
|
||||||
|
openTask(filter)
|
||||||
|
}
|
||||||
|
if (intent.hasExtra(TOKEN_CREATE_NEW_LIST_NAME)) {
|
||||||
|
val listName = intent.getStringExtra(TOKEN_CREATE_NEW_LIST_NAME)
|
||||||
|
intent.removeExtra(TOKEN_CREATE_NEW_LIST_NAME)
|
||||||
|
val activityIntent = Intent(this@MainActivity, TagSettingsActivity::class.java)
|
||||||
|
activityIntent.putExtra(TagSettingsActivity.TOKEN_AUTOPOPULATE_NAME, listName)
|
||||||
|
startActivityForResult(activityIntent, NavigationDrawerFragment.REQUEST_NEW_LIST)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun showDetailFragment() {
|
||||||
|
if (isSinglePaneLayout) {
|
||||||
|
binding.detail.visibility = View.VISIBLE
|
||||||
|
binding.master.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hideDetailFragment() {
|
||||||
|
supportFragmentManager
|
||||||
|
.beginTransaction()
|
||||||
|
.replace(R.id.detail, newEmptyTaskEditFragment(filter!!))
|
||||||
|
.commit()
|
||||||
|
if (isSinglePaneLayout) {
|
||||||
|
binding.master.visibility = View.VISIBLE
|
||||||
|
binding.detail.visibility = View.GONE
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun openTaskListFragment(filter: Filter?, force: Boolean = false) {
|
||||||
|
openTaskListFragment(TaskListFragment.newTaskListFragment(applicationContext, filter), force)
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun openTaskListFragment(taskListFragment: TaskListFragment, force: Boolean) {
|
||||||
|
AndroidUtilities.assertMainThread()
|
||||||
|
val newFilter = taskListFragment.filter
|
||||||
|
if (filter != null && !force
|
||||||
|
&& filter!!.areItemsTheSame(newFilter)
|
||||||
|
&& filter!!.areContentsTheSame(newFilter)) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
filter = newFilter
|
||||||
|
navigationDrawer.setSelected(filter)
|
||||||
|
applyTheme()
|
||||||
|
val fragmentManager = supportFragmentManager
|
||||||
|
fragmentManager
|
||||||
|
.beginTransaction()
|
||||||
|
.replace(R.id.master, taskListFragment, FRAG_TAG_TASK_LIST)
|
||||||
|
.commit()
|
||||||
|
fragmentManager.executePendingTransactions()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun applyTheme() {
|
||||||
|
val filterColor = filterColor
|
||||||
|
filterColor.setStatusBarColor(binding.drawerLayout)
|
||||||
|
filterColor.applyToNavigationBar(this)
|
||||||
|
filterColor.applyTaskDescription(this, filter?.listingTitle ?: getString(R.string.app_name))
|
||||||
|
theme.withThemeColor(filterColor).applyToContext(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
private val filterColor: ThemeColor
|
||||||
|
get() = if (filter != null && filter!!.tint != 0) colorProvider.getThemeColor(filter!!.tint, true) else theme.themeColor
|
||||||
|
|
||||||
|
private val navigationDrawerFragment: NavigationDrawerFragment
|
||||||
|
get() = supportFragmentManager
|
||||||
|
.findFragmentById(NavigationDrawerFragment.FRAGMENT_NAVIGATION_DRAWER) as NavigationDrawerFragment
|
||||||
|
|
||||||
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
if (currentNightMode != nightMode || currentPro != inventory.hasPro()) {
|
||||||
|
recreate()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
localBroadcastManager.registerRepeatReceiver(repeatConfirmationReceiver)
|
||||||
|
check(!(BuildConfig.DEBUG && disposables != null && !disposables!!.isDisposed))
|
||||||
|
disposables = CompositeDisposable(playServices.check(this))
|
||||||
|
if (preferences.getBoolean(R.string.p_just_updated, false)) {
|
||||||
|
if (preferences.getBoolean(R.string.p_show_whats_new, true)) {
|
||||||
|
val fragmentManager = supportFragmentManager
|
||||||
|
if (fragmentManager.findFragmentByTag(FRAG_TAG_WHATS_NEW) == null) {
|
||||||
|
WhatsNewDialog().show(fragmentManager, FRAG_TAG_WHATS_NEW)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
preferences.setBoolean(R.string.p_just_updated, false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onResumeFragments() {
|
||||||
|
super.onResumeFragments()
|
||||||
|
handleIntent()
|
||||||
|
}
|
||||||
|
|
||||||
|
private val nightMode: Int
|
||||||
|
get() = resources.configuration.uiMode and Configuration.UI_MODE_NIGHT_MASK
|
||||||
|
|
||||||
|
override fun inject(component: ActivityComponent) {
|
||||||
|
component.inject(this)
|
||||||
|
theme.applyTheme(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onPause() {
|
||||||
|
super.onPause()
|
||||||
|
localBroadcastManager.unregisterReceiver(repeatConfirmationReceiver)
|
||||||
|
disposables?.dispose()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onTaskListItemClicked(task: Task?) {
|
||||||
|
AndroidUtilities.assertMainThread()
|
||||||
|
if (task == null) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val taskEditFragment = taskEditFragment
|
||||||
|
taskEditFragment?.save()
|
||||||
|
clearUi()
|
||||||
|
if (task.isNew) {
|
||||||
|
openTask(task)
|
||||||
|
} else {
|
||||||
|
disposables!!.add(
|
||||||
|
Single.fromCallable { taskDao.fetch(task.id) }
|
||||||
|
.subscribeOn(Schedulers.io())
|
||||||
|
.observeOn(AndroidSchedulers.mainThread())
|
||||||
|
.subscribe { t: Task? -> this.openTask(t) })
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun openTask(task: Task?) {
|
||||||
|
supportFragmentManager
|
||||||
|
.beginTransaction()
|
||||||
|
.replace(
|
||||||
|
R.id.detail,
|
||||||
|
TaskEditFragment.newTaskEditFragment(task, filterColor),
|
||||||
|
TaskEditFragment.TAG_TASKEDIT_FRAGMENT)
|
||||||
|
.addToBackStack(TaskEditFragment.TAG_TASKEDIT_FRAGMENT)
|
||||||
|
.commit()
|
||||||
|
showDetailFragment()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onNavigationIconClicked() {
|
||||||
|
hideKeyboard()
|
||||||
|
navigationDrawer.openDrawer()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onBackPressed() {
|
||||||
|
if (navigationDrawer.isDrawerOpen) {
|
||||||
|
navigationDrawer.closeDrawer()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
val taskEditFragment = taskEditFragment
|
||||||
|
if (taskEditFragment != null) {
|
||||||
|
if (preferences.backButtonSavesTask()) {
|
||||||
|
taskEditFragment.save()
|
||||||
|
} else {
|
||||||
|
taskEditFragment.discardButtonClick()
|
||||||
|
}
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if (taskListFragment?.collapseSearchView() == true) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
finish()
|
||||||
|
}
|
||||||
|
|
||||||
|
val taskListFragment: TaskListFragment?
|
||||||
|
get() = supportFragmentManager.findFragmentByTag(FRAG_TAG_TASK_LIST) as TaskListFragment?
|
||||||
|
|
||||||
|
val taskEditFragment: TaskEditFragment?
|
||||||
|
get() = supportFragmentManager.findFragmentByTag(TaskEditFragment.TAG_TASKEDIT_FRAGMENT) as TaskEditFragment?
|
||||||
|
|
||||||
|
override fun stopTimer(): Task {
|
||||||
|
return taskEditFragment!!.stopTimer()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun startTimer(): Task {
|
||||||
|
return taskEditFragment!!.startTimer()
|
||||||
|
}
|
||||||
|
|
||||||
|
private val isSinglePaneLayout: Boolean
|
||||||
|
get() = !resources.getBoolean(R.bool.two_pane_layout)
|
||||||
|
|
||||||
|
override fun removeTaskEditFragment() {
|
||||||
|
supportFragmentManager
|
||||||
|
.popBackStackImmediate(
|
||||||
|
TaskEditFragment.TAG_TASKEDIT_FRAGMENT, FragmentManager.POP_BACK_STACK_INCLUSIVE)
|
||||||
|
hideDetailFragment()
|
||||||
|
hideKeyboard()
|
||||||
|
taskListFragment?.loadTaskListContent()
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun hideKeyboard() {
|
||||||
|
val view = currentFocus
|
||||||
|
if (view != null) {
|
||||||
|
val inputMethodManager = getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager
|
||||||
|
inputMethodManager.hideSoftInputFromWindow(view.windowToken, 0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun addComment(message: String?, picture: Uri?) {
|
||||||
|
val taskEditFragment = taskEditFragment
|
||||||
|
taskEditFragment?.addComment(message, picture)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun sortChanged(reload: Boolean) {
|
||||||
|
localBroadcastManager.broadcastRefresh()
|
||||||
|
if (reload) {
|
||||||
|
openTaskListFragment(filter, true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onSupportActionModeStarted(mode: ActionMode) {
|
||||||
|
super.onSupportActionModeStarted(mode)
|
||||||
|
actionMode = mode
|
||||||
|
val filterColor = filterColor
|
||||||
|
ActionUtils.applySupportActionModeColor(filterColor, mode)
|
||||||
|
filterColor.setStatusBarColor(this)
|
||||||
|
}
|
||||||
|
|
||||||
|
@SuppressLint("NewApi")
|
||||||
|
override fun onSupportActionModeFinished(mode: ActionMode) {
|
||||||
|
super.onSupportActionModeFinished(mode)
|
||||||
|
window.statusBarColor = 0
|
||||||
|
}
|
||||||
|
|
||||||
|
private fun finishActionMode() {
|
||||||
|
actionMode?.finish()
|
||||||
|
actionMode = null
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun dueDateChanged(dateTime: Long) {
|
||||||
|
taskEditFragment!!.onDueDateChanged(dateTime)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onListchanged(filter: Filter?) {
|
||||||
|
taskEditFragment!!.onRemoteListChanged(filter)
|
||||||
|
}
|
||||||
|
|
||||||
|
companion object {
|
||||||
|
/** For indicating the new list screen should be launched at fragment setup time */
|
||||||
|
const val TOKEN_CREATE_NEW_LIST_NAME = "newListName" // $NON-NLS-1$
|
||||||
|
const val OPEN_FILTER = "open_filter" // $NON-NLS-1$
|
||||||
|
const val LOAD_FILTER = "load_filter"
|
||||||
|
const val CREATE_TASK = "open_task" // $NON-NLS-1$
|
||||||
|
const val OPEN_TASK = "open_new_task" // $NON-NLS-1$
|
||||||
|
private const val FRAG_TAG_TASK_LIST = "frag_tag_task_list"
|
||||||
|
private const val FRAG_TAG_WHATS_NEW = "frag_tag_whats_new"
|
||||||
|
private const val EXTRA_FILTER = "extra_filter"
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue