Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
bdea654
Task1(part 1). Delete DetailsActivity and make fragments (main and de…
dmikheeva Jul 16, 2016
429bf64
Fix plurals (add plurals resource)
dmikheeva Jul 16, 2016
2e85591
Add dataLoader for loading json, remove HomeFragment for a while
dmikheeva Jul 17, 2016
691becf
Add menu with info about app
dmikheeva Jul 17, 2016
7c3b634
refactoring
dmikheeva Jul 17, 2016
57b546a
send feedback by email (Messaging app is still appear in chooser)
dmikheeva Jul 17, 2016
d51b1b0
Task1(part2) Delete HomeActivity and make HimeFragment
dmikheeva Jul 18, 2016
676daa7
Loader -> AsyncTaskLoader
dmikheeva Jul 18, 2016
0119061
fix configuration change, take savedInstance if the one already exists
dmikheeva Jul 18, 2016
757aa55
Fix troubles with names
dmikheeva Jul 18, 2016
e747f94
show choosing dialog with yaMusic and yaRadio on headset plugged action
dmikheeva Jul 18, 2016
f57d4d3
fix showing music dialog on every activity onResume action and on sta…
dmikheeva Jul 18, 2016
69636fe
Мусор
dmikheeva Jul 24, 2016
a4fd1ae
gradle dependencies: add butterKnife
dmikheeva Jul 24, 2016
20eb947
use butterKnife
dmikheeva Jul 24, 2016
0629eaa
parse json in background,
dmikheeva Jul 24, 2016
00ca540
functions instead of comments
dmikheeva Jul 24, 2016
8dbfd3b
refactoring
dmikheeva Jul 24, 2016
a5db997
redundant if
dmikheeva Jul 24, 2016
3b3a3dd
restartLoader
dmikheeva Jul 24, 2016
082d5bb
close tag
dmikheeva Jul 24, 2016
1e14308
remove homefragment
dmikheeva Jul 26, 2016
59c0474
refactoring
dmikheeva Jul 26, 2016
627148f
provide data to mainfragment exactly (without Home fragment)
dmikheeva Jul 27, 2016
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 12 additions & 0 deletions Singers/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,12 @@ android {
repositories {
mavenCentral()
}
configurations.all {
resolutionStrategy.force 'com.android.support:support-annotations:22.1.0'
}
apply plugin: 'com.android.application'
apply plugin: 'android-apt'

dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
Expand All @@ -35,6 +41,10 @@ dependencies {
compile 'com.nhaarman.listviewanimations:lib-core-slh:3.1.0@aar'
compile 'com.nineoldandroids:library:2.4.0'

//butterknife
compile 'com.jakewharton:butterknife:8.2.1'
apt 'com.jakewharton:butterknife-compiler:8.2.1'

androidTestCompile 'com.android.support.test:runner:0.4.1'
androidTestCompile 'com.android.support.test:rules:0.4.1'
// Optional -- Hamcrest library
Expand All @@ -43,4 +53,6 @@ dependencies {
androidTestCompile 'com.android.support.test.espresso:espresso-core:2.2.1'
// Optional -- UI testing with UI Automator
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.1'


}
22 changes: 5 additions & 17 deletions Singers/app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,34 +16,22 @@
android:resource="@xml/searchable" />
<activity
android:name=".MainActivity"
android:label="@string/app_name"
android:label="@string/title_activity_main"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.SEARCH" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<meta-data
android:name="android.app.searchable"
android:resource="@xml/searchable" />
</activity>
<activity
android:name=".DetailsActivity"
android:parentActivityName=".MainActivity"
android:theme="@style/AppTheme.NoActionBar">
</activity>

<application android:theme="@style/MyTheme"></application>

<activity
android:name=".HomeActivity"
android:label="@string/title_activity_home"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

</activity>
</application>

</manifest>
28 changes: 28 additions & 0 deletions Singers/app/src/main/java/ru/daria/singers/AboutProgramDialog.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package ru.daria.singers;

import android.app.DialogFragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import butterknife.ButterKnife;

/**
* Created by dsukmanova on 17.07.16.
*/
public class AboutProgramDialog extends DialogFragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstance){
View view = inflater.inflate(R.layout.about_program, null);
ButterKnife.findById(view,R.id.okButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
getDialog().dismiss();
}
});
getDialog().setTitle(R.string.aboutTitle);
return view;
}

}
Original file line number Diff line number Diff line change
@@ -1,60 +1,88 @@
package ru.daria.singers;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.content.AsyncTaskLoader;
import android.content.Context;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import java.io.Serializable;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

