From 5539097ca5d0bd411d0159fef6f2aaec66829971 Mon Sep 17 00:00:00 2001 From: Kadeem Date: Wed, 26 Aug 2020 19:16:20 -0400 Subject: [PATCH] Dark Mode Implemented --- app/build.gradle | 7 ++ app/src/main/AndroidManifest.xml | 12 ++-- .../java/io/saytheirnames/STNApplication.kt | 18 +++++ .../java/io/saytheirnames/ThemeManager.kt | 34 +++++++++ .../activity/DonationDetailsActivity.java | 12 ++-- .../activity/PetitionDetailsActivity.java | 6 +- .../saytheirnames/fragments/HomeFragment.java | 30 +++++++- .../io/saytheirnames/utils/CustomTabUtil.java | 4 +- app/src/main/res/color/bottom_nav_color.xml | 5 ++ .../main/res/drawable/button_background.xml | 2 +- app/src/main/res/drawable/card_border.xml | 1 + app/src/main/res/drawable/default_line.xml | 2 +- app/src/main/res/drawable/donation_btn.xml | 2 +- .../main/res/drawable/find_out_btn_border.xml | 2 +- .../res/drawable/light_theme_white_24dp.xml | 9 +++ .../res/drawable/night_theme_white_24dp.xml | 9 +++ .../drawable/selected_button_background.xml | 4 +- app/src/main/res/drawable/selected_line.xml | 2 +- .../main/res/drawable/social_media_button.xml | 2 +- app/src/main/res/layout/activity_details.xml | 20 ++---- .../res/layout/activity_donation_details.xml | 17 ++--- app/src/main/res/layout/activity_main.xml | 6 +- .../res/layout/activity_petition_details.xml | 21 +++--- app/src/main/res/layout/donation_item.xml | 14 ++-- app/src/main/res/layout/filter_item.xml | 2 +- app/src/main/res/layout/fragment_about.xml | 45 ++++++------ app/src/main/res/layout/fragment_donation.xml | 25 +------ app/src/main/res/layout/fragment_home.xml | 17 +---- .../main/res/layout/fragment_petitions.xml | 18 ++--- app/src/main/res/layout/hashtag_item.xml | 10 +-- app/src/main/res/layout/header_card_item.xml | 2 +- .../main/res/layout/item_chip_location.xml | 4 +- app/src/main/res/layout/person_item.xml | 9 +-- app/src/main/res/layout/petition_item.xml | 13 ++-- app/src/main/res/menu/fragment_home_menu.xml | 8 +++ app/src/main/res/values-night/colors.xml | 14 ++++ app/src/main/res/values/colors.xml | 14 +++- app/src/main/res/values/strings.xml | 70 +++++++++++-------- app/src/main/res/values/styles.xml | 66 +++++++++++++---- 39 files changed, 338 insertions(+), 220 deletions(-) create mode 100644 app/src/main/java/io/saytheirnames/STNApplication.kt create mode 100644 app/src/main/java/io/saytheirnames/ThemeManager.kt create mode 100644 app/src/main/res/color/bottom_nav_color.xml create mode 100644 app/src/main/res/drawable/light_theme_white_24dp.xml create mode 100644 app/src/main/res/drawable/night_theme_white_24dp.xml create mode 100644 app/src/main/res/menu/fragment_home_menu.xml create mode 100644 app/src/main/res/values-night/colors.xml diff --git a/app/build.gradle b/app/build.gradle index 8c6b37c..d420cf3 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -34,6 +34,9 @@ android { proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } + kotlinOptions { + jvmTarget = '1.8' + } } dependencies { @@ -57,6 +60,8 @@ dependencies { implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0' implementation 'androidx.browser:browser:1.2.0' implementation 'androidx.legacy:legacy-support-v4:1.0.0' + implementation 'androidx.navigation:navigation-fragment-ktx:2.3.0' + implementation 'androidx.navigation:navigation-ui-ktx:2.3.0' annotationProcessor 'com.github.bumptech.glide:compiler:4.11.0' testImplementation 'junit:junit:4.13' @@ -69,4 +74,6 @@ dependencies { implementation "io.github.ponnamkarthik:richlinkpreview:1.0.9" implementation "com.squareup.picasso:picasso:2.71828" + implementation "androidx.preference:preference:1.1.1" + } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index d408354..601ad42 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -6,20 +6,21 @@ - - - + android:theme="@style/AppTheme2"/> + @@ -37,5 +38,4 @@ android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" /> - \ No newline at end of file diff --git a/app/src/main/java/io/saytheirnames/STNApplication.kt b/app/src/main/java/io/saytheirnames/STNApplication.kt new file mode 100644 index 0000000..85161e1 --- /dev/null +++ b/app/src/main/java/io/saytheirnames/STNApplication.kt @@ -0,0 +1,18 @@ +package io.saytheirnames + +import android.app.Application +import androidx.appcompat.app.AppCompatDelegate +import androidx.preference.PreferenceManager + +class STNApplication : Application() { + + override fun onCreate() { + super.onCreate() + initTheme() + } + + private fun initTheme() { + val preferences = PreferenceManager.getDefaultSharedPreferences(this) + ThemeManager.applyTheme(preferences.getInt(R.string.preference_key_theme.toString(), AppCompatDelegate.MODE_NIGHT_NO)) + } +} \ No newline at end of file diff --git a/app/src/main/java/io/saytheirnames/ThemeManager.kt b/app/src/main/java/io/saytheirnames/ThemeManager.kt new file mode 100644 index 0000000..a695051 --- /dev/null +++ b/app/src/main/java/io/saytheirnames/ThemeManager.kt @@ -0,0 +1,34 @@ +package io.saytheirnames + +import android.content.Context +import androidx.appcompat.app.AppCompatDelegate +import androidx.preference.PreferenceManager + +object ThemeManager { + + fun applyTheme(mode: Int) { + if (AppCompatDelegate.getDefaultNightMode() == mode) return + AppCompatDelegate.setDefaultNightMode(mode) + } + + fun setTheme(mode: Int, context: Context) { + applyTheme(mode) + + val preferences = PreferenceManager.getDefaultSharedPreferences(context) + preferences.edit().putInt(R.string.preference_key_theme.toString(), mode) + .apply() + } + + fun isNightMode(): Boolean { + return getCurrentTheme() == AppCompatDelegate.MODE_NIGHT_YES + } + + private fun getCurrentTheme(): Int { + return AppCompatDelegate.getDefaultNightMode() + } + + fun toggleTheme(context: Context) { + if (isNightMode()) setTheme(AppCompatDelegate.MODE_NIGHT_NO, context) + else setTheme(AppCompatDelegate.MODE_NIGHT_YES, context) + } +} diff --git a/app/src/main/java/io/saytheirnames/activity/DonationDetailsActivity.java b/app/src/main/java/io/saytheirnames/activity/DonationDetailsActivity.java index 67d84aa..a8db414 100644 --- a/app/src/main/java/io/saytheirnames/activity/DonationDetailsActivity.java +++ b/app/src/main/java/io/saytheirnames/activity/DonationDetailsActivity.java @@ -21,6 +21,7 @@ import io.saytheirnames.network.Utils; import io.saytheirnames.utils.CustomTabUtil; import io.saytheirnames.utils.ShareUtil; + import com.bumptech.glide.Glide; import com.bumptech.glide.request.RequestOptions; import com.google.android.material.snackbar.Snackbar; @@ -36,12 +37,12 @@ public class DonationDetailsActivity extends AppCompatActivity implements View.OnClickListener { - String identifier,image, title, desc, donationLink; + String identifier, image, title, desc, donationLink; public static final String EXTRA_ID = "identifier"; private BlurImageView blurImageView; - private ImageView donationImage,close; + private ImageView donationImage, close; private TextView donationTitle, subTitle, donationDesc, socialHashtags; private Button donationButton; private View progress; @@ -54,14 +55,10 @@ protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_donation_details); - initView(); - Intent intent = getIntent(); - identifier = intent.getStringExtra(EXTRA_ID); - - loadData(); + loadData(); } @SuppressLint("StaticFieldLeak") @@ -186,7 +183,6 @@ public void onClick(View v) { case R.id.close: finish(); break; - case R.id.imgShare: share(donationLink); break; diff --git a/app/src/main/java/io/saytheirnames/activity/PetitionDetailsActivity.java b/app/src/main/java/io/saytheirnames/activity/PetitionDetailsActivity.java index 7da715f..018c800 100644 --- a/app/src/main/java/io/saytheirnames/activity/PetitionDetailsActivity.java +++ b/app/src/main/java/io/saytheirnames/activity/PetitionDetailsActivity.java @@ -38,9 +38,9 @@ public class PetitionDetailsActivity extends AppCompatActivity implements View.O private ImageView imgClose, imgShare; - private TextView txtName, txtDescription, txtShareThisPetition; + private TextView txtName, txtDescription; - private Button btnSignThisPetition; + private Button btnSignThisPetition, txtShareThisPetition; private ImageView actualImage; private BlurImageView blurImageView; @@ -174,7 +174,6 @@ public void onClick(View v) { visitPage(petitionLink); break; case R.id.btnShareThisPetition: - case R.id.imgShare: share(petitionLink); break; @@ -184,7 +183,6 @@ public void onClick(View v) { } } - private void visitPage(String url) { CustomTabUtil.openCustomTabForUrl(this, url); } diff --git a/app/src/main/java/io/saytheirnames/fragments/HomeFragment.java b/app/src/main/java/io/saytheirnames/fragments/HomeFragment.java index 0df05a8..96dd189 100644 --- a/app/src/main/java/io/saytheirnames/fragments/HomeFragment.java +++ b/app/src/main/java/io/saytheirnames/fragments/HomeFragment.java @@ -3,10 +3,12 @@ import android.content.res.Resources; import android.os.Bundle; import android.view.LayoutInflater; +import android.view.MenuItem; import android.view.View; import android.view.ViewGroup; import android.widget.ProgressBar; +import androidx.annotation.NonNull; import androidx.annotation.Nullable; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentTransaction; @@ -21,6 +23,7 @@ import java.util.ArrayList; import io.saytheirnames.R; +import io.saytheirnames.ThemeManager; import io.saytheirnames.activity.MainActivity; import io.saytheirnames.adapters.FilterHomeAdapter; import io.saytheirnames.adapters.HeaderCardRecyclerAdapter; @@ -77,6 +80,7 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, initializeRecyclerView(); loadData(); + initializeToolbar(); return mContent; } @@ -102,7 +106,8 @@ public int getSpanSize(int position) { @NotNull @Override public RecyclerView.ViewHolder onCreateViewHolder(@NotNull ViewGroup viewGroup, @NotNull LoadState loadState) { - return new RecyclerView.ViewHolder(progressBar){}; + return new RecyclerView.ViewHolder(progressBar) { + }; } @Override @@ -110,7 +115,7 @@ public void onBindViewHolder(@NotNull RecyclerView.ViewHolder viewHolder, @NotNu if (loadState.equals(LoadState.Loading.INSTANCE)) { progressBar.setVisibility(View.VISIBLE); } else { - progressBar.setVisibility(View.GONE); + progressBar.setVisibility(View.GONE); } } }); @@ -124,6 +129,16 @@ private void loadData() { peoplePager.loadPeopleFromPagination(); } + private void initializeToolbar() { + androidx.appcompat.widget.Toolbar toolbar = mContent.findViewById(R.id.toolbar); + toolbar.inflateMenu(R.menu.fragment_home_menu); + toolbar.setOnMenuItemClickListener(item -> onOptionsItemSelected(item)); + if (ThemeManager.INSTANCE.isNightMode()) + toolbar.getMenu().findItem(R.id.theme).setIcon(R.drawable.night_theme_white_24dp); + else + toolbar.getMenu().findItem(R.id.theme).setIcon(R.drawable.light_theme_white_24dp); + } + @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); @@ -143,4 +158,15 @@ public void onHeaderClick() { ((MainActivity) getActivity()).updateBottomNavBasedOnTag(tag); } } + + @Override + public boolean onOptionsItemSelected(@NonNull MenuItem item) { + switch (item.getItemId()) { + case R.id.theme: + ThemeManager.INSTANCE.toggleTheme(getContext()); + return true; + default: + return super.onOptionsItemSelected(item); + } + } } \ No newline at end of file diff --git a/app/src/main/java/io/saytheirnames/utils/CustomTabUtil.java b/app/src/main/java/io/saytheirnames/utils/CustomTabUtil.java index f570fd8..ed77c03 100644 --- a/app/src/main/java/io/saytheirnames/utils/CustomTabUtil.java +++ b/app/src/main/java/io/saytheirnames/utils/CustomTabUtil.java @@ -33,8 +33,8 @@ private static void openCustomChromeTab(Context context, Uri uri) { CustomTabsIntent.Builder intentBuilder = new CustomTabsIntent.Builder(); CustomTabsIntent customTabsIntent = intentBuilder.build(); - intentBuilder.setToolbarColor(ContextCompat.getColor(context, R.color.colorPrimary)); - intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.colorPrimaryDark)); + intentBuilder.setToolbarColor(ContextCompat.getColor(context, R.color.Primary)); + intentBuilder.setSecondaryToolbarColor(ContextCompat.getColor(context, R.color.PrimaryDark)); CustomTabActivityHelper.openCustomTab(context, customTabsIntent, uri, (activity, uri1) -> openWebView(context, uri1)); } diff --git a/app/src/main/res/color/bottom_nav_color.xml b/app/src/main/res/color/bottom_nav_color.xml new file mode 100644 index 0000000..52d9bc8 --- /dev/null +++ b/app/src/main/res/color/bottom_nav_color.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/button_background.xml b/app/src/main/res/drawable/button_background.xml index 3f990cc..b3277d4 100644 --- a/app/src/main/res/drawable/button_background.xml +++ b/app/src/main/res/drawable/button_background.xml @@ -3,7 +3,7 @@ - + \ No newline at end of file diff --git a/app/src/main/res/drawable/card_border.xml b/app/src/main/res/drawable/card_border.xml index b317527..ed192dc 100644 --- a/app/src/main/res/drawable/card_border.xml +++ b/app/src/main/res/drawable/card_border.xml @@ -5,6 +5,7 @@ android:width="2dp"/> \ No newline at end of file diff --git a/app/src/main/res/drawable/default_line.xml b/app/src/main/res/drawable/default_line.xml index dbcbd47..9a6fb9e 100644 --- a/app/src/main/res/drawable/default_line.xml +++ b/app/src/main/res/drawable/default_line.xml @@ -9,7 +9,7 @@ android:thickness="2dp" android:useLevel="false"> + android:color="@color/colorGrey"/> diff --git a/app/src/main/res/drawable/donation_btn.xml b/app/src/main/res/drawable/donation_btn.xml index dd3520d..3b342e9 100644 --- a/app/src/main/res/drawable/donation_btn.xml +++ b/app/src/main/res/drawable/donation_btn.xml @@ -1,6 +1,6 @@ - - diff --git a/app/src/main/res/drawable/light_theme_white_24dp.xml b/app/src/main/res/drawable/light_theme_white_24dp.xml new file mode 100644 index 0000000..400d03b --- /dev/null +++ b/app/src/main/res/drawable/light_theme_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/night_theme_white_24dp.xml b/app/src/main/res/drawable/night_theme_white_24dp.xml new file mode 100644 index 0000000..68e3b9f --- /dev/null +++ b/app/src/main/res/drawable/night_theme_white_24dp.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/selected_button_background.xml b/app/src/main/res/drawable/selected_button_background.xml index 9e4131f..8d80a3c 100644 --- a/app/src/main/res/drawable/selected_button_background.xml +++ b/app/src/main/res/drawable/selected_button_background.xml @@ -2,8 +2,8 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/drawable/selected_line.xml b/app/src/main/res/drawable/selected_line.xml index 2d50b11..61bc327 100644 --- a/app/src/main/res/drawable/selected_line.xml +++ b/app/src/main/res/drawable/selected_line.xml @@ -9,7 +9,7 @@ android:thickness="2dp" android:useLevel="false"> + android:color="@color/OnBackground"/> diff --git a/app/src/main/res/drawable/social_media_button.xml b/app/src/main/res/drawable/social_media_button.xml index 3f990cc..b3277d4 100644 --- a/app/src/main/res/drawable/social_media_button.xml +++ b/app/src/main/res/drawable/social_media_button.xml @@ -3,7 +3,7 @@ - + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_details.xml b/app/src/main/res/layout/activity_details.xml index d3eb552..9345a4f 100644 --- a/app/src/main/res/layout/activity_details.xml +++ b/app/src/main/res/layout/activity_details.xml @@ -19,8 +19,8 @@ - - @@ -116,7 +113,7 @@ android:layout_marginStart="32dp" android:textSize="21sp" android:textStyle="bold" - android:textColor="@android:color/primary_text_light" + android:textColor="@color/OnBackground" app:layout_constraintTop_toBottomOf="@id/hero_container" app:layout_constraintStart_toStartOf="parent" tools:text="FIRSTNAME LAST"/> @@ -313,18 +310,15 @@ app:layout_constraintBottom_toBottomOf="parent"/> - - - + android:background="@color/Background"> diff --git a/app/src/main/res/layout/activity_donation_details.xml b/app/src/main/res/layout/activity_donation_details.xml index 6190fc9..e87882f 100644 --- a/app/src/main/res/layout/activity_donation_details.xml +++ b/app/src/main/res/layout/activity_donation_details.xml @@ -10,7 +10,7 @@ android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="wrap_content" - android:background="@color/colorBlack" + android:background="@color/Primary" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"> @@ -35,7 +35,7 @@ android:fontFamily="@font/raleway" android:text="@string/donations" android:textAllCaps="true" - android:textColor="@android:color/white" + android:textColor="@color/OnPrimary" android:textSize="19dp" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" @@ -114,6 +114,7 @@ android:layout_marginTop="30dp" android:layout_marginEnd="16dp" android:orientation="vertical" + android:background="@color/Background" app:layout_constraintEnd_toEndOf="@+id/frameLayout" app:layout_constraintStart_toStartOf="@+id/frameLayout" app:layout_constraintTop_toBottomOf="@+id/frameLayout"> @@ -123,7 +124,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:textAlignment="center" - android:textColor="@color/colorBlack" + android:textColor="@color/OnBackground" android:textSize="21sp" android:textStyle="bold" /> @@ -133,7 +134,7 @@ android:layout_height="wrap_content" android:layout_marginTop="28dp" android:text="@string/content" - android:textColor="@color/colorBlack" + android:textColor="@color/OnBackground" android:textSize="18sp" android:textStyle="bold" /> @@ -142,7 +143,7 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginTop="8dp" - android:textColor="@color/colorBlack" /> + android:textColor="@color/OnBackground" /> @@ -170,7 +171,7 @@ android:layout_height="2dp" android:layout_marginTop="16dp" android:layout_marginBottom="16dp" - android:background="@color/colorSecondaryGrey" /> + android:background="@color/colorGrey" />