11package com .example .memesharejava ;
22
3- import androidx .annotation .Nullable ;
4- import androidx .appcompat .app .AppCompatActivity ;
5-
63import android .content .Intent ;
4+ import android .content .res .Configuration ;
75import android .graphics .drawable .Drawable ;
86import android .os .Bundle ;
9- import android .util .Log ;
7+ import android .view .Menu ;
8+ import android .view .MenuInflater ;
9+ import android .view .MenuItem ;
1010import android .view .View ;
1111import android .widget .Button ;
1212import android .widget .ImageView ;
1313import android .widget .ProgressBar ;
14- import android .widget .Toast ;
14+
15+ import androidx .annotation .Nullable ;
16+ import androidx .appcompat .app .AppCompatActivity ;
17+ import androidx .appcompat .app .AppCompatDelegate ;
1518
1619import com .android .volley .Request ;
17- import com .android .volley .RequestQueue ;
1820import com .android .volley .Response ;
1921import com .android .volley .VolleyError ;
2022import com .android .volley .toolbox .JsonObjectRequest ;
21- import com .android .volley .toolbox .StringRequest ;
22- import com .android .volley .toolbox .Volley ;
2323import com .bumptech .glide .Glide ;
2424import com .bumptech .glide .load .DataSource ;
2525import com .bumptech .glide .load .engine .GlideException ;
2929import org .json .JSONException ;
3030import org .json .JSONObject ;
3131
32- import java .net .URL ;
33-
3432public class MainActivity extends AppCompatActivity {
3533
36- ImageView memeImageView ;
37- Button shareButton , nextButton ;
38- ProgressBar progressBar ;
39- String currentImageUrl ;
34+ private ImageView memeImageView ;
35+ private Button shareButton , nextButton ;
36+ private ProgressBar progressBar ;
37+ private String currentImageUrl ;
38+
39+ private boolean isNightModeEnabled = false ;
4040
4141 @ Override
4242 protected void onCreate (Bundle savedInstanceState ) {
@@ -46,14 +46,16 @@ protected void onCreate(Bundle savedInstanceState) {
4646 memeImageView = (ImageView ) findViewById (R .id .memeImageView );
4747 shareButton = (Button ) findViewById (R .id .shareButton );
4848 nextButton = (Button ) findViewById (R .id .nextButton );
49- progressBar = (ProgressBar )findViewById (R .id .progressBar );
49+ progressBar = (ProgressBar ) findViewById (R .id .progressBar );
50+
51+ checkNightMode ();
5052
5153 shareButton .setOnClickListener (new View .OnClickListener () {
5254 @ Override
5355 public void onClick (View v ) {
5456 Intent intent = new Intent (Intent .ACTION_SEND );
5557 intent .setType ("text/plain" );
56- intent .putExtra (Intent .EXTRA_TEXT , "Hey, Checkout this cool meme I got from Reddit " + currentImageUrl );
58+ intent .putExtra (Intent .EXTRA_TEXT , "Hey, Checkout this cool meme I got from Reddit " + currentImageUrl );
5759 startActivity (Intent .createChooser (intent , "Share this meme using..." ));
5860 }
5961 });
@@ -67,49 +69,84 @@ public void onClick(View v) {
6769
6870 loadMeme ();
6971 }
70- private void loadMeme () {
72+
73+ private void checkNightMode () {
74+ int nightModeFlag = getResources ().getConfiguration ().uiMode & Configuration .UI_MODE_NIGHT_MASK ;
75+
76+ if (nightModeFlag == Configuration .UI_MODE_NIGHT_YES ) {
77+ isNightModeEnabled = true ;
78+ }
79+ }
80+
81+ public boolean onCreateOptionsMenu (Menu menu ) {
82+ MenuInflater inflater = getMenuInflater ();
83+ inflater .inflate (R .menu .main_menu , menu );
84+ return true ;
85+ }
86+
87+ public boolean onOptionsItemSelected (MenuItem item ) {
88+ if (item .getItemId () == R .id .item_dark_mode ) {
89+ toggleDarkMode ();
90+ return true ;
91+ }
92+ return super .onOptionsItemSelected (item );
93+ }
94+
95+ private void toggleDarkMode () {
96+ if (isNightModeEnabled ) {
97+ AppCompatDelegate .setDefaultNightMode (AppCompatDelegate .MODE_NIGHT_NO );
98+ } else {
99+ AppCompatDelegate .setDefaultNightMode (AppCompatDelegate .MODE_NIGHT_YES );
100+ }
101+
102+ getDelegate ().applyDayNight ();
103+ isNightModeEnabled = !isNightModeEnabled ;
104+ }
105+
106+ private void loadMeme () {
71107 progressBar .setVisibility (View .VISIBLE );
72108 shareButton .setEnabled (false );
73109 nextButton .setEnabled (false );
74- // Instantiate the RequestQueue.
75- String url ="https://meme-api.herokuapp.com/gimme" ;
76-
77- // Request a string response from the provided URL.
78- JsonObjectRequest jsonObjectRequest = new JsonObjectRequest (Request .Method .GET , url , null ,
79- new Response .Listener <JSONObject >() {
80- @ Override
81- public void onResponse (JSONObject response ) {
82- try {
83- currentImageUrl = response .getString ("url" );
84- Glide .with (getApplicationContext ()).load (currentImageUrl ).listener (new RequestListener <Drawable >() {
85- @ Override
86- public boolean onLoadFailed (@ Nullable GlideException e , Object model , Target <Drawable > target , boolean isFirstResource ) {
87- progressBar .setVisibility (View .GONE );
88- nextButton .setEnabled (true );
89- return false ;
90- }
91-
92- @ Override
93- public boolean onResourceReady (Drawable resource , Object model , Target <Drawable > target , DataSource dataSource , boolean isFirstResource ) {
94- progressBar .setVisibility (View .GONE );
95- shareButton .setEnabled (true );
96- nextButton .setEnabled (true );
97- return false ;
98- }
99- }).into (memeImageView );
100- } catch (JSONException e ) {
101- e .printStackTrace ();
102- }
103- }
104- }, new Response .ErrorListener () {
105- @ Override
106- public void onErrorResponse (VolleyError error ){
107110
108- }
109- });
111+ // Instantiate the RequestQueue.
112+ String url = "https://meme-api.herokuapp.com/gimme" ;
113+
114+ // Request a string response from the provided URL.
115+ JsonObjectRequest jsonObjectRequest = new JsonObjectRequest (Request .Method .GET , url , null ,
116+ new Response .Listener <JSONObject >() {
117+ @ Override
118+ public void onResponse (JSONObject response ) {
119+ try {
120+ currentImageUrl = response .getString ("url" );
121+ Glide .with (getApplicationContext ()).load (currentImageUrl ).listener (new RequestListener <Drawable >() {
122+ @ Override
123+ public boolean onLoadFailed (@ Nullable GlideException e , Object model , Target <Drawable > target , boolean isFirstResource ) {
124+ progressBar .setVisibility (View .GONE );
125+ nextButton .setEnabled (true );
126+ return false ;
127+ }
128+
129+ @ Override
130+ public boolean onResourceReady (Drawable resource , Object model , Target <Drawable > target , DataSource dataSource , boolean isFirstResource ) {
131+ progressBar .setVisibility (View .GONE );
132+ shareButton .setEnabled (true );
133+ nextButton .setEnabled (true );
134+ return false ;
135+ }
136+ }).into (memeImageView );
137+ } catch (JSONException e ) {
138+ e .printStackTrace ();
139+ }
140+ }
141+ }, new Response .ErrorListener () {
142+ @ Override
143+ public void onErrorResponse (VolleyError error ) {
110144
111- // Add the request to the RequestQueue.
112- MySingleton .getInstance (this ).addToRequestQueue (jsonObjectRequest );
113- }
145+ }
146+ });
114147
148+ // Add the request to the RequestQueue.
149+ MySingleton .getInstance (this ).addToRequestQueue (jsonObjectRequest );
115150 }
151+
152+ }
0 commit comments