/**
* Activity для отображения окна приветствия, загрузки списка исполнителей
* Created by dsukmanova on 17.07.16.
*/
public class HomeActivity extends Activity {
List<Singer> singers = new ArrayList<Singer>();
public class DataLoader extends AsyncTaskLoader<DataLoaderResult<List<Singer>>> {
private final String URLSingers = "http://cache-default06g.cdn.yandex.net/download.cdn.yandex.net/mobilization-2016/artists.json";
private HttpURLConnection urlConnection = null;
private DataLoaderResult<List<Singer>> result;

public DataLoader(Context context) {
super(context);
}

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.splash);
Extractor ex = new Extractor(new Extractor.AsyncResponse() {
@Override
public void processFinish(String output) {
try {
JSONArray dataJson = new JSONArray(output);
singers = getSingersFromJson(dataJson);
Intent i = new Intent(HomeActivity.this, MainActivity.class);
i.putExtra("SINGERS", (Serializable) singers);
startActivity(i);
finish();
} catch (JSONException ex) {
ex.printStackTrace();
Button b = (Button) findViewById(R.id.tryAgainButton);
b.setVisibility(View.VISIBLE);
TextView v = (TextView) findViewById(R.id.splashText);
v.setText("Невозможно загрузить список исполнителей.");
}
}
});
ex.execute();
protected void onStartLoading() {
super.onStartLoading();
if (result != null) {
deliverResult(result);
} else {
forceLoad();
}
}

@Override
public void deliverResult(DataLoaderResult<List<Singer>> result) {
this.result = result;
super.deliverResult(result);
}

public void buttonOnClick(View view) {
Button b = (Button) findViewById(R.id.tryAgainButton);
b.setVisibility(View.INVISIBLE);
Intent i = new Intent(HomeActivity.this, HomeActivity.class);
startActivity(i);
@Override
public DataLoaderResult<List<Singer>> loadInBackground() {
DataLoaderResult<List<Singer>> result = new DataLoaderResult<List<Singer>>();
try {
URL url = new URL(URLSingers);
urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.setRequestMethod("GET");
urlConnection.connect();

InputStream inputStream = urlConnection.getInputStream();
StringBuilder buffer = new StringBuilder();
BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
String line;
while ((line = reader.readLine()) != null) {
buffer.append(line);
}
String resultJson = buffer.toString();
JSONArray dataJson = new JSONArray(resultJson);
List<Singer> singers = getSingersFromJson(dataJson);
result.setResult(singers);
} catch (MalformedURLException ex) {
Log.e("ERROR", "URL is not available");
result.setException(ex);
} catch (IOException ex) {
Log.e("ERROR", "Cannot open url connection.");
result.setException(ex);
} catch (JSONException ex) {
Log.e("ERROR", "Problems with JSON");
result.setException(ex);
} finally {
if (urlConnection != null) {
urlConnection.disconnect();
}
}
return result;
}

/**
Expand Down Expand Up @@ -109,5 +137,4 @@ public List<Singer> getSingersFromJson(JSONArray jSingers) {
}
return singers;
}

}
27 changes: 27 additions & 0 deletions Singers/app/src/main/java/ru/daria/singers/DataLoaderResult.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package ru.daria.singers;

/**
* Created by dsukmanova on 24.07.16.
*/

public class DataLoaderResult <T>{
private Exception exception;
private T result;

public void setException(Exception exception) {
this.exception = exception;
}

public void setResult(T result) {
this.result = result;
}

public Exception getException() {

return exception;
}

public T getResult() {
return result;
}
}
Original file line number Diff line number Diff line change
@@ -1,58 +1,70 @@
package ru.daria.singers;

import android.content.Intent;
import android.app.Fragment;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import android.widget.TextView;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class DetailsActivity extends AppCompatActivity {
//настройка кэширования изображений
import butterknife.BindView;
import butterknife.ButterKnife;

/**
* Created by dsukmanova on 16.07.16.
*/
public class DetailsFragment extends Fragment {
private static DisplayImageOptions options = new DisplayImageOptions.Builder().
cacheInMemory(true).cacheOnDisk(true).build();
private String albumsDescr;

@Override
protected void onCreate(Bundle savedInstanceState) {
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.details);
//ButterKnife.bind(this);
}

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.details, container, false);
final MainActivity activity = (MainActivity) getActivity();

Toolbar toolbar = activity.getToolbar();
toolbar.setNavigationIcon(R.drawable.abc_ic_ab_back_mtrl_am_alpha);
activity.showMenuVisible(toolbar.getMenu(), false);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Эта настройке место в Activity.

@Override
public void onClick(View v) {
//действие аналогично стандартной кнопке "Назад"
onBackPressed();
activity.onBackPressed();
}
});

ImageView image = (ImageView) findViewById(R.id.image);
TextView description = (TextView) findViewById(R.id.descriprion);
TextView genres = (TextView) findViewById(R.id.genres);
TextView albums = (TextView) findViewById(R.id.albums);
ImageView image = ButterKnife.findById(view, R.id.image);
TextView description = ButterKnife.findById(view, R.id.descriprion);
TextView genres = ButterKnife.findById(view, R.id.genres);
TextView albums = ButterKnife.findById(view, R.id.albums);
//получаем экземпляр Singer из MainActivity
Intent intent = getIntent();
Bundle b = intent.getExtras();
Bundle b = getArguments();
Singer singer = (Singer) b.get("SINGER");

toolbar.setTitle(singer.getName());
//пока подгружается изображение показываем стандартное
String uri = "@drawable/defaultimage";
int imageResource = getResources().getIdentifier(uri, null, getPackageName());
int imageResource = getResources().getIdentifier(uri, null, activity.getPackageName());
Drawable res = getResources().getDrawable(imageResource);
image.setImageDrawable(res);

//Конфигурация для ImageLoader
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(this).build();
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(activity).build();
final ImageLoader imageLoader = ImageLoader.getInstance();
imageLoader.init(config);

Expand All @@ -63,20 +75,13 @@ public void onClick(View v) {
description.setText(singer.getDescription());
genres.setText(singer.genresToString());
int albumsNum = singer.getAlbums();
String[] albumCases = {"альбом", "альбома", "альбомов"};
int tracksNum = singer.getTracks();
String[] trackCases = {"песня", "песни", "песен"};
//склоняем альбомы и песни
String albumsDescr = "%d %s • %d %s";
albumsDescr = String.format(albumsDescr, albumsNum, singer.getEnding(albumsNum, albumCases),
tracksNum, singer.getEnding(tracksNum, trackCases));
String albumsDescr = "%s • %s";
albumsDescr = String.format(albumsDescr,
getResources().getQuantityString(R.plurals.songs, albumsNum, albumsNum),

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

getResources().getQuantityString(R.plurals.tracks, tracksNum, tracksNum));
albums.setText(albumsDescr);

return view;
}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
return super.onCreateOptionsMenu(menu);
}

}
Loading