Rename project

This commit is contained in:
inorichi
2016-01-15 15:18:19 +01:00
parent 1508bf42fb
commit 70f4c7fcc3
167 changed files with 647 additions and 654 deletions
@@ -0,0 +1,57 @@
package eu.kanade.tachiyomi.ui.setting;
import android.os.Bundle;
import android.preference.Preference;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
import java.util.TimeZone;
import eu.kanade.tachiyomi.BuildConfig;
import eu.kanade.tachiyomi.R;
public class SettingsAboutFragment extends SettingsNestedFragment {
public static SettingsNestedFragment newInstance(int resourcePreference, int resourceTitle) {
SettingsNestedFragment fragment = new SettingsAboutFragment();
fragment.setArgs(resourcePreference, resourceTitle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
Preference version = findPreference(getString(R.string.pref_version));
Preference buildTime = findPreference(getString(R.string.pref_build_time));
version.setSummary(BuildConfig.DEBUG ? "r" + BuildConfig.COMMIT_COUNT :
BuildConfig.VERSION_NAME);
buildTime.setSummary(getFormattedBuildTime());
return super.onCreateView(inflater, container, savedState);
}
private String getFormattedBuildTime() {
try {
DateFormat inputDf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm'Z'");
inputDf.setTimeZone(TimeZone.getTimeZone("UTC"));
Date date = inputDf.parse(BuildConfig.BUILD_TIME);
DateFormat outputDf = DateFormat.getDateTimeInstance(
DateFormat.MEDIUM, DateFormat.SHORT, Locale.getDefault());
outputDf.setTimeZone(TimeZone.getDefault());
return outputDf.format(date);
} catch (ParseException e) {
// Do nothing
}
return "";
}
}
@@ -0,0 +1,82 @@
package eu.kanade.tachiyomi.ui.setting;
import android.os.Bundle;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import java.util.List;
import javax.inject.Inject;
import eu.kanade.tachiyomi.App;
import eu.kanade.tachiyomi.data.mangasync.base.MangaSyncService;
import eu.kanade.tachiyomi.data.mangasync.MangaSyncManager;
import eu.kanade.tachiyomi.data.source.SourceManager;
import eu.kanade.tachiyomi.data.source.base.Source;
import eu.kanade.tachiyomi.widget.preference.MangaSyncLoginDialog;
import eu.kanade.tachiyomi.widget.preference.SourceLoginDialog;
import rx.Observable;
public class SettingsAccountsFragment extends SettingsNestedFragment {
@Inject SourceManager sourceManager;
@Inject MangaSyncManager syncManager;
public static SettingsNestedFragment newInstance(int resourcePreference, int resourceTitle) {
SettingsNestedFragment fragment = new SettingsAccountsFragment();
fragment.setArgs(resourcePreference, resourceTitle);
return fragment;
}
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
App.get(getActivity()).getComponent().inject(this);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedSate) {
View view = super.onCreateView(inflater, container, savedSate);
PreferenceScreen screen = getPreferenceScreen();
List<Source> sourceAccounts = getSourcesWithLogin();
PreferenceCategory sourceCategory = new PreferenceCategory(screen.getContext());
sourceCategory.setTitle("Sources");
screen.addPreference(sourceCategory);
for (Source source : sourceAccounts) {
SourceLoginDialog dialog = new SourceLoginDialog(
screen.getContext(), preferences, source);
dialog.setTitle(source.getName());
sourceCategory.addPreference(dialog);
}
PreferenceCategory mangaSyncCategory = new PreferenceCategory(screen.getContext());
mangaSyncCategory.setTitle("Sync");
screen.addPreference(mangaSyncCategory);
for (MangaSyncService sync : syncManager.getSyncServices()) {
MangaSyncLoginDialog dialog = new MangaSyncLoginDialog(
screen.getContext(), preferences, sync);
dialog.setTitle(sync.getName());
mangaSyncCategory.addPreference(dialog);
}
return view;
}
private List<Source> getSourcesWithLogin() {
return Observable.from(sourceManager.getSources())
.filter(Source::isLoginRequired)
.toList()
.toBlocking()
.single();
}
}
@@ -0,0 +1,96 @@
package eu.kanade.tachiyomi.ui.setting;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.support.v7.widget.Toolbar;
import javax.inject.Inject;
import butterknife.Bind;
import butterknife.ButterKnife;
import eu.kanade.tachiyomi.App;
import eu.kanade.tachiyomi.R;
import eu.kanade.tachiyomi.data.cache.ChapterCache;
import eu.kanade.tachiyomi.data.database.DatabaseHelper;
import eu.kanade.tachiyomi.data.preference.PreferencesHelper;
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity;
public class SettingsActivity extends BaseActivity {
@Inject PreferencesHelper preferences;
@Inject ChapterCache chapterCache;
@Inject DatabaseHelper db;
@Bind(R.id.toolbar) Toolbar toolbar;
@Override
protected void onCreate(Bundle savedState) {
super.onCreate(savedState);
App.get(this).getComponent().inject(this);
setContentView(R.layout.activity_preferences);
ButterKnife.bind(this);
setupToolbar(toolbar);
if (savedState == null)
getFragmentManager().beginTransaction().replace(R.id.settings_content,
new SettingsMainFragment())
.commit();
}
@Override
public void onBackPressed() {
if( !getFragmentManager().popBackStackImmediate() ) super.onBackPressed();
}
public static class SettingsMainFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_main);
registerSubpreference(R.string.pref_category_general_key,
SettingsGeneralFragment.newInstance(
R.xml.pref_general, R.string.pref_category_general));
registerSubpreference(R.string.pref_category_reader_key,
SettingsNestedFragment.newInstance(
R.xml.pref_reader, R.string.pref_category_reader));
registerSubpreference(R.string.pref_category_downloads_key,
SettingsDownloadsFragment.newInstance(
R.xml.pref_downloads, R.string.pref_category_downloads));
registerSubpreference(R.string.pref_category_accounts_key,
SettingsAccountsFragment.newInstance(
R.xml.pref_accounts, R.string.pref_category_accounts));
registerSubpreference(R.string.pref_category_advanced_key,
SettingsAdvancedFragment.newInstance(
R.xml.pref_advanced, R.string.pref_category_advanced));
registerSubpreference(R.string.pref_category_about_key,
SettingsAboutFragment.newInstance(
R.xml.pref_about, R.string.pref_category_about));
}
@Override
public void onResume() {
super.onResume();
((BaseActivity) getActivity()).setToolbarTitle(getString(R.string.label_settings));
}
private void registerSubpreference(int preferenceResource, PreferenceFragment fragment) {
findPreference(getString(preferenceResource))
.setOnPreferenceClickListener(preference -> {
getFragmentManager().beginTransaction()
.replace(R.id.settings_content, fragment)
.addToBackStack(fragment.getClass().getSimpleName()).commit();
return true;
});
}
}
}
@@ -0,0 +1,109 @@
package eu.kanade.tachiyomi.ui.setting;
import android.os.Bundle;
import android.preference.Preference;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.afollestad.materialdialogs.MaterialDialog;
import java.io.File;
import java.util.concurrent.atomic.AtomicInteger;
import eu.kanade.tachiyomi.R;
import eu.kanade.tachiyomi.data.cache.ChapterCache;
import eu.kanade.tachiyomi.data.database.DatabaseHelper;
import eu.kanade.tachiyomi.util.ToastUtil;
import rx.Observable;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
import rx.subscriptions.CompositeSubscription;
public class SettingsAdvancedFragment extends SettingsNestedFragment {
private CompositeSubscription subscriptions;
public static SettingsNestedFragment newInstance(int resourcePreference, int resourceTitle) {
SettingsNestedFragment fragment = new SettingsAdvancedFragment();
fragment.setArgs(resourcePreference, resourceTitle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
View view = super.onCreateView(inflater, container, savedState);
subscriptions = new CompositeSubscription();
Preference clearCache = findPreference(getString(R.string.pref_clear_chapter_cache_key));
clearCache.setOnPreferenceClickListener(preference -> {
clearChapterCache(preference);
return true;
});
clearCache.setSummary(getString(R.string.used_cache, getChapterCache().getReadableSize()));
Preference clearDatabase = findPreference(getString(R.string.pref_clear_database_key));
clearDatabase.setOnPreferenceClickListener(preference -> {
clearDatabase();
return true;
});
return view;
}
@Override
public void onDestroyView() {
subscriptions.unsubscribe();
super.onDestroyView();
}
private void clearChapterCache(Preference preference) {
final ChapterCache chapterCache = getChapterCache();
final AtomicInteger deletedFiles = new AtomicInteger();
File[] files = chapterCache.getCacheDir().listFiles();
MaterialDialog dialog = new MaterialDialog.Builder(getActivity())
.title(R.string.deleting)
.progress(false, files.length, true)
.cancelable(false)
.show();
subscriptions.add(Observable.defer(() -> Observable.from(files))
.concatMap(file -> {
if (chapterCache.remove(file.getName())) {
deletedFiles.incrementAndGet();
}
return Observable.just(file);
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(file -> dialog.incrementProgress(1),
error -> {
dialog.dismiss();
ToastUtil.showShort(getActivity(), getString(R.string.cache_delete_error));
}, () -> {
dialog.dismiss();
ToastUtil.showShort(getActivity(), getString(R.string.cache_deleted, deletedFiles.get()));
preference.setSummary(getString(R.string.used_cache, chapterCache.getReadableSize()));
}));
}
private void clearDatabase() {
final DatabaseHelper db = getSettingsActivity().db;
new MaterialDialog.Builder(getActivity())
.content(R.string.clear_database_confirmation)
.positiveText(R.string.button_yes)
.negativeText(R.string.button_no)
.onPositive((dialog1, which) -> {
db.deleteMangasNotInLibrary().executeAsBlocking();
})
.show();
}
private ChapterCache getChapterCache() {
return getSettingsActivity().chapterCache;
}
}
@@ -0,0 +1,93 @@
package eu.kanade.tachiyomi.ui.setting;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.preference.Preference;
import android.support.v7.widget.RecyclerView;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.nononsenseapps.filepicker.AbstractFilePickerFragment;
import com.nononsenseapps.filepicker.FilePickerActivity;
import com.nononsenseapps.filepicker.FilePickerFragment;
import com.nononsenseapps.filepicker.LogicHandler;
import java.io.File;
import eu.kanade.tachiyomi.R;
public class SettingsDownloadsFragment extends SettingsNestedFragment {
Preference downloadDirPref;
public static final int DOWNLOAD_DIR_CODE = 1;
public static SettingsNestedFragment newInstance(int resourcePreference, int resourceTitle) {
SettingsNestedFragment fragment = new SettingsDownloadsFragment();
fragment.setArgs(resourcePreference, resourceTitle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
downloadDirPref = findPreference(getString(R.string.pref_download_directory_key));
downloadDirPref.setOnPreferenceClickListener(preference -> {
Intent i = new Intent(getActivity(), CustomLayoutPickerActivity.class);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_MULTIPLE, false);
i.putExtra(FilePickerActivity.EXTRA_ALLOW_CREATE_DIR, true);
i.putExtra(FilePickerActivity.EXTRA_MODE, FilePickerActivity.MODE_DIR);
i.putExtra(FilePickerActivity.EXTRA_START_PATH, preferences.getDownloadsDirectory());
startActivityForResult(i, DOWNLOAD_DIR_CODE);
return true;
});
return view;
}
@Override
public void onResume() {
super.onResume();
downloadDirPref.setSummary(preferences.getDownloadsDirectory());
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == DOWNLOAD_DIR_CODE && resultCode == Activity.RESULT_OK) {
Uri uri = data.getData();
preferences.setDownloadsDirectory(uri.getPath());
}
}
public static class CustomLayoutPickerActivity extends FilePickerActivity {
@Override
protected AbstractFilePickerFragment<File> getFragment(
String startPath, int mode, boolean allowMultiple, boolean allowCreateDir) {
AbstractFilePickerFragment<File> fragment = new CustomLayoutFilePickerFragment();
fragment.setArgs(startPath, mode, allowMultiple, allowCreateDir);
return fragment;
}
}
public static class CustomLayoutFilePickerFragment extends FilePickerFragment {
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
View v;
switch (viewType) {
case LogicHandler.VIEWTYPE_DIR:
v = LayoutInflater.from(getActivity()).inflate(R.layout.listitem_dir,
parent, false);
return new DirViewHolder(v);
default:
return super.onCreateViewHolder(parent, viewType);
}
}
}
}
@@ -0,0 +1,44 @@
package eu.kanade.tachiyomi.ui.setting;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import eu.kanade.tachiyomi.R;
import eu.kanade.tachiyomi.data.preference.PreferencesHelper;
import eu.kanade.tachiyomi.data.sync.LibraryUpdateAlarm;
import eu.kanade.tachiyomi.widget.preference.IntListPreference;
import eu.kanade.tachiyomi.widget.preference.LibraryColumnsDialog;
public class SettingsGeneralFragment extends SettingsNestedFragment {
public static SettingsNestedFragment newInstance(int resourcePreference, int resourceTitle) {
SettingsNestedFragment fragment = new SettingsGeneralFragment();
fragment.setArgs(resourcePreference, resourceTitle);
return fragment;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) {
View view = super.onCreateView(inflater, container, savedState);
PreferencesHelper preferences = getSettingsActivity().preferences;
LibraryColumnsDialog columnsDialog = (LibraryColumnsDialog) findPreference(
getString(R.string.pref_library_columns_dialog_key));
columnsDialog.setPreferencesHelper(preferences);
IntListPreference updateInterval = (IntListPreference) findPreference(
getString(R.string.pref_library_update_interval_key));
updateInterval.setOnPreferenceChangeListener((preference, newValue) -> {
LibraryUpdateAlarm.startAlarm(getActivity(), Integer.parseInt((String) newValue));
return true;
});
return view;
}
}
@@ -0,0 +1,55 @@
package eu.kanade.tachiyomi.ui.setting;
import android.os.Bundle;
import android.preference.PreferenceFragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import eu.kanade.tachiyomi.data.preference.PreferencesHelper;
import eu.kanade.tachiyomi.ui.base.activity.BaseActivity;
public class SettingsNestedFragment extends PreferenceFragment {
protected PreferencesHelper preferences;
private static final String RESOURCE_FILE = "resource_file";
private static final String TOOLBAR_TITLE = "toolbar_title";
public static SettingsNestedFragment newInstance(int resourcePreference, int resourceTitle) {
SettingsNestedFragment fragment = new SettingsNestedFragment();
fragment.setArgs(resourcePreference, resourceTitle);
return fragment;
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(getArguments().getInt(RESOURCE_FILE));
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
preferences = getSettingsActivity().preferences;
return super.onCreateView(inflater, container, savedInstanceState);
}
@Override
public void onResume() {
super.onResume();
((BaseActivity) getActivity())
.setToolbarTitle(getString(getArguments().getInt(TOOLBAR_TITLE)));
}
public void setArgs(int resourcePreference, int resourceTitle) {
Bundle args = new Bundle();
args.putInt(RESOURCE_FILE, resourcePreference);
args.putInt(TOOLBAR_TITLE, resourceTitle);
setArguments(args);
}
public SettingsActivity getSettingsActivity() {
return (SettingsActivity) getActivity();
}
}