From 231fe6e41265848e20e6d59f282db5f5b44fb8c5 Mon Sep 17 00:00:00 2001 From: "HAKO-PC\\Hako" Date: Sat, 30 Dec 2017 12:20:44 -0300 Subject: [PATCH] + Permissions manager + Networking implementation + Design for the ArtistsListActivity - Search icon on the Actionbar (replaced with an EditText) --- app/build.gradle | 8 +- app/src/main/AndroidManifest.xml | 6 +- .../androiditunesapi/AndroidItunesAPI.java | 23 ++--- .../activities/ArtistListActivity.java | 92 +++++++++++++++--- .../models/{Artist.java => Response.java} | 2 +- .../hakodev/androiditunesapi/util/Utils.java | 16 +++ app/src/main/res/drawable/default_artist.png | Bin 0 -> 25793 bytes .../main/res/layout/activity_artists_list.xml | 39 ++++++++ app/src/main/res/layout/activity_main.xml | 18 ---- .../main/res/layout/artists_list_adapter.xml | 34 +++++++ app/src/main/res/menu/actionbar_search.xml | 10 -- app/src/main/res/values/colors.xml | 1 + app/src/main/res/values/strings.xml | 11 ++- app/src/main/res/values/styles.xml | 1 + app/src/main/res/xml/backup_rules.xml | 4 + 15 files changed, 201 insertions(+), 64 deletions(-) rename app/src/main/java/com/hakodev/androiditunesapi/models/{Artist.java => Response.java} (96%) create mode 100644 app/src/main/java/com/hakodev/androiditunesapi/util/Utils.java create mode 100644 app/src/main/res/drawable/default_artist.png create mode 100644 app/src/main/res/layout/activity_artists_list.xml delete mode 100644 app/src/main/res/layout/activity_main.xml create mode 100644 app/src/main/res/layout/artists_list_adapter.xml delete mode 100644 app/src/main/res/menu/actionbar_search.xml create mode 100644 app/src/main/res/xml/backup_rules.xml 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 0000000000000000000000000000000000000000..75de4d897816603716a33a2a0db6f25a0aa49561 GIT binary patch literal 25793 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 + + + + + + + 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