diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index 4792143db71833e7bd9bb1dee55c426dbf8404c5..a9661ec41333a01bfa190abad5a90ac3c73868c9 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -1,18 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> <component name="deploymentTargetDropDown"> - <targetSelectedWithDropDown> - <Target> - <type value="QUICK_BOOT_TARGET" /> - <deviceKey> - <Key> - <type value="VIRTUAL_DEVICE_PATH" /> - <value value="$USER_HOME$/.android/avd/Pixel_4a_API_30.avd" /> - </Key> - </deviceKey> - </Target> - </targetSelectedWithDropDown> - <timeTargetWasSelectedWithDropDown value="2022-03-12T17:07:19.071915Z" /> <multipleDevicesSelectedInDropDown value="true" /> <targetsSelectedWithDialog> <Target> diff --git a/.idea/gradle.xml b/.idea/gradle.xml index e9969a1c287d5e9aa14e37d39e99dc13b313c247..7b46144d886271955d8b63fc9240c373129b12d9 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -14,7 +14,6 @@ <option value="$PROJECT_DIR$/app" /> </set> </option> - <option name="resolveModulePerSourceSet" value="false" /> </GradleProjectSettings> </option> </component> diff --git a/.idea/misc.xml b/.idea/misc.xml index 3f77e19ba36220326829ae6cbc9061b3e836acf6..c64596956dba7d474158f7a6897d8dafdff3d2b7 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -20,6 +20,7 @@ <entry key="app/src/main/res/layout-sw350dp/activity_feedback.xml" value="0.3765625" /> <entry key="app/src/main/res/layout-sw350dp/blog_post_view.xml" value="0.3765625" /> <entry key="app/src/main/res/layout-sw350dp/content.xml" value="0.3707692307692308" /> + <entry key="app/src/main/res/layout-sw350dp/substitution.xml" value="0.375" /> <entry key="app/src/main/res/layout-w1080dp/content.xml" value="0.35703125" /> <entry key="app/src/main/res/layout-w320dp/content.xml" value="0.75" /> <entry key="app/src/main/res/layout/activity_about.xml" value="0.75" /> @@ -39,9 +40,10 @@ <entry key="app/src/main/res/layout/activity_main2.xml" value="0.2368659420289855" /> <entry key="app/src/main/res/layout/activity_website.xml" value="0.35778985507246375" /> <entry key="app/src/main/res/layout/addinfo.xml" value="0.348731884057971" /> - <entry key="app/src/main/res/layout/blog_activity_details.xml" value="0.9" /> - <entry key="app/src/main/res/layout/blog_content.xml" value="0.1" /> + <entry key="app/src/main/res/layout/blog_activity_details.xml" value="0.5638888888888889" /> + <entry key="app/src/main/res/layout/blog_content.xml" value="0.67" /> <entry key="app/src/main/res/layout/blog_post_view.xml" value="0.67" /> + <entry key="app/src/main/res/layout/blogcomment.xml" value="1.0133333333333334" /> <entry key="app/src/main/res/layout/content.xml" value="0.67" /> <entry key="app/src/main/res/layout/dialog_update_news.xml" value="0.3765625" /> <entry key="app/src/main/res/layout/hgktube_video.xml" value="0.3591485507246377" /> @@ -53,7 +55,7 @@ <entry key="app/src/main/res/layout/menu/share_menu.xml" value="0.7255639097744361" /> <entry key="app/src/main/res/layout/nav_header.xml" value="0.29483695652173914" /> <entry key="app/src/main/res/layout/settings_activity.xml" value="0.24114583333333334" /> - <entry key="app/src/main/res/layout/substitution.xml" value="0.33" /> + <entry key="app/src/main/res/layout/substitution.xml" value="0.9" /> <entry key="app/src/main/res/menu/nav_menu.xml" value="0.26979166666666665" /> <entry key="app/src/main/res/menu/search_menu.xml" value="0.75" /> <entry key="app/src/main/res/menu/share_menu.xml" value="0.53125" /> diff --git a/app/build.gradle b/app/build.gradle index ed7fc93558d6f342bfdf69bd70759497e12359e7..ac9a483929210d3f933758240b0e0ea67317016b 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -9,8 +9,8 @@ android { applicationId "de.kleinhti.hgkapp" minSdk 21 targetSdk 30 - versionCode 13 - versionName '1.0.0' + versionCode 16 + versionName '1.0.3' testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" signingConfig signingConfigs.debug diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index d2ff773957a9e2c0a1f0649a8e13425f5b77afad..48432c8a3aee8bcc3b9a41f904af3bd43e9abc97 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -11,8 +11,8 @@ "type": "SINGLE", "filters": [], "attributes": [], - "versionCode": 12, - "versionName": "Alpha 0.2.1", + "versionCode": 16, + "versionName": "1.0.3", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 56a69b99ed1168e1bc2664a7ef4059161bcca57a..9d664642060d97c968083ca1e140ac6f6d84bcf9 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,9 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="de.kleinhti.hgkapp" - android:versionCode="13" + android:versionCode="16" android:versionCodeMajor="1" - android:versionName="1.0.0"> + android:versionName="1.0.3"> <uses-permission android:name="android.permission.INTERNET"/> diff --git a/app/src/main/java/de/kleinhti/hgkapp/MainActivity.java b/app/src/main/java/de/kleinhti/hgkapp/MainActivity.java index f5facc1fa560c508266ef4854a3a8ff2e3ffaf67..efd14e02c2d65b98866f3987e5369dfabf0d45aa 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/MainActivity.java +++ b/app/src/main/java/de/kleinhti/hgkapp/MainActivity.java @@ -82,8 +82,8 @@ public class MainActivity extends AppCompatActivity implements View.OnClickListe registerListeners(); /**Registers required listeners for elements in MainActivity*/ //updateApplication(); - retrievePlanData(); new Update().execute(); + retrievePlanData(); new Changelog(this).checkForLastChangelog(); } diff --git a/app/src/main/java/de/kleinhti/hgkapp/SettingsActivity.java b/app/src/main/java/de/kleinhti/hgkapp/SettingsActivity.java index eba9e168d5ea759d7265c473ac3756dacbb74a1d..57d3d65aded525d6322e7f2e030aa747e1c08c57 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/SettingsActivity.java +++ b/app/src/main/java/de/kleinhti/hgkapp/SettingsActivity.java @@ -17,6 +17,7 @@ import androidx.preference.PreferenceFragmentCompat; import androidx.preference.PreferenceManager; import de.kleinhti.hgkapp.utils.Changelog; +import de.kleinhti.hgkapp.utils.Settings; import de.kleinhti.hgkapp.utils.ThemeHandler; import de.kleinhti.hgkapp.utils.Updater; diff --git a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogActivity.java b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogActivity.java index e0fb3c0c11e7e48edbc40d5196a6b6ea7ee5c615..c447872eab9468af6f394826e579e5b6b4439028 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogActivity.java +++ b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogActivity.java @@ -39,7 +39,7 @@ public class BlogActivity extends AppCompatActivity { GridLayoutManager manager = new GridLayoutManager(this, 1); post_list.setLayoutManager(manager); - adapter = new PostsAdapter(posts); + adapter = new PostsAdapter(posts, getApplicationContext()); post_list.setAdapter(adapter); new Blog().execute(); @@ -47,7 +47,7 @@ public class BlogActivity extends AppCompatActivity { public void updatePostList() { adapter.notifyDataSetChanged(); - adapter = new PostsAdapter(posts); + adapter = new PostsAdapter(posts, getApplicationContext()); post_list.setAdapter(adapter); } diff --git a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogComment.java b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogComment.java new file mode 100644 index 0000000000000000000000000000000000000000..ef1a754f76c6c93ddf6aec96fbbe6b42f2e514a7 --- /dev/null +++ b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogComment.java @@ -0,0 +1,41 @@ +package de.kleinhti.hgkapp.humboldtblog; + +public class BlogComment { + + private String author; + private String text; + private String date; + private String avatar_url; + + public String getAuthor() { + return author; + } + + public void setAuthor(String author) { + this.author = author; + } + + public String getText() { + return text; + } + + public void setText(String text) { + this.text = text; + } + + public String getDate() { + return date; + } + + public void setDate(String date) { + this.date = date; + } + + public String getAvatar_url() { + return avatar_url; + } + + public void setAvatar_url(String avatar_url) { + this.avatar_url = avatar_url; + } +} diff --git a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogHandler.java b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogHandler.java index d3e6df0835be530fb9718eb248b9cada42adcb20..9dfce71618f68f2852f8952a9260112ad170239c 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogHandler.java +++ b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/BlogHandler.java @@ -15,6 +15,7 @@ import java.util.HashMap; import de.kleinhti.hgkapp.http.HTTP; import de.kleinhti.hgkapp.http.Routes; +import de.kleinhti.hgkapp.objects.Response; public class BlogHandler { @@ -27,6 +28,7 @@ public class BlogHandler { /** * Retrieves all authors from server and returns them as HashMap to get the authors name by his id + * * @return HashMap<authors id, authors name> */ private HashMap getAuthors() { @@ -48,12 +50,12 @@ public class BlogHandler { /** * Retrieves the previewimageurl of a post - * @param object (post) + * * @return String (url) */ - private String getPictureUrl(JSONObject object) { + public String getPictureUrl(String url) { try { - JSONObject response = new JSONObject(HTTP.request(object.getJSONObject("_links").getJSONArray("wp:featuredmedia").getJSONObject(0).getString("href"), "", "", "GET", null, con).response); + JSONObject response = new JSONObject(HTTP.request(url, "", "", "GET", null, con).response); return response.getJSONObject("guid").getString("rendered"); } catch (JSONException e) { Log.d("Tag", "Kein Bild vorhanden.."); @@ -66,6 +68,7 @@ public class BlogHandler { /** * Retrieves all posts from the server. (Only the recent x ones, defined by value in {@link de.kleinhti.hgkapp.SettingsActivity}) + * * @return ArrayList (all recent posts) */ public ArrayList getPosts() { @@ -83,11 +86,18 @@ public class BlogHandler { Post p = new Post(); JSONObject object_data = request.getJSONObject(i); + p.setPostID(Integer.parseInt(object_data.getString("id"))); p.setDate(object_data.getString("date")); p.setTitle(object_data.getJSONObject("title").getString("rendered")); p.setContent(object_data.getJSONObject("content").getString("rendered")); p.setAuthor((String) authors.get(object_data.getString("author"))); - p.setImageurl(getPictureUrl(object_data)); + if (i <= 2) { + if(object_data.getJSONObject("_links").has("wp:featuredmedia")) + p.setImageurl(getPictureUrl(object_data.getJSONObject("_links").getJSONArray("wp:featuredmedia").getJSONObject(0).getString("href"))); + } + else if (object_data.getJSONObject("_links").has("wp:featuredmedia")) + p.setImageurl(object_data.getJSONObject("_links").getJSONArray("wp:featuredmedia").getJSONObject(0).getString("href")); + else p.setImageurl(""); p.setShareUrl(object_data.getString("link")); Log.d("Blog", p.getAuthor() + " " + p.getTitle()); @@ -102,4 +112,30 @@ public class BlogHandler { } return null; } + + public ArrayList<BlogComment> getComments(int postID) { + + + ArrayList<BlogComment> blogComments = new ArrayList<>(); + try { + Response response = HTTP.request(Routes.BLOG_DOMAIN + "/wp/v2/comments/?post=" + postID, "", "", "GET", null, con); + JSONArray commentsArray = new JSONArray(response.response); + + for (int i = 0; i < commentsArray.length(); i++) { + JSONObject json = commentsArray.getJSONObject(i); + + BlogComment com = new BlogComment(); + com.setAuthor(json.getString("author_name")); + com.setText((json.getJSONObject("content")).getString("rendered")); + com.setDate(json.getString("date")); + com.setAvatar_url(json.getJSONObject("author_avatar_urls").getString("96")); + + blogComments.add(com); + } + + } catch (IOException | JSONException e) { + e.printStackTrace(); + } + return blogComments; + } } diff --git a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/CommentAdapter.java b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/CommentAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..6f6fba5f54415768ea07c1d706ab2a0a7904212b --- /dev/null +++ b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/CommentAdapter.java @@ -0,0 +1,71 @@ +package de.kleinhti.hgkapp.humboldtblog; + +import android.text.Html; +import android.util.Log; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +import com.squareup.picasso.Picasso; + +import java.util.ArrayList; + +import de.kleinhti.hgkapp.R; + +public class CommentAdapter extends RecyclerView.Adapter<CommentAdapter.ViewHolder> { + + private ArrayList<BlogComment> comments; + + public CommentAdapter(ArrayList comments) { + Log.d("Tag", "jup"); + this.comments = comments; + } + + @NonNull + @Override + public CommentAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View v = LayoutInflater.from(parent.getContext()).inflate((R.layout.blogcomment), parent, false); + + return new CommentAdapter.ViewHolder(v); + } + + @Override + public void onBindViewHolder(@NonNull CommentAdapter.ViewHolder holder, int position) { + + Log.d("Tag", "Bin bei" + position); + holder.author.setText(comments.get(position).getAuthor()); + holder.date.setText(DateFormatter.formatBlogDate(comments.get(position).getDate())); + holder.text.setText(Html.fromHtml(comments.get(position).getText())); + + Picasso.get().load(comments.get(position).getAvatar_url()).placeholder(R.drawable.blog_logo_500px).error(R.drawable.blog_logo_500px).centerCrop(20).resize(96, 96).into(holder.avatar); + + } + + @Override + public int getItemCount() { + return comments.size(); + } + + public class ViewHolder extends RecyclerView.ViewHolder { + + ImageView avatar; + TextView author; + TextView date; + TextView text; + View view; + + public ViewHolder(@NonNull View itemView) { + super(itemView); + view = itemView; + avatar = itemView.findViewById(R.id.blog_comment_avatar); + author = itemView.findViewById(R.id.blog_comment_author); + date = itemView.findViewById(R.id.blog_comment_date); + text = itemView.findViewById(R.id.blog_comment_text); + } + } +} diff --git a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Details.java b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Details.java index ffb12a7030f32e8afab1642b2a36b7d97c803da7..d9007768c48063f8e65740dc2221c0c3c83be7ef 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Details.java +++ b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Details.java @@ -1,7 +1,9 @@ package de.kleinhti.hgkapp.humboldtblog; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; +import android.os.AsyncTask; import android.os.Build; import android.os.Bundle; import android.text.Html; @@ -13,9 +15,13 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.annotation.RequiresApi; import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.GridLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import com.squareup.picasso.Picasso; +import java.util.ArrayList; + import de.kleinhti.hgkapp.R; public class Details extends AppCompatActivity { @@ -25,8 +31,14 @@ public class Details extends AppCompatActivity { TextView date_view; TextView content_view; + RecyclerView comment_list; + CommentAdapter adapter; + + private int postID; private String title; private String shareUrl; + private ArrayList<BlogComment> comments = new ArrayList<>(); + private Context con; @SuppressLint("NewApi") @RequiresApi(api = Build.VERSION_CODES.M) @@ -35,12 +47,16 @@ public class Details extends AppCompatActivity { super.onCreate(savedInstanceState); setContentView(R.layout.blog_activity_details); + con = this; + image_view = findViewById(R.id.blog_details_image); author_view = findViewById(R.id.blog_details_author); date_view = findViewById(R.id.blog_details_timestamp); content_view = findViewById(R.id.blog_details_text); + comment_list = findViewById(R.id.blog_comment_list); Intent data = getIntent(); + postID = data.getIntExtra("postID", 0); title = data.getStringExtra("title"); String content = data.getStringExtra("content"); String imageurl = data.getStringExtra("picture"); @@ -56,6 +72,13 @@ public class Details extends AppCompatActivity { author_view.setText(getString(R.string.blog_author) + ": " + author); date_view.setText(timestamp); Picasso.get().load(imageurl).placeholder(R.drawable.blog_logo_500px).error(R.drawable.blog_logo_500px).resize(400, 0).into(image_view); + + GridLayoutManager manager = new GridLayoutManager(this, 1); + comment_list.setLayoutManager(manager); + adapter = new CommentAdapter(comments); + comment_list.setAdapter(adapter); + + new Comments().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } @@ -70,15 +93,32 @@ public class Details extends AppCompatActivity { if (item.getItemId() == android.R.id.home) { onBackPressed(); } else if (item.getItemId() == R.id.app_bar_share) { - shareArticel(); + shareArticle(); } return super.onOptionsItemSelected(item); } - private void shareArticel() { + private void shareArticle() { Intent shareIntent = new Intent(Intent.ACTION_SEND); shareIntent.setType("text/plain"); shareIntent.putExtra(Intent.EXTRA_TEXT, shareUrl + "\n\n" + title); startActivity(Intent.createChooser(shareIntent, "Wähle aus, wie Du teilen möchtest")); } + + private class Comments extends AsyncTask{ + + @Override + protected Object doInBackground(Object[] objects) { + comments = new BlogHandler(con).getComments(postID); + return null; + } + + @Override + protected void onPostExecute(Object o) { + adapter = new CommentAdapter(comments); + comment_list.setAdapter(adapter); + adapter.notifyDataSetChanged(); + super.onPostExecute(o); + } + } } \ No newline at end of file diff --git a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Post.java b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Post.java index 681e744e31c7cfbedaf6adcfe9f8393c172a6c52..4e85bae57ccd20d92659933dbb55fb51b304ead4 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Post.java +++ b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/Post.java @@ -8,6 +8,15 @@ public class Post { private String imageurl; private String author; private String shareUrl; + private int postID; + + public int getPostID() { + return postID; + } + + public void setPostID(int postID) { + this.postID = postID; + } public String getShareUrl() { return shareUrl; diff --git a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/PostsAdapter.java b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/PostsAdapter.java index f81aeafae887e509d41ed483a07788953ffe009f..b61438a92c4815bc61cfd6759a1d0976f5b96b27 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/PostsAdapter.java +++ b/app/src/main/java/de/kleinhti/hgkapp/humboldtblog/PostsAdapter.java @@ -1,7 +1,9 @@ package de.kleinhti.hgkapp.humboldtblog; import android.annotation.SuppressLint; +import android.content.Context; import android.content.Intent; +import android.os.AsyncTask; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -14,6 +16,7 @@ import androidx.recyclerview.widget.RecyclerView; import com.squareup.picasso.Picasso; +import java.util.HashMap; import java.util.List; import de.kleinhti.hgkapp.R; @@ -21,9 +24,16 @@ import de.kleinhti.hgkapp.R; public class PostsAdapter extends RecyclerView.Adapter<PostsAdapter.ViewHolder> { List<Post> all_posts; + Context con; + AsyncTask asyncTask; - public PostsAdapter(List<Post> all_posts){ + private HashMap<Integer, String> imageUrls = new HashMap(); + + public PostsAdapter(List<Post> all_posts, Context con) { this.all_posts = all_posts; + this.con = con; + asyncTask = new Picture(); + asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR); } @@ -42,7 +52,11 @@ public class PostsAdapter extends RecyclerView.Adapter<PostsAdapter.ViewHolder> holder.post_title.setText(all_posts.get(position).getTitle()); holder.post_author.setText("Autor: " + all_posts.get(position).getAuthor()); holder.post_timestamp.setText(DateFormatter.formatBlogDate(all_posts.get(position).getDate())); - Picasso.get().load(all_posts.get(position).getImageurl()).placeholder(R.drawable.blog_logo_500px).error(R.drawable.blog_logo_500px).resize(400, 0).into(holder.post_image); + + String imageURL = imageUrls.get(position); + if (position<=2) + imageURL = all_posts.get(position).getImageurl(); + Picasso.get().load(imageURL).placeholder(R.drawable.blog_logo_500px).error(R.drawable.blog_logo_500px).resize(400, 0).into(holder.post_image); //handle clicks on posts @@ -51,6 +65,7 @@ public class PostsAdapter extends RecyclerView.Adapter<PostsAdapter.ViewHolder> @Override public void onClick(View v) { Intent i = new Intent(v.getContext(), Details.class); + i.putExtra("postID", all_posts.get(position).getPostID()); i.putExtra("title", all_posts.get(position).getTitle()); i.putExtra("content", all_posts.get(position).getContent()); i.putExtra("picture", all_posts.get(position).getImageurl()); @@ -63,14 +78,12 @@ public class PostsAdapter extends RecyclerView.Adapter<PostsAdapter.ViewHolder> } - - @Override public int getItemCount() { return all_posts.size(); } - public class ViewHolder extends RecyclerView.ViewHolder{ + public class ViewHolder extends RecyclerView.ViewHolder { ImageView post_image; TextView post_title; @@ -88,4 +101,20 @@ public class PostsAdapter extends RecyclerView.Adapter<PostsAdapter.ViewHolder> post_timestamp = itemView.findViewById(R.id.post_timestamp); } } + + private class Picture extends AsyncTask { + + @Override + protected Object doInBackground(Object[] objects) { + Log.d("Tag", String.valueOf(all_posts.size())); + for (int i = 6; i < all_posts.size(); i++) { + Log.d("Tag", "Bin bei" + i); + if (all_posts.get(i).getImageurl() != "") + imageUrls.put(i, new BlogHandler(con).getPictureUrl(all_posts.get(i).getImageurl())); + all_posts.get(i).setImageurl(imageUrls.get(i)); + } + return null; + } + } + } diff --git a/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanBuilder.java b/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanBuilder.java index d9514d69ec28346f3e5f93196402011fb439aa50..4da0b1b2bc559e4d135026b2482dfed4a272914b 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanBuilder.java +++ b/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanBuilder.java @@ -96,6 +96,7 @@ public class PlanBuilder { Settings settings = new Settings(con); + substitutions = PlanSort.sortSubstitutionsByLessons(substitutions); if (settings.getBoolean("settings_general_clean_plan")) substitutions = PlanSort.removeUselessSubstitution(substitutions); if (type.equals(Plan.USER_TYPE.TEACHER) & settings.getBoolean("settings_general_sort_plan")) diff --git a/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanSort.java b/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanSort.java index 855e633b2c0b6f8faa173124077394eb9ae9b9c9..41d58ae47482cc60cbe834610d6845a82a5ca92b 100644 --- a/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanSort.java +++ b/app/src/main/java/de/kleinhti/hgkapp/utils/plan/PlanSort.java @@ -1,9 +1,14 @@ package de.kleinhti.hgkapp.utils.plan; import android.annotation.SuppressLint; +import android.os.Build; import android.util.Log; +import androidx.annotation.RequiresApi; + import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; import de.kleinhti.hgkapp.objects.Substitution; @@ -12,6 +17,18 @@ public class PlanSort { private static final String NO_CLASS_ENTRY = "null"; private static final String NO_TEXT_ENTRY = "[für unbekannte Gruppe]"; + @RequiresApi(api = Build.VERSION_CODES.N) + public static ArrayList sortSubstitutionsByLessons(ArrayList<Substitution> substitutions) { + ArrayList<Substitution> subs = substitutions; + try { + Collections.sort(subs, Comparator.comparingInt(o -> retrieveLessonfromString(o.lesson))); + } catch (Exception e) { + e.printStackTrace(); + Log.d("Tag", "Mal wieder eine Stunde, die ein komisches Element enthält.."); + } + return subs; + } + /** * Removes weird and unnecessary substitutions * @@ -23,7 +40,7 @@ public class PlanSort { for (int i = 0; i < substitutions.size(); i++) { Substitution sub = substitutions.get(i); Log.d("Tag", sub.text + sub.text.length() + " " + NO_TEXT_ENTRY.length()); - if ((sub.cls !=(NO_CLASS_ENTRY) || ((!sub.text.contains(NO_TEXT_ENTRY)) || !(sub.text.length() <= NO_TEXT_ENTRY.length() + 2)) && !sub.text.isEmpty())) + if ((sub.cls != (NO_CLASS_ENTRY) || ((!sub.text.contains(NO_TEXT_ENTRY)) || !(sub.text.length() <= NO_TEXT_ENTRY.length() + 2)) && !sub.text.isEmpty())) cleaned_substitutions.add(sub); } return cleaned_substitutions; @@ -52,4 +69,12 @@ public class PlanSort { favourite_substitutions.add(sorted_substitutions.get(i)); return favourite_substitutions; } + + private static int retrieveLessonfromString(String str) { + if (str.contains("/")) + return Integer.parseInt(str.split("/")[0]); + else if (str.contains("-")) + return Integer.parseInt(str.split("-")[0]); + return Integer.parseInt(str); + } } diff --git a/app/src/main/res/layout-sw350dp/substitution.xml b/app/src/main/res/layout-sw350dp/substitution.xml new file mode 100644 index 0000000000000000000000000000000000000000..4564840fd7018c233e8abf59f4cc7c2758c11162 --- /dev/null +++ b/app/src/main/res/layout-sw350dp/substitution.xml @@ -0,0 +1,65 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginBottom="1dp" + android:background="@drawable/round_background_substitutions" + android:minHeight="50dp"> + + <TextView + android:id="@+id/sub_lesson" + android:layout_width="47dp" + android:layout_height="wrap_content" + android:layout_marginStart="16dp" + android:elegantTextHeight="false" + android:gravity="center" + android:minHeight="40dp" + android:text="1" + android:textSize="16sp" + android:textStyle="bold" + app:layout_constrainedHeight="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/sub_class" + android:layout_width="60dp" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:elegantTextHeight="false" + android:gravity="center" + android:minHeight="40dp" + android:text="1a" + android:textSize="16sp" + android:textStyle="bold" + app:layout_constrainedHeight="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toEndOf="@+id/sub_lesson" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/sub_text" + android:layout_width="253dp" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:layout_marginEnd="16dp" + android:elegantTextHeight="false" + android:gravity="center_vertical" + android:minHeight="40dp" + android:text="Hier passiert nix.." + android:textSize="16sp" + android:textStyle="bold" + app:layout_constrainedHeight="true" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintHorizontal_bias="0.0" + app:layout_constraintStart_toEndOf="@+id/sub_class" + app:layout_constraintTop_toTopOf="parent" /> +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/blog_activity_details.xml b/app/src/main/res/layout/blog_activity_details.xml index 0fa62fafb353ff93a35bf838cad2c86751bd3735..0d27d716162706c26353736ca77d3be941a6b7e3 100644 --- a/app/src/main/res/layout/blog_activity_details.xml +++ b/app/src/main/res/layout/blog_activity_details.xml @@ -35,6 +35,7 @@ android:id="@+id/blog_details_author" android:layout_width="wrap_content" android:layout_height="wrap_content" + android:layout_marginStart="4dp" android:text="TextView" android:textColor="@color/colorFontPrimary" android:textStyle="bold" @@ -47,6 +48,7 @@ android:id="@+id/blog_details_timestamp" android:layout_width="wrap_content" android:layout_height="match_parent" + android:layout_marginEnd="4dp" android:text="TextView" android:textAlignment="textEnd" android:textColor="@color/colorFontPrimary" @@ -55,15 +57,39 @@ app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" app:layout_constraintVertical_bias="0.0" /> - </androidx.constraintlayout.widget.ConstraintLayout> - <TextView - android:id="@+id/blog_details_text" - android:layout_width="match_parent" - android:layout_height="wrap_content" - android:layout_marginTop="10dp" - android:text="TextView" - android:textColor="@color/colorFontPrimary" /> + <TextView + android:id="@+id/blog_details_text" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginStart="4dp" + android:layout_marginTop="8dp" + android:layout_marginEnd="4dp" + android:text="TextView" + android:textColor="@color/colorFontPrimary" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/blog_details_author" /> + + <TextView + android:id="@+id/textView" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginTop="16dp" + android:text="Kommentare" + android:textStyle="bold" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/blog_details_text" /> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/blog_comment_list" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="8dp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/textView" /> + + </androidx.constraintlayout.widget.ConstraintLayout> </LinearLayout> </ScrollView> diff --git a/app/src/main/res/layout/blogcomment.xml b/app/src/main/res/layout/blogcomment.xml new file mode 100644 index 0000000000000000000000000000000000000000..283f3212a386fcab25138adafda62b3f348b9afc --- /dev/null +++ b/app/src/main/res/layout/blogcomment.xml @@ -0,0 +1,48 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <ImageView + android:id="@+id/blog_comment_avatar" + android:layout_width="79dp" + android:layout_height="77dp" + android:layout_marginBottom="16dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + tools:srcCompat="@tools:sample/avatars" /> + + <TextView + android:id="@+id/blog_comment_text" + android:layout_width="197dp" + android:layout_height="51dp" + android:layout_marginStart="8dp" + android:layout_marginTop="8dp" + android:text="TextView" + app:layout_constraintStart_toEndOf="@+id/blog_comment_avatar" + app:layout_constraintTop_toBottomOf="@+id/blog_comment_date" /> + + <TextView + android:id="@+id/blog_comment_date" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginEnd="8dp" + android:text="TextView" + android:textStyle="bold" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <TextView + android:id="@+id/blog_comment_author" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_marginStart="8dp" + android:text="TextView" + android:textStyle="bold" + app:layout_constraintStart_toEndOf="@+id/blog_comment_avatar" + app:layout_constraintTop_toTopOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/content.xml b/app/src/main/res/layout/content.xml index fdc9d035195aaba2cce811d4eb114f4034eeca7d..c292eb1ba008b29c97b87350ff281aa1d71cb859 100644 --- a/app/src/main/res/layout/content.xml +++ b/app/src/main/res/layout/content.xml @@ -104,7 +104,7 @@ <androidx.recyclerview.widget.RecyclerView android:id="@+id/vplan_list" android:layout_width="match_parent" - android:layout_height="461dp" + android:layout_height="wrap_content" android:layout_marginTop="1dp" app:layout_constrainedHeight="true" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/substitution.xml b/app/src/main/res/layout/substitution.xml index 2e77b2340f34aa863a5ef2c99ad46e100e4f1423..13d5d2b771199dcd6965ebf77242f88c582b348a 100644 --- a/app/src/main/res/layout/substitution.xml +++ b/app/src/main/res/layout/substitution.xml @@ -12,7 +12,7 @@ android:id="@+id/sub_lesson" android:layout_width="47dp" android:layout_height="wrap_content" - android:layout_marginStart="8dp" + android:layout_marginStart="16dp" android:elegantTextHeight="false" android:gravity="center" android:minHeight="40dp" @@ -30,6 +30,7 @@ android:id="@+id/sub_class" android:layout_width="60dp" android:layout_height="wrap_content" + android:layout_marginStart="8dp" android:elegantTextHeight="false" android:gravity="center" android:minHeight="40dp" @@ -45,10 +46,10 @@ <TextView android:id="@+id/sub_text" - android:layout_width="286dp" + android:layout_width="156dp" android:layout_height="wrap_content" android:layout_marginStart="8dp" - android:layout_marginEnd="8dp" + android:layout_marginEnd="24dp" android:elegantTextHeight="false" android:gravity="center_vertical" android:minHeight="40dp" diff --git a/app/src/main/res/raw/changelog.txt b/app/src/main/res/raw/changelog.txt index f0c6815c1eac5510a5a9be95e5871a16dc4c9238..816deaca16b03bc7c47713c875b8da1161dd89c7 100644 --- a/app/src/main/res/raw/changelog.txt +++ b/app/src/main/res/raw/changelog.txt @@ -1,3 +1,12 @@ +<h4>Version 1.0.3</h4> +<li>Hotfix für Crash der App direkt nach dem Start +<h4>Version 1.0.2</h4> +<li>Fehler bei der Sortierung der Stunden behoben +<h3>Version 1.0.1</h3> +<li>Vertretungen werden nun nach Stunden sortiert +<li>Anpassungen an der Darstellung der Vertretungen auf kleineren Geräten +<li>Kommentare werden jetzt in #umboldt angezeigt +<li>Massive Performance- und appinterne Verbesserungen <h3>Version 1.0.0</h3> <li>Erster Stable-Release - Veröffentlichung der App <h3>Version 0.2.1</h3> diff --git a/build.gradle b/build.gradle index f3204131d5366a68be0a8282764eede4d246a165..3f78b950158fbd9585396f2fd001c293cc4f3ee9 100644 --- a/build.gradle +++ b/build.gradle @@ -5,7 +5,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.1.2' + classpath 'com.android.tools.build:gradle:7.1.3' // NOTE: Do not place your application dependencies here; they belong // in the individual module build.gradle files