mirror of
https://github.com/tachiyomiorg/tachiyomi.git
synced 2024-11-17 17:09:15 +01:00
Initial support for sources' login. Upgrade support library version.
This commit is contained in:
parent
e857a44987
commit
0e9e80b081
@ -4,6 +4,10 @@ apply plugin: 'com.zeroturnaround.jrebel.android'
|
|||||||
apply plugin: 'com.neenbedankt.android-apt'
|
apply plugin: 'com.neenbedankt.android-apt'
|
||||||
apply plugin: 'me.tatarka.retrolambda'
|
apply plugin: 'me.tatarka.retrolambda'
|
||||||
|
|
||||||
|
retrolambda {
|
||||||
|
jvmArgs '-noverify'
|
||||||
|
}
|
||||||
|
|
||||||
android {
|
android {
|
||||||
compileSdkVersion 23
|
compileSdkVersion 23
|
||||||
buildToolsVersion "23.0.1"
|
buildToolsVersion "23.0.1"
|
||||||
@ -45,7 +49,7 @@ android {
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
final SUPPORT_LIBRARY_VERSION = '23.0.1'
|
final SUPPORT_LIBRARY_VERSION = '23.1.0'
|
||||||
final DAGGER_VERSION = '2.0.1'
|
final DAGGER_VERSION = '2.0.1'
|
||||||
final HAMCREST_VERSION = '1.3'
|
final HAMCREST_VERSION = '1.3'
|
||||||
final MOCKITO_VERSION = '1.10.19'
|
final MOCKITO_VERSION = '1.10.19'
|
||||||
|
@ -5,30 +5,52 @@ import android.content.SharedPreferences;
|
|||||||
import android.preference.PreferenceManager;
|
import android.preference.PreferenceManager;
|
||||||
|
|
||||||
import eu.kanade.mangafeed.R;
|
import eu.kanade.mangafeed.R;
|
||||||
|
import eu.kanade.mangafeed.sources.Source;
|
||||||
|
|
||||||
public class PreferencesHelper {
|
public class PreferencesHelper {
|
||||||
|
|
||||||
private static SharedPreferences mPref;
|
private static SharedPreferences mPref;
|
||||||
|
private Context context;
|
||||||
|
|
||||||
private static final String PREF_HIDE_STATUS_BAR = "hide_status_bar";
|
private static final String SOURCE_ACCOUNT_USERNAME = "pref_source_username_";
|
||||||
private static final String PREF_DEFAULT_VIEWER = "default_viewer";
|
private static final String SOURCE_ACCOUNT_PASSWORD = "pref_source_password_";
|
||||||
|
|
||||||
public PreferencesHelper(Context context) {
|
public PreferencesHelper(Context context) {
|
||||||
PreferenceManager.setDefaultValues(context, R.xml.preferences, false);
|
this.context = context;
|
||||||
|
PreferenceManager.setDefaultValues(context, R.xml.pref_reader, false);
|
||||||
|
|
||||||
mPref = PreferenceManager.getDefaultSharedPreferences(context);
|
mPref = PreferenceManager.getDefaultSharedPreferences(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getKey(int keyResource) {
|
||||||
|
return context.getString(keyResource);
|
||||||
|
}
|
||||||
|
|
||||||
public void clear() {
|
public void clear() {
|
||||||
mPref.edit().clear().apply();
|
mPref.edit().clear().apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean hideStatusBarSet() {
|
public boolean hideStatusBarSet() {
|
||||||
return mPref.getBoolean(PREF_HIDE_STATUS_BAR, false);
|
return mPref.getBoolean(getKey(R.string.pref_hide_status_bar_key), false);
|
||||||
}
|
}
|
||||||
|
|
||||||
public int getDefaultViewer() {
|
public int getDefaultViewer() {
|
||||||
return Integer.parseInt(mPref.getString(PREF_DEFAULT_VIEWER, "1"));
|
return Integer.parseInt(mPref.getString(getKey(R.string.pref_default_viewer_key), "1"));
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSourceUsername(Source source) {
|
||||||
|
return mPref.getString(SOURCE_ACCOUNT_USERNAME + source.getSourceId(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSourcePassword(Source source) {
|
||||||
|
return mPref.getString(SOURCE_ACCOUNT_PASSWORD + source.getSourceId(), "");
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSourceCredentials(Source source, String username, String password) {
|
||||||
|
mPref.edit()
|
||||||
|
.putString(SOURCE_ACCOUNT_USERNAME + source.getSourceId(), username)
|
||||||
|
.putString(SOURCE_ACCOUNT_PASSWORD + source.getSourceId(), password)
|
||||||
|
.apply();
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -15,6 +15,7 @@ import eu.kanade.mangafeed.presenter.MangaInfoPresenter;
|
|||||||
import eu.kanade.mangafeed.presenter.ReaderPresenter;
|
import eu.kanade.mangafeed.presenter.ReaderPresenter;
|
||||||
import eu.kanade.mangafeed.presenter.SourcePresenter;
|
import eu.kanade.mangafeed.presenter.SourcePresenter;
|
||||||
import eu.kanade.mangafeed.ui.activity.ReaderActivity;
|
import eu.kanade.mangafeed.ui.activity.ReaderActivity;
|
||||||
|
import eu.kanade.mangafeed.ui.fragment.SettingsAccountsFragment;
|
||||||
|
|
||||||
@Singleton
|
@Singleton
|
||||||
@Component(
|
@Component(
|
||||||
@ -34,6 +35,7 @@ public interface AppComponent {
|
|||||||
void inject(ReaderPresenter readerPresenter);
|
void inject(ReaderPresenter readerPresenter);
|
||||||
|
|
||||||
void inject(ReaderActivity readerActivity);
|
void inject(ReaderActivity readerActivity);
|
||||||
|
void inject(SettingsAccountsFragment settingsAccountsFragment);
|
||||||
|
|
||||||
Application application();
|
Application application();
|
||||||
|
|
||||||
|
@ -98,6 +98,11 @@ public class Batoto extends Source {
|
|||||||
return SourceManager.BATOTO;
|
return SourceManager.BATOTO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isLoginRequired() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected String getUrlFromPageNumber(int page) {
|
protected String getUrlFromPageNumber(int page) {
|
||||||
return INITIAL_UPDATE_URL + page;
|
return INITIAL_UPDATE_URL + page;
|
||||||
|
@ -33,6 +33,11 @@ public abstract class Source {
|
|||||||
protected abstract List<String> parseHtmlToPageUrls(String unparsedHtml);
|
protected abstract List<String> parseHtmlToPageUrls(String unparsedHtml);
|
||||||
protected abstract String parseHtmlToImageUrl(String unparsedHtml);
|
protected abstract String parseHtmlToImageUrl(String unparsedHtml);
|
||||||
|
|
||||||
|
// True if the source requires a login
|
||||||
|
public boolean isLoginRequired() {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
// Get the URL to the details of a manga, useful if the source provides some kind of API or fast calls
|
// Get the URL to the details of a manga, useful if the source provides some kind of API or fast calls
|
||||||
protected String getMangaUrl(String defaultMangaUrl) {
|
protected String getMangaUrl(String defaultMangaUrl) {
|
||||||
return defaultMangaUrl;
|
return defaultMangaUrl;
|
||||||
|
@ -1,13 +1,14 @@
|
|||||||
package eu.kanade.mangafeed.ui.activity;
|
package eu.kanade.mangafeed.ui.activity;
|
||||||
|
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.preference.PreferenceFragment;
|
|
||||||
import android.support.v7.widget.Toolbar;
|
import android.support.v7.widget.Toolbar;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
|
||||||
import butterknife.Bind;
|
import butterknife.Bind;
|
||||||
import butterknife.ButterKnife;
|
import butterknife.ButterKnife;
|
||||||
import eu.kanade.mangafeed.R;
|
import eu.kanade.mangafeed.R;
|
||||||
import eu.kanade.mangafeed.ui.activity.base.BaseActivity;
|
import eu.kanade.mangafeed.ui.activity.base.BaseActivity;
|
||||||
|
import eu.kanade.mangafeed.ui.fragment.SettingsMainFragment;
|
||||||
|
|
||||||
public class SettingsActivity extends BaseActivity {
|
public class SettingsActivity extends BaseActivity {
|
||||||
|
|
||||||
@ -21,16 +22,25 @@ public class SettingsActivity extends BaseActivity {
|
|||||||
|
|
||||||
setupToolbar(toolbar);
|
setupToolbar(toolbar);
|
||||||
|
|
||||||
|
if (savedInstanceState == null)
|
||||||
getFragmentManager().beginTransaction().replace(R.id.settings_content,
|
getFragmentManager().beginTransaction().replace(R.id.settings_content,
|
||||||
new MyPreferenceFragment()).commit();
|
new SettingsMainFragment())
|
||||||
|
.commit();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class MyPreferenceFragment extends PreferenceFragment {
|
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(final Bundle savedInstanceState) {
|
public void onBackPressed() {
|
||||||
super.onCreate(savedInstanceState);
|
if( !getFragmentManager().popBackStackImmediate() ) super.onBackPressed();
|
||||||
addPreferencesFromResource(R.xml.preferences);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
switch (item.getItemId()) {
|
||||||
|
case android.R.id.home:
|
||||||
|
onBackPressed();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -0,0 +1,120 @@
|
|||||||
|
package eu.kanade.mangafeed.ui.fragment;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.DialogPreference;
|
||||||
|
import android.preference.PreferenceFragment;
|
||||||
|
import android.preference.PreferenceScreen;
|
||||||
|
import android.text.method.PasswordTransformationMethod;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.view.View;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.EditText;
|
||||||
|
import android.widget.TextView;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import javax.inject.Inject;
|
||||||
|
|
||||||
|
import butterknife.Bind;
|
||||||
|
import butterknife.ButterKnife;
|
||||||
|
import eu.kanade.mangafeed.App;
|
||||||
|
import eu.kanade.mangafeed.R;
|
||||||
|
import eu.kanade.mangafeed.data.helpers.PreferencesHelper;
|
||||||
|
import eu.kanade.mangafeed.data.helpers.SourceManager;
|
||||||
|
import eu.kanade.mangafeed.sources.Source;
|
||||||
|
import eu.kanade.mangafeed.ui.activity.base.BaseActivity;
|
||||||
|
import rx.Observable;
|
||||||
|
|
||||||
|
public class SettingsAccountsFragment extends PreferenceFragment {
|
||||||
|
|
||||||
|
@Inject SourceManager sourceManager;
|
||||||
|
@Inject PreferencesHelper preferences;
|
||||||
|
|
||||||
|
public static SettingsAccountsFragment newInstance() {
|
||||||
|
return new SettingsAccountsFragment();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
App.get(getActivity()).getComponent().inject(this);
|
||||||
|
|
||||||
|
addPreferencesFromResource(R.xml.pref_accounts);
|
||||||
|
|
||||||
|
PreferenceScreen screen = getPreferenceScreen();
|
||||||
|
|
||||||
|
List<Source> sourceAccounts = getSourcesWithLogin();
|
||||||
|
|
||||||
|
for (Source source : sourceAccounts) {
|
||||||
|
LoginDialogPreference dialog = new LoginDialogPreference(
|
||||||
|
screen.getContext(), null, source);
|
||||||
|
dialog.setTitle(source.getName());
|
||||||
|
|
||||||
|
screen.addPreference(dialog);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
((BaseActivity)getActivity())
|
||||||
|
.setToolbarTitle(getString(R.string.pref_category_accounts));
|
||||||
|
}
|
||||||
|
|
||||||
|
private List<Source> getSourcesWithLogin() {
|
||||||
|
return Observable.from(sourceManager.getSources())
|
||||||
|
.filter(Source::isLoginRequired)
|
||||||
|
.toList()
|
||||||
|
.toBlocking()
|
||||||
|
.single();
|
||||||
|
}
|
||||||
|
|
||||||
|
public class LoginDialogPreference extends DialogPreference {
|
||||||
|
|
||||||
|
@Bind(R.id.accounts_login) TextView title;
|
||||||
|
@Bind(R.id.username) EditText username;
|
||||||
|
@Bind(R.id.password) EditText password;
|
||||||
|
@Bind(R.id.show_password) CheckBox showPassword;
|
||||||
|
|
||||||
|
private Source source;
|
||||||
|
|
||||||
|
public LoginDialogPreference(Context context, AttributeSet attrs, Source source) {
|
||||||
|
super(context, attrs);
|
||||||
|
this.source = source;
|
||||||
|
|
||||||
|
setDialogLayoutResource(R.layout.pref_account_login);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onBindDialogView(View view) {
|
||||||
|
ButterKnife.bind(this, view);
|
||||||
|
|
||||||
|
title.setText(getString(R.string.accounts_login_title, source.getName()));
|
||||||
|
|
||||||
|
username.setText(preferences.getSourceUsername(source));
|
||||||
|
password.setText(preferences.getSourcePassword(source));
|
||||||
|
showPassword.setOnCheckedChangeListener((buttonView, isChecked) -> {
|
||||||
|
if (isChecked)
|
||||||
|
password.setTransformationMethod(null);
|
||||||
|
else
|
||||||
|
password.setTransformationMethod(new PasswordTransformationMethod());
|
||||||
|
});
|
||||||
|
|
||||||
|
super.onBindDialogView(view);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onDialogClosed(boolean positiveResult) {
|
||||||
|
if(!positiveResult)
|
||||||
|
return;
|
||||||
|
|
||||||
|
preferences.setSourceCredentials(source,
|
||||||
|
username.getText().toString(),
|
||||||
|
password.getText().toString());
|
||||||
|
|
||||||
|
super.onDialogClosed(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
@ -0,0 +1,41 @@
|
|||||||
|
package eu.kanade.mangafeed.ui.fragment;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceFragment;
|
||||||
|
|
||||||
|
import eu.kanade.mangafeed.R;
|
||||||
|
import eu.kanade.mangafeed.ui.activity.base.BaseActivity;
|
||||||
|
|
||||||
|
public class SettingsMainFragment extends PreferenceFragment {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
addPreferencesFromResource(R.xml.pref_main);
|
||||||
|
|
||||||
|
registerSubpreference(R.string.pref_category_reader_key,
|
||||||
|
SettingsNestedFragment.newInstance(
|
||||||
|
R.xml.pref_reader, R.string.pref_category_reader));
|
||||||
|
|
||||||
|
registerSubpreference(R.string.pref_category_accounts_key,
|
||||||
|
SettingsAccountsFragment.newInstance());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
((BaseActivity)getActivity())
|
||||||
|
.setToolbarTitle(getString(R.string.settings_title));
|
||||||
|
}
|
||||||
|
|
||||||
|
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,36 @@
|
|||||||
|
package eu.kanade.mangafeed.ui.fragment;
|
||||||
|
|
||||||
|
import android.os.Bundle;
|
||||||
|
import android.preference.PreferenceFragment;
|
||||||
|
|
||||||
|
import eu.kanade.mangafeed.ui.activity.base.BaseActivity;
|
||||||
|
|
||||||
|
public class SettingsNestedFragment extends PreferenceFragment {
|
||||||
|
|
||||||
|
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();
|
||||||
|
Bundle args = new Bundle();
|
||||||
|
args.putInt(RESOURCE_FILE, resourcePreference);
|
||||||
|
args.putInt(TOOLBAR_TITLE, resourceTitle);
|
||||||
|
fragment.setArguments(args);
|
||||||
|
return fragment;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
addPreferencesFromResource(getArguments().getInt(RESOURCE_FILE));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
((BaseActivity)getActivity())
|
||||||
|
.setToolbarTitle(getString(getArguments().getInt(TOOLBAR_TITLE)));
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
53
app/src/main/res/layout/pref_account_login.xml
Normal file
53
app/src/main/res/layout/pref_account_login.xml
Normal file
@ -0,0 +1,53 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orientation="vertical" android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:padding="24dp">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/accounts_login_title"
|
||||||
|
android:id="@+id/accounts_login"
|
||||||
|
android:textStyle="bold"
|
||||||
|
android:textSize="16sp"
|
||||||
|
android:layout_gravity="center_horizontal" />
|
||||||
|
|
||||||
|
<View android:id="@+id/titleDivider"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:background="@color/line_grey"
|
||||||
|
android:layout_marginTop="6dp"
|
||||||
|
android:layout_marginBottom="24dp"/>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/username"/>
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:id="@+id/username" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="16dp"
|
||||||
|
android:text="@string/password"/>
|
||||||
|
|
||||||
|
<EditText
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:inputType="textPassword"
|
||||||
|
android:ems="10"
|
||||||
|
android:id="@+id/password" />
|
||||||
|
|
||||||
|
<CheckBox
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/show_password"
|
||||||
|
android:id="@+id/show_password"
|
||||||
|
android:layout_marginTop="10dp"/>
|
||||||
|
|
||||||
|
</LinearLayout>
|
7
app/src/main/res/values/keys.xml
Normal file
7
app/src/main/res/values/keys.xml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<string name="pref_category_reader_key">pref_category_reader_key</string>
|
||||||
|
<string name="pref_category_accounts_key">pref_category_accounts_key</string>
|
||||||
|
<string name="pref_hide_status_bar_key">pref_hide_status_bar_key</string>
|
||||||
|
<string name="pref_default_viewer_key">pref_default_viewer_key</string>
|
||||||
|
</resources>
|
@ -46,13 +46,25 @@
|
|||||||
<string name="manga_detail_tab">Info</string>
|
<string name="manga_detail_tab">Info</string>
|
||||||
<string name="manga_chapters_tab">Chapters</string>
|
<string name="manga_chapters_tab">Chapters</string>
|
||||||
<string name="title_activity_viewer">ViewerActivity</string>
|
<string name="title_activity_viewer">ViewerActivity</string>
|
||||||
|
|
||||||
|
<!-- Preferences -->
|
||||||
|
|
||||||
<string name="title_activity_settings">Settings</string>
|
<string name="title_activity_settings">Settings</string>
|
||||||
|
<string name="pref_category_reader">Reader</string>
|
||||||
|
<string name="pref_category_accounts">Accounts</string>
|
||||||
|
|
||||||
<string name="pref_hide_status_bar">Hide status bar</string>
|
<string name="pref_hide_status_bar">Hide status bar</string>
|
||||||
<string name="pref_hide_status_bar_summary">This option will hide the status bar while reading</string>
|
<string name="pref_hide_status_bar_summary">This option will hide the status bar while reading</string>
|
||||||
|
|
||||||
<string name="pref_viewer_type">Default viewer</string>
|
<string name="pref_viewer_type">Default viewer</string>
|
||||||
<string name="left_to_right_viewer">Left to right</string>
|
<string name="left_to_right_viewer">Left to right</string>
|
||||||
<string name="right_to_left_viewer">Right to left</string>
|
<string name="right_to_left_viewer">Right to left</string>
|
||||||
<string name="vertical_viewer">Vertical</string>
|
<string name="vertical_viewer">Vertical</string>
|
||||||
<string name="webtoon_viewer">Webtoon (experimental)</string>
|
<string name="webtoon_viewer">Webtoon (experimental)</string>
|
||||||
|
|
||||||
|
<string name="accounts_login_title">Login for %1$s</string>
|
||||||
|
<string name="username">Username</string>
|
||||||
|
<string name="password">Password</string>
|
||||||
|
<string name="show_password">Show password</string>
|
||||||
|
|
||||||
</resources>
|
</resources>
|
||||||
|
5
app/src/main/res/xml/pref_accounts.xml
Normal file
5
app/src/main/res/xml/pref_accounts.xml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:orderingFromXml="true">
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
14
app/src/main/res/xml/pref_main.xml
Normal file
14
app/src/main/res/xml/pref_main.xml
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="@string/pref_category_reader_key"
|
||||||
|
android:persistent="false"
|
||||||
|
android:title="@string/pref_category_reader" />
|
||||||
|
|
||||||
|
<Preference
|
||||||
|
android:key="@string/pref_category_accounts_key"
|
||||||
|
android:persistent="false"
|
||||||
|
android:title="@string/pref_category_accounts" />
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
@ -2,12 +2,12 @@
|
|||||||
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
|
||||||
<CheckBoxPreference android:title="@string/pref_hide_status_bar"
|
<CheckBoxPreference android:title="@string/pref_hide_status_bar"
|
||||||
|
android:key="pref_hide_status_bar_key"
|
||||||
android:defaultValue="false"
|
android:defaultValue="false"
|
||||||
android:summary="@string/pref_hide_status_bar_summary"
|
android:summary="@string/pref_hide_status_bar_summary" />
|
||||||
android:key="hide_status_bar" />
|
|
||||||
|
|
||||||
<ListPreference android:title="@string/pref_viewer_type"
|
<ListPreference android:title="@string/pref_viewer_type"
|
||||||
android:key="default_viewer"
|
android:key="pref_default_viewer_key"
|
||||||
android:entries="@array/viewers"
|
android:entries="@array/viewers"
|
||||||
android:entryValues="@array/viewers_values"
|
android:entryValues="@array/viewers_values"
|
||||||
android:defaultValue="1"/>
|
android:defaultValue="1"/>
|
Loading…
Reference in New Issue
Block a user