From 9bd08e8c6ba645d0def42b199db277ccaf304e07 Mon Sep 17 00:00:00 2001 From: Udit Aggarwal Date: Wed, 27 Jun 2018 23:52:31 +0530 Subject: [PATCH] Major Commit - 0.2.8 - Show Detail & Release Activity - Lists show synopsis, latest releases & its batches - Updated UI - Updated DialogX UI to new Design - Optimized App & Removed some older dependencies - Updated README.md --- .idea/caches/build_file_checksums.ser | Bin 537 -> 537 bytes README.md | 14 +- app/build.gradle | 14 +- app/src/main/AndroidManifest.xml | 9 +- .../info/horriblesubs/sher/activity/Home.java | 31 +- .../info/horriblesubs/sher/activity/Show.java | 327 ++++++++++++++++++ .../sher/adapter/ItemRecycler.java | 4 +- .../sher/adapter/ListRecycler.java | 4 +- .../sher/adapter/ReleaseRecycler.java | 14 +- .../sher/adapter/ScheduleRecycler.java | 4 +- .../sher/fragment/HomeFragment1.java | 10 + .../sher/fragment/HomeFragment2.java | 8 +- .../sher/fragment/ShowFragment1.java | 154 +++++++++ .../sher/fragment/ShowFragment2.java | 74 ++++ .../sher/fragment/ShowFragment3.java | 81 +++++ .../horriblesubs/sher/old/activity/About.java | 2 +- .../sher/old/activity/Detail.java | 251 -------------- .../sher/old/fragment/Details.java | 31 -- .../sher/old/fragment/ShowReleases.java | 47 --- .../sher/old/task/FetchPageItem.java | 53 --- .../sher/old/task/FetchReleaseItems.java | 79 ----- .../sher/old/task/FetchShowReleases.java | 50 --- .../sher/old/task/LoadPageItem.java | 49 --- .../sher/{old => }/service/IdService.java | 2 +- .../sher/{old => }/service/NotifyService.java | 2 +- .../info/horriblesubs/sher/util/DialogX.java | 17 +- app/src/main/res/layout/activity_home.xml | 2 +- app/src/main/res/layout/activity_home_x.xml | 25 -- app/src/main/res/layout/dialog_layout.xml | 185 +++++----- app/src/main/res/layout/fragment_home_2.xml | 2 +- app/src/main/res/layout/fragment_show_1.xml | 225 ++++++++++++ app/src/main/res/layout/fragment_show_2.xml | 70 ++++ app/src/main/res/values/colors.xml | 5 + app/src/main/res/values/strings.xml | 3 + app/src/main/res/values/styles.xml | 4 + gradle.properties | 1 - 36 files changed, 1105 insertions(+), 748 deletions(-) create mode 100644 app/src/main/java/info/horriblesubs/sher/activity/Show.java create mode 100644 app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment1.java create mode 100644 app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment2.java create mode 100644 app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment3.java delete mode 100644 app/src/main/java/info/horriblesubs/sher/old/activity/Detail.java delete mode 100644 app/src/main/java/info/horriblesubs/sher/old/fragment/Details.java delete mode 100644 app/src/main/java/info/horriblesubs/sher/old/fragment/ShowReleases.java delete mode 100644 app/src/main/java/info/horriblesubs/sher/old/task/FetchPageItem.java delete mode 100644 app/src/main/java/info/horriblesubs/sher/old/task/FetchReleaseItems.java delete mode 100644 app/src/main/java/info/horriblesubs/sher/old/task/FetchShowReleases.java delete mode 100644 app/src/main/java/info/horriblesubs/sher/old/task/LoadPageItem.java rename app/src/main/java/info/horriblesubs/sher/{old => }/service/IdService.java (96%) rename app/src/main/java/info/horriblesubs/sher/{old => }/service/NotifyService.java (98%) delete mode 100644 app/src/main/res/layout/activity_home_x.xml create mode 100644 app/src/main/res/layout/fragment_show_1.xml create mode 100644 app/src/main/res/layout/fragment_show_2.xml diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser index e41ddba22426d0a7ba7d0aebaf5ca35d94a14f79..d6060980049bc658a50630d9df11040a67bf1099 100644 GIT binary patch delta 53 zcmV-50LuTF1epYom;^#^?1+(^ybypPOyjWh5?5f($`ppWDT0$|0iY52AJ-h5QF)m| LJ)HNO73arzhoczz delta 53 zcmV-50LuTF1epYom;^z#c$<-&ybx?DU*s@(jQ{stY4TvjT+5Sa0iY3T-hes38}JX` L19+0RlC?Q_pfnki diff --git a/README.md b/README.md index b7187c5..8920039 100644 --- a/README.md +++ b/README.md @@ -24,13 +24,11 @@ Horrible Subs uses number of open source projects to work properly: * In App Search for listing available subs from Horrible Subs * Views All as well as Current Shows * Lists full weeks schedule day wise(According to User Time) - -Mentioned features might not work in upcoming releases but will be fixed soon - * ~~Show pages for previous show releases~~ - * ~~Search in List~~ + * Show Activity for viewing previous show releases and show details #### Release Updates ``` +Added Show Activity with New UI & Updated Dialog UI with new design language Major Commit - June 27, 2018 Schedule Activity - Listing Full Schedule Major Commit - June 27, 2018 Shows Activity - Listing all & current shows, Improved UI Major Commit - June 27, 2018 New Search Activity, Improved Home UI with SearchView, Optimized Data Models Major Commit - June 27, 2018 @@ -64,10 +62,10 @@ Currently Listing Latest 60 Releases & Reimplemented some features #### Download | Type | Date | Version | Api | Download | -| ------ | ------ | ------ | ------ | ------ | -| Alpha 2 | June 27 2018 | 27 | v4 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.7/app-debug.apk) | -| Alpha 1 | June 27 2018 | 25 | v4 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.5/app-debug.apk) | -| **Latest Release** | **April 25, 2018** | **22** | **v3** | **[Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.2/app-debug.apk)** | +| Beta 3 | June 27, | 28 | v4 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.8/app-debug.apk) | +| Alpha 2 | June 27, 2018 | 27 | v4 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.7/app-debug.apk) | +| Alpha 1 | June 27, 2018 | 25 | v4 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.5/app-debug.apk) | +| Release 2 | April 25, 2018| 22| v3 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.2/app-debug.apk) | | Release 1 | April 24, 2018 | 21 | v3 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.2.1/hs-21.apk) | | Beta 2 | April 1, 2018 | 18 | v3 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.1.8/app-debug.apk) | | Beta 1 | March 29, 2018 | 16 | v2 | [Click Here](https://github.com/Sher1234/HorribleSubs/releases/download/hs-0.1.6/app-debug.apk) | diff --git a/app/build.gradle b/app/build.gradle index bf3db68..21c4703 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -6,8 +6,8 @@ android { applicationId "info.horriblesubs.sher" minSdkVersion 15 targetSdkVersion 28 - versionCode 27 - versionName "0.2.7" + versionCode 28 + versionName "0.2.8" multiDexEnabled = true vectorDrawables.useSupportLibrary = true testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" @@ -17,35 +17,29 @@ android { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro' } - buildTypes.each { - it.buildConfigField("String", "HAPI", HAPI) - } } } dependencies { // android support library - api 'com.android.support:design:28.0.0-alpha3' implementation 'com.android.support:multidex:1.0.3' implementation 'com.android.support:design:28.0.0-alpha3' implementation 'com.android.support:support-v4:28.0.0-alpha3' - implementation 'com.android.support:exifinterface:28.0.0-alpha3' implementation 'com.android.support:appcompat-v7:28.0.0-alpha3' - implementation 'com.android.support.constraint:constraint-layout:1.1.2' + implementation 'com.android.support:exifinterface:28.0.0-alpha3' implementation 'com.android.support:support-vector-drawable:28.0.0-alpha3' // firebase library // implementation 'com.google.firebase:firebase-ads:15.0.1' implementation 'com.google.firebase:firebase-firestore:17.0.2' implementation 'com.google.firebase:firebase-messaging:17.0.0' - implementation 'com.google.android.gms:play-services-auth:15.0.1' implementation 'com.squareup.okhttp3:okhttp:3.10.0' + implementation 'com.squareup.picasso:picasso:2.71828' implementation 'com.squareup.retrofit2:retrofit:2.4.0' implementation 'com.squareup.retrofit2:converter-gson:2.4.0' //other libraries implementation 'com.google.code.gson:gson:2.8.5' - implementation 'com.squareup.picasso:picasso:2.71828' testImplementation 'junit:junit:4.12' implementation 'org.jetbrains:annotations-java5:16.0.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a235aaa..4a8fca9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -20,7 +20,7 @@ tools:ignore="GoogleAppIndexingWarning"> @@ -28,7 +28,7 @@ @@ -88,9 +88,12 @@ android:theme="@style/AppTheme.NoActionBar" /> + items = new ArrayList<>(); - ArrayList sitems = new ArrayList<>(); - for (int i = 0; i < 60; i++) { - ReleaseItem item = new ReleaseItem(i + "", "", i + "", i + "", "", "", ""); - items.add(item); - ScheduleItem xitem = new ScheduleItem(i + "", "", i + "", "06 09:30 -07:00", true); - sitems.add(xitem); - } - response.schedule = sitems; - response.allBatches = items; - response.allSubs = items; - return response; - } - private void onLoadData(@NotNull HomeResponse homeResponse) { Fragment fragment = getSupportFragmentManager().findFragmentByTag(F_TAG); if (fragment != null) diff --git a/app/src/main/java/info/horriblesubs/sher/activity/Show.java b/app/src/main/java/info/horriblesubs/sher/activity/Show.java new file mode 100644 index 0000000..6e1dbc4 --- /dev/null +++ b/app/src/main/java/info/horriblesubs/sher/activity/Show.java @@ -0,0 +1,327 @@ +package info.horriblesubs.sher.activity; + +import android.annotation.SuppressLint; +import android.app.SearchManager; +import android.content.Intent; +import android.content.SharedPreferences; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.transition.ChangeTransform; +import android.support.transition.TransitionInflater; +import android.support.v4.app.Fragment; +import android.support.v4.app.FragmentManager; +import android.support.v4.app.FragmentPagerAdapter; +import android.support.v4.view.ViewPager; +import android.support.v7.app.AppCompatActivity; +import android.support.v7.widget.SearchView; +import android.support.v7.widget.Toolbar; +import android.view.Menu; +import android.view.MenuItem; +import android.view.View; +import android.widget.EditText; +import android.widget.Toast; + +import com.google.firebase.messaging.FirebaseMessaging; + +import org.jetbrains.annotations.NotNull; + +import java.util.ArrayList; + +import info.horriblesubs.sher.Api; +import info.horriblesubs.sher.AppController; +import info.horriblesubs.sher.R; +import info.horriblesubs.sher.fragment.ShowFragment1; +import info.horriblesubs.sher.model.base.ReleaseItem; +import info.horriblesubs.sher.model.base.ScheduleItem; +import info.horriblesubs.sher.model.response.HomeResponse; +import info.horriblesubs.sher.model.response.ShowResponse; +import info.horriblesubs.sher.util.DialogX; +import info.horriblesubs.sher.util.FragmentNavigation; +import retrofit2.Call; +import retrofit2.Callback; +import retrofit2.Response; +import retrofit2.Retrofit; + +@SuppressLint("StaticFieldLeak") +public class Show extends AppCompatActivity + implements FragmentNavigation, SearchView.OnQueryTextListener { + + private String link; + private ShowTask task; + private View progressBar; + private ViewPager viewPager; + private SearchView searchView; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_home); + Toolbar toolbar = findViewById(R.id.toolbar); + setSupportActionBar(toolbar); + + link = getIntent().getStringExtra("link"); + if (link == null || link.isEmpty()) + finish(); + + viewPager = findViewById(R.id.viewPager); + searchView = findViewById(R.id.searchView); + progressBar = findViewById(R.id.progressBar); + EditText editText = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); + editText.setTextColor(getResources().getColor(R.color.colorText)); + editText.setHintTextColor(getResources().getColor(R.color.colorAccent)); + editText.setTextSize((float) 13.5); + searchView.setOnQueryTextListener(this); + + task = new ShowTask(); + task.execute(); + // onLoadData(fakeHomeResponse()); + } + + @Override + public void onBackPressed() { + if (getSupportFragmentManager().getBackStackEntryCount() > 0) + getSupportFragmentManager().popBackStack(); + else + super.onBackPressed(); + } + + @Override + protected void onResume() { + super.onResume(); + if (searchView.getQuery() != null && !searchView.getQuery().toString().isEmpty()) + searchView.setQuery(null, false); + + } + + @Override + protected void onSaveInstanceState(Bundle outState) { + super.onSaveInstanceState(outState); + Fragment fragment = getSupportFragmentManager().findFragmentByTag(F_TAG); + if (fragment != null) + getSupportFragmentManager().putFragment(outState, F_TAG, fragment); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + getMenuInflater().inflate(R.menu.menu, menu); + return super.onCreateOptionsMenu(menu); + } + + @Override + public boolean onPrepareOptionsMenu(Menu menu) { + SharedPreferences sharedPreferences = getSharedPreferences(Api.Prefs, MODE_PRIVATE); + boolean b = sharedPreferences.getBoolean("notifications", false); + if (b) { + menu.findItem(R.id.notifications).setTitle("Disable Notifications"); + menu.findItem(R.id.notifications).setIcon(R.drawable.ic_notifications_on); + } else { + menu.findItem(R.id.notifications).setTitle("Enable Notifications"); + menu.findItem(R.id.notifications).setIcon(R.drawable.ic_notifications_off); + } + return super.onPrepareOptionsMenu(menu); + } + + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case R.id.notifications: + SharedPreferences sharedPreferences = getSharedPreferences(Api.Prefs, MODE_PRIVATE); + final boolean b = sharedPreferences.getBoolean("notifications", false); + final DialogX dialogX = new DialogX(this); + if (b) + dialogX.setTitle("Disable Notifications") + .setDescription("This will disable new release notifications, You will not be able receive notifications on any new release.") + .positiveButton("Ok", new View.OnClickListener() { + @Override + public void onClick(View v) { + removeNotificationAlert(); + dialogX.dismiss(); + } + }); + else + dialogX.setTitle("Enable Notifications") + .setDescription("This will enable new release notifications, You will receive notifications on every new release.") + .positiveButton("Ok", new View.OnClickListener() { + @Override + public void onClick(View v) { + setNotificationAlert(); + dialogX.dismiss(); + } + }); + dialogX.negativeButton("Cancel", new View.OnClickListener() { + @Override + public void onClick(View v) { + dialogX.dismiss(); + } + }); + dialogX.show(); + return true; + + case R.id.refresh: + if (task != null) + task.cancel(true); + task = null; + task = new ShowTask(); + task.execute(); + return true; + + case R.id.about: + return true; + + case R.id.shows: + startActivity(new Intent(this, Shows.class)); + return true; + + default: + return super.onOptionsItemSelected(item); + } + } + + private void removeNotificationAlert() { + SharedPreferences sharedPreferences = getSharedPreferences(Api.Prefs, MODE_PRIVATE); + sharedPreferences.edit().putBoolean("notifications", false).apply(); + FirebaseMessaging.getInstance().unsubscribeFromTopic("hs_all"); + invalidateOptionsMenu(); + } + + private void setNotificationAlert() { + SharedPreferences sharedPreferences = getSharedPreferences(Api.Prefs, MODE_PRIVATE); + sharedPreferences.edit().putBoolean("notifications", true).apply(); + FirebaseMessaging.getInstance().subscribeToTopic("hs_all"); + invalidateOptionsMenu(); + } + + private HomeResponse fakeHomeResponse() { + HomeResponse response = new HomeResponse(); + ArrayList items = new ArrayList<>(); + ArrayList sitems = new ArrayList<>(); + for (int i = 0; i < 60; i++) { + ReleaseItem item = new ReleaseItem(i + "", "", i + "", i + "", "", "", ""); + items.add(item); + ScheduleItem xitem = new ScheduleItem(i + "", "", i + "", "06 09:30 -07:00", true); + sitems.add(xitem); + } + response.schedule = sitems; + response.allBatches = items; + response.allSubs = items; + return response; + } + + private void onLoadData(@NotNull ShowResponse showResponse) { + Fragment fragment = getSupportFragmentManager().findFragmentByTag(F_TAG); + if (fragment != null) + getSupportFragmentManager().beginTransaction().remove(fragment).commit(); + viewPager.setAdapter(new PagerAdapter(getSupportFragmentManager(), showResponse)); + } + + @Override + public void onNavigateToFragment(@NotNull Fragment fragment, View view) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + fragment.setEnterTransition(new ChangeTransform()); + fragment.setExitTransition(new ChangeTransform()); + fragment.setReturnTransition(new ChangeTransform()); + fragment.setSharedElementEnterTransition(TransitionInflater.from(this).inflateTransition(android.R.transition.fade)); + fragment.setSharedElementReturnTransition(TransitionInflater.from(this).inflateTransition(android.R.transition.fade)); + } + getSupportFragmentManager() + .beginTransaction() + .addSharedElement(view, "Horrible Subz") + .replace(R.id.frameLayout, fragment, FragmentNavigation.F_TAG) + .addToBackStack(F_TAG) + .commit(); + } + + @Override + public boolean onQueryTextSubmit(String s) { + if (s == null || s.isEmpty() || s.length() < 2) + return false; + Intent intent = new Intent(this, Search.class); + intent.putExtra(SearchManager.QUERY, s); + startActivity(intent); + return true; + } + + @Override + public boolean onQueryTextChange(String s) { + return false; + } + + class ShowTask extends AsyncTask { + + private int i = 0; + private ShowResponse show; + + @Override + protected void onPreExecute() { + super.onPreExecute(); + progressBar.requestFocus(); + progressBar.setVisibility(View.VISIBLE); + } + + @Override + protected Boolean doInBackground(Void... voids) { + Retrofit retrofit = AppController.getRetrofit(Api.Link); + Api api = retrofit.create(Api.class); + Call call = api.getShow(link); + call.enqueue(new Callback() { + @Override + public void onResponse(@NonNull Call call, + @NonNull Response response) { + if (response.body() != null) + show = response.body(); + i = 1; + } + + @Override + public void onFailure(@NonNull Call call, @NonNull Throwable t) { + t.printStackTrace(); + i = -1; + } + }); + while (true) { + if (i != 0) + return true; + if (isCancelled()) { + i = -1; + show = null; + return true; + } + } + } + + @Override + protected void onPostExecute(Boolean aBoolean) { + super.onPostExecute(aBoolean); + progressBar.setVisibility(View.GONE); + if (i == 1) { + if (show == null) + Toast.makeText(Show.this, "Invalid Subz...", Toast.LENGTH_SHORT).show(); + else + onLoadData(show); + } else + Toast.makeText(Show.this, "Server Error...", Toast.LENGTH_SHORT).show(); + } + } + + class PagerAdapter extends FragmentPagerAdapter { + + private final ShowResponse showResponse; + + PagerAdapter(FragmentManager fragmentManager, ShowResponse showResponse) { + super(fragmentManager); + this.showResponse = showResponse; + } + + @Override + public Fragment getItem(int position) { + return ShowFragment1.newInstance(showResponse); + } + + @Override + public int getCount() { + return 1; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/adapter/ItemRecycler.java b/app/src/main/java/info/horriblesubs/sher/adapter/ItemRecycler.java index 607cc08..7f83d40 100644 --- a/app/src/main/java/info/horriblesubs/sher/adapter/ItemRecycler.java +++ b/app/src/main/java/info/horriblesubs/sher/adapter/ItemRecycler.java @@ -17,8 +17,8 @@ import java.util.List; import info.horriblesubs.sher.R; +import info.horriblesubs.sher.activity.Show; import info.horriblesubs.sher.model.base.PageItem; -import info.horriblesubs.sher.old.activity.Detail; /** * ListRecycler @@ -60,7 +60,7 @@ public void onClick(View v) { Toast.makeText(context, "Page Unavailable", Toast.LENGTH_SHORT).show(); return; } - Intent intent = new Intent(context, Detail.class); + Intent intent = new Intent(context, Show.class); String[] s = pageItem.link.split("/"); String link = s[s.length - 1]; intent.putExtra("link", link); diff --git a/app/src/main/java/info/horriblesubs/sher/adapter/ListRecycler.java b/app/src/main/java/info/horriblesubs/sher/adapter/ListRecycler.java index 934c97f..1a14d9d 100644 --- a/app/src/main/java/info/horriblesubs/sher/adapter/ListRecycler.java +++ b/app/src/main/java/info/horriblesubs/sher/adapter/ListRecycler.java @@ -14,8 +14,8 @@ import java.util.List; import info.horriblesubs.sher.R; +import info.horriblesubs.sher.activity.Show; import info.horriblesubs.sher.model.base.Item; -import info.horriblesubs.sher.old.activity.Detail; public class ListRecycler extends RecyclerView.Adapter { @@ -56,7 +56,7 @@ public void onClick(View view) { Toast.makeText(context, "Page Unavailable", Toast.LENGTH_SHORT).show(); return; } - Intent intent = new Intent(context, Detail.class); + Intent intent = new Intent(context, Show.class); String[] s = item.link.split("/"); String link = s[s.length - 1]; intent.putExtra("link", link); diff --git a/app/src/main/java/info/horriblesubs/sher/adapter/ReleaseRecycler.java b/app/src/main/java/info/horriblesubs/sher/adapter/ReleaseRecycler.java index 2025b67..c51a7df 100644 --- a/app/src/main/java/info/horriblesubs/sher/adapter/ReleaseRecycler.java +++ b/app/src/main/java/info/horriblesubs/sher/adapter/ReleaseRecycler.java @@ -17,9 +17,9 @@ import java.util.List; import info.horriblesubs.sher.R; +import info.horriblesubs.sher.activity.Show; import info.horriblesubs.sher.model.base.Item; import info.horriblesubs.sher.model.base.ReleaseItem; -import info.horriblesubs.sher.old.activity.Detail; import info.horriblesubs.sher.util.DialogX; /** @@ -89,11 +89,11 @@ public void onBindViewHolder(@NonNull ReleaseRecycler.ViewHolder holder, int pos holder.layout.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View v) { - if (item.link == null) { + if (item.link == null || item.link.isEmpty()) { Toast.makeText(context, "Page Unavailable", Toast.LENGTH_SHORT).show(); return true; } - Intent intent = new Intent(context, Detail.class); + Intent intent = new Intent(context, Show.class); String[] s = item.link.split("/"); String link = s[s.length - 1]; intent.putExtra("link", link); @@ -109,16 +109,16 @@ public void onClick(View view) { String s = "Episode - " + releaseItem.number; DialogX dialogX = new DialogX(context).setTitle(releaseItem.title).setDescription(s); if (releaseItem.link480 != null && !releaseItem.link480.isEmpty()) - dialogX.positiveButton("480p", getOnClickListener(releaseItem.link480, dialogX)); + dialogX = dialogX.positiveButton("480p", getOnClickListener(releaseItem.link480, dialogX)); if (releaseItem.link720 != null && !releaseItem.link720.isEmpty()) - dialogX.negativeButton("720p", getOnClickListener(releaseItem.link720, dialogX)); + dialogX = dialogX.negativeButton("720p", getOnClickListener(releaseItem.link720, dialogX)); if (releaseItem.link1080 != null && !releaseItem.link1080.isEmpty()) - dialogX.neutralButton("1080p", getOnClickListener(releaseItem.link1080, dialogX)); + dialogX = dialogX.neutralButton("1080p", getOnClickListener(releaseItem.link1080, dialogX)); dialogX.show(); } }); - } catch (NullPointerException e) { + } catch (Exception e) { e.printStackTrace(); } } diff --git a/app/src/main/java/info/horriblesubs/sher/adapter/ScheduleRecycler.java b/app/src/main/java/info/horriblesubs/sher/adapter/ScheduleRecycler.java index 6ce7e24..9d908ec 100644 --- a/app/src/main/java/info/horriblesubs/sher/adapter/ScheduleRecycler.java +++ b/app/src/main/java/info/horriblesubs/sher/adapter/ScheduleRecycler.java @@ -20,9 +20,9 @@ import java.util.List; import info.horriblesubs.sher.R; +import info.horriblesubs.sher.activity.Show; import info.horriblesubs.sher.model.base.Item; import info.horriblesubs.sher.model.base.ScheduleItem; -import info.horriblesubs.sher.old.activity.Detail; /** * ReleaseRecycler @@ -84,7 +84,7 @@ public void onClick(View v) { Toast.makeText(context, "Page Unavailable", Toast.LENGTH_SHORT).show(); return; } - Intent intent = new Intent(context, Detail.class); + Intent intent = new Intent(context, Show.class); String[] s = item.link.split("/"); String link = s[s.length - 1]; intent.putExtra("link", link); diff --git a/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment1.java b/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment1.java index 3a15411..805438a 100644 --- a/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment1.java +++ b/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment1.java @@ -1,8 +1,11 @@ package info.horriblesubs.sher.fragment; +import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; +import android.support.transition.Fade; +import android.support.transition.TransitionInflater; import android.support.v4.app.Fragment; import android.support.v7.widget.DefaultItemAnimator; import android.support.v7.widget.GridLayoutManager; @@ -60,6 +63,13 @@ public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, @Override public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + setEnterTransition(new Fade()); + setExitTransition(new Fade()); + setReturnTransition(new Fade()); + setSharedElementReturnTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + } assert getArguments() != null; homeResponse = (HomeResponse) getArguments().getSerializable(ARG_RESPONSE); } diff --git a/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment2.java b/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment2.java index df24edc..3e64591 100644 --- a/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment2.java +++ b/app/src/main/java/info/horriblesubs/sher/fragment/HomeFragment2.java @@ -6,7 +6,7 @@ import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.design.button.MaterialButton; -import android.support.transition.ChangeTransform; +import android.support.transition.Fade; import android.support.transition.TransitionInflater; import android.support.v4.app.Fragment; import android.support.v7.widget.DefaultItemAnimator; @@ -65,9 +65,9 @@ public void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); - setEnterTransition(new ChangeTransform()); - setExitTransition(new ChangeTransform()); - setReturnTransition(new ChangeTransform()); + setEnterTransition(new Fade()); + setExitTransition(new Fade()); + setReturnTransition(new Fade()); setSharedElementReturnTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); } assert getArguments() != null; diff --git a/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment1.java b/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment1.java new file mode 100644 index 0000000..8a5a147 --- /dev/null +++ b/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment1.java @@ -0,0 +1,154 @@ +package info.horriblesubs.sher.fragment; + +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.design.button.MaterialButton; +import android.support.transition.Fade; +import android.support.transition.TransitionInflater; +import android.support.v4.app.Fragment; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import info.horriblesubs.sher.R; +import info.horriblesubs.sher.adapter.ReleaseRecycler; +import info.horriblesubs.sher.model.response.ShowResponse; +import info.horriblesubs.sher.util.FragmentNavigation; + +public class ShowFragment1 extends Fragment implements View.OnClickListener { + + private static final String ARG_RESPONSE = "RESPONSE-HOME"; + private ShowResponse showResponse; + private RecyclerView recyclerView1; + private RecyclerView recyclerView2; + private MaterialButton button1; + private MaterialButton button2; + private MaterialButton button3; + private ImageView imageView; + private TextView textView1; + private TextView textView2; + private TextView textView3; + private TextView textView4; + private View view1; + private View view2; + private View view3; + + public static ShowFragment1 newInstance(ShowResponse homeResponse) { + ShowFragment1 fragment = new ShowFragment1(); + Bundle args = new Bundle(); + args.putSerializable(ARG_RESPONSE, homeResponse); + fragment.setArguments(args); + return fragment; + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_show_1, container, false); + view1 = rootView.findViewById(R.id.view1); + view2 = rootView.findViewById(R.id.view2); + view3 = rootView.findViewById(R.id.view3); + button1 = rootView.findViewById(R.id.button1); + button2 = rootView.findViewById(R.id.button2); + button3 = rootView.findViewById(R.id.button3); + imageView = rootView.findViewById(R.id.imageView); + textView1 = rootView.findViewById(R.id.textView1); + textView2 = rootView.findViewById(R.id.textView2); + textView3 = rootView.findViewById(R.id.textView3); + textView4 = rootView.findViewById(R.id.textView4); + recyclerView1 = rootView.findViewById(R.id.recyclerView1); + recyclerView2 = rootView.findViewById(R.id.recyclerView2); + button1.setOnClickListener(this); + button2.setOnClickListener(this); + button3.setOnClickListener(this); + return rootView; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + setEnterTransition(new Fade()); + setExitTransition(new Fade()); + setReturnTransition(new Fade()); + setSharedElementReturnTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + } + assert getArguments() != null; + showResponse = (ShowResponse) getArguments().getSerializable(ARG_RESPONSE); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + recyclerView1.setItemAnimator(new DefaultItemAnimator()); + recyclerView2.setItemAnimator(new DefaultItemAnimator()); + recyclerView1.setLayoutManager(new GridLayoutManager(getContext(), 2)); + recyclerView2.setLayoutManager(new GridLayoutManager(getContext(), 2)); + onLoadData(); + } + + private void onLoadData() { + Picasso.get().load(showResponse.detail.image).error(R.mipmap.ic_launcher_round) + .placeholder(R.mipmap.ic_launcher_round).into(imageView); + textView1.setText(Html.fromHtml(showResponse.detail.title)); + textView2.setText(Html.fromHtml(showResponse.detail.body)); + if (showResponse.detail.body.length() < 200) + button1.setVisibility(View.GONE); + if (showResponse.allBatches == null || showResponse.allBatches.size() < 1) { + recyclerView1.setVisibility(View.GONE); + textView3.setVisibility(View.VISIBLE); + button2.setVisibility(View.INVISIBLE); + button2.setEnabled(false); + } else { + ReleaseRecycler releaseRecycler = new ReleaseRecycler(getContext(), showResponse.allBatches, 2); + recyclerView1.setAdapter(releaseRecycler); + if (showResponse.allBatches.size() < 3) { + button2.setVisibility(View.INVISIBLE); + button2.setEnabled(false); + } + } + if (showResponse.allSubs == null || showResponse.allSubs.size() < 1) { + recyclerView2.setVisibility(View.GONE); + textView4.setVisibility(View.VISIBLE); + button3.setVisibility(View.INVISIBLE); + button3.setEnabled(false); + } else { + ReleaseRecycler releaseRecycler = new ReleaseRecycler(getContext(), showResponse.allSubs, 2); + recyclerView2.setAdapter(releaseRecycler); + if (showResponse.allSubs.size() < 3) { + button3.setVisibility(View.INVISIBLE); + button3.setEnabled(false); + } + } + } + + @Override + public void onClick(View view) { + assert getActivity() != null; + switch (view.getId()) { + case R.id.button1: + ((FragmentNavigation) getActivity()).onNavigateToFragment(ShowFragment2.newInstance(showResponse), view1); + break; + + case R.id.button2: + ((FragmentNavigation) getActivity()).onNavigateToFragment(ShowFragment3.newInstance(showResponse, 0), view2); + break; + + case R.id.button3: + ((FragmentNavigation) getActivity()).onNavigateToFragment(ShowFragment3.newInstance(showResponse, 1), view3); + break; + + } + } +} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment2.java b/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment2.java new file mode 100644 index 0000000..671bd90 --- /dev/null +++ b/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment2.java @@ -0,0 +1,74 @@ +package info.horriblesubs.sher.fragment; + +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.transition.Fade; +import android.support.transition.TransitionInflater; +import android.support.v4.app.Fragment; +import android.text.Html; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import com.squareup.picasso.Picasso; + +import info.horriblesubs.sher.R; +import info.horriblesubs.sher.model.response.ShowResponse; + +public class ShowFragment2 extends Fragment { + + private static final String ARG_RESPONSE = "RESPONSE-HOME"; + private ShowResponse showResponse; + private ImageView imageView; + private TextView textView1; + private TextView textView2; + + public static ShowFragment2 newInstance(ShowResponse homeResponse) { + ShowFragment2 fragment = new ShowFragment2(); + Bundle args = new Bundle(); + args.putSerializable(ARG_RESPONSE, homeResponse); + fragment.setArguments(args); + return fragment; + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_show_2, container, false); + imageView = rootView.findViewById(R.id.imageView); + textView1 = rootView.findViewById(R.id.textView1); + textView2 = rootView.findViewById(R.id.textView2); + return rootView; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + setEnterTransition(new Fade()); + setExitTransition(new Fade()); + setReturnTransition(new Fade()); + setSharedElementReturnTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + } + assert getArguments() != null; + showResponse = (ShowResponse) getArguments().getSerializable(ARG_RESPONSE); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + onLoadData(); + } + + private void onLoadData() { + textView1.setText(Html.fromHtml(showResponse.detail.title)); + textView2.setText(Html.fromHtml(showResponse.detail.body)); + Picasso.get().load(showResponse.detail.image).error(R.mipmap.ic_launcher_round) + .placeholder(R.mipmap.ic_launcher_round).into(imageView); + } +} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment3.java b/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment3.java new file mode 100644 index 0000000..6de7bda --- /dev/null +++ b/app/src/main/java/info/horriblesubs/sher/fragment/ShowFragment3.java @@ -0,0 +1,81 @@ +package info.horriblesubs.sher.fragment; + +import android.os.Build; +import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.transition.Fade; +import android.support.transition.TransitionInflater; +import android.support.v4.app.Fragment; +import android.support.v7.widget.DefaultItemAnimator; +import android.support.v7.widget.GridLayoutManager; +import android.support.v7.widget.RecyclerView; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.TextView; + +import info.horriblesubs.sher.R; +import info.horriblesubs.sher.adapter.ReleaseRecycler; +import info.horriblesubs.sher.model.response.ShowResponse; + +public class ShowFragment3 extends Fragment { + + private static final String ARG_RESPONSE = "RESPONSE-HOME"; + private static final String ARG_NUMBER = "RESPONSE-NUMBER"; + + private int type; + private ShowResponse showResponse; + private RecyclerView recyclerView; + private TextView textView; + + public static ShowFragment3 newInstance(ShowResponse showResponse, int i) { + ShowFragment3 fragment = new ShowFragment3(); + Bundle args = new Bundle(); + args.putSerializable(ARG_RESPONSE, showResponse); + args.putInt(ARG_NUMBER, i); + fragment.setArguments(args); + return fragment; + } + + @Override + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + View rootView = inflater.inflate(R.layout.fragment_home_2, container, false); + recyclerView = rootView.findViewById(R.id.recyclerView); + textView = rootView.findViewById(R.id.textView); + return rootView; + } + + @Override + public void onCreate(@Nullable Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + setSharedElementEnterTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + setEnterTransition(new Fade()); + setExitTransition(new Fade()); + setReturnTransition(new Fade()); + setSharedElementReturnTransition(TransitionInflater.from(getContext()).inflateTransition(android.R.transition.fade)); + } + assert getArguments() != null; + showResponse = (ShowResponse) getArguments().getSerializable(ARG_RESPONSE); + type = getArguments().getInt(ARG_NUMBER, 0); + } + + @Override + public void onActivityCreated(@Nullable Bundle savedInstanceState) { + super.onActivityCreated(savedInstanceState); + recyclerView.setItemAnimator(new DefaultItemAnimator()); + recyclerView.setLayoutManager(new GridLayoutManager(getContext(), 2)); + switch (type) { + case 0: + textView.setText(R.string.batches); + recyclerView.setAdapter(new ReleaseRecycler(getContext(), showResponse.allBatches)); + break; + case 1: + textView.setText(R.string.latest_releases); + recyclerView.setAdapter(new ReleaseRecycler(getContext(), showResponse.allSubs)); + break; + } + } +} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/activity/About.java b/app/src/main/java/info/horriblesubs/sher/old/activity/About.java index 9535948..3e5e66c 100644 --- a/app/src/main/java/info/horriblesubs/sher/old/activity/About.java +++ b/app/src/main/java/info/horriblesubs/sher/old/activity/About.java @@ -141,7 +141,7 @@ private void onClickChangelog() { clog = clog.replace("/", "\n"); clog = "v" + clog; final DialogX dialogX = new DialogX(this); - dialogX.setTitle("Changelog").setDescription(clog).positiveButton("CLOSE", new View.OnClickListener() { + dialogX.setTitle("Changelog").setDescription(clog).positiveButton("Close", new View.OnClickListener() { @Override public void onClick(View v) { dialogX.dismiss(); diff --git a/app/src/main/java/info/horriblesubs/sher/old/activity/Detail.java b/app/src/main/java/info/horriblesubs/sher/old/activity/Detail.java deleted file mode 100644 index 327f534..0000000 --- a/app/src/main/java/info/horriblesubs/sher/old/activity/Detail.java +++ /dev/null @@ -1,251 +0,0 @@ -package info.horriblesubs.sher.old.activity; - -import android.annotation.SuppressLint; -import android.support.v7.app.AppCompatActivity; - -@SuppressLint("StaticFieldLeak") -public class Detail extends AppCompatActivity { -/* - public static PageItem pageItem = null; - private ImageView imageView; - private String link = null; - - @Override - protected void onCreate(final Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - setContentView(R.layout.activity_home_x); - Toolbar toolbar = findViewById(R.id.toolbar); - setSupportActionBar(toolbar); - - final TextView textView = findViewById(R.id.textView); - BottomSheetBehavior bottomSheetBehavior = BottomSheetBehavior - .from(findViewById(R.id.bottomSheet)); - bottomSheetBehavior.setState(BottomSheetBehavior.STATE_COLLAPSED); - bottomSheetBehavior.setBottomSheetCallback(new BottomSheetBehavior.BottomSheetCallback() { - @Override - public void onStateChanged(@NonNull View bottomSheet, int newState) { - if (newState == BottomSheetBehavior.STATE_COLLAPSED) - textView.setCompoundDrawablesWithIntrinsicBounds(null, - getResources().getDrawable(R.drawable.ic_up), null, null); - else - textView.setCompoundDrawablesWithIntrinsicBounds(null, - getResources().getDrawable(R.drawable.ic_down), null, null); - } - - @Override - public void onSlide(@NonNull View bottomSheet, float slideOffset) { - - } - }); - RecyclerView recyclerView = findViewById(R.id.recyclerView); - new FetchScheduleItems().execute("?mode=schedule"); - new LoadScheduleItems(recyclerView, this, null, 1).execute(); - Intent intent = getIntent(); - if (intent.getStringExtra("link") != null) - link = intent.getStringExtra("link"); - else { - Toast.makeText(this, "Error Loading Result...", Toast.LENGTH_SHORT).show(); - finish(); - } - new FetchPageItem().execute("?mode=show-detail&link=" + link); - new OnLoad().execute(); - - Home.searchView = findViewById(R.id.searchView); - SearchView searchView = Home.searchView; - EditText editText = searchView.findViewById(android.support.v7.appcompat.R.id.search_src_text); - editText.setTextColor(getResources().getColor(R.color.colorPrimaryDark)); - editText.setHintTextColor(getResources().getColor(R.color.colorPrimaryDark)); - editText.setGravity(Gravity.CENTER); - editText.setTextSize((float) 14.5); - editText.setEnabled(false); - searchView.setQueryHint(getResources().getString(R.string.shows)); - - findViewById(R.id.imageViewDrawer).setOnClickListener(this); - imageView = findViewById(R.id.imageViewNotification); - imageView.setOnClickListener(this); - - invalidateBookmark(); - - NavigationView navigationView = findViewById(R.id.nav_view); - navigationView.setNavigationItemSelectedListener(this); - navigationView.setVisibility(View.GONE); - - ViewPager viewPager = findViewById(R.id.viewPager); - TabLayout tabLayout = findViewById(R.id.tabLayout); - tabLayout.addTab(tabLayout.newTab().setText("Info")); - tabLayout.addTab(tabLayout.newTab().setText("Episodes")); - tabLayout.addTab(tabLayout.newTab().setText("Batches")); - PagerAdapter pagerAdapter = new PagerAdapter(getSupportFragmentManager()); - viewPager.setAdapter(pagerAdapter); - viewPager.addOnPageChangeListener(new TabLayout.TabLayoutOnPageChangeListener(tabLayout)); - tabLayout.addOnTabSelectedListener(new TabLayout.ViewPagerOnTabSelectedListener(viewPager)); - } - - @Override - public void onBackPressed() { - DrawerLayout drawerLayout = findViewById(R.id.drawerLayout); - if (drawerLayout.isDrawerOpen(GravityCompat.START) && - !Home.searchView.getQuery().toString().isEmpty()) { - Home.searchView.setQuery("", false); - drawerLayout.closeDrawer(GravityCompat.START); - } else { - super.onBackPressed(); - } - } - - @Override - public boolean onNavigationItemSelected(@NonNull MenuItem item) { - Intent intent; - switch (item.getItemId()) { - case R.id.navHome: - intent = new Intent(this, Home.class); - startActivity(intent); - finish(); - break; - - case R.id.navSchedule: - intent = new Intent(this, Schedule.class); - startActivity(intent); - finish(); - break; - - case R.id.navShows: - break; - - case R.id.navRss: - break; - - case R.id.navBrowser: - break; - - case R.id.navFeedback: - break; - - case R.id.navAbout: - intent = new Intent(this, About.class); - startActivity(intent); - break; - - case R.id.navFav: - intent = new Intent(this, Favourite.class); - startActivity(intent); - finish(); - break; - - case R.id.navShare: - break; - - } - - DrawerLayout drawer = findViewById(R.id.drawerLayout); - drawer.closeDrawer(GravityCompat.START); - return true; - } - - @Override - public void onClick(View v) { - switch (v.getId()) { - case R.id.imageViewDrawer: - DrawerLayout drawerLayout = findViewById(R.id.drawerLayout); - if (drawerLayout.isDrawerOpen(GravityCompat.START)) - drawerLayout.closeDrawer(GravityCompat.START); - else - drawerLayout.openDrawer(GravityCompat.START); - break; - - case R.id.imageViewNotification: - SharedPreferences sharedPreferences = this.getSharedPreferences("horriblesubs-bookmarks", Context.MODE_PRIVATE); - if (Detail.pageItem == null) - return; - String string = sharedPreferences.getString(Detail.pageItem.id, null); - if (string != null) - removeBookmark(); - else - addBookmark(); - break; - } - } - - private void invalidateBookmark() { - SharedPreferences sharedPreferences = this - .getSharedPreferences("horriblesubs-bookmarks", Context.MODE_PRIVATE); - imageView.setImageResource(R.drawable.ic_bookmark_off); - if (Detail.pageItem == null) - return; - String string = sharedPreferences.getString(Detail.pageItem.id, null); - if (string != null) { - imageView.setContentDescription("Remove Bookmark"); - imageView.setImageResource(R.drawable.ic_bookmark_on); - } else { - imageView.setContentDescription("Add Bookmark"); - imageView.setImageResource(R.drawable.ic_bookmark_off); - } - } - - private void addBookmark() { - SharedPreferences sharedPreferences = this.getSharedPreferences("horriblesubs-bookmarks", Context.MODE_PRIVATE); - if (Detail.pageItem != null) { - Gson gson = new Gson(); - String s = gson.toJson(Detail.pageItem.getPageItem()); - sharedPreferences.edit().putString(Detail.pageItem.id, s).apply(); - } - invalidateBookmark(); - } - - private void removeBookmark() { - SharedPreferences sharedPreferences = this.getSharedPreferences("horriblesubs-bookmarks", Context.MODE_PRIVATE); - if (Detail.pageItem != null) - sharedPreferences.edit().remove(Detail.pageItem.id).apply(); - invalidateBookmark(); - } - - class PagerAdapter extends FragmentPagerAdapter { - - PagerAdapter(FragmentManager fragmentManager) { - super(fragmentManager); - } - - @Override - public Fragment getItem(int position) { - switch (position) { - case 0: - return Details.newInstance(); - case 1: - return ShowReleases.newInstance(position); - case 2: - return ShowReleases.newInstance(position); - default: - return Details.newInstance(); - } - } - - @Override - public int getCount() { - return 3; - } - } - - @Override - protected void onDestroy() { - super.onDestroy(); - Detail.pageItem = null; - } - - class OnLoad extends AsyncTask { - - @Override - protected Void doInBackground(Void... voids) { - while (true) - if (Detail.pageItem != null) - break; - return null; - } - - @Override - protected void onPostExecute(Void aVoid) { - super.onPostExecute(aVoid); - invalidateBookmark(); - } - } - */ -} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/fragment/Details.java b/app/src/main/java/info/horriblesubs/sher/old/fragment/Details.java deleted file mode 100644 index 73af918..0000000 --- a/app/src/main/java/info/horriblesubs/sher/old/fragment/Details.java +++ /dev/null @@ -1,31 +0,0 @@ -package info.horriblesubs.sher.old.fragment; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; -import android.widget.ImageView; -import android.widget.TextView; - -import info.horriblesubs.sher.R; -import info.horriblesubs.sher.old.task.LoadPageItem; - -public class Details extends Fragment { - - public static Details newInstance() { - return new Details(); - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_detail, container, false); - ImageView imageView = rootView.findViewById(R.id.imageView); - TextView textView1 = rootView.findViewById(R.id.textView1); - TextView textView2 = rootView.findViewById(R.id.textView2); - new LoadPageItem(textView1, textView2, imageView).execute(); - return rootView; - } -} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/fragment/ShowReleases.java b/app/src/main/java/info/horriblesubs/sher/old/fragment/ShowReleases.java deleted file mode 100644 index 7a5dd68..0000000 --- a/app/src/main/java/info/horriblesubs/sher/old/fragment/ShowReleases.java +++ /dev/null @@ -1,47 +0,0 @@ -package info.horriblesubs.sher.old.fragment; - -import android.os.Bundle; -import android.support.annotation.NonNull; -import android.support.v4.app.Fragment; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.RecyclerView; -import android.view.LayoutInflater; -import android.view.View; -import android.view.ViewGroup; - -import info.horriblesubs.sher.R; -import info.horriblesubs.sher.old.task.FetchShowReleases; - -public class ShowReleases extends Fragment { - - private static final String ARG_SECTION_NUMBER = "section_number"; - private SwipeRefreshLayout swipeRefreshLayout; - private RecyclerView recyclerView; - - public static ShowReleases newInstance(int i) { - ShowReleases fragment = new ShowReleases(); - Bundle args = new Bundle(); - args.putInt(ARG_SECTION_NUMBER, i); - fragment.setArguments(args); - return fragment; - } - - @Override - public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, - Bundle savedInstanceState) { - View rootView = inflater.inflate(R.layout.fragment_shows, container, false); - recyclerView = rootView.findViewById(R.id.recyclerView); - swipeRefreshLayout = rootView.findViewById(R.id.textView); - assert getArguments() != null; - new FetchShowReleases(recyclerView, getContext(), swipeRefreshLayout) - .execute(getArguments().getInt(ARG_SECTION_NUMBER)); - swipeRefreshLayout.setOnRefreshListener(new SwipeRefreshLayout.OnRefreshListener() { - @Override - public void onRefresh() { - new FetchShowReleases(recyclerView, getContext(), swipeRefreshLayout) - .execute(getArguments().getInt(ARG_SECTION_NUMBER)); - } - }); - return rootView; - } -} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/task/FetchPageItem.java b/app/src/main/java/info/horriblesubs/sher/old/task/FetchPageItem.java deleted file mode 100644 index d100508..0000000 --- a/app/src/main/java/info/horriblesubs/sher/old/task/FetchPageItem.java +++ /dev/null @@ -1,53 +0,0 @@ -package info.horriblesubs.sher.old.task; - -import android.annotation.SuppressLint; -import android.os.AsyncTask; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; - -import info.horriblesubs.sher.BuildConfig; -import info.horriblesubs.sher.model.base.PageItem; - -@SuppressLint("StaticFieldLeak") -public class FetchPageItem extends AsyncTask { - - public FetchPageItem() { - - } - - @Override - protected PageItem doInBackground(String... strings) { - String s = BuildConfig.HAPI + strings[0]; - try { - URL url = new URL(s); - HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); - try { - httpURLConnection.connect(); - BufferedReader bufferedReader = new BufferedReader(new - InputStreamReader(httpURLConnection.getInputStream())); - return new Gson().fromJson(bufferedReader, - new TypeToken() { - }.getType()); - } finally { - if (httpURLConnection != null) - httpURLConnection.disconnect(); - } - } catch (IOException e) { - e.printStackTrace(); - return null; - } - } - - @Override - protected void onPostExecute(PageItem pageItem) { - super.onPostExecute(pageItem); - pageItem = pageItem; - } -} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/task/FetchReleaseItems.java b/app/src/main/java/info/horriblesubs/sher/old/task/FetchReleaseItems.java deleted file mode 100644 index 24495a1..0000000 --- a/app/src/main/java/info/horriblesubs/sher/old/task/FetchReleaseItems.java +++ /dev/null @@ -1,79 +0,0 @@ -package info.horriblesubs.sher.old.task; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.os.AsyncTask; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.DefaultItemAnimator; -import android.support.v7.widget.GridLayoutManager; -import android.support.v7.widget.RecyclerView; - -import com.google.gson.Gson; -import com.google.gson.reflect.TypeToken; - -import java.io.BufferedReader; -import java.io.IOException; -import java.io.InputStreamReader; -import java.net.HttpURLConnection; -import java.net.URL; -import java.util.List; - -import info.horriblesubs.sher.BuildConfig; -import info.horriblesubs.sher.adapter.ReleaseRecycler; -import info.horriblesubs.sher.model.base.ReleaseItem; - -@SuppressLint("StaticFieldLeak") -public class FetchReleaseItems extends AsyncTask> { - - private final Context context; - private final RecyclerView recyclerView; - private final SwipeRefreshLayout swipeRefreshLayout; - - public FetchReleaseItems(Context context, RecyclerView recyclerView, - SwipeRefreshLayout swipeRefreshLayout) { - this.context = context; - this.recyclerView = recyclerView; - this.swipeRefreshLayout = swipeRefreshLayout; - } - - @Override - protected void onPreExecute() { - super.onPreExecute(); - swipeRefreshLayout.setRefreshing(true); - } - - @Override - protected List doInBackground(String... strings) { - String s = BuildConfig.HAPI + strings[0]; - try { - URL url = new URL(s); - HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection(); - try { - httpURLConnection.connect(); - BufferedReader bufferedReader = new BufferedReader(new - InputStreamReader(httpURLConnection.getInputStream())); - return new Gson().fromJson(bufferedReader, - new TypeToken>() { - }.getType()); - } finally { - if (httpURLConnection != null) - httpURLConnection.disconnect(); - } - } catch (IOException e) { - e.printStackTrace(); - return null; - } - } - - @Override - protected void onPostExecute(final List releaseItems) { - super.onPostExecute(releaseItems); - if (releaseItems != null) { - final ReleaseRecycler releaseRecycler = new ReleaseRecycler(context, releaseItems); - recyclerView.setItemAnimator(new DefaultItemAnimator()); - recyclerView.setLayoutManager(new GridLayoutManager(context, 2)); - recyclerView.setAdapter(releaseRecycler); - swipeRefreshLayout.setRefreshing(false); - } - } -} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/task/FetchShowReleases.java b/app/src/main/java/info/horriblesubs/sher/old/task/FetchShowReleases.java deleted file mode 100644 index c39f33f..0000000 --- a/app/src/main/java/info/horriblesubs/sher/old/task/FetchShowReleases.java +++ /dev/null @@ -1,50 +0,0 @@ -package info.horriblesubs.sher.old.task; - -import android.annotation.SuppressLint; -import android.content.Context; -import android.os.AsyncTask; -import android.support.v4.widget.SwipeRefreshLayout; -import android.support.v7.widget.RecyclerView; - -import org.jetbrains.annotations.NotNull; - -@SuppressLint("StaticFieldLeak") -public class FetchShowReleases extends AsyncTask { - - private final SwipeRefreshLayout swipeRefreshLayout; - private final RecyclerView recyclerView; - private final Context context; - - public FetchShowReleases(RecyclerView recyclerView, Context context, - SwipeRefreshLayout swipeRefreshLayout) { - this.swipeRefreshLayout = swipeRefreshLayout; - this.recyclerView = recyclerView; - this.context = context; - } - - @Override - protected String doInBackground(@NotNull Integer... integers) { - String s; - switch (integers[0]) { - case 1: - s = "?mode=id-episode&showId="; - break; - case 2: - s = "?mode=id-batch&showId="; - break; - default: - s = "?mode=id-episode&showId="; - break; - } - while (true) - if (null != null) - break; - return s + "Detail.pageItem.id"; - } - - @Override - protected void onPostExecute(String s) { - super.onPostExecute(s); - new FetchReleaseItems(context, recyclerView, swipeRefreshLayout).execute(s); - } -} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/task/LoadPageItem.java b/app/src/main/java/info/horriblesubs/sher/old/task/LoadPageItem.java deleted file mode 100644 index eb252f9..0000000 --- a/app/src/main/java/info/horriblesubs/sher/old/task/LoadPageItem.java +++ /dev/null @@ -1,49 +0,0 @@ -package info.horriblesubs.sher.old.task; - -import android.annotation.SuppressLint; -import android.os.AsyncTask; -import android.text.Html; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.squareup.picasso.Picasso; - -import org.jetbrains.annotations.NotNull; - -import info.horriblesubs.sher.model.base.PageItem; - -@SuppressLint("StaticFieldLeak") -public class LoadPageItem extends AsyncTask { - - private final TextView textView1; - private final TextView textView2; - private final ImageView imageView; - - public LoadPageItem(TextView textView1, TextView textView2, ImageView imageView) { - this.textView1 = textView1; - this.textView2 = textView2; - this.imageView = imageView; - } - - @Override - protected PageItem doInBackground(@NotNull Void... voids) { - while (true) - if (null != null) - return null; - } - - @Override - protected void onPostExecute(PageItem pageItem) { - super.onPostExecute(pageItem); - textView1.setText(Html.fromHtml(pageItem.title)); - textView2.setText(Html.fromHtml(pageItem.body)); - Picasso.get().load(pageItem.image).into(imageView); - imageView.setOnClickListener(new View.OnClickListener() { - @Override - public void onClick(View v) { - - } - }); - } -} \ No newline at end of file diff --git a/app/src/main/java/info/horriblesubs/sher/old/service/IdService.java b/app/src/main/java/info/horriblesubs/sher/service/IdService.java similarity index 96% rename from app/src/main/java/info/horriblesubs/sher/old/service/IdService.java rename to app/src/main/java/info/horriblesubs/sher/service/IdService.java index 13af427..3838289 100644 --- a/app/src/main/java/info/horriblesubs/sher/old/service/IdService.java +++ b/app/src/main/java/info/horriblesubs/sher/service/IdService.java @@ -1,4 +1,4 @@ -package info.horriblesubs.sher.old.service; +package info.horriblesubs.sher.service; import android.content.Intent; import android.content.SharedPreferences; diff --git a/app/src/main/java/info/horriblesubs/sher/old/service/NotifyService.java b/app/src/main/java/info/horriblesubs/sher/service/NotifyService.java similarity index 98% rename from app/src/main/java/info/horriblesubs/sher/old/service/NotifyService.java rename to app/src/main/java/info/horriblesubs/sher/service/NotifyService.java index 63e1f65..f5ca3f0 100644 --- a/app/src/main/java/info/horriblesubs/sher/old/service/NotifyService.java +++ b/app/src/main/java/info/horriblesubs/sher/service/NotifyService.java @@ -1,4 +1,4 @@ -package info.horriblesubs.sher.old.service; +package info.horriblesubs.sher.service; import android.app.ActivityManager; import android.content.ContentResolver; diff --git a/app/src/main/java/info/horriblesubs/sher/util/DialogX.java b/app/src/main/java/info/horriblesubs/sher/util/DialogX.java index e8d848e..144495a 100644 --- a/app/src/main/java/info/horriblesubs/sher/util/DialogX.java +++ b/app/src/main/java/info/horriblesubs/sher/util/DialogX.java @@ -31,16 +31,12 @@ public class DialogX extends Dialog { private View viewDivider; public DialogX(@NonNull Context context) { - super(context); + super(context, R.style.AppTheme_Dialog); this.context = context; - setContentView(); + setContentView(R.layout.dialog_layout); setViewElements(); } - private void setContentView() { - super.setContentView(R.layout.dialog_layout); - } - private void setViewElements() { imageView = findViewById(R.id.imageViewBanner); @@ -97,6 +93,15 @@ public DialogX neutralButton(String s, View.OnClickListener onClickListener) { return this; } + public DialogX setColouredButtons(boolean b) { + if (b) { + buttonPositive.setTextColor(R.color.colorSD); + buttonNegative.setTextColor(R.color.colorHD); + buttonNeutral.setTextColor(R.color.colorFHD); + } + return this; + } + private void showDivider() { viewDivider.setVisibility(View.VISIBLE); } diff --git a/app/src/main/res/layout/activity_home.xml b/app/src/main/res/layout/activity_home.xml index 254527d..e61a03f 100644 --- a/app/src/main/res/layout/activity_home.xml +++ b/app/src/main/res/layout/activity_home.xml @@ -57,7 +57,7 @@ android:focusable="true" android:visibility="gone" app:elevation="16dp" - tools:visibility="visible"> + tools:visibility="invisible"> - - - - - - - diff --git a/app/src/main/res/layout/dialog_layout.xml b/app/src/main/res/layout/dialog_layout.xml index 0df4b0f..8d91aa8 100644 --- a/app/src/main/res/layout/dialog_layout.xml +++ b/app/src/main/res/layout/dialog_layout.xml @@ -1,110 +1,121 @@ - + android:orientation="vertical" + app:cardBackgroundColor="@color/colorPrimaryLight" + app:cardCornerRadius="8dp"> - + android:layout_height="wrap_content" + android:minWidth="300dp" + android:orientation="vertical"> + + + + - + + + - - + android:textSize="15sp" /> - + - + - + -