diff --git a/app/build.gradle b/app/build.gradle index 0ea5471c..adb859f7 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -10,8 +10,8 @@ android { applicationId "com.dar.nclientv2" minSdkVersion 14 targetSdkVersion 28 - versionCode 173 - versionName "1.7.3" + versionCode 174 + versionName "1.7.4" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true diff --git a/app/src/main/java/com/dar/nclientv2/FavoriteActivity.java b/app/src/main/java/com/dar/nclientv2/FavoriteActivity.java index 3609731e..ab407d85 100644 --- a/app/src/main/java/com/dar/nclientv2/FavoriteActivity.java +++ b/app/src/main/java/com/dar/nclientv2/FavoriteActivity.java @@ -21,6 +21,7 @@ public class FavoriteActivity extends BaseActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Global.loadTheme(this); + Global.initTitleType(this); Global.initHttpClient(this); Global.initLoadImages(this); Global.initHighRes(this); @@ -62,7 +63,6 @@ public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main, menu); menu.findItem(R.id.action_settings).setVisible(false); menu.findItem(R.id.action_login).setVisible(false); - menu.findItem(R.id.random).setVisible(false); if(online||Login.isLogged())menu.findItem(R.id.online_favorite).setVisible(true); menu.findItem(R.id.online_favorite).setTitle(online?R.string.offline_favorites:R.string.online_favorites); final androidx.appcompat.widget.SearchView searchView=(androidx.appcompat.widget.SearchView)menu.findItem(R.id.search).getActionView(); diff --git a/app/src/main/java/com/dar/nclientv2/GalleryActivity.java b/app/src/main/java/com/dar/nclientv2/GalleryActivity.java index 7d6dd8d4..107aabc2 100644 --- a/app/src/main/java/com/dar/nclientv2/GalleryActivity.java +++ b/app/src/main/java/com/dar/nclientv2/GalleryActivity.java @@ -42,6 +42,7 @@ public class GalleryActivity extends BaseActivity{ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Global.loadTheme(this); + Global.initTitleType(this); Global.initHttpClient(this); Global.loadNotificationChannel(this); Global.initColumnCount(this); @@ -115,7 +116,6 @@ public void loadMenu(){ menu.findItem(R.id.add_online_gallery).setTitle(x?R.string.remove_from_online_favorites:R.string.add_to_online_favorite); menu.findItem(R.id.add_online_gallery).setIcon(x?R.drawable.ic_star:R.drawable.ic_star_border); } - menu.findItem(R.id.add_online_gallery).setTitle(Login.isOnlineFavorite(gallery.getId())?R.string.remove_from_online_favorites:R.string.add_to_online_favorite); menu.findItem(R.id.share).setVisible(gallery!=null&&gallery.isValid()); menu.findItem(R.id.favorite_manager).setIcon((isFavorite=Favorites.isFavorite(gallery))?R.drawable.ic_favorite:R.drawable.ic_favorite_border); menu.findItem(R.id.load_internet).setVisible(isLocal&&gallery!=null&&gallery.getId()!=-1); @@ -127,16 +127,16 @@ public boolean onCreateOptionsMenu(Menu menu) { this.menu=menu; menu.findItem(R.id.add_online_gallery).setVisible(!isLocal&&Login.isLogged()); + menu.findItem(R.id.favorite_manager).setVisible(!isLocal||isFavorite); + menu.findItem(R.id.download_gallery).setVisible(!isLocal); + menu.findItem(R.id.related).setVisible(!isLocal); + if(gallery!=null)loadMenu(); Global.setTint(menu.findItem(R.id.download_gallery).getIcon()); Global.setTint(menu.findItem(R.id.load_internet).getIcon()); Global.setTint(menu.findItem(R.id.change_view).getIcon()); Global.setTint(menu.findItem(R.id.share).getIcon()); Global.setTint(menu.findItem(R.id.related).getIcon()); Global.setTint(menu.findItem(R.id.favorite_manager).getIcon()); - menu.findItem(R.id.favorite_manager).setVisible(!isLocal||isFavorite); - menu.findItem(R.id.download_gallery).setVisible(!isLocal); - menu.findItem(R.id.related).setVisible(!isLocal); - if(gallery!=null)loadMenu(); updateColumnCount(false); return true; } @@ -181,7 +181,7 @@ public void onResponse(@NonNull Call call,@NonNull Response response){ /*Intent intent = new Intent(this, MainActivity.class); intent.putExtra(getPackageName() + ".RELATED", gallery.getId()); startActivity(intent);*/ - recycler.smoothScrollToPosition(recycler.getAdapter().getItemCount()-1); + recycler.smoothScrollToPosition(recycler.getAdapter().getItemCount()); break; case R.id.favorite_manager: if(isFavorite){ diff --git a/app/src/main/java/com/dar/nclientv2/LocalActivity.java b/app/src/main/java/com/dar/nclientv2/LocalActivity.java index 63b58dbd..67f138f6 100644 --- a/app/src/main/java/com/dar/nclientv2/LocalActivity.java +++ b/app/src/main/java/com/dar/nclientv2/LocalActivity.java @@ -39,7 +39,6 @@ public boolean onCreateOptionsMenu(Menu menu) { menu.findItem(R.id.action_settings).setVisible(false); menu.findItem(R.id.action_login).setVisible(false); menu.findItem(R.id.open_browser).setVisible(false); - menu.findItem(R.id.random).setVisible(false); Global.setTint(menu.findItem(R.id.search).getIcon()); final androidx.appcompat.widget.SearchView searchView=(androidx.appcompat.widget.SearchView)menu.findItem(R.id.search).getActionView(); searchView.setOnQueryTextListener(new androidx.appcompat.widget.SearchView.OnQueryTextListener() { diff --git a/app/src/main/java/com/dar/nclientv2/MainActivity.java b/app/src/main/java/com/dar/nclientv2/MainActivity.java index 154e1ef9..6fb085bd 100644 --- a/app/src/main/java/com/dar/nclientv2/MainActivity.java +++ b/app/src/main/java/com/dar/nclientv2/MainActivity.java @@ -45,6 +45,7 @@ public class MainActivity extends BaseActivity implements NavigationView.OnNavigationItemSelectedListener { private Inspector inspector=null; + private NavigationView navigationView; private Tag tag; private int related=-1; public void setInspector(Inspector inspector) { @@ -56,7 +57,6 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Global.loadTheme(this); Global.initHttpClient(this); - Global.initTitleType(this); Global.initRemoveIgnoredGalleries(this); Global.initHighRes(this); Global.initOnlyTag(this); @@ -79,16 +79,13 @@ protected void onCreate(Bundle savedInstanceState) { drawer.addDrawerListener(toggle); toggle.syncState(); - NavigationView navigationView = findViewById(R.id.nav_view); + + navigationView = findViewById(R.id.nav_view); changeNavigationImage(navigationView); navigationView.setNavigationItemSelectedListener(this); - switch (Global.getTitleType()){ - case PRETTY:navigationView.setCheckedItem(R.id.pretty_title);break; - case ENGLISH:navigationView.setCheckedItem(R.id.english_title);break; - case JAPANESE:navigationView.setCheckedItem(R.id.japanese_title);break; - } navigationView.getMenu().findItem(R.id.by_popular).setIcon(Global.isByPopular()?R.drawable.ic_check:R.drawable.ic_close); + navigationView.getMenu().findItem(R.id.online_favorite_manager).setVisible(com.dar.nclientv2.settings.Login.isLogged()); recycler=findViewById(R.id.recycler); refresher=findViewById(R.id.refresher); prepareUpdateIcon(); @@ -253,6 +250,7 @@ protected void onResume() { super.onResume(); ACRA.getErrorReporter().setEnabled(getSharedPreferences("Settings",0).getBoolean(getString(R.string.key_send_report),true)); com.dar.nclientv2.settings.Login.initUseAccountTag(this); + if(com.dar.nclientv2.settings.Login.isLogged())navigationView.getMenu().findItem(R.id.online_favorite_manager).setVisible(true); if(setting!=null){ Global.initHighRes(this);Global.initOnlyTag(this);Global.initInfiniteScroll(this);Global.initRemoveIgnoredGalleries(this); if(com.dar.nclientv2.settings.Login.isLogged()!=setting.logged)supportInvalidateOptionsMenu(); @@ -287,12 +285,10 @@ public boolean onCreateOptionsMenu(Menu menu) { Global.setTint(menu.findItem(R.id.tag_manager).getIcon()); } menu.findItem(R.id.action_settings).setVisible(false); - menu.findItem(R.id.random).setVisible(false); menu.findItem(R.id.action_login).setVisible(false); }else { menu.findItem(R.id.action_login).setTitle(com.dar.nclientv2.settings.Login.isLogged()?R.string.logout:R.string.login); Global.setTint(menu.findItem(R.id.search).getIcon()); - Global.setTint(menu.findItem(R.id.random).getIcon()); } searchView =(SearchView)menu.findItem(R.id.search).getActionView(); if(related!=-1){ @@ -351,10 +347,6 @@ public boolean onOptionsItemSelected(MenuItem item) { i = new Intent(this, SettingsActivity.class); startActivity(i); break; - case R.id.random: - i = new Intent(this, RandomActivity.class); - startActivity(i); - break; case R.id.open_browser: if(inspector!=null) { i = new Intent(Intent.ACTION_VIEW); @@ -380,19 +372,16 @@ private void showLogoutForm(final MenuItem item) { builder.setIcon(R.drawable.ic_exit_to_app).setTitle(R.string.logout).setMessage(R.string.are_you_sure); builder.setPositiveButton(android.R.string.yes, (dialogInterface, i) -> { Login.logout(MainActivity.this); + navigationView.getMenu().findItem(R.id.online_favorite_manager).setVisible(false); item.setTitle(R.string.login); }).setNegativeButton(android.R.string.no,null).show(); } - @Override public boolean onNavigationItemSelected(@NonNull MenuItem item) { // Handle navigation view item clicks here. Intent intent; int id = item.getItemId(); switch (id){ - case R.id.pretty_title:Global.updateTitleType(this, TitleType.PRETTY);break; - case R.id.english_title:Global.updateTitleType(this, TitleType.ENGLISH);break; - case R.id.japanese_title:Global.updateTitleType(this, TitleType.JAPANESE);break; case R.id.by_popular:item.setIcon(Global.updateByPopular(this,!Global.isByPopular())?R.drawable.ic_check:R.drawable.ic_close);new Inspector(this,1,Inspector.getActualQuery(),Inspector.getActualRequestType());break; case R.id.only_language:updateLanguageIcon(item,true);break; case R.id.downloaded:if(Global.hasStoragePermission(this))startLocalActivity();else requestStorage();break; @@ -400,6 +389,15 @@ public boolean onNavigationItemSelected(@NonNull MenuItem item) { intent=new Intent(this,FavoriteActivity.class); startActivity(intent); break; + case R.id.online_favorite_manager: + intent=new Intent(this,FavoriteActivity.class); + intent.putExtra(getPackageName()+".ONLINE",true); + startActivity(intent); + break; + case R.id.random: + intent = new Intent(this, RandomActivity.class); + startActivity(intent); + break; case R.id.tag_manager: intent=new Intent(this,TagFilter.class); startActivity(intent); diff --git a/app/src/main/java/com/dar/nclientv2/RandomActivity.java b/app/src/main/java/com/dar/nclientv2/RandomActivity.java index fb28439e..a1da1117 100644 --- a/app/src/main/java/com/dar/nclientv2/RandomActivity.java +++ b/app/src/main/java/com/dar/nclientv2/RandomActivity.java @@ -4,6 +4,7 @@ import android.content.res.ColorStateList; import android.graphics.Color; import android.os.Bundle; +import android.view.MenuItem; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; @@ -15,6 +16,7 @@ import com.google.android.material.floatingactionbutton.FloatingActionButton; import androidx.appcompat.app.AppCompatActivity; +import androidx.appcompat.widget.Toolbar; import androidx.core.widget.ImageViewCompat; public class RandomActivity extends AppCompatActivity { @@ -31,10 +33,15 @@ protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Global.loadTheme(this); Global.initHttpClient(this); + Global.initTitleType(this); Global.initImageQuality(this); Favorites.countFavorite(); Global.initLoadImages(this); setContentView(R.layout.activity_random); + Toolbar toolbar=findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + getSupportActionBar().setDisplayHomeAsUpEnabled(true); + getSupportActionBar().setDisplayShowTitleEnabled(true); FloatingActionButton shuffle = findViewById(R.id.shuffle); censor=findViewById(R.id.censor); language=findViewById(R.id.language); @@ -80,6 +87,17 @@ protected void onCreate(Bundle savedInstanceState) { Global.setTint(favorite.getDrawable()); Global.setTint(share.getDrawable()); } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()){ + case android.R.id.home: + finish(); + return true; + } + return super.onOptionsItemSelected(item); + } + public static Gallery loadedGallery=null; private boolean isFavorite; public void loadGallery(Gallery gallery){ diff --git a/app/src/main/java/com/dar/nclientv2/SettingsActivity.java b/app/src/main/java/com/dar/nclientv2/SettingsActivity.java index 4ec3f258..db54d0f2 100644 --- a/app/src/main/java/com/dar/nclientv2/SettingsActivity.java +++ b/app/src/main/java/com/dar/nclientv2/SettingsActivity.java @@ -57,6 +57,7 @@ public void onCreatePreferences(Bundle savedInstanceState, String rootKey){ act.recreate(); return true; }); + findPreference("version").setTitle(getString(R.string.app_version_format,Global.getVersionName(getContext()))); findPreference(getString(R.string.key_cache)).setOnPreferenceClickListener(preference -> { AlertDialog.Builder builder=new AlertDialog.Builder(getActivity()); builder.setTitle(R.string.clear_cache); diff --git a/app/src/main/java/com/dar/nclientv2/ZoomActivity.java b/app/src/main/java/com/dar/nclientv2/ZoomActivity.java index 956fd44d..b0f7cc75 100644 --- a/app/src/main/java/com/dar/nclientv2/ZoomActivity.java +++ b/app/src/main/java/com/dar/nclientv2/ZoomActivity.java @@ -66,6 +66,7 @@ public class ZoomActivity extends AppCompatActivity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Global.loadTheme(this); + Global.initTitleType(this); Global.initHideFromGallery(this); side=getSharedPreferences("Settings",0).getBoolean("volumeSide",true); overrideVolume=getSharedPreferences("Settings",0).getBoolean(getString(R.string.key_override_volume),true); diff --git a/app/src/main/java/com/dar/nclientv2/adapters/GalleryAdapter.java b/app/src/main/java/com/dar/nclientv2/adapters/GalleryAdapter.java index 5cf09a46..3f864b59 100644 --- a/app/src/main/java/com/dar/nclientv2/adapters/GalleryAdapter.java +++ b/app/src/main/java/com/dar/nclientv2/adapters/GalleryAdapter.java @@ -2,6 +2,7 @@ import android.content.Intent; import android.util.Log; +import android.util.TypedValue; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; diff --git a/app/src/main/java/com/dar/nclientv2/api/Inspector.java b/app/src/main/java/com/dar/nclientv2/api/Inspector.java index 75d92a3f..ece95877 100644 --- a/app/src/main/java/com/dar/nclientv2/api/Inspector.java +++ b/app/src/main/java/com/dar/nclientv2/api/Inspector.java @@ -118,7 +118,7 @@ public void onResponse(@NonNull Call call,@NonNull Response response) throws IOE Log.d(Global.LOGTAG,"Response of "+url); Document d=Jsoup.parse(response.body().byteStream(),"UTF-8","https://nhentai.net"); - parseGalleries(requestType==ApiRequestType.BYSINGLE?d.getElementsByTag("script"):d.getElementsByClass("gallery")); + parseGalleries(d.getElementsByTag("script"),d.getElementsByClass("gallery")); for (Gallery x:galleries)if(x.getId()>Global.getMaxId())Global.updateMaxId(activity,x.getId()); Elements elements=d.getElementsByClass("last"); if(elements.size()==1)findTotal(elements.first()); @@ -168,22 +168,22 @@ public static List parseGalleries(Elements e,ApiRequestType type)throws String x=e.last().html(); int s=x.indexOf("new N.gallery(")+14; x=x.substring(s,x.indexOf('\n',s)-2); - galleries.add(new Gallery(new JsonReader(new StringReader(x)))); + galleries.add(new Gallery(new JsonReader(new StringReader(x)), null)); } return galleries; } - private void parseGalleries(Elements e)throws IOException{ - galleries=new ArrayList<>(requestType==ApiRequestType.BYSINGLE?1:e.size()); - if(requestType!=ApiRequestType.BYSINGLE){ - for(Element el:e)galleries.add(new Gallery(el)); - }else{ - if(e.last()==null)return; - String str=e.last().html(); + private void parseGalleries(Elements scripts, Elements gals)throws IOException{ + Listgalle=new ArrayList<>(gals.size()); + for(Element el:gals)galle.add(new Gallery(el)); + if(requestType==ApiRequestType.BYSINGLE){ + galleries=new ArrayList<>(1); + if(scripts.last()==null)return; + String str=scripts.last().html(); int s=str.indexOf("new N.gallery(")+14,s1=str.indexOf('\n', s) - 2; if(s==13||s1<0)return; str = str.substring(s, s1); - galleries.add(new Gallery(new JsonReader(new StringReader(str)))); - } + galleries.add(new Gallery(new JsonReader(new StringReader(str)),galle)); + }else galleries=galle; } private String appendedLanguage(){ diff --git a/app/src/main/java/com/dar/nclientv2/api/RandomLoader.java b/app/src/main/java/com/dar/nclientv2/api/RandomLoader.java index 1f37a98d..87dce92f 100644 --- a/app/src/main/java/com/dar/nclientv2/api/RandomLoader.java +++ b/app/src/main/java/com/dar/nclientv2/api/RandomLoader.java @@ -56,7 +56,7 @@ public void onResponse(@NonNull Call call, @NonNull Response response) throws IO int s=str.indexOf("new N.gallery(")+14,s1=str.indexOf('\n', s) - 2; if(s==13||s1<0)return; str = str.substring(s, s1); - Gallery x = new Gallery(new JsonReader(new StringReader(str))); + Gallery x = new Gallery(new JsonReader(new StringReader(str)), null); if (!x.isValid()) { loadRandomGallery(); return; diff --git a/app/src/main/java/com/dar/nclientv2/api/components/Gallery.java b/app/src/main/java/com/dar/nclientv2/api/components/Gallery.java index 34d1c984..09f83bee 100644 --- a/app/src/main/java/com/dar/nclientv2/api/components/Gallery.java +++ b/app/src/main/java/com/dar/nclientv2/api/components/Gallery.java @@ -21,6 +21,7 @@ import com.dar.nclientv2.settings.TagV2; import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import java.io.IOException; @@ -52,6 +53,7 @@ public Gallery(Element e){ temp=a.hasAttr("data-src")?a.attr("data-src"):a.attr("src"); mediaId=Integer.parseInt(temp.substring(temp.indexOf("galleries")+10,temp.lastIndexOf('/'))); thumbnail=charToExt(temp.charAt(temp.length()-3)); + cover=ImageExt.JPG;pages=new ImageExt[0]; titles[TitleType.ENGLISH.ordinal()]=e.getElementsByTag("div").first().text(); } @@ -167,6 +169,7 @@ public void readPagePath(String path)throws IOException{ } private Gallery(Parcel in){ uploadDate=new Date(in.readLong()); + if(uploadDate.getTime()==0)uploadDate=null; favoriteCount=in.readInt(); id=in.readInt(); pageCount=in.readInt(); @@ -188,6 +191,10 @@ private Gallery(Parcel in){ tags[a]=new Tag[l]; in.readTypedArray(tags[a],Tag.CREATOR); } + if(in.readByte()==1){ + related=new ArrayList<>(5); + for(int j=0;j<5;j++)related.add(in.readParcelable(Gallery.class.getClassLoader())); + } } public boolean isRelatedLoaded(){return related!=null;} @@ -196,6 +203,7 @@ public List getRelated(){ } public void loadRelated(GalleryAdapter adapter){ + if(isRelatedLoaded())return; String url=String.format(Locale.US,"https://nhentai.net/g/%d",adapter.getGallery().getId()); Global.client.newCall(new Request.Builder().url(url).build()).enqueue(new Callback(){ @Override @@ -213,7 +221,7 @@ public void onResponse(Call call, Response response) throws IOException{ @Override public void writeToParcel(Parcel dest, int flags) { - dest.writeLong(uploadDate.getTime()); + dest.writeLong(uploadDate==null?0:uploadDate.getTime()); dest.writeInt(favoriteCount); dest.writeInt(id); dest.writeInt(pageCount); @@ -232,13 +240,18 @@ public void writeToParcel(Parcel dest, int flags) { dest.writeInt(l); if(l>0) dest.writeTypedArray(x,Parcelable.PARCELABLE_WRITE_RETURN_VALUE); } + boolean x=isRelatedLoaded(); + dest.writeByte((byte)(x?1:0)); + if(x){ + for(Gallery g:related)dest.writeParcelable(g,Parcelable.PARCELABLE_WRITE_RETURN_VALUE); + } } @Override public boolean isValid() { return valid; } - public Gallery(JsonReader jr) throws IOException { + public Gallery(JsonReader jr, List related) throws IOException { valid=true; jr.beginObject(); while(jr.peek()!= JsonToken.END_OBJECT){ @@ -256,6 +269,7 @@ public Gallery(JsonReader jr) throws IOException { } } + this.related=related; if(uploadDate==null)uploadDate=new Date(0); jr.endObject(); } @@ -591,11 +605,13 @@ public Gallery(String x) throws IOException{ } jr.close(); } + public static Gallery galleryFromId(int id) throws IOException{ - String url="https://nhentai.net/api/gallery/"+id; + String url="https://nhentai.net/g/"+id; Log.d(Global.LOGTAG,url); Response response=Global.client.newCall(new Request.Builder().url(url).build()).execute(); - return new Gallery(new JsonReader(response.body().charStream())); + Document document=Jsoup.parse(response.body().byteStream(),"UTF-8","https://nhentai.net"); + return Inspector.parseGalleries(document.getElementsByTag("script"),ApiRequestType.BYSINGLE).get(0); } public boolean hasIgnoredTags(String s){ for(Tag[]t:tags)if(t!=null)for(Tag t1:t)if(s.contains(t1.toQueryTag()))return true; diff --git a/app/src/main/java/com/dar/nclientv2/async/scrape/TagPageScraper.java b/app/src/main/java/com/dar/nclientv2/async/scrape/TagPageScraper.java index 865c5ed8..7daced74 100644 --- a/app/src/main/java/com/dar/nclientv2/async/scrape/TagPageScraper.java +++ b/app/src/main/java/com/dar/nclientv2/async/scrape/TagPageScraper.java @@ -22,7 +22,7 @@ class TagPageScraper extends Thread{ private final TagScrapeStatus status; - public static final int MIN_TAG_COUNT=2; + public static final int MIN_TAG_COUNT=5; private int minReached=99999; private boolean showed=false; diff --git a/app/src/main/java/com/dar/nclientv2/settings/Global.java b/app/src/main/java/com/dar/nclientv2/settings/Global.java index 9f025e09..3bcf458f 100644 --- a/app/src/main/java/com/dar/nclientv2/settings/Global.java +++ b/app/src/main/java/com/dar/nclientv2/settings/Global.java @@ -50,8 +50,8 @@ public enum ThemeScheme{LIGHT,DARK,BLACK} public static final File DOWNLOADFOLDER=new File(Environment.getExternalStorageDirectory(),"NClientV2"); public static final String LOGTAG="NCLIENTLOG"; public static final String CHANNEL_ID1="download_gallery",CHANNEL_ID2="create_pdf"; - private static TitleType titleType=TitleType.PRETTY; private static Language onlyLanguage=null; + private static TitleType titleType; private static boolean byPopular,loadImages,hideFromGallery,highRes,onlyTag,infiniteScroll,removeIgnoredGalleries,sendReport; private static ThemeScheme theme; private static int notificationId,columnCount,maxId,imageQuality,galleryWidth=-1, galleryHeight =-1; @@ -76,7 +76,14 @@ public static boolean getSendReport(){ return sendReport; } - public static void initTitleType (@NonNull Context context){titleType=TitleType.values()[context.getSharedPreferences("Settings", 0).getInt(context.getString(R.string.key_title_type),1)];} + public static void initTitleType(@NonNull Context context){ + String s=context.getSharedPreferences("Settings", 0).getString(context.getString(R.string.key_title_type),"pretty"); + switch (s){ + case "pretty":titleType= TitleType.PRETTY;break; + case "english":titleType= TitleType.ENGLISH;break; + case "japanese":titleType= TitleType.JAPANESE;break; + } + } public static void initSendReport (@NonNull Context context){sendReport=context.getSharedPreferences("Settings", 0).getBoolean(context.getString(R.string.key_send_report),true);} public static void initByPopular (@NonNull Context context){byPopular=context.getSharedPreferences("Settings", 0).getBoolean(context.getString(R.string.key_by_popular),false);} public static void initInfiniteScroll (@NonNull Context context){infiniteScroll=context.getSharedPreferences("Settings", 0).getBoolean(context.getString(R.string.key_infinite_scroll),false);} @@ -86,7 +93,7 @@ public static boolean getSendReport(){ public static void initOnlyTag (@NonNull Context context){onlyTag=context.getSharedPreferences("Settings", 0).getBoolean(context.getString(R.string.key_ignore_tags),true);} public static boolean initLoadImages (@NonNull Context context){loadImages=context.getSharedPreferences("Settings", 0).getBoolean(context.getString(R.string.key_load_images),true);return loadImages;} public static void initOnlyLanguage (@NonNull Context context){int x=context.getSharedPreferences("Settings", 0).getInt(context.getString(R.string.key_only_language),-1);onlyLanguage=x==-1?null:Language.values()[x];} - public static void initColumnCount (@NonNull Context context){columnCount=context.getSharedPreferences("Settings", 0).getInt(context.getString(R.string.key_column_count),1);} + public static void initColumnCount (@NonNull Context context){columnCount=context.getSharedPreferences("Settings", 0).getInt(context.getString(R.string.key_column_count),2);} public static int initImageQuality (@NonNull Context context){imageQuality=context.getSharedPreferences("Settings", 0).getInt(context.getString(R.string.key_image_quality),90);return imageQuality;} public static void initMaxId (@NonNull Context context){maxId=context.getSharedPreferences("Settings", 0).getInt(context.getString(R.string.key_max_id),236000);} @@ -175,7 +182,6 @@ public static void saveNoMedia(Context context) { } } - public static void updateTitleType(@NonNull Context context, TitleType type){context.getSharedPreferences("Settings", 0).edit().putInt(context.getString((R.string.key_title_type)),type.ordinal()).apply();titleType=type; } public static void updateOnlyLanguage(@NonNull Context context, @Nullable Language type){context.getSharedPreferences("Settings", 0).edit().putInt(context.getString((R.string.key_only_language)),type==null?-1:type.ordinal()).apply();onlyLanguage=type; } public static boolean updateByPopular(@NonNull Context context,boolean popular){context.getSharedPreferences("Settings", 0).edit().putBoolean(context.getString((R.string.key_by_popular)),popular).apply();byPopular=popular; return byPopular;} public static boolean updateLoadImages(@NonNull Context context,boolean load){context.getSharedPreferences("Settings", 0).edit().putBoolean(context.getString((R.string.key_load_images)),load).apply();loadImages=load; return loadImages;} @@ -240,7 +246,9 @@ public static void loadImage(String url, final ImageView imageView,boolean force else Picasso.get().load((String)null).placeholder(getLogo(imageView.getResources())).into(imageView); } public static void loadImage(File file, ImageView imageView){ - Picasso.get().load(file).placeholder(getLogo(imageView.getResources())).into(imageView); + if(loadImages) Picasso.get().load(file).placeholder(getLogo(imageView.getResources())).into(imageView); + else Picasso.get().load((String)null).placeholder(getLogo(imageView.getResources())).into(imageView); + } public static void loadImage(@DrawableRes int drawable, ImageView imageView){ Picasso.get().load((String)null).placeholder(imageView.getResources().getDrawable(drawable)).into(imageView); diff --git a/app/src/main/res/layout-land/activity_random.xml b/app/src/main/res/layout-land/activity_random.xml index 1a1db824..0490eac7 100644 --- a/app/src/main/res/layout-land/activity_random.xml +++ b/app/src/main/res/layout-land/activity_random.xml @@ -6,6 +6,15 @@ android:layout_height="match_parent" tools:context=".RandomActivity"> + @@ -64,7 +73,7 @@ app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintDimensionRatio="3:4" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toTopOf="parent" + app:layout_constraintTop_toBottomOf="@+id/toolbar" android:layout_marginLeft="8dp" /> + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_random.xml b/app/src/main/res/layout/activity_random.xml index 18af490f..6635613f 100644 --- a/app/src/main/res/layout/activity_random.xml +++ b/app/src/main/res/layout/activity_random.xml @@ -6,6 +6,17 @@ android:layout_height="match_parent" tools:context=".RandomActivity"> + + + app:layout_constraintTop_toBottomOf="@+id/toolbar" + tools:ignore="SpUsage" /> + \ No newline at end of file diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml index 06672c3c..8e3cfc3a 100644 --- a/app/src/main/res/menu/activity_main_drawer.xml +++ b/app/src/main/res/menu/activity_main_drawer.xml @@ -7,10 +7,19 @@ android:id="@+id/downloaded" android:icon="@drawable/ic_file" android:title="@string/downloaded_manga" /> + + - - - - - - - - - - - - diff --git a/app/src/main/res/menu/gallery.xml b/app/src/main/res/menu/gallery.xml index d68df13e..686bed23 100644 --- a/app/src/main/res/menu/gallery.xml +++ b/app/src/main/res/menu/gallery.xml @@ -35,7 +35,7 @@ - - title_type + title_type_str is_by_popular load_images column_count @@ -33,8 +33,8 @@ Other tags will be queried when a tag is selected from the gallery menu Best resolution images will be loaded (more data) Thumbnails images will be loaded (less data) - The images will be loaded from Internet - The images won\'t be loaded from Internet + Images will be loaded in all activities + Images will be loaded only in single page viewer Use the account tags into the search query (Local tags will have priority) Resolution quality in percentage when a gallery is downloaded Account tags will be ignored for the query @@ -209,6 +209,16 @@ The volume keys will change system volume Go to next page with up volume Go to next page with down volume + Change title type + Select the default title type for the galleries + + NClientV2 %s + Search settings + Global settings + Images settings + Miscellaneous + Update settings + Online favorite manga @@ -221,4 +231,15 @@ dark black + + + English + Japanese + Pretty + + + english + japanese + pretty + diff --git a/app/src/main/res/xml/settings.xml b/app/src/main/res/xml/settings.xml index 9f194873..aa501123 100644 --- a/app/src/main/res/xml/settings.xml +++ b/app/src/main/res/xml/settings.xml @@ -1,6 +1,7 @@ - + + + + - + + + + + + + + - + - - + + + + - + + - - - + + \ No newline at end of file