diff --git a/app/build.gradle b/app/build.gradle index a4efa74..2c9d219 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -30,8 +30,8 @@ dependencies { androidTestImplementation 'com.android.support.test:runner:1.0.1' androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.1' - compile 'com.github.shaz-tech:EasyRuntimePermission:1.0' - compile 'pro.oncreate.easynet:easynet:1.3.0' - compile group: 'com.google.code.gson', name: 'gson', version: '2.7' - + compile 'com.android.support:design:26.1.0' + compile 'com.anthonycr.grant:permissions:1.0' + implementation 'com.squareup.okhttp3:okhttp:3.9.1' + compile group: 'com.google.code.gson', name: 'gson', version: '2.8.2' } diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index a91f3ab..2036afc 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,6 +2,8 @@ + + + android:theme="@style/AppTheme.BrandedLaunch" + android:fullBackupContent="@xml/backup_rules"> + diff --git a/app/src/main/java/com/hakodev/androiditunesapi/AndroidItunesAPI.java b/app/src/main/java/com/hakodev/androiditunesapi/AndroidItunesAPI.java index 001991b..0cf5d5e 100644 --- a/app/src/main/java/com/hakodev/androiditunesapi/AndroidItunesAPI.java +++ b/app/src/main/java/com/hakodev/androiditunesapi/AndroidItunesAPI.java @@ -2,14 +2,15 @@ package com.hakodev.androiditunesapi; import android.app.Application; -import pro.oncreate.easynet.EasyNet; -import pro.oncreate.easynet.models.NResponseModel; +import okhttp3.OkHttpClient; public class AndroidItunesAPI extends Application { - private static Application instance = null; + private static AndroidItunesAPI instance = null; - public static Application getInstance() { + private OkHttpClient networkClient; + + public static AndroidItunesAPI getInstance() { return instance; } @@ -17,14 +18,10 @@ public class AndroidItunesAPI extends Application { public void onCreate() { super.onCreate(); instance = this; - EasyNet.getInstance() - .setWriteLogs(false) - .setDefaultRequestListener(request -> request.setHost("http://192.168.1.151:25555/BeamNGTelemetry")) - .addOnErrorDefaultListener(new EasyNet.OnErrorDefaultListenerWithCode(404) { - @Override - public void onError(NResponseModel responseModel) { - // For example, intercepted error 404 - } - }); + networkClient = new OkHttpClient(); + } + + public OkHttpClient getNetworkClient() { + return networkClient; } } diff --git a/app/src/main/java/com/hakodev/androiditunesapi/activities/ArtistListActivity.java b/app/src/main/java/com/hakodev/androiditunesapi/activities/ArtistListActivity.java index 4618b0c..eb8d592 100644 --- a/app/src/main/java/com/hakodev/androiditunesapi/activities/ArtistListActivity.java +++ b/app/src/main/java/com/hakodev/androiditunesapi/activities/ArtistListActivity.java @@ -1,39 +1,99 @@ package com.hakodev.androiditunesapi.activities; +import android.Manifest; import android.os.Bundle; +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.constraint.ConstraintLayout; +import android.support.design.widget.Snackbar; import android.support.v7.app.AppCompatActivity; -import android.view.Menu; -import android.view.MenuItem; +import android.util.Log; import android.widget.Toast; +import com.anthonycr.grant.PermissionsManager; +import com.anthonycr.grant.PermissionsResultAction; +import com.hakodev.androiditunesapi.AndroidItunesAPI; import com.hakodev.androiditunesapi.R; +import com.hakodev.androiditunesapi.util.Utils; + +import java.io.IOException; + +import okhttp3.Call; +import okhttp3.Callback; +import okhttp3.OkHttpClient; +import okhttp3.Request; +import okhttp3.Response; public class ArtistListActivity extends AppCompatActivity { + private final static String TAG = "ArtistListActivity"; + private final static String SEARCH_URL = "https://itunes.apple.com/search?term=%1$s&country=US&entity=musicArtist&limit=10"; + + private OkHttpClient networkClient; + private ConstraintLayout lytBase; + @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setupTheme(); - setContentView(R.layout.activity_main); + setContentView(R.layout.activity_artists_list); + setupViews(); + init(); + askForPermissions(); } @Override - public boolean onCreateOptionsMenu(Menu menu) { - getMenuInflater().inflate(R.menu.actionbar_search, menu); - return true; - } - - @Override - public boolean onOptionsItemSelected(MenuItem item) { - int id = item.getItemId(); - if (id == R.id.action_search) { - Toast.makeText(this, "Test", Toast.LENGTH_SHORT).show(); - return true; - } - return super.onOptionsItemSelected(item); + public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { + PermissionsManager.getInstance().notifyPermissionsChange(permissions, grantResults); } private void setupTheme() { setTheme(R.style.AppTheme); } + + private void setupViews() { + lytBase = findViewById(R.id.lytBase); + } + + private void init() { + networkClient = AndroidItunesAPI.getInstance().getNetworkClient(); + } + + private void askForPermissions() { + //Not needed for internet permission but more of a proof of concept + PermissionsManager.getInstance().requestPermissionsIfNecessaryForResult(this, + new String[]{Manifest.permission.INTERNET}, new PermissionsResultAction() { + @Override + public void onGranted() { + Log.d(TAG, "Permissions Granted"); + } + + @Override + public void onDenied(String permission) { + Toast.makeText(ArtistListActivity.this, R.string.permissions_not_granted, Toast.LENGTH_SHORT).show(); + } + }); + } + + private void requestArtist(String artistName) { + new Thread(() -> { + Request request = new Request.Builder() + .url(String.format(SEARCH_URL, Utils.formatStringForURL(artistName))) + .build(); + networkClient.newCall(request) + .enqueue(new Callback() { + @Override + public void onFailure(@NonNull final Call call, @NonNull IOException e) { + Log.e(TAG, e.getLocalizedMessage()); + runOnUiThread(() -> Snackbar.make(lytBase, R.string.network_connection_error, Snackbar.LENGTH_LONG).show()); + } + + @Override + public void onResponse(@NonNull Call call, @NonNull final Response response) throws IOException { + String res = response.body().string(); + Log.w(TAG, res); + } + }); + }).start(); + } } diff --git a/app/src/main/java/com/hakodev/androiditunesapi/models/Artist.java b/app/src/main/java/com/hakodev/androiditunesapi/models/Response.java similarity index 96% rename from app/src/main/java/com/hakodev/androiditunesapi/models/Artist.java rename to app/src/main/java/com/hakodev/androiditunesapi/models/Response.java index f775b01..6c79748 100644 --- a/app/src/main/java/com/hakodev/androiditunesapi/models/Artist.java +++ b/app/src/main/java/com/hakodev/androiditunesapi/models/Response.java @@ -5,7 +5,7 @@ import com.google.gson.annotations.SerializedName; import java.util.List; -public class Artist { +public class Response { @SerializedName("resultCount") @Expose diff --git a/app/src/main/java/com/hakodev/androiditunesapi/util/Utils.java b/app/src/main/java/com/hakodev/androiditunesapi/util/Utils.java new file mode 100644 index 0000000..711fd58 --- /dev/null +++ b/app/src/main/java/com/hakodev/androiditunesapi/util/Utils.java @@ -0,0 +1,16 @@ +package com.hakodev.androiditunesapi.util; + +import java.io.UnsupportedEncodingException; +import java.net.URLEncoder; + +public class Utils { + public static String formatStringForURL(String text) { + String encodedText = ""; + try { + return URLEncoder.encode(text, "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return encodedText; + } +} diff --git a/app/src/main/res/drawable/default_artist.png b/app/src/main/res/drawable/default_artist.png new file mode 100644 index 0000000..75de4d8 Binary files /dev/null and b/app/src/main/res/drawable/default_artist.png differ diff --git a/app/src/main/res/layout/activity_artists_list.xml b/app/src/main/res/layout/activity_artists_list.xml new file mode 100644 index 0000000..e5b5f35 --- /dev/null +++ b/app/src/main/res/layout/activity_artists_list.xml @@ -0,0 +1,39 @@ + + + + + + + + diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml deleted file mode 100644 index 64cf2d5..0000000 --- a/app/src/main/res/layout/activity_main.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - diff --git a/app/src/main/res/layout/artists_list_adapter.xml b/app/src/main/res/layout/artists_list_adapter.xml new file mode 100644 index 0000000..7a2f327 --- /dev/null +++ b/app/src/main/res/layout/artists_list_adapter.xml @@ -0,0 +1,34 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/menu/actionbar_search.xml b/app/src/main/res/menu/actionbar_search.xml deleted file mode 100644 index c7b5775..0000000 --- a/app/src/main/res/menu/actionbar_search.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index 616a44e..cc012d9 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -6,4 +6,5 @@ #111111 #ffffff #e4ded7 + #838383 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index efa5e36..752d499 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,5 +1,14 @@ Artist Vault - Buscar + Buscar artista + + + No tengo los permisos necesarios para funcionar + + + Error en la conexión + + + Imágen del artista diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index 08fc461..e8ff1bf 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -9,6 +9,7 @@ @color/colorBackground @color/colorText @color/colorTextSecondary + @color/colorHintText