Skip to content

Commit 272a841

Browse files
committed
git commit -m "First commit"
1 parent a7721f1 commit 272a841

20 files changed

+242
-144
lines changed

.idea/misc.xml

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

+2-1
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ repositories {
2828
}
2929
dependencies {
3030
implementation fileTree(dir: 'libs', include: ['*.jar'])
31-
implementation 'com.android.support:appcompat-v7:28.0.0-alpha1'
31+
implementation 'com.android.support:appcompat-v7:28.0.0-rc02'
3232
implementation 'com.android.support:design:28.0.0'
3333
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
3434
testImplementation 'junit:junit:4.12'
@@ -40,6 +40,7 @@ dependencies {
4040
implementation 'com.jakewharton:butterknife:8.8.1'
4141
implementation 'com.squareup.picasso:picasso:2.5.2'
4242
implementation 'org.parceler:parceler-api:1.1.11'
43+
implementation 'com.android.support:preference-v7:28.0.0'
4344

4445

4546
}

app/src/main/AndroidManifest.xml

+18-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="com.example.dell.moviestage1">
44

5+
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
56
<uses-permission android:name="android.permission.INTERNET" />
67

78
<application
@@ -12,15 +13,29 @@
1213
android:roundIcon="@mipmap/ic_launcher_round"
1314
android:supportsRtl="true"
1415
android:theme="@style/BarTheme">
15-
<activity android:name=".MainActivity">
16+
<activity android:name=".MainActivity"
17+
android:launchMode="singleTop">
1618
<intent-filter>
1719
<action android:name="android.intent.action.MAIN" />
1820

1921
<category android:name="android.intent.category.LAUNCHER" />
2022
</intent-filter>
2123
</activity>
22-
<activity android:name=".MovieDetailActivity" />
23-
<activity android:name=".SettingsActivity"></activity>
24+
<activity android:name=".MovieDetailActivity"
25+
android:theme="@style/AppTheme"
26+
android:parentActivityName=".MainActivity">
27+
<meta-data
28+
android:name="android.support.PARENT_ACTIVITY"
29+
android:value=".MainActivity"></meta-data>
30+
</activity>
31+
<activity android:name=".SettingsActivity"
32+
android:theme="@style/AppTheme"
33+
android:label="@string/settings"
34+
android:parentActivityName=".MainActivity">
35+
<meta-data
36+
android:name="android:support.PARENT_ACTIVITY"
37+
android:value=".MainActivity"></meta-data>
38+
</activity>
2439
</application>
2540

2641
</manifest>
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,53 @@
11
package com.example.dell.moviestage1;
22

33
import android.content.Context;
4+
import android.content.Intent;
5+
import android.content.SharedPreferences;
46
import android.net.Uri;
7+
import android.preference.PreferenceManager;
58
import android.support.annotation.NonNull;
69
import android.support.annotation.Nullable;
710
import android.support.v4.app.LoaderManager;
811
import android.support.v4.content.Loader;
912
import android.support.v7.app.AppCompatActivity;
1013
import android.os.Bundle;
1114
import android.support.v7.widget.GridLayoutManager;
12-
import android.support.v7.widget.LinearLayoutManager;
1315
import android.support.v7.widget.RecyclerView;
16+
import android.util.Log;
1417
import android.view.Menu;
1518
import android.view.MenuItem;
1619
import android.view.View;
17-
import android.widget.AdapterView;
18-
import android.widget.ArrayAdapter;
1920
import android.widget.ImageView;
2021
import android.widget.Spinner;
21-
import android.widget.TextView;
2222
import android.support.v7.widget.Toolbar;
2323

24-
import com.squareup.picasso.Picasso;
2524

2625
import java.util.ArrayList;
2726

2827
import butterknife.BindView;
2928

30-
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<ArrayList<Movie>> {
29+
public class MainActivity extends AppCompatActivity implements LoaderManager.LoaderCallbacks<ArrayList<Movie>>, SharedPreferences.OnSharedPreferenceChangeListener {
3130

32-
String api_key = "";
31+
private static final String LOG_TAG = MainActivity.class.getName();
3332

34-
String REQUEST_URL = "https://api.themoviedb.org/3/discover/movie?api_key="+api_key+"&language=en-US&sort_by=popularity.desc&include_adult=false&include_video=false&page=1";
33+
private static final String URL_SCHEME = "https";
34+
private static final String BASE_URL = "api.tmdb.org";
35+
public static final String PATH = "/3/movie/";
3536

37+
private String api_key = "";
3638

37-
RecyclerView recyclerView;
38-
MovieAdapter adapter;
39-
Context context;
40-
Toolbar toolbar;
41-
Spinner spinner;
39+
40+
private String sortBy;
41+
42+
private RecyclerView recyclerView;
43+
private MovieAdapter adapter;
44+
private Context context;
45+
private Toolbar toolbar;
4246

4347
private static final int SECTION_LOADER_ID = 1;
44-
private TextView mEmptyStateTextView;
4548
View loadingIndicator;
46-
@BindView(R.id.imageView) ImageView poster;
49+
@BindView(R.id.imageView)
50+
ImageView poster;
4751

4852
@Override
4953
protected void onCreate(Bundle savedInstanceState) {
@@ -53,38 +57,59 @@ protected void onCreate(Bundle savedInstanceState) {
5357

5458
recyclerView = findViewById(R.id.recyclerView);
5559
toolbar = findViewById(R.id.toolbarView);
60+
loadingIndicator = findViewById(R.id.loading_indicator);
5661

5762
setSupportActionBar(toolbar);
5863

59-
60-
6164
LoaderManager loaderManager = LoaderManager.getInstance(this);
6265
loaderManager.initLoader(SECTION_LOADER_ID, null, this);
66+
}
6367

68+
private String setUpSharePreference() {
69+
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
70+
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
6471

72+
sortBy = sharedPreferences.getString(getString(R.string.settings_order_by_key), getString(R.string.highest_rated_value));
6573

74+
return sortBy;
75+
}
6676

77+
@Override
78+
protected void onDestroy() {
79+
super.onDestroy();
80+
PreferenceManager.getDefaultSharedPreferences(this).unregisterOnSharedPreferenceChangeListener(this);
6781
}
6882

6983
@NonNull
7084
@Override
7185
public Loader<ArrayList<Movie>> onCreateLoader(int i, @Nullable Bundle bundle) {
7286

73-
return new SectionLoader(context, REQUEST_URL);
87+
setUpSharePreference();
88+
Uri.Builder builder = new Uri.Builder();
89+
90+
builder.scheme(URL_SCHEME).authority(BASE_URL).path(PATH);
91+
builder.appendPath(sortBy);
92+
builder.appendQueryParameter("api_key", api_key);
93+
94+
95+
Log.e(LOG_TAG, builder.toString());
96+
97+
return new SectionLoader(context, builder.toString());
7498
}
7599

76100
@Override
77101
public void onLoadFinished(@NonNull Loader<ArrayList<Movie>> loader, ArrayList<Movie> movieArrayList) {
78102

103+
loadingIndicator = findViewById(R.id.loading_indicator);
104+
loadingIndicator.setVisibility(View.GONE);
105+
79106
adapter = new MovieAdapter(context, movieArrayList);
80107
recyclerView.setLayoutManager(new GridLayoutManager(context, 2));
81108
recyclerView.setAdapter(adapter);
82-
83109
}
84110

85111
@Override
86112
public void onLoaderReset(@NonNull Loader<ArrayList<Movie>> loader) {
87-
88113
}
89114

90115
@Override
@@ -95,25 +120,20 @@ public boolean onCreateOptionsMenu(Menu menu) {
95120

96121
@Override
97122
public boolean onOptionsItemSelected(MenuItem item) {
98-
switch (item.getItemId()){
99-
case R.id.popular:
100-
showPopular();
101-
return true;
102-
case R.id.rated:
103-
showRated();
104-
return true;
105-
default:
123+
int id = item.getItemId();
124+
if (id == R.id.settings) {
125+
Intent intent = new Intent(context, SettingsActivity.class);
126+
startActivity(intent);
127+
return true;
106128
}
107-
108-
109129
return super.onOptionsItemSelected(item);
110130
}
111131

112-
private void showRated() {
113-
}
114-
115-
private void showPopular() {
116-
117-
132+
@Override
133+
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
134+
if (key.equals(getString(R.string.settings_order_by_key))) {
135+
setUpSharePreference();
136+
getSupportLoaderManager().restartLoader(SECTION_LOADER_ID, null, this);
137+
}
118138
}
119139
}

app/src/main/java/com/example/dell/moviestage1/MovieAdapter.java

-6
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.example.dell.moviestage1;
22

3-
import android.app.Activity;
43
import android.content.Context;
54
import android.content.Intent;
65
import android.support.annotation.NonNull;
@@ -47,13 +46,8 @@ public void onClick(View v) {
4746
Intent intent = new Intent(context, MovieDetailActivity.class);
4847
intent.putExtra("result", result);
4948
context.startActivity(intent);
50-
51-
5249
}
5350
});
54-
55-
56-
5751
}
5852

5953
public static class ViewHolder extends RecyclerView.ViewHolder{

app/src/main/java/com/example/dell/moviestage1/MovieDetailActivity.java

+20-13
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,10 @@
1111

1212
public class MovieDetailActivity extends AppCompatActivity {
1313

14-
TextView vote_average_view, release_date_view, synopsis_view;
15-
ImageView poster;
16-
Context context;
17-
String release_date, synopsis, vote_average;
14+
private TextView vote_average_view, release_date_view, synopsis_view;
15+
private ImageView poster;
16+
private Context context;
17+
private String release_date, synopsis, vote_average;
1818

1919
@Override
2020
protected void onCreate(Bundle savedInstanceState) {
@@ -29,18 +29,25 @@ protected void onCreate(Bundle savedInstanceState) {
2929
Intent intent = getIntent();
3030
Movie movie = intent.getParcelableExtra("result");
3131

32+
getSupportActionBar().setTitle(movie.getTitle());
3233

3334
String url = "http://image.tmdb.org/t/p/w185/";
3435
Picasso.with(context).load(url+movie.getMovie_poster()).into(poster);
3536

36-
release_date = movie.getRelease_date();
37-
release_date_view.setText(release_date);
38-
39-
synopsis = movie.getSynopsis();
40-
synopsis_view.setText(synopsis);
41-
42-
vote_average = String.valueOf(movie.getVote_average());
43-
vote_average_view.setText(vote_average);
44-
37+
if(movie.getRelease_date() == null) {
38+
release_date_view.setText(R.string.not_known);
39+
}else{
40+
release_date = movie.getRelease_date();
41+
release_date_view.setText(release_date);
42+
}
43+
if(movie.getSynopsis() == null) {
44+
synopsis_view.setText(R.string.not_known);
45+
46+
}else{
47+
synopsis = movie.getSynopsis();
48+
synopsis_view.setText(synopsis);
49+
}
50+
vote_average = String.valueOf(movie.getVote_average());
51+
vote_average_view.setText(vote_average);
4552
}
4653
}

app/src/main/java/com/example/dell/moviestage1/QueryUtils.java

-9
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package com.example.dell.moviestage1;
22

33
import android.text.TextUtils;
4-
import android.util.Log;
54

65
import org.json.JSONArray;
76
import org.json.JSONException;
@@ -20,7 +19,6 @@
2019
public class QueryUtils {
2120
private static final String LOG_TAG = QueryUtils.class.getSimpleName();
2221

23-
2422
private QueryUtils() {
2523
}
2624

@@ -37,7 +35,6 @@ public static ArrayList<Movie> fetchData(String requestUrl) {
3735
return movies;
3836
}
3937

40-
4138
private static URL createUrl(String requestUrl) {
4239
URL url = null;
4340
try {
@@ -77,7 +74,6 @@ private static String makeHTTPRequest(URL url) throws IOException {
7774
}
7875
return jsonResponse;
7976
}
80-
8177
private static String readFromStream(InputStream inputStream) throws IOException {
8278
StringBuilder output = new StringBuilder();
8379
if (inputStream != null) {
@@ -108,21 +104,16 @@ private static ArrayList<Movie> extractDataFromStream(String jsonResponse) {
108104
String poster = object.getString("poster_path");
109105
double vote_average = object.getDouble("vote_average");
110106

111-
112107
String synopsis = object.getString("overview");
113108
String release_date = object.getString("release_date");
114109

115110
Movie movie = new Movie(title, release_date, poster, vote_average, synopsis);
116111
movieArrayList.add(movie);
117-
118-
119112
}
120-
121113
} catch (JSONException e) {
122114

123115
}
124116
return movieArrayList;
125117
}
126-
127118
}
128119

app/src/main/java/com/example/dell/moviestage1/SectionLoader.java

+2-3
Original file line numberDiff line numberDiff line change
@@ -8,20 +8,19 @@
88

99
public class SectionLoader extends AsyncTaskLoader<ArrayList<Movie>> {
1010

11-
String mUrl;
11+
private String mUrl;
1212

1313
public SectionLoader(Context context, String url){
1414
super(context);
1515
this.mUrl = url;
16-
1716
}
17+
1818
protected void onStartLoading(){
1919
forceLoad();
2020
}
2121
@Nullable
2222
@Override
2323

24-
2524
public ArrayList<Movie> loadInBackground() {
2625

2726
try{

0 commit comments

Comments
 (0)