diff --git a/.gitattributes b/.gitattributes
new file mode 100644
index 0000000..dfe0770
--- /dev/null
+++ b/.gitattributes
@@ -0,0 +1,2 @@
+# Auto detect text files and perform LF normalization
+* text=auto
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..5edb4ee
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,10 @@
+*.iml
+.gradle
+/local.properties
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
diff --git a/.idea/caches/build_file_checksums.ser b/.idea/caches/build_file_checksums.ser
new file mode 100644
index 0000000..34b4040
Binary files /dev/null and b/.idea/caches/build_file_checksums.ser differ
diff --git a/.idea/codeStyles/Project.xml b/.idea/codeStyles/Project.xml
new file mode 100644
index 0000000..30aa626
--- /dev/null
+++ b/.idea/codeStyles/Project.xml
@@ -0,0 +1,29 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..7ac24c7
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,18 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..37a7509
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml
new file mode 100644
index 0000000..7f68460
--- /dev/null
+++ b/.idea/runConfigurations.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
new file mode 100644
index 0000000..94a25f7
--- /dev/null
+++ b/.idea/vcs.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/.gitignore b/app/.gitignore
new file mode 100644
index 0000000..796b96d
--- /dev/null
+++ b/app/.gitignore
@@ -0,0 +1 @@
+/build
diff --git a/app/build.gradle b/app/build.gradle
new file mode 100644
index 0000000..8766de4
--- /dev/null
+++ b/app/build.gradle
@@ -0,0 +1,34 @@
+apply plugin: 'com.android.application'
+
+android {
+ compileSdkVersion 27
+ defaultConfig {
+ applicationId "com.example.android.mygithubclient"
+ minSdkVersion 15
+ targetSdkVersion 27
+ versionCode 1
+ versionName "1.0"
+ testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
+ }
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
+ }
+ }
+ dataBinding {
+ enabled true
+ }
+}
+
+dependencies {
+ implementation fileTree(dir: 'libs', include: ['*.jar'])
+ implementation 'com.android.support:appcompat-v7:27.1.1'
+ implementation 'com.android.support.constraint:constraint-layout:1.1.0'
+ testImplementation 'junit:junit:4.12'
+ androidTestImplementation 'com.android.support.test:runner:1.0.2'
+ androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
+ implementation 'com.android.support:support-v4:27.1.1'
+ implementation 'net.yslibrary.keyboardvisibilityevent:keyboardvisibilityevent:2.1.0'
+ implementation 'com.squareup.picasso:picasso:2.71828'
+}
diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro
new file mode 100644
index 0000000..f1b4245
--- /dev/null
+++ b/app/proguard-rules.pro
@@ -0,0 +1,21 @@
+# Add project specific ProGuard rules here.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
+#
+# For more details, see
+# http://developer.android.com/guide/developing/tools/proguard.html
+
+# If your project uses WebView with JS, uncomment the following
+# and specify the fully qualified class name to the JavaScript interface
+# class:
+#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
+# public *;
+#}
+
+# Uncomment this to preserve the line number information for
+# debugging stack traces.
+#-keepattributes SourceFile,LineNumberTable
+
+# If you keep the line number information, uncomment this to
+# hide the original source file name.
+#-renamesourcefileattribute SourceFile
diff --git a/app/src/androidTest/java/com/example/android/mygithubclient/ExampleInstrumentedTest.java b/app/src/androidTest/java/com/example/android/mygithubclient/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..06ad538
--- /dev/null
+++ b/app/src/androidTest/java/com/example/android/mygithubclient/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package com.example.android.mygithubclient;
+
+import android.content.Context;
+import android.support.test.InstrumentationRegistry;
+import android.support.test.runner.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see Testing documentation
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getTargetContext();
+
+ assertEquals("com.example.android.mygithubclient", appContext.getPackageName());
+ }
+}
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..1053e58
--- /dev/null
+++ b/app/src/main/AndroidManifest.xml
@@ -0,0 +1,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android/mygithubclient/DetailsFragment.java b/app/src/main/java/com/example/android/mygithubclient/DetailsFragment.java
new file mode 100644
index 0000000..1e14a8d
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/DetailsFragment.java
@@ -0,0 +1,86 @@
+package com.example.android.mygithubclient;
+
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ImageView;
+import android.widget.TextView;
+import com.squareup.picasso.Picasso;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import static com.example.android.mygithubclient.util.DateUtils.isoDateToNormal;
+import static com.example.android.mygithubclient.util.FileUtils.getFileSize;
+
+public class DetailsFragment extends Fragment {
+
+ public DetailsFragment() {}
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.detail_layout, container, false);
+ List sections = new ArrayList<>();
+
+ Repository currentRepository = getArguments().getParcelable("object");
+
+ ImageView imageView = rootView.findViewById(R.id.avatarImage);
+ Picasso.get().load(currentRepository.getAvatar()).into(imageView);
+
+ TextView ownerLogin = rootView.findViewById(R.id.ownerLogin);
+ ownerLogin.setText(currentRepository.getUserLogin());
+ sections.add(ownerLogin);
+
+ TextView repositoryName = rootView.findViewById(R.id.repositoryName);
+ repositoryName.setText(currentRepository.getName());
+ sections.add(repositoryName);
+
+ TextView starsCount = rootView.findViewById(R.id.starsNumber);
+ starsCount.setText(currentRepository.getStarsGiven());
+
+ TextView watchersCount = rootView.findViewById(R.id.watchersNumber);
+ watchersCount.setText(currentRepository.getWatchersCount());
+
+ TextView forksCount = rootView.findViewById(R.id.forksNumber);
+ forksCount.setText(currentRepository.getForksCount());
+
+ TextView privacy = rootView.findViewById(R.id.typeOfRepo);
+ privacy.setText(toRepositoryType(currentRepository.isOpenSource()));
+
+ TextView language = rootView.findViewById(R.id.programmingDescription);
+ language.setText(currentRepository.getProgrammingLanguage());
+ sections.add(language);
+
+ TextView issuesCount = rootView.findViewById(R.id.issuesNumber);
+ issuesCount.setText(currentRepository.getIssuesCount());
+
+ TextView branchType = rootView.findViewById(R.id.branchType);
+ branchType.setText(currentRepository.getBranchesType());
+ sections.add(branchType);
+
+ TextView createdDate = rootView.findViewById(R.id.createDate);
+ createdDate.setText(isoDateToNormal((currentRepository.getCreatedDate())));
+
+ TextView sizeNumber = rootView.findViewById(R.id.sizeNumber);
+ sizeNumber.setText(getFileSize(currentRepository.getSizeRepo()));
+
+ TextView updatedDate = rootView.findViewById(R.id.updatedDate);
+ updatedDate.setText(isoDateToNormal((currentRepository.getUpdateDate())));
+
+ String defaultStatement = getString(R.string.no_info);
+ for (int i = 0; i < sections.size(); i++) {
+ TextView currentTextView = sections.get(i);
+ if(currentTextView.getText().equals(getString(R.string.only_null))){
+ currentTextView.setText(defaultStatement);
+ }
+ }
+ return rootView;
+ }
+
+ private String toRepositoryType(boolean isOpenSource){
+ return isOpenSource ? getString(R.string.privates) : getString(R.string.publics);
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/JsonRepositoryParser.java b/app/src/main/java/com/example/android/mygithubclient/JsonRepositoryParser.java
new file mode 100644
index 0000000..04e4eb0
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/JsonRepositoryParser.java
@@ -0,0 +1,34 @@
+package com.example.android.mygithubclient;
+
+import org.json.JSONException;
+import org.json.JSONObject;
+
+public class JsonRepositoryParser {
+
+ public JsonRepositoryParser(){}
+
+ public static Repository parseRepository(JSONObject jsonRepository) throws JSONException {
+ String fullName = jsonRepository.getString("full_name");
+ String starsGiven = jsonRepository.getString("stargazers_count");
+ String watchersCount = jsonRepository.getString("watchers_count");
+ String forksCount = jsonRepository.getString("forks_count");
+ boolean openSource = jsonRepository.getBoolean("private");
+ String programmingLanguage = jsonRepository.getString("language");
+ String issuesCount = jsonRepository.getString("open_issues_count");
+ String branchesType = jsonRepository.getString("default_branch");
+ String createdDate = jsonRepository.getString("created_at");
+ String updatedDate = jsonRepository.getString("updated_at");
+ long sizeRepo = jsonRepository.getLong("size");
+ String name = jsonRepository.getString("name");
+ JSONObject owner = jsonRepository.getJSONObject("owner");
+ String avatar = owner.getString("avatar_url");
+ String userLogin = owner.getString("login");
+ return new RepositoryBuilder().setFullName(fullName).setStarsGiven(starsGiven)
+ .setAvatar(avatar).setUserLogin(userLogin).setWatchersCount(watchersCount)
+ .setForksCount(forksCount).setOpenSource(openSource)
+ .setProgrammingLanguage(programmingLanguage).setIssuesCount(issuesCount)
+ .setBranchesType(branchesType).setCreatedDate(createdDate)
+ .setUpdatedDate(updatedDate).setSizeRepo(sizeRepo).setName(name)
+ .createRepository();
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/MainActivity.java b/app/src/main/java/com/example/android/mygithubclient/MainActivity.java
new file mode 100644
index 0000000..f3d53b7
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/MainActivity.java
@@ -0,0 +1,18 @@
+package com.example.android.mygithubclient;
+
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+
+public class MainActivity extends AppCompatActivity {
+
+ public static final String LOG = MainActivity.class.getName();
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_main);
+ SearchFragment fragment = new SearchFragment();
+ android.support.v4.app.FragmentManager fragmentManager = getSupportFragmentManager();
+ fragmentManager.beginTransaction().replace(R.id.view_pager,fragment).commit();
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/Networking.java b/app/src/main/java/com/example/android/mygithubclient/Networking.java
new file mode 100644
index 0000000..55aee8e
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/Networking.java
@@ -0,0 +1,114 @@
+package com.example.android.mygithubclient;
+
+import android.text.TextUtils;
+import android.util.Log;
+import org.json.JSONArray;
+import org.json.JSONException;
+import org.json.JSONObject;
+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.nio.charset.Charset;
+import java.util.ArrayList;
+import java.util.List;
+import static com.example.android.mygithubclient.MainActivity.LOG;
+
+public class Networking {
+
+ private Networking() {}
+
+ private static final int READ_TIMEOUT = 10000;
+ private static final int CONNECT_TIMEOUT = 15000;
+ private static final int SUCCESS_CODE = 200;
+
+ private static URL createUrl(String stringUrl) {
+ URL url = null;
+ try {
+ url = new URL(stringUrl);
+ } catch (MalformedURLException e) {
+ Log.e(LOG, "Malformed url: " + stringUrl, e);
+ }
+ return url;
+ }
+
+ private static String makeHttpRequest(URL url) throws IOException {
+ String jsonResponse = "";
+ if (url == null) {
+ return null;
+ }
+
+ HttpURLConnection urlConnection = null;
+ InputStream inputStream = null;
+ try {
+ urlConnection = (HttpURLConnection) url.openConnection();
+ urlConnection.setReadTimeout(READ_TIMEOUT);
+ urlConnection.setConnectTimeout(CONNECT_TIMEOUT);
+ urlConnection.connect();
+ if (urlConnection.getResponseCode() == SUCCESS_CODE) {
+ inputStream = urlConnection.getInputStream();
+ jsonResponse = readFromStream(inputStream);
+ } else {
+ Log.e(LOG, "ERROR response code " + urlConnection.getResponseCode());
+ }
+ } catch (IOException e) {
+ Log.e(LOG, "ERROR with marketRecords JSON", e);
+ } finally {
+ if (urlConnection != null) {
+ urlConnection.disconnect();
+ }
+ if (inputStream != null) {
+ inputStream.close();
+ }
+ }
+ return jsonResponse;
+ }
+
+ private static String readFromStream(InputStream inputStream) throws IOException {
+ StringBuilder output = new StringBuilder();
+ if (inputStream != null) {
+ InputStreamReader inputStreamReader = new InputStreamReader(inputStream, Charset.forName("UTF-8"));
+ BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
+ String line = bufferedReader.readLine();
+ while (line != null) {
+ output.append(line);
+ line = bufferedReader.readLine();
+ }
+ }
+ return output.toString();
+ }
+
+ private static List extractFeatureFromJson(String repositoryJson) {
+ if (TextUtils.isEmpty(repositoryJson)) {
+ return null;
+ }
+
+ List repositories = new ArrayList<>();
+
+ try {
+ JSONArray repositoryJsonArray = new JSONArray(repositoryJson);
+ for (int i = 0; i < repositoryJsonArray.length(); i++) {
+ JSONObject currentRepository = repositoryJsonArray.getJSONObject(i);
+ Repository repository = JsonRepositoryParser.parseRepository(currentRepository);
+ repositories.add(repository);
+ }
+ } catch (JSONException e) {
+ Log.e("QueryUtils", "Error parsing JSON", e);
+ }
+ return repositories;
+ }
+
+ public static List fetchMarketRecordData(String requestUrl) {
+ URL url = createUrl(requestUrl);
+ String jsonResponse = null;
+ try {
+ jsonResponse = makeHttpRequest(url);
+ } catch (IOException e) {
+ Log.e(LOG, "Error with HTTP request", e);
+ }
+ return extractFeatureFromJson(jsonResponse);
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/Repository.java b/app/src/main/java/com/example/android/mygithubclient/Repository.java
new file mode 100644
index 0000000..644025e
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/Repository.java
@@ -0,0 +1,164 @@
+package com.example.android.mygithubclient;
+
+import android.os.Parcel;
+import android.os.Parcelable;
+
+public class Repository implements Parcelable {
+
+ private String fullName;
+
+ private String starsGiven;
+
+ private String avatar;
+
+ private String userLogin;
+
+ private String watchersCount;
+
+ private String forksCount;
+
+ private boolean openSource;
+
+ private String programmingLanguage;
+
+ private String issuesCount;
+
+ private String branchesType;
+
+ private String createdDate;
+
+ private String updatedDate;
+
+ private long sizeRepo;
+
+ private String name;
+
+ Repository(String fullName, String starsGiven, String avatar, String userLogin,
+ String watchersCount, String forksCount, boolean openSource,
+ String programmingLanguage, String issuesCount, String branchesType,
+ String createdDate, String updatedDate, long sizeRepo, String name){
+
+ this.fullName = fullName;
+ this.starsGiven = starsGiven;
+ this.avatar = avatar;
+ this.userLogin = userLogin;
+ this.watchersCount = watchersCount;
+ this.forksCount = forksCount;
+ this.openSource = openSource;
+ this.programmingLanguage = programmingLanguage;
+ this.issuesCount = issuesCount;
+ this.branchesType = branchesType;
+ this.createdDate = createdDate;
+ this.updatedDate = updatedDate;
+ this.sizeRepo = sizeRepo;
+ this.name = name;
+ }
+
+ public String getFullName() {
+ return fullName;
+ }
+
+ public String getStarsGiven() {
+ return starsGiven;
+ }
+
+ public String getAvatar() {
+ return avatar;
+ }
+
+ public String getUserLogin() {
+ return userLogin;
+ }
+
+ public String getWatchersCount(){
+ return watchersCount;
+ }
+
+ public String getForksCount() {
+ return forksCount;
+ }
+
+ public boolean isOpenSource() {
+ return openSource;
+ }
+
+ public String getProgrammingLanguage() {
+ return programmingLanguage;
+ }
+
+ public String getIssuesCount() {
+ return issuesCount;
+ }
+
+ public String getBranchesType() {
+ return branchesType;
+ }
+
+ public String getCreatedDate() {
+ return createdDate;
+ }
+
+ public String getUpdateDate() {
+ return updatedDate;
+ }
+
+ public long getSizeRepo() {
+ return sizeRepo;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeString(this.fullName);
+ dest.writeString(this.starsGiven);
+ dest.writeString(this.avatar);
+ dest.writeString(this.userLogin);
+ dest.writeString(this.watchersCount);
+ dest.writeString(this.forksCount);
+ dest.writeByte(this.openSource ? (byte) 1 : (byte) 0);
+ dest.writeString(this.programmingLanguage);
+ dest.writeString(this.issuesCount);
+ dest.writeString(this.branchesType);
+ dest.writeString(this.createdDate);
+ dest.writeString(this.updatedDate);
+ dest.writeLong(this.sizeRepo);
+ dest.writeString(this.name);
+ }
+
+ private Repository(Parcel in) {
+ this.fullName = in.readString();
+ this.starsGiven = in.readString();
+ this.avatar = in.readString();
+ this.userLogin = in.readString();
+ this.watchersCount = in.readString();
+ this.forksCount = in.readString();
+ this.openSource = in.readByte() != 0;
+ this.programmingLanguage = in.readString();
+ this.issuesCount = in.readString();
+ this.branchesType = in.readString();
+ this.createdDate = in.readString();
+ this.updatedDate = in.readString();
+ this.sizeRepo = in.readLong();
+ this.name = in.readString();
+ }
+
+ public static final Parcelable.Creator CREATOR = new Parcelable.Creator() {
+ @Override
+ public Repository createFromParcel(Parcel source) {
+ return new RepositoryBuilder().setIn(source).createRepository();
+ }
+
+ @Override
+ public Repository[] newArray(int size) {
+ return new Repository[size];
+ }
+ };
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/RepositoryAdapter.java b/app/src/main/java/com/example/android/mygithubclient/RepositoryAdapter.java
new file mode 100644
index 0000000..2faad18
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/RepositoryAdapter.java
@@ -0,0 +1,36 @@
+package com.example.android.mygithubclient;
+
+import android.content.Context;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.ArrayAdapter;
+import android.widget.ImageView;
+import android.widget.TextView;
+import com.squareup.picasso.Picasso;
+import java.util.ArrayList;
+
+public class RepositoryAdapter extends ArrayAdapter {
+
+ public RepositoryAdapter(Context context, ArrayList repositories){
+ super(context,0,repositories);
+ }
+
+ @Override
+ public View getView(int position, View convertView, ViewGroup parent) {
+
+ View listItemView = LayoutInflater.from(getContext()).inflate(R.layout.list_item,parent,false);
+ Repository currentRepository = getItem(position);
+
+ TextView repositoryName = listItemView.findViewById(R.id.textView5);
+ repositoryName.setText(currentRepository.getFullName());
+
+ TextView starNumber = listItemView.findViewById(R.id.textView6);
+ starNumber.setText(currentRepository.getStarsGiven());
+
+ ImageView repositoryImage = listItemView.findViewById(R.id.repositoryImage);
+ Picasso.get().load(currentRepository.getAvatar()).into(repositoryImage);
+
+ return listItemView;
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/RepositoryBuilder.java b/app/src/main/java/com/example/android/mygithubclient/RepositoryBuilder.java
new file mode 100644
index 0000000..bd2a397
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/RepositoryBuilder.java
@@ -0,0 +1,102 @@
+package com.example.android.mygithubclient;
+
+import android.os.Parcel;
+
+public class RepositoryBuilder {
+ private String fullName;
+ private String starsGiven;
+ private String avatar;
+ private String userLogin;
+ private String watchersCount;
+ private String forksCount;
+ private boolean openSource;
+ private String programmingLanguage;
+ private String issuesCount;
+ private String branchesType;
+ private String createdDate;
+ private String updatedDate;
+ private long sizeRepo;
+ private String name;
+ private Parcel in;
+
+ public RepositoryBuilder setFullName(String fullName) {
+ this.fullName = fullName;
+ return this;
+ }
+
+ public RepositoryBuilder setStarsGiven(String starsGiven) {
+ this.starsGiven = starsGiven;
+ return this;
+ }
+
+ public RepositoryBuilder setAvatar(String avatar) {
+ this.avatar = avatar;
+ return this;
+ }
+
+ public RepositoryBuilder setUserLogin(String userLogin) {
+ this.userLogin = userLogin;
+ return this;
+ }
+
+ public RepositoryBuilder setWatchersCount(String watchersCount) {
+ this.watchersCount = watchersCount;
+ return this;
+ }
+
+ public RepositoryBuilder setForksCount(String forksCount) {
+ this.forksCount = forksCount;
+ return this;
+ }
+
+ public RepositoryBuilder setOpenSource(boolean openSource) {
+ this.openSource = openSource;
+ return this;
+ }
+
+ public RepositoryBuilder setProgrammingLanguage(String programmingLanguage) {
+ this.programmingLanguage = programmingLanguage;
+ return this;
+ }
+
+ public RepositoryBuilder setIssuesCount(String issuesCount) {
+ this.issuesCount = issuesCount;
+ return this;
+ }
+
+ public RepositoryBuilder setBranchesType(String branchesType) {
+ this.branchesType = branchesType;
+ return this;
+ }
+
+ public RepositoryBuilder setCreatedDate(String createdDate) {
+ this.createdDate = createdDate;
+ return this;
+ }
+
+ public RepositoryBuilder setUpdatedDate(String updatedDate) {
+ this.updatedDate = updatedDate;
+ return this;
+ }
+
+ public RepositoryBuilder setSizeRepo(long sizeRepo) {
+ this.sizeRepo = sizeRepo;
+ return this;
+ }
+
+ public RepositoryBuilder setName(String name) {
+ this.name = name;
+ return this;
+ }
+
+ public RepositoryBuilder setIn(Parcel in) {
+ this.in = in;
+ return this;
+ }
+
+ public Repository createRepository() {
+ return new Repository(fullName, starsGiven, avatar, userLogin, watchersCount, forksCount,
+ openSource, programmingLanguage, issuesCount, branchesType, createdDate,
+ updatedDate, sizeRepo, name);
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android/mygithubclient/RepositoryFragment.java b/app/src/main/java/com/example/android/mygithubclient/RepositoryFragment.java
new file mode 100644
index 0000000..dddebeb
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/RepositoryFragment.java
@@ -0,0 +1,115 @@
+package com.example.android.mygithubclient;
+
+import android.app.AlertDialog;
+import android.content.DialogInterface;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.support.v4.app.LoaderManager;
+import android.support.v4.content.Loader;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.AdapterView;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.widget.Toast;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Random;
+
+public class RepositoryFragment extends Fragment implements LoaderManager.LoaderCallbacks> {
+
+ private RepositoryAdapter newAdapter;
+ private View rootView;
+ private ArrayList repositories;
+
+ public RepositoryFragment() {
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ rootView = inflater.inflate(R.layout.item_list,container,false);
+ ListView listView = rootView.findViewById(R.id.listView);
+ repositories = new ArrayList<>();
+ newAdapter = new RepositoryAdapter(getActivity(), repositories);
+ listView.setAdapter(newAdapter);
+ LoaderManager loaderManager = getLoaderManager();
+ int loaderId = 0;
+ loaderManager.initLoader(loaderId, null, this);
+ listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
+ @Override
+ public void onItemClick(AdapterView> adapterView, View view, int position, long l) {
+ Repository currentRepository = repositories.get(position);
+ DetailsFragment detailsFragment= new DetailsFragment();
+ detailsFragment.setArguments(buildBundle(currentRepository));
+ android.support.v4.app.FragmentManager manager = getFragmentManager();
+ manager.beginTransaction().replace(R.id.view_pager, detailsFragment,detailsFragment.getTag()).addToBackStack(null).commit();
+ }
+ });
+ return rootView;
+ }
+
+ private Bundle buildBundle(Repository repository){
+ Bundle bundle = new Bundle();
+ bundle.putParcelable("object",repository);
+ return bundle;
+ }
+
+ private void alertDialog(){
+ String user = getArguments().getString("userName");
+ String[] answers = {user + getString(R.string.not_a_user), getString(R.string.likes) + user + getString(R.string.forbidden),
+ user + getString(R.string.wrong), getString(R.string.spoon) + user + getString(R.string.dot)};
+ AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
+ builder.setTitle(R.string.error);
+ Random random = new Random();
+ int shot = random.nextInt(4);
+ builder.setMessage(answers[shot]);
+ builder.setPositiveButton(R.string.search, new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialogInterface, int i) {
+ SearchFragment searchFragment= new SearchFragment();
+ android.support.v4.app.FragmentManager manager = getFragmentManager();
+ assert manager != null;
+ manager.beginTransaction().replace(R.id.view_pager, searchFragment,searchFragment.getTag()).commit();
+ }
+ });
+ AlertDialog alert = builder.create();
+ alert.show();
+ }
+
+ @Override
+ public Loader> onCreateLoader(int id, Bundle args) {
+ String urlLink = getArguments().getString("urlLink");
+ return new RepositoryLoader(getActivity(), urlLink);
+ }
+
+ @Override
+ public void onLoadFinished(Loader> loader, List data) {
+ newAdapter.clear();
+ if(data != null && !data.isEmpty()){
+ repositoryFullfill(data);
+
+ } else {
+ TextView owner = rootView.findViewById(R.id.repository_owner);
+ owner.setText(R.string.long_face);
+ alertDialog();
+ }
+ }
+
+ private void repositoryFullfill(List data) {
+ String userName = getArguments().getString("userName");
+ TextView owner = rootView.findViewById(R.id.repository_owner);
+ owner.setText(userName + getString(R.string.reposs));
+ View progressBar = rootView.findViewById(R.id.progressBar);
+ progressBar.setVisibility(View.GONE);
+ newAdapter.addAll(data);
+ }
+
+ @Override
+ public void onLoaderReset(Loader> loader) {
+ newAdapter.clear();
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/RepositoryLoader.java b/app/src/main/java/com/example/android/mygithubclient/RepositoryLoader.java
new file mode 100644
index 0000000..d177594
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/RepositoryLoader.java
@@ -0,0 +1,34 @@
+package com.example.android.mygithubclient;
+
+import android.content.Context;
+import android.util.Log;
+import java.util.List;
+
+public class RepositoryLoader extends android.support.v4.content.AsyncTaskLoader> {
+
+ private static final String LOG = RepositoryLoader.class.getName();
+
+ private String repositoryUrl;
+
+ public RepositoryLoader(Context context, String url){
+ super(context);
+ repositoryUrl = url;
+ }
+
+ @Override
+ protected void onStartLoading() {
+ Log.e(LOG, "Loader started");
+ forceLoad();
+ }
+
+ @Override
+ public List loadInBackground() {
+ Log.e(LOG, "Loader inBackground");
+ if(repositoryUrl == null){
+ return null;
+ }
+ Log.e(LOG, "Loader fetching");
+ List marketRecords = Networking.fetchMarketRecordData(repositoryUrl);
+ return marketRecords;
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/example/android/mygithubclient/SearchFragment.java b/app/src/main/java/com/example/android/mygithubclient/SearchFragment.java
new file mode 100644
index 0000000..ed58872
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/SearchFragment.java
@@ -0,0 +1,67 @@
+package com.example.android.mygithubclient;
+
+import android.content.Context;
+import android.net.ConnectivityManager;
+import android.net.NetworkInfo;
+import android.os.Bundle;
+import android.support.v4.app.Fragment;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.Toast;
+import net.yslibrary.android.keyboardvisibilityevent.util.UIUtil;
+
+public class SearchFragment extends Fragment {
+
+ private String userInput;
+ private EditText editText;
+ private String outputLink;
+
+ public SearchFragment() {}
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ View rootView = inflater.inflate(R.layout.search_layout,container,false);
+ editText = rootView.findViewById(R.id.editText);
+ Button searchButton = rootView.findViewById(R.id.button_search);
+ searchButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ UIUtil.hideKeyboard(getActivity());
+ ConnectivityManager connectionPossible = (ConnectivityManager) getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
+ NetworkInfo networkInfo = connectionPossible.getActiveNetworkInfo();
+ if (networkInfo != null && networkInfo.isConnected()) {
+ userInput = editText.getText().toString().trim();
+ if(userInput.isEmpty()){
+ Toast toast = Toast.makeText(getActivity(), R.string.nothing_there,Toast.LENGTH_SHORT);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+ } else{
+ String url_link = getString(R.string.url);
+ outputLink = url_link.replace("{user}", userInput);
+ RepositoryFragment repositoryFragment= new RepositoryFragment();
+ repositoryFragment.setArguments(buildBundle(outputLink, userInput));
+ android.support.v4.app.FragmentManager manager = getFragmentManager();
+ manager.beginTransaction().replace(R.id.view_pager, repositoryFragment,repositoryFragment.getTag()).addToBackStack(null).commit();
+ }
+ } else {
+ Toast toast = Toast.makeText(getActivity(), R.string.no_connection,Toast.LENGTH_SHORT);
+ toast.setGravity(Gravity.CENTER, 0, 0);
+ toast.show();
+ }
+ }
+ });
+ return rootView;
+ }
+
+ private Bundle buildBundle(String urlLink, String userName) {
+ Bundle bundle = new Bundle();
+ bundle.putString("urlLink", urlLink);
+ bundle.putString("userName",userName);
+ return bundle;
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/util/DateUtils.java b/app/src/main/java/com/example/android/mygithubclient/util/DateUtils.java
new file mode 100644
index 0000000..a42942e
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/util/DateUtils.java
@@ -0,0 +1,22 @@
+package com.example.android.mygithubclient.util;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+
+public class DateUtils {
+
+ private DateUtils(){}
+
+ public static String isoDateToNormal(String isoDate){
+ SimpleDateFormat sd1 = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ");
+ Date date = new Date();
+ try{
+ date = sd1.parse(isoDate.replaceAll("Z$", "+0000"));
+ } catch(Exception e){
+ System.out.println(e.getMessage());
+ return "Non-accessible";
+ }
+ SimpleDateFormat sd2 = new SimpleDateFormat("dd-MM-yyyy");
+ return sd2.format(date);
+ }
+}
diff --git a/app/src/main/java/com/example/android/mygithubclient/util/FileUtils.java b/app/src/main/java/com/example/android/mygithubclient/util/FileUtils.java
new file mode 100644
index 0000000..10d64a5
--- /dev/null
+++ b/app/src/main/java/com/example/android/mygithubclient/util/FileUtils.java
@@ -0,0 +1,17 @@
+package com.example.android.mygithubclient.util;
+
+import java.text.DecimalFormat;
+
+public class FileUtils {
+
+ private FileUtils(){}
+
+ public static String getFileSize(long size) {
+ if (size <= 0){
+ return "0";
+ }
+ String[] units = new String[] { "b", "kb", "mb", "gb", "tb" };
+ int digitGroups = (int) (Math.log10(size) / Math.log10(1024));
+ return new DecimalFormat("#,##0.#").format(size / Math.pow(1024, digitGroups)) + " " + units[digitGroups];
+ }
+}
diff --git a/app/src/main/res/drawable-hdpi/book.png b/app/src/main/res/drawable-hdpi/book.png
new file mode 100644
index 0000000..04a943c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/book.png differ
diff --git a/app/src/main/res/drawable-hdpi/branch.png b/app/src/main/res/drawable-hdpi/branch.png
new file mode 100644
index 0000000..87d7fec
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/branch.png differ
diff --git a/app/src/main/res/drawable-hdpi/calendar.png b/app/src/main/res/drawable-hdpi/calendar.png
new file mode 100644
index 0000000..6fecb61
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/calendar.png differ
diff --git a/app/src/main/res/drawable-hdpi/chevron.png b/app/src/main/res/drawable-hdpi/chevron.png
new file mode 100644
index 0000000..e38665f
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/chevron.png differ
diff --git a/app/src/main/res/drawable-hdpi/commit.png b/app/src/main/res/drawable-hdpi/commit.png
new file mode 100644
index 0000000..84fbf19
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/commit.png differ
diff --git a/app/src/main/res/drawable-hdpi/database.png b/app/src/main/res/drawable-hdpi/database.png
new file mode 100644
index 0000000..3fe0b2c
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/database.png differ
diff --git a/app/src/main/res/drawable-hdpi/githubgreylogo.png b/app/src/main/res/drawable-hdpi/githubgreylogo.png
new file mode 100644
index 0000000..e466a2a
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/githubgreylogo.png differ
diff --git a/app/src/main/res/drawable-hdpi/githublogo2.png b/app/src/main/res/drawable-hdpi/githublogo2.png
new file mode 100644
index 0000000..9fdb6e0
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/githublogo2.png differ
diff --git a/app/src/main/res/drawable-hdpi/issue.png b/app/src/main/res/drawable-hdpi/issue.png
new file mode 100644
index 0000000..1460a3d
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/issue.png differ
diff --git a/app/src/main/res/drawable-hdpi/lock.png b/app/src/main/res/drawable-hdpi/lock.png
new file mode 100644
index 0000000..493d995
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/lock.png differ
diff --git a/app/src/main/res/drawable-hdpi/programming.png b/app/src/main/res/drawable-hdpi/programming.png
new file mode 100644
index 0000000..4ff593d
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/programming.png differ
diff --git a/app/src/main/res/drawable-hdpi/repoicon.png b/app/src/main/res/drawable-hdpi/repoicon.png
new file mode 100644
index 0000000..8298e08
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/repoicon.png differ
diff --git a/app/src/main/res/drawable-hdpi/rss.png b/app/src/main/res/drawable-hdpi/rss.png
new file mode 100644
index 0000000..b93da7d
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/rss.png differ
diff --git a/app/src/main/res/drawable-hdpi/staricon.png b/app/src/main/res/drawable-hdpi/staricon.png
new file mode 100644
index 0000000..59a97ff
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/staricon.png differ
diff --git a/app/src/main/res/drawable-hdpi/update.png b/app/src/main/res/drawable-hdpi/update.png
new file mode 100644
index 0000000..2d43f2e
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/update.png differ
diff --git a/app/src/main/res/drawable-ldpi/book.png b/app/src/main/res/drawable-ldpi/book.png
new file mode 100644
index 0000000..9c030d2
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/book.png differ
diff --git a/app/src/main/res/drawable-ldpi/branch.png b/app/src/main/res/drawable-ldpi/branch.png
new file mode 100644
index 0000000..3a74959
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/branch.png differ
diff --git a/app/src/main/res/drawable-ldpi/calendar.png b/app/src/main/res/drawable-ldpi/calendar.png
new file mode 100644
index 0000000..708abac
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/calendar.png differ
diff --git a/app/src/main/res/drawable-ldpi/chevron.png b/app/src/main/res/drawable-ldpi/chevron.png
new file mode 100644
index 0000000..cfe5f94
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/chevron.png differ
diff --git a/app/src/main/res/drawable-ldpi/commit.png b/app/src/main/res/drawable-ldpi/commit.png
new file mode 100644
index 0000000..63fbcbe
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/commit.png differ
diff --git a/app/src/main/res/drawable-ldpi/database.png b/app/src/main/res/drawable-ldpi/database.png
new file mode 100644
index 0000000..f84388b
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/database.png differ
diff --git a/app/src/main/res/drawable-ldpi/githubgreylogo.png b/app/src/main/res/drawable-ldpi/githubgreylogo.png
new file mode 100644
index 0000000..36a5ffa
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/githubgreylogo.png differ
diff --git a/app/src/main/res/drawable-ldpi/githublogo2.png b/app/src/main/res/drawable-ldpi/githublogo2.png
new file mode 100644
index 0000000..467a9cc
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/githublogo2.png differ
diff --git a/app/src/main/res/drawable-ldpi/issue.png b/app/src/main/res/drawable-ldpi/issue.png
new file mode 100644
index 0000000..b6afd7f
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/issue.png differ
diff --git a/app/src/main/res/drawable-ldpi/lock.png b/app/src/main/res/drawable-ldpi/lock.png
new file mode 100644
index 0000000..c6a03f8
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/lock.png differ
diff --git a/app/src/main/res/drawable-ldpi/programming.png b/app/src/main/res/drawable-ldpi/programming.png
new file mode 100644
index 0000000..02cffd2
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/programming.png differ
diff --git a/app/src/main/res/drawable-ldpi/repoicon.png b/app/src/main/res/drawable-ldpi/repoicon.png
new file mode 100644
index 0000000..906b094
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/repoicon.png differ
diff --git a/app/src/main/res/drawable-ldpi/rss.png b/app/src/main/res/drawable-ldpi/rss.png
new file mode 100644
index 0000000..5de28c8
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/rss.png differ
diff --git a/app/src/main/res/drawable-ldpi/staricon.png b/app/src/main/res/drawable-ldpi/staricon.png
new file mode 100644
index 0000000..dc77f19
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/staricon.png differ
diff --git a/app/src/main/res/drawable-ldpi/update.png b/app/src/main/res/drawable-ldpi/update.png
new file mode 100644
index 0000000..9eb83b5
Binary files /dev/null and b/app/src/main/res/drawable-ldpi/update.png differ
diff --git a/app/src/main/res/drawable-mdpi/book.png b/app/src/main/res/drawable-mdpi/book.png
new file mode 100644
index 0000000..428312b
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/book.png differ
diff --git a/app/src/main/res/drawable-mdpi/branch.png b/app/src/main/res/drawable-mdpi/branch.png
new file mode 100644
index 0000000..0c9ff51
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/branch.png differ
diff --git a/app/src/main/res/drawable-mdpi/calendar.png b/app/src/main/res/drawable-mdpi/calendar.png
new file mode 100644
index 0000000..6454d2d
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/calendar.png differ
diff --git a/app/src/main/res/drawable-mdpi/chevron.png b/app/src/main/res/drawable-mdpi/chevron.png
new file mode 100644
index 0000000..a29ab5d
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/chevron.png differ
diff --git a/app/src/main/res/drawable-mdpi/commit.png b/app/src/main/res/drawable-mdpi/commit.png
new file mode 100644
index 0000000..5e3a20e
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/commit.png differ
diff --git a/app/src/main/res/drawable-mdpi/database.png b/app/src/main/res/drawable-mdpi/database.png
new file mode 100644
index 0000000..b6a0ab0
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/database.png differ
diff --git a/app/src/main/res/drawable-mdpi/githubgreylogo.png b/app/src/main/res/drawable-mdpi/githubgreylogo.png
new file mode 100644
index 0000000..72613b5
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/githubgreylogo.png differ
diff --git a/app/src/main/res/drawable-mdpi/githublogo2.png b/app/src/main/res/drawable-mdpi/githublogo2.png
new file mode 100644
index 0000000..b28f1b4
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/githublogo2.png differ
diff --git a/app/src/main/res/drawable-mdpi/issue.png b/app/src/main/res/drawable-mdpi/issue.png
new file mode 100644
index 0000000..68035af
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/issue.png differ
diff --git a/app/src/main/res/drawable-mdpi/lock.png b/app/src/main/res/drawable-mdpi/lock.png
new file mode 100644
index 0000000..5dc12e0
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/lock.png differ
diff --git a/app/src/main/res/drawable-mdpi/programming.png b/app/src/main/res/drawable-mdpi/programming.png
new file mode 100644
index 0000000..7008088
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/programming.png differ
diff --git a/app/src/main/res/drawable-mdpi/repoicon.png b/app/src/main/res/drawable-mdpi/repoicon.png
new file mode 100644
index 0000000..7b54660
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/repoicon.png differ
diff --git a/app/src/main/res/drawable-mdpi/rss.png b/app/src/main/res/drawable-mdpi/rss.png
new file mode 100644
index 0000000..e2bd57f
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/rss.png differ
diff --git a/app/src/main/res/drawable-mdpi/staricon.png b/app/src/main/res/drawable-mdpi/staricon.png
new file mode 100644
index 0000000..1d42f72
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/staricon.png differ
diff --git a/app/src/main/res/drawable-mdpi/update.png b/app/src/main/res/drawable-mdpi/update.png
new file mode 100644
index 0000000..d8dc006
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/update.png differ
diff --git a/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..c7bd21d
--- /dev/null
+++ b/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable-xhdpi/book.png b/app/src/main/res/drawable-xhdpi/book.png
new file mode 100644
index 0000000..d0b5c41
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/book.png differ
diff --git a/app/src/main/res/drawable-xhdpi/branch.png b/app/src/main/res/drawable-xhdpi/branch.png
new file mode 100644
index 0000000..18ecdfe
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/branch.png differ
diff --git a/app/src/main/res/drawable-xhdpi/calendar.png b/app/src/main/res/drawable-xhdpi/calendar.png
new file mode 100644
index 0000000..d5c9eaa
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/calendar.png differ
diff --git a/app/src/main/res/drawable-xhdpi/chevron.png b/app/src/main/res/drawable-xhdpi/chevron.png
new file mode 100644
index 0000000..4802be1
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/chevron.png differ
diff --git a/app/src/main/res/drawable-xhdpi/commit.png b/app/src/main/res/drawable-xhdpi/commit.png
new file mode 100644
index 0000000..4e0392d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/commit.png differ
diff --git a/app/src/main/res/drawable-xhdpi/database.png b/app/src/main/res/drawable-xhdpi/database.png
new file mode 100644
index 0000000..08365b5
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/database.png differ
diff --git a/app/src/main/res/drawable-xhdpi/githubgreylogo.png b/app/src/main/res/drawable-xhdpi/githubgreylogo.png
new file mode 100644
index 0000000..488aa1f
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/githubgreylogo.png differ
diff --git a/app/src/main/res/drawable-xhdpi/githublogo2.png b/app/src/main/res/drawable-xhdpi/githublogo2.png
new file mode 100644
index 0000000..0c81525
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/githublogo2.png differ
diff --git a/app/src/main/res/drawable-xhdpi/issue.png b/app/src/main/res/drawable-xhdpi/issue.png
new file mode 100644
index 0000000..7774871
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/issue.png differ
diff --git a/app/src/main/res/drawable-xhdpi/lock.png b/app/src/main/res/drawable-xhdpi/lock.png
new file mode 100644
index 0000000..ec1f44d
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/lock.png differ
diff --git a/app/src/main/res/drawable-xhdpi/programming.png b/app/src/main/res/drawable-xhdpi/programming.png
new file mode 100644
index 0000000..02c7cce
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/programming.png differ
diff --git a/app/src/main/res/drawable-xhdpi/repoicon.png b/app/src/main/res/drawable-xhdpi/repoicon.png
new file mode 100644
index 0000000..54a7649
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/repoicon.png differ
diff --git a/app/src/main/res/drawable-xhdpi/rss.png b/app/src/main/res/drawable-xhdpi/rss.png
new file mode 100644
index 0000000..4e84168
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/rss.png differ
diff --git a/app/src/main/res/drawable-xhdpi/staricon.png b/app/src/main/res/drawable-xhdpi/staricon.png
new file mode 100644
index 0000000..36f48ca
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/staricon.png differ
diff --git a/app/src/main/res/drawable-xhdpi/update.png b/app/src/main/res/drawable-xhdpi/update.png
new file mode 100644
index 0000000..3b55045
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/update.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/book.png b/app/src/main/res/drawable-xxhdpi/book.png
new file mode 100644
index 0000000..d6b0a03
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/book.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/branch.png b/app/src/main/res/drawable-xxhdpi/branch.png
new file mode 100644
index 0000000..e5cf69c
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/branch.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/calendar.png b/app/src/main/res/drawable-xxhdpi/calendar.png
new file mode 100644
index 0000000..1efe6fe
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/calendar.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/chevron.png b/app/src/main/res/drawable-xxhdpi/chevron.png
new file mode 100644
index 0000000..0203f2d
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/chevron.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/commit.png b/app/src/main/res/drawable-xxhdpi/commit.png
new file mode 100644
index 0000000..9c186ff
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/commit.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/database.png b/app/src/main/res/drawable-xxhdpi/database.png
new file mode 100644
index 0000000..e3e54ab
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/database.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/githubgreylogo.png b/app/src/main/res/drawable-xxhdpi/githubgreylogo.png
new file mode 100644
index 0000000..d6c858e
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/githubgreylogo.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/githublogo2.png b/app/src/main/res/drawable-xxhdpi/githublogo2.png
new file mode 100644
index 0000000..60c0d76
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/githublogo2.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/issue.png b/app/src/main/res/drawable-xxhdpi/issue.png
new file mode 100644
index 0000000..a3cc0f0
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/issue.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/lock.png b/app/src/main/res/drawable-xxhdpi/lock.png
new file mode 100644
index 0000000..aa37fb5
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/lock.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/programming.png b/app/src/main/res/drawable-xxhdpi/programming.png
new file mode 100644
index 0000000..a75996f
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/programming.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/repoicon.png b/app/src/main/res/drawable-xxhdpi/repoicon.png
new file mode 100644
index 0000000..e65f721
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/repoicon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/rss.png b/app/src/main/res/drawable-xxhdpi/rss.png
new file mode 100644
index 0000000..33f3bbe
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/rss.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/staricon.png b/app/src/main/res/drawable-xxhdpi/staricon.png
new file mode 100644
index 0000000..d9eb478
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/staricon.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/update.png b/app/src/main/res/drawable-xxhdpi/update.png
new file mode 100644
index 0000000..b45aa0f
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/update.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/book.png b/app/src/main/res/drawable-xxxhdpi/book.png
new file mode 100644
index 0000000..c95e0b3
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/book.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/branch.png b/app/src/main/res/drawable-xxxhdpi/branch.png
new file mode 100644
index 0000000..8127a96
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/branch.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/calendar.png b/app/src/main/res/drawable-xxxhdpi/calendar.png
new file mode 100644
index 0000000..720bbca
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/calendar.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/chevron.png b/app/src/main/res/drawable-xxxhdpi/chevron.png
new file mode 100644
index 0000000..7eea52e
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/chevron.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/commit.png b/app/src/main/res/drawable-xxxhdpi/commit.png
new file mode 100644
index 0000000..019c042
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/commit.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/database.png b/app/src/main/res/drawable-xxxhdpi/database.png
new file mode 100644
index 0000000..c9220f2
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/database.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/githubgreylogo.png b/app/src/main/res/drawable-xxxhdpi/githubgreylogo.png
new file mode 100644
index 0000000..f824dac
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/githubgreylogo.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/githublogo2.png b/app/src/main/res/drawable-xxxhdpi/githublogo2.png
new file mode 100644
index 0000000..8506410
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/githublogo2.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/issue.png b/app/src/main/res/drawable-xxxhdpi/issue.png
new file mode 100644
index 0000000..2939f89
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/issue.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/lock.png b/app/src/main/res/drawable-xxxhdpi/lock.png
new file mode 100644
index 0000000..52d91e7
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/lock.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/programming.png b/app/src/main/res/drawable-xxxhdpi/programming.png
new file mode 100644
index 0000000..1163a33
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/programming.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/repoicon.png b/app/src/main/res/drawable-xxxhdpi/repoicon.png
new file mode 100644
index 0000000..4686238
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/repoicon.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/rss.png b/app/src/main/res/drawable-xxxhdpi/rss.png
new file mode 100644
index 0000000..57512bf
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/rss.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/staricon.png b/app/src/main/res/drawable-xxxhdpi/staricon.png
new file mode 100644
index 0000000..e2405b7
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/staricon.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/update.png b/app/src/main/res/drawable-xxxhdpi/update.png
new file mode 100644
index 0000000..9615cf4
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/update.png differ
diff --git a/app/src/main/res/drawable/biggest_line_background.xml b/app/src/main/res/drawable/biggest_line_background.xml
new file mode 100644
index 0000000..f383aa4
--- /dev/null
+++ b/app/src/main/res/drawable/biggest_line_background.xml
@@ -0,0 +1,15 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/button_line_background.xml b/app/src/main/res/drawable/button_line_background.xml
new file mode 100644
index 0000000..2223d4a
--- /dev/null
+++ b/app/src/main/res/drawable/button_line_background.xml
@@ -0,0 +1,19 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/detail_line_background.xml b/app/src/main/res/drawable/detail_line_background.xml
new file mode 100644
index 0000000..d88708d
--- /dev/null
+++ b/app/src/main/res/drawable/detail_line_background.xml
@@ -0,0 +1,18 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..d5fccc5
--- /dev/null
+++ b/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/res/drawable/line_background.xml b/app/src/main/res/drawable/line_background.xml
new file mode 100644
index 0000000..7d1738d
--- /dev/null
+++ b/app/src/main/res/drawable/line_background.xml
@@ -0,0 +1,19 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/medium_detail_line_background.xml b/app/src/main/res/drawable/medium_detail_line_background.xml
new file mode 100644
index 0000000..c362c27
--- /dev/null
+++ b/app/src/main/res/drawable/medium_detail_line_background.xml
@@ -0,0 +1,16 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/medium_detail_line_background_three.xml b/app/src/main/res/drawable/medium_detail_line_background_three.xml
new file mode 100644
index 0000000..767e6a6
--- /dev/null
+++ b/app/src/main/res/drawable/medium_detail_line_background_three.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/medium_detail_line_background_two.xml b/app/src/main/res/drawable/medium_detail_line_background_two.xml
new file mode 100644
index 0000000..0c2e9a3
--- /dev/null
+++ b/app/src/main/res/drawable/medium_detail_line_background_two.xml
@@ -0,0 +1,15 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/search_line_background.xml b/app/src/main/res/drawable/search_line_background.xml
new file mode 100644
index 0000000..856444b
--- /dev/null
+++ b/app/src/main/res/drawable/search_line_background.xml
@@ -0,0 +1,19 @@
+
+
+ -
+
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/small_detail_line_background.xml b/app/src/main/res/drawable/small_detail_line_background.xml
new file mode 100644
index 0000000..24f58e4
--- /dev/null
+++ b/app/src/main/res/drawable/small_detail_line_background.xml
@@ -0,0 +1,16 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/drawable/xl_detail_line_background.xml b/app/src/main/res/drawable/xl_detail_line_background.xml
new file mode 100644
index 0000000..72887fe
--- /dev/null
+++ b/app/src/main/res/drawable/xl_detail_line_background.xml
@@ -0,0 +1,17 @@
+
+
+ -
+
+
+
+
+ -
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..166514e
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,54 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/detail_layout.xml b/app/src/main/res/layout/detail_layout.xml
new file mode 100644
index 0000000..3ca816e
--- /dev/null
+++ b/app/src/main/res/layout/detail_layout.xml
@@ -0,0 +1,391 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/item_list.xml b/app/src/main/res/layout/item_list.xml
new file mode 100644
index 0000000..54380ae
--- /dev/null
+++ b/app/src/main/res/layout/item_list.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/list_item.xml b/app/src/main/res/layout/list_item.xml
new file mode 100644
index 0000000..c4c5c10
--- /dev/null
+++ b/app/src/main/res/layout/list_item.xml
@@ -0,0 +1,42 @@
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/search_layout.xml b/app/src/main/res/layout/search_layout.xml
new file mode 100644
index 0000000..e4bfa3c
--- /dev/null
+++ b/app/src/main/res/layout/search_layout.xml
@@ -0,0 +1,40 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000..a2f5908
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
new file mode 100644
index 0000000..1b52399
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-hdpi/octocat.png b/app/src/main/res/mipmap-hdpi/octocat.png
new file mode 100644
index 0000000..c3c6d93
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/octocat.png differ
diff --git a/app/src/main/res/mipmap-hdpi/repoicon.png b/app/src/main/res/mipmap-hdpi/repoicon.png
new file mode 100644
index 0000000..8298e08
Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/repoicon.png differ
diff --git a/app/src/main/res/mipmap-ldpi/octocat.png b/app/src/main/res/mipmap-ldpi/octocat.png
new file mode 100644
index 0000000..7b93da3
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/octocat.png differ
diff --git a/app/src/main/res/mipmap-ldpi/repoicon.png b/app/src/main/res/mipmap-ldpi/repoicon.png
new file mode 100644
index 0000000..906b094
Binary files /dev/null and b/app/src/main/res/mipmap-ldpi/repoicon.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000..ff10afd
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
new file mode 100644
index 0000000..115a4c7
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-mdpi/octocat.png b/app/src/main/res/mipmap-mdpi/octocat.png
new file mode 100644
index 0000000..5c29599
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/octocat.png differ
diff --git a/app/src/main/res/mipmap-mdpi/repoicon.png b/app/src/main/res/mipmap-mdpi/repoicon.png
new file mode 100644
index 0000000..7b54660
Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/repoicon.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000..dcd3cd8
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..459ca60
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/octocat.png b/app/src/main/res/mipmap-xhdpi/octocat.png
new file mode 100644
index 0000000..c9d837b
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/octocat.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/repoicon.png b/app/src/main/res/mipmap-xhdpi/repoicon.png
new file mode 100644
index 0000000..54a7649
Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/repoicon.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000..8ca12fe
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..8e19b41
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/octocat.png b/app/src/main/res/mipmap-xxhdpi/octocat.png
new file mode 100644
index 0000000..fcad6f5
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/octocat.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/repoicon.png b/app/src/main/res/mipmap-xxhdpi/repoicon.png
new file mode 100644
index 0000000..e65f721
Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/repoicon.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000..b824ebd
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
new file mode 100644
index 0000000..4c19a13
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/octocat.png b/app/src/main/res/mipmap-xxxhdpi/octocat.png
new file mode 100644
index 0000000..35d4d78
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/octocat.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/repoicon.png b/app/src/main/res/mipmap-xxxhdpi/repoicon.png
new file mode 100644
index 0000000..4686238
Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/repoicon.png differ
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..e62ccb3
--- /dev/null
+++ b/app/src/main/res/values/colors.xml
@@ -0,0 +1,13 @@
+
+
+ #3F51B5
+ #303F9F
+ #FF4081
+ #24292e
+ #ffffff
+ #a8a8a8
+ #f1f1f1
+ #e9e9e9
+ #fafafa
+ #3232FF
+
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..203fff3
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,17 @@
+
+
+ 1dp
+ 4dp
+ 0dp
+ 8dp
+ 30sp
+ 40dp
+ 16dp
+ 32dp
+ 100dp
+ 60dp
+ 24sp
+ 18sp
+ 14sp
+ 16sp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..3e80f4e
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,46 @@
+
+ myGithubClient
+ GitHub
+ tr0lczyk production
+ Hello blank fragment
+ No Connection to the internet
+ Anon\'s repositories
+ No internet connection
+ You have to type something...
+ \ is not a user you are looking for...
+ The likes of\
+ \ are forbidden in this land!
+ \? More like WRONG USERNAME !!!
+ There is no spoon. And there is no\
+ .
+ Error 404
+ Search again
+ 342
+ tr0lczyk/mojeBardzowzneRepo
+ Search GitHub
+ type the Username
+ Search
+ KielceTourGuide
+ tr0lczyk
+ Stars
+ 0
+ Watchers
+ Forks
+ Package
+ Issues
+ 0/master
+ branch
+ 12/02/2018
+ 123.8
+ Last update at
+ Events
+ Commits
+ image
+ https://api.github.com/users/{user}/repos
+ \'s repositories:
+ :(
+ No info
+ null
+ Private
+ Public
+
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
new file mode 100644
index 0000000..8d52ded
--- /dev/null
+++ b/app/src/main/res/values/styles.xml
@@ -0,0 +1,559 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/test/java/com/example/android/mygithubclient/ExampleUnitTest.java b/app/src/test/java/com/example/android/mygithubclient/ExampleUnitTest.java
new file mode 100644
index 0000000..fb8a7f0
--- /dev/null
+++ b/app/src/test/java/com/example/android/mygithubclient/ExampleUnitTest.java
@@ -0,0 +1,17 @@
+package com.example.android.mygithubclient;
+
+import org.junit.Test;
+
+import static org.junit.Assert.*;
+
+/**
+ * Example local unit test, which will execute on the development machine (host).
+ *
+ * @see Testing documentation
+ */
+public class ExampleUnitTest {
+ @Test
+ public void addition_isCorrect() {
+ assertEquals(4, 2 + 2);
+ }
+}
\ No newline at end of file
diff --git a/app/src/test/java/com/example/android/mygithubclient/util/DateUtilsTest.java b/app/src/test/java/com/example/android/mygithubclient/util/DateUtilsTest.java
new file mode 100644
index 0000000..3af14f1
--- /dev/null
+++ b/app/src/test/java/com/example/android/mygithubclient/util/DateUtilsTest.java
@@ -0,0 +1,47 @@
+package com.example.android.mygithubclient.util;
+
+import org.junit.Test;
+import static com.example.android.mygithubclient.util.DateUtils.isoDateToNormal;
+import static junit.framework.Assert.assertEquals;
+
+public class DateUtilsTest {
+
+ @Test
+ public void isoDateToNormalTestOne() {
+
+ //given
+ String validDate = "2017-12-28T14:56:37Z";
+
+ //when
+ String resultDate = isoDateToNormal(validDate);
+
+ //then
+ String expectedOutput = "28-12-2017";
+ assertEquals(resultDate,expectedOutput);
+ }
+
+ @Test
+ public void isoDateToNormalTestTwo(){
+ //given
+ String validDate = "2018-02-02T21:22:47Z";
+
+ //when
+ String resultDate = isoDateToNormal(validDate);
+
+ //then
+ String expectedOutput = "02-02-2018";
+ assertEquals(resultDate,expectedOutput);
+ }
+ @Test
+ public void isoDateToNormalTestThree(){
+ //given
+ String validDate = "2018-03-19T20:22:19Z";
+
+ //when
+ String resultDate = isoDateToNormal(validDate);
+
+ //then
+ String expectedOutput = "19-03-2018";
+ assertEquals(resultDate,expectedOutput);
+ }
+}
\ No newline at end of file
diff --git a/app/src/test/java/com/example/android/mygithubclient/util/FileUtilsTest.java b/app/src/test/java/com/example/android/mygithubclient/util/FileUtilsTest.java
new file mode 100644
index 0000000..0bd9911
--- /dev/null
+++ b/app/src/test/java/com/example/android/mygithubclient/util/FileUtilsTest.java
@@ -0,0 +1,51 @@
+package com.example.android.mygithubclient.util;
+
+import org.junit.Test;
+
+import static com.example.android.mygithubclient.util.FileUtils.getFileSize;
+import static junit.framework.Assert.assertEquals;
+
+public class FileUtilsTest {
+
+ @Test
+ public void getFileSizeTestOne() {
+
+ //given
+ long entryNumber = 20529;
+
+ //when
+ String resultNumber = getFileSize(entryNumber);
+
+ //then
+ String expectedOutput = "20 kb";
+ assertEquals(resultNumber,expectedOutput);
+ }
+
+ @Test
+ public void getFileSizeTestTwo() {
+
+ //given
+ long entryNumber = 123;
+
+ //when
+ String resultNumber = getFileSize(entryNumber);
+
+ //then
+ String expectedOutput = "123 b";
+ assertEquals(resultNumber,expectedOutput);
+ }
+
+ @Test
+ public void getFileSizeTestThree() {
+
+ //given
+ long entryNumber = 14581;
+
+ //when
+ String resultNumber = getFileSize(entryNumber);
+
+ //then
+ String expectedOutput = "14,2 kb";
+ assertEquals(resultNumber,expectedOutput);
+ }
+}
\ No newline at end of file
diff --git a/build.gradle b/build.gradle
new file mode 100644
index 0000000..1a3d812
--- /dev/null
+++ b/build.gradle
@@ -0,0 +1,27 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+
+buildscript {
+
+ repositories {
+ google()
+ jcenter()
+ }
+ dependencies {
+ classpath 'com.android.tools.build:gradle:3.1.2'
+
+
+ // NOTE: Do not place your application dependencies here; they belong
+ // in the individual module build.gradle files
+ }
+}
+
+allprojects {
+ repositories {
+ google()
+ jcenter()
+ }
+}
+
+task clean(type: Delete) {
+ delete rootProject.buildDir
+}
diff --git a/gradle.properties b/gradle.properties
new file mode 100644
index 0000000..743d692
--- /dev/null
+++ b/gradle.properties
@@ -0,0 +1,13 @@
+# Project-wide Gradle settings.
+# IDE (e.g. Android Studio) users:
+# Gradle settings configured through the IDE *will override*
+# any settings specified in this file.
+# For more details on how to configure your build environment visit
+# http://www.gradle.org/docs/current/userguide/build_environment.html
+# Specifies the JVM arguments used for the daemon process.
+# The setting is particularly useful for tweaking memory settings.
+org.gradle.jvmargs=-Xmx1536m
+# When configured, Gradle will run in incubating parallel mode.
+# This option should only be used with decoupled projects. More details, visit
+# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
+# org.gradle.parallel=true
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..7a3265e
Binary files /dev/null and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
new file mode 100644
index 0000000..93279d9
--- /dev/null
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -0,0 +1,6 @@
+#Tue Apr 24 20:46:47 CEST 2018
+distributionBase=GRADLE_USER_HOME
+distributionPath=wrapper/dists
+zipStoreBase=GRADLE_USER_HOME
+zipStorePath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-4.4-all.zip
diff --git a/gradlew b/gradlew
new file mode 100644
index 0000000..cccdd3d
--- /dev/null
+++ b/gradlew
@@ -0,0 +1,172 @@
+#!/usr/bin/env sh
+
+##############################################################################
+##
+## Gradle start up script for UN*X
+##
+##############################################################################
+
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
+
+APP_NAME="Gradle"
+APP_BASE_NAME=`basename "$0"`
+
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS=""
+
+# Use the maximum available, or set MAX_FD != -1 to use that value.
+MAX_FD="maximum"
+
+warn () {
+ echo "$*"
+}
+
+die () {
+ echo
+ echo "$*"
+ echo
+ exit 1
+}
+
+# OS specific support (must be 'true' or 'false').
+cygwin=false
+msys=false
+darwin=false
+nonstop=false
+case "`uname`" in
+ CYGWIN* )
+ cygwin=true
+ ;;
+ Darwin* )
+ darwin=true
+ ;;
+ MINGW* )
+ msys=true
+ ;;
+ NONSTOP* )
+ nonstop=true
+ ;;
+esac
+
+CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
+# Determine the Java command to use to start the JVM.
+if [ -n "$JAVA_HOME" ] ; then
+ if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
+ # IBM's JDK on AIX uses strange locations for the executables
+ JAVACMD="$JAVA_HOME/jre/sh/java"
+ else
+ JAVACMD="$JAVA_HOME/bin/java"
+ fi
+ if [ ! -x "$JAVACMD" ] ; then
+ die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+ fi
+else
+ JAVACMD="java"
+ which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+
+Please set the JAVA_HOME variable in your environment to match the
+location of your Java installation."
+fi
+
+# Increase the maximum file descriptors if we can.
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
+ MAX_FD_LIMIT=`ulimit -H -n`
+ if [ $? -eq 0 ] ; then
+ if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
+ MAX_FD="$MAX_FD_LIMIT"
+ fi
+ ulimit -n $MAX_FD
+ if [ $? -ne 0 ] ; then
+ warn "Could not set maximum file descriptor limit: $MAX_FD"
+ fi
+ else
+ warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
+ fi
+fi
+
+# For Darwin, add options to specify how the application appears in the dock
+if $darwin; then
+ GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
+fi
+
+# For Cygwin, switch paths to Windows format before running java
+if $cygwin ; then
+ APP_HOME=`cygpath --path --mixed "$APP_HOME"`
+ CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+ JAVACMD=`cygpath --unix "$JAVACMD"`
+
+ # We build the pattern for arguments to be converted via cygpath
+ ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
+ SEP=""
+ for dir in $ROOTDIRSRAW ; do
+ ROOTDIRS="$ROOTDIRS$SEP$dir"
+ SEP="|"
+ done
+ OURCYGPATTERN="(^($ROOTDIRS))"
+ # Add a user-defined pattern to the cygpath arguments
+ if [ "$GRADLE_CYGPATTERN" != "" ] ; then
+ OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
+ fi
+ # Now convert the arguments - kludge to limit ourselves to /bin/sh
+ i=0
+ for arg in "$@" ; do
+ CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
+ CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
+
+ if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
+ eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
+ else
+ eval `echo args$i`="\"$arg\""
+ fi
+ i=$((i+1))
+ done
+ case $i in
+ (0) set -- ;;
+ (1) set -- "$args0" ;;
+ (2) set -- "$args0" "$args1" ;;
+ (3) set -- "$args0" "$args1" "$args2" ;;
+ (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ esac
+fi
+
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
+}
+APP_ARGS=$(save "$@")
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
+
+# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong
+if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
+ cd "$(dirname "$0")"
+fi
+
+exec "$JAVACMD" "$@"
diff --git a/gradlew.bat b/gradlew.bat
new file mode 100644
index 0000000..f955316
--- /dev/null
+++ b/gradlew.bat
@@ -0,0 +1,84 @@
+@if "%DEBUG%" == "" @echo off
+@rem ##########################################################################
+@rem
+@rem Gradle startup script for Windows
+@rem
+@rem ##########################################################################
+
+@rem Set local scope for the variables with windows NT shell
+if "%OS%"=="Windows_NT" setlocal
+
+set DIRNAME=%~dp0
+if "%DIRNAME%" == "" set DIRNAME=.
+set APP_BASE_NAME=%~n0
+set APP_HOME=%DIRNAME%
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS=
+
+@rem Find java.exe
+if defined JAVA_HOME goto findJavaFromJavaHome
+
+set JAVA_EXE=java.exe
+%JAVA_EXE% -version >NUL 2>&1
+if "%ERRORLEVEL%" == "0" goto init
+
+echo.
+echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:findJavaFromJavaHome
+set JAVA_HOME=%JAVA_HOME:"=%
+set JAVA_EXE=%JAVA_HOME%/bin/java.exe
+
+if exist "%JAVA_EXE%" goto init
+
+echo.
+echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
+echo.
+echo Please set the JAVA_HOME variable in your environment to match the
+echo location of your Java installation.
+
+goto fail
+
+:init
+@rem Get command-line arguments, handling Windows variants
+
+if not "%OS%" == "Windows_NT" goto win9xME_args
+
+:win9xME_args
+@rem Slurp the command line arguments.
+set CMD_LINE_ARGS=
+set _SKIP=2
+
+:win9xME_args_slurp
+if "x%~1" == "x" goto execute
+
+set CMD_LINE_ARGS=%*
+
+:execute
+@rem Setup the command line
+
+set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
+@rem Execute Gradle
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+
+:end
+@rem End local scope for the variables with windows NT shell
+if "%ERRORLEVEL%"=="0" goto mainEnd
+
+:fail
+rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
+rem the _cmd.exe /c_ return code!
+if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
+exit /b 1
+
+:mainEnd
+if "%OS%"=="Windows_NT" endlocal
+
+:omega
diff --git a/settings.gradle b/settings.gradle
new file mode 100644
index 0000000..e7b4def
--- /dev/null
+++ b/settings.gradle
@@ -0,0 +1 @@
+include ':app'