From fffa60e24d6db35ff6f5c639bec484c754cf8e29 Mon Sep 17 00:00:00 2001 From: Aleksandra Bobrova Date: Sat, 16 Jul 2016 19:58:26 +0300 Subject: [PATCH 01/27] Replaced two activities by two fragments and one activity. --- .../android/artists/ArtistDetailActivity.java | 77 ------------- .../artists/{ => ui}/MainActivity.java | 8 +- .../ui/fragment/ArtistDetailFragment.java | 7 ++ .../artists/ui/fragment/MainFragment.java | 109 ++++++++++++++++++ .../res/layout/activity_artist_detail.xml | 84 -------------- .../res/layout/fragment_artist_detail.xml | 6 + app/src/main/res/layout/fragment_main.xml | 13 +++ 7 files changed, 141 insertions(+), 163 deletions(-) delete mode 100644 app/src/main/java/com/bobrusha/android/artists/ArtistDetailActivity.java rename app/src/main/java/com/bobrusha/android/artists/{ => ui}/MainActivity.java (93%) create mode 100644 app/src/main/java/com/bobrusha/android/artists/ui/fragment/ArtistDetailFragment.java create mode 100644 app/src/main/java/com/bobrusha/android/artists/ui/fragment/MainFragment.java delete mode 100644 app/src/main/res/layout/activity_artist_detail.xml create mode 100644 app/src/main/res/layout/fragment_artist_detail.xml create mode 100644 app/src/main/res/layout/fragment_main.xml diff --git a/app/src/main/java/com/bobrusha/android/artists/ArtistDetailActivity.java b/app/src/main/java/com/bobrusha/android/artists/ArtistDetailActivity.java deleted file mode 100644 index df34236..0000000 --- a/app/src/main/java/com/bobrusha/android/artists/ArtistDetailActivity.java +++ /dev/null @@ -1,77 +0,0 @@ -package com.bobrusha.android.artists; - -import android.content.Intent; -import android.os.Bundle; -import android.support.v7.app.ActionBar; -import android.support.v7.app.AppCompatActivity; -import android.text.TextUtils; -import android.view.MenuItem; -import android.view.View; -import android.widget.ImageView; -import android.widget.TextView; - -import com.bobrusha.android.artists.model.ArtistInfo; -import com.squareup.picasso.Callback; -import com.squareup.picasso.Picasso; - -/** - * Activity with detailed information about chosen musician. - * - * @author Aleksandra Bobrova - */ -public class ArtistDetailActivity extends AppCompatActivity { - - @Override - protected void onCreate(Bundle savedInstanceState) { - super.onCreate(savedInstanceState); - - setContentView(R.layout.activity_artist_detail); - Intent intent = getIntent(); - ArtistInfo artistInfo = intent.getParcelableExtra(Constants.EXTRA_ARTIST); - ActionBar actionBar = getSupportActionBar(); - if (actionBar != null) { - actionBar.setTitle(artistInfo.getName()); - actionBar.setDisplayHomeAsUpEnabled(true); - } - - final ImageView imageView = (ImageView) findViewById(R.id.artist_detail_big_img); - Picasso.with(imageView.getContext()) - .load(artistInfo.getCover().getBig()) - .into(imageView, new Callback() { - @Override - public void onSuccess() { - imageView.setVisibility(View.VISIBLE); - } - - @Override - public void onError() { - //Stop progressBar and show text - findViewById(R.id.progress_bar).setVisibility(View.INVISIBLE); - findViewById(R.id.artist_detail_no_image).setVisibility(View.VISIBLE); - - } - }); - - TextView genreTextView = (TextView) findViewById(R.id.artist_detail_genre_text); - genreTextView.setText(TextUtils.join(", ", artistInfo.getGenres())); - - TextView albumsAndTracksTextView = (TextView) findViewById(R.id.artist_detail_albums_and_tracks); - String pattern = getString(R.string.artist_detail_albums_and_tracks); - albumsAndTracksTextView.setText( - String.format(pattern, artistInfo.getAlbums(), artistInfo.getTracks()) - ); - - TextView textOfBiographyTextView = (TextView) findViewById(R.id.artist_detail_biography_text); - textOfBiographyTextView.setText(artistInfo.getDescription()); - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - switch (item.getItemId()) { - case android.R.id.home: - finish(); - return true; - } - return super.onOptionsItemSelected(item); - } -} diff --git a/app/src/main/java/com/bobrusha/android/artists/MainActivity.java b/app/src/main/java/com/bobrusha/android/artists/ui/MainActivity.java similarity index 93% rename from app/src/main/java/com/bobrusha/android/artists/MainActivity.java rename to app/src/main/java/com/bobrusha/android/artists/ui/MainActivity.java index c498549..33a7b6e 100644 --- a/app/src/main/java/com/bobrusha/android/artists/MainActivity.java +++ b/app/src/main/java/com/bobrusha/android/artists/ui/MainActivity.java @@ -1,4 +1,4 @@ -package com.bobrusha.android.artists; +package com.bobrusha.android.artists.ui; import android.content.Intent; import android.os.Bundle; @@ -10,6 +10,10 @@ import android.support.v7.widget.LinearLayoutManager; import android.support.v7.widget.RecyclerView; +import com.bobrusha.android.artists.ArtistInfoLoader; +import com.bobrusha.android.artists.BusProvider; +import com.bobrusha.android.artists.Constants; +import com.bobrusha.android.artists.R; import com.bobrusha.android.artists.recycler_view.ArtistPreviewAdapter; import com.bobrusha.android.artists.recycler_view.DividerItemDecoration; import com.bobrusha.android.artists.event.ArtistPreviewOnClickEvent; @@ -36,7 +40,7 @@ protected void onCreate(Bundle savedInstanceState) { RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recycler_view_artists); recyclerView.setLayoutManager(new LinearLayoutManager(this)); - + mAdapter = new ArtistPreviewAdapter(); recyclerView.setAdapter(mAdapter); diff --git a/app/src/main/java/com/bobrusha/android/artists/ui/fragment/ArtistDetailFragment.java b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/ArtistDetailFragment.java new file mode 100644 index 0000000..d4f0efb --- /dev/null +++ b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/ArtistDetailFragment.java @@ -0,0 +1,7 @@ +package com.bobrusha.android.artists.ui.fragment; + +/** + * Created by Aleksandra on 15/07/16. + */ +public class ArtistDetailFragment { +} diff --git a/app/src/main/java/com/bobrusha/android/artists/ui/fragment/MainFragment.java b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/MainFragment.java new file mode 100644 index 0000000..d908581 --- /dev/null +++ b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/MainFragment.java @@ -0,0 +1,109 @@ +package com.bobrusha.android.artists.ui.fragment; + +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; +import android.support.v4.app.Fragment; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; + +import com.bobrusha.android.artists.R; + +/** + * A simple {@link Fragment} subclass. + * Activities that contain this fragment must implement the + * {@link MainFragment.OnFragmentInteractionListener} interface + * to handle interaction events. + * Use the {@link MainFragment#newInstance} factory method to + * create an instance of this fragment. + * + */ +public class MainFragment extends Fragment { + // TODO: Rename parameter arguments, choose names that match + // the fragment initialization parameters, e.g. ARG_ITEM_NUMBER + private static final String ARG_PARAM1 = "param1"; + private static final String ARG_PARAM2 = "param2"; + + // TODO: Rename and change types of parameters + private String mParam1; + private String mParam2; + + private OnFragmentInteractionListener mListener; + + /** + * Use this factory method to create a new instance of + * this fragment using the provided parameters. + * + * @param param1 Parameter 1. + * @param param2 Parameter 2. + * @return A new instance of fragment MainFragment. + */ + // TODO: Rename and change types and number of parameters + public static MainFragment newInstance(String param1, String param2) { + MainFragment fragment = new MainFragment(); + Bundle args = new Bundle(); + args.putString(ARG_PARAM1, param1); + args.putString(ARG_PARAM2, param2); + fragment.setArguments(args); + return fragment; + } + public MainFragment() { + // Required empty public constructor + } + + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (getArguments() != null) { + mParam1 = getArguments().getString(ARG_PARAM1); + mParam2 = getArguments().getString(ARG_PARAM2); + } + } + + @Override + public View onCreateView(LayoutInflater inflater, ViewGroup container, + Bundle savedInstanceState) { + // Inflate the layout for this fragment + return inflater.inflate(R.layout.fragment_main, container, false); + } + + // TODO: Rename method, update argument and hook method into UI event + public void onButtonPressed(Uri uri) { + if (mListener != null) { + mListener.onFragmentInteraction(uri); + } + } + + @Override + public void onAttach(Context context) { + super.onAttach(context); + if (context instanceof OnFragmentInteractionListener) { + mListener = (OnFragmentInteractionListener) context; + } else { + throw new RuntimeException(context.toString() + + " must implement OnFragmentInteractionListener"); + } + } + + @Override + public void onDetach() { + super.onDetach(); + mListener = null; + } + + /** + * This interface must be implemented by activities that contain this + * fragment to allow an interaction in this fragment to be communicated + * to the activity and potentially other fragments contained in that + * activity. + *

+ * See the Android Training lesson Communicating with Other Fragments for more information. + */ + public interface OnFragmentInteractionListener { + // TODO: Update argument type and name + void onFragmentInteraction(Uri uri); + } +} diff --git a/app/src/main/res/layout/activity_artist_detail.xml b/app/src/main/res/layout/activity_artist_detail.xml deleted file mode 100644 index b2f5639..0000000 --- a/app/src/main/res/layout/activity_artist_detail.xml +++ /dev/null @@ -1,84 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_artist_detail.xml b/app/src/main/res/layout/fragment_artist_detail.xml new file mode 100644 index 0000000..8e050bd --- /dev/null +++ b/app/src/main/res/layout/fragment_artist_detail.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_main.xml b/app/src/main/res/layout/fragment_main.xml new file mode 100644 index 0000000..ece20ea --- /dev/null +++ b/app/src/main/res/layout/fragment_main.xml @@ -0,0 +1,13 @@ + + + + + + From 73ad9d6b5a482ee558a89e547523f83086486d56 Mon Sep 17 00:00:00 2001 From: Aleksandra Bobrova Date: Sun, 17 Jul 2016 02:51:00 +0300 Subject: [PATCH 02/27] Added drawer layout and fragment (about). --- .../android/artists/ui/fragment/AboutFragment.java | 10 ++++++++++ app/src/main/res/layout/fragment_about.xml | 11 +++++++++++ app/src/main/res/layout/toolbar.xml | 6 ++++++ app/src/main/res/menu/drawer_menu.xml | 4 ++++ 4 files changed, 31 insertions(+) create mode 100644 app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java create mode 100644 app/src/main/res/layout/fragment_about.xml create mode 100644 app/src/main/res/layout/toolbar.xml create mode 100644 app/src/main/res/menu/drawer_menu.xml diff --git a/app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java new file mode 100644 index 0000000..6057a43 --- /dev/null +++ b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java @@ -0,0 +1,10 @@ +package com.bobrusha.android.artists.ui.fragment; + +import android.support.v4.app.Fragment; + +/** + * Created by Aleksandra on 16/07/16. + */ +public class AboutFragment extends Fragment { + +} diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml new file mode 100644 index 0000000..021f684 --- /dev/null +++ b/app/src/main/res/layout/fragment_about.xml @@ -0,0 +1,11 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/toolbar.xml b/app/src/main/res/layout/toolbar.xml new file mode 100644 index 0000000..f8adce5 --- /dev/null +++ b/app/src/main/res/layout/toolbar.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/drawer_menu.xml b/app/src/main/res/menu/drawer_menu.xml new file mode 100644 index 0000000..fe187c0 --- /dev/null +++ b/app/src/main/res/menu/drawer_menu.xml @@ -0,0 +1,4 @@ + +

+ + \ No newline at end of file From 60c8781d1dab4fe6508601378d49743ff8a3eead Mon Sep 17 00:00:00 2001 From: Aleksandra Bobrova Date: Mon, 18 Jul 2016 15:43:12 +0300 Subject: [PATCH 03/27] Added button for sending email to developers. Worked with drawer layout menu. Fixed link for fetching data. --- .../artists/ui/fragment/AboutFragment.java | 48 +++++++++++++++++++ app/src/main/res/layout/fragment_about.xml | 36 ++++++++++---- 2 files changed, 76 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java index 6057a43..72e569c 100644 --- a/app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java +++ b/app/src/main/java/com/bobrusha/android/artists/ui/fragment/AboutFragment.java @@ -1,10 +1,58 @@ package com.bobrusha.android.artists.ui.fragment; +import android.content.Intent; +import android.os.Bundle; +import android.support.annotation.Nullable; import android.support.v4.app.Fragment; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.Button; +import android.widget.Toast; + +import com.bobrusha.android.artists.R; /** * Created by Aleksandra on 16/07/16. */ public class AboutFragment extends Fragment { + private static final String EMAIL_TO = "bobrova.aleksand@gmail.com"; + private static final String EMAIL_SUBJECT = "Artists app"; + + @Nullable + @Override + public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + View v = inflater.inflate(R.layout.fragment_settings, container, false); + + Button button = (Button) v.findViewById(R.id.btn_send_email_to_devs); + button.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + onSendEmailClick(v); + } + }); + + return v; + + } + + public void onSendEmailClick(View v) { + + Log.v(this.getClass().toString(), "q"); + + Intent i = new Intent(Intent.ACTION_SEND); + i.setType("message/rfc822"); + i.putExtra(Intent.EXTRA_EMAIL, new String[]{EMAIL_TO}); + i.putExtra(Intent.EXTRA_SUBJECT, EMAIL_SUBJECT); + i.putExtra(Intent.EXTRA_TEXT, ""); + + try { + startActivity(Intent.createChooser(i, "Send mail...")); + } catch (android.content.ActivityNotFoundException ex) { + //TODO: delete toast + Toast.makeText(getActivity(), "There are no email clients installed.", Toast.LENGTH_SHORT).show(); + } + } } diff --git a/app/src/main/res/layout/fragment_about.xml b/app/src/main/res/layout/fragment_about.xml index 021f684..022dc98 100644 --- a/app/src/main/res/layout/fragment_about.xml +++ b/app/src/main/res/layout/fragment_about.xml @@ -1,11 +1,31 @@ - + - + - \ No newline at end of file + + +